Unable to route phone call audio to bluetooth headset

REPRODUCIBILITY: Always
BUILD ID = OS VERSION: 4.0.1.48
HARDWARE: Sony Xperia XA2 (Dual SIM)
UI LANGUAGE: German
REGRESSION: I didn’t test this headset on the previous SFOS version.

DESCRIPTION:

I am using the “Soundcore Liberty Air 2 Pro” Bluetooth (v5) Headset. I have no issues with the connection and the music playback and also the button controls are working fine.
But unfortunatelly I am unable to switch the audio to this headset during a phone call - the voicecall-ui does not display a button for switching the audio sink device (as it should like described here), this button is shown for another headset but not for this specific one.

PRECONDITIONS:

Aquire a “Anker Soundcore Liberty Air 2 Pro” headset and pair this device with your XA2 (enable the automatic connection for this headset).

STEPS TO REPRODUCE:

  1. Turn on your Bluetooth on the XA2
  2. Turn on the headset (open the case)
  3. Wait for the automatic connection
  4. Start a phone call

EXPECTED RESULT:

The voicecall-ui shall display the button to switch the audio from the earpiece to the connected headset.

ACTUAL RESULT:

The voicecall-ui does not display the additional button to switch the audio onto the connected headset.

ADDITIONAL INFORMATION:

After the headset is connected and a phone call has been established, the journal log contains the following entries:

[root@Sailfish nemo]# journalctl | grep -e bluetooth -e pulseaudio -e ofono
Mär 13 23:22:03 Sailfish bluetoothd[4223]: bluetoothd[4223]: Can't open input device: No such file or directory (2)
Mär 13 23:22:03 Sailfish bluetoothd[4223]: bluetoothd[4223]: AVRCP: failed to init uinput for Soundcore Liberty Air 2 Pro
Mär 13 23:22:03 Sailfish bluetoothd[4223]: Can't open input device: No such file or directory (2)
Mär 13 23:22:03 Sailfish bluetoothd[4223]: AVRCP: failed to init uinput for Soundcore Liberty Air 2 Pro
Mär 14 00:35:49 Sailfish bluetoothd[4223]: bluetoothd[4223]: /org/bluez/hci0/dev_12_34_56_78_9A_BC/fd11: fd(25) ready
Mär 14 00:35:49 Sailfish bluetoothd[4223]: /org/bluez/hci0/dev_12_34_56_78_9A_BC/fd11: fd(25) ready
Mär 14 00:36:26 Sailfish ofonod[3016]: data reg changed 1 -> 2 (searching), attached 1
Mär 14 00:36:26 Sailfish ofonod[3016]: Deactivating context: 1
Mär 14 00:36:26 Sailfish ofonod[3016]: Deactivating context: 1
Mär 14 00:36:26 Sailfish ofonod[3016]: Clearing active context
Mär 14 00:36:26 Sailfish ofonod[3016]: Deactivated data call

Some device information:

[root@Sailfish nemo]# bluetoothctl
Agent registered
[Soundcore Liberty Air 2 Pro]# devices
Device 12:34:56:78:9A:BC Soundcore Liberty Air 2 Pro
[Soundcore Liberty Air 2 Pro]# info 12:34:56:78:9A:BC
Device 12:34:56:78:9A:BC (public)
        Name: Soundcore Liberty Air 2 Pro
        Alias: Soundcore Liberty Air 2 Pro
        Class: 0x00240404
        Icon: audio-card
        Paired: yes
        Trusted: yes
        Blocked: no
        Connected: yes
        LegacyPairing: no
        UUID: Serial Port               (00001101-xyz)
        UUID: Audio Sink                (0000110b-xyz)
        UUID: A/V Remote Control Target (0000110c-xyz)
        UUID: A/V Remote Control        (0000110e-xyz)
        UUID: Handsfree                 (0000111e-xyz)
        UUID: Vendor specific           (66666666-6666-6666-6666-666666666666)

According to the product’s webpage this headset supports the bluetooth profiles AVRCP1.6, A2DP1.3 and HFP1.7.

Could someone please point me to some further ways of debugging?

I seem to have the same issue with the Tribit Flybuds NC Bluetooth Earbuds (Phone is a Xperia XA2 Plus Dual SIM, SFOS 4.1.0.24). They work without an issue for Musik playback Videos and so on, but will not work for phone calls at all, like described above. I also have a MPOW H7 Headset which works just fine for calls. Here is a comparision of the Bluetooth Infos of the two Devices:

MPOW H7 (working in Calls):

Name: Mpow H7
Alias: Mpow H7
Class: 0x00240404
Icon: audio-card
Paired: yes
Trusted: yes
Blocked: no
Connected: yes
LegacyPairing: no
UUID: Headset                   (00001108-0000-1000-8000-00805f9b34fb)
UUID: Audio Sink                (0000110b-0000-1000-8000-00805f9b34fb)
UUID: A/V Remote Control Target (0000110c-0000-1000-8000-00805f9b34fb)
UUID: A/V Remote Control        (0000110e-0000-1000-8000-00805f9b34fb)
UUID: Handsfree                 (0000111e-0000-1000-8000-00805f9b34fb)

Tribit FlyBuds NC (not working in Calls):

Name: Tribit FlyBuds NC
Alias: Tribit FlyBuds NC
Class: 0x00240404
Icon: audio-card
Paired: yes
Trusted: yes
Blocked: no
Connected: yes
LegacyPairing: no
UUID: Serial Port               (00001101-0000-1000-8000-00805f9b34fb)
UUID: Audio Sink                (0000110b-0000-1000-8000-00805f9b34fb)
UUID: A/V Remote Control Target (0000110c-0000-1000-8000-00805f9b34fb)
UUID: Advanced Audio Distribu.. (0000110d-0000-1000-8000-00805f9b34fb)
UUID: A/V Remote Control        (0000110e-0000-1000-8000-00805f9b34fb)
UUID: Handsfree                 (0000111e-0000-1000-8000-00805f9b34fb)
UUID: Vendor specific           (66666666-6666-6666-6666-666666666666)

One thing that is interesting: The working MPOW-Headset has a “Headset”-Profile, which the Tribits don’t have. Maybe thats the one SFOS is looking for when deciding if a BT-Audio device can do calls or not? It seems to be missing from Alex’s Device as well. Thats just a guess, I don’t know the inner workings of the SFOS audio routing. Maybe someone with a better insight into the topic can take a look at this.

Another observation: If I list the cards with pacmd list-cards I get this for the MPOW:

   index: 5
	name: <bluez_card.EB_06_EF_A5_79_2F>
	driver: <module-bluez5-device.c>
	owner module: 27
	properties:
		device.description = "Mpow H7"
		device.string = "EB:06:EF:A5:79:2F"
		device.api = "bluez"
		device.class = "sound"
		device.bus = "bluetooth"
		device.form_factor = "headset"
		bluez.path = "/org/bluez/hci0/dev_EB_06_EF_A5_79_2F"
		bluez.class = "0x240404"
		bluez.alias = "Mpow H7"
		device.icon_name = "audio-headset-bluetooth"
		device.intended_roles = "phone"
	profiles:
		a2dp_sink: High Fidelity Playback (A2DP-Ziel) (priority 40, available: unknown)
		headset_head_unit: Headset Head Unit (HSP/HFP) (priority 30, available: unknown)
		off: Aus (priority 0, available: yes)
	active profile: <a2dp_sink>
	sinks:
		bluez_sink.EB_06_EF_A5_79_2F.a2dp_sink/#8: Mpow H7
	sources:
		bluez_sink.EB_06_EF_A5_79_2F.a2dp_sink.monitor/#10: Monitor of Mpow H7
	ports:
		headset-output: Headset (priority 0, latency offset 0 usec, available: unknown)
			properties:
				
		headset-input: Headset (priority 0, latency offset 0 usec, available: unknown)
			properties:

while the TriBit Earbuds report this:

    index: 4
	name: <bluez_card.BA_98_34_F1_08_A6>
	driver: <module-bluez5-device.c>
	owner module: 26
	properties:
		device.description = "Tribit FlyBuds NC"
		device.string = "BA:98:34:F1:08:A6"
		device.api = "bluez"
		device.class = "sound"
		device.bus = "bluetooth"
		device.form_factor = "headset"
		bluez.path = "/org/bluez/hci0/dev_BA_98_34_F1_08_A6"
		bluez.class = "0x240404"
		bluez.alias = "Tribit FlyBuds NC"
		device.icon_name = "audio-headset-bluetooth"
		device.intended_roles = "phone"
	profiles:
		a2dp_sink: High Fidelity Playback (A2DP-Ziel) (priority 40, available: unknown)
		headset_head_unit: Headset Head Unit (HSP/HFP) (priority 30, available: no)
		off: Aus (priority 0, available: yes)
	active profile: <a2dp_sink>
	sinks:
		bluez_sink.BA_98_34_F1_08_A6.a2dp_sink/#7: Tribit FlyBuds NC
	sources:
		bluez_sink.BA_98_34_F1_08_A6.a2dp_sink.monitor/#9: Monitor of Tribit FlyBuds NC
	ports:
		headset-output: Headset (priority 0, latency offset 0 usec, available: unknown)
			properties:
				
		headset-input: Headset (priority 0, latency offset 0 usec, available: no)
			properties:

Notice how the tribit reports the headset_heat_unit Profile (HFP, which to my knowledge ist used for Phonecalls) as available: no, while the MPOW lists both headset_head_unit and a2dp_sink (Audio Playback) as availalble: unknown

The HFP-Profile not being available might be a possible cause for the non working call audio. Unfortunately I have no idea at the moment how to get it to be available…

We have an internal bug on this problem.
It does not seem to occur commonly. On some headsets only.
Worth investigating, though.

The easiest workaround I have found for this issue (it affects me on my Sony bluetooth headset) is to go back to ‘old technology’ and use a wired headset. The one that came with my XA2 works perfectly, both for music and calls.

Same for JBL Endurance Peak II
SFOS 4.2.0.19 this bug still occurs

While in bluetooth settings gui supported profiles are SPP,A2DP,AVRCP,HFP,DID
pulseaudio does show HFP as available: no

Works now in 4.2.0.21 !
Phone call is routed to my headset.

3 Likes

Unfortunatelly it still does not work with my Anker earbuds, my XA2 runs with SFOS 4.2.0.21.

Update:

Running Sailfish OS 4.2.0.21 I had to remove the pairing mit my Anker earbuds via the settings and establish a new pairing to fix this issue.
I am able to use my earbuds during phone calls now, even though the audio quality is not that great (due to missing proper high definition codecs?).

I can confirm my Tribit Headphones are now working as well on 4.2.0.21. Thanks Jolla for the fix :slight_smile: