Files
DigiRadio/Software/instructions.md
T
micheleandCursor 0a1188ad66 Release fw 0.8.5: BT1035 I2S boot init and hardware doc alignment.
Switch BT1035 bring-up from Line-In to I2S slave (AT+AUXCFG=3, AT+I2SCFG=67) to match the ADAU1701 PCM routing, confirm 2 kΩ I2C pull-ups on R1/R16, and sync firmware docs, AGENTS rules, and the DATASHEET bundle.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-08 14:41:31 +02:00

4.7 KiB
Raw Blame History

instructions.md — DigiRadio firmware, agent kickoff

Read this together with AGENTS.md and everything under .cursor/rules/. Those define how to write code; this file defines what we are building and the current state on main.

Firmware on main: 0.8.5 — agent tasks T1T12 complete; device HIL pending PCB arrival.

What DigiRadio is

An open-source Hi-Fi DAB+/FM digital radio board. Firmware runs on an ESP32-S3 and coordinates three companion chips:

  • Si4684 — DAB+/FM tuner (delivers the audio stream).
  • ADAU1701 — SigmaDSP: equaliser + input mixer between the Si4684 and the ESP32 audio path. Program is written to DSP RAM at every boot (no self-boot EEPROM).
  • FSC-BT1035 (QCC3056) — Bluetooth 5.2 out with aptX Adaptive, controlled by AT commands over UART.

Plus: tabbed web UI for provisioning and control; encrypted NVS for Wi-Fi credentials, presets, audio profiles, and last-preset index.

Repository: https://github.com/manvalan/DigiRadio

Confirmed technical decisions (do not re-litigate)

Area Decision
Framework ESP-IDF v5.5.x (native, not Arduino)
Language C++23, pinned -std=gnu++23
Errors std::expected<T, Error> (native); exceptions OFF
DSP boot ESP32 writes ADAU1701 RAM at every boot (no EEPROM)
Architecture Functional core (pure, host-tested) + imperative shell
Security NVS + flash encryption (dev mode); see docs/security-flash-nvs.md
Docs Doxygen + LaTeX manual sync (CI enforced)
HW licence CERN-OHL-S v2 · FW licence: Apache-2.0

Roadmap status

Slice / task Status Notes
1 Walking skeleton Done SoftAP, gzipped UI, /api/health
2 Secure store + Wi-Fi Done ISecureStore, STA provisioning
3 Companion-chip boot Done Si4684 + ADAU1701 from Firmware/
4 Station presets Done (0.7.0) NVS station_list, full /api/stations/*
5 ADAU1701 runtime Done EQ, mixer, enhancements, audio API
6 Si4684 tuning Done FM/DAB tune, seek, RSQ, RDS, DAB services/DLS
7 BT1035 Done (0.8.4) Pairing, A2DP, name/plist/auto-reconnect AT
8 Integration Done (0.8.1) IntegrationService, last-preset NVS
T6 Web UI Done (0.8.4) Tabbed SPA + System tab (OTA/DSP upload)
T7 Si4684 blobs Done (0.8.2) Local-only .bin, CI policy check
T8 NVS encryption Done (0.8.3) initEncryptedStorage; HIL when PCB ready
T9T12 Platform Done (0.8.4) Dual OTA, EEPROM identity, DSP + firmware OTA

Next work: hardware-in-the-loop (docs/TODO.md § P4), not new features unless the user requests them.

  • Blockers first — state risks before solutions.
  • One vertical slice at a timemain always builds; host tests green.
  • Apache header + Doxygen doc blocks on every file/class/method.
  • Never invent register/opcode/boot steps — cite the datasheet or stop.
  • After changes: ctest, doxygen, check-manual-sync.py, check_si4684_blobs.py.

Slice 1 — Walking skeleton (complete)

  • ESP-IDF esp32s3, C++23, components/core host-testable.
  • SoftAP DigiRadio-<suffix> (or setup fallback), gzipped page, GET /api/health.
  • Health JSON includes fw (today 0.8.5), serialNumber, companion-chip flags.
  • BT1035 boot must send AT+AUXCFG=3 and AT+I2SCFG=67 (I2S from ADAU1701).

Slice 2 — Secure store + Wi-Fi STA (complete)

  • ISecureStore, NvsSecureStore, StaClient, NetBootstrap.
  • POST /api/wifi + Wi-Fi tab in web UI.
  • NVS encryption enabled in fw 0.8.3 via initEncryptedStorage().

Slice 3 — Companion-chip boot (complete)

  • Si4684 blobs local-only (tools/fetch_si4684_firmware.py).
  • Si4684Driver, Adau1701Driver, HardwareBootstrap before network.
  • Device flash: pending HIL on first PCB.

Slices 48 — Presets, audio, tuner, BT, integration (complete)

  • Presets: StationService, reorder, integration recall with audio profile.
  • Audio: six-band EQ, enhancements, NvsAudioProfileStore.
  • Tuner: RDS/DLS metadata in status JSON and Now Playing UI.
  • Bluetooth: BluetoothService, pairing REST + UI.
  • Integration: boot loads last preset; POST /api/stations/tune orchestrates tune + audio + NVS.

Quality gates (from Software/)

cmake -S components/core/test -B build-host && cmake --build build-host
ctest --test-dir build-host --output-on-failure
doxygen Doxyfile
python3 tools/check-manual-sync.py
python3 tools/check_si4684_blobs.py

First device flash with encryption: idf.py erase-flash flash — see docs/security-flash-nvs.md.