Implement the set mtu for LE device
[platform/core/connectivity/bluetooth-frwk.git] / bt-oal / oal-gatt.c
index 9af37b9..d925520 100644 (file)
@@ -213,6 +213,7 @@ static void cb_gattc_write_descriptor(int conn_id, int status, btgatt_write_para
 static void cb_gattc_register_for_notification(int conn_id, int registered, int status,
                        btgatt_srvc_id_t *srvc_id, btgatt_gatt_id_t *char_id);
 static void cb_gattc_notify(int conn_id, btgatt_notify_params_t *p_data);
+static void cb_gattc_configure_mtu_cmpl(int conn_id, int status, int mtu);
 
 /*TODO GATT CLient callbacks will be implemented in subsequent patches */
 static const btgatt_client_callbacks_t btgatt_client_callbacks = {
@@ -233,7 +234,7 @@ static const btgatt_client_callbacks_t btgatt_client_callbacks = {
        .write_descriptor_cb = cb_gattc_write_descriptor,
        .execute_write_cb = NULL,
        .read_remote_rssi_cb = NULL,
-       .configure_mtu_cb = NULL,
+       .configure_mtu_cb = cb_gattc_configure_mtu_cmpl,
 #ifdef PLATFORM_ANDROID_HAL
        .scan_filter_cfg_cb = NULL,
        .scan_filter_param_cb = NULL,
@@ -527,6 +528,23 @@ oal_status_t gatts_multi_adv_disable(int instance_id)
        return OAL_STATUS_SUCCESS;
 }
 
+oal_status_t gatts_set_filter_policy(int filter_policy)
+{
+       int ret = OAL_STATUS_SUCCESS;
+
+       CHECK_OAL_GATT_ENABLED();
+
+       /* send the filter_policy value to the HAL Layer */
+       ret = gatt_api->server->set_filter_policy(filter_policy);
+
+       if (ret != BT_STATUS_SUCCESS) {
+               BT_ERR("set_filter_policy failed: %d",ret);
+               return convert_to_oal_status(ret);
+       }
+
+       return OAL_STATUS_SUCCESS;
+}
+
 oal_status_t gatts_multi_adv_update(int instance_id,
                int min_intv, int max_intv,
                int adv_type, int chnl_map,
@@ -1783,6 +1801,19 @@ oal_status_t gattc_set_le_scan_param(int scan_type, int itv, int win)
 
        return OAL_STATUS_SUCCESS;
 }
+
+static void cb_gattc_configure_mtu_cmpl(int conn_id, int status, int mtu)
+{
+       event_gattc_mtu_configured_t *event;
+       BT_INFO("BTGATT Client configure mtu complete Callback, conn_id: %d, status: %d, mtu: %d",
+                       conn_id, status, mtu);
+       event = g_new0(event_gattc_mtu_configured_t, 1);
+       event->conn_id = conn_id;
+       event->mtu = mtu;
+       event->status = convert_to_oal_status(status);
+       send_event(OAL_EVENT_GATTC_MTU_EXCHANGE_COMPLETED, event, sizeof(*event));
+}
+
 /************************************ GATT Client ***********************************/
 oal_status_t gattc_register(oal_uuid_t* client_uuid)
 {
@@ -2169,6 +2200,40 @@ oal_status_t gattc_unregister_scan_filter(int slot_id)
        return OAL_STATUS_SUCCESS;
 }
 
+oal_status_t gattc_enable_scan_filter(int client_if)
+{
+       int ret;
+
+       API_TRACE("");
+       CHECK_OAL_GATT_ENABLED();
+
+       BT_INFO("Enable Scan filter. Client If: %d", client_if);
+
+       ret = gatt_api->client->scan_filter_enable(client_if, TRUE);
+       if (ret != BT_STATUS_SUCCESS) {
+               BT_ERR("error: %s", status2string(ret));
+               return convert_to_oal_status(ret);
+       }
+       return OAL_STATUS_SUCCESS;
+}
+
+oal_status_t gattc_disable_scan_filter(int client_if)
+{
+       int ret;
+
+       API_TRACE("");
+       CHECK_OAL_GATT_ENABLED();
+
+       BT_INFO("Disable Scan filter. Client If: %d", client_if);
+
+       ret = gatt_api->client->scan_filter_enable(client_if, FALSE);
+       if (ret != BT_STATUS_SUCCESS) {
+               BT_ERR("error: %s", status2string(ret));
+               return convert_to_oal_status(ret);
+       }
+       return OAL_STATUS_SUCCESS;
+}
+
 oal_status_t gattc_register_scan_filter(oal_ble_scan_filter_t* filter_data)
 {
        int ret;
@@ -2244,7 +2309,7 @@ oal_status_t gattc_register_scan_filter(oal_ble_scan_filter_t* filter_data)
                        return convert_to_oal_status(ret);
                }
 
-               feature_selection |= OAL_BLE_SCAN_FILTER_FEATURE_DEVICE_ADDRESS;
+               feature_selection |= OAL_BLE_SCAN_FILTER_FEATURE_DEVICE_NAME;
        }
        if (filter_data->added_features & OAL_BLE_SCAN_FILTER_FEATURE_SERVICE_UUID){
                BT_INFO("OAL_BLE_SCAN_FILTER_FEATURE_SERVICE_UUID is being added");
@@ -2277,7 +2342,7 @@ oal_status_t gattc_register_scan_filter(oal_ble_scan_filter_t* filter_data)
                        return convert_to_oal_status(ret);
                }
 
-               feature_selection |= OAL_BLE_SCAN_FILTER_FEATURE_DEVICE_ADDRESS;
+               feature_selection |= OAL_BLE_SCAN_FILTER_FEATURE_SERVICE_UUID;
        }
        if (filter_data->added_features & OAL_BLE_SCAN_FILTER_FEATURE_SERVICE_SOLICITATION_UUID){
                BT_INFO("OAL_BLE_SCAN_FILTER_FEATURE_SERVICE_SOLICITATION_UUID is being added");
@@ -2308,7 +2373,7 @@ oal_status_t gattc_register_scan_filter(oal_ble_scan_filter_t* filter_data)
                        return convert_to_oal_status(ret);
                }
 
