Client reported crashes, wrong/frozen data and that the app floods the
adapter MCU. See docs/FIX_2026-10-12.md for the full analysis.
- Poller: strictly one request outstanding; next request only after a valid
128-byte reply or a 500 ms timeout, then a quiet period + buffer flush.
Default 100 ms (10 Hz), minimum 80 ms. DTC clear/probe share the same lock.
- BtNotifier: filter the adapter's default (no-ECU-data) frame instead of
holding last values; EcuDataStatus + status banner; auto-reconnect on link
loss, stalls or long default-only runs (rate-limited). A reconnect still in
flight when the user disconnects is discarded.
- S300 offsets corrected by column counting (trims, PA, ERR00-03, Eth, SW5,
AF); INJ/AIN little-endian; fan = SW5 FANC only. Default-frame detection
requires bytes 0-16 and 32-36.
- KPro RPM/MAP2/AIN little-endian (RPM still needs a bench check).
- Crash hardening: zone/Flutter/platform error handlers to an in-app log
(copyable from Debug); permissions requested before listing devices.
- Remove temporary debug prints; graph redraws live; polling options
100-300 ms, persisted.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>