Merge "Invoke HAL_DISCOVERY_STATE_STOPPED event once" into tizen
[platform/core/connectivity/bluetooth-frwk.git] / bt-oal / bluez_hal / src / bt-hal-gatt.c
index a476088..2d789e4 100644 (file)
@@ -58,8 +58,10 @@ 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;
 
@@ -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)
@@ -788,6 +793,7 @@ static void __bt_hal_handle_gatt_client_scan_result(void *buf, uint16_t len)
        adv_info = g_malloc0(sizeof(bt_hal_le_adv_info_t));
        if (!adv_info) {
                ERR("Not enough memory");
+               g_free(adv_info);
                return;
        }
 
@@ -795,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) {
@@ -840,12 +846,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;
 }