Used in win 3, win max 2, win mini 23/24 and win 4.
Product ID: 0x2f24
Vendor ID: 0x135
Report descriptor:
Usage Page (FF00h), ; FF00h, vendor-defined
Usage (01h),
Collection (Application),
Report ID (1),
Usage Minimum (01h),
Usage Maximum (02h),
Logical Minimum (0),
Logical Maximum (255),
Report Size (8),
Report Count (32),
Input (Variable),
Usage Minimum (01h),
Usage Maximum (02h),
Logical Minimum (0),
Logical Maximum (255),
Report Count (32),
Output (Variable),
End Collection
Keyboard mode uses HID Usage ID key codes and a few custom special codes.
Custom key codes for keyboard mode:
0xe8 - mousewheel up
0xe9 - mousewheel down
0xea - left mouse
0xeb - right mouse
0xec - middle mouse
0xed - mouse fast move
Custom key codes for gamepad mode:
0xff01 - dpad up
0xff02 - dpad down
0xff03 - dpad left
0xff04 - dpad right
0xff05 - button A
0xff06 - button B
0xff07 - button X
0xff08 - button Y
0xff09 - left stick up
0xff0a - left stick down
0xff0b - left stick left
0xff0c - left stick right
0xff0d - L3
0xff0e - R3
0xff0f - start
0xff10 - select
0xff11 - menu
0xff12 - L1
0xff13 - R1
0xff14 - L2
0xff15 - R2
0xff16 - right stick up
0xff17 - right stick down
0xff18 - right stick left
0xff19 - right stick right
Configuration total size is 256 bytes.
Mode:
- Read (1)
- Write (2)
Command:
- controller version/init communication (0)
- Read/Write (1)
- Checksum (2)
- Commit (3)
Supported combinations, and their effect, below.
Send
| 0 | 1 | 2 | 3 | 4 | 5-31 | ||
|---|---|---|---|---|---|---|---|
| ID | const | mode | cmd | const ^ 0xff | mode ^ 0xf | cmd ^ 0xf | |
| 01 | a5 | 01 | 00 | 5a | 0e | 0f | 00 |
Response
| 0 | 1 | 2 | 3 | 4 | 5-7 | 8 | 9 | 10 | 11 | 12 | 13-63 | ||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ID | const | mode | cmd | const ^ 0xff | mode ^ 0xff | cmd ^ 0xff | ready state | xinput version minor | xinput version major | keyboard&mouse version minor | keyboard&mouse version major | unk | |
| 01 | a5 | 01 | 00 | 5a | 0e | 0f | 00 | xx | xx | xx | xx | xx | xx |
Successful initialization returns 0xaa in byte 8.
Some fields are only present in latest firmware, find latest firmwares in gpd_devices discord.
Send
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7-31 | ||
|---|---|---|---|---|---|---|---|---|---|
| ID | const | mode | cmd | const ^ 0xff | mode ^ 0xf | cmd ^ 0xf | page index | ||
| 01 | a5 | 01 | 01 | 5a | 0e | 0e | 00 | 00 | 00 |
Response
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42-49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| dpad up | dpad down | dpad left | dpad right | A | B | X | Y | left analog up | left analog down | left analog left | left analog right | L3 | R3 | Start | Select | Menu | L1 | R1 | L2 | R2 | left back button slot 1 | left back button slot 2 | left back button slot 3 | left back button slot 4 | right back button slot 1 | right back button slot 2 | right back button slot 3 | |||||||||||||||||||||||||||||
| xx | xx | xx | xx | xx | xx | xx | xx | xx | xx | xx | xx | xx | xx | xx | xx | xx | xx | xx | xx | xx | xx | xx | xx | xx | xx | xx | xx | xx | xx | xx | xx | xx | xx | xx | xx | xx | xx | xx | xx | xx | xx | 00 | xx | xx | xx | xx | xx | xx | xx | xx | xx | xx | xx | xx | xx | xx |
Send
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7-31 | ||
|---|---|---|---|---|---|---|---|---|---|
| ID | const | mode | cmd | const ^ 0xff | mode ^ 0xf | cmd ^ 0xf | page index | ||
| 01 | a5 | 01 | 01 | 5a | 0e | 0e | 00 | 01 | 00 |
Response
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12-15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32-63 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| right back button slot 4 | rumble mode | win4 led mode | win4 led color (R) | win4 led color (G) | win4 led color (B) | left analog center | left analog boundary | right analog center | right analog boundary | left back button slot 1 start time | left back button slot 2 start time | left back button slot 3 start time | left back button macro start time | right back button slot 1 start time | right back button slot 2 start time | right back button slot 3 start time | right back button macro start time | ||||||||||||
| xx | xx | xx | 00 | xx | xx | xx | xx | xx | xx | xx | xx | xx | 00 | xx | xx | xx | xx | xx | xx | xx | xx | xx | xx | xx | xx | xx | xx | xx | 00 |
Send
| 0 | 1 | 2 | 3 | 4 | 5-31 | ||
|---|---|---|---|---|---|---|---|
| ID | const | mode | cmd | const ^ 0xff | mode ^ 0xf | cmd ^ 0xf | |
| 01 | a5 | 01 | 02 | 5a | 0e | 0d | 00 |
Response
| 0 | 1 | 2 | 3 | 4 | 5-7 | 8 | 9 | 10 | 11 | 12 | 13-23 | 24 | 25 | 26-63 | ||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ID | const | mode | cmd | const ^ 0xff | mode ^ 0xff | cmd ^ 0xff | ready state | gamepad version minor | gamepad version major | keyboard version minor | keyboard version major | config checksum | unk | |||
| 01 | a5 | 01 | 00 | 5a | 0e | 0d | 00 | aa | xx | xx | xx | xx | 00 | xx | xx | xx |
Checksum is the sum of the 256 configuration bytes.
Send
| 0 | 1 | 2 | 3 | 4 | 5-31 | ||
|---|---|---|---|---|---|---|---|
| ID | const | mode | cmd | const ^ 0xff | mode ^ 0xf | cmd ^ 0xf | |
| 01 | a5 | 02 | 00 | 5a | 0d | 0f | 00 |
Response
| 0 | 1 | 2 | 3 | 4 | 5-7 | 8 | 9 | 10 | 11 | 12 | 13-63 | ||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ID | const | mode | cmd | const ^ 0xff | mode ^ 0xff | cmd ^ 0xff | ready state | gamepad version minor | gamepad version major | keyboard version minor | keyboard version major | unk | |
| 01 | a5 | 02 | 00 | 5a | 0d | 0f | 00 | xx | xx | xx | xx | xx | xx |
Successful initialization returns 0xaa in byte 8.
You must send all 256 bytes, writes don't have a response.
Send
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24-31 | ||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ID | const | mode | cmd | const ^ 0xff | mode ^ 0xf | cmd ^ 0xf | index | dpad up | dpad down | dpad left | dpad right | A | B | X | Y | |||||||||||
| 01 | a5 | 02 | 01 | 5a | 0d | 0e | 00 | 00 | 00 | xx | xx | xx | xx | xx | xx | xx | xx | xx | xx | xx | xx | xx | xx | xx | xx | 00 |
Send
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24-31 | ||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ID | const | mode | cmd | const ^ 0xff | mode ^ 0xf | cmd ^ 0xf | index | left analog up | left analog down | left analog left | left analog right | L3 | R3 | start | select | |||||||||||
| 01 | a5 | 02 | 01 | 5a | 0d | 0e | 00 | 01 | 00 | xx | xx | xx | xx | xx | xx | xx | xx | xx | xx | xx | xx | xx | xx | xx | xx | 00 |
Send
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18-31 | ||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ID | const | mode | cmd | const ^ 0xff | mode ^ 0xf | cmd ^ 0xf | index | menu | L1 | R1 | L2 | R2 | ||||||||
| 01 | a5 | 02 | 01 | 5a | 0d | 0e | 00 | 02 | 00 | xx | xx | xx | xx | xx | xx | xx | xx | xx | xx | 00 |
Send
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22-31 | ||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ID | const | mode | cmd | const ^ 0xff | mode ^ 0xf | cmd ^ 0xf | index | left back button slot 1 | left back button slot 2 | left back button slot 3 | left back button slot 4 | right back button slot 1 | right back button slot 2 | right back button slot 3 | ||||||||||
| 01 | a5 | 02 | 01 | 5a | 0d | 0e | 00 | 03 | 00 | xx | xx | xx | xx | xx | xx | xx | xx | xx | xx | xx | xx | xx | xx | 00 |
Send
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20-31 | ||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ID | const | mode | cmd | const ^ 0xff | mode ^ 0xf | cmd ^ 0xf | index | right back button slot 4 | rumble mode | win4 led mode | win4 led color (R) | win4 led color (G) | win4 led color (B) | left analog center | left analog boundary | right analog center | right analog boundary | |||||
| 01 | a5 | 02 | 01 | 5a | 0d | 0e | 00 | 04 | 00 | xx | xx | xx | xx | xx | xx | xx | xx | xx | xx | xx | xx | 00 |
Send
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24-31 | ||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ID | const | mode | cmd | const ^ 0xff | mode ^ 0xf | cmd ^ 0xf | index | left back button slot 1 start time | left back button slot 2 start time | left back button slot 3 start time | left back button macro start time | right back button slot 1 start time | right back button slot 2 start time | right back button slot 3 start time | right back button macro start time | |||||||||||
| 01 | a5 | 02 | 01 | 5a | 0d | 0e | 00 | 05 | 00 | xx | xx | xx | xx | xx | xx | xx | xx | xx | xx | xx | xx | xx | xx | xx | xx | 00 |
Send
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8-31 | ||
|---|---|---|---|---|---|---|---|---|---|---|
| ID | const | mode | cmd | const ^ 0xff | mode ^ 0xf | cmd ^ 0xf | index | |||
| 01 | a5 | 02 | 01 | 5a | 0d | 0e | 00 | 06 | 00 | 00 |
Send
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8-31 | ||
|---|---|---|---|---|---|---|---|---|---|---|
| ID | const | mode | cmd | const ^ 0xff | mode ^ 0xf | cmd ^ 0xf | index | |||
| 01 | a5 | 02 | 01 | 5a | 0d | 0e | 00 | 07 | 00 | 00 |
Send
| 0 | 1 | 2 | 3 | 4 | 5-31 | ||
|---|---|---|---|---|---|---|---|
| ID | const | mode | cmd | const ^ 0xff | mode ^ 0xf | cmd ^ 0xf | |
| 01 | a5 | 02 | 02 | 5a | 0d | 0d | 00 |
Response
| 0 | 1 | 2 | 3 | 4 | 5-7 | 8 | 9 | 10 | 11 | 12 | 13-23 | 24 | 25 | 26-63 | ||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ID | const | mode | cmd | const ^ 0xff | mode ^ 0xff | cmd ^ 0xff | ready state | gamepad version minor | gamepad version major | keyboard version minor | keyboard version major | config checksum | unk | |||
| 01 | a5 | 02 | 02 | 5a | 0d | 0d | 00 | aa | xx | xx | xx | xx | 00 | xx | xx | xx |
Checksum is the sum of the 256 configuration bytes.
Send
| 0 | 1 | 2 | 3 | 4 | 5-31 | ||
|---|---|---|---|---|---|---|---|
| ID | const | mode | cmd | const ^ 0xff | mode ^ 0xf | cmd ^ 0xf | |
| 01 | a5 | 02 | 03 | 5a | 0d | 0c | 00 |