Le repo gardait ~76 docs de l'ancien projet Arduino A252 (ESP-NOW, UI web,
WiFi, hotline WAV/FFat, ancienne archi RTOS/audio/SLIC en classes C++,
rapports d'audit/tests du code supprime, orchestration d'agents, CI web).
Garde la doc du firmware actuel : specs/plans de la migration ESP-IDF
(docs/superpowers/), specs Bluetooth HFP/PBAP, spec materielle carte A1S/
ES8388 (a252_board_spec.md + ai_thinker_esp32_a1s_*.yaml), artefacts de
debug d'appairage HFP.
Impact : docs/ aligne sur le firmware mains-libres Bluetooth ESP-IDF.
Suite au retrait de l'arbre Arduino (src/, platformio.ini), les outils et la
CI qui en dependaient sont devenus morts ou cassants. Verifie : rien dans
components/main ne les reference, le build idf.py reste OK.
Supprime :
- test/ : tests Unity qui incluaient le code C++ supprime (DtmfDecoder,
AudioCodec...), aucune infra de test IDF
- scripts/ : gate A252, controle ESP-NOW, flash FFat/USB-MSC, validation
hardware A252, contrats runtime PlatformIO
- tools/dev/ (flasheur universel multi-cibles) + tools/repo_state/ + Makefile.flash
- .github/workflows/ : ci.yml et release.yml lancaient PlatformIO + gate a252
sur du code supprime (CI cassee), repo_state.yml
- .github/agents/ : 19 docs decrivant src/ et PlatformIO
- .github/prompts/plan-roadmapHardwareFirmware : roadmap A252
Garde : tools/phone_tui.py, templates .github generiques (issue/PR/prompts).
Impact : plus aucun residu du projet Arduino dans le repo ; build inchange.
Les deux fichiers decrivaient encore le projet Arduino d'origine (ESP32-S3,
hotline WAV, ESP-NOW, pio run). Reecrits pour la realite actuelle : kit
mains-libres Bluetooth HFP-HF sur ESP32 classique, build idf.py, CLI de
reglage audio, organisation en components/. CLAUDE.md desormais versionne.
Contexte : le repo contenait deux projets superposés — le projet Arduino/
PlatformIO d'origine (ESP32-S3, hotline WAV, ESP-NOW, UI web) et le firmware
ESP-IDF actuel (kit mains-libres Bluetooth, ESP32 classique). Le code Arduino
n'est plus utilise par le build IDF (verifie : aucune reference dans
CMakeLists/main/components) et entretenait une dette de confusion.
Approche : suppression du code mort verifie independant du build, et reecriture
de la doc pour la realite ESP-IDF. Build IDF revalide apres coup (binaire OK).
Changements :
- supprime src/ (56 fichiers C++ Arduino : AudioCodec, AudioFilePlayer,
SlicK50835F, web/, wifi/, usb/, ...)
- supprime platformio.ini (build Arduino) et data/webui/ (UI web abandonnee,
aucune partition data)
- supprime les CLAUDE.md imbriques documentant ces dossiers
- README.md : reecrit pour le kit mains-libres BT HFP-HF / ESP-IDF
- CLAUDE.md : reecrit (Arduino/ESP32-S3 -> ESP-IDF/ESP32 classique) et versionne
Impact : un seul projet dans le repo, doc alignee sur le code, build inchange.
Remplace s_bt_ev/s_bt_dirty (scalaire 1 slot) par une file
xQueueCreate(8) + xQueueSend non-bloquant + drain complet dans
call_task — evite de perdre un evenement si deux arrivent dans
la meme fenetre de 50 ms (ex. INCOMING suivi AUDIO_CONNECTED).
Ajoute sco_incoming_cb et sco_outgoing_cb dans bt_hfp.c.
Enregistre les callbacks sur AUDIO_STATE connecte (CVSD/mSBC).
REQUIRES audio_router dans CMakeLists.txt.
Build vert, boot non regressé (flash + monitor 2026-06-19).
- sco_end: s_mode=NONE avant s_sco_active=false pour que
tone_task quitte la branche SCO avant l'arret du flag mic.
- Attente active s_sco_mic_task==NULL (max 200 ms, pas 5 ms).
- Settle 25 ms avant hal_audio_pa_set(false) evite le clic PA.
- tone_task stack: 3072 -> 4096 (buf stereo SCO 1280 octets).
Composant FreeRTOS qui surveille SHK via slic_is_offhook(),
decoode la numerotation par impulsions (cadran rotatif) et
pousse les chiffres au dialer. Build vert sans câblage main.
Context: Phase 3 migration ESP-IDF - detecteur DTMF par Goertzel.
Approach: Adapter dtmf.c/h de plip_voice pour le projet RTC_BL_PHONE
en isolant la partie pure (dtmf_detect_frame + Goertzel) de la partie
IDF (tache FreeRTOS, hal_i2s, dialer) via garde #ifndef DTMF_HOST_TEST.
Changes:
- components/dtmf/include/dtmf.h : header adapte, sans sdkconfig.h ni
CONFIG_PLIP_DIAL_DTMF, gardes DTMF_HOST_TEST sur dtmf_start/stop
- components/dtmf/dtmf.c : remplace audio.h->hal_i2s.h,
audio_capture_*->hal_i2s_capture_*, stub forward dialer_push_digit,
corrige signature hal_i2s_capture_begin(void)
- components/dtmf/test_dtmf.c : TDD host, synth 6000+6000 par freq,
3 assertions (1, silence, 9)
- components/dtmf/CMakeLists.txt : REQUIRES hal_i2s (dialer en Task 6)
Impact: TDD RED->GREEN 3/3. Build IDF vert. dtmf non reference dans
main pour l'instant (dialer manque) - sera tire par call_manager T6.
Composant slic_ks0835: GPIO RM/FR/SHK/PD, tache sonnerie FT,
sonde polarite SHK. slic_init() place avant audio_router_init()
pour eviter la contention GPIO/mutex avec la tache tone I2S.
SLIC_SHK_OFFHOOK_LEVEL=1 confirme: SHK=0 au raccroché (on-hook).
Composant audio_router cree : tache FreeRTOS 440 Hz,
machine d'etat DIAL/BUSY/RINGBACK. Cable dans app_main,
tonalite active au boot (PA ON confirme en serie).
Sature s dans [-32768, 32767] avant le cast int16_t pour
eviter l'UB C99. Documente le contrat dans l'en-tete.
Ajoute assertion 5/5 : amplitude 40000 ne deborde pas.