Bagikan melalui


Perangkat DirectInput dan XUSB

Driver untuk XUSB di Windows mengimplementasikan antarmuka mode kernel untuk DLL XINPUT. Untuk memberikan pengalaman yang baik untuk judul warisan yang menggunakan DirectInput API dengan perangkat pengontrol umum, driver juga mengekspor antarmuka kelas Human Interface Device (HID), yang diambil oleh DirectInput. Kami memilih pemetaan XUSB ke HID berdasarkan perilaku umum dalam serangkaian aplikasi game untuk versi XINPUT asli, dan kami memperbarui pemetaan untuk subjenis yang lebih baru. Topik ini menjelaskan pemetaan.

Perangkat Antarmuka Manusia (HID)

Standar HID adalah standar dari komite Universal Serial Bus (USB) yang awalnya diusulkan oleh Microsoft untuk menggeneralisasi protokol untuk perangkat input. Ini terdiri dari bahasa deskripsi byte-code dan dapat mengekspresikan gamepad, tikus, joystick, kontrol pembatasan dan kemudi, dan pengontrol multi-sumbu. Karena standar ini sangat umum, Anda mungkin mengalami kesulitan menulis perangkat lunak yang mengonsumsi input dari perangkat sewenang-wenang. Oleh karena itu, untuk API DirectInput yang berpusat pada game, kami mengembangkan sub-pemetaan jenis tertentu untuk mendorong manufaktur perangkat keras untuk mendukung melalui driver mereka.

Penting

Anda juga dapat mengakses perangkat input HID melalui API RawInput dan memproses laporan input melalui HID API tingkat rendah tetapi umpan balik getaran tidak akan berfungsi seperti DirectInput.

Pemetaan

Driver XUSB mengimplementasikan antarmuka kelas XUSB dan antarmuka kelas HID untuk perangkat untuk mendukung penggunaan XINPUT dan DirectInput. Pemetaan ini didasarkan pada informasi subjenis XUSB. Driver mengimplementasikan empat grup pemetaan yang berbeda.

Subjenis XUSB Pemetaan
XINPUT_DEVSUBTYPE_GAMEPAD (Subjenis 1) Gamepad
XINPUT_DEVSUBTYPE_WHEEL (Subjenis 2) Roda
XINPUT_DEVSUBTYPE_ARCADE_STICK (Subjenis 3) Arcade Stick/Arcade Pad
XINPUT_DEVSUBTYPE_FLIGHT_STICK (Subjenis 4) Tongkat Penerbangan
XINPUT_DEVSUBTYPE_DANCE_PAD (Subjenis 5) Default untuk subjenis baru
XINPUT_DEVSUBTYPE_GUITAR (Subjenis 6) Gitar
XINPUT_DEVSUBTYPE_GUITAR_ALTERNATE (Subjenis 7)
XINPUT_DEVSUBTYPE_DRUM_KIT (Subjenis 8)
XINPUT_DEVSUBTYPE_GUITAR_BASS (Subjenis 11)
XINPUT_DEVSUBTYPE_ARCADE_PAD (Subjenis 19)

Nota

Pemetaan HID berikut bersifat statis. Ini berarti bahwa bahkan jika laporan kemampuan perangkat menunjukkan bahwa tombol atau sumbu tertentu tidak didukung, pemetaan akan tetap menyertakannya tetapi akan selalu melaporkan nilai status atau pusat.

Gamepad

Ini adalah pemetaan default dan dirancang di sekitar gamepad standar, dan diekspos sebagai Gamepad jenis penggunaan HID.

Menguasai Nama Penggunaan HID Halaman Penggunaan ID Penggunaan
Tongkat Kiri X, Y 0x01 0x30, 0x31
Tongkat Kanan Rx, Ry 0x01 0x33, 0x34
Pemicu Kiri + Pemicu Kanan Z* 0x01 0x32
D-Pad Atas, Bawah, Kiri, Kanan Sakelar Topi 0x01 0x39
Sebuah Tombol 1 0x09 0x01
B Tombol 2 0x09 0x02
X Tombol 3 0x09 0x03
Y Tombol 4 0x09 0x04
LB (bumper kiri) Tombol 5 0x09 0x05
RB (bumper kanan) Tombol 6 0x09 0x06
BELAKANG Tombol 7 0x09 0x07
MULAI Tombol 8 0x09 0x08
LSB (tombol tongkat kiri) Tombol 9 0x09 0x09
RSB (tombol tongkat kanan) Tombol 10 0x09 0x0A

Nota

