Dispositivi DirectInput e XUSB
Il driver per XUSB in Windows implementa l'interfaccia in modalità kernel per la DLL XINPUT. Per offrire un'esperienza ottimale per i titoli legacy che usano l'API DirectInput con il dispositivo controller comune, il driver esporta anche un'interfaccia di classe HUMAN Interface Device (HID), che viene prelevata da DirectInput. Abbiamo scelto il mapping di XUSB a HID in base al comportamento tipico in un set di applicazioni di gioco per la versione originale DIPUT e abbiamo aggiornato il mapping per i sottotipi più recenti. In questo argomento viene descritto il mapping.
Dispositivo di interfaccia umana (HID)
HID Standard è uno standard del comitato USB (Universal Serial Bus) originariamente proposto da Microsoft per generalizzare i protocolli per i dispositivi di input. È costituito da un linguaggio di descrizione del codice byte e può esprimere game pad, mouse, joystick, controlli di limitazione e timone e controller a più assi. Poiché questo standard è così generalizzato, potrebbe essere difficile scrivere software che utilizza l'input da dispositivi arbitrari. Pertanto, per l'API DirectInput incentrato sul gioco, abbiamo sviluppato un mapping secondario specifico di tipi per incoraggiare le fabbricazioni hardware a supportare tramite i driver.
Importante
È anche possibile accedere ai dispositivi di input HID tramite l'API RawInput e elaborare i report di input tramite l'API HID di basso livello, ma il feedback delle vibrazioni non funzionerà come con DirectInput.
Mapping
Il driver XUSB implementa sia un'interfaccia di classe XUSB che un'interfaccia di classe HID per i dispositivi per supportare sia l'utilizzo di XINPUT che directInput . Questo mapping è basato sulle informazioni sul sottotipo XUSB. Il driver implementa quattro gruppi distinti di mapping.
Sottotipo XUSB | Mapping |
---|---|
XINPUT_DEVSUBTYPE_GAMEPAD (sottotipo 1) | Game pad |
XINPUT_DEVSUBTYPE_WH edizione Enterprise L (sottotipo 2) | Selettore circolare |
XINPUT_DEVSUBTYPE_ARCADE_STICK (sottotipo 3) | Arcade Stick/Arcade Pad |
XINPUT_DEVSUBTYPE_FLIGHT_STICK (sottotipo 4) | Bastone di volo |
XINPUT_DEVSUBTYPE_DANCE_PAD (sottotipo 5) | Impostazione predefinita per qualsiasi nuovo sottotipo |
XINPUT_DEVSUBTYPE_GUITAR (sottotipo 6) | Chitarra |
XINPUT_DEVSUBTYPE_GUITAR_ALTERNATE (sottotipo 7) | |
XINPUT_DEVSUBTYPE_DRUM_KIT (sottotipo 8) | |
XINPUT_DEVSUBTYPE_GUITAR_BASS (sottotipo 11) | |
XINPUT_DEVSUBTYPE_ARCADE_PAD (sottotipo 19) |
Nota
I mapping HID seguenti sono statici. Ciò significa che anche se il report sulle funzionalità del dispositivo indica che un determinato pulsante o asse non è supportato, il mapping lo includerà comunque, ma segnala sempre uno stato o un valore centrale disattivato.
Game pad
Questo è il mapping predefinito ed è progettato intorno a un game pad standard ed è esposto come tipo di utilizzo HID del Game pad .
Controllo | Nome utilizzo HID | Pagina Utilizzo | ID utilizzo |
---|---|---|---|
Stick sinistro | X, Y | 0x01 | 0x30, 0x31 |
Bastone destro | Rx, Ry | 0x01 | 0x33, 0x34 |
Trigger sinistro + Trigger destro | Z* | 0x01 | 0x32 |
D-Pad Up, Down, Left, Right | Interruttore hat | 0x01 | 0x39 |
Un | Pulsante 1 | 0x09 | 0x01 |
G | Pulsante 2 | 0x09 | 0x02 |
X | Pulsante 3 | 0x09 | 0x03 |
Y | Pulsante 4 | 0x09 | 0x04 |
LB (paraurti sinistro) | Pulsante 5 | 0x09 | 0x05 |
RB (paraurti destro) | Pulsante 6 | 0x09 | 0x06 |
INDIETRO | Pulsante 7 | 0x09 | 0x07 |
AVVIA | Pulsante 8 | 0x09 | 0x08 |
LSB (pulsante a sinistra) | Pulsante 9 | 0x09 | 0x09 |
RSB (pulsante a destra) | Pulsante 10 | 0x09 | 0x0a |
Nota
(*): questa operazione viene combinata in modo che Z mostri il comportamento centrale previsto dalla maggior parte dei titoli per la rotazione; ciò significa che non è possibile visualizzare tutti i possibili valori di combinazione di trigger tramite DirectInput e HID.
Arcade Stick/Arcade Pad
Questo è il mapping progettato intorno al controller Arcade Stick ed è esposto come tipo di utilizzo HID del Game pad . Il Pad Arcade è molto simile a una levetta Arcade, ma in un fattore di forma più piccolo. Queste progettazioni sostituiscono il trigger sinistro analogico e il trigger destro con pulsanti digitali che segnalano il valore minimo e massimo dell'asse.
Controllo | Nome utilizzo HID | Pagina Utilizzo | ID utilizzo |
---|---|---|---|
D-Pad Up, Down, Left, Right | Interruttore hat | 0x01 | 0x39 |
Un | Pulsante 1 | 0x09 | 0x01 |
G | Pulsante 2 | 0x09 | 0x02 |
X | Pulsante 3 | 0x09 | 0x03 |
Y | Pulsante 4 | 0x09 | 0x04 |
LB (paraurti sinistro) | Pulsante 5 | 0x09 | 0x05 |
RB (paraurti destro) | Pulsante 6 | 0x09 | 0x06 |
INDIETRO | Pulsante 7 | 0x09 | 0x07 |
AVVIA | Pulsante 8 | 0x09 | 0x08 |
Trigger sinistro | Pulsante 9 | 0x09 | 0x09 |
Trigger destro | Pulsante 10 | 0x09 | 0x0a |
Questi dispositivi possono o non supportano controlli aggiuntivi, ma non sono esposti dal mapping HID: Stick sinistro, Stick destro, LSB (pulsante a sinistra) e RSB (pulsante a destra).
Selettore circolare
Questo mapping è progettato intorno a un volante da corsa ed è esposto come tipo di utilizzo HID del Game pad .
Controllo | Nome utilizzo HID | Pagina Utilizzo | ID utilizzo |
---|---|---|---|
Rotellina (bastone sinistro X) | X | 0x01 | 0x30 |
Pedale acceleratore (trigger destro) + pedale del freno (trigger sinistro) | Z* | 0x01 | 0x32 |
D-Pad Up, Down, Left, Right | Interruttore hat | 0x01 | 0x39 |
Un | Pulsante 1 | 0x09 | 0x01 |
G | Pulsante 2 | 0x09 | 0x02 |
X | Pulsante 3 | 0x09 | 0x03 |
Y | Pulsante 4 | 0x09 | 0x04 |
LB (paraurti sinistro) | Pulsante 5 | 0x09 | 0x05 |
RB (paraurti destro) | Pulsante 6 | 0x09 | 0x06 |
LSB (pulsante a sinistra) | Pulsante 7 | 0x09 | 0x07 |
RSB (pulsante a destra) | Pulsante 8 | 0x09 | 0x08 |
INDIETRO | Pulsante 9 | 0x09 | 0x09 |
AVVIA | Pulsante 10 | 0x09 | 0x0a |
Nota
(*): questo è combinato in modo che Z mostri il comportamento centrale previsto dalla maggior parte dei titoli per i controlli freno e acceleratore; ciò significa che non è possibile vedere tutti i possibili valori di combinazione pedale attraverso DirectInput.
Bastone di volo
Questo mapping è progettato intorno a un bastone di volo ed è esposto come tipo di utilizzo joystick HID.
Controllo | Nome utilizzo | Pagina Utilizzo | ID utilizzo |
---|---|---|---|
Bastone di volo (bastone sinistro) | X, Y | 0x01 | 0x30, 0x31 |
Cappello POV (bastone destro) | Rx, Ry | 0x01 | 0x33, 0x34 |
Limitazione (trigger destro) | Z | 0x01 | 0x32 |
Timone (trigger sinistro) | Rz | 0x01 | 0x35 |
D-Pad Up, Down, Left, Right | Interruttore hat | 0x01 | 0x39 |
Arma primaria (A) | Pulsante 1 | 0x09 | 0x01 |
Arma secondaria (B) | Pulsante 2 | 0x09 | 0x02 |
X | Pulsante 3 | 0x09 | 0x03 |
Y | Pulsante 4 | 0x09 | 0x04 |
LB (paraurti sinistro) | Pulsante 5 | 0x09 | 0x05 |
RB (paraurti destro) | Pulsante 6 | 0x09 | 0x06 |
INDIETRO | Pulsante 7 | 0x09 | 0x07 |
AVVIA | Pulsante 8 | 0x09 | 0x08 |
LSB (pulsante a sinistra) | Pulsante 9 | 0x09 | 0x09 |
RSB (pulsante a destra) | Pulsante 10 | 0x09 | 0x0a |
Nota
Questo è basato sul design finale flight stick. Poiché ciò differisce dalle definizioni iniziali di Flight Stick, molti dispositivi hanno un commutatore in modalità che supporta il vecchio rispetto al nuovo modello. Questo mapping presuppone il nuovo modello.