All of lore.kernel.org
 help / color / mirror / Atom feed
* [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

=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

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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.