(*): Ini digabungkan sehingga Z menunjukkan perilaku pusat yang diharapkan oleh sebagian besar judul untuk rotasi; ini berarti tidak mungkin untuk melihat semua kemungkinan nilai kombinasi pemicu melalui DirectInput dan HID.

Arcade Stick/Arcade Pad

Ini adalah pemetaan yang dirancang di sekitar pengontrol Arcade Stick, dan diekspos sebagai Gamepad jenis penggunaan HID. Arcade Pad sangat mirip Arcade Stick, tetapi dalam bentuk yang lebih kecil. Desain ini menggantikan Pemicu Kiri analog dan Pemicu Kanan dengan tombol digital yang melaporkan nilai sumbu minimum dan maksimum.

Menguasai Nama Penggunaan HID Halaman Penggunaan ID Penggunaan
D-Pad Atas, Bawah, Kiri, Kanan Sakelar Topi 0x01 0x39
Sebuah Tombol 1 0x09 0x01
B Tombol 2 0x09 0x02
X Tombol 3 0x09 0x03
Y Tombol 4 0x09 0x04
LB (bumper kiri) Tombol 5 0x09 0x05
RB (bumper kanan) Tombol 6 0x09 0x06
BELAKANG Tombol 7 0x09 0x07
MULAI Tombol 8 0x09 0x08
Pemicu Kiri Tombol 9 0x09 0x09
Pemicu Kanan Tombol 10 0x09 0x0A

Perangkat ini mungkin atau mungkin tidak mendukung kontrol tambahan, tetapi ini tidak diekspos oleh pemetaan HID: Tongkat Kiri, Tongkat Kanan, LSB (tombol tongkat kiri), dan RSB (tombol tongkat kanan).

Roda

Pemetaan ini dirancang di sekitar roda balap, dan diekspos sebagai Gamepad jenis penggunaan HID.

Menguasai Nama Penggunaan HID Halaman Penggunaan ID Penggunaan
Roda (Tongkat Kiri X) X 0x01 0x30
Pedal Akselerator (Pemicu Kanan) + Pedal Rem (Pemicu Kiri) Z* 0x01 0x32
D-Pad Atas, Bawah, Kiri, Kanan Sakelar Topi 0x01 0x39
Sebuah Tombol 1 0x09 0x01
B Tombol 2 0x09 0x02
X Tombol 3 0x09 0x03
Y Tombol 4 0x09 0x04
LB (bumper kiri) Tombol 5 0x09 0x05
RB (bumper kanan) Tombol 6 0x09 0x06
LSB (tombol tongkat kiri) Tombol 7 0x09 0x07
RSB (tombol tongkat kanan) Tombol 8 0x09 0x08
BELAKANG Tombol 9 0x09 0x09
MULAI Tombol 10 0x09 0x0A

Nota

(*): Ini digabungkan sehingga Z menunjukkan perilaku pusat yang diharapkan oleh sebagian besar judul untuk kontrol rem dan akselerator; ini berarti tidak mungkin untuk melihat semua kemungkinan nilai kombinasi pedal melalui DirectInput.

Tongkat Penerbangan

Pemetaan ini dirancang di sekitar tongkat penerbangan, dan diekspos sebagai Joystick jenis penggunaan HID.

Menguasai Nama Penggunaan Halaman Penggunaan ID Penggunaan
Tongkat Penerbangan (Tongkat Kiri) X, Y 0x01 0x30, 0x31
Topi POV (Tongkat Kanan) Rx, Ry 0x01 0x33, 0x34
Pembatasan (Pemicu Kanan) Z 0x01 0x32
Kemudi (Pemicu Kiri) Rz 0x01 0x35
D-Pad Atas, Bawah, Kiri, Kanan Sakelar Topi 0x01 0x39
Senjata Utama (A) Tombol 1 0x09 0x01
Senjata Sekunder (B) Tombol 2 0x09 0x02
X Tombol 3 0x09 0x03
Y Tombol 4 0x09 0x04
LB (bumper kiri) Tombol 5 0x09 0x05
RB (bumper kanan) Tombol 6 0x09 0x06
BELAKANG Tombol 7 0x09 0x07
MULAI Tombol 8 0x09 0x08
LSB (tombol tongkat kiri) Tombol 9 0x09 0x09
RSB (tombol tongkat kanan) Tombol 10 0x09 0x0A

Nota

Ini didasarkan pada desain Flight Stick akhir. Karena ini berbeda dari definisi Flight Stick awal, banyak perangkat memiliki sakelar mode yang mendukung model lama versus baru. Pemetaan ini mengasumsikan model baru.