From: Jo?o Paulo Rechi Vita <jprvita@xxxxxxxxxxxxx> 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