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

Peter Meerwald pmeerw at pmeerw.net
Mon Nov 3 03:47:20 PST 2014


> 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?

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
> 

-- 

Peter Meerwald
+43-664-2444418 (mobile)


More information about the pulseaudio-discuss mailing list