Dela via


DirectInput- och XUSB-enheter

Drivrutinen för XUSB i Windows implementerar gränssnittet i kernelläge för XINPUT DLL. För att ge en bra upplevelse för äldre titlar som använder DirectInput API med den gemensamma styrenhetsenheten, exporterar drivrutinen även ett HID-klassgränssnitt (Human Interface Device), som hämtas av DirectInput. Vi valde mappningen av XUSB till HID baserat på typiskt beteende i en uppsättning spelprogram för den ursprungliga XINPUT-versionen, och vi uppdaterade mappningen för nyare undertyper. Det här avsnittet beskriver mappningen.

Enhet för mänskligt gränssnitt (HID)

HID Standard är en standard från USB-kommittén (Universal Serial Bus) som ursprungligen föreslogs av Microsoft för att generalisera protokoll för indataenheter. Den består av ett bytekodsbeskrivningsspråk och kan uttrycka spelplattor, möss, joysticks, begränsnings- och roderkontroller och styrenheter med flera axlar. Eftersom den här standarden är så generaliserad kan det vara svårt att skriva programvara som använder indata från godtyckliga enheter. För den spelcentrerade DirectInput API utvecklade vi därför en specifik undermappning av typer för att uppmuntra maskinvarutillverkare att stödja genom sina drivrutiner.

Viktig

Du kan också komma åt HID-indataenheter via RawInput API och bearbeta indatarapporter via låg nivå HID API- men vibrationsfeedback fungerar inte som med DirectInput-.

Mappningar

XUSB-drivrutinen implementerar både ett XUSB-klassgränssnitt och ett HID-klassgränssnitt för enheter för att stödja både XINPUT- och DirectInput- användning. Den här mappningen baseras på xusb-undertypsinformationen. Drivrutinen implementerar fyra distinkta grupper av mappningar.

XUSB-undertyp Kartläggning
XINPUT_DEVSUBTYPE_GAMEPAD (undertyp 1) Gamepad
XINPUT_DEVSUBTYPE_WHEEL (undertyp 2) Hjul
XINPUT_DEVSUBTYPE_ARCADE_STICK (undertyp 3) Arcade Stick/Arcade Pad
XINPUT_DEVSUBTYPE_FLIGHT_STICK (undertyp 4) Flygpinne
XINPUT_DEVSUBTYPE_DANCE_PAD (undertyp 5) Standard för alla nya undertyper
XINPUT_DEVSUBTYPE_GUITAR (undertyp 6) Gitarr
XINPUT_DEVSUBTYPE_GUITAR_ALTERNATE (undertyp 7)
XINPUT_DEVSUBTYPE_DRUM_KIT (undertyp 8)
XINPUT_DEVSUBTYPE_GUITAR_BASS (undertyp 11)
XINPUT_DEVSUBTYPE_ARCADE_PAD (undertyp 19)

Not

Följande HID-mappningar är statiska. Det innebär att även om rapporten om enhetsfunktioner indikerar att en viss knapp eller axel inte stöds, kommer mappningen fortfarande att innehålla den, men rapporterar alltid ett off state- eller center-värde.

Gamepad

Detta är standardmappningen och är utformad kring en standardspelplatta och exponeras som en Gamepad HID-användningstyp.

Kontroll HID-användningsnamn Användningssida Användnings-ID
Vänster pinne X, Y 0x01 0x30, 0x31
Höger pinne Rx, Ry 0x01 0x33, 0x34
Vänster utlösare + högerutlösare Z* 0x01 0x32
D-pad upp, nedåt, vänster, höger Hattbrytare 0x01 0x39
A Knapp 1 0x09 0x01
B Knapp 2 0x09 0x02
X Knapp 3 0x09 0x03
Y Knapp 4 0x09 0x04
LB (vänster stötfångare) Knapp 5 0x09 0x05
RB (höger stötfångare) Knapp 6 0x09 0x06
TILLBAKA Knapp 7 0x09 0x07
STARTA Knapp 8 0x09 0x08
LSB (vänster knapp) Knapp 9 0x09 0x09
RSB (knapp för höger pinne) Knapp 10 0x09 0x0A

Not

