client: Add unregister-characteristic command

This adds unregister-characteristic which can be used to unregister
characteristics registered with register-characteristic:

unregister-characteristic /org/bluez/app/service0xc80150/chrc0xc99960
[DEL] Characteristic
	/org/bluez/app/service0xc80150/chrc0xc99960
	00002a06-0000-1000-8000-00805f9b34fb
	Alert Level
This commit is contained in:
Luiz Augusto von Dentz 2017-06-27 14:01:40 +03:00
parent 68fa26fb80
commit 5dbe747450
3 changed files with 69 additions and 0 deletions

View File

@ -1233,3 +1233,44 @@ void gatt_register_chrc(DBusConnection *conn, GDBusProxy *proxy, wordexp_t *w)
rl_prompt_input(chrc->path, "Enter value:", chrc_set_value, chrc);
}
static struct chrc *chrc_find(const char *pattern)
{
GList *l, *lc;
struct service *service;
struct chrc *chrc;
for (l = local_services; l; l = g_list_next(l)) {
service = l->data;
for (lc = service->chrcs; lc; lc = g_list_next(lc)) {
chrc = lc->data;
/* match object path */
if (!strcmp(chrc->path, pattern))
return chrc;
/* match UUID */
if (!strcmp(chrc->uuid, pattern))
return chrc;
}
}
return NULL;
}
void gatt_unregister_chrc(DBusConnection *conn, GDBusProxy *proxy,
wordexp_t *w)
{
struct chrc *chrc;
chrc = chrc_find(w->we_wordv[0]);
if (!chrc) {
rl_printf("Failed to unregister characteristic object\n");
return;
}
chrc->service->chrcs = g_list_remove(chrc->service->chrcs, chrc);
chrc_unregister(chrc);
}

View File

@ -50,3 +50,5 @@ void gatt_unregister_service(DBusConnection *conn, GDBusProxy *proxy,
wordexp_t *w);
void gatt_register_chrc(DBusConnection *conn, GDBusProxy *proxy, wordexp_t *w);
void gatt_unregister_chrc(DBusConnection *conn, GDBusProxy *proxy,
wordexp_t *w);

View File

@ -1908,6 +1908,29 @@ done:
wordfree(&w);
}
static void cmd_unregister_characteristic(const char *arg)
{
wordexp_t w;
if (check_default_ctrl() == FALSE)
return;
if (wordexp(arg, &w, WRDE_NOCMD)) {
rl_printf("Invalid argument\n");
return;
}
if (w.we_wordc < 1) {
rl_printf("Missing arguments\n");
goto done;
}
gatt_unregister_chrc(dbus_conn, default_ctrl->proxy, &w);
done:
wordfree(&w);
}
static void cmd_version(const char *arg)
{
rl_printf("Version %s\n", VERSION);
@ -2217,6 +2240,9 @@ static const struct {
{ "register-characteristic", "<UUID> <Flags=read,write,notify...>",
cmd_register_characteristic,
"Register application characteristic" },
{ "unregister-characteristic", "<UUID/object>",
cmd_unregister_characteristic,
"Unregister application characteristic" },
{ "version", NULL, cmd_version, "Display version" },
{ "quit", NULL, cmd_quit, "Quit program" },
{ "exit", NULL, cmd_quit, "Quit program" },