[pulseaudio-discuss] [PATCH 42/56] bluetooth: Get BlueZ 5 device object
Tanu Kaskinen
tanu.kaskinen at linux.intel.com
Mon Jul 22 07:56:14 PDT 2013
On Fri, 2013-07-12 at 15:06 -0300, 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 | 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;
> + }
If the discovery object was just created, the devices haven't been
enumerated yet, so module-bluez5-device doesn't work without loading
module-bluez5-discover first. This is nothing new - it looks like the
old code did the same thing. I wonder why we even bother to have a
separate device module, if it can't be used without the discovery
module.
--
Tanu
More information about the pulseaudio-discuss
mailing list