[pulseaudio-discuss] [PATCHv2 44/60] bluetooth: Get BlueZ 5 device object
jprvita at gmail.com
jprvita at gmail.com
Mon Aug 12 21:54:22 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 | 65 ++++++++++++++++++++++++++++
1 file changed, 65 insertions(+)
diff --git a/src/modules/bluetooth/module-bluez5-device.c b/src/modules/bluetooth/module-bluez5-device.c
index 890f7e4..c1c3477 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,74 @@ 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;
+ pa_modargs *ma;
+ const char *path;
+
+ pa_assert(m);
+
+ if (!(ma = pa_modargs_new(m->argument, valid_modargs))) {
+ pa_log_error("Failed to parse module arguments");
+ goto fail;
+ }
+
+ if (!(path = pa_modargs_get_value(ma, "path", NULL))) {
+ pa_log_error("Failed to get device path from module arguments");
+ goto fail;
+ }
+
+ m->userdata = u = pa_xnew0(struct userdata, 1);
+ u->module = m;
+ u->core = m->core;
+ u->modargs = ma;
+
+ 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.7.11.7
More information about the pulseaudio-discuss
mailing list