[pulseaudio-discuss] [RFC v1 04/14] bluetooth: Support Properties.PropertiesChanged signal

Tanu Kaskinen tanuk at iki.fi
Mon Jan 14 12:18:44 PST 2013


On Mon, 2013-01-14 at 16:41 +0100, Mikel Astiz wrote:
> From: Mikel Astiz <mikel.astiz at bmw-carit.de>
> 
> Install matches for signal Properties.PropertiesChanged and process the
> properties corresponding to the tracked devices.
> ---
>  src/modules/bluetooth/bluetooth-util.c | 29 +++++++++++++++++++++++++++++
>  1 file changed, 29 insertions(+)
> 
> diff --git a/src/modules/bluetooth/bluetooth-util.c b/src/modules/bluetooth/bluetooth-util.c
> index 9abd264..2073418 100644
> --- a/src/modules/bluetooth/bluetooth-util.c
> +++ b/src/modules/bluetooth/bluetooth-util.c
> @@ -1239,6 +1239,33 @@ static DBusHandlerResult filter_cb(DBusConnection *bus, DBusMessage *m, void *us
>          }
>  
>          return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
> +    } else if (dbus_message_is_signal(m, "org.freedesktop.DBus.Properties", "PropertiesChanged")) {
> +        DBusMessageIter arg_i;
> +        const char *interface;
> +
> +        if (y->version != BLUEZ_VERSION_5)
> +            return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; /* No reply received yet from GetManagedObjects */
> +
> +        if (!dbus_message_iter_init(m, &arg_i) || !pa_streq(dbus_message_get_signature(m), "sa{sv}as")) {
> +            pa_log("Invalid signature found in PropertiesChanged");
> +            goto fail;
> +        }
> +
> +        dbus_message_iter_get_basic(&arg_i, &interface);
> +
> +        pa_assert_se(dbus_message_iter_next(&arg_i));
> +        pa_assert(dbus_message_iter_get_arg_type(&arg_i) == DBUS_TYPE_ARRAY);
> +
> +        if (pa_streq(interface, "org.bluez.Device1")) {
> +            pa_bluetooth_device *d;
> +
> +            if (!(d = pa_hashmap_get(y->devices, dbus_message_get_path(m))))
> +                return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; /* Device not being tracked */
> +
> +            parse_device_properties(d, &arg_i);

parse_device_properties() will stop immediately if any parse error
occurs, so we may miss valid property changes. I suggest that
parse_foo_properties() would take a parameter indicating whether we are
parsing the initial properties or changed properties, and if we are
parsing changed properties, parse errors would be ignored. That
parameter would be also useful for handling properties that are supposed
to stay constant.

(I'm sure I already wrote that suggestion in relation to the transport
property parsing discussion, but it seems that I never sent a mail that
would have contained the suggestion I wrote.)

-- 
Tanu



More information about the pulseaudio-discuss mailing list