(*): Detta kombineras så att Z uppvisar det centreringsbeteende som förväntas av de flesta rubriker för rotation; Detta innebär att det inte går att se alla möjliga utlösarkombinationsvärden via DirectInput- och HID.

Arcade Stick/Arcade Pad

Detta är mappningen som är utformad runt Arcade Stick-styrenheten och exponeras som en Gamepad HID-användningstyp. Arcade Pad är mycket lik en Arcade Stick, men i en mindre form-faktor. De här designerna ersätter den analoga vänsterutlösaren och högerutlösaren med digitala knappar som rapporterar värdet för minsta och högsta axel.

Kontroll HID-användningsnamn Användningssida Användnings-ID
D-pad upp, nedåt, vänster, höger Hattbrytare 0x01 0x39
A Knapp 1 0x09 0x01
B Knapp 2 0x09 0x02
X Knapp 3 0x09 0x03
Y Knapp 4 0x09 0x04
LB (vänster stötfångare) Knapp 5 0x09 0x05
RB (höger stötfångare) Knapp 6 0x09 0x06
TILLBAKA Knapp 7 0x09 0x07
STARTA Knapp 8 0x09 0x08
Vänster utlösare Knapp 9 0x09 0x09
Höger utlösare Knapp 10 0x09 0x0A

Dessa enheter kanske eller kanske inte stöder ytterligare kontroller, men dessa exponeras inte av HID-mappningen: Vänster pinne, Höger pinne, LSB (vänster pinneknapp) och RSB (höger stickknapp).

Hjul

Denna mappning är utformad runt ett racinghjul och exponeras som en Gamepad HID-användningstyp.

Kontroll HID-användningsnamn Användningssida Användnings-ID
Hjul (vänster pinne X) X 0x01 0x30
Gaspedalen (höger utlösare) + bromspedalen (vänster utlösare) Z* 0x01 0x32
D-pad upp, nedåt, vänster, höger Hattbrytare 0x01 0x39
A Knapp 1 0x09 0x01
B Knapp 2 0x09 0x02
X Knapp 3 0x09 0x03
Y Knapp 4 0x09 0x04
LB (vänster stötfångare) Knapp 5 0x09 0x05
RB (höger stötfångare) Knapp 6 0x09 0x06
LSB (vänster knapp) Knapp 7 0x09 0x07
RSB (knapp för höger pinne) Knapp 8 0x09 0x08
TILLBAKA Knapp 9 0x09 0x09
STARTA Knapp 10 0x09 0x0A

Not

(*): Detta kombineras så att Z uppvisar det centreringsbeteende som förväntas av de flesta titlar för broms- och acceleratorkontrollerna. Detta innebär att det inte går att se alla möjliga pedalkombinationsvärden via DirectInput-.

Flygpinne

Den här mappningen är utformad kring en flygpinne och exponeras som en Joystick HID-användningstyp.

Kontroll Användningsnamn Användningssida Användnings-ID
Flight Stick (vänster pinne) X, Y 0x01 0x30, 0x31
POV-hatt (höger pinne) Rx, Ry 0x01 0x33, 0x34
Begränsning (högerutlösare) Z 0x01 0x32
Roder (vänster utlösare) Rz 0x01 0x35
D-pad upp, nedåt, vänster, höger Hattbrytare 0x01 0x39
Primärt vapen (A) Knapp 1 0x09 0x01
Sekundärt vapen (B) Knapp 2 0x09 0x02
X Knapp 3 0x09 0x03
Y Knapp 4 0x09 0x04
LB (vänster stötfångare) Knapp 5 0x09 0x05
RB (höger stötfångare) Knapp 6 0x09 0x06
TILLBAKA Knapp 7 0x09 0x07
STARTA Knapp 8 0x09 0x08
LSB (vänster knapp) Knapp 9 0x09 0x09
RSB (knapp för höger pinne) Knapp 10 0x09 0x0A

Not

Detta baseras på den slutliga Flight Stick-designen. Eftersom detta skiljer sig från tidiga Flight Stick-definitioner har många enheter en lägesväxel som stöder den gamla jämfört med den nya modellen. Den här mappningen förutsätter den nya modellen.