[pulseaudio-discuss] [PATCH 1/4] bluez 5: Build both headset backends, if available

David Henningsson david.henningsson at canonical.com
Mon Nov 3 22:44:55 PST 2014



On 2014-11-03 12:47, Peter Meerwald wrote:
>
>> Enable both ofono and native backends to be built into the same
>> libbluez5-util. Never build the null backend.
>
> can you please add the check whether bluetooth headers (build
> dependency) are available in this patch series?

Interesting. So it looks like the native backend requires 
libbluetooth-dev, but it does not seem to require to call into anything 
in libbluetooth.so, so we do not need to link to it. If it did, the 
right thing to do would be to do a PKG_CHECK_MODULES(bluez), but now I'm 
not so sure. Also I'm not sure if we need any versioned dependency. I'm 
ccing Arun and Wim for possible input on this issue?

Anyhow, it seems not directly related to this patch set, the bug was 
there before. Or was there an uncommitted patch already on the mailing 
list for this issue, in that case I must have missed it?

>
> thanks, p.
>
>> Signed-off-by: David Henningsson <david.henningsson at canonical.com>
>> ---
>>   configure.ac                           | 30 +++++++++++++++++-------------
>>   src/Makefile.am                        | 12 ++++++++++--
>>   src/modules/bluetooth/backend-native.c |  4 ++--
>>   src/modules/bluetooth/backend-ofono.c  |  4 ++--
>>   src/modules/bluetooth/bluez5-util.c    | 24 ++++++++++++++++--------
>>   src/modules/bluetooth/bluez5-util.h    | 21 +++++++++++++++++++--
>>   6 files changed, 66 insertions(+), 29 deletions(-)
>>
>> diff --git a/configure.ac b/configure.ac
>> index f165eb4..f98b194 100644
>> --- a/configure.ac
>> +++ b/configure.ac
>> @@ -1035,18 +1035,19 @@ AM_CONDITIONAL([HAVE_BLUEZ], [test "x$HAVE_BLUEZ" = x1])
>>
>>   ## Bluetooth Headset profiles backend ##
>>
>> -AC_ARG_WITH(bluetooth_headset_backend,
>> -    AS_HELP_STRING([--with-bluetooth-headset-backend=<ofono|native|null>],[Backend for Bluetooth headset profiles (native)]))
>> -if test -z "$with_bluetooth_headset_backend" ; then
>> -    BLUETOOTH_HEADSET_BACKEND=native
>> -else
>> -    BLUETOOTH_HEADSET_BACKEND=$with_bluetooth_headset_backend
>> -fi
>> -
>> -AS_IF([test "x$BLUETOOTH_HEADSET_BACKEND" != "xofono" && test "x$BLUETOOTH_HEADSET_BACKEND" != "xnull" && test "x$BLUETOOTH_HEADSET_BACKEND" != "xnative"],
>> -    [AC_MSG_ERROR([*** Invalid Bluetooth Headset backend])])
>> -
>> -AC_SUBST(BLUETOOTH_HEADSET_BACKEND)
>> +AC_ARG_ENABLE([bluez5-ofono-headset],
>> +    AS_HELP_STRING([--disable-bluez5-ofono-headset],[Disable optional ofono headset backend support (Bluez 5)]))
>> +AS_IF([test "x$HAVE_BLUEZ_5" = "x1" && test "x$enable_bluez5_ofono_headset" != "xno"], HAVE_BLUEZ_5_OFONO_HEADSET=1)
>> +AC_SUBST(HAVE_BLUEZ_5_OFONO_HEADSET)
>> +AM_CONDITIONAL([HAVE_BLUEZ_5_OFONO_HEADSET], [test "x$HAVE_BLUEZ_5_OFONO_HEADSET" = x1])
>> +AS_IF([test "x$HAVE_BLUEZ_5_OFONO_HEADSET" = "x1"], AC_DEFINE([HAVE_BLUEZ_5_OFONO_HEADSET], 1, [Bluez 5 ofono headset backend enabled]))
>> +
>> +AC_ARG_ENABLE([bluez5-native-headset],
>> +    AS_HELP_STRING([--disable-bluez5-native-headset],[Disable optional native headset backend support (Bluez 5)]))
>> +AS_IF([test "x$HAVE_BLUEZ_5" = "x1" && test "x$enable_bluez5_native_headset" != "xno"], HAVE_BLUEZ_5_NATIVE_HEADSET=1)
>> +AC_SUBST(HAVE_BLUEZ_5_NATIVE_HEADSET)
>> +AM_CONDITIONAL([HAVE_BLUEZ_5_NATIVE_HEADSET], [test "x$HAVE_BLUEZ_5_NATIVE_HEADSET" = x1])
>> +AS_IF([test "x$HAVE_BLUEZ_5_NATIVE_HEADSET" = "x1"], AC_DEFINE([HAVE_BLUEZ_5_NATIVE_HEADSET], 1, [Bluez 5 native headset backend enabled]))
>>
>>   #### UDEV support (optional) ####
>>
>> @@ -1462,6 +1463,8 @@ AS_IF([test "x$HAVE_SYSTEMD" = "x1"], ENABLE_SYSTEMD=yes, ENABLE_SYSTEMD=no)
>>   AS_IF([test "x$HAVE_SYSTEMD_JOURNAL" = "x1"], ENABLE_SYSTEMD_JOURNAL=yes, ENABLE_SYSTEMD_JOURNAL=no)
>>   AS_IF([test "x$HAVE_BLUEZ_4" = "x1"], ENABLE_BLUEZ_4=yes, ENABLE_BLUEZ_4=no)
>>   AS_IF([test "x$HAVE_BLUEZ_5" = "x1"], ENABLE_BLUEZ_5=yes, ENABLE_BLUEZ_5=no)
>> +AS_IF([test "x$HAVE_BLUEZ_5_OFONO_HEADSET" = "x1"], ENABLE_BLUEZ_5_OFONO_HEADSET=yes, ENABLE_BLUEZ_5_OFONO_HEADSET=no)
>> +AS_IF([test "x$HAVE_BLUEZ_5_NATIVE_HEADSET" = "x1"], ENABLE_BLUEZ_5_NATIVE_HEADSET=yes, ENABLE_BLUEZ_5_NATIVE_HEADSET=no)
>>   AS_IF([test "x$HAVE_HAL_COMPAT" = "x1"], ENABLE_HAL_COMPAT=yes, ENABLE_HAL_COMPAT=no)
>>   AS_IF([test "x$HAVE_TCPWRAP" = "x1"], ENABLE_TCPWRAP=yes, ENABLE_TCPWRAP=no)
>>   AS_IF([test "x$HAVE_LIBSAMPLERATE" = "x1"], ENABLE_LIBSAMPLERATE=yes, ENABLE_LIBSAMPLERATE=no)
>> @@ -1516,7 +1519,8 @@ echo "
>>       Enable D-Bus:                  ${ENABLE_DBUS}
>>         Enable BlueZ 4:              ${ENABLE_BLUEZ_4}
>>         Enable BlueZ 5:              ${ENABLE_BLUEZ_5}
>> -        headset backend:           ${BLUETOOTH_HEADSET_BACKEND}
>> +        Enable ofono headsets:     ${ENABLE_BLUEZ_5_OFONO_HEADSET}
>> +        Enable native headsets:    ${ENABLE_BLUEZ_5_NATIVE_HEADSET}
>>       Enable udev:                   ${ENABLE_UDEV}
>>         Enable HAL->udev compat:     ${ENABLE_HAL_COMPAT}
>>       Enable systemd login:          ${ENABLE_SYSTEMD}
>> diff --git a/src/Makefile.am b/src/Makefile.am
>> index 4219ece..5e43f4e 100644
>> --- a/src/Makefile.am
>> +++ b/src/Makefile.am
>> @@ -2110,8 +2110,16 @@ module_bluez4_device_la_CFLAGS = $(AM_CFLAGS) $(DBUS_CFLAGS) $(SBC_CFLAGS)
>>   libbluez5_util_la_SOURCES = \
>>   		modules/bluetooth/bluez5-util.c \
>>   		modules/bluetooth/bluez5-util.h \
>> -		modules/bluetooth/a2dp-codecs.h \
>> -		modules/bluetooth/backend- at BLUETOOTH_HEADSET_BACKEND@.c
>> +		modules/bluetooth/a2dp-codecs.h
>> +if HAVE_BLUEZ_5_OFONO_HEADSET
>> +libbluez5_util_la_SOURCES += \
>> +		modules/bluetooth/backend-ofono.c
>> +endif
>> +if HAVE_BLUEZ_5_NATIVE_HEADSET
>> +libbluez5_util_la_SOURCES += \
>> +		modules/bluetooth/backend-native.c
>> +endif
>> +
>>   libbluez5_util_la_LDFLAGS = -avoid-version
>>   libbluez5_util_la_LIBADD = $(MODULE_LIBADD) $(DBUS_LIBS)
>>   libbluez5_util_la_CFLAGS = $(AM_CFLAGS) $(DBUS_CFLAGS)
>> diff --git a/src/modules/bluetooth/backend-native.c b/src/modules/bluetooth/backend-native.c
>> index a9dc64c..66dacf9 100644
>> --- a/src/modules/bluetooth/backend-native.c
>> +++ b/src/modules/bluetooth/backend-native.c
>> @@ -464,7 +464,7 @@ static void profile_done(pa_bluetooth_backend *b, pa_bluetooth_profile_t profile
>>       }
>>   }
>>
>> -pa_bluetooth_backend *pa_bluetooth_backend_new(pa_core *c, pa_bluetooth_discovery *y) {
>> +pa_bluetooth_backend *pa_bluetooth_native_backend_new(pa_core *c, pa_bluetooth_discovery *y) {
>>       pa_bluetooth_backend *backend;
>>       DBusError err;
>>
>> @@ -488,7 +488,7 @@ pa_bluetooth_backend *pa_bluetooth_backend_new(pa_core *c, pa_bluetooth_discover
>>       return backend;
>>   }
>>
>> -void pa_bluetooth_backend_free(pa_bluetooth_backend *backend) {
>> +void pa_bluetooth_native_backend_free(pa_bluetooth_backend *backend) {
>>       pa_assert(backend);
>>
>>       pa_dbus_free_pending_list(&backend->pending);
>> diff --git a/src/modules/bluetooth/backend-ofono.c b/src/modules/bluetooth/backend-ofono.c
>> index ba10ed6..797d35c 100644
>> --- a/src/modules/bluetooth/backend-ofono.c
>> +++ b/src/modules/bluetooth/backend-ofono.c
>> @@ -582,7 +582,7 @@ static DBusHandlerResult hf_audio_agent_handler(DBusConnection *c, DBusMessage *
>>       return DBUS_HANDLER_RESULT_HANDLED;
>>   }
>>
>> -pa_bluetooth_backend *pa_bluetooth_backend_new(pa_core *c, pa_bluetooth_discovery *y) {
>> +pa_bluetooth_backend *pa_bluetooth_ofono_backend_new(pa_core *c, pa_bluetooth_discovery *y) {
>>       pa_bluetooth_backend *backend;
>>       DBusError err;
>>       static const DBusObjectPathVTable vtable_hf_audio_agent = {
>> @@ -635,7 +635,7 @@ pa_bluetooth_backend *pa_bluetooth_backend_new(pa_core *c, pa_bluetooth_discover
>>       return backend;
>>   }
>>
>> -void pa_bluetooth_backend_free(pa_bluetooth_backend *backend) {
>> +void pa_bluetooth_ofono_backend_free(pa_bluetooth_backend *backend) {
>>       pa_assert(backend);
>>
>>       pa_dbus_free_pending_list(&backend->pending);
>> diff --git a/src/modules/bluetooth/bluez5-util.c b/src/modules/bluetooth/bluez5-util.c
>> index 9431aed..f7bf654 100644
>> --- a/src/modules/bluetooth/bluez5-util.c
>> +++ b/src/modules/bluetooth/bluez5-util.c
>> @@ -87,7 +87,7 @@ struct pa_bluetooth_discovery {
>>       pa_hashmap *devices;
>>       pa_hashmap *transports;
>>
>> -    pa_bluetooth_backend *backend;
>> +    pa_bluetooth_backend *ofono_backend, *native_backend;
>>       PA_LLIST_HEAD(pa_dbus_pending, pending);
>>   };
>>
>> @@ -899,8 +899,10 @@ static void get_managed_objects_reply(DBusPendingCall *pending, void *userdata)
>>
>>       y->objects_listed = true;
>>
>> -    if (!y->backend)
>> -        y->backend = pa_bluetooth_backend_new(y->core, y);
>> +    if (!y->ofono_backend)
>> +        y->ofono_backend = pa_bluetooth_ofono_backend_new(y->core, y);
>> +    if (!y->ofono_backend && !y->native_backend)
>> +        y->native_backend = pa_bluetooth_native_backend_new(y->core, y);
>>
>>   finish:
>>       dbus_message_unref(r);
>> @@ -954,9 +956,13 @@ static DBusHandlerResult filter_cb(DBusConnection *bus, DBusMessage *m, void *us
>>                   pa_hashmap_remove_all(y->devices);
>>                   pa_hashmap_remove_all(y->adapters);
>>                   y->objects_listed = false;
>> -                if (y->backend) {
>> -                    pa_bluetooth_backend_free(y->backend);
>> -                    y->backend = NULL;
>> +                if (y->ofono_backend) {
>> +                    pa_bluetooth_ofono_backend_free(y->ofono_backend);
>> +                    y->ofono_backend = NULL;
>> +                }
>> +                if (y->native_backend) {
>> +                    pa_bluetooth_native_backend_free(y->native_backend);
>> +                    y->native_backend = NULL;
>>                   }
>>               }
>>
>> @@ -1648,8 +1654,10 @@ void pa_bluetooth_discovery_unref(pa_bluetooth_discovery *y) {
>>           pa_hashmap_free(y->transports);
>>       }
>>
>> -    if (y->backend)
>> -        pa_bluetooth_backend_free(y->backend);
>> +    if (y->ofono_backend)
>> +        pa_bluetooth_ofono_backend_free(y->ofono_backend);
>> +    if (y->native_backend)
>> +        pa_bluetooth_native_backend_free(y->native_backend);
>>
>>       if (y->connection) {
>>
>> diff --git a/src/modules/bluetooth/bluez5-util.h b/src/modules/bluetooth/bluez5-util.h
>> index 3ef0ac8..d1abd39 100644
>> --- a/src/modules/bluetooth/bluez5-util.h
>> +++ b/src/modules/bluetooth/bluez5-util.h
>> @@ -117,8 +117,25 @@ struct pa_bluetooth_adapter {
>>       bool valid;
>>   };
>>
>> -pa_bluetooth_backend *pa_bluetooth_backend_new(pa_core *c, pa_bluetooth_discovery *y);
>> -void pa_bluetooth_backend_free(pa_bluetooth_backend *b);
>> +#ifdef HAVE_BLUEZ_5_OFONO_HEADSET
>> +pa_bluetooth_backend *pa_bluetooth_ofono_backend_new(pa_core *c, pa_bluetooth_discovery *y);
>> +void pa_bluetooth_ofono_backend_free(pa_bluetooth_backend *b);
>> +#else
>> +static inline pa_bluetooth_backend *pa_bluetooth_ofono_backend_new(pa_core *c, pa_bluetooth_discovery *y) {
>> +    return NULL;
>> +}
>> +static inline void pa_bluetooth_ofono_backend_free(pa_bluetooth_backend *b) {}
>> +#endif
>> +
>> +#ifdef HAVE_BLUEZ_5_NATIVE_HEADSET
>> +pa_bluetooth_backend *pa_bluetooth_native_backend_new(pa_core *c, pa_bluetooth_discovery *y);
>> +void pa_bluetooth_native_backend_free(pa_bluetooth_backend *b);
>> +#else
>> +static inline pa_bluetooth_backend *pa_bluetooth_native_backend_new(pa_core *c, pa_bluetooth_discovery *y) {
>> +    return NULL;
>> +}
>> +static inline void pa_bluetooth_native_backend_free(pa_bluetooth_backend *b) {}
>> +#endif
>>
>>   pa_bluetooth_transport *pa_bluetooth_transport_new(pa_bluetooth_device *d, const char *owner, const char *path,
>>                                                      pa_bluetooth_profile_t p, const uint8_t *config, size_t size);
>> --
>> 1.9.1
>>
>> _______________________________________________
>> pulseaudio-discuss mailing list
>> pulseaudio-discuss at lists.freedesktop.org
>> http://lists.freedesktop.org/mailman/listinfo/pulseaudio-discuss
>>
>

-- 
David Henningsson, Canonical Ltd.
https://launchpad.net/~diwic


More information about the pulseaudio-discuss mailing list