Skip to content

Commit bd62ef2

Browse files
committed
Document ATK LED color and numeric captures
1 parent 7cb80e4 commit bd62ef2

1 file changed

Lines changed: 94 additions & 6 deletions

File tree

docs/atk-fierce-x-protocol-notes.md

Lines changed: 94 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -246,6 +246,35 @@ byte[11] = enable: 0=off, 1=on
246246
byte[12] = 0x55 - enable
247247
```
248248

249+
Additional captures show the same `0x4C` block also carries LED brightness and
250+
speed. This was captured while changing the receiver/DPI LED controls.
251+
252+
```txt
253+
off: 07 00 00 4c 08 00 00 ff 56 05 50 00 55 00 00 f3
254+
solid: 07 00 00 4c 08 01 54 ff 56 05 50 01 54 00 00 9e
255+
breathing: 07 00 00 4c 08 02 53 ff 56 05 50 01 54 00 00 9e
256+
257+
speed slow: 07 00 00 4c 08 02 53 ff 56 01 54 01 54 00 00 9e
258+
speed mid: 07 00 00 4c 08 02 53 ff 56 03 52 01 54 00 00 9e
259+
260+
brightness min: 07 00 00 4c 08 01 54 10 45 03 52 01 54 00 00 9e
261+
brightness mid: 07 00 00 4c 08 01 54 80 d5 03 52 01 54 00 00 9e
262+
brightness max: 07 00 00 4c 08 01 54 ff 56 03 52 01 54 00 00 9e
263+
```
264+
265+
Observed `0x4C` field layout:
266+
267+
```txt
268+
byte[5] mode: 0=off, 1=solid, 2=breathing
269+
byte[6] 0x55 - mode, except off has also been captured as 0x00
270+
byte[7] brightness raw: 0x10=min, 0x80=middle, 0xff=max
271+
byte[8] 0x55 - brightness
272+
byte[9] speed raw: 0x01=slow, 0x03=middle
273+
byte[10] 0x55 - speed
274+
byte[11] enable: 0=off, 1=on
275+
byte[12] 0x55 - enable
276+
```
277+
249278
### Debounce
250279

251280
Debounce is stored in the `0xA9` block. Bytes 5/6 are the debounce value and
@@ -298,15 +327,27 @@ sleep-timer write sequence until a cleaner capture proves otherwise.
298327

299328
### Lift-Off Distance
300329

301-
Captured from decrease/increase controls:
330+
Captured from decrease/increase controls. This is command/address `0x0A` with
331+
payload length `0x02`. Byte 5 is the raw value and byte 6 follows
332+
`0x55 - value`.
302333

303334
```txt
335+
07 00 00 0a 02 01 54 00 00 00 00 00 00 00 00 e5
336+
07 00 00 0a 02 02 53 00 00 00 00 00 00 00 00 e5
337+
07 00 00 0a 02 03 52 00 00 00 00 00 00 00 00 e5
338+
07 00 00 0a 02 04 51 00 00 00 00 00 00 00 00 e5
304339
07 00 00 0a 02 05 50 00 00 00 00 00 00 00 00 e5
305340
07 00 00 0a 02 06 4f 00 00 00 00 00 00 00 00 e5
341+
07 00 00 0a 02 07 4e 00 00 00 00 00 00 00 00 e5
342+
07 00 00 0a 02 08 4d 00 00 00 00 00 00 00 00 e5
343+
07 00 00 0a 02 09 4c 00 00 00 00 00 00 00 00 e5
344+
07 00 00 0a 02 0a 4b 00 00 00 00 00 00 00 00 e5
345+
07 00 00 0a 02 0b 4a 00 00 00 00 00 00 00 00 e5
306346
```
307347

308-
This differs from IPI's 0.7/1/2 mm mapping. The exact ATK UI values need one
309-
clean capture per visible LOD option before implementing.
348+
This differs from IPI's 0.7/1/2 mm mapping. If this was captured from the ATK
349+
LOD control, the visible control likely maps to raw values `1..11`. The exact
350+
ATK UI label/unit still needs confirmation before implementing.
310351

311352
### A9 Toggle Fields
312353

@@ -399,6 +440,52 @@ This indicates direct RGB bytes:
399440
byte[6..8] = red, green, blue
400441
```
401442

443+
### DPI Preset / Receiver LED Color Table
444+
445+
Captured while changing the receiver LED color from red to green and back to
446+
red. ATK V HUB wrote a color table at addresses `0x2C`, `0x34`, `0x3C` and
447+
`0x44`. Each 8-byte block carries two RGB color groups.
448+
449+
Group format:
450+
451+
```txt
452+
[red, green, blue, check]
453+
check = (0x255 - red - green - blue) & 0xFF
454+
```
455+
456+
Examples:
457+
458+
```txt
459+
red: ff 00 00 56
460+
green: 00 ff 00 56
461+
blue: 00 00 ff 56
462+
magenta: ff 00 ff 57
463+
```
464+
465+
Observed block writes:
466+
467+
```txt
468+
07 00 00 2c 08 ff 00 00 56 00 ff 00 56 00 00 68
469+
07 00 00 34 08 00 00 ff 56 04 00 ff 52 00 00 60
470+
07 00 00 3c 08 ff 00 ff 57 ff 00 ff 57 00 00 58
471+
07 00 00 44 08 ff 00 ff 57 ff 00 ff 57 00 00 50
472+
473+
07 00 00 34 08 00 00 ff 56 59 ff 00 fd 00 00 60
474+
07 00 00 34 08 00 00 ff 56 ff 59 00 fd 00 00 60
475+
```
476+
477+
This strongly suggests a palette/preset table with two color slots per address:
478+
479+
```txt
480+
0x2C -> color slots 1 and 2
481+
0x34 -> color slots 3 and 4
482+
0x3C -> color slots 5 and 6
483+
0x44 -> color slots 7 and 8
484+
```
485+
486+
The exact UI mapping still needs clean one-slot captures because the color picker
487+
emitted several intermediate colors while dragging.
488+
402489
## Initial Observations
403490

404491
- ATK and IPI share enough framing that the current Rust checksum helpers can be reused.
@@ -411,6 +498,7 @@ byte[6..8] = red, green, blue
411498
For each capture: click `Clear`, change exactly one setting, then use `Copy hex`.
412499

413500
1. DPI value: set stage 1 to known fixed values, especially `800`, `900`, `1600` and `1800`, to remove the remaining raw-value ambiguity.
414-
2. LOD: set every visible lift-off distance option and record the exact UI label for each frame.
415-
3. Firmware/version reads: identify which startup responses map to mouse and dongle firmware versions.
416-
4. Button remapping: capture one simple remap, for example side button -> DPI cycle.
501+
2. Confirm the exact UI label/unit for the `0x0A` numeric setting, likely LOD.
502+
3. DPI preset / receiver LED color slots: capture one slot at a time with a single click, not a drag, to map slot order exactly.
503+
4. Firmware/version reads: identify which startup responses map to mouse and dongle firmware versions.
504+
5. Button remapping: capture one simple remap, for example side button -> DPI cycle.

0 commit comments

Comments
 (0)