Skip to content

IPI FLY PRO Command Map

SpookyyQ edited this page May 11, 2026 · 1 revision

IPI FLY PRO Command Map

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.

DPI

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

Performance

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

Advanced

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

Device / Utility

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

Clone this wiki locally