[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