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 <[email protected]>
---
  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-@[email protected]
+               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
[email protected]
http://lists.freedesktop.org/mailman/listinfo/pulseaudio-discuss



--
David Henningsson, Canonical Ltd.
https://launchpad.net/~diwic
_______________________________________________
pulseaudio-discuss mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/pulseaudio-discuss

Reply via email to