* [PATCH Bluez] client/gatt : Add support for Included Service
[not found] <CGME20180413085416epcas2p4708d940b4466a3f390d847a14058588b@epcas2p4.samsung.com>
@ 2018-04-13 8:53 ` Avichal Agarwal
[not found] ` <CGME20180413085416epcas2p4708d940b4466a3f390d847a14058588b@epcms5p3>
0 siblings, 1 reply; 3+ messages in thread
From: Avichal Agarwal @ 2018-04-13 8:53 UTC (permalink / raw)
To: linux-bluetooth; +Cc: sachin.dev, anupam.r, Avichal Agarwal
included service support implemented at service registration
---
client/gatt.c | 147 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
client/gatt.h | 5 ++
client/main.c | 20 ++++++++
3 files changed, 172 insertions(+)
diff --git a/client/gatt.c b/client/gatt.c
index 80c1243..b762b4f 100644
--- a/client/gatt.c
+++ b/client/gatt.c
@@ -85,6 +85,7 @@ struct service {
char *uuid;
bool primary;
GList *chrcs;
+ GList *inc;
};
static GList *local_services;
@@ -127,6 +128,29 @@ static void print_service(struct service *service, const char *description)
service->path, service->uuid, text);
}
+static void print_inc_service(struct service *service, const char *description)
+{
+ const char *text;
+
+ text = bt_uuidstr_to_str(service->uuid);
+ if (!text)
+ bt_shell_printf("%s%s%s%s Included Service\n\t%s\n\t%s\n",
+ description ? "[" : "",
+ description ? : "",
+ description ? "] " : "",
+ service->primary ? "Primary" :
+ "Secondary",
+ service->path, service->uuid);
+ else
+ bt_shell_printf("%s%s%s%s Included Service\n\t%s\n\t%s\n\t%s\n",
+ description ? "[" : "",
+ description ? : "",
+ description ? "] " : "",
+ service->primary ? "Primary" :
+ "Secondary",
+ service->path, service->uuid, text);
+}
+
static void print_service_proxy(GDBusProxy *proxy, const char *description)
{
struct service service;
@@ -1153,11 +1177,19 @@ static void chrc_unregister(void *data)
CHRC_INTERFACE);
}
+static void inc_unregister(void *data)
+{
+ char *path = data;
+
+ g_free(path);
+}
+
static void service_free(void *data)
{
struct service *service = data;
g_list_free_full(service->chrcs, chrc_unregister);
+ g_list_free_full(service->inc, inc_unregister);
g_free(service->path);
g_free(service->uuid);
g_free(service);
@@ -1186,9 +1218,53 @@ static gboolean service_get_primary(const GDBusPropertyTable *property,
return TRUE;
}
+
+static gboolean service_get_includes(const GDBusPropertyTable *property,
+ DBusMessageIter *iter, void *data)
+{
+ DBusMessageIter array;
+ struct service *service = data;
+ char *inc = NULL;
+ GList *l;
+
+ if (service->inc) {
+ for (l = service->inc ; l; l = g_list_next(l)) {
+
+ inc = l->data;
+ dbus_message_iter_open_container(iter, DBUS_TYPE_ARRAY,
+ DBUS_TYPE_OBJECT_PATH_AS_STRING, &array);
+
+ dbus_message_iter_append_basic(&array, DBUS_TYPE_OBJECT_PATH,
+ &inc);
+
+ }
+
+ dbus_message_iter_close_container(iter, &array);
+
+ return TRUE;
+ }
+
+ return FALSE;
+
+}
+
+static gboolean service_exist_includes(const GDBusPropertyTable *property,
+ void *data)
+{
+ struct service *service = data;
+
+ if (service->inc)
+ return TRUE;
+ else
+ return FALSE;
+
+}
+
+
static const GDBusPropertyTable service_properties[] = {
{ "UUID", "s", service_get_uuid },
{ "Primary", "b", service_get_primary },
+ { "Includes", "ao", service_get_includes, NULL, service_exist_includes },
{ }
};
@@ -1280,6 +1356,77 @@ void gatt_unregister_service(DBusConnection *conn, GDBusProxy *proxy,
return bt_shell_noninteractive_quit(EXIT_SUCCESS);
}
+static char *inc_find(struct service *serv, char *path)
+{
+ GList *lc;
+
+ for (lc = serv->inc; lc; lc = g_list_next(lc)) {
+ char *incp = lc->data;
+ /* match object path */
+ if (!strcmp(incp, path))
+ return incp;
+ }
+
+ return NULL;
+}
+
+void gatt_register_include(DBusConnection *conn, GDBusProxy *proxy,
+ int argc, char *argv[])
+{
+ struct service *service, *inc_service;
+ char *inc_path;
+
+ if (!local_services) {
+ bt_shell_printf("No service registered\n");
+ return bt_shell_noninteractive_quit(EXIT_FAILURE);
+ }
+
+ service = g_list_last(local_services)->data;
+
+
+ inc_service = service_find(argv[1]);
+ if (!inc_service) {
+ bt_shell_printf("Failed to find service object\n");
+ return bt_shell_noninteractive_quit(EXIT_FAILURE);
+ }
+
+ inc_path = g_strdup(service->path);
+
+ inc_service->inc = g_list_append(inc_service->inc, inc_path);
+
+ print_service(inc_service, COLORED_NEW);
+ print_inc_service(service, COLORED_NEW);
+
+ return bt_shell_noninteractive_quit(EXIT_SUCCESS);
+}
+
+void gatt_unregister_include(DBusConnection *conn, GDBusProxy *proxy,
+ int argc, char *argv[])
+{
+ struct service *ser_inc, *service;
+ char *path = NULL;
+
+ service = service_find(argv[1]);
+ if (!service) {
+ bt_shell_printf("Failed to unregister include service object\n");
+ return bt_shell_noninteractive_quit(EXIT_FAILURE);
+ }
+
+ ser_inc = service_find(argv[2]);
+ if (!ser_inc) {
+ bt_shell_printf("Failed to find include service object\n");
+ return bt_shell_noninteractive_quit(EXIT_FAILURE);
+ }
+
+ path = inc_find(service, ser_inc->path);
+ if (path) {
+ service->inc = g_list_remove(service->inc, path);
+ inc_unregister(path);
+ }
+
+ return bt_shell_noninteractive_quit(EXIT_SUCCESS);
+}
+
static gboolean chrc_get_uuid(const GDBusPropertyTable *property,
DBusMessageIter *iter, void *data)
{
diff --git a/client/gatt.h b/client/gatt.h
index f4c36b8..d169552 100644
--- a/client/gatt.h
+++ b/client/gatt.h
@@ -65,3 +65,8 @@ void gatt_register_desc(DBusConnection *conn, GDBusProxy *proxy,
int argc, char *argv[]);
void gatt_unregister_desc(DBusConnection *conn, GDBusProxy *proxy,
int argc, char *argv[]);
+
+void gatt_register_include(DBusConnection *conn, GDBusProxy *proxy,
+ int argc, char *argv[]);
+void gatt_unregister_include(DBusConnection *conn, GDBusProxy *proxy,
+ int argc, char *argv[]);
diff --git a/client/main.c b/client/main.c
index b96278d..9d0220d 100644
--- a/client/main.c
+++ b/client/main.c
@@ -2000,6 +2000,22 @@ static void cmd_register_service(int argc, char *argv[])
gatt_register_service(dbus_conn, default_ctrl->proxy, argc, argv);
}
+static void cmd_register_includes(int argc, char *argv[])
+{
+ if (check_default_ctrl() == FALSE)
+ return bt_shell_noninteractive_quit(EXIT_FAILURE);
+
+ gatt_register_include(dbus_conn, default_ctrl->proxy, argc, argv);
+}
+
+static void cmd_unregister_includes(int argc, char *argv[])
+{
+ if (check_default_ctrl() == FALSE)
+ return bt_shell_noninteractive_quit(EXIT_FAILURE);
+
+ gatt_unregister_include(dbus_conn, default_ctrl->proxy, argc, argv);
+}
+
static void cmd_unregister_service(int argc, char *argv[])
{
if (check_default_ctrl() == FALSE)
@@ -2436,6 +2452,10 @@ static const struct bt_shell_menu gatt_menu = {
"Register application service." },
{ "unregister-service", "<UUID/object>", cmd_unregister_service,
"Unregister application service" },
+ { "register-includes", "<UUID>", cmd_register_includes,
+ "Register as Included service in." },
+ { "unregister-includes", "<Service-UUID><Inc-UUID>", cmd_unregister_includes,
+ "Unregister Included service." },
{ "register-characteristic", "<UUID> <Flags=read,write,notify...> "
"[authorize]", cmd_register_characteristic,
"Register application characteristic" },
--
2.7.4
^ permalink raw reply related [flat|nested] 3+ messages in thread
* RE: [PATCH Bluez] client/gatt : Add support for Included Service
[not found] ` <CGME20180413085416epcas2p4708d940b4466a3f390d847a14058588b@epcms5p3>
@ 2018-05-15 14:20 ` Avichal Agarwal
2018-05-16 7:22 ` Luiz Augusto von Dentz
0 siblings, 1 reply; 3+ messages in thread
From: Avichal Agarwal @ 2018-05-15 14:20 UTC (permalink / raw)
To: linux-bluetooth@vger.kernel.org
=C2=A0=0D=0A=C2=A0=0D=0A=0D=0Aping=0D=0A=C2=A0=0D=0A-----Original=C2=A0Mess=
age-----=0D=0AFrom:=C2=A0linux-bluetooth-owner=40vger.kernel.org=C2=A0=5Bma=
ilto:linux-bluetooth-owner=40vger.kernel.org=5D=C2=A0On=C2=A0Behalf=C2=A0Of=
=C2=A0Avichal=C2=A0Agarwal=0D=0ASent:=C2=A0Friday,=C2=A0April=C2=A013,=C2=
=A02018=C2=A02:23=C2=A0PM=0D=0ATo:=C2=A0linux-bluetooth=40vger.kernel.org=
=0D=0ACc:=C2=A0sachin.dev=40samsung.com;=C2=A0anupam.r=40samsung.com;=C2=A0=
Avichal=C2=A0Agarwal=0D=0ASubject:=C2=A0=5BPATCH=C2=A0Bluez=5D=C2=A0client/=
gatt=C2=A0:=C2=A0Add=C2=A0support=C2=A0for=C2=A0Included=C2=A0Service=0D=0A=
=C2=A0=0D=0Aincluded=C2=A0service=C2=A0support=C2=A0implemented=C2=A0at=C2=
=A0service=C2=A0registration=0D=0A---=0D=0A=C2=A0client/gatt.c=C2=A0=7C=C2=
=A0147=C2=A0++++++++++++++++++++++++++++++++++++++++++++++++++++++++++=0D=
=0A=C2=A0client/gatt.h=C2=A0=7C=C2=A0=C2=A0=C2=A05=C2=A0++=0D=0A=C2=A0clien=
t/main.c=C2=A0=7C=C2=A0=C2=A020=C2=A0++++++++=0D=0A=C2=A03=C2=A0files=C2=A0=
changed,=C2=A0172=C2=A0insertions(+)=0D=0A=C2=A0=0D=0Adiff=C2=A0--git=C2=A0=
a/client/gatt.c=C2=A0b/client/gatt.c=C2=A0index=C2=A080c1243..b762b4f=C2=A0=
100644=0D=0A---=C2=A0a/client/gatt.c=0D=0A+++=C2=A0b/client/gatt.c=0D=0A=40=
=40=C2=A0-85,6=C2=A0+85,7=C2=A0=40=40=C2=A0struct=C2=A0service=C2=A0=7B=0D=
=0A=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0char=C2=A0*uuid;=
=0D=0A=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0bool=C2=A0prima=
ry;=0D=0A=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0GList=C2=A0*=
chrcs;=0D=0A+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0GList=C2=A0*in=
c;=0D=0A=C2=A0=7D;=0D=0A=C2=A0=0D=0A=C2=A0static=C2=A0GList=C2=A0*local_ser=
vices;=0D=0A=40=40=C2=A0-127,6=C2=A0+128,29=C2=A0=40=40=C2=A0static=C2=A0vo=
id=C2=A0print_service(struct=C2=A0service=C2=A0*service,=C2=A0const=C2=A0ch=
ar=C2=A0*description)=0D=0A=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0service->path,=C2=A0service=
->uuid,=C2=A0text);=C2=A0=C2=A0=7D=0D=0A=C2=A0=0D=0A+static=C2=A0void=C2=A0=
print_inc_service(struct=C2=A0service=C2=A0*service,=C2=A0const=C2=A0char=
=C2=A0=0D=0A+*description)=C2=A0=7B=0D=0A+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0const=C2=A0char=C2=A0*text;=0D=0A+=0D=0A+=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0text=C2=A0=3D=C2=A0bt_uuidstr_to_str(service-=
>uuid);=0D=0A+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0if=C2=A0(=21t=
ext)=0D=0A+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0bt_shell_printf(=22%s%s%s%s=C2=A0Included=
=C2=A0Service=5Cn=5Ct%s=5Cn=5Ct%s=5Cn=22,=0D=0A+=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0description=
=C2=A0?=C2=A0=22=5B=22=C2=A0:=C2=A0=22=22,=0D=0A+=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0descripti=
on=C2=A0?=C2=A0:=C2=A0=22=22,=0D=0A+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0description=C2=A0?=C2=A0=
=22=5D=C2=A0=22=C2=A0:=C2=A0=22=22,=0D=0A+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0service->primary=
=C2=A0?=C2=A0=22Primary=22=C2=A0:=0D=0A+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=22Secondary=22,=
=0D=0A+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0service->path,=C2=A0service->uuid);=0D=0A+=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0else=0D=0A+=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0bt_=
shell_printf(=22%s%s%s%s=C2=A0Included=C2=A0Service=5Cn=5Ct%s=5Cn=5Ct%s=5Cn=
=5Ct%s=5Cn=22,=0D=0A+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0description=C2=A0?=C2=A0=22=5B=22=C2=A0=
:=C2=A0=22=22,=0D=0A+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0description=C2=A0?=C2=A0:=C2=A0=22=22,=
=0D=0A+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0description=C2=A0?=C2=A0=22=5D=C2=A0=22=C2=A0:=C2=
=A0=22=22,=0D=0A+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0service->primary=C2=A0?=C2=A0=22Primary=22=
=C2=A0:=0D=0A+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=22Secondary=22,=0D=0A+=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0servic=
e->path,=C2=A0service->uuid,=C2=A0text);=C2=A0=7D=0D=0A+=0D=0A=C2=A0static=
=C2=A0void=C2=A0print_service_proxy(GDBusProxy=C2=A0*proxy,=C2=A0const=C2=
=A0char=C2=A0*description)=C2=A0=C2=A0=7B=0D=0A=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0struct=C2=A0service=C2=A0service;=0D=0A=40=40=C2=
=A0-1153,11=C2=A0+1177,19=C2=A0=40=40=C2=A0static=C2=A0void=C2=A0chrc_unreg=
ister(void=C2=A0*data)=0D=0A=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0CHRC_INTERFACE);=0D=0A=C2=A0=7D=0D=0A=C2=A0=0D=0A+s=
tatic=C2=A0void=C2=A0inc_unregister(void=C2=A0*data)=0D=0A+=7B=0D=0A+=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0char=C2=A0*path=C2=A0=3D=C2=A0dat=
a;=0D=0A+=0D=0A+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0g_free(path=
);=0D=0A+=7D=0D=0A+=0D=0A=C2=A0static=C2=A0void=C2=A0service_free(void=C2=
=A0*data)=0D=0A=C2=A0=7B=0D=0A=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0struct=C2=A0service=C2=A0*service=C2=A0=3D=C2=A0data;=0D=0A=C2=A0=
=0D=0A=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0g_list_free_ful=
l(service->chrcs,=C2=A0chrc_unregister);=0D=0A+=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0g_list_free_full(service->inc,=C2=A0inc_unregister);=
=0D=0A=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0g_free(service-=
>path);=0D=0A=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0g_free(s=
ervice->uuid);=0D=0A=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0g=
_free(service);=0D=0A=40=40=C2=A0-1186,9=C2=A0+1218,53=C2=A0=40=40=C2=A0sta=
tic=C2=A0gboolean=C2=A0service_get_primary(const=C2=A0GDBusPropertyTable=C2=
=A0*property,=0D=0A=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0re=
turn=C2=A0TRUE;=0D=0A=C2=A0=7D=0D=0A=C2=A0=0D=0A+=0D=0A+static=C2=A0gboolea=
n=C2=A0service_get_includes(const=C2=A0GDBusPropertyTable=C2=A0*property,=
=0D=0A+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0DBusMessageIter=C2=A0*iter,=C2=A0void=C2=A0*data)=
=C2=A0=7B=0D=0A+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0DBusMessage=
Iter=C2=A0array;=0D=0A+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0stru=
ct=C2=A0service=C2=A0*service=C2=A0=3D=C2=A0data;=0D=0A+=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0char=C2=A0*inc=C2=A0=C2=A0=3D=C2=A0NULL;=0D=
=0A+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0GList=C2=A0*l;=0D=0A+=
=0D=0A+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0if=C2=A0(service->in=
c)=C2=A0=7B=0D=0A+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0for=C2=A0(l=C2=A0=3D=C2=A0=C2=A0serv=
ice->inc=C2=A0;=C2=A0l;=C2=A0l=C2=A0=3D=C2=A0g_list_next(l))=C2=A0=7B=0D=0A=
+=0D=0A+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0inc=C2=A0=3D=C2=A0l->data;=0D=0A+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0dbus_message_iter_open_container(iter,=C2=A0D=
BUS_TYPE_ARRAY,=0D=0A+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0DBUS_TYPE_OBJECT_PATH_AS_STRING,=C2=A0&array);=0D=0A+=0D=0A+=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0dbus_mess=
age_iter_append_basic(&array,=C2=A0DBUS_TYPE_OBJECT_PATH,=0D=0A+=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0&inc);=0D=0A+=0D=0A+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=7D=0D=0A+=
=0D=0A+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0dbus_message_iter_close_container(iter,=C2=A0=
&array);=0D=0A+=0D=0A+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0return=C2=A0TRUE;=0D=0A+=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=7D=0D=0A+=0D=0A+=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0return=C2=A0FALSE;=0D=0A+=0D=0A+=7D=0D=0A+=
=0D=0A+static=C2=A0gboolean=C2=A0service_exist_includes(const=C2=A0GDBusPro=
pertyTable=C2=A0*property,=0D=0A+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0void=
=C2=A0*data)=0D=0A+=7B=0D=0A+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0struct=C2=A0service=C2=A0*service=C2=A0=3D=C2=A0data;=0D=0A+=0D=0A+=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0if=C2=A0(service->inc)=0D=0A+=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0return=C2=A0TRUE;=0D=0A+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0else=0D=0A+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0return=C2=A0FALSE;=0D=0A=
+=0D=0A+=7D=0D=0A+=0D=0A+=0D=0A=C2=A0static=C2=A0const=C2=A0GDBusPropertyTa=
ble=C2=A0service_properties=5B=5D=C2=A0=3D=C2=A0=7B=0D=0A=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=7B=C2=A0=22UUID=22,=C2=A0=22s=22,=C2=
=A0service_get_uuid=C2=A0=7D,=0D=0A=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=7B=C2=A0=22Primary=22,=C2=A0=22b=22,=C2=A0service_get_prima=
ry=C2=A0=7D,=0D=0A+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=7B=C2=
=A0=22Includes=22,=C2=A0=22ao=22,=C2=A0service_get_includes,=C2=A0NULL,=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0service_exist_includes=C2=A0=
=7D,=0D=0A=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=7B=C2=A0=
=7D=0D=0A=C2=A0=7D;=0D=0A=C2=A0=0D=0A=40=40=C2=A0-1280,6=C2=A0+1356,77=C2=
=A0=40=40=C2=A0void=C2=A0gatt_unregister_service(DBusConnection=C2=A0*conn,=
=C2=A0GDBusProxy=C2=A0*proxy,=0D=0A=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0return=C2=A0bt_shell_noninteractive_quit(EXIT_SUCCESS);=0D=
=0A=C2=A0=7D=0D=0A=C2=A0=0D=0A+static=C2=A0char=C2=A0*inc_find(struct=C2=A0=
service=C2=A0=C2=A0*serv,=C2=A0char=C2=A0*path)=C2=A0=7B=0D=0A+=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0GList=C2=A0*lc;=0D=0A+=0D=0A+=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0for=C2=A0(lc=C2=A0=3D=C2=A0serv->inc=
;=C2=A0lc;=C2=A0lc=C2=A0=3D=C2=A0=C2=A0g_list_next(lc))=C2=A0=7B=0D=0A+=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0char=C2=A0*incp=C2=A0=3D=C2=A0lc->data;=0D=0A+=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0/*=C2=A0match=C2=A0object=C2=A0path=C2=A0*/=0D=0A+=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0if=C2=A0(=21strcmp(incp,=C2=A0path))=0D=0A+=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0return=C2=A0incp;=0D=0A+=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=7D=0D=0A+=0D=0A+=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0return=C2=A0NULL;=0D=0A+=7D=0D=0A+=0D=
=0A+void=C2=A0gatt_register_include(DBusConnection=C2=A0*conn,=C2=A0GDBusPr=
oxy=C2=A0*proxy,=0D=0A+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0int=C2=A0argc,=C2=A0char=C2=A0*argv=
=5B=5D)=0D=0A+=7B=0D=0A+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0str=
uct=C2=A0service=C2=A0*service,=C2=A0*inc_service;=0D=0A+=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0char=C2=A0*inc_path;=0D=0A+=0D=0A+=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0if=C2=A0(=21local_services)=C2=A0=7B=
=0D=0A+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0bt_shell_printf(=22No=C2=A0service=C2=A0regis=
tered=5Cn=22);=0D=0A+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0return=C2=A0bt_shell_noninteracti=
ve_quit(EXIT_FAILURE);=0D=0A+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=7D=0D=0A+=0D=0A+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0service=
=C2=A0=3D=C2=A0g_list_last(local_services)->data;=0D=0A+=0D=0A+=0D=0A+=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0inc_service=C2=A0=3D=C2=A0serv=
ice_find(argv=5B1=5D);=0D=0A+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0if=C2=A0(=21inc_service)=C2=A0=7B=0D=0A+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0bt_shell_=
printf(=22Failed=C2=A0to=C2=A0find=C2=A0=C2=A0service=C2=A0object=5Cn=22);=
=0D=0A+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0return=C2=A0bt_shell_noninteractive_quit(EXIT=
_FAILURE);=0D=0A+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=7D=0D=0A+=
=0D=0A+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0inc_path=C2=A0=3D=C2=
=A0g_strdup(service->path);=0D=0A+=0D=0A+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0inc_service->inc=C2=A0=3D=C2=A0g_list_append(inc_service->in=
c,=C2=A0inc_path);=0D=0A+=0D=0A+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0print_service(inc_service,=C2=A0COLORED_NEW);=0D=0A+=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0print_inc_service(service,=C2=A0COLORED_NE=
W);=0D=0A+=0D=0A+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0return=C2=
=A0bt_shell_noninteractive_quit(EXIT_SUCCESS);=0D=0A+=7D=0D=0A+=0D=0A+void=
=C2=A0gatt_unregister_include(DBusConnection=C2=A0*conn,=C2=A0GDBusProxy=C2=
=A0*proxy,=0D=0A+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0int=C2=A0argc,=C2=A0char=C2=A0*argv=5B=5D)=0D=0A+=7B=0D=0A+=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0struct=C2=A0service=C2=A0*ser_inc,=
=C2=A0*service;=0D=0A+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0char=
=C2=A0*path=C2=A0=3D=C2=A0NULL;=0D=0A+=0D=0A+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0service=C2=A0=3D=C2=A0service_find(argv=5B1=5D);=0D=0A+=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0if=C2=A0(=21service)=C2=A0=
=7B=0D=0A+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0bt_shell_printf(=22Failed=C2=A0to=C2=A0unr=
egister=C2=A0include=C2=A0service=C2=A0object=5Cn=22);=0D=0A+=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0return=C2=A0bt_shell_noninteractive_quit(EXIT_FAILURE);=0D=0A+=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=7D=0D=0A+=0D=0A+=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0ser_inc=C2=A0=3D=C2=A0service_find(argv=
=5B2=5D);=0D=0A+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0if=C2=A0(=
=21ser_inc)=C2=A0=7B=0D=0A+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0bt_shell_printf(=22Failed=
=C2=A0to=C2=A0find=C2=A0=C2=A0include=C2=A0service=C2=A0object=5Cn=22);=0D=
=0A+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0return=C2=A0bt_shell_noninteractive_quit(EXIT_FA=
ILURE);=0D=0A+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=7D=0D=0A+=0D=
=0A+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0path=C2=A0=3D=C2=A0inc_=
find(service,=C2=A0ser_inc->path);=0D=0A+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0if=C2=A0(path)=C2=A0=7B=0D=0A+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0service->=
inc=C2=A0=3D=C2=A0g_list_remove(service->inc,=C2=A0path);=0D=0A+=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0inc_unregister(path);=0D=0A+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=7D=0D=0A+=0D=0A+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0return=C2=A0bt_shell_noninteractive_quit(EXIT_SUCCESS);=0D=0A+=7D=0D=
=0A+=0D=0A=C2=A0static=C2=A0gboolean=C2=A0chrc_get_uuid(const=C2=A0GDBusPro=
pertyTable=C2=A0*property,=0D=0A=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0DBusMessageIter=C2=A0=
*iter,=C2=A0void=C2=A0*data)=C2=A0=C2=A0=7B=C2=A0diff=C2=A0--git=C2=A0a/cli=
ent/gatt.h=C2=A0b/client/gatt.h=C2=A0index=C2=A0f4c36b8..d169552=C2=A010064=
4=0D=0A---=C2=A0a/client/gatt.h=0D=0A+++=C2=A0b/client/gatt.h=0D=0A=40=40=
=C2=A0-65,3=C2=A0+65,8=C2=A0=40=40=C2=A0void=C2=A0gatt_register_desc(DBusCo=
nnection=C2=A0*conn,=C2=A0GDBusProxy=C2=A0*proxy,=0D=0A=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0int=C2=A0argc,=C2=A0char=
=C2=A0*argv=5B=5D);=0D=0A=C2=A0void=C2=A0gatt_unregister_desc(DBusConnectio=
n=C2=A0*conn,=C2=A0GDBusProxy=C2=A0*proxy,=0D=0A=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0int=C2=A0argc,=C2=A0char=C2=A0*ar=
gv=5B=5D);=0D=0A+=0D=0A+void=C2=A0gatt_register_include(DBusConnection=C2=
=A0*conn,=C2=A0GDBusProxy=C2=A0*proxy,=0D=0A+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0int=C2=A0argc,=
=C2=A0char=C2=A0*argv=5B=5D);=0D=0A+void=C2=A0gatt_unregister_include(DBusC=
onnection=C2=A0*conn,=C2=A0GDBusProxy=C2=A0*proxy,=0D=0A+=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0int=C2=A0argc,=C2=A0char=C2=A0=
*argv=5B=5D);=0D=0Adiff=C2=A0--git=C2=A0a/client/main.c=C2=A0b/client/main.=
c=C2=A0index=C2=A0b96278d..9d0220d=C2=A0100644=0D=0A---=C2=A0a/client/main.=
c=0D=0A+++=C2=A0b/client/main.c=0D=0A=40=40=C2=A0-2000,6=C2=A0+2000,22=C2=
=A0=40=40=C2=A0static=C2=A0void=C2=A0cmd_register_service(int=C2=A0argc,=C2=
=A0char=C2=A0*argv=5B=5D)=0D=0A=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0gatt_register_service(dbus_conn,=C2=A0default_ctrl->proxy,=C2=
=A0argc,=C2=A0argv);=C2=A0=C2=A0=7D=0D=0A=C2=A0=0D=0A+static=C2=A0void=C2=
=A0cmd_register_includes(int=C2=A0argc,=C2=A0char=C2=A0*argv=5B=5D)=C2=A0=
=7B=0D=0A+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0if=C2=A0(check_de=
fault_ctrl()=C2=A0=3D=3D=C2=A0FALSE)=0D=0A+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0return=C2=
=A0bt_shell_noninteractive_quit(EXIT_FAILURE);=0D=0A+=0D=0A+=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0gatt_register_include(dbus_conn,=C2=A0defa=
ult_ctrl->proxy,=C2=A0argc,=C2=A0argv);=C2=A0=7D=0D=0A+=0D=0A+static=C2=A0v=
oid=C2=A0cmd_unregister_includes(int=C2=A0argc,=C2=A0char=C2=A0*argv=5B=5D)=
=C2=A0=7B=0D=0A+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0if=C2=A0(ch=
eck_default_ctrl()=C2=A0=3D=3D=C2=A0FALSE)=0D=0A+=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0ret=
urn=C2=A0bt_shell_noninteractive_quit(EXIT_FAILURE);=0D=0A+=0D=0A+=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0gatt_unregister_include(dbus_conn,=
=C2=A0default_ctrl->proxy,=C2=A0argc,=C2=A0argv);=C2=A0=7D=0D=0A+=0D=0A=C2=
=A0static=C2=A0void=C2=A0cmd_unregister_service(int=C2=A0argc,=C2=A0char=C2=
=A0*argv=5B=5D)=C2=A0=C2=A0=7B=0D=0A=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0if=C2=A0(check_default_ctrl()=C2=A0=3D=3D=C2=A0FALSE)=0D=0A=
=40=40=C2=A0-2436,6=C2=A0+2452,10=C2=A0=40=40=C2=A0static=C2=A0const=C2=A0s=
truct=C2=A0bt_shell_menu=C2=A0gatt_menu=C2=A0=3D=C2=A0=7B=0D=0A=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=22Register=C2=A0application=C2=A0service.=22=C2=A0=C2=A0=7D,=0D=
=0A=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=7B=C2=A0=22unregi=
ster-service=22,=C2=A0=22<UUID/object>=22,=C2=A0cmd_unregister_service,=0D=
=0A=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=22Unregister=C2=A0application=C2=A0service=22=C2=
=A0=7D,=0D=0A+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=7B=C2=A0=22r=
egister-includes=22,=C2=A0=22<UUID>=22,=C2=A0cmd_register_includes,=0D=0A+=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=22Register=C2=A0as=C2=A0Included=C2=A0service=C2=A0in.=22=
=C2=A0=7D,=0D=0A+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=7B=C2=A0=
=22unregister-includes=22,=C2=A0=22<Service-UUID><Inc-UUID>=22,=C2=A0cmd_un=
register_includes,=0D=0A+=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=22Unregister=C2=A0Included=C2=A0service.=22=C2=A0=7D,=0D=0A=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=7B=C2=A0=22register-=
characteristic=22,=C2=A0=22<UUID>=C2=A0<Flags=3Dread,write,notify...>=C2=A0=
=22=0D=0A=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=22=5Bauthorize=5D=
=22,=C2=A0cmd_register_characteristic,=0D=0A=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=22Register=C2=A0application=C2=A0characteristic=22=C2=A0=
=7D,=0D=0A--=0D=0A2.7.4=0D=0A=C2=A0=0D=0A--=0D=0ATo=C2=A0unsubscribe=C2=A0f=
rom=C2=A0this=C2=A0list:=C2=A0send=C2=A0the=C2=A0line=C2=A0=22unsubscribe=
=C2=A0linux-bluetooth=22=C2=A0in=C2=A0the=C2=A0body=C2=A0of=C2=A0a=C2=A0mes=
sage=C2=A0to=C2=A0majordomo=40vger.kernel.org=C2=A0More=C2=A0majordomo=C2=
=A0info=C2=A0at=C2=A0=C2=A0http://vger.kernel.org/majordomo-info.html=0D=0A=
=C2=A0=0D=0A=C2=A0=0D=0A=C2=A0=0D=0A=C2=A0=0D=0A=0D=0ARegards=0D=0AAvichal=
=20Agarwal=0D=0A=C2=A0
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH Bluez] client/gatt : Add support for Included Service
2018-05-15 14:20 ` Avichal Agarwal
@ 2018-05-16 7:22 ` Luiz Augusto von Dentz
0 siblings, 0 replies; 3+ messages in thread
From: Luiz Augusto von Dentz @ 2018-05-16 7:22 UTC (permalink / raw)
To: avichal; +Cc: linux-bluetooth@vger.kernel.org
Hi,
On Tue, May 15, 2018 at 8:39 PM Avichal Agarwal <avichal.a@samsung.com>
wrote:
> ping
> -----Original Message-----
> From: linux-bluetooth-owner@vger.kernel.org [mailto:
linux-bluetooth-owner@vger.kernel.org] On Behalf Of Avichal Agarwal
> Sent: Friday, April 13, 2018 2:23 PM
> To: linux-bluetooth@vger.kernel.org
> Cc: sachin.dev@samsung.com; anupam.r@samsung.com; Avichal Agarwal
> Subject: [PATCH Bluez] client/gatt : Add support for Included Service
> included service support implemented at service registration
> ---
> client/gatt.c | 147
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> client/gatt.h | 5 ++
> client/main.c | 20 ++++++++
> 3 files changed, 172 insertions(+)
> diff --git a/client/gatt.c b/client/gatt.c index 80c1243..b762b4f 100644
> --- a/client/gatt.c
> +++ b/client/gatt.c
> @@ -85,6 +85,7 @@ struct service {
> char *uuid;
> bool primary;
> GList *chrcs;
> + GList *inc;
> };
> static GList *local_services;
> @@ -127,6 +128,29 @@ static void print_service(struct service *service,
const char *description)
> service->path, service->uuid,
text); }
> +static void print_inc_service(struct service *service, const char
> +*description) {
> + const char *text;
> +
> + text = bt_uuidstr_to_str(service->uuid);
> + if (!text)
> + bt_shell_printf("%s%s%s%s Included
Service\n\t%s\n\t%s\n",
> + description ? "[" : "",
> + description ? : "",
> + description ? "] " : "",
> + service->primary ? "Primary" :
> + "Secondary",
> + service->path, service->uuid);
> + else
> + bt_shell_printf("%s%s%s%s Included
Service\n\t%s\n\t%s\n\t%s\n",
> + description ? "[" : "",
> + description ? : "",
> + description ? "] " : "",
> + service->primary ? "Primary" :
> + "Secondary",
> + service->path, service->uuid,
text); }
> +
> static void print_service_proxy(GDBusProxy *proxy, const char
*description) {
> struct service service;
> @@ -1153,11 +1177,19 @@ static void chrc_unregister(void *data)
> CHRC_INTERFACE);
> }
> +static void inc_unregister(void *data)
> +{
> + char *path = data;
> +
> + g_free(path);
> +}
> +
> static void service_free(void *data)
> {
> struct service *service = data;
> g_list_free_full(service->chrcs, chrc_unregister);
> + g_list_free_full(service->inc, inc_unregister);
> g_free(service->path);
> g_free(service->uuid);
> g_free(service);
> @@ -1186,9 +1218,53 @@ static gboolean service_get_primary(const
GDBusPropertyTable *property,
> return TRUE;
> }
> +
> +static gboolean service_get_includes(const GDBusPropertyTable *property,
> + DBusMessageIter *iter, void
*data) {
> + DBusMessageIter array;
> + struct service *service = data;
> + char *inc = NULL;
> + GList *l;
> +
> + if (service->inc) {
> + for (l = service->inc ; l; l = g_list_next(l)) {
> +
> + inc = l->data;
> + dbus_message_iter_open_container(iter,
DBUS_TYPE_ARRAY,
> +
DBUS_TYPE_OBJECT_PATH_AS_STRING, &array);
> +
> + dbus_message_iter_append_basic(&array,
DBUS_TYPE_OBJECT_PATH,
> +
&inc);
> +
> + }
> +
> + dbus_message_iter_close_container(iter, &array);
> +
> + return TRUE;
> + }
> +
> + return FALSE;
> +
> +}
> +
> +static gboolean service_exist_includes(const GDBusPropertyTable
*property,
> + void *data)
> +{
> + struct service *service = data;
> +
> + if (service->inc)
> + return TRUE;
> + else
> + return FALSE;
> +
> +}
> +
> +
> static const GDBusPropertyTable service_properties[] = {
> { "UUID", "s", service_get_uuid },
> { "Primary", "b", service_get_primary },
> + { "Includes", "ao", service_get_includes, NULL,
service_exist_includes },
> { }
> };
> @@ -1280,6 +1356,77 @@ void gatt_unregister_service(DBusConnection *conn,
GDBusProxy *proxy,
> return bt_shell_noninteractive_quit(EXIT_SUCCESS);
> }
> +static char *inc_find(struct service *serv, char *path) {
> + GList *lc;
> +
> + for (lc = serv->inc; lc; lc = g_list_next(lc)) {
> + char *incp = lc->data;
> + /* match object path */
> + if (!strcmp(incp, path))
> + return incp;
> + }
> +
> + return NULL;
> +}
> +
> +void gatt_register_include(DBusConnection *conn, GDBusProxy *proxy,
> + int argc, char *argv[])
> +{
> + struct service *service, *inc_service;
> + char *inc_path;
> +
> + if (!local_services) {
> + bt_shell_printf("No service registered\n");
> + return bt_shell_noninteractive_quit(EXIT_FAILURE);
> + }
> +
> + service = g_list_last(local_services)->data;
> +
> +
> + inc_service = service_find(argv[1]);
> + if (!inc_service) {
> + bt_shell_printf("Failed to find service object\n");
> + return bt_shell_noninteractive_quit(EXIT_FAILURE);
> + }
> +
> + inc_path = g_strdup(service->path);
> +
> + inc_service->inc = g_list_append(inc_service->inc, inc_path);
> +
> + print_service(inc_service, COLORED_NEW);
> + print_inc_service(service, COLORED_NEW);
> +
> + return bt_shell_noninteractive_quit(EXIT_SUCCESS);
> +}
> +
> +void gatt_unregister_include(DBusConnection *conn, GDBusProxy *proxy,
> + int argc, char *argv[])
> +{
> + struct service *ser_inc, *service;
> + char *path = NULL;
> +
> + service = service_find(argv[1]);
> + if (!service) {
> + bt_shell_printf("Failed to unregister include service
object\n");
> + return bt_shell_noninteractive_quit(EXIT_FAILURE);
> + }
> +
> + ser_inc = service_find(argv[2]);
> + if (!ser_inc) {
> + bt_shell_printf("Failed to find include service
object\n");
> + return bt_shell_noninteractive_quit(EXIT_FAILURE);
> + }
> +
> + path = inc_find(service, ser_inc->path);
> + if (path) {
> + service->inc = g_list_remove(service->inc, path);
> + inc_unregister(path);
> + }
> +
> + return bt_shell_noninteractive_quit(EXIT_SUCCESS);
> +}
> +
> static gboolean chrc_get_uuid(const GDBusPropertyTable *property,
> DBusMessageIter *iter, void
*data) { diff --git a/client/gatt.h b/client/gatt.h index f4c36b8..d169552
100644
> --- a/client/gatt.h
> +++ b/client/gatt.h
> @@ -65,3 +65,8 @@ void gatt_register_desc(DBusConnection *conn,
GDBusProxy *proxy,
> int argc, char *argv[]);
> void gatt_unregister_desc(DBusConnection *conn, GDBusProxy *proxy,
> int argc, char *argv[]);
> +
> +void gatt_register_include(DBusConnection *conn, GDBusProxy *proxy,
> + int argc, char *argv[]);
> +void gatt_unregister_include(DBusConnection *conn, GDBusProxy *proxy,
> + int argc, char *argv[]);
> diff --git a/client/main.c b/client/main.c index b96278d..9d0220d 100644
> --- a/client/main.c
> +++ b/client/main.c
> @@ -2000,6 +2000,22 @@ static void cmd_register_service(int argc, char
*argv[])
> gatt_register_service(dbus_conn, default_ctrl->proxy, argc,
argv); }
> +static void cmd_register_includes(int argc, char *argv[]) {
> + if (check_default_ctrl() == FALSE)
> + return bt_shell_noninteractive_quit(EXIT_FAILURE);
> +
> + gatt_register_include(dbus_conn, default_ctrl->proxy, argc,
argv); }
> +
> +static void cmd_unregister_includes(int argc, char *argv[]) {
> + if (check_default_ctrl() == FALSE)
> + return bt_shell_noninteractive_quit(EXIT_FAILURE);
> +
> + gatt_unregister_include(dbus_conn, default_ctrl->proxy, argc,
argv); }
> +
> static void cmd_unregister_service(int argc, char *argv[]) {
> if (check_default_ctrl() == FALSE)
> @@ -2436,6 +2452,10 @@ static const struct bt_shell_menu gatt_menu = {
> "Register application service."
},
> { "unregister-service", "<UUID/object>", cmd_unregister_service,
> "Unregister application service"
},
> + { "register-includes", "<UUID>", cmd_register_includes,
> + "Register as Included service
in." },
> + { "unregister-includes", "<Service-UUID><Inc-UUID>",
cmd_unregister_includes,
> + "Unregister Included
service." },
> { "register-characteristic", "<UUID>
<Flags=read,write,notify...> "
> "[authorize]",
cmd_register_characteristic,
> "Register application characteristic" },
> --
> 2.7.4
This has code style problems:
WARNING:LONG_LINE: line over 80 characters
#81: FILE: client/gatt.c:1261:
+ DBUS_TYPE_OBJECT_PATH_AS_STRING, &array);
WARNING:LONG_LINE: line over 80 characters
#83: FILE: client/gatt.c:1263:
+ dbus_message_iter_append_basic(&array, DBUS_TYPE_OBJECT_PATH,
WARNING:LONG_LINE: line over 80 characters
#84: FILE: client/gatt.c:1264:
+ &inc);
WARNING:LONG_LINE: line over 80 characters
#113: FILE: client/gatt.c:1293:
+ { "Includes", "ao", service_get_includes, NULL,
service_exist_includes },
WARNING:LONG_LINE_STRING: line over 80 characters
#173: FILE: client/gatt.c:1437:
+ bt_shell_printf("Failed to unregister include service object\n");
WARNING:LONG_LINE: line over 80 characters
#241: FILE: client/main.c:2472:
+ { "unregister-includes", "<Service-UUID><Inc-UUID>",
cmd_unregister_includes,
WARNING:LONG_LINE: line over 80 characters
#242: FILE: client/main.c:2473:
+ "Unregister Included service." },
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2018-05-16 7:22 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <CGME20180413085416epcas2p4708d940b4466a3f390d847a14058588b@epcas2p4.samsung.com>
2018-04-13 8:53 ` [PATCH Bluez] client/gatt : Add support for Included Service Avichal Agarwal
[not found] ` <CGME20180413085416epcas2p4708d940b4466a3f390d847a14058588b@epcms5p3>
2018-05-15 14:20 ` Avichal Agarwal
2018-05-16 7:22 ` Luiz Augusto von Dentz
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).