client: Enable list-attributes to print local attributes

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
This commit is contained in:
Luiz Augusto von Dentz 2019-01-29 16:20:41 +02:00
parent 918f6f932b
commit d5cb29ce5a
2 changed files with 54 additions and 3 deletions

View File

@ -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);
}

View File

@ -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,