On Tue, Sep 17, 2013 at 3:03 PM, <jprvita at gmail.com> wrote: > 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..bf6ef4b 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_bluetooth_discovery *discovery; > + pa_bluetooth_device *device; > +}; > > int pa__init(pa_module* m) { > + struct userdata *u; > + const char *path; > + pa_modargs *ma; > + > + pa_assert(m); > + > + m->userdata = u = pa_xnew0(struct userdata, 1); > + u->module = m; > + u->core = m->core; > + > + 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"); > + pa_modargs_free(ma); > + goto fail; > + } > + > + pa_modargs_free(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->discovery) > + pa_bluetooth_discovery_unref(u->discovery); > + > + pa_xfree(u); > } > -- > 1.8.3.1 > The consecutive patches doesn't apply cleanly on top of this one, so I'll send a v4 together with the other fixes. -- Jo?o Paulo Rechi Vita http://about.me/jprvita