[PATCH v4 14/41] bluetooth: Parse BlueZ 5 D-Bus interfaces

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Sat, 2013-09-21 at 14:02 +0300, Tanu Kaskinen wrote:
> On Wed, 2013-09-18 at 16:17 -0500, jprvita at gmail.com wrote:
> > From: Jo?o Paulo Rechi Vita <jprvita at openbossa.org>
> > 
> > Parse the arguments of the InterfacesAdded signal and the
> > GetManagedObjects() reply.
> > 
> > This code is based on previous work by Mikel Astiz.
> > ---
> >  src/modules/bluetooth/bluez5-util.c | 72 +++++++++++++++++++++++++++++++++++--
> >  1 file changed, 70 insertions(+), 2 deletions(-)
> > 
> > diff --git a/src/modules/bluetooth/bluez5-util.c b/src/modules/bluetooth/bluez5-util.c
> > index bf4a046..7f0a7ec 100644
> > --- a/src/modules/bluetooth/bluez5-util.c
> > +++ b/src/modules/bluetooth/bluez5-util.c
> > @@ -38,6 +38,7 @@
> >  #include "bluez5-util.h"
> >  
> >  #define BLUEZ_SERVICE "org.bluez"
> > +#define BLUEZ_ADAPTER_INTERFACE BLUEZ_SERVICE ".Adapter1"
> >  #define BLUEZ_DEVICE_INTERFACE BLUEZ_SERVICE ".Device1"
> >  #define BLUEZ_MEDIA_ENDPOINT_INTERFACE BLUEZ_SERVICE ".MediaEndpoint1"
> >  #define BLUEZ_MEDIA_TRANSPORT_INTERFACE BLUEZ_SERVICE ".MediaTransport1"
> > @@ -379,6 +380,73 @@ static void adapter_remove_all(pa_bluetooth_discovery *y) {
> >      }
> >  }
> >  
> > +static void parse_interfaces_and_properties(pa_bluetooth_discovery *y, DBusMessageIter *dict_i) {
> > +    DBusMessageIter element_i;
> > +    const char *path;
> > +
> > +    pa_assert(dbus_message_iter_get_arg_type(dict_i) == DBUS_TYPE_OBJECT_PATH);
> > +    dbus_message_iter_get_basic(dict_i, &path);
> > +
> > +    pa_assert_se(dbus_message_iter_next(dict_i));
> > +    pa_assert(dbus_message_iter_get_arg_type(dict_i) == DBUS_TYPE_ARRAY);
> > +
> > +    dbus_message_iter_recurse(dict_i, &element_i);
> > +
> > +    while (dbus_message_iter_get_arg_type(&element_i) == DBUS_TYPE_DICT_ENTRY) {
> > +        DBusMessageIter iface_i;
> > +        const char *interface;
> > +
> > +        dbus_message_iter_recurse(&element_i, &iface_i);
> > +
> > +        pa_assert(dbus_message_iter_get_arg_type(&iface_i) == DBUS_TYPE_STRING);
> > +        dbus_message_iter_get_basic(&iface_i, &interface);
> > +
> > +        pa_assert_se(dbus_message_iter_next(&iface_i));
> > +        pa_assert(dbus_message_iter_get_arg_type(&iface_i) == DBUS_TYPE_ARRAY);
> > +
> > +        if (pa_streq(interface, BLUEZ_ADAPTER_INTERFACE)) {
> > +            pa_bluetooth_adapter *a;
> > +
> > +            if ((a = pa_hashmap_get(y->adapters, path))) {
> > +                pa_log_error("Found duplicated D-Bus path for device %s", path);
> > +                return;
> > +            } else
> > +                a = adapter_create(y, path);
> > +
> > +            pa_log_debug("Adapter %s found", path);
> > +
> > +            /* TODO: parse adapter properties and register endpoints */
> > +
> > +        } else if (pa_streq(interface, BLUEZ_DEVICE_INTERFACE)) {
> > +            pa_bluetooth_device *d;
> > +
> > +            if ((d = pa_hashmap_get(y->devices, path))) {
> > +                if (d->device_info_valid == 1) {
> > +                    pa_log_error("Found duplicated D-Bus path for device %s", path);
> > +                    return;
> > +                }
> > +
> > +                if (d->device_info_valid == -1) {
> > +                    pa_log_notice("Device %s was known before but had invalid information, reseting", path);
> > +                    d->device_info_valid = 0;
> 
> Didn't we agree that the device shouldn't be reset? If the device is
> reset, the device properties should be reset too, otherwise the old
> property values can leak to the new initialization. But as discussed
> last round, resetting the property values is error prone, so if the
> device initialization fails once, then the device should stay
> uninitialized forever. We don't need to resurrect failed devices.

Never mind, I see you fixed this in a later patch (it would have been
good to fix it already in this patch, but no big deal).

-- 
Tanu



[Index of Archives]     [Linux Audio Users]     [AMD Graphics]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux