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>
Work that was previously only in the local working tree:
- Rename fuelCut -> fuelPump (SW2 bit2, active-low, live-confirmed)
- ECT/IAT/BAT moved to live-confirmed offsets 33/34/36
- S300 template-frame detection with hold-last-good logic
- Persist ECU type in SharedPreferences; drop per-connect protocol dialog
- Official-protocol probe and DTC clear on the debug/DTC screens
- Sanity clamp for multi-byte fields; scrollable vertical dashboard
- docs/HANDOFF.md
Includes temporary [DBG]/[KDBG] prints, removed in the next commit.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>