/*
* 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;
}
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)
/*
* 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 "src/attrib-server.h"
#include "src/device.h"
#include "src/profile.h"
-#include "src/attio.h"
#include "src/dbus-common.h"
#include "tds.h"
#include "src/gatt-database.h"
#endif
-
#define TDS_USER_CHARACTERITIC_UUID 0x2af6
#define TDS_USER_CHARACTERITIC_DESCRIPTOR_UUID 0x2a56
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;
DBUS_TYPE_INVALID);
}
+
static DBusMessage *tds_activation_response(DBusConnection *connection,
DBusMessage *msg, void *user_data)
{
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);
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);
}
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);
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;
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);
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);
{
struct tds_service_adapter *tsadapter;
const char *path = adapter_get_path(adapter);
+ DBG("+");
tsadapter = g_new0(struct tds_service_adapter, 1);
tsadapter->adapter = adapter;