Add updatable ADAU1701 program via flash partition and HTTP API.

Decouple the SigmaStudio RAM download from compiled-in adau1701_program.c:
DRAD v1 blobs in the dsp partition with embedded fallback, POST /api/dsp/program,
and host-tested blob parse/serialize helpers.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-07-07 09:21:49 +02:00
co-authored by Cursor
parent cd94e36a9d
commit cc4a03168e
31 changed files with 1302 additions and 50 deletions
+14 -2
View File
@@ -15,8 +15,13 @@ SigmaStudio project **DigiRadio**, IC1 = ADAU1701. Shipped with DigiRadio firmwa
## Runtime (fw 0.8.3)
- **Boot:** ESP32 replays `default_download_IC_1()` over I2C via
`adau1701::Adau1701Driver` on every power-up.
- **Boot:** ESP32 replays the active `DspProgram` over I2C via
`adau1701::Adau1701Driver` on every power-up. Source order: valid blob in
the `dsp` flash partition, else the embedded export from this folder
(`EmbeddedDspProgramSource`).
- **Program update:** `POST /api/dsp/program` with a `DRAD` v1 blob (see
`Software/tools/pack_dsp_program.py`). Device reboots and loads the new
script on next boot.
- **Live control:** six-band PEQ, input mixer, master volume, stereo/bass
enhancement overlays — safeload via `audio::AudioService` and REST
`/api/audio/*`; profile persisted in encrypted NVS.
@@ -37,6 +42,13 @@ Parameter map: `components/drivers/adau1701/include/adau1701/Adau1701ParamMap.hp
Do **not** use SigmaStudio *Link Compile Download* on DigiRadio — export only;
the ESP32 programs the DSP at every power-up.
## DRAD v1 blob (flash / HTTP upload)
Layout: magic `DRAD`, version u16 (=1), write count u16, CRC32 (IEEE over
writes section), then for each write: address u16, length u16, data bytes.
Pack from JSON with `Software/tools/pack_dsp_program.py` or use
`core::serializeDspProgramBlob()` in host tests.
## Documentation
- Design: `docs/manual/ch-sigmastudio.tex`
@@ -36,19 +36,14 @@ void sigma_studio_set_device(void* i2cDevHandle);
*
* @param devAddress SigmaStudio device address (0x68 write addr).
* @param address 16-bit target address in DSP memory map.
* @param length Payload length in bytes.
* @param length Payload length in bytes (may exceed 255).
* @param pData Payload bytes.
*/
void SIGMA_WRITE_REGISTER_BLOCK(unsigned char devAddress,
unsigned int address,
unsigned char length,
unsigned int length,
ADI_REG_TYPE* pData);
/**
* @brief Run the DigiRadio SigmaStudio default download sequence.
*/
void adau1701_run_default_download(void);
/** Safeload data register base (0x0810..0x0814). */
#define ADAU1701_SAFELOAD_DATA_BASE 0x0810U
/** Safeload address register base (0x0815..0x0819). */