linux-bluetooth.vger.kernel.org archive mirror
 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@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).