Two targeted fixes: 1. Deduplicate LED writes in handle_knob: compute new colours and only call send_leds() when they differ from last_led_colors. A single physical knob turn produces 20-50 ADC samples in quick succession; without this guard each sample triggers a 47-byte write and the firmware can't keep up, causing visible flicker. 2. Gate reapply_app_volumes on a 200 ms knob-quiet period. Calling playerctl/pulsectl while the user is actively turning a knob stalls the main loop, backing up serial data, missing heartbeats, and causing the device LEDs to time out mid-turn. Both state variables (last_led_colors, last_knob_event) are mutable lists initialised in main() and threaded through handle_knob, keeping module-level globals out of the picture. Adds 6 new unit tests (56 total, all passing). |
||
|---|---|---|
| .. | ||
| __init__.py | ||
| audio.py | ||
| config.py | ||
| turnupd.py | ||