From 73983ce4a89dfd73b929364e729e960b3d3bea9d Mon Sep 17 00:00:00 2001 From: Deokhyun Kim Date: Wed, 16 Nov 2016 14:49:42 +0900 Subject: [PATCH] Disconnect HID device service when HID profile is removed. - Even though App which registered HID device profile is terminated abnoramlly, HID is still connected. If trying to connect HID again then it fails always. - A profile of device structure & a profile registered by App are different. A profile of device structure maintains connceted status. - If a HID profile registered by App is removed in status of connected, disconnect the connection of the profile intentionally. Change-Id: Ic507032ba46e864e23c142177d9a7ba35ebe5d15 Signed-off-by: Deokhyun Kim --- src/device.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/device.c b/src/device.c index f032f75..4b9b3d2 100644 --- a/src/device.c +++ b/src/device.c @@ -5866,8 +5866,27 @@ void device_remove_profile(gpointer a, gpointer b) GSList *l; l = find_service_with_profile(device->services, profile); +#ifdef TIZEN_BT_HID_DEVICE_ENABLE + if (l == NULL) { + if (g_strcmp0(profile->local_uuid , HID_DEVICE_UUID) == 0) { + l = find_service_with_uuid(device->services, + HID_DEVICE_UUID); + service = l->data; + + if (btd_service_get_state(service) == + BTD_SERVICE_STATE_CONNECTED) { + int err; + err = btd_service_disconnect(service); + if (err) + error("error: %s", strerror(-err)); + } + } + return; + } +#else if (l == NULL) return; +#endif service = l->data; device->services = g_slist_delete_link(device->services, l); -- 2.7.4