}
}
+static void list_descs(GList *descs)
+{
+ GList *l;
+
+ for (l = descs; l; l = g_list_next(l)) {
+ struct desc *desc = l->data;
+
+ print_desc(desc, NULL);
+ }
+}
+
+static void list_chrcs(GList *chrcs)
+{
+ GList *l;
+
+ for (l = chrcs; l; l = g_list_next(l)) {
+ struct chrc *chrc = l->data;
+
+ print_chrc(chrc, NULL);
+
+ list_descs(chrc->descs);
+ }
+}
+
+static void list_services(void)
+{
+ GList *l;
+
+ for (l = local_services; l; l = g_list_next(l)) {
+ struct service *service = l->data;
+
+ print_service(service, NULL);
+
+ list_chrcs(service->chrcs);
+ }
+}
+
void gatt_list_attributes(const char *path)
{
+ if (path && !strcmp(path, "local")) {
+ list_services();
+ return bt_shell_noninteractive_quit(EXIT_SUCCESS);
+ }
+
list_attributes(path, services);
return bt_shell_noninteractive_quit(EXIT_SUCCESS);
}
static void cmd_list_attributes(int argc, char *argv[])
{
GDBusProxy *proxy;
+ const char *path;
+
+ if (argc > 1 && !strcmp(argv[1], "local")) {
+ path = argv[1];
+ goto done;
+ }
proxy = find_device(argc, argv);
if (!proxy)
return bt_shell_noninteractive_quit(EXIT_FAILURE);
- gatt_list_attributes(g_dbus_proxy_get_path(proxy));
+ path = g_dbus_proxy_get_path(proxy);
+
+done:
+ gatt_list_attributes(path);
return bt_shell_noninteractive_quit(EXIT_SUCCESS);
}
.name = "gatt",
.desc = "Generic Attribute Submenu",
.entries = {
- { "list-attributes", "[dev]", cmd_list_attributes, "List attributes",
- dev_generator },
+ { "list-attributes", "[dev/local]", cmd_list_attributes,
+ "List attributes", dev_generator },
{ "select-attribute", "<attribute/UUID>", cmd_select_attribute,
"Select attribute", attribute_generator },
{ "attribute-info", "[attribute/UUID]", cmd_attribute_info,