- Rewrite S300 and KPro DTC tables from hvbt_protocol.pdf (the previous
tables did not match the PDF; e.g. ERR01.6 is P0350 IGM, not P1361).
- Clear DTC: the adapter never echoes the documented ack, but the ECU does
clear (bench: 3 of 4 codes cleared, P0350 re-set at once as an active
fault). Judge success from the live ERR bytes; wait only 0.6 s for the
ack so polling resumes, and report "N of M cleared".
- Set the ECU protocol from the adapter name (S300/KPro) on connect; a
stale KPro setting made an S300 adapter look unresponsive.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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>