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.