Add internet radio streaming with runtime API, modernize web UI, remove auto-tune/beep at boot
Streaming (main feature this session): - New WebRadioConfig/WebRadioJson core types, ISecureStore-backed persistence - New webradio::WebRadioService (thread-safe live config) + GET/POST /api/streaming - web_radio_stream task now runtime-toggleable (no reboot), no hardcoded URL - Content-Type diagnostic: warns clearly when a URL is a webpage, not an audio stream Boot cleanup: - Removed boot-time auto FM/DAB tune, auto-beep, and the (now-concluded) Si4684 crystal IBIAS/CTUN empirical sweep from main.cpp — tuning/beep are on-demand via the existing REST API only Web UI: - Modernized styling (cards, gradients, toggle switches, light/dark theme) - New Stream tab wired to /api/streaming Fixes found via real idf.py build (not just clangd): - Restored wrongly-removed si4684/Si4684Tuner.hpp include in main.cpp - Fixed MP3Decode() argument types in web_radio_stream.cpp (unsigned char**/int*) Quality-gate fixes: - Host-test stub headers (esp_log.h, freertos/*) so TunerService.cpp's scanForStation logging/pacing compiles for station_service_test / integration_service_test instead of running stale binaries - Added WifiScanner and WebRadioService manual sections; filled in missing Doxygen docs on BluetoothService, i2s_sdata_probe, test_firmware, Bt1035At - Ignore clangd's .cache/ index directory Also includes prior uncommitted work carried in the tree: Wi-Fi/Bluetooth device scan REST API and UI (WifiScanner, BT scan), SigmaStudio TCP bridge, and the current ADAU1701 SigmaStudio DSP program export. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,10 @@
|
||||
# Documentazione Integrazione FSC-BT1035 - Sistema DigiRadio
|
||||
|
||||
## 1. Introduzione
|
||||
Il modulo FSC-BT1035 (basato su chipset Qualcomm QCC3056) è un modulo Bluetooth Dual-Mode. Nell'ecosistema DigiRadio, agisce come bridge wireless per l'audio e i dati seriali (SPP/GATT).
|
||||
|
||||
## 2. Architettura di Sistema
|
||||
Il modulo si collega al controller principale DigiRadio tramite:
|
||||
- **UART (Baudrate 115200 8N1)**: Comando e controllo tramite AT Commands.
|
||||
- **Audio Interface**: Uscita differenziale (SPK_P/N) per il sistema di amplificazione o I2S per processori DSP esterni (come l'ADAU1701 presente nel vostro sistema).
|
||||
- **Controllo Hardware**: Pin `SYS_CTRL` per il Power-On e `RESET` per il riavvio hardware.
|
||||
@@ -0,0 +1,16 @@
|
||||
# Configurazione e Setup del Modulo
|
||||
|
||||
## 1. Parametri di Default
|
||||
- **Nome BR/EDR**: FSC-BT1035
|
||||
- **Nome LE**: FSC-BT1035-LE
|
||||
- **Baudrate**: 115200
|
||||
|
||||
## 2. Inizializzazione via UART
|
||||
Al boot, inviare i comandi per impostare l'ambiente:
|
||||
1. `AT+RESTORE`: (Opzionale) Ripristina impostazioni di fabbrica.
|
||||
2. `AT+PROFILE=BITMASK`: Selezionare i profili necessari (Somma i valori binari: SPP=1, GATT_S=2, A2DP_S=32). Esempio: `AT+PROFILE=33` (SPP+A2DP).
|
||||
3. `AT+NAME=DigiRadio_V1,0`: Imposta nome dispositivo senza suffisso MAC.
|
||||
4. `AT+REBOOT`: Applicare i cambiamenti.
|
||||
|
||||
## 3. Verifica stato
|
||||
Monitorare il pin `LEDO` (Pin 17) che indica lo stato di pairing (onda quadra durante scanning, alto a connessione stabilita).
|
||||
@@ -0,0 +1,16 @@
|
||||
# Riferimento Rapido Comandi AT
|
||||
|
||||
## Comandi Generali
|
||||
- `AT+VER`: Query versione firmware (es: `+VER=BT1035,V2.6.1...`).
|
||||
- `AT+ADDR`: Lettura MAC Address (necessario per pairing forzato).
|
||||
- `AT+STAT`: Query globale stati profili (DEV, SPP, GATT, HFP, A2DP, AVRCP).
|
||||
|
||||
## Audio e Connessione
|
||||
- `AT+A2DPCONN=[MAC]`: Connessione a specifica sorgente.
|
||||
- `AT+A2DPAUDIO=1`: Apre flusso audio.
|
||||
- `AT+SPPSEND=[LEN],[DATA]`: Invio dati via SPP (max payload 236 byte).
|
||||
|
||||
## Eventi Asincroni
|
||||
Il modulo risponde con eventi preceduti da `+`. Esempi:
|
||||
- `+SPPDATA=[LEN],[PAYLOAD]`: Ricezione dati seriali.
|
||||
- `+A2DPSTAT=4`: Streaming A2DP attivo.
|
||||
@@ -0,0 +1,10 @@
|
||||
# Note Hardware per DigiRadio
|
||||
|
||||
## 1. Gestione Alimentazione
|
||||
- **VCHG/VBAT**: Il modulo supporta ingressi da 3.0V a 4.2V.
|
||||
- **SYS_CTRL**: Richiede un impulso di >20ms per avviare il power-up da stato DORMANT/OFF.
|
||||
|
||||
## 2. Integrazione ADAU1701 (DSP)
|
||||
Se il DigiRadio utilizza l'ADAU1701 come processore audio:
|
||||
- Collegare le uscite `SPK_P/N` del modulo agli ingressi analogici dell'ADAU1701 (tramite filtro passivo come descritto nel datasheet ADAU1701).
|
||||
- In alternativa, utilizzare l'interfaccia I2S (Pin 4-7 del BT1035) per un collegamento digitale diretto, garantendo che i clock (BCLK, LRCLK) siano configurati in modalità coerente (BT1035 come Master/Slave a seconda del setup dell'ADAU).
|
||||
@@ -0,0 +1,6 @@
|
||||
# Diagnostica e Risoluzione Problemi
|
||||
|
||||
1. **Modulo non risponde**: Verificare i livelli logici RX/TX. Il modulo BT1035 richiede TX e RX stabili. Controllare se il Pin `SYS_CTRL` è alto.
|
||||
2. **Audio distorto**: Verificare che l'impedenza di carico sui pin `SPK_P/N` sia conforme e che il volume digitale (`AT+SPKVOL`) non sia in clipping.
|
||||
3. **Mancato Pairing**: Verificare `AT+PAIR=1`. Assicurarsi che il modulo non sia già connesso a un altro dispositivo.
|
||||
4. **Terminazione Comandi**: Ogni comando deve terminare con `0x0D` (CR) e `0x0A` (LF).
|
||||
Binary file not shown.
+13
@@ -0,0 +1,13 @@
|
||||
# Manuale di Integrazione Hardware FSC-BT1035
|
||||
|
||||
## 1. Architettura di Connessione
|
||||
Il modulo FSC-BT1035 deve essere integrato seguendo rigorosamente le indicazioni di Feasycom per evitare degrado del segnale RF:
|
||||
- **Pin 34 (SYS_CTRL)**: Richiede un segnale di accensione (>20ms). È consigliato un circuito di controllo tramite il controller DigiRadio.
|
||||
- **Pin 16 (BT_RTS/PIO2)**: Utilizzato nativamente per il MUTE degli stadi di potenza. Integrare questa funzione nel sistema di amplificazione del DigiRadio.
|
||||
- **Audio I/O**: Le uscite `SPK_P/N` sono differenziali. Per il collegamento al DSP ADAU1701:
|
||||
- Utilizzare uno stadio di ingresso con op-amp (es. AD8608 come da datasheet ADAU1701) per convertire il segnale differenziale in singolo (o mantenere il bilanciamento se l'ingresso DSP lo permette).
|
||||
- Impedenza: Assicurarsi di rispettare i filtri RC per il passaggio basso (corner 50kHz) per eliminare il noise del codec Bluetooth.
|
||||
|
||||
## 2. Note di Layout (Critiche)
|
||||
- **Clearance Antenna**: Rispettare rigorosamente l'area di "Keep Out" (5mm clearance) attorno all'antenna PCB integrata, come indicato nel documento `FSC-BT1035 Datasheet` (sezione 9).
|
||||
- **Grounding**: Utilizzare una via stitching densa attorno al modulo per connettere i piani di massa e prevenire leakage RF nel PCB del DigiRadio.
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
# Guida alla Configurazione Firmware
|
||||
|
||||
## 1. Analisi file DigiRadio.params
|
||||
Il file `DigiRadio.params` analizzato suggerisce parametri di inizializzazione specifici per l'interfacciamento del modulo. Durante il boot, il controller DigiRadio deve:
|
||||
1. Inviare `AT+VER` per identificare la versione del modulo (es. V2.6.1).
|
||||
2. Caricare i profili: `AT+PROFILE=341` (combinazione SPP, GATT Server, GATT Client, A2DP Source, ecc.).
|
||||
3. Configurare la modalità I2S se il flusso audio è digitale (`AT+I2SCFG`):
|
||||
- Impostare `Param=67` per I2S Slave, 48kHz, 32-bit (o come richiesto dall'ADAU1701).
|
||||
|
||||
## 2. Gestione Profili
|
||||
Il modulo supporta le topologie miste. È possibile mantenere simultaneamente una connessione A2DP (Audio Source) e una GATT (Data).
|
||||
- Nota: Per il passaggio tra le modalità, interrogare sempre lo stato tramite `AT+STAT` prima di tentare nuove connessioni.
|
||||
+13
@@ -0,0 +1,13 @@
|
||||
# Deep Dive Comandi AT e Gestione Eventi
|
||||
|
||||
## 1. Protocollo Comunicazione
|
||||
Il modulo risponde in formato ASCII. Ogni stringa inizia con `
|
||||
` (0x0D 0x0A).
|
||||
- Esempio Parsing:
|
||||
Se il controller riceve `+SPPDATA=10,ABCDEFGHIJ`, il parser deve estrarre il valore `10` come lunghezza e gestire il buffer dei successivi 10 caratteri.
|
||||
|
||||
## 2. Throughput Mode (TPMODE)
|
||||
Per applicazioni ad alto volume dati (es. aggiornamento firmware del DigiRadio via Bluetooth):
|
||||
1. Inviare `AT+TPMODE=1`.
|
||||
2. A questo punto, il modulo cessa di interpretare i comandi AT e inoltra ogni byte ricevuto sulla UART direttamente nel link radio (SPP/GATT).
|
||||
3. Per tornare in modalità comando, è necessario inviare una sequenza di escape definita nel firmware o resettare il modulo.
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
# Integrazione DSP ADAU1701
|
||||
|
||||
Il collegamento BT1035 -> ADAU1701 può avvenire in due modi:
|
||||
1. **Digitale (I2S)**:
|
||||
- BT1035 (Master/Slave) -> SDATA_IN0 (ADAU1701).
|
||||
- Configurazione ADAU: Impostare `MP4/MP5` come ingressi I2S (LRCLK/BCLK).
|
||||
- Assicurarsi che il sample rate del modulo Bluetooth (`AT+I2SCFG`) corrisponda al clock configurato nell'ADAU tramite il software SigmaStudio.
|
||||
|
||||
2. **Analogico**:
|
||||
- Uscite differenziali BT1035 (`SPK_P/N`) -> ingressi ADC `ADC0/1`.
|
||||
- Utilizzare il filtro passivo di ricostruzione consigliato dal datasheet dell'ADAU1701 (50kHz corner) per evitare aliasing dovuto al campionamento del DAC interno del Bluetooth.
|
||||
+8
@@ -0,0 +1,8 @@
|
||||
# Mapping Risorse DigiRadio
|
||||
|
||||
Analisi dei file del progetto DigiRadio:
|
||||
- `DigiRadio_IC_1.h`: Mappatura dei registri del controller per il modulo IC.
|
||||
- `DigiRadio_IC_1_REG.h`: Definizione dei registri di configurazione (probabilmente relativi alla configurazione I2C del modulo Bluetooth).
|
||||
- `DigiRadio.xml`: Descriptor di sistema utilizzato dal software di configurazione/test del progetto DigiRadio.
|
||||
|
||||
Il modulo BT1035 deve essere mappato nell'indirizzo di registro 0x68 (default I2C) se il controller agisce come master I2C sul bus del modulo. Verificare che il pin `ADDRO` sia configurato correttamente in base alla netlist fornita.
|
||||
Reference in New Issue
Block a user