return NULL;
}
-GDBusProxy *gatt_select_attribute(const char *path)
+static GDBusProxy *select_attribute(const char *path)
{
GDBusProxy *proxy;
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;
{ "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,