Сопоставление джойстика для разработчиков игр (Joystick Mapping Information for Game Developers)
Общие сведения
- EdgeTX может выводить информацию джойстика / геймпада через USB HID с идентификатором (VID_1209&PID_4F54 / 1209:4F54).
- EdgeTX выполняет настраиваемую обработку ввода, включая мёртвые зоны (dead bands), микширование и нелинейное масштабирование.
- EdgeTX работает на самых разных контроллерах. По умолчанию все устройства выдают один и тот же формат отчёта «Classic Joystick» с 8 аналоговыми осями и 24 цифровыми кнопками.
- Кнопки цифровые (0 = выкл, 1 = вкл).
- Аналоговые оси имеют разрешение 11 бит.
Linux: evdev
API evdev в Linux использует open (fcntl.h) с /dev/input/event[...] и read (unistd.h) для чтения input_event (linux/joystick.h).
Идентификация
- EVIOCGID : device_id.vendor равен 4617 / 0x1209
- EVIOCGID : device_id.product равен 20308 / 0x4F54
Метки входов
| EdgeTX | event name | event code |
|---|---|---|
| CH1 | ABS_X | EV_ABS 0 |
| CH2 | ABS_Y | EV_ABS 1 |
| CH3 | ABS_Z | EV_ABS 2 |
| CH4 | ABS_RX | EV_ABS 3 |
| CH5 | ABS_RY | EV_ABS 4 |
| CH6 | ABS_RZ | EV_ABS 5 |
| CH7 | ABS_THROTTLE | EV_ABS 6 |
| CH8 | ABS_RUDDER | EV_ABS 7 |
| CH9 | BTN_SOUTH | EV_KEY 304 / 0x130 |
| CH10 | BTN_EAST | EV_KEY 305 / 0x131 |
| CH11 | BTN_C | EV_KEY 306 / 0x132 |
| CH12 | BTN_NORTH | EV_KEY 307 / 0x133 |
| CH13 | BTN_WEST | EV_KEY 308 / 0x134 |
| CH14 | BTN_Z | EV_KEY 309 / 0x135 |
| CH15 | BTN_TL | EV_KEY 310 / 0x136 |
| CH16 | BTN_TR | EV_KEY 311 / 0x137 |
| CH17 | BTN_TL2 | EV_KEY 312 / 0x138 |
| CH18 | BTN_TR2 | EV_KEY 313 / 0x139 |
| CH19 | BTN_SELECT | EV_KEY 314 / 0x13A |
| CH20 | BTN_START | EV_KEY 315 / 0x13B |
| CH21 | BTN_MODE | EV_KEY 316 / 0x13C |
| CH22 | BTN_THUMBL | EV_KEY 317 / 0x13D |
| CH23 | BTN_THUMBR | EV_KEY 318 / 0x13E |
| CH24 | (no name) | EV_KEY 319 / 0x13F |
| CH25 | BTN_TRIGGER_HAPPY1 | EV_KEY 704 / 0x2C0 |
| CH26 | BTN_TRIGGER_HAPPY2 | EV_KEY 705 / 0x2C1 |
| CH27 | BTN_TRIGGER_HAPPY3 | EV_KEY 706 / 0x2C2 |
| CH28 | BTN_TRIGGER_HAPPY4 | EV_KEY 707 / 0x2C3 |
| CH29 | BTN_TRIGGER_HAPPY5 | EV_KEY 708 / 0x2C4 |
| CH30 | BTN_TRIGGER_HAPPY6 | EV_KEY 709 / 0x2C5 |
| CH31 | BTN_TRIGGER_HAPPY7 | EV_KEY 710 / 0x2C6 |
| CH32 | BTN_TRIGGER_HAPPY8 | EV_KEY 711 / 0x2C7 |
Linux: joystick
API joystick в Linux использует open (fcntl.h) с /dev/input/js и read (unistd.h) для чтения js_event (linux/joystick.h).
Идентификация
JSIOCGNAME — это «EdgeTX [...] Joystick» или «OpenTX [...] Joystick». Средняя часть («[...]») зависит от устройства.
Метки входов
| EdgeTX | read js_event |
|---|---|
| CH1 | JS_EVENT_AXIS 0 |
| CH2 | JS_EVENT_AXIS 1 |
| [...] | [...] |
| CH8 | JS_EVENT_AXIS 7 |
| CH9 | JS_EVENT_BUTTON 0 |
| CH10 | JS_EVENT_BUTTON 1 |
| [...] | [...] |
| CH32 | JS_EVENT_BUTTON 23 |
Windows: DirectInput
DirectInput в Windows использует IDirectInputDevice8::GetDeviceState для чтения DIJOYSTATE (dinput.h). DIJOYSTATE2 (c_dfDIJoystick2) выдаёт ту же информацию.
Идентификация
DIDEVICEINSTANCE.guidProduct начинается с «4F541209-». Оставшаяся часть GUID зависит от устройства.
Метки входов
| EdgeTX | DIJOYSTATE |
|---|---|
| CH1 | lX |
| CH2 | lY |
| CH3 | lZ |
| CH4 | lRx |
| CH5 | lRy |
| CH6 | lRz |
| CH7 | rglSlider[1] |
| CH8 | rglSlider[0] |
| CH9 | rgbButtons[0] |
| CH10 | rgbButtons[1] |
| [...] | [...] |
| CH32 | rgbButtons[23] |
Windows: Multimedia
Multimedia API в Windows использует joyGetPosEx для чтения JOYINFOEX (joystickapi.h). Более старые joyGetPos / JOYINFO поддерживают только CH1–CH3 и CH9–CH32 с тем же сопоставлением, что и более новый JOYINFOEX.
Идентификация
- JOYCAPS.wMid равен 4617 / 0x1209
- JOYCAPS.wPid равен 20308 / 0x4F54
Метки входов
| EdgeTX | JOYINFOEX |
|---|---|
| CH1 | dwXpos |
| CH2 | dwYpos |
| CH3 | dwZpos |
| CH4 | dwVpos |
| CH5 | (not available) |
| CH6 | dwRpos |
| CH7 | dwUpos |
| CH8 | (not available) |
| CH9 | dwButtons & 0x000001 |
| CH10 | dwButtons & 0x000002 |
| CH11 | dwButtons & 0x000004 |
| [...] | [...] |
| CH32 | dwButtons & 0x800000 |
Windows: Raw Input
Raw Input API в Windows использует GetRawInputData (WinUser.h), HidP_GetUsageValue и HidP_GetUsages (hidpi.h).
Идентификация
- RID_DEVICE_INFO_HID.dwVendorId равен 4617 / 0x1209
- RID_DEVICE_INFO_HID.dwProductId равен 20308 / 0x4F54
Метки входов
| EdgeTX | HidP_Get[...]Value | UsagePage | Usage |
|---|---|---|---|
| CH1 | HidP_GetValueCaps [7] | 0x01 | 0x30 |
| CH2 | HidP_GetValueCaps [6] | 0x01 | 0x31 |
| CH3 | HidP_GetValueCaps [5] | 0x01 | 0x32 |
| CH4 | HidP_GetValueCaps [4] | 0x01 | 0x33 |
| CH5 | HidP_GetValueCaps [3] | 0x01 | 0x34 |
| CH6 | HidP_GetValueCaps [2] | 0x01 | 0x35 |
| CH7 | HidP_GetValueCaps [1] | 0x01 | 0x36 |
| CH8 | HidP_GetValueCaps [0] | 0x01 | 0x37 |
| CH9 | HidP_GetButtonCaps [0] | 0x09 | 0x01 |
| CH10 | HidP_GetButtonCaps [0] | 0x09 | 0x02 |
| [...] | [...] | [...] | [...] |
| CH32 | HidP_GetButtonCaps [0] | 0x09 | 0x18 |
Windows: Windows.Gaming.Input
RawGameController в Windows использует winrt::Windows::Gaming::Input::RawGameController (winrt/Windows.Gaming.Input.h).
Идентификация
- RawGameController::HardwareVendorId равен 4617 / 0x1209
- RawGameController::HardwareProductId равен 20308 / 0x4F54
Метки входов
| EdgeTX | GetCurrentReading |
|---|---|
| CH1 | axisArray[0] |
| CH2 | axisArray[1] |
| [...] | [...] |
| CH8 | axisArray[7] |
| CH9 | buttonArray[0] |
| CH10 | buttonArray[1] |
| [...] | [...] |
| CH32 | buttonArray[23] |