task-39: the in-call speaker button routes to a headset, and why
gnome-calls asks org.mobian_project.CallAudio, which callaudiod owns, and callaudiod switches a sink port - which cannot work when ACP splits earpiece and speaker across two profiles. The working toggle is the hook's speaker on|off and nothing in the UI calls it. Fix is a shim that claims the name; it needs a real call to test before enabling.
This commit is contained in:
parent
2e23e4b260
commit
9c2558863f
1 changed files with 39 additions and 0 deletions
|
|
@ -172,3 +172,42 @@ which gives a flat noise floor at rms ~14000 with no speech variation at all;
|
|||
84 drops it to ~6200. A runtime `amixer cset` does **not** persist — activating
|
||||
the profile reapplies the UCM value, verified. Whatever gain STT wants has to
|
||||
land in `souveraine-ucm-blueline`.
|
||||
|
||||
## The in-call speaker button routes to a headset (root cause, 2026-08-02)
|
||||
|
||||
Casey, observed: an inbound call **defaulted to speakerphone**, and tapping the
|
||||
speaker button (to *turn on* speakerphone) **switched to headset mode**.
|
||||
|
||||
Not mysterious once the ownership is traced:
|
||||
|
||||
- `gnome-calls` is the dialer, and its speaker button calls the D-Bus name
|
||||
`org.mobian_project.CallAudio`.
|
||||
- That name is owned by upstream **`callaudiod`**
|
||||
(`/usr/share/dbus-1/services/org.mobian_project.CallAudio.service`,
|
||||
`Exec=/usr/bin/callaudiod`), which is D-Bus activated on demand.
|
||||
- **callaudiod cannot route this card.** It switches a sink *port* and needs a
|
||||
speaker port and an earpiece port on one sink; ACP models UCM devices as one
|
||||
profile per combination — `Voice Call (Earpiece, Mic)` and
|
||||
`Voice Call (Mic, Speaker)` — so no sink carries both. `blueline-callaudio-hook`
|
||||
already says this in a comment; the consequence was never written down.
|
||||
- So the button asks for a port that does not exist and lands on a headset
|
||||
route. **The working toggle already exists and nothing in the UI calls it:**
|
||||
`blueline-callaudio-hook speaker on|off` does direct mixer writes and is
|
||||
verified working (`speaker: on` / `speaker: off (earpiece)`).
|
||||
|
||||
`souveraine-callaudio` ships only the hook — it does **not** contest the D-Bus
|
||||
name, so callaudiod always wins.
|
||||
|
||||
**The fix is a shim that claims `org.mobian_project.CallAudio`** and translates
|
||||
`EnableSpeaker`/`SelectMode` into the hook's `speaker on|off`. It must be tested
|
||||
against a real inbound call before it is enabled: this path is phone calls, and
|
||||
a broken shim loses them entirely.
|
||||
|
||||
Until then the manual escape is `sudo blueline-callaudio-hook speaker on`.
|
||||
|
||||
Note the default-to-speakerphone half is a *separate* symptom: `apply()` forces
|
||||
Earpiece deliberately ("enabling Speaker here is what made every call come out
|
||||
of the loudspeaker with no way back"), and the hook is enabled, active and
|
||||
unshadowed (`FragmentPath=/usr/lib/systemd/system/...`). So something else put
|
||||
the card in a speaker profile before or during that call — unreproduced, and it
|
||||
needs a call to chase.
|
||||
|
|
|
|||
Loading…
Reference in a new issue