GATT: Refactor Sever Indication logic
[platform/core/connectivity/bluetooth-frwk.git] / bt-oal / bluez_hal / src / bt-hal-gatt.c
index 15fed96..0ec2253 100644 (file)
@@ -58,13 +58,15 @@ typedef struct {
        uint8_t addr_type;
        uint8_t adv_type;
        int rssi;
-       int data_len;
-       uint8_t data[BT_HAL_ADV_DATA_MAX_SIZE * 2];
+       uint8_t adv_data[BT_HAL_ADV_DATA_MAX_SIZE];
+       int adv_data_len;
+       uint8_t scan_rsp_data[BT_HAL_ADV_DATA_MAX_SIZE];
+       int scan_rsp_data_len;
        guint timer_id;
 } bt_hal_le_adv_info_t;
 
 /****************************************** Global Variables ******************************************/
-const btgatt_callbacks_t *bt_gatt_callbacks = NULL;
+static const btgatt_callbacks_t *bt_gatt_callbacks = NULL;
 
 extern btgatt_client_interface_t btgatt_client_interface;
 extern btgatt_server_interface_t btgatt_server_interface;
@@ -89,7 +91,7 @@ static void __bt_hal_handle_gatt_client_service_changed(void *buf, uint16_t len)
 static void __bt_hal_handle_gatt_client_mtu_exchange_completed(void *buf, uint16_t len);
 /*****************************************************************************************************/
 
-static bool interface_ready(void)
+bool _bt_hal_gatt_interface_ready(void)
 {
        return bt_gatt_callbacks != NULL;
 }
@@ -265,7 +267,7 @@ static void __bt_hal_handle_gatt_server_acquire_notify_requested(void *buf, uint
        DBG("acquire notify  requested event recived");
 
        if (bt_gatt_callbacks->server->request_acquire_notify_cb)
-               bt_gatt_callbacks->server->request_acquire_notify_cb(ev->mtu, ev->conn_id, ev->trans_id, ev->char_handl);
+               bt_gatt_callbacks->server->request_acquire_notify_cb(ev->mtu, ev->conn_id, ev->trans_id, ev->char_handl, (bt_bdaddr_t *)ev->bdaddr);
 }
 
 static void __bt_hal_handle_gatt_server_indicate_confirmed(void *buf, uint16_t len)
@@ -292,7 +294,7 @@ static void __bt_hal_gatt_events(int message, void *buf, uint16_t len)
 {
        DBG("GATT event 0x%x", message);
        /* Check if GATT interface is Ready */
-       if (!interface_ready())
+       if (!_bt_hal_gatt_interface_ready())
                return;
 
        switch (message) {
@@ -462,7 +464,9 @@ static void __bt_hal_send_le_scan_result_event(bt_hal_le_adv_info_t *adv_info)
        str2bt_bdaddr_t(adv_info->addr, &bd_addr);
        if (bt_gatt_callbacks->client->scan_result_cb)
                bt_gatt_callbacks->client->scan_result_cb(
-                               &bd_addr, adv_info->rssi, adv_info->data);
+                               &bd_addr, adv_info->addr_type, adv_info->rssi,
+                               adv_info->adv_data, adv_info->adv_data_len,
+                               adv_info->scan_rsp_data, adv_info->scan_rsp_data_len);
 }
 
 static void __bt_handle_gatt_client_connected(void *buf, uint16_t len)
@@ -655,7 +659,7 @@ static void __bt_handle_gatt_client_watch_notification(void *buf, uint16_t len)
        gatt_char_id.inst_id = ev->inst_id;
 
        if (bt_gatt_callbacks->client->register_for_notification_cb)
-               bt_gatt_callbacks->client->register_for_notification_cb(ev->client_if,
+               bt_gatt_callbacks->client->register_for_notification_cb(ev->conn_id,
                                ev->registered, ev->status, &gatt_srvc_id, &gatt_char_id);
 }
 
@@ -774,7 +778,8 @@ static void __bt_hal_handle_gatt_client_scan_result(void *buf, uint16_t len)
                adv_info = __bt_hal_get_adv_ind_info(address);
                if (adv_info) {
                        /* Copy scan response data in data field and send event */
-                       memcpy(&(adv_info->data[adv_info->data_len]), ev->adv_data, data_len);
+                       adv_info->scan_rsp_data_len = data_len;
+                       memcpy(adv_info->scan_rsp_data, ev->adv_data, data_len);
                        __bt_hal_send_le_scan_result_event(adv_info);
                        adv_ind_list = g_slist_remove(adv_ind_list, adv_info);
                        if (adv_info->timer_id)
@@ -796,8 +801,8 @@ static void __bt_hal_handle_gatt_client_scan_result(void *buf, uint16_t len)
        adv_info->addr_type = ev->addr_type;
        adv_info->adv_type = ev->adv_type;
        adv_info->rssi = ev->rssi;
-       adv_info->data_len = data_len;
-       memcpy(adv_info->data, ev->adv_data, data_len);
+       adv_info->adv_data_len = data_len;
+       memcpy(adv_info->adv_data, ev->adv_data, data_len);
 
 #ifdef TIZEN_BT_HAL
        if (_bt_hal_gatt_client_get_le_scan_type() == BT_GATTC_LE_SCAN_TYPE_PASSIVE) {
@@ -810,6 +815,7 @@ static void __bt_hal_handle_gatt_client_scan_result(void *buf, uint16_t len)
        if (adv_info->adv_type == BT_LE_ADV_DIRECT_IND ||
                adv_info->adv_type == BT_LE_ADV_NONCONN_IND) {
                __bt_hal_send_le_scan_result_event(adv_info);
+               g_free(adv_info);
        } else if (adv_info->adv_type == BT_LE_ADV_IND ||
                adv_info->adv_type == BT_LE_ADV_SCAN_IND) {
 
@@ -841,12 +847,16 @@ static void __bt_hal_handle_gatt_client_mtu_exchange_completed(void *buf, uint16
 static bt_status_t gatt_init(const btgatt_callbacks_t* callbacks)
 {
        bt_gatt_callbacks = callbacks;
+
        DBG("Register A2DP Src events callback function");
        _bt_hal_register_gatt_le_dbus_handler_cb(__bt_hal_gatt_events);
        _bt_hal_register_gatt_server_handler_cb(__bt_hal_gatt_events);
        _bt_hal_register_gatt_client_handler_cb(__bt_hal_gatt_events);
        _bt_hal_register_event_handler_cb(HAL_GATT, __bt_hal_gatt_events);
 
+       _bt_hal_gatt_server_init();
+       _bt_hal_gatt_client_init();
+
        return BT_STATUS_SUCCESS;
 }