From: Luiz Augusto von Dentz <luiz.von.dentz@xxxxxxxxx> This enable passing "local" to list-attributes to print the attributes registered locally: > list-attributes local Primary Service (Handle 0x0400) /org/bluez/app/service0x74ccb0 0x1820 Internet Protocol Support --- client/gatt.c | 42 ++++++++++++++++++++++++++++++++++++++++++ client/main.c | 15 ++++++++++++--- 2 files changed, 54 insertions(+), 3 deletions(-) diff --git a/client/gatt.c b/client/gatt.c index 42fe795d7..8e06e793f 100644 --- a/client/gatt.c +++ b/client/gatt.c @@ -414,8 +414,50 @@ static void list_attributes(const char *path, GList *source) } } +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); } diff --git a/client/main.c b/client/main.c index 07c8ec008..16433f96d 100644 --- a/client/main.c +++ b/client/main.c @@ -1905,12 +1905,21 @@ static void cmd_disconn(int argc, char *argv[]) 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); } @@ -2596,8 +2605,8 @@ static const struct bt_shell_menu gatt_menu = { .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, -- 2.17.2