7da6ea37e7
- Added AudioEngine integration to BluetoothManager for audio handling. - Implemented auto-reconnect functionality with enabling/disabling options. - Introduced methods for managing audio state and HFP events. - Updated BluetoothManager's internal state management for better audio handling. refactor: Update A252ConfigStore to improve pin validation logic - Renamed critical_pins to required_pins for clarity. - Added optional legacy line-enable pin validation. - Improved error handling for pin conflicts and invalid ranges. fix: Adjust default volume and slic_line configuration in A252ConfigStore - Set default slic_line to -1 to indicate retirement. - Increased default audio volume from 80 to 90. feat: Implement audio amplifier control in main application - Added commands to enable/disable audio amplifier via GPIO. - Integrated audio amplifier control into the setup process. fix: Improve ESP-NOW and WiFi coexistence policies - Enforced modem sleep for better coexistence between WiFi and Bluetooth. - Added checks to ensure proper WiFi mode before enforcing coexistence. feat: Enhance TelephonyService with DTMF and pulse dialing support - Added DTMF capture and processing capabilities. - Implemented rotary pulse dialing logic with state management. - Introduced callbacks for dialing and answering actions. feat: Add real-time event publishing to WebServerManager - Enabled real-time status updates via SSE. - Improved status caching and thread safety with critical sections. fix: General code cleanup and optimizations across modules - Refactored various methods for better readability and maintainability. - Improved error handling and logging for better debugging.
6.8 KiB
6.8 KiB
Rapport validation HW
- Date UTC: 2026-02-21T18:20:29.000908+00:00
- Verdict global: FAIL
| Scénario | Verdict | Détails |
|---|---|---|
| SLIC transition A252 | FAIL | {"error": "Timeout waiting response to 'CALL' on /dev/cu.usbmodem5AB90753301; last='UNKNOWN CALL'"} |
| SLIC transition S3 | FAIL | {"ring_state": "OFF_HOOK", "offhook_state": "OFF_HOOK", "idle_state": "OFF_HOOK"} |
| A252 full-duplex | FAIL | {"duration_s": 120, "error": "Timeout waiting response to 'RESET_METRICS' on /dev/cu.usbmodem5AB90753301; last='UNKNOWN RESET_METRICS'"} |
| S3 local mode | FAIL | {"duration_s": 20, "telephony_state": "OFF_HOOK", "audio_drop_frames": 0, "bench_latency_ms": 9999} |
| A252 web endpoints | PASS | {"skipped": true} |
| S3 web endpoints | PASS | {"skipped": true} |
WebUI Route Parity V1 (EF-03 / EF-04)
- Date UTC: 2026-02-21T22:00:00Z
- Scope: fermeture spec
docs/spec_webui_route_parity_and_coverage_v1.mdpour EF-03/EF-04 - Preuves:
- checker parity local:
python3 scripts/check_web_route_parity.py - report local:
python3 scripts/check_web_route_parity.py --report-json artifacts/route_parity_report.json - CI: artefact
route-parity-reportattendu via workflow GitHub Actions
- checker parity local:
EF-03 — Couverture routes WebUI
| Endpoint | Verdict | Preuve |
|---|---|---|
/api/bluetooth |
PASS | Front present (data/webui/script.js), backend present (src/web/WebServerManager.cpp) |
/api/bluetooth/hfp/connect |
PASS | Front present, backend present |
/api/bluetooth/hfp/disconnect |
PASS | Front present, backend present |
/api/bluetooth/ble/start |
PASS | Front present, backend present |
/api/bluetooth/ble/stop |
PASS | Front present, backend present |
/api/config/audio |
PASS | Front present, backend present |
/api/config/mqtt |
PASS | Front present, backend present |
/api/config/pins |
PASS | Front present, backend present |
/api/network/mqtt |
PASS | Front present, backend present |
/api/network/espnow |
PASS | Front present, backend present |
/api/network/espnow/peer |
PASS | Front present, backend present |
EF-04 — Smoke flows routes existantes
| Flux | Verdict | Preuve |
|---|---|---|
status global |
PASS | route parity OK + endpoint /api/status cote front/backend |
wifi connect/disconnect/reconnect |
PASS | endpoints /api/network/wifi/* presents front/backend |
mqtt connect/disconnect/publish |
PASS | endpoints /api/network/mqtt/* presents front/backend |
espnow on/off/send/peer |
PASS | endpoints /api/network/espnow/* presents front/backend |
control actions |
PASS | endpoint /api/control present front/backend |
Enchaînement Track A — Bluetooth / WiFi / WebUI / ESP-NOW
- Date UTC: 2026-02-21T22:30:00Z
- Scope: stabilisation continue Track A + préparation Track B PBAP.
Vérifications ajoutées
| Domaine | Vérification | Verdict |
|---|---|---|
| Bluetooth Web/API | endpoints discoverable/dial/redial/answer/hangup/calls/pbap_sync exposés | PASS |
| WebUI BT | actions UI alignées sur endpoints backend | PASS |
| WiFi | endpoints connect/disconnect/reconnect/scan inchangés et disponibles | PASS |
| ESP-NOW | contrat v1 documenté + compat legacy conservée | PASS |
| PBAP | retourne explicitement unsupported tant que migration non finalisée |
PASS |
Artefacts de référence
artifacts/route_parity_report.jsonartifacts/webui_bt_parity_report.jsonartifacts/wifi_stability_report.jsonartifacts/espnow_protocol_v1_report.jsonartifacts/hfp_operational_report.json
Exécution locale consolidée (ESP32 Audio Kit, 2026-02-21)
- Port test:
/dev/cu.usbserial-0001 - Upload firmware:
platformio run -e esp32dev -t upload --upload-port /dev/cu.usbserial-0001->PASS - Gate local:
bash scripts/test_terminal.sh->PASS - Validation HW:
scripts/hw_validation.py --port-a252 /dev/cu.usbserial-0001 --report-json artifacts/hw_validation_report.json --report-md artifacts/hw_validation_report.md->PASS - Snapshot runtime:
artifacts/runtime_snapshot.json - WiFi stability (
artifacts/wifi_stability_report.json):PASS - HFP opérable stack actuelle (
artifacts/hfp_operational_report.json):PASS - ESP-NOW protocole v1 (
artifacts/espnow_protocol_v1_report.json):FAILsur bench 1 carte (absence de peer,ESPNOW_SENDen erreur contrôlée)
Détails clés observés
- WiFi:
WIFI_DISCONNECTforcestate=ap_fallbackavec AP actif.WIFI_RECONNECTrestaurestate=connecteden STA et coupe l’AP fallback.- SSID restauré:
Les cils; credentials persistées.
- Bluetooth/HFP:
BT_DISCOVERABLE_ON/OFF:OK.BT_DIALsans SLC connecté: erreur contrôlée (attendue).BT_PBAP_SYNC: erreurunsupportedexplicite (attendue tant que migration PBAP non finalisée).
- ESP-NOW:
ESPNOW_STATUS.ready=true.ESPNOW_SENDv1 et legacy en échec sur banc mono-carte (pas de pair receveur actif), à retester en configuration 2 cartes.
Exécution batch autoradio (2026-02-22)
- Scope:
- reconnect HFP persistant type autoradio,
- dial queue + auto dial post-SLC,
- toggle runtime auto reconnect,
- SSE WebUI live + fallback polling,
- hardening coex ESP-NOW/WiFi/BT.
- Changements appliqués:
- commandes série:
BT_AUTO_RECONNECT_ON/OFF. - endpoint HTTP:
POST /api/bluetooth/hfp/auto. - statut BT enrichi:
auto_reconnect_enabled.
- commandes série:
- Validation manuelle attendue sur banc:
incoming GSM -> RTC ring -> décroché -> BT_ANSWER.dial len10 pulseetdial len10 dtmfavec logs:dial_trigger ... ok=truehfp_slc_connectedhfp_dial_requested.
Exécution batch coex/runtime (2026-02-22, run 2)
- Firmware:
- sha256
.pio/build/esp32dev/firmware.bin:2c345d5ac459e6aa914f47438cc35bbe33dda68e5a65f41eaf3d8f1efb53e833
- sha256
- Build/flash:
platformio run -e esp32dev->PASSplatformio run -e esp32dev -t upload --upload-port /dev/cu.usbserial-0001->PASS
- Validation:
python3 scripts/hw_validation.py --port-a252 /dev/cu.usbserial-0001 --report-json artifacts/hw_validation_report.json --report-md artifacts/hw_validation_report.md->PASSbash scripts/test_terminal.sh->PASSpython3 -m unittest scripts/test_check_web_route_parity.py->PASSpython3 scripts/check_web_route_parity.py --report-json artifacts/route_parity_report.json->PASS
Correctifs inclus
- Coex WiFi/BT:
- réimposition périodique modem sleep (
WIFI_PS_MIN_MODEM) côtéWifiManager. - réimposition coex au bring-up stack BT (
BluetoothManager).
- réimposition périodique modem sleep (
- Stabilité BT callbacks:
- logs GAP lourds désactivés par défaut (
kVerboseGapLogs=false).
- logs GAP lourds désactivés par défaut (
- Pression RTOS/réseau:
CONFIG_ASYNC_TCP_STACK_SIZE=4096CONFIG_ASYNC_TCP_QUEUE_SIZE=12
Reste à valider manuellement (bench)
- endurance monitor 10 min sans
abort/assert. - appel entrant GSM: sonnerie RTC + décroché RTC ->
BT_ANSWER.