feat: implement initial cyborg multi-action button mappings

- Added support for Single, Long, and Double press actions in libazeron.
- Mapped Cyborg surgical command IDs (0x20F6, 0x20F8, 0x204A).
- Updated azeron-cli to support --long and --double mapping flags.
- Updated protocol documentation with newly discovered Cyborg commands.
- Added TODO.md for remaining joystick and timing tasks.
This commit is contained in:
2026-02-22 19:08:13 +00:00
parent db5c3505da
commit 18f84a538a
12 changed files with 37131 additions and 152 deletions

18379
captures/ana-joy-capture.json Normal file

File diff suppressed because it is too large Load Diff

5396
captures/azeron-capture.json Normal file

File diff suppressed because it is too large Load Diff

1797
captures/hid-to-ana.json Normal file

File diff suppressed because it is too large Load Diff

11303
captures/joy-capture.json Normal file

File diff suppressed because it is too large Load Diff

122
captures/long_press.txt Normal file
View File

@@ -0,0 +1,122 @@
# Packet returned when performing a long press
Frame 31: Packet, 91 bytes on wire (728 bits), 91 bytes captured (728 bits) on interface \\.\USBPcap2, id 0
USB URB
[Source: 2.4.5]
[Destination: host]
USBPcap pseudoheader length: 27
IRP ID: 0xffffe20f9867c420
IRP USBD_STATUS: USBD_STATUS_SUCCESS (0x00000000)
URB Function: URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER (0x0009)
IRP information: 0x01, Direction: PDO -> FDO
URB bus id: 2
Device address: 4
Endpoint: 0x85, Direction: IN
URB transfer type: URB_INTERRUPT (0x01)
Packet Data Length: 64
[bInterfaceClass: HID (0x03)]
HID Data: 42505f31320d0a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Frame 32: Packet, 27 bytes on wire (216 bits), 27 bytes captured (216 bits) on interface \\.\USBPcap2, id 0
USB URB
[Source: host]
[Destination: 2.4.5]
USBPcap pseudoheader length: 27
IRP ID: 0xffffe20f9867c420
IRP USBD_STATUS: USBD_STATUS_SUCCESS (0x00000000)
URB Function: URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER (0x0009)
IRP information: 0x00, Direction: FDO -> PDO
URB bus id: 2
Device address: 4
Endpoint: 0x85, Direction: IN
URB transfer type: URB_INTERRUPT (0x01)
Packet Data Length: 0
[Response in: 40]
[bInterfaceClass: HID (0x03)]
Frame 33: Packet, 91 bytes on wire (728 bits), 91 bytes captured (728 bits) on interface \\.\USBPcap2, id 0
USB URB
[Source: 2.4.5]
[Destination: host]
USBPcap pseudoheader length: 27
IRP ID: 0xffffe20f9861d7e0
IRP USBD_STATUS: USBD_STATUS_SUCCESS (0x00000000)
URB Function: URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER (0x0009)
IRP information: 0x01, Direction: PDO -> FDO
URB bus id: 2
Device address: 4
Endpoint: 0x85, Direction: IN
URB transfer type: URB_INTERRUPT (0x01)
Packet Data Length: 64
[bInterfaceClass: HID (0x03)]
HID Data: 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Frame 34: Packet, 27 bytes on wire (216 bits), 27 bytes captured (216 bits) on interface \\.\USBPcap2, id 0
USB URB
[Source: host]
[Destination: 2.4.5]
USBPcap pseudoheader length: 27
IRP ID: 0xffffe20f9861d7e0
IRP USBD_STATUS: USBD_STATUS_SUCCESS (0x00000000)
URB Function: URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER (0x0009)
IRP information: 0x00, Direction: FDO -> PDO
URB bus id: 2
Device address: 4
Endpoint: 0x85, Direction: IN
URB transfer type: URB_INTERRUPT (0x01)
Packet Data Length: 0
[Response in: 45]
[bInterfaceClass: HID (0x03)]
Frame 35: Packet, 91 bytes on wire (728 bits), 91 bytes captured (728 bits) on interface \\.\USBPcap2, id 0
USB URB
[Source: host]
[Destination: 2.4.6]
USBPcap pseudoheader length: 27
IRP ID: 0xffffe20fb26e3010
IRP USBD_STATUS: USBD_STATUS_SUCCESS (0x00000000)
URB Function: URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER (0x0009)
IRP information: 0x00, Direction: FDO -> PDO
URB bus id: 2
Device address: 4
Endpoint: 0x06, Direction: OUT
URB transfer type: URB_INTERRUPT (0x01)
Packet Data Length: 64
[Response in: 36]
[bInterfaceClass: HID (0x03)]
HID Data: 5e327e48690a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Frame 36: Packet, 27 bytes on wire (216 bits), 27 bytes captured (216 bits) on interface \\.\USBPcap2, id 0
USB URB
[Source: 2.4.6]
[Destination: host]
USBPcap pseudoheader length: 27
IRP ID: 0xffffe20fb26e3010
IRP USBD_STATUS: USBD_STATUS_SUCCESS (0x00000000)
URB Function: URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER (0x0009)
IRP information: 0x01, Direction: PDO -> FDO
URB bus id: 2
Device address: 4
Endpoint: 0x06, Direction: OUT
URB transfer type: URB_INTERRUPT (0x01)
Packet Data Length: 0
[Request in: 35]
[Time from request: 4.877000 milliseconds]
[bInterfaceClass: HID (0x03)]
Frame 37: Packet, 91 bytes on wire (728 bits), 91 bytes captured (728 bits) on interface \\.\USBPcap2, id 0
USB URB
[Source: host]
[Destination: 2.4.6]
USBPcap pseudoheader length: 27
IRP ID: 0xffffe20fa1bb2010
IRP USBD_STATUS: USBD_STATUS_SUCCESS (0x00000000)
URB Function: URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER (0x0009)
IRP information: 0x00, Direction: FDO -> PDO
URB bus id: 2
Device address: 4
Endpoint: 0x06, Direction: OUT
URB transfer type: URB_INTERRUPT (0x01)
Packet Data Length: 64
[Response in: 44]
[bInterfaceClass: HID (0x03)]
HID Data: 001520b10101150101000c0000000001000000000000f01b00000000000000000000000000000000000000000000000000000000000000000000000000000000

7
captures/usb_info.txt Normal file
View File

@@ -0,0 +1,7 @@
# Output from "Get-PnpDevice -PresentOnly | Where-Object { $_.InstanceId -match '^USB' } | Select-Object FriendlyName, InstanceId"
USB Input Device USB\VID_16D0&PID_113C&MI_04\9&6389280&1&0004
USB Input Device USB\VID_16D0&PID_113C&MI_03\9&6389280&1&0003
USB Input Device USB\VID_16D0&PID_113C&MI_02\9&6389280&1&0002
USB Input Device USB\VID_16D0&PID_113C&MI_01\9&6389280&1&0001
Xbox 360 Controller for Windows USB\VID_16D0&PID_113C&MI_00\9&6389280&1&0000
USB Composite Device USB\VID_16D0&PID_113C\208332B93553