Compartilhar 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 a API DirectInput com o dispositivo controlador comum, o driver também exporta uma interface de classe HID (Dispositivo de Interface Humana), que será capturada 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 os subtipos mais recentes. Este tópico descreve o mapeamento.

Dispositivo de interface humana (HID)

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

Importante

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

Mapeamentos

O driver XUSB implementa uma interface de classe XUSB e uma interface de classe HID para dispositivos, a fim de dar suporte ao uso do XINPUT e DirectInput. Esse mapeamento é baseado em 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) Wheel
XINPUT_DEVSUBTYPE_ARCADE_STICK (Subtipo 3) Arcade stick/Arcade Pad
XINPUT_DEVSUBTYPE_FLIGHT_STICK (Subtipo 4) Manche 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 de HID a seguir são estáticos. Isso significa que, mesmo que o relatório de funcionalidades do dispositivo indique que não há suporte para um determinado botão ou eixo, o mapeamentos ainda o incluirá, mas sempre relatará um valor central ou de estado desligado.

Gamepad

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

Control Nome de uso do HID Página de Uso ID de uso
Stick Esquerdo X, Y 0x01 0x30, 0x31
Stick Direito Rx, Ry 0x01 0x33, 0x34
Gatilho Esquerdo + Gatilho Direito Z* 0x01 0x32
Botão direcional (D-pad) Cima, Baixo, Esquerda, Direita Hat Switch 0x01 0x39
A Botão 1 0x09 0x01
B Botão 2 0x09 0x02
X Botão 3 0x09 0x03
Y Botão 4 0x09 0x04
LB (botão superior esquerdo) Botão 5 0x09 0x05
RB (botão superior direito) Botão 6 0x09 0x06
BACK Botão 7 0x09 0x07
START Botão 8 0x09 0x08
LSB (direcional analógico esquerdo) Botão 9 0x09 0x09
RSB (direcional analógico direito) Botão 10 0x09 0x0A

Observação

(*): Isso é combinado para que o 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 do DirectInput e HID.

Arcade stick/Arcade Pad

Esse é o mapeamento projetado em torno do controlador Arcade stick e está exposto como um tipo de uso HID do Gamepad. O Arcade Pad é muito parecido com um Arcade stick, mas em um formato menor. Esses projetos substituem o Gatilho Esquerdo e o Gatilho Direito analógicos por botões digitais que relatam o valor mínimo e máximo do eixo.

Control Nome de uso do HID Página de Uso ID de uso
Botão direcional (D-pad) Cima, Baixo, Esquerda, Direita Hat Switch 0x01 0x39
A Botão 1 0x09 0x01
B Botão 2 0x09 0x02
X Botão 3 0x09 0x03
Y Botão 4 0x09 0x04
LB (botão superior esquerdo) Botão 5 0x09 0x05
RB (botão superior direito) Botão 6 0x09 0x06
BACK Botão 7 0x09 0x07
START 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 dar suporte a controles adicionais, mas eles não são expostos pelo mapeamento HID: Stick Esquerdo, Stick Direito, LSB (direcional analógico esquerdo) e RSB (direcional analógico direito).

Wheel

Esse mapeamento foi projetando em torno de um volante de corrida e está exposto como um tipo de uso HID de Gamepad.

Control Nome de uso do HID Página de Uso ID de uso
Roda (Left Stick X) X 0x01 0x30
Pedal do Acelerador (Gatilho Direito) + Pedal do Freio (Gatilho Esquerdo) Z* 0x01 0x32
Botão direcional (D-pad) Cima, Baixo, Esquerda, Direita Hat Switch 0x01 0x39
A Botão 1 0x09 0x01
B Botão 2 0x09 0x02
X Botão 3 0x09 0x03
Y Botão 4 0x09 0x04
LB (botão superior esquerdo) Botão 5 0x09 0x05
RB (botão superior direito) Botão 6 0x09 0x06
LSB (direcional analógico esquerdo) Botão 7 0x09 0x07
RSB (direcional analógico direito) Botão 8 0x09 0x08
BACK Botão 9 0x09 0x09
START Botão 10 0x09 0x0A

Observação

(*): Isso é combinado para que Z exiba o comportamento de centralização conforme 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 por meio de DirectInput.

Manche de Voo

Esse mapeamentos está projetando em torno de um manche de voo e está exposto como um tipo de uso HID de Joystick.

Control Nome de Uso Página de Uso ID de uso
Manche de Voo (Stick esquerdo) X, Y 0x01 0x30, 0x31
POV Hat (Stick Direito) Rx, Ry 0x01 0x33, 0x34
Limitação (gatilho direito) Z 0x01 0x32
Leme (Gatilho Esquerdo) Rz 0x01 0x35
Botão direcional (D-pad) Cima, Baixo, Esquerda, Direita Hat Switch 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 (botão superior esquerdo) Botão 5 0x09 0x05
RB (botão superior direito) Botão 6 0x09 0x06
BACK Botão 7 0x09 0x07
START Botão 8 0x09 0x08
LSB (direcional analógico esquerdo) Botão 9 0x09 0x09
RSB (direcional analógico direito) Botão 10 0x09 0x0A

Observação

Isso está baseado em um projetando final do Manche de Voo. Como isso difere das definições iniciais do Manche de Voo, muitos dispositivos têm uma alternância de modo que dá suporte ao modelo antigo versus o novo modelo. Esse mapeamento pressupõe o novo modelo.