Fix Si4684 FM/DAB tune commands: ARG offset bug caused total RF blackout

writeCommand() always prepends a fixed ARG1=0x00 byte before the payload;
tuneFm()/tuneDab() built their argument arrays starting at what the author
believed was ARG1, so every byte landed one slot right of its real AN649
position and an extra unused byte was appended. The chip never received the
requested frequency. This is the root cause of the months-long total RF
blackout (RSQ frozen at all-zero on every frequency/ANTCAP value) previously
attributed to a QFN exposed-pad hardware defect — that hypothesis is now
overturned, confirmed live: RSSI/SNR now read real, frequency-dependent
values with zero STC timeouts after the fix.

Also make BT1035 boot failure non-fatal in HardwareBootstrap::boot() so a
companion-chip fault no longer halts the whole device (Si4684 tuning, web
UI, Wi-Fi already isolate BT1035 readiness via CompanionChipStatus).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0178rASQ6ZETPMUamvpoR2KR
This commit is contained in:
2026-08-16 00:19:43 +02:00
co-authored by Claude Sonnet 5
parent bc1b1b1472
commit ef15e9839c
3 changed files with 200 additions and 12 deletions
+11 -10
View File
@@ -127,17 +127,18 @@ std::expected<void, HardwareBootError> HardwareBootstrap::boot()
}
if (auto btResult = gBt1035.boot(); !btResult) {
ESP_LOGE(kTag, "BT1035 boot failed");
return std::unexpected(HardwareBootError::Bt1035BootFailed);
}
ESP_LOGE(kTag, "BT1035 boot failed — continuing without Bluetooth");
} else {
if (auto nameResult =
gBt1035.setDeviceName(gDeviceIdentity.bluetoothName());
!nameResult) {
ESP_LOGW(kTag, "BT1035 device name set failed");
}
if (auto nameResult =
gBt1035.setDeviceName(gDeviceIdentity.bluetoothName()); !nameResult) {
ESP_LOGW(kTag, "BT1035 device name set failed");
}
if (auto reconnectResult = gBt1035.setAutoReconnect(3U); !reconnectResult) {
ESP_LOGW(kTag, "BT1035 auto-reconnect set failed");
if (auto reconnectResult = gBt1035.setAutoReconnect(3U);
!reconnectResult) {
ESP_LOGW(kTag, "BT1035 auto-reconnect set failed");
}
}
gReady = true;