Fix Si4684 DAB response-parsing bugs found in firmware review

readDabServiceData(): 6 of 7 response fields (dataSrc, serviceId,
componentId, byteCount, segmentIndex, segmentCount) read one byte too
early, using the old raw[4]=RESP4 convention instead of the correct
raw[5]=RESP4 (established elsewhere in this driver by getPartInfo() and
readDabDigRadStatus()'s own ficQuality/cnrDb fields). dataSrc landing on
the wrong byte meant the DAB dynamic label (PAD/now-playing text) check
(dataSrc == 2) could essentially never match — it has likely never worked.
Header buffer grown 24->25 bytes to fit the correctly-positioned last field.

fetchDabServiceList(): didn't match AN649 Table 14's "DAB/DMB Digital
Service List" layout at all — serviceCount read from the wrong byte, every
per-service field misaligned, componentId assumed 4 bytes wide (actually
2 per the spec), and only the first of a service's possibly-several
components was ever skipped past (desyncing every later entry). Rewrote
against the actual Table 14 field layout. Confirmed live yesterday this
was producing garbled service_id/component_id/label output
(component_id values decoding as literal ASCII spaces).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0178rASQ6ZETPMUamvpoR2KR
This commit is contained in:
2026-08-18 07:50:09 +02:00
co-authored by Claude Sonnet 5
parent 9b337e7bca
commit 8a69cbed08
2 changed files with 54 additions and 24 deletions
@@ -615,3 +615,20 @@ yet identified; unrelated to the Si4684 investigation (separate chip), but
treat BT1035 boot failure as non-fatal rather than halting the whole device,
so the rest of the system (Si4684 tuning, web UI, Wi-Fi) remains usable
while this is investigated separately.
## TODO (next session)
- **Antenna/front-end calibration, now meaningful.** Before this session's
fixes, any ANTCAP sweep or front-end network experiment was untrustworthy
— a bad result could have been the software bug, not the antenna. Now
that the receiver chain is verified correct end to end (real FM lock,
real DAB lock, real audio), redo the ANTCAP sweep and compare the actual
front-end network (§ "Front-end network component mismatch" above)
against AN851 properly, with results that can actually be trusted.
- Fix `fetchDabServiceList()` entry parsing (garbled service_id/component_id/
label) against AN649 §7 "Digital Services User's Guide" (~page 418).
- Confirm actual DAB audio playback end to end (blocked on the item above).
- Try a proper FM antenna to see if the residual noise under the music
clears up (suspected antenna quality, not yet confirmed).
- BT1035 boot-failure root cause still open (see section above) — non-fatal
now, so it's no longer blocking, but still unexplained.