[TDS Plugin] Use .accept and .disconnect 92/146392/2
authorAnupam Roy <anupam.r@samsung.com>
Mon, 28 Aug 2017 09:15:44 +0000 (14:45 +0530)
committerAnupam Roy <anupam.r@samsung.com>
Mon, 28 Aug 2017 09:24:34 +0000 (14:54 +0530)
Remove the dependency of btd_device_attio function
and use .accept and .disconnect instead

Change-Id: I2ba3abad89df4b68e13742ce76fa405dd376e106
Signed-off-by: Anupam Roy <anupam.r@samsung.com>
lib/uuid.h
profiles/tds/manager.c
profiles/tds/tds.c
profiles/tds/tds.h

index 393fbe8..e43ba70 100755 (executable)
@@ -112,6 +112,8 @@ extern "C" {
 #define OBEX_MNS_UUID          "00001133-0000-1000-8000-00805f9b34fb"
 #define OBEX_MAP_UUID          "00001134-0000-1000-8000-00805f9b34fb"
 
+#define TDS_UUID               "00001824-0000-1000-8000-00805f9b34fb"
+
 #ifdef TIZEN_FEATURE_BLUEZ_MODIFY
 /* Samsung Accessary Protocol UUIDs */
 #define WEARABLE_OLD_SAP_UUID  "a49eb41e-cb06-495c-9f4f-aa80a90cdf4a"
index 6d13ee3..f86718f 100755 (executable)
@@ -1,7 +1,7 @@
 /*
  *  BlueZ - Bluetooth protocol stack for Linux
  *
- *  Copyright (C) 2016 Samsung Electronics Co. Ltd.
+ *  Copyright (C) 2016-2017 Samsung Electronics Co. Ltd.
  *
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
 #include "gdbus/gdbus.h"
 
 #include "src/adapter.h"
+#include "src/device.h"
 #include "src/profile.h"
+#include "src/service.h"
+#include "src/log.h"
 
 #include "tds.h"
 
 int tds_provider_adapter_probe(struct btd_profile *p,
                                        struct btd_adapter *adapter)
 {
+       DBG("+");
        tds_register_provider_interface(adapter);
        return 0;
 }
@@ -44,14 +48,56 @@ int tds_provider_adapter_probe(struct btd_profile *p,
 void tds_provider_adapter_remove(struct btd_profile *p,
                                                 struct btd_adapter *adapter)
 {
+       DBG("+");
        tds_unregister_provider_interface(adapter);
 }
 
+static int tds_device_probe(struct btd_service *service)
+{
+       struct btd_device *device = btd_service_get_device(service);
+       DBG("device path %s", device_get_path(device));
+       btd_service_connecting_complete(service, 0);
+       return 0;
+}
+
+static int tds_device_remove(struct btd_service *service)
+{
+       struct btd_device *device = btd_service_get_device(service);
+       DBG("device path %s", device_get_path(device));
+       tds_seeker_disconnected(device_get_adapter(device), device);
+       btd_service_disconnecting_complete(service, 0);
+       return 0;
+}
+
+static int tds_device_accepted(struct btd_service *service)
+{
+       struct btd_device *device = btd_service_get_device(service);
+       DBG("device path %s", device_get_path(device));
+       btd_service_connecting_complete(service, 0);
+       return 0;
+}
+
+static int tds_device_disconnected(struct btd_service *service)
+{
+       struct btd_device *device = btd_service_get_device(service);
+       tds_seeker_disconnected(device_get_adapter(device), device);
+       btd_service_disconnecting_complete(service, 0);
+       return 0;
+}
+
 static struct btd_profile tds_provider = {
        .name           = "TDS Provider GATT Driver",
+       .local_uuid    = TDS_UUID,
        .remote_uuid    = GATT_UUID,
+
        .adapter_probe  = tds_provider_adapter_probe,
        .adapter_remove = tds_provider_adapter_remove,
+
+       .device_probe = tds_device_probe,
+       .device_remove = tds_device_remove,
+
+       .accept = tds_device_accepted,
+       .disconnect = tds_device_disconnected,
 };
 
 static int tds_provider_init(void)
index 786bf3d..87b9cd8 100755 (executable)
@@ -1,7 +1,7 @@
 /*
  *  BlueZ - Bluetooth protocol stack for Linux
  *
- *  Copyright (C) 2016 Samsung Electronics Co. Ltd.
+ *  Copyright (C) 2016-2017 Samsung Electronics Co. Ltd.
  *
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
@@ -52,7 +52,6 @@
 #include "src/attrib-server.h"
 #include "src/device.h"
 #include "src/profile.h"
-#include "src/attio.h"
 #include "src/dbus-common.h"
 
 #include "tds.h"
@@ -65,7 +64,6 @@
 #include "src/gatt-database.h"
 #endif
 
-
 #define TDS_USER_CHARACTERITIC_UUID            0x2af6
 #define TDS_USER_CHARACTERITIC_DESCRIPTOR_UUID 0x2a56
 
@@ -118,6 +116,12 @@ find_tds_service_adapter(struct btd_adapter *adapter)
        return l->data;
 }
 
+static struct btd_device *
+tds_get_connected_device(struct connected_device *con_dev)
+{
+       return con_dev->device;
+}
+
 static int device_cmp(gconstpointer a, gconstpointer b)
 {
        const struct connected_device *condev = a;
@@ -149,6 +153,7 @@ static void indication_cfm_cb(void *user_data)
                        DBUS_TYPE_INVALID);
 }
 
+
 static DBusMessage *tds_activation_response(DBusConnection *connection,
                                 DBusMessage *msg, void *user_data)
 {
@@ -234,11 +239,6 @@ static void tds_client_remove_condev(struct connected_device *condev)
                return;
 
        a = condev->adapter;
-
-       if (condev->callback_id && condev->device)
-               btd_device_remove_attio_callback(condev->device,
-                               condev->callback_id);
-
        if (condev->device)
                btd_device_unref(condev->device);
 
@@ -246,19 +246,30 @@ static void tds_client_remove_condev(struct connected_device *condev)
        g_free(condev);
 }
 
-static void tds_client_disc_cb(gpointer user_data)
+void tds_seeker_disconnected(struct btd_adapter *adapter,
+                                       struct btd_device *device)
 {
-       struct connected_device *condev = user_data;
+       struct tds_service_adapter *tsadapter;
+       struct connected_device *condev;
+       DBG("+");
 
+       if (!device || !adapter)
+               return;
+
+       tsadapter = find_tds_service_adapter(adapter);
+       if (!tsadapter)
+               return;
+
+       condev = find_connected_device(tsadapter, device);
        if (!condev)
                return;
 
        /* Unregister Interface */
        g_dbus_unregister_interface(btd_get_dbus_connection(),
-                       device_get_path(condev->device),
+                       device_get_path(device),
                        TDS_SERVICE_PROVIDER_INTERFACE);
 
-       DBG("TDS Client remove device %p", condev->device);
+       DBG("TDS Client remove device %p", device);
        tds_client_remove_condev(condev);
 }
 
@@ -357,9 +368,6 @@ static void tds_control_point_char_write(struct gatt_db_attribute *attrib,
                condev = g_new0(struct connected_device, 1);
                condev->device = btd_device_ref(device);
                condev->adapter = tsadapter;
-               condev->callback_id = btd_device_add_attio_callback(device,
-                               NULL, tds_client_disc_cb, condev);
-
                tsadapter->connected_devices = g_slist_append(tsadapter->connected_devices,
                                condev);
                DBG("added connected dev %p", device);
@@ -520,7 +528,8 @@ static void tds_control_point_ccc_write_cb(struct gatt_db_attribute *attrib,
        uint8_t bdaddr_type;
        struct connected_device *condev = NULL;
        uint8_t ecode = 0;
-       DBG("TDS Control Point CCC Write requested..len [%d] val [0x%x] val [0x%x]", len, value[0], value[1]);
+       DBG("TDS Control Point CCC Write requested..len [%d] val [0x%x] val [0x%x]",
+                       len, value[0], value[1]);
 
        if (!value || len != 2) {
                ecode = BT_ATT_ERROR_INVALID_ATTRIBUTE_VALUE_LEN;
@@ -553,9 +562,6 @@ static void tds_control_point_ccc_write_cb(struct gatt_db_attribute *attrib,
                condev = g_new0(struct connected_device, 1);
                condev->device = btd_device_ref(device);
                condev->adapter = adapter;
-               condev->callback_id = btd_device_add_attio_callback(device,
-                               NULL, tds_client_disc_cb, condev);
-
                adapter->connected_devices = g_slist_append(adapter->connected_devices,
                                condev);
                DBG("added connected dev %p", device);
@@ -763,6 +769,7 @@ void tds_unregister_provider_interface(struct btd_adapter *adapter)
        struct tds_service_adapter *tsadapter = find_tds_service_adapter(adapter);
        if (!tsadapter)
                return;
+       DBG("+");
        tds_service_unregister(tsadapter);
 
        tds_service_adapters = g_slist_remove(tds_service_adapters, tsadapter);
@@ -773,6 +780,7 @@ void tds_register_provider_interface(struct btd_adapter *adapter)
 {
        struct tds_service_adapter *tsadapter;
        const char *path = adapter_get_path(adapter);
+       DBG("+");
 
        tsadapter = g_new0(struct tds_service_adapter, 1);
        tsadapter->adapter = adapter;
index 85b9b10..692f3ae 100755 (executable)
@@ -1,9 +1,7 @@
 /*
  *  BlueZ - Bluetooth protocol stack for Linux
  *
- *  Copyright (C) 2011  Nokia Corporation
- *  Copyright (C) 2011  Marcel Holtmann <marcel@holtmann.org>
- *
+ *  Copyright (C) 2016-2017 Samsung Electronics Co. Ltd.
  *
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
@@ -32,3 +30,6 @@
 void tds_register_provider_interface(struct btd_adapter *adapter);
 
 void tds_unregister_provider_interface(struct btd_adapter *adapter);
+
+void tds_seeker_disconnected(struct btd_adapter *adapter,
+                                       struct btd_device *device);