-
Notifications
You must be signed in to change notification settings - Fork 0
IPI FLY PRO Command Map
SpookyyQ edited this page May 11, 2026
·
1 revision
This page lists all IPI FLY PRO functions currently known by the project.
The Web-driver equivalent column documents the observed HID-level action that the official web driver appears to trigger. The original web-driver function names are not stored in this repository, so this wiki uses the equivalent command/address instead.
All frames below are 16-byte payloads. The actual HID write prepends Report ID 0x08.
| Feature | App IPC call | Protocol builder | Web-driver equivalent | Values | Frame / notes |
|---|---|---|---|---|---|
| Select active DPI stage | cmd_set_dpi_stage(stage) |
cmd_select_stage(stage) |
Set dpiGear / current DPI index at address 0x04
|
stage: 0..3
|
ENCAP=0x04, byte[5]=stage
|
| Set DPI value | cmd_set_dpi_value(stage, dpi) |
cmd_set_dpi(stage, dpi) |
Set DPI value for the selected/current stage |
dpi: 50..42000, step 50
|
ENCAP=0x18, byte[4]=0x04, byte[5]=byte[6]=(dpi / 50) - 1, byte[8]=0x77
|
| DPI LED mode | cmd_set_dpi_led_mode(mode) |
cmd_dpi_led_mode(mode) + cmd_dpi_led_apply(mode)
|
Set DPI LED effect and apply LED state |
Off, Solid, Breathing
|
Solid: ENCAP=0x4C, value 0x01; Breathing: 0x02; Apply: ENCAP=0x52, value 0x01; Off only sends Apply value 0x00
|
| DPI LED brightness | cmd_set_dpi_led_brightness(brightness) |
cmd_dpi_led_brightness(raw) |
Set DPI LED brightness | UI 0..10, raw 0..255
|
ENCAP=0x4E, byte[5]=raw, raw = brightness * 255 / 10
|
| DPI LED breathing speed | cmd_set_breathing_speed(speed) |
cmd_breathing_speed(speed) |
Set breathing animation speed |
1..5; verified 2,3,4,5
|
ENCAP=0x50, byte[5]=speed
|
Known DPI value example:
Set stage 4 to 5600 DPI:
07 00 00 18 04 6f 6f 00 77 00 00 00 00 00 00 d5| Feature | App IPC call | Protocol builder | Web-driver equivalent | Values | Frame / notes |
|---|---|---|---|---|---|
| Polling rate | cmd_set_polling_rate(rate) |
cmd_polling_rate(rate) + cmd_polling_rate_apply(rate)
|
Change polling rate, then apply the rate |
125, 250, 500, 1000, 2000, 4000, 8000 Hz |
First frame uses ENCAP=0x00; apply frame uses ENCAP=0xB9; both use the same value byte |
| Lift-off distance | cmd_set_lod(lod) |
cmd_lod(lod) |
Set LOD |
0.7 mm, 1 mm, 2 mm
|
ENCAP=0x0A; 0.7mm=0x03, 1mm=0x01, 2mm=0x02
|
| Sleep timer | cmd_set_sleep(sleep) |
cmd_sleep(value) |
Set sleep timeout | raw 1..255; verified 7, 8, 100
|
ENCAP=0xAD, byte[5]=value
|
| Debounce time | cmd_set_debounce(ms) |
cmd_debounce(ms) |
Set key debounce | raw ms; verified 0, 5, 6, 7, 8, 20
|
ENCAP=0xA9, byte[5]=ms
|
| Linear correction | cmd_set_linear_correction(enabled) |
cmd_linear_correction(enabled) |
Toggle linear correction |
0 off, 1 on |
ENCAP=0xAF, byte[5]=0/1
|
| Waveform control | cmd_set_waveform_control(enabled) |
cmd_waveform_control(enabled) |
Toggle waveform control |
0 off, 1 on |
ENCAP=0xB1, byte[5]=0/1
|
| Motion Sync | cmd_set_motion_sync(enabled) |
cmd_motion_sync(enabled) |
Toggle Motion Sync |
0 off, 1 on |
ENCAP=0xAB, byte[5]=0/1
|
| Work mode | cmd_set_work_mode(mode) |
cmd_work_mode(mode) |
Set power/performance mode |
0 low power, 1 high performance, 2 ultra unverified |
ENCAP=0xB9, byte[5]=mode; 0 and 1 verified |
Polling rate raw values:
| Polling rate | Raw value | Set frame | Apply frame |
|---|---|---|---|
| 125 Hz | 0x08 |
07 00 00 00 02 08 4d 00 00 00 00 00 00 00 00 ef |
07 00 00 b9 02 08 4d 00 00 00 00 00 00 00 00 36 |
| 250 Hz | 0x04 |
07 00 00 00 02 04 51 00 00 00 00 00 00 00 00 ef |
07 00 00 b9 02 04 51 00 00 00 00 00 00 00 00 36 |
| 500 Hz | 0x02 |
07 00 00 00 02 02 53 00 00 00 00 00 00 00 00 ef |
07 00 00 b9 02 02 53 00 00 00 00 00 00 00 00 36 |
| 1000 Hz | 0x01 |
07 00 00 00 02 01 54 00 00 00 00 00 00 00 00 ef |
07 00 00 b9 02 01 54 00 00 00 00 00 00 00 00 36 |
| 2000 Hz | 0x10 |
07 00 00 00 02 10 45 00 00 00 00 00 00 00 00 ef |
07 00 00 b9 02 10 45 00 00 00 00 00 00 00 00 36 |
| 4000 Hz | 0x20 |
07 00 00 00 02 20 35 00 00 00 00 00 00 00 00 ef |
07 00 00 b9 02 20 35 00 00 00 00 00 00 00 00 36 |
| 8000 Hz | 0x40 |
07 00 00 00 02 40 15 00 00 00 00 00 00 00 00 ef |
07 00 00 b9 02 40 15 00 00 00 00 00 00 00 00 36 |
| Feature | App IPC call | Protocol builder | Web-driver equivalent | Values | Frame / notes |
|---|---|---|---|---|---|
| Receiver LED | cmd_set_receiver_led(mode) |
cmd_receiver_led(mode) |
Set receiver/dongle LED behavior |
1 Hz indicator, 2 battery indicator, 3 warning only |
Block-style write: 14 00 00 00 0a <mode> 00 ff 00 ff ff 00 ff 00 00 <0x33-mode>
|
| Full power / rage mode | cmd_set_working_mode(mode) |
cmd_working_mode(mode) |
Toggle full power mode |
0 off, 1 on |
ENCAP=0xB5, byte[5]=0/1
|
| Rage time | cmd_set_rage_time(seconds) |
cmd_rage_time(seconds) |
Set full-power duration | verified 1, 3, 6, 12, 18, 36, 60, 90 seconds |
ENCAP=0xB7, byte[5]=seconds
|
| Long-distance mode | cmd_set_long_distance(enabled) |
cmd_long_distance(enabled) |
Toggle long-distance wireless mode |
0 off, 1 on |
Block-style write: on 16 00 00 00 0a 01 00 00 00 00 00 00 00 00 00 2c; off 16 00 00 00 0a 00 00 00 00 00 00 00 00 00 00 2d
|
| 20K FPS scan rate | cmd_set_fps20k(enabled) |
cmd_fps20k(enabled) |
Toggle 20K FPS sensor scan rate |
0 off, 1 on |
ENCAP=0xE1, byte[5]=0/1
|
| Angle snapping enable | cmd_set_angle(enabled, angle) |
cmd_angle_enable(enabled) |
Toggle angle snapping |
0 off, 1 on |
ENCAP=0xBF, byte[5]=0/1
|
| Angle snapping value | cmd_set_angle(true, angle) |
cmd_angle(angle) |
Set angle snapping angle | -45..45 |
ENCAP=0xBD, byte[5]=angle; negative values are two's-complement |
Receiver LED verified frames:
| Mode | Frame |
|---|---|
| Hz indicator | 14 00 00 00 0a 01 00 ff 00 ff ff 00 ff 00 00 32 |
| Battery indicator | 14 00 00 00 0a 02 00 ff 00 ff ff 00 ff 00 00 31 |
| Warning only | 14 00 00 00 0a 03 00 ff 00 ff ff 00 ff 00 00 30 |
| Feature | App IPC call | Protocol builder | Web-driver equivalent | Values | Frame / notes |
|---|---|---|---|---|---|
| Status poll | cmd_status() |
cmd_status() |
Read device status | none | 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 4a |
| Battery query |
cmd_status() internally |
cmd_battery() |
Read battery/status packet | none |
04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 49; parsing is currently unreliable |
| Read settings | cmd_read_settings() |
cmd_block_read(addr) + cmd_read_dpi_stage()
|
Read config memory blocks | addresses 0x00, 0x0A, 0x14, 0xAA, 0xB4
|
See Reading Settings |
| List HID devices | cmd_list_hid_devices() |
none | Native helper, not a mouse command | none | Uses hidapi enumeration |
| Factory reset | cmd_factory_reset() |
cmd_factory_reset() |
Factory reset | none | 09 00 00 00 00 00 00 00 00 00 00 00 00 00 00 44 |
| Raw frame | cmd_raw(hex_frame) |
none | Developer/debug only | 16-byte payload | Sends a user-supplied raw frame and returns the response |