Appareils DirectInput et XUSB
Le pilote pour XUSB sous Windows implémente l’interface en mode noyau pour la DLL XINPUT. Pour offrir une bonne expérience pour les titres hérités qui utilisent l’API DirectInput avec le périphérique de contrôleur commun, le pilote exporte également une interface de classe Interface Homme-machine (HID), qui est récupérée par DirectInput. Nous avons choisi le mappage de XUSB à HID en fonction du comportement typique dans un ensemble d’applications de jeu pour la version XINPUT d’origine, et nous avons mis à jour le mappage pour les sous-types plus récents. Cette rubrique décrit le mappage.
Interface Homme-machine (HID)
La norme HID est une norme du comité USB (Universal Serial Bus) initialement proposée par Microsoft pour généraliser les protocoles pour les périphériques d’entrée. Il se compose d’un langage de description de code d’octets et peut exprimer des boîtiers de commande, des souris, des manettes de jeu, des contrôleurs d’accélération et de gouvernail et des contrôleurs multi-axes. Cette norme étant tellement généralisée, vous pouvez avoir des difficultés à écrire des logiciels qui consomment des entrées à partir d’appareils arbitraires. Par conséquent, pour l’API DirectInput centrée sur le jeu, nous avons développé un sous-mappage spécifique de types pour encourager les fabricants matériels à les prendre en charge par le biais de leurs pilotes.
Important
Vous pouvez également accéder aux périphériques d’entrée HID via l’API RawInput et traiter les rapports d’entrée via l’API HID de bas niveau, mais les retours de vibrations ne fonctionnent pas comme avec DirectInput.
Mappages
Le pilote XUSB implémente à la fois une interface de classe XUSB et une interface de classe HID pour les appareils afin de prendre en charge l’utilisation de XINPUT et DirectInput. Ce mappage est basé sur les informations de sous-type XUSB. Le pilote implémente quatre groupes distincts de mappages.
Sous-type XUSB | Mappage |
---|---|
XINPUT_DEVSUBTYPE_GAMEPAD (Sous-type 1) | Boîtier de commande |
XINPUT_DEVSUBTYPE_WHEEL (Sous-type 2) | Roulette |
XINPUT_DEVSUBTYPE_ARCADE_STICK (Sous-type 3) | Arcade Stick/Arcade Pad |
XINPUT_DEVSUBTYPE_FLIGHT_STICK (Sous-type 4) | Manche à balai |
XINPUT_DEVSUBTYPE_DANCE_PAD (Sous-type 5) | Valeur par défaut pour tout nouveau sous-type |
XINPUT_DEVSUBTYPE_GUITAR (Sous-type 6) | Guitare |
XINPUT_DEVSUBTYPE_GUITAR_ALTERNATE (Sous-type 7) | |
XINPUT_DEVSUBTYPE_DRUM_KIT (Sous-type 8) | |
XINPUT_DEVSUBTYPE_GUITAR_BASS (Sous-type 11) | |
XINPUT_DEVSUBTYPE_ARCADE_PAD (Sous-type 19) |
Remarque
Les mappages HID suivants sont statiques. Cela signifie que même si le rapport des fonctionnalités de l’appareil indique qu’un bouton ou un axe particulier n’est pas pris en charge, le mappage l’inclut toujours, mais signale toujours une valeur hors état ou centre.
Boîtier de commande
Il s’agit du mappage par défaut, conçu autour d’un boîtier de commande standard et exposé en tant que type d’utilisation HID de boîtier de commande.
Contrôler | Nom d’utilisation IHM | Page d’utilisation | ID d’utilisation |
---|---|---|---|
Stick gauche | X, Y | 0x01 | 0x30, 0x31 |
Manche droit | Rx, Ry | 0x01 | 0x33, 0x34 |
Déclencheur gauche + déclencheur droit | Z* | 0x01 | 0x32 |
D-Pad Haut, Bas, Gauche, Droit | Changement de chapeau | 0x01 | 0x39 |
A | Bouton 1 | 0x09 | 0x01 |
o | Bouton 2 | 0x09 | 0x02 |
X | Bouton 3 | 0x09 | 0x03 |
Y | Bouton 4 | 0x09 | 0x04 |
LB (pare-choc gauche) | Bouton 5 | 0x09 | 0x05 |
RB (pare-choc droit) | Bouton 6 | 0x09 | 0x06 |
RETOUR | Bouton 7 | 0x09 | 0x07 |
START | Bouton 8 | 0x09 | 0x08 |
LSB (bouton stick gauche) | Bouton 9 | 0x09 | 0x09 |
RSB (bouton stick droit) | Bouton 10 | 0x09 | 0x0A |
Remarque
(*) : Ceci est combiné afin que Z présente le comportement de centrage attendu par la plupart des titres pour la rotation ; cela signifie qu’il n’est pas possible de voir toutes les valeurs de combinaison de déclencheurs possibles via DirectInput et HID.
Arcade Stick/Arcade Pad
Il s’agit du mappage conçu autour du contrôleur Arcade Stick, exposé en tant que type d’utilisation HID de boîtier de commande. L’Arcade Pad est très similaire à un Stick Arcade, mais dans un facteur de forme plus petit. Ces conceptions remplacent le déclencheur gauche et le déclencheur droit analogiques par des boutons numériques qui signalent la valeur d’axe minimale et maximale.
Contrôler | Nom d’utilisation IHM | Page d’utilisation | ID d’utilisation |
---|---|---|---|
D-Pad Haut, Bas, Gauche, Droit | Changement de chapeau | 0x01 | 0x39 |
A | Bouton 1 | 0x09 | 0x01 |
o | Bouton 2 | 0x09 | 0x02 |
X | Bouton 3 | 0x09 | 0x03 |
Y | Bouton 4 | 0x09 | 0x04 |
LB (pare-choc gauche) | Bouton 5 | 0x09 | 0x05 |
RB (pare-choc droit) | Bouton 6 | 0x09 | 0x06 |
RETOUR | Bouton 7 | 0x09 | 0x07 |
START | Bouton 8 | 0x09 | 0x08 |
Déclencheur gauche | Bouton 9 | 0x09 | 0x09 |
Déclencheur droit | Bouton 10 | 0x09 | 0x0A |
Ces appareils peuvent ou non prendre en charge des contrôles supplémentaires, mais ils ne sont pas exposés par le mappage HID : Stick gauche, Stick droit, LSB (bouton stick gauche) et RSB (bouton stick droit).
Roulette
Ce mappage est conçu autour d’un volant de course et est exposé en tant que type d’utilisation HID de boîtier de commande.
Contrôler | Nom d’utilisation IHM | Page d’utilisation | ID d’utilisation |
---|---|---|---|
Volant (stick gauche X) | X | 0x01 | 0x30 |
Pédale d’accélérateur (déclencheur droit) + pédale de frein (déclencheur gauche) | Z* | 0x01 | 0x32 |
D-Pad Haut, Bas, Gauche, Droit | Changement de chapeau | 0x01 | 0x39 |
A | Bouton 1 | 0x09 | 0x01 |
o | Bouton 2 | 0x09 | 0x02 |
X | Bouton 3 | 0x09 | 0x03 |
Y | Bouton 4 | 0x09 | 0x04 |
LB (pare-choc gauche) | Bouton 5 | 0x09 | 0x05 |
RB (pare-choc droit) | Bouton 6 | 0x09 | 0x06 |
LSB (bouton stick gauche) | Bouton 7 | 0x09 | 0x07 |
RSB (bouton stick droit) | Bouton 8 | 0x09 | 0x08 |
RETOUR | Bouton 9 | 0x09 | 0x09 |
START | Bouton 10 | 0x09 | 0x0A |
Remarque
(*) : Ceci est combiné afin que Z présente le comportement de centrage attendu par la plupart des titres pour les commandes de frein et d’accélérateur ; cela signifie qu’il n’est pas possible de voir toutes les valeurs de combinaison de pédales possibles via DirectInput.
Manche à balai
Ce mappage est conçu autour d’un manche à balai et est exposé en tant que type d’utilisation HID de Manette de jeu.
Contrôler | Nom d’utilisation | Page d’utilisation | ID d’utilisation |
---|---|---|---|
Manche à balai (stick gauche) | X, Y | 0x01 | 0x30, 0x31 |
POV Hat (stick droit) | Rx, Ry | 0x01 | 0x33, 0x34 |
Accélérateur (déclencheur droit) | Z | 0x01 | 0x32 |
Gouvernail (déclencheur gauche) | Rz | 0x01 | 0x35 |
D-Pad Haut, Bas, Gauche, Droit | Changement de chapeau | 0x01 | 0x39 |
Arme principale (A) | Bouton 1 | 0x09 | 0x01 |
Arme secondaire (B) | Bouton 2 | 0x09 | 0x02 |
X | Bouton 3 | 0x09 | 0x03 |
Y | Bouton 4 | 0x09 | 0x04 |
LB (pare-choc gauche) | Bouton 5 | 0x09 | 0x05 |
RB (pare-choc droit) | Bouton 6 | 0x09 | 0x06 |
RETOUR | Bouton 7 | 0x09 | 0x07 |
START | Bouton 8 | 0x09 | 0x08 |
LSB (bouton stick gauche) | Bouton 9 | 0x09 | 0x09 |
RSB (bouton stick droit) | Bouton 10 | 0x09 | 0x0A |
Remarque
Ceci est basé sur la conception finale du manche à balai. Étant donné que cela diffère des premières définitions du manche à balai, de nombreux appareils ont un commutateur de mode qui prend en charge l’ancien et le nouveau modèle. Ce mappage suppose le nouveau modèle.