Compartir a través de


Dispositivos DirectInput y XUSB

El controlador para XUSB en Windows implementa la interfaz en modo kernel para la DLL XINPUT. Para proporcionar una buena experiencia para los títulos heredados que usan la API de directInput con el dispositivo de controlador común, el controlador también exporta una interfaz de clase de dispositivo de interfaz humana (HID), que se recoge en DirectInput. Elegimos la asignación de XUSB a HID en función del comportamiento típico en un conjunto de aplicaciones de juegos para la versión original de XINPUT y actualizamos la asignación de subtipos más recientes. En este tema se describe la asignación.

Dispositivo de interfaz humana (HID)

El estándar HID es un estándar del comité universal de bus serie (USB) propuesto originalmente por Microsoft para generalizar protocolos para dispositivos de entrada. Consta de un lenguaje de descripción de código de bytes y puede expresar controladores para juegos, ratones, joysticks, controles de limitación y rudder, y controladores de varios ejes. Dado que este estándar está tan generalizado, es posible que tenga dificultades para escribir software que consuma la entrada de dispositivos arbitrarios. Por lo tanto, para el DIRECTInput API centrada en el juego, desarrollamos una subasignación específica de tipos para animar a los fabricantes de hardware a admitir a través de sus controladores.

Importante

También puede acceder a dispositivos de entrada HID a través de api RawInput y procesar informes de entrada a través de API hid de bajo nivel, pero los comentarios de vibración no funcionarán como con DirectInput.

Asignaciones

El controlador XUSB implementa tanto una interfaz de clase XUSB como una interfaz de clase HID para dispositivos con el fin de admitir el uso de XINPUT y DirectInput. Esta asignación se basa en la información del subtipo XUSB. El controlador implementa cuatro grupos distintos de asignaciones.

Subtipo XUSB Cartografía
XINPUT_DEVSUBTYPE_GAMEPAD (Subtipo 1) Controlador para juegos
XINPUT_DEVSUBTYPE_WHEEL (Subtipo 2) Rueda
XINPUT_DEVSUBTYPE_ARCADE_STICK (Subtipo 3) Arcade Stick/Arcade Pad
XINPUT_DEVSUBTYPE_FLIGHT_STICK (Subtipo 4) Stick piloto
XINPUT_DEVSUBTYPE_DANCE_PAD (Subtipo 5) Valor predeterminado para cualquier subtipo nuevo
XINPUT_DEVSUBTYPE_GUITAR (Subtipo 6) Guitarra
XINPUT_DEVSUBTYPE_GUITAR_ALTERNATE (Subtipo 7)
XINPUT_DEVSUBTYPE_DRUM_KIT (Subtipo 8)
XINPUT_DEVSUBTYPE_GUITAR_BASS (Subtipo 11)
XINPUT_DEVSUBTYPE_ARCADE_PAD (subtipo 19)

Nota

Las siguientes asignaciones HID son estáticas. Esto significa que incluso si el informe de funcionalidades del dispositivo indica que no se admite un botón o eje concretos, la asignación seguirá incluyándola, pero siempre notificará un valor fuera del estado o centro.

Controlador para juegos

Esta es la asignación predeterminada y está diseñada en torno a un controlador para juegos estándar y se expone como un Gamepad tipo de uso HID.

Control Nombre de uso de HID Página Uso Id. de uso
Stick izquierdo X, Y 0x01 0x30, 0x31
Stick derecho Rx, Ry 0x01 0x33, 0x34
Desencadenador izquierdo y desencadenador derecho Z* 0x01 0x32
D-Pad Arriba, Abajo, Izquierda, Derecha Hat Switch 0x01 0x39
Un Botón 1 0x09 0x01
B Botón 2 0x09 0x02
X Botón 3 0x09 0x03
Y Botón 4 0x09 0x04
LB (parachoques izquierdo) Botón 5 0x09 0x05
RB (parachoques derecho) Botón 6 0x09 0x06
ATRÁS Botón 7 0x09 0x07
EMPEZAR Botón 8 0x09 0x08
LSB (botón de stick izquierdo) Botón 9 0x09 0x09
RSB (botón derecho) Botón 10 0x09 0x0A

Nota

