Partilhar via


Dispositivos DirectInput e XUSB

O driver para XUSB no Windows implementa a interface de modo kernel para a DLL XINPUT. Para fornecer uma boa experiência para títulos herdados que usam o DirectInput API com o dispositivo controlador comum, o driver também exporta uma interface de classe HID (Human Interface Device), que é captada pelo DirectInput. Escolhemos o mapeamento de XUSB para HID com base no comportamento típico em um conjunto de aplicativos de jogos para a versão original do XINPUT e atualizamos o mapeamento para subtipos mais recentes. Este tópico descreve o mapeamento.

Dispositivo de Interface Humana (HID)

O padrão HID é um padrão do comitê do Universal Serial Bus (USB) originalmente proposto pela Microsoft para generalizar protocolos para dispositivos de entrada. Ele consiste em uma linguagem de descrição de código de bytes e pode expressar gamepads, mouses, joysticks, controles de acelerador e leme e controladores multieixo. Como esse padrão é tão generalizado, você pode ter dificuldade em escrever software que consuma entrada de dispositivos arbitrários. Portanto, para o DirectInput API centrado no jogo, desenvolvemos um submapeamento específico de tipos para incentivar os fabricantes de hardware a oferecer suporte por meio de seus drivers.

Importante

Você também pode acessar dispositivos de entrada HID por meio API RawInput e processar relatórios de entrada por meio de de API HID de baixo nível, mas o feedback de vibração não funcionará como com DirectInput.

Mapeamentos

O driver XUSB implementa uma interface de classe XUSB e uma interface de classe HID para dispositivos, a fim de suportar o uso de de entrada de XINPUT e DirectInput. Esse mapeamento é baseado nas informações do subtipo XUSB. O driver implementa quatro grupos distintos de mapeamentos.

Subtipo XUSB Mapeamento
XINPUT_DEVSUBTYPE_GAMEPAD (Subtipo 1) Gamepad
XINPUT_DEVSUBTYPE_WHEEL (Subtipo 2) Roda
XINPUT_DEVSUBTYPE_ARCADE_STICK (Subtipo 3) Vara Arcade/Arcade Pad
XINPUT_DEVSUBTYPE_FLIGHT_STICK (Subtipo 4) Vara de Voo
XINPUT_DEVSUBTYPE_DANCE_PAD (Subtipo 5) Padrão para qualquer novo subtipo
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)

Observação

Os mapeamentos HID a seguir são estáticos. Isso significa que, mesmo que o relatório de recursos do dispositivo indique que um determinado botão ou eixo não é suportado, o mapeamento ainda o incluirá, mas sempre relatará um valor de estado desativado ou central.

Gamepad

Este é o mapeamento padrão e é projetado em torno de um gamepad padrão, e é exposto como um Gamepad tipo de uso HID.

Controlo Nome de uso HID Página de Utilização ID de utilização
Vara Esquerda X, Y 0x01 0x30, 0x31
Vara direita Rx, Ry 0x01 0x33, 0x34
Gatilho esquerdo + gatilho direito Z* 0x01 0x32
D-Pad Up, Down, Esquerda, Direita Interruptor de chapéu 0x01 0x39
Um Botão 1 0x09 0x01
B Botão 2 0x09 0x02
X Botão 3 0x09 0x03
Y Botão 4 0x09 0x04
LB (para-choques esquerdo) Botão 5 0x09 0x05
RB (para-choques direito) Botão 6 0x09 0x06
VOLTAR Botão 7 0x09 0x07
INÍCIO Botão 8 0x09 0x08
LSB (botão do manípulo esquerdo) Botão 9 0x09 0x09
RSB (botão direito) Botão 10 0x09 0x0A

Observação

(*): Isso é combinado para que Z exiba o comportamento de centralização esperado pela maioria dos títulos para rotação; isso significa que não é possível ver todos os valores possíveis de combinação de gatilho por meio DirectInput e HID.

