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.
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de