(*): Esto se combina para que Z muestre el comportamiento centrado esperado por la mayoría de los títulos para la rotación; esto significa que no es posible ver todos los valores posibles de combinación de desencadenadores a través de DirectInput y HID.

Arcade Stick/Arcade Pad

Esta es la asignación diseñada alrededor del controlador Arcade Stick y se expone como un Controlador para juegos tipo de uso HID. El Arcade Pad es muy parecido a un Stick Arcade, pero en un factor de forma más pequeño. Estos diseños reemplazan el desencadenador izquierdo analógico y el desencadenador derecho por botones digitales que informan del valor mínimo y máximo del eje.

Control Nombre de uso de HID Página Uso Id. de uso
D-Pad Arriba, Abajo, Izquierda, Derecha Hat Switch 0x01 0x39
Un Botón 1 0x09 0x01
B Botón 2 0x09 0x02
X Botón 3 0x09 0x03
Y Botón 4 0x09 0x04
LB (parachoques izquierdo) Botón 5 0x09 0x05
RB (parachoques derecho) Botón 6 0x09 0x06
ATRÁS Botón 7 0x09 0x07
EMPEZAR Botón 8 0x09 0x08
Desencadenador izquierdo Botón 9 0x09 0x09
Desencadenador derecho Botón 10 0x09 0x0A

Estos dispositivos pueden o no admitir controles adicionales, pero estos no se exponen mediante la asignación HID: Stick Izquierdo, Stick Derecho, LSB (botón de stick izquierdo) y RSB (botón de stick derecho).

Rueda

Esta asignación está diseñada en torno a una rueda de carreras y se expone como un Gamepad tipo de uso HID.

Control Nombre de uso de HID Página Uso Id. de uso
Rueda (Stick izquierdo X) X 0x01 0x30
Pedal acelerador (gatillo derecho) + Pedal de freno (gatillo izquierdo) Z* 0x01 0x32
D-Pad Arriba, Abajo, Izquierda, Derecha Hat Switch 0x01 0x39
Un Botón 1 0x09 0x01
B Botón 2 0x09 0x02
X Botón 3 0x09 0x03
Y Botón 4 0x09 0x04
LB (parachoques izquierdo) Botón 5 0x09 0x05
RB (parachoques derecho) Botón 6 0x09 0x06
LSB (botón de stick izquierdo) Botón 7 0x09 0x07
RSB (botón derecho) Botón 8 0x09 0x08
ATRÁS Botón 9 0x09 0x09
EMPEZAR Botón 10 0x09 0x0A

Nota

(*): Esto se combina para que Z muestre el comportamiento centrado esperado por la mayoría de los títulos para los controles de freno y acelerador; esto significa que no es posible ver todos los valores posibles de combinación de pedal a través de DirectInput.

Stick piloto

Esta asignación está diseñada alrededor de un stick de vuelo y se expone como un Joystick tipo de uso HID.

Control Nombre de uso Página Uso Id. de uso
Stick piloto (Stick izquierdo) X, Y 0x01 0x30, 0x31
Sombrero POV (stick derecho) Rx, Ry 0x01 0x33, 0x34
Limitación (desencadenador derecho) Z 0x01 0x32
Rudder (desencadenador izquierdo) Rz 0x01 0x35
D-Pad Arriba, Abajo, Izquierda, Derecha Hat Switch 0x01 0x39
Arma principal (A) Botón 1 0x09 0x01
Arma secundaria (B) Botón 2 0x09 0x02
X Botón 3 0x09 0x03
Y Botón 4 0x09 0x04
LB (parachoques izquierdo) Botón 5 0x09 0x05
RB (parachoques derecho) Botón 6 0x09 0x06
ATRÁS Botón 7 0x09 0x07
EMPEZAR Botón 8 0x09 0x08
LSB (botón de stick izquierdo) Botón 9 0x09 0x09
RSB (botón derecho) Botón 10 0x09 0x0A

Nota

Esto se basa en el diseño final de Flight Stick. Dado que esto difiere de las primeras definiciones de Flight Stick, muchos dispositivos tienen un conmutador de modo que admite el modelo antiguo frente al nuevo. Esta asignación supone que el nuevo modelo.