* [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
[parent not found: <CGME20180413085416epcas2p4708d940b4466a3f390d847a14058588b@epcms5p3>]
* 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).