turn-up-arch/tests
Sean Doran 390e290b57
fix: prevent LED flicker from dropped knob messages at read-buffer boundary
parse_messages() previously advanced past a 0xFE start byte whenever no
complete frame could be matched, silently consuming partial frames at the
end of each ser.read(64) call as garbage.  When the device sends 20-50
rapid knob messages during a fast turn and one message straddles the
64-byte read boundary, the split message was discarded: the daemon skipped
a knob-position update, the LED color lagged, and when the next complete
message arrived the color jumped — producing a visible flicker.

Fix: break out of the parse loop when a 0xFE is followed by a known type
byte (0x02/0x03/0x06/0x07) but the buffer does not yet hold a complete
frame.  The partial bytes are returned in the remainder and prepended to
the next ser.read() chunk, so no message is ever lost.

Also sync last_led_colors after the initial send_leds() on connect so the
dedup guard is accurate from the first knob event instead of from the
first heartbeat.

Adds 5 tests covering partial heartbeat, button, and knob frames, the
split-read round-trip, and unknown frame type skipping (61 pass total).
2026-02-28 14:45:46 -05:00
..
__init__.py Refactor: extract audio.py, add 50 unit tests 2026-02-27 18:40:13 -05:00
test_audio.py Refactor: extract audio.py, add 50 unit tests 2026-02-27 18:40:13 -05:00
test_protocol.py fix: prevent LED flicker from dropped knob messages at read-buffer boundary 2026-02-28 14:45:46 -05:00