[pulseaudio-discuss] [RFCv3 25/43] bluetooth: Get BlueZ 5 device object

jprvita at gmail.com jprvita at gmail.com
Fri Sep 13 16:34:32 PDT 2013


From: João Paulo Rechi Vita <jprvita at openbossa.org>

Get the remote device information stored in pa_bluetooth_discovery. This
also creates the mandatory parameter 'path' for module-bluez5-device,
which is used to inform the object path of the remote device in BlueZ on
the module load.
---
 src/modules/bluetooth/module-bluez5-device.c | 63 ++++++++++++++++++++++++++++
 1 file changed, 63 insertions(+)

diff --git a/src/modules/bluetooth/module-bluez5-device.c b/src/modules/bluetooth/module-bluez5-device.c
index 890f7e4..18f40fa 100644
--- a/src/modules/bluetooth/module-bluez5-device.c
+++ b/src/modules/bluetooth/module-bluez5-device.c
@@ -25,6 +25,7 @@
 #endif
 
 #include <pulsecore/module.h>
+#include <pulsecore/modargs.h>
 
 #include "bluez5-util.h"
 
@@ -34,10 +35,72 @@ PA_MODULE_AUTHOR("João Paulo Rechi Vita");
 PA_MODULE_DESCRIPTION("BlueZ 5 Bluetooth audio sink and source");
 PA_MODULE_VERSION(PACKAGE_VERSION);
 PA_MODULE_LOAD_ONCE(false);
+PA_MODULE_USAGE("path=<device object path>");
+
+static const char* const valid_modargs[] = {
+    "path",
+    NULL
+};
+
+struct userdata {
+    pa_module *module;
+    pa_core *core;
+    pa_modargs *modargs;
+
+    pa_bluetooth_discovery *discovery;
+    pa_bluetooth_device *device;
+};
 
 int pa__init(pa_module* m) {
+    struct userdata *u;
+    const char *path;
+
+    pa_assert(m);
+
+    m->userdata = u = pa_xnew0(struct userdata, 1);
+    u->module = m;
+    u->core = m->core;
+
+    if (!(u->modargs = pa_modargs_new(m->argument, valid_modargs))) {
+        pa_log_error("Failed to parse module arguments");
+        goto fail;
+    }
+
+    if (!(path = pa_modargs_get_value(u->modargs, "path", NULL))) {
+        pa_log_error("Failed to get device path from module arguments");
+        goto fail;
+    }
+
+    if (!(u->discovery = pa_bluetooth_discovery_get(m->core)))
+        goto fail;
+
+    if (!(u->device = pa_bluetooth_discovery_get_device_by_path(u->discovery, path))) {
+        pa_log_error("%s is unknown", path);
+        goto fail;
+    }
+
     return 0;
+
+fail:
+
+    pa__done(m);
+
+    return -1;
 }
 
 void pa__done(pa_module *m) {
+    struct userdata *u;
+
+    pa_assert(m);
+
+    if (!(u = m->userdata))
+        return;
+
+    if (u->modargs)
+        pa_modargs_free(u->modargs);
+
+    if (u->discovery)
+        pa_bluetooth_discovery_unref(u->discovery);
+
+    pa_xfree(u);
 }
-- 
1.8.3.1



More information about the pulseaudio-discuss mailing list