fix(plip): trust real SHK, drop hook forcing #26

Merged
electron merged 1 commits from fix/plip-no-hook-forcing into main 2026-06-17 07:05:28 +00:00
Owner

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é.

## 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
fix(plip): trust real SHK, drop hook forcing
CI / platformio (pull_request) Failing after 7m44s
CI / platformio (push) Failing after 11m19s
8c076d81d6
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).
electron merged commit 8c076d81d6 into main 2026-06-17 07:05:28 +00:00
Sign in to join this conversation.