Files
DigiRadio/Software
micheleandCursor 0fc714e431 Add preset polish and broadcast metadata (fw 0.8.0).
Ship station reorder, DAB playing ids in presets, RDS PS/RT and DAB DLS in tuner status, Si4684 data-service read, host tests, and UI now-playing lines.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-07 00:01:49 +02:00
..
2026-07-06 01:12:37 +02:00
2026-07-06 15:15:38 +00:00
2026-07-06 07:22:56 +02:00
2026-07-06 01:12:37 +02:00
2026-07-06 01:12:37 +02:00

DigiRadio Firmware

Open-source Hi-Fi DAB+/FM receiver firmware for the ESP32-S3.

Status: fw 0.8.0 — RDS/DLS now-playing metadata in tuner status; preset reorder, CI on main (host tests, Doxygen, manual sync). See docs/TODO.md for the agent task list.

Quick start

Open this directory (Software/) as the Cursor project so AGENTS.md and .cursor/rules/ load automatically.

idf.py set-target esp32s3
idf.py build
idf.py -p <port> flash monitor

Host unit tests (pure core, no hardware):

cmake -S components/core/test -B build-host \
      -DCMAKE_CXX_COMPILER="$(brew --prefix llvm)/bin/clang++"
cmake --build build-host
ctest --test-dir build-host --output-on-failure

Documentation gates (must exit 0 before merging; also enforced in CI):

doxygen Doxyfile
python3 tools/check-manual-sync.py

Manual PDF (design + HTTP API + class reference):

cd docs/manual && latexmk -lualatex manual.tex

HTTP API (fw 0.8.0)

Method Path Purpose
GET /api/health Status, firmware version, companion-chip flags
POST /api/wifi Provision STA credentials; reboot on success
GET /api/tuner/status Tuner snapshot (DAB/FM)
GET /api/tuner/services DAB service list for current ensemble
POST /api/tuner/tune Tune DAB ensemble or FM frequency
POST /api/tuner/play Start DAB service playback
POST /api/tuner/seek FM seek up
GET/PUT /api/audio/profile Read/apply ADAU1701 mixer + EQ profile
POST /api/audio/reset Factory-flat audio profile
POST /api/audio/stereo-enhance Stereo depth overlay (0100)
POST /api/audio/bass-enhance Bass enhance overlay (0100)
GET /api/bluetooth/status BT1035 boot, pairing, A2DP state
POST /api/bluetooth/pair Enter discoverable mode
POST /api/bluetooth/pair/stop Leave discoverable mode
POST /api/bluetooth/disconnect Release A2DP session
GET /api/stations List saved presets
POST /api/stations Add preset
POST /api/stations/remove Remove preset by index
POST /api/stations/reorder Move preset (from/to indices)
POST /api/stations/tune Recall preset on tuner

Full schemas, error tokens, and boot flow: docs/manual/ch-api.tex. C++ signatures: doxygen Doxyfiledocs/api/html/index.html.

Layout

Path Role
Firmware/ Si4684 .bin blobs (DAB+FM) + ADAU1701 SigmaStudio export
components/core/ Pure domain (host-tested)
components/drivers/ Si4684, ADAU1701, BT1035 drivers
components/services/ Tuner, audio, Bluetooth, station services
components/net/ Wi-Fi, HTTP server, gzipped web UI
docs/manual/ LaTeX technical manual (canonical)
docs/TODO.md Agent task list (prioritised backlog)

See AGENTS.md §12 and instructions.md for coding rules and slice roadmap.

Licence

Apache-2.0 — see LICENSE.