-               feature_selection |= OAL_BLE_SCAN_FILTER_FEATURE_DEVICE_ADDRESS;
+               feature_selection |= OAL_BLE_SCAN_FILTER_FEATURE_SERVICE_SOLICITATION_UUID;
        }
        if (filter_data->added_features & OAL_BLE_SCAN_FILTER_FEATURE_SERVICE_DATA){
                ret = gatt_api->client->scan_filter_add_remove(client_info,
@@ -2333,7 +2398,7 @@ oal_status_t gattc_register_scan_filter(oal_ble_scan_filter_t* filter_data)
                        return convert_to_oal_status(ret);
                }
 
-               feature_selection |= OAL_BLE_SCAN_FILTER_FEATURE_DEVICE_ADDRESS;
+               feature_selection |= OAL_BLE_SCAN_FILTER_FEATURE_SERVICE_DATA;
        }
        if (filter_data->added_features & OAL_BLE_SCAN_FILTER_FEATURE_MANUFACTURER_DATA){
                ret = gatt_api->client->scan_filter_add_remove(client_info,
@@ -2359,7 +2424,7 @@ oal_status_t gattc_register_scan_filter(oal_ble_scan_filter_t* filter_data)
                        return convert_to_oal_status(ret);
                }
 
-               feature_selection |= OAL_BLE_SCAN_FILTER_FEATURE_DEVICE_ADDRESS;
+               feature_selection |= OAL_BLE_SCAN_FILTER_FEATURE_MANUFACTURER_DATA;
        }
 
        BT_DBG("Filter selection 0x%.2x", feature_selection);
@@ -2375,3 +2440,25 @@ oal_status_t gattc_register_scan_filter(oal_ble_scan_filter_t* filter_data)
        }
        return OAL_STATUS_SUCCESS;
 }
+
+oal_status_t gattc_configure_mtu(int conn_id, int mtu)
+{
+       int ret;
+
+       API_TRACE("Configure MTU Size: [%d]", mtu);
+       CHECK_OAL_GATT_ENABLED();
+       CHECK_CLIENT_CONNECTION(conn_id);
+
+       /* To prevent crash in case other libraries not support this api */
+       if (gatt_api->client->configure_mtu == NULL) {
+               BT_WARN("configure_mtu is NULL");
+               return OAL_STATUS_NOT_SUPPORT;
+       }
+
+       ret = gatt_api->client->configure_mtu(conn_id, mtu);
+       if (ret != BT_STATUS_SUCCESS) {
+               BT_ERR("Gatt client configure_mtu error: %s", status2string(ret));
+               return convert_to_oal_status(ret);
+       }
+       return OAL_STATUS_SUCCESS;
+}