summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorinjun.yang <injun.yang@samsung.com>2019-07-01 16:59:12 +0900
committerDoHyun Pyun <dh79.pyun@samsung.com>2019-09-16 13:16:47 +0900
commitcde88279676b86e7412665ec388701fa36f858c8 (patch)
tree67cc717c8e21c7ec09847b335c31680190982b57 /src
parent2eb5fd42c86a3b9475f48c1f538660defbead9ae (diff)
downloadbluetooth-cde88279676b86e7412665ec388701fa36f858c8.tar.gz
bluetooth-cde88279676b86e7412665ec388701fa36f858c8.tar.bz2
bluetooth-cde88279676b86e7412665ec388701fa36f858c8.zip
Implement MTU changed callback for GATT server
[Model] All [BinType] AP [Customer] OPEN [Issue#] N/A [Request] Internal [Occurrence Version] N/A [Problem] Unable to notice MTU changed event to application [Cause & Measure] Implement MTU changed callback for GATT server [Checking Method] n/a [Team] Convergence BT [Developer] Injun Yang [Solution company] Samsung [Change Type] Specification change Change-Id: I266f8335948c7dd358c8c4e43a974109d297a9b6 Signed-off-by: injun.yang <injun.yang@samsung.com> Signed-off-by: DoHyun Pyun <dh79.pyun@samsung.com>
Diffstat (limited to 'src')
-rw-r--r--src/bluetooth-common.c42
-rw-r--r--src/bluetooth-gatt.c38
2 files changed, 79 insertions, 1 deletions
diff --git a/src/bluetooth-common.c b/src/bluetooth-common.c
index c92cb0a..d5966fb 100644
--- a/src/bluetooth-common.c
+++ b/src/bluetooth-common.c
@@ -724,6 +724,23 @@ static int __bt_get_bt_gatt_client_att_mtu_info_s(bt_gatt_client_att_mtu_info_s
return BT_ERROR_NONE;
}
+static int __bt_get_bt_gatt_server_att_mtu_info_s(bt_gatt_server_att_mtu_info_s **dest, bluetooth_le_att_mtu_info_t *source)
+{
+ *dest = (bt_gatt_server_att_mtu_info_s *)g_malloc0(sizeof(bt_gatt_server_att_mtu_info_s));
+
+ if (_bt_convert_address_to_string(&((*dest)->remote_address), &(source->device_address)) != BT_ERROR_NONE) {
+ g_free(*dest);
+ *dest = NULL;
+
+ return BT_ERROR_OUT_OF_MEMORY;
+ }
+
+ (*dest)->mtu = source->mtu;
+ (*dest)->status = source->status;
+
+ return BT_ERROR_NONE;
+}
+
static int __bt_get_bt_device_connection_info_s(bt_device_connection_info_s **dest, bt_connection_info_t *source)
{
*dest = (bt_device_connection_info_s *)g_malloc0(sizeof(bt_device_connection_info_s));
@@ -1252,7 +1269,7 @@ static bool __bt_need_to_handle(int event)
case BLUETOOTH_EVENT_GATT_SERVER_NOTIFICATION_COMPLETED:
case BLUETOOTH_EVENT_GATT_CLIENT_SERVICE_CHANGED:
case BLUETOOTH_EVENT_GATT_ATT_MTU_CHANGED:
- case BLUETOOTH_EVENT_TDS_TRANSPORT_DATA_RECEIVED:
+ case BLUETOOTH_EVENT_GATT_SERVER_ATT_MTU_CHANGED:
case BLUETOOTH_EVENT_TDS_ACTIVATION_RESULT:
case BLUETOOTH_EVENT_TDS_CONTROL_POINT_ENABLED:
case BLUETOOTH_EVENT_TDS_ACTIVATION_INDICATION:
@@ -2907,6 +2924,29 @@ static void __bt_event_proxy(int event, bluetooth_event_param_t *param, void *us
break;
}
+ case BLUETOOTH_EVENT_GATT_SERVER_ATT_MTU_CHANGED: {
+ bt_gatt_server_att_mtu_info_s *mtu_info = NULL;
+ const GSList *server_list = NULL;
+ bt_gatt_server_s *server = NULL;
+
+ BT_INFO("BLUETOOTH_EVENT_GATT_SERVER_ATT_MTU_CHANGED");
+
+ server_list = _bt_gatt_get_server_list();
+ if (!server_list)
+ break;
+
+ server = (bt_gatt_server_s *)server_list->data;
+
+ __bt_get_bt_gatt_server_att_mtu_info_s(&mtu_info, (bluetooth_le_att_mtu_info_t *)(param->param_data));
+
+ if (server && server->att_mtu_changed_cb)
+ server->att_mtu_changed_cb(server,
+ (const bt_gatt_server_att_mtu_info_s *)mtu_info,
+ server->att_mtu_changed_user_data);
+
+ g_free(mtu_info);
+ break;
+ }
case BLUETOOTH_EVENT_LE_DATA_LENGTH_CHANGED:
BT_INFO("__bt_le_set_data_length_changed_cb() will be called");
data_length_info = (bt_le_data_length_params_t *)(param->param_data);
diff --git a/src/bluetooth-gatt.c b/src/bluetooth-gatt.c
index c17f1ae..a2b1733 100644
--- a/src/bluetooth-gatt.c
+++ b/src/bluetooth-gatt.c
@@ -3347,6 +3347,44 @@ int bt_gatt_server_foreach_services(bt_gatt_server_h server,
return BT_ERROR_NONE;
}
+int bt_gatt_server_set_att_mtu_changed_cb(bt_gatt_server_h server, bt_gatt_server_att_mtu_changed_cb callback, void *user_data)
+{
+ bt_gatt_server_s *server_s = (bt_gatt_server_s *)server;
+
+ BT_CHECK_GATT_SERVER_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(callback);
+ BT_CHECK_INPUT_PARAMETER(server);
+
+ if (server_s->att_mtu_changed_cb) {
+ BT_INFO("Already registered");
+ server_s->att_mtu_changed_cb = callback;
+ server_s->att_mtu_changed_user_data = user_data;
+ return BT_ERROR_NONE;
+ }
+
+ BT_INFO("MTU Changed callback registered");
+ server_s->att_mtu_changed_cb = callback;
+ server_s->att_mtu_changed_user_data = user_data;
+
+ return BT_ERROR_NONE;
+}
+
+int bt_gatt_server_unset_att_mtu_changed_cb(bt_gatt_server_h server)
+{
+ bt_gatt_server_s *server_s = (bt_gatt_server_s *)server;
+
+ BT_CHECK_GATT_SERVER_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(server);
+
+ BT_INFO("MTU Changed callback unregistered");
+ server_s->att_mtu_changed_cb = NULL;
+ server_s->att_mtu_changed_user_data = NULL;
+
+ return BT_ERROR_NONE;
+}
+
#ifdef TIZEN_GATT_CLIENT
int bt_gatt_client_create(const char *remote_address, bt_gatt_client_h *client)
{