diff --git a/client/gatt.c b/client/gatt.c
index f7a2f0c..79bc7a3 100644
--- a/client/gatt.c
+++ b/client/gatt.c
return select_proxy(path, descriptors);
}
-static GDBusProxy *select_proxy_by_uuid(const char *uuid, GList *source)
+static GDBusProxy *select_proxy_by_uuid(GDBusProxy *parent, const char *uuid,
+ GList *source)
{
GList *l;
const char *value;
for (l = source; l; l = g_list_next(l)) {
GDBusProxy *proxy = l->data;
+ if (parent && !g_str_has_prefix(g_dbus_proxy_get_path(proxy),
+ g_dbus_proxy_get_path(parent)))
+ continue;
+
if (g_dbus_proxy_get_property(proxy, "UUID", &iter) == FALSE)
continue;
return NULL;
}
-static GDBusProxy *select_attribute_by_uuid(const char *uuid)
+static GDBusProxy *select_attribute_by_uuid(GDBusProxy *parent,
+ const char *uuid)
{
GDBusProxy *proxy;
- proxy = select_proxy_by_uuid(uuid, services);
+ proxy = select_proxy_by_uuid(parent, uuid, services);
if (proxy)
return proxy;
- proxy = select_proxy_by_uuid(uuid, characteristics);
+ proxy = select_proxy_by_uuid(parent, uuid, characteristics);
if (proxy)
return proxy;
- return select_proxy_by_uuid(uuid, descriptors);
+ return select_proxy_by_uuid(parent, uuid, descriptors);
}
-GDBusProxy *gatt_select_attribute(const char *arg)
+GDBusProxy *gatt_select_attribute(GDBusProxy *parent, const char *arg)
{
if (arg[0] == '/')
return select_attribute(arg);
- return select_attribute_by_uuid(arg);
+ if (parent) {
+ GDBusProxy *proxy = select_attribute_by_uuid(parent, arg);
+ if (proxy)
+ return proxy;
+ }
+
+ return select_attribute_by_uuid(parent, arg);
}
static char *attribute_generator(const char *text, int state, GList *source)
diff --git a/client/gatt.h b/client/gatt.h
index 689bb4d..7a91975 100644
--- a/client/gatt.h
+++ b/client/gatt.h
void gatt_remove_descriptor(GDBusProxy *proxy);
void gatt_list_attributes(const char *device);
-GDBusProxy *gatt_select_attribute(const char *path);
+GDBusProxy *gatt_select_attribute(GDBusProxy *parent, const char *path);
char *gatt_attribute_generator(const char *text, int state);
void gatt_read_attribute(GDBusProxy *proxy);
diff --git a/client/main.c b/client/main.c
index c33f8fe..8c9d5c3 100644
--- a/client/main.c
+++ b/client/main.c
return;
}
- proxy = gatt_select_attribute(arg);
+ proxy = gatt_select_attribute(default_attr, arg);
if (proxy)
set_default_attribute(proxy);
}
return NULL;
}
- proxy = gatt_select_attribute(arg);
+ proxy = gatt_select_attribute(default_attr, arg);
if (!proxy) {
rl_printf("Attribute %s not available\n", arg);
return NULL;