Compartilhar via


Dispositivos DirectInput e XUSB

O driver para XUSB no Windows implementa a interface do 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 é 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 Barramento Serial Universal (USB) originalmente proposto pela Microsoft para generalizar protocolos para dispositivos de entrada. Ele consiste em uma linguagem de descrição de código de byte e pode expressar gamepads, mouses, joysticks, controles de acelerador e leme e controladores de vários eixos. Como esse padrão é tão generalizado, você pode ter dificuldade para escrever um software que consome a entrada de dispositivos arbitrários. Portanto, para o DirectInput API centrada no jogo, desenvolvemos um subpasta 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 de de API rawInput e processar relatórios de entrada por meio de relatórios de entrada de baixo nível de API HID, mas os comentários de vibração não funcionarão como com 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 nas informações de subtipo do 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) Arcade Stick/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) Violão
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

Os mapeamentos 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 mapeamento ainda o incluirá, mas sempre relatará um valor de estado ou centro desativado.

Gamepad

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

Controle Nome de uso hid Página uso ID de uso
Vara Esquerda X, Y 0x01 0x30, 0x31
Pau direito Rx, Ry 0x01 0x33, 0x34
Gatilho esquerdo + gatilho à direita Z* 0x01 0x32
D-Pad Up, Down, Left, Right Comutador 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 (pára-choques esquerdo) Botão 5 0x09 0x05
RB (pára-choques à direita) Botão 6 0x09 0x06
VOLTAR Botão 7 0x09 0x07
COMEÇAR Botão 8 0x09 0x08
LSB (botão de vara esquerda) Botão 9 0x09 0x09
RSB (botão de vara direita) Botão 10 0x09 0x0A

Nota

(*): Isso é combinado para que Z exponha 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 de combinação de gatilho possíveis por meio de DirectInput e HID.

Arcade Stick/Arcade Pad

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

Controle Nome de uso hid Página uso ID de uso
D-Pad Up, Down, Left, Right Comutador 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 (pára-choques esquerdo) Botão 5 0x09 0x05
RB (pára-choques à direita) Botão 6 0x09 0x06
VOLTAR Botão 7 0x09 0x07
COMEÇAR Botão 8 0x09 0x08
Gatilho à esquerda Botão 9 0x09 0x09
Gatilho à direita Botão 10 0x09 0x0A

Esses dispositivos podem ou não dar suporte a controles adicionais, mas não são expostos pelo mapeamento hid: Left Stick, Right Stick, LSB (botão de vara esquerda) e RSB (botão de vara direita).

Roda

Esse mapeamento foi projetado em torno de uma roda de corrida e é exposto como um tipo de uso de HID gamepad.

Controle Nome de uso hid Página uso ID de uso
Roda (Left Stick X) X 0x01 0x30
Pedal do Acelerador (Gatilho à Direita) + Pedal de Freio (Gatilho à Esquerda) Z* 0x01 0x32
D-Pad Up, Down, Left, Right Comutador 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 (pára-choques esquerdo) Botão 5 0x09 0x05
RB (pára-choques à direita) Botão 6 0x09 0x06
LSB (botão de vara esquerda) Botão 7 0x09 0x07
RSB (botão de vara direita) Botão 8 0x09 0x08
VOLTAR Botão 9 0x09 0x09
COMEÇAR Botão 10 0x09 0x0A

Nota

(*): Isso é combinado para que Z exponha 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 pedal por meio de DirectInput.

Vara de Voo

Esse mapeamento foi projetado em torno de uma vara de voo e é exposto como um joystick tipo de uso HID.

Controle Nome de uso Página uso ID de uso
Flight Stick (Left Stick) X, Y 0x01 0x30, 0x31
Chapéu POV (pau direito) Rx, Ry 0x01 0x33, 0x34
Limitação (gatilho à direita) Z 0x01 0x32
Leme (gatilho esquerdo) Rz 0x01 0x35
D-Pad Up, Down, Left, Right Comutador 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 (pára-choques esquerdo) Botão 5 0x09 0x05
RB (pára-choques à direita) Botão 6 0x09 0x06
VOLTAR Botão 7 0x09 0x07
COMEÇAR Botão 8 0x09 0x08
LSB (botão de vara esquerda) Botão 9 0x09 0x09
RSB (botão de vara direita) Botão 10 0x09 0x0A

Nota

Isso é baseado no design final do Flight Stick. Como isso difere das definições anteriores do Flight Stick, muitos dispositivos têm uma opção de modo que dá suporte ao modelo antigo versus novo. Esse mapeamento pressupõe o novo modelo.