Vara Arcade/Arcade Pad

Este é o mapeamento projetado em torno do controlador Arcade Stick, e é exposto como um Gamepad tipo de uso HID. O Arcade Pad é muito parecido com um Arcade Stick, mas em um formato menor. Esses designs substituem o gatilho esquerdo analógico e o gatilho direito por botões digitais que informam o valor mínimo e máximo do eixo.

Controlo Nome de uso HID Página de Utilização ID de utilização
D-Pad Up, Down, Esquerda, Direita Interruptor de chapéu 0x01 0x39
Um Botão 1 0x09 0x01
B Botão 2 0x09 0x02
X Botão 3 0x09 0x03
Y Botão 4 0x09 0x04
LB (para-choques esquerdo) Botão 5 0x09 0x05
RB (para-choques direito) Botão 6 0x09 0x06
VOLTAR Botão 7 0x09 0x07
INÍCIO Botão 8 0x09 0x08
Gatilho esquerdo Botão 9 0x09 0x09
Gatilho direito Botão 10 0x09 0x0A

Esses dispositivos podem ou não suportar controles adicionais, mas eles não são expostos pelo mapeamento HID: Left Stick, Right Stick, LSB (botão left stick) e RSB (right stick button).

Roda

Este mapeamento é projetado em torno de um volante de corrida e é exposto como um Gamepad tipo de uso HID.

Controlo Nome de uso HID Página de Utilização ID de utilização
Roda (Vara Esquerda X) X 0x01 0x30
Pedal do acelerador (gatilho direito) + pedal do freio (gatilho esquerdo) Z* 0x01 0x32
D-Pad Up, Down, Esquerda, Direita Interruptor de chapéu 0x01 0x39
Um Botão 1 0x09 0x01
B Botão 2 0x09 0x02
X Botão 3 0x09 0x03
Y Botão 4 0x09 0x04
LB (para-choques esquerdo) Botão 5 0x09 0x05
RB (para-choques direito) Botão 6 0x09 0x06
LSB (botão do manípulo esquerdo) Botão 7 0x09 0x07
RSB (botão direito) Botão 8 0x09 0x08
VOLTAR Botão 9 0x09 0x09
INÍCIO Botão 10 0x09 0x0A

Observação

(*): Isso é combinado para que Z exiba o comportamento de centralização esperado pela maioria dos títulos para os controles de freio e acelerador; isso significa que não é possível ver todos os valores possíveis de combinação de pedais através DirectInput.

Vara de Voo

Esse mapeamento é projetado em torno de um manípulo de vôo e é exposto como um Joystick tipo de uso HID.

Controlo Nome de uso Página de Utilização ID de utilização
Vara de Voo (Vara Esquerda) X, Y 0x01 0x30, 0x31
Chapéu POV (Vara Direita) Rx, Ry 0x01 0x33, 0x34
Acelerador (Gatilho Direito) Z 0x01 0x32
Leme (Gatilho Esquerdo) RZ 0x01 0x35
D-Pad Up, Down, Esquerda, Direita Interruptor de chapéu 0x01 0x39
Arma primária (A) Botão 1 0x09 0x01
Arma secundária (B) Botão 2 0x09 0x02
X Botão 3 0x09 0x03
Y Botão 4 0x09 0x04
LB (para-choques esquerdo) Botão 5 0x09 0x05
RB (para-choques direito) Botão 6 0x09 0x06
VOLTAR Botão 7 0x09 0x07
INÍCIO Botão 8 0x09 0x08
LSB (botão do manípulo esquerdo) Botão 9 0x09 0x09
RSB (botão direito) Botão 10 0x09 0x0A

Observação

Isto é baseado no design final do Flight Stick. Como isso difere das definições iniciais do Flight Stick, muitos dispositivos têm um interruptor de modo que suporta o modelo antigo versus novo. Este mapeamento assume o novo modelo.