fix(iphone-bt): v3 — pw-link -l filtert nicht, v2 machte den Uplink stumm
Testanruf 13:51 loggte nur "-callrec_mix", kein +micgate und kein +far-end: v2 hat WirePlumbers Link getrennt und dann nichts verlinkt, der Uplink hatte keine Quelle und die Gegenseite hörte Stille. Ursache: `pw-link -l <node>` filtert nicht. Mit einem Node-Namen, der nicht als Port auflösbar ist, kommt der ganze Graph zurück — und der enthält immer micgate.out und callmix. Also war jedes "ist das schon verlinkt?"-grep wahr und nur das Trennen lief. Derselbe Ausdruck stand schon in v1, dort aber hinter dem Einmal-Guard, der nie erreicht wurde. v3: - links_of PORT parst die Peers eines exakten Ports aus einem Graph-Dump (awk), kein grep mehr über die gesamte Ausgabe. - Erst verlinken, dann trennen: callrec_mix->Uplink fliegt nur raus, wenn micgate.out am Uplink-Port bestätigt anliegt. Sonst bleibt der WirePlumber-Link und es wird !no-micgate-uplink-keeping-callrec_mix geloggt. Ein Echo ist schlecht, unhörbar sein ist schlimmer. - Log-Zustand als Array statt String: " " hätte -n passiert und bei fertig geroutetem Anruf jede Sekunde eine Journal-Zeile geschrieben. Getestet: links_of gegen den echten Graph (verlinkt/unverlinkt/nicht existent); Entscheidungslogik gegen einen synthetischen Mono-HFP-Graph — Default-Zustand, fertig geroutet (No-op), micgate nicht bestätigt (behält callrec_mix). Gegenprobe am echten Anruf steht noch aus.
This commit is contained in:
+18
-3
@@ -58,8 +58,8 @@ sequenceDiagram
|
||||
BZ->>PW: Gegenseite → Headset-Hörer (WirePlumber-Default)
|
||||
loop jede Sekunde, solange Uplink-Node existiert
|
||||
W->>PW: Portnamen ermitteln (HFP = mono, playback_MONO/capture_MONO)
|
||||
W->>PW: callrec_mix → Uplink trennen, falls vorhanden (Echo-Quelle)
|
||||
W->>PW: Uplink ← micgate.out verlinken, falls fehlt
|
||||
W->>PW: nur wenn micgate BESTÄTIGT anliegt: callrec_mix → Uplink trennen
|
||||
W->>PW: Gegenseite → callmix verlinken, falls fehlt (Node kommt später!)
|
||||
end
|
||||
IP->>BZ: Anruf endet
|
||||
@@ -72,8 +72,23 @@ sequenceDiagram
|
||||
- **Jeder Link wird in JEDEM Durchlauf geprüft, nicht einmal pro Anruf** — siehe Changelog 2026-07-30.
|
||||
- **Portnamen werden ermittelt, nicht hartcodiert.** HFP/mSBC ist mono, die Ports heißen
|
||||
`playback_MONO`/`capture_MONO`, nicht `input_FL`/`input_FR`.
|
||||
- Kontrolle nach einem Anruf: `journalctl -t aime-iphone-route`. **Keine Zeile = der Watcher hat nichts
|
||||
getan** und die Aufnahme enthält nur die Nahseite.
|
||||
- **Erst verlinken, dann trennen.** `callrec_mix → Uplink` fliegt nur raus, wenn `micgate.out` am
|
||||
Uplink-Port bestätigt anliegt — sonst bleibt der Uplink ohne Quelle und die Gegenseite hört Stille.
|
||||
- ⚠️ **`pw-link -l <node>` filtert NICHT.** Bei einem Namen, der nicht als *Port* auflösbar ist, kommt der
|
||||
**gesamte Graph** zurück. Jedes `grep` darauf ist immer wahr. Link-Zustand deshalb nur per `links_of`
|
||||
(exakter Port-Header aus einem Graph-Dump) prüfen, nie per `grep` über die ganze Ausgabe.
|
||||
|
||||
## Kontrolle nach einem Anruf
|
||||
|
||||
`journalctl -t aime-iphone-route` — die eine Zeile sagt alles:
|
||||
|
||||
| Ausgabe | Bedeutung |
|
||||
|---|---|
|
||||
| `+micgate -callrec_mix +far-end` | korrekt geroutet |
|
||||
| keine Zeile | Watcher hat die HFP-Nodes nicht gesehen → Aufnahme hat nur die Nahseite |
|
||||
| nur `-callrec_mix` | Uplink ohne Quelle → **Gegenseite hört nichts** (v2-Bug, behoben) |
|
||||
| `!no-micgate-uplink-keeping-callrec_mix` | Uplink hörbar, aber mit Echo — micgate-Link ging nicht |
|
||||
| `(no-far-end-node-yet)` | unkritisch, wenn eine spätere Zeile `+far-end` zeigt |
|
||||
|
||||
## Offen
|
||||
|
||||
|
||||
Reference in New Issue
Block a user