Audit : "pas de son dans le combiné" = bug logiciel (pas un contact crochet marginal)
Le SHK est fiable en hardware. Deux défauts logiciels, même racine (fausse hypothèse "contact marginal") :
1. Greeting muet (cause directe).audio.c (CMD_PLAY) conditionnait la lecture WAV sur phone_is_offhook() — drapeau débouncé de phone.c qui rate/retarde le décroché pendant la sonnerie — alors que le flux d'appel entrant n'établissait le décroché que via le poll SLIC brut dans conversation.c. Les deux drapeaux désynchronisaient → le greeting était jeté ("play ignored: on-hook") bien que le combiné soit levé.
2. Forçage du hook.s_hook_override + phone_force_offhook() + /debug/offhook forçaient l'état et restaient collés jusqu'au reboot.
Correctif (SHK réel = source unique de vérité, zéro forçage)
audio.c : gate CMD_PLAY sur slic_is_offhook() (ligne réelle) au lieu de phone_is_offhook(). Tonalités non affectées (chemin I2S direct).
phone.c : suppression de s_hook_override, de la branche override, et de phone_force_offhook().
GET /debug/ring?number=18 → sonnerie → décrocher → le PNJ doit parler dans le combiné (greeting audible). Vérifier shk:true dans /status au décroché.
## Audit : "pas de son dans le combiné" = bug logiciel (pas un contact crochet marginal)
Le SHK est fiable en hardware. Deux défauts logiciels, même racine (fausse hypothèse "contact marginal") :
**1. Greeting muet (cause directe).** `audio.c` (CMD_PLAY) conditionnait la lecture WAV sur `phone_is_offhook()` — drapeau *débouncé* de phone.c qui rate/retarde le décroché pendant la sonnerie — alors que le flux d'appel entrant n'établissait le décroché que via le poll SLIC brut dans `conversation.c`. Les deux drapeaux désynchronisaient → le greeting était jeté (`"play ignored: on-hook"`) bien que le combiné soit levé.
**2. Forçage du hook.** `s_hook_override` + `phone_force_offhook()` + `/debug/offhook` forçaient l'état et restaient collés jusqu'au reboot.
## Correctif (SHK réel = source unique de vérité, zéro forçage)
- `audio.c` : gate `CMD_PLAY` sur `slic_is_offhook()` (ligne réelle) au lieu de `phone_is_offhook()`. Tonalités non affectées (chemin I2S direct).
- `phone.c` : suppression de `s_hook_override`, de la branche override, et de `phone_force_offhook()`.
- `net.c` : suppression du handler `/debug/offhook` + struct + enregistrement ; `max_uri_handlers` 17→16.
- `phone.h` : déclaration retirée.
−51 lignes nettes. **Build ESP-IDF v5.4.4 OK.**
## Test (banc)
`GET /debug/ring?number=18` → sonnerie → décrocher → le PNJ doit parler dans le combiné (greeting audible). Vérifier `shk:true` dans `/status` au décroché.
electron
added 1 commit 2026-06-17 07:04:23 +00:00
Incoming-call greeting was silently dropped: audio CMD_PLAY gated on
phone.c's debounced phone_is_offhook(), which lags/misses the pickup
while the bell rings, but the incoming flow established off-hook only
via the raw SLIC poll in conversation.c. The two flags desynced and
playback was skipped as 'on-hook' though the handset was up.
Gate playback on the real SHK line (slic_is_offhook) instead — the
single source of truth. Remove all hook forcing (s_hook_override,
phone_force_offhook, /debug/offhook): the SHK contact is reliable in
hardware, so the firmware must trust it, never override it. Builds
clean (ESP-IDF v5.4.4).
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Audit : "pas de son dans le combiné" = bug logiciel (pas un contact crochet marginal)
Le SHK est fiable en hardware. Deux défauts logiciels, même racine (fausse hypothèse "contact marginal") :
1. Greeting muet (cause directe).
audio.c(CMD_PLAY) conditionnait la lecture WAV surphone_is_offhook()— drapeau débouncé de phone.c qui rate/retarde le décroché pendant la sonnerie — alors que le flux d'appel entrant n'établissait le décroché que via le poll SLIC brut dansconversation.c. Les deux drapeaux désynchronisaient → le greeting était jeté ("play ignored: on-hook") bien que le combiné soit levé.2. Forçage du hook.
s_hook_override+phone_force_offhook()+/debug/offhookforçaient l'état et restaient collés jusqu'au reboot.Correctif (SHK réel = source unique de vérité, zéro forçage)
audio.c: gateCMD_PLAYsurslic_is_offhook()(ligne réelle) au lieu dephone_is_offhook(). Tonalités non affectées (chemin I2S direct).phone.c: suppression des_hook_override, de la branche override, et dephone_force_offhook().net.c: suppression du handler/debug/offhook+ struct + enregistrement ;max_uri_handlers17→16.phone.h: déclaration retirée.−51 lignes nettes. Build ESP-IDF v5.4.4 OK.
Test (banc)
GET /debug/ring?number=18→ sonnerie → décrocher → le PNJ doit parler dans le combiné (greeting audible). Vérifiershk:truedans/statusau décroché.