OSDN Git Service

client: Add support to pass UUIDs to select-attribute
authorLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
Tue, 14 Mar 2017 11:09:06 +0000 (13:09 +0200)
committerLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
Wed, 15 Mar 2017 15:21:14 +0000 (17:21 +0200)
This adds support to match attributes by UUID instead of object path.

client/gatt.c
client/main.c

index 37f222d..f7a2f0c 100644 (file)
@@ -299,7 +299,7 @@ static GDBusProxy *select_proxy(const char *path, GList *source)
        return NULL;
 }
 
-GDBusProxy *gatt_select_attribute(const char *path)
+static GDBusProxy *select_attribute(const char *path)
 {
        GDBusProxy *proxy;
 
@@ -314,6 +314,50 @@ GDBusProxy *gatt_select_attribute(const char *path)
        return select_proxy(path, descriptors);
 }
 
+static GDBusProxy *select_proxy_by_uuid(const char *uuid, GList *source)
+{
+       GList *l;
+       const char *value;
+       DBusMessageIter iter;
+
+       for (l = source; l; l = g_list_next(l)) {
+               GDBusProxy *proxy = l->data;
+
+               if (g_dbus_proxy_get_property(proxy, "UUID", &iter) == FALSE)
+                       continue;
+
+               dbus_message_iter_get_basic(&iter, &value);
+
+               if (strcasecmp(uuid, value) == 0)
+                       return proxy;
+       }
+
+       return NULL;
+}
+
+static GDBusProxy *select_attribute_by_uuid(const char *uuid)
+{
+       GDBusProxy *proxy;
+
+       proxy = select_proxy_by_uuid(uuid, services);
+       if (proxy)
+               return proxy;
+
+       proxy = select_proxy_by_uuid(uuid, characteristics);
+       if (proxy)
+               return proxy;
+
+       return select_proxy_by_uuid(uuid, descriptors);
+}
+
+GDBusProxy *gatt_select_attribute(const char *arg)
+{
+       if (arg[0] == '/')
+               return select_attribute(arg);
+
+       return select_attribute_by_uuid(arg);
+}
+
 static char *attribute_generator(const char *text, int state, GList *source)
 {
        static int index, len;
index 82e366c..c33f8fe 100644 (file)
@@ -2130,9 +2130,9 @@ static const struct {
        { "list-attributes", "[dev]", cmd_list_attributes, "List attributes",
                                                        dev_generator },
        { "set-alias",    "<alias>",  cmd_set_alias, "Set device alias" },
-       { "select-attribute", "<attribute>",  cmd_select_attribute,
+       { "select-attribute", "<attribute/UUID>",  cmd_select_attribute,
                                "Select attribute", attribute_generator },
-       { "attribute-info", "[attribute]",  cmd_attribute_info,
+       { "attribute-info", "[attribute/UUID]",  cmd_attribute_info,
                                "Select attribute", attribute_generator },
        { "read",         NULL,       cmd_read, "Read attribute value" },
        { "write",        "<data=[xx xx ...]>", cmd_write,