[pulseaudio-discuss] Hsp profile available but not working

Paweł B blizniukp at gmail.com
Mon Oct 9 14:51:10 UTC 2017


Hi All.

I have a problem with hsp profile.

After connect to Philips WeCall Speaker profile headset_head_unit is
available:

Card #2

       Name: bluez_card.0C_A6_94_25_70_DE

       Driver: module-bluez5-device.c

       Owner Module: 25

       Properties:

               device.description = "Philips WeCall Speaker"

               device.string = "0C:A6:94:25:70:DE"

               device.api = "bluez"

               device.class = "sound"

               device.bus = "bluetooth"

               device.form_factor = "headset"

               bluez.path = "/org/bluez/hci1/dev_0C_A6_94_25_70_DE"

               bluez.class = "0x240404"

               bluez.alias = "Philips WeCall Speaker"

               device.icon_name = "audio-headset-bluetooth"

               device.intended_roles = "phone"

       Profiles:

               headset_head_unit: Headset Head Unit (HSP/HFP) (sinks: 1,
sources: 1, priority: 20, available: yes

               a2dp_sink: High Fidelity Playback (A2DP Sink) (sinks: 1,
sources: 0, priority: 10, available: yes)

               device.description = "Philips WeCall Speaker"

               off: Off (sinks: 0, sources: 0, priority: 0, available: yes)

       Active Profile: headset_head_unit

       Ports:

               headset-output: Headset (priority: 0, latency offset: 0 usec)

                       Part of profile(s): headset_head_unit, a2dp_sink

               headset-input: Headset (priority: 0, latency offset: 0 usec)

                       Part of profile(s): headset_head_unit

I set default sink and source.

After run ‘mplayer test.wav’ nothing is happens (there is no sound). In
a2dp_sink profile everything works fine, but I need use microphone to
record voice.

I run hcidump:

[root at localhost ~]# hcidump -i hci1 -X

HCI sniffer - Bluetooth packet analyzer ver 2.5

device: hci1 snap_len: 1500 filter: 0xffffffff

< HCI Command: Exit Sniff Mode (0x02|0x0004) plen 2

    handle 13

> HCI Event: Command Status (0x0f) plen 4

    Exit Sniff Mode (0x02|0x0004) status 0x00 ncmd 1

> HCI Event: Mode Change (0x14) plen 6

    status 0x00 handle 13 mode 0x00 interval 0

    Mode: Active

< HCI Command: Setup Synchronous Connection (0x01|0x0028) plen 17

    handle 13 voice setting 0x0060 ptype 0x003f

> HCI Event: Command Status (0x0f) plen 4

    Setup Synchronous Connection (0x01|0x0028) status 0x00 ncmd 1

> HCI Event: Synchronous Connect Complete (0x2c) plen 17

    status 0x00 handle 6 bdaddr 0C:A6:94:25:70:DE type eSCO

    Air mode: CVSD

< SCO data: handle 6 flags 0x00 dlen 48

    0000: 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................

    0010: 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................

    0020: 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................

< SCO data: handle 6 flags 0x00 dlen 48

    0000: 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................

    0010: 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................

    0020: 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................

< HCI Command: Disconnect (0x01|0x0006) plen 3

    handle 6 reason 0x13

    Reason: Remote User Terminated Connection

> HCI Event: Command Status (0x0f) plen 4

    Disconnect (0x01|0x0006) status 0x00 ncmd 1

> HCI Event: Disconn Complete (0x05) plen 4

    status 0x00 handle 6 reason 0x16

    Reason: Connection Terminated by Local Host

My controller - is a BCM4354 chip

[bluetooth]# show

Controller C0:97:27:4C:2E:67

       Name: ARTIK10

       Alias: ARTIK10

       Class: 0x0c0408

       Powered: yes

       Discoverable: no

       Pairable: yes

       UUID: Headset AG
(00001112-0000-1000-8000-00805f9b34fb)

       UUID: Generic Attribute Profile
(00001801-0000-1000-8000-00805f9b34fb)

       UUID: A/V Remote Control
(0000110e-0000-1000-8000-00805f9b34fb)

       UUID: Generic Access Profile
(00001800-0000-1000-8000-00805f9b34fb)

       UUID: PnP Information
(00001200-0000-1000-8000-00805f9b34fb)

       UUID: A/V Remote Control Target
(0000110c-0000-1000-8000-00805f9b34fb)

       UUID: Audio Source
(0000110a-0000-1000-8000-00805f9b34fb)

       UUID: Audio Sink
(0000110b-0000-1000-8000-00805f9b34fb)

       Modalias: usb:v1D6Bp0246d0524

       Discovering: no

My device:

[Philips WeCall Speaker]# info 0C:A6:94:25:70:DE

Device 0C:A6:94:25:70:DE

       Name: Philips WeCall Speaker

       Alias: Philips WeCall Speaker

       Class: 0x240404

       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: 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)



pulseaudio log

[root at localhost audio]# journalctl -b 0 | grep -i pulse

Oct 09 16:10:26 localhost systemd[1]: Started pulseaudio service.

Oct 09 16:10:26 localhost systemd[1]: Starting pulseaudio service...

Oct 09 16:10:26 localhost pulseaudio[3416]: W: [pulseaudio] main.c: Running
in system mode, but --disallow-module-loading not set!

Oct 09 16:10:26 localhost pulseaudio[3416]: N: [pulseaudio] main.c: Running
in system mode, forcibly disabling SHM mode!

Oct 09 16:10:26 localhost pulseaudio[3416]: W: [pulseaudio] main.c: OK, so
you are running PA in system mode. Please note that you most likely
shouldn't be doing that.

Oct 09 16:10:26 localhost pulseaudio[3416]: W: [pulseaudio] main.c: If you
do it nonetheless then it's your own fault if things don't work as expected.

Oct 09 16:10:26 localhost pulseaudio[3416]: W: [pulseaudio] main.c: Please
read
http://www.freedesktop.org/wiki/Software/PulseAudio/Documentation/User/WhatIsWrongWithSystemWide/
for an explanation why system mode is usually a bad idea.

Oct 09 16:10:27 localhost kernel: [c6] lpass_set_sched: [pulseaudio] pid =
3416, prio = 49

Oct 09 16:10:27 localhost kernel: [c1] lpass_set_sched: [pulseaudio] pid =
3416, prio = 49

Oct 09 16:10:27 localhost kernel: [c1] lpass_set_sched: [pulseaudio] pid =
3416, prio = 49

Oct 09 16:10:27 localhost kernel: [c1] lpass_set_sched: [pulseaudio] pid =
3416, prio = 49

Oct 09 16:10:27 localhost kernel: [c1] lpass_set_sched: [pulseaudio] pid =
3416, prio = 49

Oct 09 16:10:27 localhost kernel: [c1] lpass_set_sched: [pulseaudio] pid =
3416, prio = 49

Oct 09 16:10:27 localhost kernel: [c1] lpass_set_sched: [pulseaudio] pid =
3416, prio = 49

Oct 09 16:10:27 localhost kernel: [c1] lpass_set_sched: [pulseaudio] pid =
3416, prio = 49

Oct 09 16:10:27 localhost kernel: [c1] lpass_set_sched: [pulseaudio] pid =
3416, prio = 49

Oct 09 16:10:27 localhost kernel: [c1] lpass_set_sched: [pulseaudio] pid =
3416, prio = 49

Oct 09 16:10:27 localhost kernel: [c1] lpass_set_sched: [pulseaudio] pid =
3416, prio = 49

Oct 09 16:10:27 localhost kernel: [c1] lpass_set_sched: [pulseaudio] pid =
3416, prio = 49

Oct 09 16:10:27 localhost kernel: [c1] lpass_set_sched: [pulseaudio] pid =
3416, prio = 49

Oct 09 16:10:27 localhost kernel: [c1] lpass_set_sched: [pulseaudio] pid =
3416, prio = 49

Oct 09 16:10:27 localhost kernel: [c1] lpass_set_sched: [pulseaudio] pid =
3416, prio = 49

Oct 09 16:10:27 localhost kernel: [c1] lpass_set_sched: [pulseaudio] pid =
3416, prio = 49

Oct 09 16:10:27 localhost kernel: [c1] lpass_set_sched: [pulseaudio] pid =
3416, prio = 49

Oct 09 16:10:27 localhost kernel: [c1] lpass_set_sched: [pulseaudio] pid =
3416, prio = 49

Oct 09 16:10:27 localhost pulseaudio[3416]: W: [pulseaudio] authkey.c:
Failed to open cookie file '/var/run/pulse/.config/pulse/cookie': No such
file or directory

Oct 09 16:10:27 localhost pulseaudio[3416]: W: [pulseaudio] authkey.c:
Failed to load authentication key '/var/run/pulse/.config/pulse/cookie': No
such file or directory

Oct 09 16:10:27 localhost pulseaudio[3416]: W: [pulseaudio] authkey.c:
Failed to open cookie file '/var/run/pulse/.pulse-cookie': No such file or
directory

Oct 09 16:10:27 localhost pulseaudio[3416]: W: [pulseaudio] authkey.c:
Failed to load authentication key '/var/run/pulse/.pulse-cookie': No such
file or directory


[root at localhost audio]# journalctl -b 0 | grep -i blue

Oct 09 16:10:24 localhost kernel: [c6] Bluetooth: Core ver 2.16

Oct 09 16:10:24 localhost kernel: [c6] Bluetooth: HCI device and connection
manager initialized

Oct 09 16:10:24 localhost kernel: [c6] Bluetooth: HCI socket layer
initialized

Oct 09 16:10:24 localhost kernel: [c6] Bluetooth: L2CAP socket layer
initialized

Oct 09 16:10:24 localhost kernel: [c6] Bluetooth: SCO socket layer
initialized

Oct 09 16:10:24 localhost kernel: [c5] Bluetooth: Generic Bluetooth SDIO
driver ver 0.1

Oct 09 16:10:25 localhost kernel: [c0] bcm4354_bluetooth bluetooth.8:
bcm4354_bluetooth_probe.

Oct 09 16:10:25 localhost kernel: [c2] [BT] Bluetooth Power On.

Oct 09 16:10:25 localhost kernel: [c5] bcm4354_bluetooth bluetooth.8:
bcm4354_bluetooth_probe End

Oct 09 16:10:25 localhost kernel: [c7] [BT] Bluetooth Power On.

Oct 09 16:10:26 localhost dbus-daemon[3403]: Unknown username "bluealsa" in
message bus configuration file

Oct 09 16:10:26 localhost kernel: [c6] [BT] Bluetooth Power On.

Oct 09 16:10:26 localhost systemd[1]: Starting BCM4354 Bluetooth firmware
service...

Oct 09 16:10:27 localhost fwdown.sh[3423]: /etc/bluetooth /

Oct 09 16:10:27 localhost dbus[3403]: [system] Activating via systemd:
service name='org.bluez' unit='dbus-org.bluez.service'

Oct 09 16:10:27 localhost systemd[1]: Started BCM4354 Bluetooth firmware
service.

Oct 09 16:10:27 localhost systemd[1]: Starting Bluetooth service...

Oct 09 16:10:27 localhost bluetoothd[3555]: Bluetooth daemon 5.36

Oct 09 16:10:27 localhost dbus[3403]: [system] Successfully activated
service 'org.bluez'

Oct 09 16:10:27 localhost bluetoothd[3555]: Starting SDP server

Oct 09 16:10:27 localhost systemd[1]: Started Bluetooth service.

Oct 09 16:10:27 localhost kernel: [c0] Bluetooth: BNEP (Ethernet Emulation)
ver 1.3

Oct 09 16:10:27 localhost kernel: [c0] Bluetooth: BNEP filters: protocol
multicast

Oct 09 16:10:27 localhost kernel: [c0] Bluetooth: BNEP socket layer
initialized

Oct 09 16:10:27 localhost bluetoothd[3555]: Bluetooth management interface
1.3 initialized

Oct 09 16:10:27 localhost connmand[3419]: Method "ListAdapters" with
signature "" on interface "org.bluez.Manager" doesn't exist

Oct 09 16:10:27 localhost kernel: [c3] Bluetooth: HCI UART driver ver 2.2

Oct 09 16:10:27 localhost kernel: [c3] Bluetooth: HCI H4 protocol
initialized

Oct 09 16:10:27 localhost kernel: [c3] Bluetooth: HCI BCSP protocol
initialized

Oct 09 16:10:27 localhost kernel: [c3] Bluetooth: HCILL protocol initialized

Oct 09 16:10:27 localhost kernel: [c3] Bluetooth: HCIATH3K protocol
initialized

Oct 09 16:10:27 localhost kernel: [c3] Bluetooth: HCI Three-wire UART (H5)
protocol initialized

Oct 09 16:10:27 localhost bluetoothd[3555]: Failed to obtain handles for
"Service Changed" characteristic

Oct 09 16:10:27 localhost systemd[1]: Reached target Bluetooth.

Oct 09 16:10:27 localhost systemd[1]: Starting Bluetooth.

Oct 09 16:10:27 localhost kernel: [c0] Bluetooth: RFCOMM TTY layer
initialized

Oct 09 16:10:27 localhost kernel: [c0] Bluetooth: RFCOMM socket layer
initialized

Oct 09 16:10:27 localhost kernel: [c0] Bluetooth: RFCOMM ver 1.11

Oct 09 16:10:27 localhost bluetoothd[3555]: hci1 Load Connection Parameters
failed: Unknown Command (0x01)

Oct 09 16:10:28 localhost bluetoothd[3555]: Endpoint registered:
sender=:1.5 path=/MediaEndpoint/A2DPSource

Oct 09 16:10:28 localhost bluetoothd[3555]: Endpoint registered:
sender=:1.5 path=/MediaEndpoint/A2DPSink


[root at localhost audio]# pulseaudio --version

pulseaudio 6.0

[root at localhost audio]# bluetoothctl --version

5.36

I checked many different configuration. The last one is:

--

[root at localhost audio]# cat /etc/bluetooth/audio.conf

# Configuration file for the audio service


# This section contains options which are not specific to any

# particular interface

[General]


# Switch to master role for incoming connections (defaults to true)

Master=true


# If we want to disable support for specific services

# Defaults to supporting all implemented services

#Disable=Gateway,Source,Socket

#Disable=Gateway

#Enable=Headset

#Enable=Gateway,Source,Socket

Enable=Source,Sink,Media,Socket,Headset

#Enable=Source

# SCO routing. Either PCM or HCI (in which case audio is routed to/from
ALSA)

# Defaults to HCI

#SCORouting=PCM


# Automatically connect both A2DP and HFP/HSP profiles for incoming

# connections. Some headsets that support both profiles will only connect
the

# other one automatically so the default setting of true is usually a good

# idea.

AutoConnect=true


# Headset interface specific options (i.e. options which affect how the
audio

# service interacts with remote headset devices)

[Headset]


# Set to true to support HFP, false means only HSP is supported

# Defaults to true

HFP=false


# Maximum number of connected HSP/HFP devices per adapter. Defaults to 1

MaxConnected=1


# Set to true to enable use of fast connectable mode (faster page scanning)

# for HFP when incoming call starts. Default settings are restored after

# call is answered or rejected. Page scan interval is much shorter and page

# scan type changed to interlaced. Such allows faster connection initiated

# by a headset.

FastConnectable=true


# Just an example of potential config options for the other interfaces

[A2DP]

SBCSources=1

MPEG12Sources=0

--

[root at localhost audio]# cat /etc/pulse/system.pa

#!/usr/bin/pulseaudio -nF

#

# This file is part of PulseAudio.

#

# PulseAudio is free software; you can redistribute it and/or modify it

# under the terms of the GNU Lesser General Public License as published by

# the Free Software Foundation; either version 2 of the License, or

# (at your option) any later version.

#

# PulseAudio is distributed in the hope that it will be useful, but

# WITHOUT ANY WARRANTY; without even the implied warranty of

# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU

# General Public License for more details.

#

# You should have received a copy of the GNU Lesser General Public License

# along with PulseAudio; if not, see <http://www.gnu.org/licenses/>.

# This startup script is used only if PulseAudio is started per-user

# (i.e. not in system mode)

.nofail

### Load something into the sample cache

#load-sample-lazy x11-bell /usr/share/sounds/freedesktop/stereo/bell.oga

#load-sample-lazy pulse-hotplug
/usr/share/sounds/freedesktop/stereo/device-added.oga

#load-sample-lazy pulse-coldplug
/usr/share/sounds/freedesktop/stereo/device-added.oga

#load-sample-lazy pulse-access
/usr/share/sounds/freedesktop/stereo/message.oga

.fail

### Automatically restore the volume of streams and devices

load-module module-device-restore

load-module module-stream-restore

load-module module-card-restore

### Automatically augment property information from .desktop files

### stored in /usr/share/application

load-module module-augment-properties

### Should be after module-*-restore but before module-*-detect

load-module module-switch-on-port-available

### Load audio drivers statically

### (it's probably better to not load these drivers manually, but instead

### use module-udev-detect -- see below -- for doing this automatically)

#load-module module-alsa-sink

#load-module module-alsa-source device=hw:1,0

#load-module module-null-sink

#load-module module-pipe-sink

### Automatically load driver modules depending on the hardware available

.ifexists module-udev-detect.so

load-module module-udev-detect tsched=0

.else

### Use the static hardware detection module (for systems that lack udev
support)

load-module module-detect

.endif

### Automatically connect sink and source if JACK server is present

.ifexists module-jackdbus-detect.so

.nofail

load-module module-jackdbus-detect channels=2

.fail

.endif

### Automatically load driver modules for Bluetooth hardware

.ifexists module-bluetooth-policy.so

load-module module-bluetooth-policy

.endif

.ifexists module-bluetooth-discover.so

load-module module-bluetooth-discover

##headset=native

.endif

### Load several protocols

.ifexists module-esound-protocol-unix.so

load-module module-esound-protocol-unix

.endif

load-module module-native-protocol-unix

### Network access (may be configured with paprefs, so leave this commented

### here if you plan to use paprefs)

#load-module module-esound-protocol-tcp

#load-module module-native-protocol-tcp

#load-module module-zeroconf-publish

### Load the RTP receiver module (also configured via paprefs, see above)

#load-module module-rtp-recv

### Load the RTP sender module (also configured via paprefs, see above)

#load-module module-null-sink sink_name=rtp format=s16be channels=2
rate=44100 sink_properties="device.description='RTP Multicast Sink'"

#load-module module-rtp-send source=rtp.monitor

### Load additional modules from GConf settings. This can be configured
with the paprefs tool.

### Please keep in mind that the modules configured by paprefs might
conflict with manually

### loaded modules.

.ifexists module-gconf.so

.nofail

load-module module-gconf

.fail

.endif

### Automatically restore the default sink/source when changed by the user

### during runtime

### NOTE: This should be loaded as early as possible so that subsequent
modules

### that look up the default sink/source get the right value

load-module module-default-device-restore

### Automatically move streams to the default sink if the sink they are

### connected to dies, similar for sources

load-module module-rescue-streams

### Make sure we always have a sink around, even if it is a null sink.

load-module module-always-sink

### Honour intended role device property

load-module module-intended-roles

### Automatically suspend sinks/sources that become idle for too long

load-module module-suspend-on-idle

### If autoexit on idle is enabled we want to make sure we only quit

### when no local session needs us anymore.

.ifexists module-console-kit.so

#load-module module-console-kit

.endif

.ifexists module-systemd-login.so

load-module module-systemd-login

.endif

### Enable positioned event sounds

load-module module-position-event-sounds

### Cork music/video streams when a phone stream is active

load-module module-role-cork

### Modules to allow autoloading of filters (such as echo cancellation)

### on demand. module-filter-heuristics tries to determine what filters

### make sense, and module-filter-apply does the heavy-lifting of

### loading modules and rerouting streams.

load-module module-filter-heuristics

load-module module-filter-apply

# X11 modules should not be started from default.pa so that one daemon

# can be shared by multiple sessions.

### Load X11 bell module

#load-module module-x11-bell sample=x11-bell

### Register ourselves in the X11 session manager

#load-module module-x11-xsmp

### Publish connection data in the X11 root window

#.ifexists module-x11-publish.so

#.nofail

#load-module module-x11-publish

#.fail

#.endif

### Make some devices default

#set-default-sink output

#set-default-source input

load-module module-switch-on-connect


###load-module module-loopback


---

[root at localhost audio]# cat /etc/pulse/daemon.conf

# This file is part of PulseAudio.

#

# PulseAudio is free software; you can redistribute it and/or modify

# it under the terms of the GNU Lesser General Public License as published
by

# the Free Software Foundation; either version 2 of the License, or

# (at your option) any later version.

#

# PulseAudio is distributed in the hope that it will be useful, but

# WITHOUT ANY WARRANTY; without even the implied warranty of

# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU

# General Public License for more details.

#

# You should have received a copy of the GNU Lesser General Public License

# along with PulseAudio; if not, see <http://www.gnu.org/licenses/>.

## Configuration file for the PulseAudio daemon. See pulse-daemon.conf(5)
for

## more information. Default values are commented out.  Use either ; or #
for

## commenting.

; daemonize = no

; fail = yes

; allow-module-loading = yes

; allow-exit = yes

; use-pid-file = yes

; system-instance = no

; local-server-type = user

; enable-shm = yes

; shm-size-bytes = 0 # setting this 0 will use the system-default, usually
64 MiB

; lock-memory = no

; cpu-limit = no

; high-priority = yes

; nice-level = -11

; realtime-scheduling = yes

; realtime-priority = 5

exit-idle-time = -1

; scache-idle-time = 20

; dl-search-path = (depends on architecture)

; load-default-script-file = yes

; default-script-file = /etc/pulse/default.pa

; log-target = auto

; log-level = notice

; log-meta = no

; log-time = no

; log-backtrace = 0

; resample-method = speex-float-1

enable-remixing = yes

enable-lfe-remixing = no

; resample-methon = ffmpeg

; flat-volumes = yes

; rlimit-fsize = -1

; rlimit-data = -1

; rlimit-stack = -1

; rlimit-core = -1

; rlimit-as = -1

; rlimit-rss = -1

; rlimit-nproc = -1

; rlimit-nofile = 256

; rlimit-memlock = -1

; rlimit-locks = -1

; rlimit-sigpending = -1

; rlimit-msgqueue = -1

; rlimit-nice = 31

; rlimit-rtprio = 9

; rlimit-rttime = 200000

default-sample-format = s16le

default-sample-rate = 44100

; alternate-sample-rate = 48000

default-sample-channels = 2

; default-channel-map = front-left,front-right

default-fragments = 10

default-fragment-size-msec = 10

; enable-deferred-volume = yes

; deferred-volume-safety-margin-usec = 8000

; deferred-volume-extra-delay-usec = 0
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/pulseaudio-discuss/attachments/20171009/841d4fb6/attachment-0001.html>


More information about the pulseaudio-discuss mailing list