From: Tanu Kaskinen <tanuk@xxxxxx> The new helper function makes it easier to check whether any audio profiles are connected. That information is needed by the discovery module for deciding whether a new device module should be loaded. The device module should use this information too to unload itself at the right time, but that's currently not implemented. --- src/modules/bluetooth/bluetooth-util.c | 13 +++++++++++++ src/modules/bluetooth/bluetooth-util.h | 1 + src/modules/bluetooth/module-bluetooth-discover.c | 5 +---- 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/src/modules/bluetooth/bluetooth-util.c b/src/modules/bluetooth/bluetooth-util.c index 565bfce..b5064e9 100644 --- a/src/modules/bluetooth/bluetooth-util.c +++ b/src/modules/bluetooth/bluetooth-util.c @@ -1000,6 +1000,19 @@ pa_bluetooth_transport* pa_bluetooth_device_get_transport(pa_bluetooth_device *d return NULL; } +bool pa_bluetooth_device_any_audio_connected(const pa_bluetooth_device *d) { + pa_assert(d); + + if (d->dead || !device_is_audio_ready(d)) + return false; + + /* Deliverately ignore audio_sink_state and headset_state since they are reflected in audio_state */ + return + d->audio_state >= PA_BT_AUDIO_STATE_CONNECTED || + d->audio_source_state >= PA_BT_AUDIO_STATE_CONNECTED || + d->hfgw_state >= PA_BT_AUDIO_STATE_CONNECTED; +} + int pa_bluetooth_transport_acquire(pa_bluetooth_transport *t, const char *accesstype, size_t *imtu, size_t *omtu) { DBusMessage *m, *r; DBusError err; diff --git a/src/modules/bluetooth/bluetooth-util.h b/src/modules/bluetooth/bluetooth-util.h index 1ec9e8c..874baa0 100644 --- a/src/modules/bluetooth/bluetooth-util.h +++ b/src/modules/bluetooth/bluetooth-util.h @@ -144,6 +144,7 @@ pa_bluetooth_device* pa_bluetooth_discovery_get_by_address(pa_bluetooth_discover pa_bluetooth_transport* pa_bluetooth_discovery_get_transport(pa_bluetooth_discovery *y, const char *path); pa_bluetooth_transport* pa_bluetooth_device_get_transport(pa_bluetooth_device *d, enum profile profile); +bool pa_bluetooth_device_any_audio_connected(const pa_bluetooth_device *d); int pa_bluetooth_transport_acquire(pa_bluetooth_transport *t, const char *accesstype, size_t *imtu, size_t *omtu); void pa_bluetooth_transport_release(pa_bluetooth_transport *t, const char *accesstype); diff --git a/src/modules/bluetooth/module-bluetooth-discover.c b/src/modules/bluetooth/module-bluetooth-discover.c index aef9492..48d0bee 100644 --- a/src/modules/bluetooth/module-bluetooth-discover.c +++ b/src/modules/bluetooth/module-bluetooth-discover.c @@ -74,10 +74,7 @@ static pa_hook_result_t load_module_for_device(pa_bluetooth_discovery *y, const mi = pa_hashmap_get(u->hashmap, d->path); - if (!d->dead && - (d->audio_state >= PA_BT_AUDIO_STATE_CONNECTED || - d->audio_source_state >= PA_BT_AUDIO_STATE_CONNECTED || - d->hfgw_state >= PA_BT_AUDIO_STATE_CONNECTED)) { + if (pa_bluetooth_device_any_audio_connected(d)) { if (!mi) { pa_module *m = NULL; -- 1.7.11.7