[pulseaudio-discuss] [PATCH 44/60] bluetooth: Get BlueZ 5 device object

João Paulo Rechi Vita jprvita at gmail.com
Tue Sep 17 13:16:41 PDT 2013


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


More information about the pulseaudio-discuss mailing list