diff --git a/components/bt/host/bluedroid/api/esp_gap_ble_api.c b/components/bt/host/bluedroid/api/esp_gap_ble_api.c index aa6a9798331..7dfe9dd3dd0 100644 --- a/components/bt/host/bluedroid/api/esp_gap_ble_api.c +++ b/components/bt/host/bluedroid/api/esp_gap_ble_api.c @@ -524,6 +524,29 @@ esp_err_t esp_ble_gap_config_adv_data_raw(uint8_t *raw_data, uint32_t raw_data_l btc_gap_ble_arg_deep_free) == BT_STATUS_SUCCESS ? ESP_OK : ESP_FAIL); } + +esp_err_t esp_ble_gap_config_scan_rsp_data_raw(uint8_t *raw_data, uint32_t raw_data_len) +{ + btc_msg_t msg = {0}; + btc_ble_gap_args_t arg; + + ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); + + if ((raw_data_len != 0 && raw_data == NULL) || raw_data_len > ESP_BLE_ADV_DATA_LEN_MAX) { + return ESP_ERR_INVALID_ARG; + } + + msg.sig = BTC_SIG_API_CALL; + msg.pid = BTC_PID_GAP_BLE; + msg.act = BTC_GAP_BLE_ACT_CFG_SCAN_RSP_DATA_RAW; + arg.cfg_scan_rsp_data_raw.raw_scan_rsp = raw_data; + arg.cfg_scan_rsp_data_raw.raw_scan_rsp_len = raw_data_len; + + return (btc_transfer_context(&msg, &arg, sizeof(btc_ble_gap_args_t), btc_gap_ble_arg_deep_copy, + btc_gap_ble_arg_deep_free) == BT_STATUS_SUCCESS ? ESP_OK : ESP_FAIL); + +} + #endif // #if (BLE_42_ADV_EN == TRUE) #endif // #if (BLE_42_FEATURE_SUPPORT == TRUE) esp_err_t esp_ble_gap_read_rssi(esp_bd_addr_t remote_addr) @@ -547,28 +570,7 @@ esp_err_t esp_ble_gap_read_rssi(esp_bd_addr_t remote_addr) return (btc_transfer_context(&msg, &arg, sizeof(btc_ble_gap_args_t), NULL, NULL) == BT_STATUS_SUCCESS ? ESP_OK : ESP_FAIL); } -#if (BLE_42_FEATURE_SUPPORT == TRUE) -esp_err_t esp_ble_gap_config_scan_rsp_data_raw(uint8_t *raw_data, uint32_t raw_data_len) -{ - btc_msg_t msg = {0}; - btc_ble_gap_args_t arg; - - ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED); - - if ((raw_data_len != 0 && raw_data == NULL) || raw_data_len > ESP_BLE_ADV_DATA_LEN_MAX) { - return ESP_ERR_INVALID_ARG; - } - - msg.sig = BTC_SIG_API_CALL; - msg.pid = BTC_PID_GAP_BLE; - msg.act = BTC_GAP_BLE_ACT_CFG_SCAN_RSP_DATA_RAW; - arg.cfg_scan_rsp_data_raw.raw_scan_rsp = raw_data; - arg.cfg_scan_rsp_data_raw.raw_scan_rsp_len = raw_data_len; - - return (btc_transfer_context(&msg, &arg, sizeof(btc_ble_gap_args_t), btc_gap_ble_arg_deep_copy, - btc_gap_ble_arg_deep_free) == BT_STATUS_SUCCESS ? ESP_OK : ESP_FAIL); - -} +#if ((BLE_42_SCAN_EN == TRUE) || (BLE_50_EXTEND_SCAN_EN == TRUE)) esp_err_t esp_ble_gap_add_duplicate_scan_exceptional_device(esp_ble_duplicate_exceptional_info_type_t type, esp_duplicate_info_t device_info) { @@ -636,7 +638,8 @@ esp_err_t esp_ble_gap_clean_duplicate_scan_exceptional_list(esp_duplicate_scan_e return (btc_transfer_context(&msg, &arg, sizeof(btc_ble_gap_args_t), NULL, NULL) == BT_STATUS_SUCCESS ? ESP_OK : ESP_FAIL); } -#endif // #if (BLE_42_FEATURE_SUPPORT == TRUE) +#endif // ((BLE_42_SCAN_EN == TRUE) || (BLE_50_EXTEND_SCAN_EN == TRUE)) + #if (SMP_INCLUDED == TRUE) esp_err_t esp_ble_gap_set_security_param(esp_ble_sm_param_t param_type, void *value, uint8_t len) diff --git a/components/bt/host/bluedroid/api/include/api/esp_gap_ble_api.h b/components/bt/host/bluedroid/api/include/api/esp_gap_ble_api.h index e9f26981bf6..1241616b4c9 100644 --- a/components/bt/host/bluedroid/api/include/api/esp_gap_ble_api.h +++ b/components/bt/host/bluedroid/api/include/api/esp_gap_ble_api.h @@ -823,9 +823,10 @@ typedef enum { ESP_BLE_DUPLICATE_SCAN_EXCEPTIONAL_ALL_LIST = 0xFFFF, /*!< duplicate scan exceptional all list */ } esp_duplicate_scan_exceptional_list_type_t; +#endif //#if (BLE_42_FEATURE_SUPPORT == TRUE) + typedef uint8_t esp_duplicate_info_t[ESP_BD_ADDR_LEN]; -#endif //#if (BLE_42_FEATURE_SUPPORT == TRUE) #if (BLE_50_FEATURE_SUPPORT == TRUE) #define ESP_BLE_GAP_SET_EXT_ADV_PROP_NONCONN_NONSCANNABLE_UNDIRECTED (0 << 0) /*!< Non-Connectable and Non-Scannable Undirected advertising */ @@ -1894,7 +1895,6 @@ typedef union { esp_bt_status_t status; /*!< Indicate the add or remove whitelist operation success status */ esp_ble_wl_operation_t wl_operation; /*!< The value is ESP_BLE_WHITELIST_ADD if add address to whitelist operation success, ESP_BLE_WHITELIST_REMOVE if remove address from the whitelist operation success */ } update_whitelist_cmpl; /*!< Event parameter of ESP_GAP_BLE_UPDATE_WHITELIST_COMPLETE_EVT */ -#if (BLE_42_FEATURE_SUPPORT == TRUE) /** * @brief ESP_GAP_BLE_UPDATE_DUPLICATE_EXCEPTIONAL_LIST_COMPLETE_EVT */ @@ -1904,7 +1904,6 @@ typedef union { uint16_t length; /*!< The length of device_info */ esp_duplicate_info_t device_info; /*!< device information, when subcode is ESP_BLE_DUPLICATE_EXCEPTIONAL_LIST_CLEAN, the value is invalid */ } update_duplicate_exceptional_list_cmpl; /*!< Event parameter of ESP_GAP_BLE_UPDATE_DUPLICATE_EXCEPTIONAL_LIST_COMPLETE_EVT */ -#endif // #if (BLE_42_FEATURE_SUPPORT == TRUE) /** * @brief ESP_GAP_BLE_SET_CHANNELS_EVT */ @@ -3068,6 +3067,7 @@ esp_err_t esp_ble_gap_clear_whitelist(void); /** * @brief Get the whitelist size in the controller +* Note: This API returns a constant value indicating the maximum number of whitelists supported by the controller * * @param[out] length: the white list length. * @return diff --git a/components/bt/host/bluedroid/bta/dm/bta_dm_act.c b/components/bt/host/bluedroid/bta/dm/bta_dm_act.c index 5f6e490b5b5..4f6f496a521 100644 --- a/components/bt/host/bluedroid/bta/dm/bta_dm_act.c +++ b/components/bt/host/bluedroid/bta/dm/bta_dm_act.c @@ -49,9 +49,10 @@ #if (BT_CONTROLLER_INCLUDED == TRUE) #include "esp_bt.h" #endif - +#if (CLASSIC_BT_INCLUDED == TRUE) static void bta_dm_inq_results_cb (tBTM_INQ_RESULTS *p_inq, UINT8 *p_eir); static void bta_dm_inq_cmpl_cb (void *p_result); +#endif // #if (CLASSIC_BT_INCLUDED == TRUE) static void bta_dm_service_search_remname_cback (BD_ADDR bd_addr, DEV_CLASS dc, BD_NAME bd_name); static void bta_dm_remname_cback (tBTM_REMOTE_DEV_NAME *p_remote_name); #if (SDP_INCLUDED == TRUE) @@ -70,14 +71,16 @@ static UINT8 bta_dm_new_link_key_cback(BD_ADDR bd_addr, DEV_CLASS dev_class, BD_ static UINT8 bta_dm_authentication_complete_cback(BD_ADDR bd_addr, DEV_CLASS dev_class, BD_NAME bd_name, int result); #endif ///SMP_INCLUDED == TRUE static void bta_dm_local_name_cback(const BD_ADDR bd_addr); +#if (CLASSIC_BT_INCLUDED == TRUE) static BOOLEAN bta_dm_check_av(UINT16 event); +#endif // #if (CLASSIC_BT_INCLUDED == TRUE) static void bta_dm_bl_change_cback (tBTM_BL_EVENT_DATA *p_data); static void bta_dm_acl_link_stat_cback(tBTM_ACL_LINK_STAT_EVENT_DATA *p_data); -static void bta_dm_policy_cback(tBTA_SYS_CONN_STATUS status, UINT8 id, UINT8 app_id, BD_ADDR peer_addr); #if (CLASSIC_BT_INCLUDED == TRUE) +static void bta_dm_policy_cback(tBTA_SYS_CONN_STATUS status, UINT8 id, UINT8 app_id, BD_ADDR peer_addr); static void bta_dm_encryption_change_cback(BD_ADDR bd_addr, UINT8 enc_mode); static UINT8 bta_dm_sp_cback (tBTM_SP_EVT event, tBTM_SP_EVT_DATA *p_data); /* Extended Inquiry Response */ @@ -90,8 +93,12 @@ static void bta_dm_eir_search_services( tBTM_INQ_RESULTS *p_result, #endif ///SDP_INCLUDED == TRUE static void bta_dm_search_timer_cback (TIMER_LIST_ENT *p_tle); static void bta_dm_disable_conn_down_timer_cback (TIMER_LIST_ENT *p_tle); +#if (CLASSIC_BT_INCLUDED == TRUE) static void bta_dm_rm_cback(tBTA_SYS_CONN_STATUS status, UINT8 id, UINT8 app_id, BD_ADDR peer_addr); +#endif // #if (CLASSIC_BT_INCLUDED == TRUE) +#if (CLASSIC_BT_INCLUDED == TRUE) static void bta_dm_adjust_roles(BOOLEAN delay_role_switch); +#endif // #if (CLASSIC_BT_INCLUDED == TRUE) #if (SDP_INCLUDED == TRUE || SMP_INCLUDED == TRUE) static char *bta_dm_get_remname(void); #endif ///SDP_INCLUDED == TRUE || SMP_INCLUDED == TRUE @@ -120,10 +127,6 @@ static void bta_dm_gattc_callback(tBTA_GATTC_EVT event, tBTA_GATTC *p_data); extern tBTA_DM_CONTRL_STATE bta_dm_pm_obtain_controller_state(void); #endif -#if BLE_VND_INCLUDED == TRUE -static void bta_dm_ctrl_features_rd_cmpl_cback(tBTM_STATUS result); -#endif - #ifndef BTA_DM_BLE_ADV_CHNL_MAP #define BTA_DM_BLE_ADV_CHNL_MAP (BTM_BLE_ADV_CHNL_37|BTM_BLE_ADV_CHNL_38|BTM_BLE_ADV_CHNL_39) #endif @@ -132,12 +135,17 @@ static void bta_dm_ctrl_features_rd_cmpl_cback(tBTM_STATUS result); static BOOLEAN bta_dm_remove_sec_dev_entry(BD_ADDR remote_bd_addr); #endif ///SMP_INCLUDED == TRUE #if (BLE_INCLUDED == TRUE) -static void bta_dm_observe_results_cb(tBTM_INQ_RESULTS *p_inq, UINT8 *p_eir); -static void bta_dm_observe_cmpl_cb(void *p_result); -static void bta_dm_observe_discard_cb (uint32_t num_dis); +#if (BLE_42_SCAN_EN == TRUE) +static void bta_dm_scan_results_cb(tBTM_INQ_RESULTS *p_inq, UINT8 *p_eir); +static void bta_dm_scan_cmpl_cb(void *p_result); +static void bta_dm_scan_discard_cb (uint32_t num_dis); +#endif // (BLE_42_SCAN_EN == TRUE) #endif ///BLE_INCLUDED == TRUE +#if (CLASSIC_BT_INCLUDED == TRUE) static void bta_dm_delay_role_switch_cback(TIMER_LIST_ENT *p_tle); +#endif // #if (CLASSIC_BT_INCLUDED == TRUE) + extern void sdpu_uuid16_to_uuid128(UINT16 uuid16, UINT8 *p_uuid128); static void bta_dm_disable_timer_cback(TIMER_LIST_ENT *p_tle); @@ -480,8 +488,12 @@ static void bta_dm_sys_hw_cback( tBTA_SYS_HW_EVT status ) #endif /* hw is ready, go on with BTA DM initialization */ memset(&bta_dm_search_cb, 0x00, sizeof(bta_dm_search_cb)); +#if (CLASSIC_BT_INCLUDED == TRUE) memset(&bta_dm_conn_srvcs, 0x00, sizeof(bta_dm_conn_srvcs)); +#endif // #if (CLASSIC_BT_INCLUDED == TRUE) +#if (CLASSIC_BT_INCLUDED == TRUE) memset(&bta_dm_di_cb, 0, sizeof(tBTA_DM_DI_CB)); +#endif // #if (CLASSIC_BT_INCLUDED == TRUE) memcpy(dev_class, p_bta_dm_cfg->dev_class, sizeof(dev_class)); #if CLASSIC_BT_INCLUDED BTM_SetDeviceClass (dev_class); @@ -517,30 +529,34 @@ static void bta_dm_sys_hw_cback( tBTA_SYS_HW_EVT status ) BTM_RegBusyLevelNotif (bta_dm_bl_change_cback, NULL, BTM_BL_UPDATE_MASK | BTM_BL_ROLE_CHG_MASK); BTM_RegAclLinkStatNotif (bta_dm_acl_link_stat_cback); -#if BLE_VND_INCLUDED == TRUE - BTM_BleReadControllerFeatures (bta_dm_ctrl_features_rd_cmpl_cback); -#endif - /* Earlier, we used to invoke BTM_ReadLocalAddr which was just copying the bd_addr from the control block and invoking the callback which was sending the DM_ENABLE_EVT. But then we have a few HCI commands being invoked above which were still in progress when the ENABLE_EVT was sent. So modified this to fetch the local name which forces the DM_ENABLE_EVT to be sent only after all the init steps are complete */ +#if (CLASSIC_BT_INCLUDED == TRUE) BTM_ReadLocalDeviceNameFromController((tBTM_CMPL_CB *)bta_dm_local_name_cback); bta_sys_rm_register((tBTA_SYS_CONN_CBACK *)bta_dm_rm_cback); - +#endif // (CLASSIC_BT_INCLUDED == TRUE) #if (BTA_DM_PM_INCLUDED == TRUE) /* initialize bluetooth low power manager */ bta_dm_init_pm(); #endif /* #if (BTA_DM_PM_INCLUDED == TRUE) */ - +#if (CLASSIC_BT_INCLUDED == TRUE) bta_sys_policy_register((tBTA_SYS_CONN_CBACK *)bta_dm_policy_cback); +#endif // (CLASSIC_BT_INCLUDED == TRUE) #if (BLE_INCLUDED == TRUE && BTA_GATT_INCLUDED == TRUE && SDP_INCLUDED == TRUE) && (GATTC_INCLUDED == TRUE) bta_dm_gattc_register(); #endif +#if (CLASSIC_BT_INCLUDED == TRUE) + // do nothing +#else + bta_dm_local_name_cback(NULL); +#endif + } else { APPL_TRACE_DEBUG(" --- ignored event"); } @@ -589,7 +605,9 @@ void bta_dm_disable (tBTA_DM_MSG *p_data) #endif #if BLE_INCLUDED == TRUE && BTA_GATT_INCLUDED == TRUE +#if (GATT_BG_CONN_DEV == TRUE) BTM_BleClearBgConnDev(); +#endif // (GATT_BG_CONN_DEV == TRUE) #endif if (BTM_GetNumAclLinks() == 0) { @@ -615,13 +633,6 @@ void bta_dm_disable (tBTA_DM_MSG *p_data) btm_ble_resolving_list_cleanup (); //by TH, because cmn_ble_vsc_cb.max_filter has something mistake as btm_ble_adv_filter_cleanup #endif -#if BLE_INCLUDED == TRUE -#if (BLE_HOST_BLE_MULTI_ADV_EN == TRUE) - // btm_ble_multi_adv_init is called when the host is enabled, so btm_ble_multi_adv_cleanup is called when the host is disabled. - btm_ble_multi_adv_cleanup(); -#endif // #if (BLE_HOST_BLE_MULTI_ADV_EN == TRUE) -#endif - } /******************************************************************************* @@ -664,8 +675,9 @@ static void bta_dm_disable_timer_cback (TIMER_LIST_ENT *p_tle) } } else { bta_dm_cb.disabling = FALSE; - +#if (CLASSIC_BT_INCLUDED == TRUE) bta_sys_remove_uuid(UUID_SERVCLASS_PNP_INFORMATION); +#endif // #if (CLASSIC_BT_INCLUDED == TRUE) bta_dm_cb.p_sec_cback(BTA_DM_DISABLE_EVT, NULL); } } @@ -995,18 +1007,6 @@ void bta_dm_clear_white_list(tBTA_DM_MSG *p_data) BTM_BleClearWhitelist(p_data->white_list.update_wl_cb); #endif } -#if (BLE_HOST_READ_TX_POWER_EN == TRUE) -void bta_dm_ble_read_adv_tx_power(tBTA_DM_MSG *p_data) -{ -#if (BLE_INCLUDED == TRUE) - if (p_data->read_tx_power.read_tx_power_cb != NULL) { - BTM_BleReadAdvTxPower(p_data->read_tx_power.read_tx_power_cb); - } else { - APPL_TRACE_ERROR("%s(), the callback function can't be NULL.", __func__); - } -#endif ///BLE_INCLUDED == TRUE -} -#endif // #if (BLE_HOST_READ_TX_POWER_EN == TRUE) void bta_dm_read_rssi(tBTA_DM_MSG *p_data) { @@ -1239,85 +1239,6 @@ void bta_dm_add_device (tBTA_DM_MSG *p_data) } } -#if (BLE_HOST_REMOVE_AN_ACL_EN == TRUE) -/******************************************************************************* -** -** Function bta_dm_close_acl -** -** Description This function forces to close the connection to a remote device -** and optionally remove the device from security database if -** required. -**** -*******************************************************************************/ -void bta_dm_close_acl(tBTA_DM_MSG *p_data) -{ - tBTA_DM_API_REMOVE_ACL *p_remove_acl = &p_data->remove_acl; - UINT8 index; - - APPL_TRACE_DEBUG("bta_dm_close_acl"); - - if (BTM_IsAclConnectionUp(p_remove_acl->bd_addr, p_remove_acl->transport)) { - for (index = 0; index < bta_dm_cb.device_list.count; index ++) { - if (!bdcmp( bta_dm_cb.device_list.peer_device[index].peer_bdaddr, p_remove_acl->bd_addr)) { - break; - } - } - if (index != bta_dm_cb.device_list.count) { - if (p_remove_acl->remove_dev) { - bta_dm_cb.device_list.peer_device[index].remove_dev_pending = TRUE; - } - } else { - APPL_TRACE_ERROR("unknown device, remove ACL failed"); - } - /* Disconnect the ACL link */ - btm_remove_acl(p_remove_acl->bd_addr, p_remove_acl->transport); - } - /* if to remove the device from security database ? do it now */ - else if (p_remove_acl->remove_dev) { - if (!BTM_SecDeleteDevice(p_remove_acl->bd_addr, p_remove_acl->transport)) { - APPL_TRACE_ERROR("delete device from security database failed."); - } -#if (BLE_INCLUDED == TRUE && GATTC_INCLUDED == TRUE) - /* need to remove all pending background connection if any */ - BTA_GATTC_CancelOpen(0, p_remove_acl->bd_addr, FALSE); -#endif - } - /* otherwise, no action needed */ - -} -#endif // #if (BLE_HOST_REMOVE_AN_ACL_EN == TRUE) - -#if (BLE_HOST_REMOVE_ALL_ACL_EN == TRUE) -/******************************************************************************* -** -** Function bta_dm_remove_all_acl -** -** Description This function forces to close all the ACL links specified by link type -**** -*******************************************************************************/ -void bta_dm_remove_all_acl(tBTA_DM_MSG *p_data) -{ - const tBTA_DM_LINK_TYPE link_type = p_data->remove_all_acl.link_type; - tBT_TRANSPORT transport = BT_TRANSPORT_BR_EDR; - - APPL_TRACE_DEBUG("%s link type = %d", __func__, link_type); - - for (UINT8 i = 0; i < bta_dm_cb.device_list.count; i++) { - BD_ADDR addr = {0}; - bdcpy(addr, bta_dm_cb.device_list.peer_device[i].peer_bdaddr); -#if defined (BLE_INCLUDED) && (BLE_INCLUDED == TRUE) - transport = bta_dm_cb.device_list.peer_device[i].transport; -#endif - if ((link_type == BTA_DM_LINK_TYPE_ALL) || - ((link_type == BTA_DM_LINK_TYPE_LE) && (transport == BT_TRANSPORT_LE)) || - ((link_type == BTA_DM_LINK_TYPE_BR_EDR) && (transport == BT_TRANSPORT_BR_EDR))) { - /* Disconnect the ACL link */ - btm_remove_acl(addr, transport); - } - } -} -#endif // #if (BLE_HOST_REMOVE_ALL_ACL_EN == TRUE) - /******************************************************************************* ** ** Function bta_dm_bond @@ -1445,6 +1366,7 @@ void bta_dm_pin_reply (tBTA_DM_MSG *p_data) } #endif ///SMP_INCLUDED == TRUE +#if (CLASSIC_BT_INCLUDED == TRUE) /******************************************************************************* ** ** Function bta_dm_policy_cback @@ -1510,7 +1432,7 @@ static void bta_dm_policy_cback(tBTA_SYS_CONN_STATUS status, UINT8 id, UINT8 app break; } } - +#endif // (CLASSIC_BT_INCLUDED == TRUE) /******************************************************************************* ** ** Function bta_dm_confirm @@ -1673,7 +1595,9 @@ void bta_dm_ci_rmt_oob_act(tBTA_DM_MSG *p_data) *******************************************************************************/ void bta_dm_search_start (tBTA_DM_MSG *p_data) { +#if (CLASSIC_BT_INCLUDED == TRUE) tBTM_INQUIRY_CMPL result; +#endif // #if (CLASSIC_BT_INCLUDED == TRUE) #if (BLE_INCLUDED == TRUE && BTA_GATT_INCLUDED == TRUE && SDP_INCLUDED == TRUE) && (GATTC_INCLUDED == TRUE) UINT16 len = (UINT16)(sizeof(tBT_UUID) * p_data->search.num_uuid); @@ -1682,12 +1606,13 @@ void bta_dm_search_start (tBTA_DM_MSG *p_data) APPL_TRACE_DEBUG("%s avoid_scatter=%d", __func__, p_bta_dm_cfg->avoid_scatter); +#if (CLASSIC_BT_INCLUDED == TRUE) if (p_bta_dm_cfg->avoid_scatter && (p_data->search.rs_res == BTA_DM_RS_NONE) && bta_dm_check_av(BTA_DM_API_SEARCH_EVT)) { memcpy(&bta_dm_cb.search_msg, &p_data->search, sizeof(tBTA_DM_API_SEARCH)); return; } - +#endif // #if (CLASSIC_BT_INCLUDED == TRUE) BTM_ClearInqDb(NULL); /* save search params */ bta_dm_search_cb.p_search_cback = p_data->search.p_cback; @@ -1710,6 +1635,7 @@ void bta_dm_search_start (tBTA_DM_MSG *p_data) memcpy(bta_dm_search_cb.p_srvc_uuid, p_data->search.p_uuid, len); } #endif +#if (CLASSIC_BT_INCLUDED == TRUE) result.status = BTM_StartInquiry( (tBTM_INQ_PARMS *)&p_data->search.inq_params, bta_dm_inq_results_cb, (tBTM_CMPL_CB *) bta_dm_inq_cmpl_cb); @@ -1719,6 +1645,7 @@ void bta_dm_search_start (tBTA_DM_MSG *p_data) result.num_resp = 0; bta_dm_inq_cmpl_cb ((void *)&result); } +#endif // #if (CLASSIC_BT_INCLUDED == TRUE) } /******************************************************************************* @@ -2869,6 +2796,7 @@ static void bta_dm_sdp_callback (UINT16 sdp_status) } } #endif ///SDP_INCLUDED == TRUE +#if (CLASSIC_BT_INCLUDED == TRUE) /******************************************************************************* ** ** Function bta_dm_inq_results_cb @@ -2957,6 +2885,7 @@ static void bta_dm_inq_cmpl_cb (void *p_result) } } } +#endif // #if (CLASSIC_BT_INCLUDED == TRUE) /******************************************************************************* ** @@ -3527,11 +3456,13 @@ static void bta_dm_bl_change_cback (tBTM_BL_EVENT_DATA *p_data) p_msg->busy_level = p_data->update.busy_level; p_msg->busy_level_flags = p_data->update.busy_level_flags; break; +#if (CLASSIC_BT_INCLUDED == TRUE) case BTM_BL_ROLE_CHG_EVT: p_msg->new_role = p_data->role_chg.new_role; p_msg->hci_status = p_data->role_chg.hci_status; bdcpy(p_msg->bd_addr, p_data->role_chg.p_bda); break; +#endif // (CLASSIC_BT_INCLUDED == TRUE) case BTM_BL_COLLISION_EVT: bdcpy(p_msg->bd_addr, p_data->conn.p_bda); break; @@ -3583,6 +3514,7 @@ static void bta_dm_acl_link_stat_cback(tBTM_ACL_LINK_STAT_EVENT_DATA *p_data) } } +#if (CLASSIC_BT_INCLUDED == TRUE) /******************************************************************************* ** ** Function bta_dm_rs_cback @@ -3651,6 +3583,7 @@ static BOOLEAN bta_dm_check_av(UINT16 event) } return switching; } +#endif // #if (CLASSIC_BT_INCLUDED == TRUE) /******************************************************************************* ** @@ -3670,10 +3603,11 @@ void bta_dm_acl_change(tBTA_DM_MSG *p_data) tBTA_DM_SEC conn; BOOLEAN is_new = p_data->acl_change.is_new; BD_ADDR_PTR p_bda = p_data->acl_change.bd_addr; - BOOLEAN need_policy_change = FALSE; BOOLEAN issue_unpair_cb = FALSE; - +#if (CLASSIC_BT_INCLUDED == TRUE) + BOOLEAN need_policy_change = FALSE; tBTA_DM_PEER_DEVICE *p_dev; +#endif // #if (CLASSIC_BT_INCLUDED == TRUE) memset(&conn, 0, sizeof(tBTA_DM_SEC)); switch (p_data->acl_change.event) { @@ -3684,7 +3618,7 @@ void bta_dm_acl_change(tBTA_DM_MSG *p_data) bta_dm_cb.p_sec_cback(BTA_DM_BUSY_LEVEL_EVT, &conn); } return; - +#if (CLASSIC_BT_INCLUDED == TRUE) case BTM_BL_ROLE_CHG_EVT: /* role change event */ p_dev = bta_dm_find_peer_device(p_bda); if (p_dev) { @@ -3720,14 +3654,15 @@ void bta_dm_acl_change(tBTA_DM_MSG *p_data) } } return; +#endif // #if (CLASSIC_BT_INCLUDED == TRUE) } - +#if (CLASSIC_BT_INCLUDED == TRUE) /* Collision report from Stack: Notify profiles */ if (p_data->acl_change.event == BTM_BL_COLLISION_EVT) { bta_sys_notify_collision (p_bda); return; } - +#endif // (CLASSIC_BT_INCLUDED == TRUE) if (is_new) { for (i = 0; i < bta_dm_cb.device_list.count; i++) { if (!bdcmp( bta_dm_cb.device_list.peer_device[i].peer_bdaddr, p_bda) @@ -3857,7 +3792,9 @@ void bta_dm_acl_change(tBTA_DM_MSG *p_data) } } +#if (CLASSIC_BT_INCLUDED == TRUE) bta_dm_adjust_roles(TRUE); +#endif // #if (CLASSIC_BT_INCLUDED == TRUE) } /******************************************************************************* @@ -3894,6 +3831,7 @@ static void bta_dm_disable_conn_down_timer_cback (TIMER_LIST_ENT *p_tle) } +#if (CLASSIC_BT_INCLUDED == TRUE) /******************************************************************************* ** ** Function bta_dm_rm_cback @@ -3934,7 +3872,7 @@ static void bta_dm_rm_cback(tBTA_SYS_CONN_STATUS status, UINT8 id, UINT8 app_id, } } } - +#if (CLASSIC_BT_INCLUDED == TRUE) if ((BTA_ID_AV == id) || (BTA_ID_AVK == id)) { if ( status == BTA_SYS_CONN_BUSY) { if (p_dev) { @@ -3963,6 +3901,7 @@ static void bta_dm_rm_cback(tBTA_SYS_CONN_STATUS status, UINT8 id, UINT8 app_id, if ((status != BTA_SYS_CONN_BUSY) && (status != BTA_SYS_CONN_IDLE)) { bta_dm_adjust_roles(FALSE); } +#endif // #if (CLASSIC_BT_INCLUDED == TRUE) } /******************************************************************************* @@ -3980,6 +3919,7 @@ static void bta_dm_delay_role_switch_cback(TIMER_LIST_ENT *p_tle) APPL_TRACE_EVENT("bta_dm_delay_role_switch_cback: initiating Delayed RS"); bta_dm_adjust_roles (FALSE); } +#endif // #if (CLASSIC_BT_INCLUDED == TRUE) /******************************************************************************* ** @@ -4023,7 +3963,7 @@ static BOOLEAN bta_dm_remove_sec_dev_entry(BD_ADDR remote_bd_addr) } #endif ///SMP_INCLUDED == TRUE - +#if (CLASSIC_BT_INCLUDED == TRUE) /******************************************************************************* ** ** Function bta_dm_adjust_roles @@ -4107,6 +4047,7 @@ static void bta_dm_adjust_roles(BOOLEAN delay_role_switch) } +#endif // #if (CLASSIC_BT_INCLUDED == TRUE) /******************************************************************************* ** @@ -4639,62 +4580,6 @@ void bta_dm_eir_update_uuid(tBT_UUID uuid, BOOLEAN adding) } #endif -#if (BLE_HOST_ENABLE_TEST_MODE_EN == TRUE) -/******************************************************************************* -** -** Function bta_dm_enable_test_mode -** -** Description enable test mode -** -** -** Returns void -** -*******************************************************************************/ -void bta_dm_enable_test_mode(tBTA_DM_MSG *p_data) -{ - UNUSED(p_data); - BTM_EnableTestMode(); -} - -/******************************************************************************* -** -** Function bta_dm_disable_test_mode -** -** Description disable test mode -** -** -** Returns void -** -*******************************************************************************/ -void bta_dm_disable_test_mode(tBTA_DM_MSG *p_data) -{ - UNUSED(p_data); - BTM_DeviceReset(NULL); -} -#endif // #if (BLE_HOST_ENABLE_TEST_MODE_EN == TRUE) - -#if (BLE_HOST_EXECUTE_CBACK_EN == TRUE) -/******************************************************************************* -** -** Function bta_dm_execute_callback -** -** Description Just execute a generic call back in the context of the BTU/BTA tack -** -** -** Returns void -** -*******************************************************************************/ -void bta_dm_execute_callback(tBTA_DM_MSG *p_data) -{ - /* sanity check */ - if (p_data->exec_cback.p_exec_cback == NULL) { - return; - } - - p_data->exec_cback.p_exec_cback(p_data->exec_cback.p_param); -} -#endif // #if (BLE_HOST_EXECUTE_CBACK_EN == TRUE) - /******************************************************************************* ** ** Function bta_dm_encrypt_cback @@ -4809,9 +4694,10 @@ BOOLEAN bta_dm_check_if_only_hd_connected(BD_ADDR peer_addr) #endif /* BTA_HD_INCLUDED == TRUE */ #if (BLE_INCLUDED == TRUE) +#if (BLE_42_SCAN_EN == TRUE) /******************************************************************************* ** -** Function bta_dm_observe_results_cb +** Function bta_dm_scan_results_cb ** ** Description Callback for BLE Observe result ** @@ -4819,7 +4705,7 @@ BOOLEAN bta_dm_check_if_only_hd_connected(BD_ADDR peer_addr) ** Returns void ** *******************************************************************************/ -static void bta_dm_observe_results_cb (tBTM_INQ_RESULTS *p_inq, UINT8 *p_eir) +static void bta_dm_scan_results_cb (tBTM_INQ_RESULTS *p_inq, UINT8 *p_eir) { tBTA_DM_SEARCH result; tBTM_INQ_INFO *p_inq_info; @@ -4859,7 +4745,7 @@ static void bta_dm_observe_results_cb (tBTM_INQ_RESULTS *p_inq, UINT8 *p_eir) /******************************************************************************* ** -** Function bta_dm_observe_cmpl_cb +** Function bta_dm_scan_cmpl_cb ** ** Description Callback for BLE Observe complete ** @@ -4867,11 +4753,11 @@ static void bta_dm_observe_results_cb (tBTM_INQ_RESULTS *p_inq, UINT8 *p_eir) ** Returns void ** *******************************************************************************/ -static void bta_dm_observe_cmpl_cb (void *p_result) +static void bta_dm_scan_cmpl_cb (void *p_result) { tBTA_DM_SEARCH data; - APPL_TRACE_DEBUG("bta_dm_observe_cmpl_cb"); + APPL_TRACE_DEBUG("bta_dm_scan_cmpl_cb"); data.inq_cmpl.num_resps = ((tBTM_INQUIRY_CMPL *)p_result)->num_resp; if (bta_dm_search_cb.p_scan_cback) { @@ -4881,7 +4767,7 @@ static void bta_dm_observe_cmpl_cb (void *p_result) /******************************************************************************* ** -** Function bta_dm_observe_discard_cb +** Function bta_dm_scan_discard_cb ** ** Description Callback for BLE Observe lost ** @@ -4889,17 +4775,18 @@ static void bta_dm_observe_cmpl_cb (void *p_result) ** Returns void ** *******************************************************************************/ -static void bta_dm_observe_discard_cb (uint32_t num_dis) +static void bta_dm_scan_discard_cb (uint32_t num_dis) { tBTA_DM_SEARCH data; - APPL_TRACE_DEBUG("bta_dm_observe_discard_cb"); + APPL_TRACE_DEBUG("bta_dm_scan_discard_cb"); data.inq_dis.num_dis = num_dis; if (bta_dm_search_cb.p_scan_cback) { bta_dm_search_cb.p_scan_cback(BTA_DM_INQ_DISCARD_NUM_EVT, &data); } } +#endif // (BLE_42_SCAN_EN == TRUE) #if (SMP_INCLUDED == TRUE) /******************************************************************************* @@ -5218,26 +5105,6 @@ void bta_dm_ble_set_conn_params (tBTA_DM_MSG *p_data) p_data->ble_set_conn_params.slave_latency, p_data->ble_set_conn_params.supervision_tout); } -#if (BLE_HOST_BLE_SCAN_PARAM_UNUSED == TRUE) -/******************************************************************************* -** -** Function bta_dm_ble_set_conn_scan_params -** -** Description This function sets BLE scan parameters. -** -** Parameters: -** -*******************************************************************************/ -void bta_dm_ble_set_scan_params(tBTA_DM_MSG *p_data) -{ - BTM_BleSetScanParams(p_data->ble_set_scan_params.client_if, - p_data->ble_set_scan_params.scan_int, - p_data->ble_set_scan_params.scan_window, - p_data->ble_set_scan_params.scan_mode, - p_data->ble_set_scan_params.scan_param_setup_cback); -} -#endif // #if (BLE_HOST_BLE_SCAN_PARAM_UNUSED == TRUE) - #if (BLE_42_SCAN_EN == TRUE) /******************************************************************************* ** @@ -5272,23 +5139,6 @@ void bta_dm_ble_set_scan_fil_params(tBTA_DM_MSG *p_data) } #endif // #if (BLE_42_SCAN_EN == TRUE) -#if (BLE_HOST_CONN_SCAN_PARAM_EN == TRUE) -/******************************************************************************* -** -** Function bta_dm_ble_set_conn_scan_params -** -** Description This function set the preferred connection scan parameters. -** -** Parameters: -** -*******************************************************************************/ -void bta_dm_ble_set_conn_scan_params (tBTA_DM_MSG *p_data) -{ - BTM_BleSetConnScanParams(p_data->ble_set_conn_scan_params.scan_int, - p_data->ble_set_conn_scan_params.scan_window); -} -#endif // #if (BLE_HOST_CONN_SCAN_PARAM_EN == TRUE) - /******************************************************************************* ** ** Function bta_dm_ble_update_conn_params @@ -5355,28 +5205,6 @@ void bta_dm_ble_clear_rand_address(tBTA_DM_MSG *p_data) BTM_BleClearRandAddress(); } -#if (BLE_HOST_STOP_ADV_UNUSED == TRUE) -/******************************************************************************* -** -** Function bta_dm_ble_stop_advertising -** -** Description This function stop the BLE avdertising for the device. -** -** Parameters: void -** Explanation: This function added by Yulong at 2016/10/19 -*******************************************************************************/ -void bta_dm_ble_stop_advertising(tBTA_DM_MSG *p_data) -{ - if (p_data->hdr.event != BTA_DM_API_BLE_STOP_ADV_EVT) { - APPL_TRACE_ERROR("Invalid BTA event,can't stop the BLE adverting\n"); - } -#if (BLE_42_ADV_EN == TRUE) - btm_ble_stop_adv(); -#endif // #if (BLE_42_ADV_EN == TRUE) -} -#endif // #if (BLE_HOST_STOP_ADV_UNUSED == TRUE) - - #if BLE_PRIVACY_SPT == TRUE /******************************************************************************* ** @@ -5422,48 +5250,7 @@ void bta_dm_ble_set_key_material (tBTA_DM_MSG *p_data) } #endif -#if (BLE_HOST_BLE_OBSERVE_EN == TRUE) -/******************************************************************************* -** -** Function bta_dm_ble_observe -** -** Description This function set the preferred connection scan parameters. -** -** Parameters: -** -*******************************************************************************/ -void bta_dm_ble_observe (tBTA_DM_MSG *p_data) -{ - tBTM_STATUS status; - if (p_data->ble_observe.start) { - /*Save the callback to be called when a scan results are available */ - bta_dm_search_cb.p_scan_cback = p_data->ble_observe.p_cback; - - if ((status = BTM_BleObserve(TRUE, p_data->ble_observe.duration, - bta_dm_observe_results_cb, bta_dm_observe_cmpl_cb)) != BTM_CMD_STARTED) { - APPL_TRACE_WARNING(" %s start observe failed. status=0x%x\n", __FUNCTION__, status); - } - - if (p_data->ble_observe.p_start_scan_cback) { - status = (status == BTM_CMD_STARTED ? BTA_SUCCESS : BTA_FAILURE); - p_data->ble_observe.p_start_scan_cback(status); - } - } else { - bta_dm_search_cb.p_scan_cback = NULL; - status = BTM_BleObserve(FALSE, 0, NULL, NULL); - - if (status != BTM_CMD_STARTED){ - APPL_TRACE_WARNING(" %s stop observe failed, status=0x%x\n", __FUNCTION__, status); - } - - if (p_data->ble_observe.p_stop_scan_cback) { - status = (status == BTM_CMD_STARTED ? BTA_SUCCESS : BTA_FAILURE); - p_data->ble_observe.p_stop_scan_cback(status); - } - } -} -#endif // #if (BLE_HOST_BLE_OBSERVE_EN == TRUE) - +#if (BLE_42_SCAN_EN == TRUE) /******************************************************************************* ** ** Function bta_dm_ble_scan @@ -5481,7 +5268,7 @@ void bta_dm_ble_scan (tBTA_DM_MSG *p_data) bta_dm_search_cb.p_scan_cback = p_data->ble_scan.p_cback; if ((status = BTM_BleScan(TRUE, p_data->ble_scan.duration, - bta_dm_observe_results_cb, bta_dm_observe_cmpl_cb, bta_dm_observe_discard_cb)) != BTM_CMD_STARTED) { + bta_dm_scan_results_cb, bta_dm_scan_cmpl_cb, bta_dm_scan_discard_cb)) != BTM_CMD_STARTED) { APPL_TRACE_WARNING(" %s start scan failed. status=0x%x\n", __FUNCTION__, status); } @@ -5501,12 +5288,14 @@ void bta_dm_ble_scan (tBTA_DM_MSG *p_data) status = (status == BTM_CMD_STARTED ? BTA_SUCCESS : BTA_FAILURE); p_data->ble_scan.p_stop_scan_cback(status); } - +#if (BLE_TOPOLOGY_CHECK == TRUE) // reset BLE scan link state when stop scan btm_ble_clear_topology_mask(BTM_BLE_STATE_ACTIVE_SCAN_BIT); btm_ble_clear_topology_mask(BTM_BLE_STATE_PASSIVE_SCAN_BIT); +#endif // (BLE_TOPOLOGY_CHECK == TRUE) } } +#endif // (BLE_42_SCAN_EN == TRUE) #if (BLE_42_ADV_EN == TRUE) /******************************************************************************* @@ -5548,6 +5337,7 @@ void bta_dm_ble_set_adv_params_all (tBTA_DM_MSG *p_data) } #endif // #if (BLE_42_ADV_EN == TRUE) +#if ((BLE_42_SCAN_EN == TRUE) || (BLE_50_EXTEND_SCAN_EN == TRUE)) /******************************************************************************* ** ** Function bta_dm_ble_update_duplicate_exceptional_list @@ -5563,6 +5353,7 @@ void bta_dm_ble_update_duplicate_exceptional_list(tBTA_DM_MSG *p_data) p_data->ble_duplicate_exceptional_list.device_info, p_data->ble_duplicate_exceptional_list.exceptional_list_cb); } +#endif // ((BLE_42_SCAN_EN == TRUE) || (BLE_50_EXTEND_SCAN_EN == TRUE)) #if (BLE_42_ADV_EN == TRUE) /******************************************************************************* @@ -5716,14 +5507,14 @@ void bta_dm_ble_set_data_length(tBTA_DM_MSG *p_data) #if (BLE_42_ADV_EN == TRUE) /******************************************************************************* ** -** Function bta_dm_ble_broadcast +** Function bta_dm_ble_advstop ** ** Description Starts or stops LE broadcasts ** ** Parameters: ** *******************************************************************************/ -void bta_dm_ble_broadcast (tBTA_DM_MSG *p_data) +void bta_dm_ble_advstop (tBTA_DM_MSG *p_data) { tBTA_STATUS status = BTA_FAILURE; BOOLEAN start = p_data->ble_observe.start; @@ -5741,116 +5532,6 @@ void bta_dm_ble_broadcast (tBTA_DM_MSG *p_data) } #endif // #if (BLE_42_ADV_EN == TRUE) -#if (BLE_HOST_BLE_MULTI_ADV_EN == TRUE) -/******************************************************************************* -** -** Function bta_dm_ble_multi_adv_enb -** -** Description This function enables a single advertising instance -** -** Parameters: -** -*******************************************************************************/ -void bta_dm_ble_multi_adv_enb(tBTA_DM_MSG *p_data) -{ - tBTM_STATUS btm_status = 0; - - bta_dm_cb.p_multi_adv_cback = p_data->ble_multi_adv_enb.p_cback; - if (BTM_BleMaxMultiAdvInstanceCount() > 0 && NULL != p_data->ble_multi_adv_enb.p_ref) { - btm_status = BTM_BleEnableAdvInstance((tBTM_BLE_ADV_PARAMS *) - p_data->ble_multi_adv_enb.p_params, - p_data->ble_multi_adv_enb.p_cback, - p_data->ble_multi_adv_enb.p_ref); - } - - if (BTM_CMD_STARTED != btm_status) { - bta_dm_cb.p_multi_adv_cback(BTA_BLE_MULTI_ADV_ENB_EVT, 0xFF, - p_data->ble_multi_adv_enb.p_ref, BTA_FAILURE); - } -} -/******************************************************************************* -** -** Function bta_dm_ble_multi_adv_param_upd -** -** Description This function updates multiple advertising instance parameters -** -** Parameters: -** -*******************************************************************************/ -void bta_dm_ble_multi_adv_upd_param(tBTA_DM_MSG *p_data) -{ - tBTM_STATUS btm_status = 0; - void *p_ref = NULL; - - if (BTM_BleMaxMultiAdvInstanceCount() > 0 && p_data->ble_multi_adv_param.inst_id > 0 - && p_data->ble_multi_adv_param.inst_id < BTM_BleMaxMultiAdvInstanceCount()) { - btm_status = BTM_BleUpdateAdvInstParam(p_data->ble_multi_adv_param.inst_id, - (tBTM_BLE_ADV_PARAMS *)p_data->ble_multi_adv_param.p_params); - } - - if (BTM_CMD_STARTED != btm_status) { - p_ref = btm_ble_multi_adv_get_ref(p_data->ble_multi_adv_param.inst_id); - bta_dm_cb.p_multi_adv_cback(BTA_BLE_MULTI_ADV_PARAM_EVT, - p_data->ble_multi_adv_param.inst_id, p_ref, BTA_FAILURE); - } -} -/******************************************************************************* -** -** Function bta_dm_ble_multi_adv_data -** -** Description This function write multiple advertising instance adv data -** or scan response data -** -** Parameters: -** -*******************************************************************************/ -void bta_dm_ble_multi_adv_data(tBTA_DM_MSG *p_data) -{ - tBTM_STATUS btm_status = 0; - void *p_ref = NULL; - - if (BTM_BleMaxMultiAdvInstanceCount() > 0 && p_data->ble_multi_adv_data.inst_id > 0 - && p_data->ble_multi_adv_data.inst_id < BTM_BleMaxMultiAdvInstanceCount()) { - btm_status = BTM_BleCfgAdvInstData(p_data->ble_multi_adv_data.inst_id, - p_data->ble_multi_adv_data.is_scan_rsp, - p_data->ble_multi_adv_data.data_mask, - (tBTM_BLE_ADV_DATA *)p_data->ble_multi_adv_data.p_data); - } - - if (BTM_CMD_STARTED != btm_status) { - p_ref = btm_ble_multi_adv_get_ref(p_data->ble_multi_adv_data.inst_id); - bta_dm_cb.p_multi_adv_cback(BTA_BLE_MULTI_ADV_DATA_EVT, - p_data->ble_multi_adv_data.inst_id, p_ref, BTA_FAILURE); - } - -} -/******************************************************************************* -** -** Function btm_dm_ble_multi_adv_disable -** -** Description This function disable a single adv instance -** -** Parameters: -** -*******************************************************************************/ -void btm_dm_ble_multi_adv_disable(tBTA_DM_MSG *p_data) -{ - tBTM_STATUS btm_status = 0; - void *p_ref = NULL; - - if (BTM_BleMaxMultiAdvInstanceCount() > 0 && p_data->ble_multi_adv_disable.inst_id > 0 - && p_data->ble_multi_adv_disable.inst_id < BTM_BleMaxMultiAdvInstanceCount()) { - btm_status = BTM_BleDisableAdvInstance(p_data->ble_multi_adv_disable.inst_id); - } - - if (BTM_CMD_STARTED != btm_status) { - p_ref = btm_ble_multi_adv_get_ref(p_data->ble_multi_adv_disable.inst_id); - bta_dm_cb.p_multi_adv_cback(BTA_BLE_MULTI_ADV_DISABLE_EVT, - p_data->ble_multi_adv_disable.inst_id, p_ref, BTA_FAILURE); - } -} -#endif // #if (BLE_HOST_BLE_MULTI_ADV_EN == TRUE) - #if (BLE_42_DTM_TEST_EN == TRUE) void bta_dm_ble_gap_dtm_tx_start(tBTA_DM_MSG *p_data) { @@ -6463,389 +6144,6 @@ void bta_dm_api_cs_procedure_enable(tBTA_DM_MSG *p_data) } #endif // (BT_BLE_FEAT_CHANNEL_SOUNDING == TRUE) -#if (BLE_HOST_SETUP_STORAGE_EN == TRUE) -/******************************************************************************* -** -** Function bta_dm_ble_setup_storage -** -** Description This function configures up the storage parameters for ADV batch scanning -** -** Parameters: -** -*******************************************************************************/ -void bta_dm_ble_setup_storage (tBTA_DM_MSG *p_data) -{ - tBTM_STATUS btm_status = 0; - tBTM_BLE_VSC_CB cmn_ble_vsc_cb; - - BTM_BleGetVendorCapabilities(&cmn_ble_vsc_cb); - - if (0 != cmn_ble_vsc_cb.tot_scan_results_strg) { - btm_status = BTM_BleSetStorageConfig(p_data->ble_set_storage.batch_scan_full_max, - p_data->ble_set_storage.batch_scan_trunc_max, - p_data->ble_set_storage.batch_scan_notify_threshold, - p_data->ble_set_storage.p_setup_cback, - p_data->ble_set_storage.p_thres_cback, - p_data->ble_set_storage.p_read_rep_cback, - p_data->ble_set_storage.ref_value); - } - - if (BTM_CMD_STARTED != btm_status) { - bta_ble_scan_setup_cb(BTM_BLE_BATCH_SCAN_CFG_STRG_EVT, p_data->ble_set_storage.ref_value, - btm_status); - } -} -#endif // #if (BLE_HOST_SETUP_STORAGE_EN == TRUE) - -#if (BLE_HOST_BATCH_SCAN_EN == TRUE) -/******************************************************************************* -** -** Function bta_dm_ble_enable_batch_scan -** -** Description This function sets up the parameters and enables batch scan -** -** Parameters: -** -*******************************************************************************/ -void bta_dm_ble_enable_batch_scan (tBTA_DM_MSG *p_data) -{ - tBTM_STATUS btm_status = 0; - tBTM_BLE_VSC_CB cmn_ble_vsc_cb; - - BTM_BleGetVendorCapabilities(&cmn_ble_vsc_cb); - - if (0 != cmn_ble_vsc_cb.tot_scan_results_strg) { - btm_status = BTM_BleEnableBatchScan(p_data->ble_enable_scan.scan_mode, - p_data->ble_enable_scan.scan_int, - p_data->ble_enable_scan.scan_window, - p_data->ble_enable_scan.discard_rule, - p_data->ble_enable_scan.addr_type, - p_data->ble_enable_scan.ref_value); - } - - if (BTM_CMD_STARTED != btm_status) { - bta_ble_scan_setup_cb(BTM_BLE_BATCH_SCAN_ENABLE_EVT, p_data->ble_enable_scan.ref_value, - btm_status); - } -} - -/******************************************************************************* -** -** Function bta_dm_ble_disable_batch_scan -** -** Description This function disables the batch scan -** -** Parameters: -** -*******************************************************************************/ -void bta_dm_ble_disable_batch_scan (tBTA_DM_MSG *p_data) -{ - UNUSED(p_data); - tBTM_STATUS btm_status = 0; - tBTM_BLE_VSC_CB cmn_ble_vsc_cb; - - BTM_BleGetVendorCapabilities(&cmn_ble_vsc_cb); - - if (0 != cmn_ble_vsc_cb.tot_scan_results_strg) { - btm_status = BTM_BleDisableBatchScan(p_data->ble_disable_scan.ref_value); - } - - if (BTM_CMD_STARTED != btm_status) { - bta_ble_scan_setup_cb(BTM_BLE_BATCH_SCAN_DISABLE_EVT, p_data->ble_enable_scan.ref_value, - btm_status); - } -} -#endif // #if (BLE_HOST_BATCH_SCAN_EN == TRUE) - -#if (BLE_HOST_READ_SCAN_REPORTS_EN == TRUE) -/******************************************************************************* -** -** Function bta_dm_ble_read_scan_reports -** -** Description This function reads the batch scan reports -** -** Parameters: -** -*******************************************************************************/ -void bta_dm_ble_read_scan_reports(tBTA_DM_MSG *p_data) -{ - tBTM_STATUS btm_status = 0; - tBTM_BLE_VSC_CB cmn_ble_vsc_cb; - - BTM_BleGetVendorCapabilities(&cmn_ble_vsc_cb); - - if (0 != cmn_ble_vsc_cb.tot_scan_results_strg) { - btm_status = BTM_BleReadScanReports(p_data->ble_read_reports.scan_type, - p_data->ble_read_reports.ref_value); - } - - if (BTM_CMD_STARTED != btm_status) { - bta_ble_scan_setup_cb(BTM_BLE_BATCH_SCAN_READ_REPTS_EVT, p_data->ble_enable_scan.ref_value, - btm_status); - } -} -#endif // #if (BLE_HOST_READ_SCAN_REPORTS_EN == TRUE) - -#if (BLE_HOST_TRACK_ADVERTISER_EN == TRUE) -/******************************************************************************* -** -** Function bta_dm_ble_track_advertiser -** -** Description This function tracks the specific advertiser -** -** Parameters: -** -*******************************************************************************/ -void bta_dm_ble_track_advertiser(tBTA_DM_MSG *p_data) -{ - tBTM_STATUS btm_status = 0; - BD_ADDR bda; - memset(&bda, 0 , sizeof(BD_ADDR)); - tBTM_BLE_VSC_CB cmn_ble_vsc_cb; - tBTA_DM_BLE_TRACK_ADV_DATA track_adv_data; - - BTM_BleGetVendorCapabilities(&cmn_ble_vsc_cb); - - if (0 != cmn_ble_vsc_cb.tot_scan_results_strg) { - btm_status = BTM_BleTrackAdvertiser((tBTM_BLE_TRACK_ADV_CBACK *) - p_data->ble_track_advert.p_track_adv_cback, - p_data->ble_track_advert.ref_value); - } - - if (BTM_CMD_STARTED != btm_status) { - memset(&track_adv_data, 0, sizeof(tBTA_DM_BLE_TRACK_ADV_DATA)); - track_adv_data.advertiser_info_present = NO_ADV_INFO_PRESENT; /* Indicates failure */ - track_adv_data.client_if = (UINT8)p_data->ble_track_advert.ref_value; - p_data->ble_track_advert.p_track_adv_cback(&track_adv_data); - } -} -#endif // #if (BLE_HOST_TRACK_ADVERTISER_EN == TRUE) - -/******************************************************************************* -** -** Function bta_ble_scan_setup_cb -** -** Description Handle the setup callback from BTM layer and forward it to app layer -** -** Parameters: -** -*******************************************************************************/ -void bta_ble_scan_setup_cb(tBTM_BLE_BATCH_SCAN_EVT evt, tBTM_BLE_REF_VALUE ref_value, - tBTM_STATUS status) -{ - tBTA_BLE_BATCH_SCAN_EVT bta_evt = 0; - - APPL_TRACE_DEBUG("bta_ble_scan_setup_cb : evt: %d, ref_value: %d, status:%d", evt, - ref_value, status); - - switch (evt) { - case BTM_BLE_BATCH_SCAN_ENABLE_EVT: - bta_evt = BTA_BLE_BATCH_SCAN_ENB_EVT; - break; - case BTM_BLE_BATCH_SCAN_CFG_STRG_EVT: - bta_evt = BTA_BLE_BATCH_SCAN_CFG_STRG_EVT; - break; - case BTM_BLE_BATCH_SCAN_DISABLE_EVT: - bta_evt = BTA_BLE_BATCH_SCAN_DIS_EVT; - break; - case BTM_BLE_BATCH_SCAN_PARAM_EVT: - bta_evt = BTA_BLE_BATCH_SCAN_PARAM_EVT; - break; - default: - break; - } - - if (NULL != bta_dm_cb.p_setup_cback) { - bta_dm_cb.p_setup_cback(bta_evt, ref_value, status); - } -} - - -#if BLE_ANDROID_CONTROLLER_SCAN_FILTER == TRUE -/******************************************************************************* -** -** Function bta_ble_scan_pf_cmpl -** -** Description ADV payload filtering operation complete callback -** -** -** Returns TRUE if handled, otherwise FALSE. -** -*******************************************************************************/ -static void bta_ble_scan_cfg_cmpl(tBTM_BLE_PF_ACTION action, tBTM_BLE_SCAN_COND_OP cfg_op, - tBTM_BLE_PF_AVBL_SPACE avbl_space, tBTM_STATUS status, - tBTM_BLE_REF_VALUE ref_value) -{ - tBTA_STATUS st = (status == BTM_SUCCESS) ? BTA_SUCCESS : BTA_FAILURE; - - APPL_TRACE_DEBUG("bta_ble_scan_cfg_cmpl: %d, %d, %d, %d", action, cfg_op, avbl_space, status); - - if (bta_dm_cb.p_scan_filt_cfg_cback) { - bta_dm_cb.p_scan_filt_cfg_cback(action, cfg_op, avbl_space, st, ref_value); - } -} - -/******************************************************************************* -** -** Function bta_dm_cfg_filter_cond -** -** Description This function configure adv payload filtering condition -** -** Parameters: -** -*******************************************************************************/ -void bta_dm_cfg_filter_cond (tBTA_DM_MSG *p_data) -{ - tBTM_STATUS st = BTM_MODE_UNSUPPORTED; - tBTA_STATUS status = BTA_FAILURE; - - tBTM_BLE_VSC_CB cmn_vsc_cb; - - APPL_TRACE_DEBUG("bta_dm_cfg_filter_cond"); - BTM_BleGetVendorCapabilities(&cmn_vsc_cb); - if (0 != cmn_vsc_cb.filter_support) { - if ((st = BTM_BleCfgFilterCondition(p_data->ble_cfg_filter_cond.action, - p_data->ble_cfg_filter_cond.cond_type, - (tBTM_BLE_PF_FILT_INDEX)p_data->ble_cfg_filter_cond.filt_index, - (tBTM_BLE_PF_COND_PARAM *)p_data->ble_cfg_filter_cond.p_cond_param, - bta_ble_scan_cfg_cmpl, p_data->ble_cfg_filter_cond.ref_value)) - == BTM_CMD_STARTED) { - bta_dm_cb.p_scan_filt_cfg_cback = p_data->ble_cfg_filter_cond.p_filt_cfg_cback; - return; - } - } - - if (p_data->ble_cfg_filter_cond.p_filt_cfg_cback) { - p_data->ble_cfg_filter_cond.p_filt_cfg_cback(BTA_DM_BLE_PF_CONFIG_EVT, - p_data->ble_cfg_filter_cond.cond_type, 0, status, - p_data->ble_cfg_filter_cond.ref_value); - } - return; -} - -/******************************************************************************* -** -** Function bta_dm_enable_scan_filter -** -** Description This function enable/disable adv payload filtering condition -** -** Parameters: -** -*******************************************************************************/ -void bta_dm_enable_scan_filter(tBTA_DM_MSG *p_data) -{ - tBTM_STATUS st = BTM_MODE_UNSUPPORTED; - tBTA_STATUS status = BTA_FAILURE; - - tBTM_BLE_VSC_CB cmn_vsc_cb; - APPL_TRACE_DEBUG("bta_dm_enable_scan_filter"); - BTM_BleGetVendorCapabilities(&cmn_vsc_cb); - - if (0 != cmn_vsc_cb.filter_support) { - if ((st = BTM_BleEnableDisableFilterFeature(p_data->ble_enable_scan_filt.action, - p_data->ble_enable_scan_filt.p_filt_status_cback, - (tBTM_BLE_REF_VALUE)p_data->ble_enable_scan_filt.ref_value)) == BTM_CMD_STARTED) { - bta_dm_cb.p_scan_filt_status_cback = p_data->ble_enable_scan_filt.p_filt_status_cback; - } - return; - } - - if (p_data->ble_enable_scan_filt.p_filt_status_cback) { - p_data->ble_enable_scan_filt.p_filt_status_cback (BTA_DM_BLE_PF_ENABLE_EVT, - p_data->ble_enable_scan_filt.ref_value, status); - } - -} - -/******************************************************************************* -** -** Function bta_dm_scan_filter_param_setup -** -** Description This function sets up scan filter params -** -** Parameters: -** -*******************************************************************************/ -void bta_dm_scan_filter_param_setup (tBTA_DM_MSG *p_data) -{ - tBTM_STATUS st = BTM_MODE_UNSUPPORTED; - tBTA_STATUS status = BTA_FAILURE; - - tBTM_BLE_VSC_CB cmn_vsc_cb; - - APPL_TRACE_DEBUG("bta_dm_scan_filter_param_setup"); - BTM_BleGetVendorCapabilities(&cmn_vsc_cb); - if (0 != cmn_vsc_cb.filter_support) { - if ((st = BTM_BleAdvFilterParamSetup(p_data->ble_scan_filt_param_setup.action, - p_data->ble_scan_filt_param_setup.filt_index, - (tBTM_BLE_PF_FILT_PARAMS *)&p_data->ble_scan_filt_param_setup.filt_params, - p_data->ble_scan_filt_param_setup.p_target, - p_data->ble_scan_filt_param_setup.p_filt_param_cback, - p_data->ble_scan_filt_param_setup.ref_value)) == BTM_CMD_STARTED) { - bta_dm_cb.p_scan_filt_param_cback = p_data->ble_scan_filt_param_setup.p_filt_param_cback; - return; - } - } - - if (p_data->ble_scan_filt_param_setup.p_filt_param_cback) { - p_data->ble_scan_filt_param_setup.p_filt_param_cback (BTA_DM_BLE_PF_ENABLE_EVT, 0, - p_data->ble_scan_filt_param_setup.ref_value, status); - } - - return; -} -#endif - -#if (BLE_HOST_ENERGY_INFO_EN == TRUE) -/******************************************************************************* -** -** Function bta_ble_enable_scan_cmpl -** -** Description ADV payload filtering enable / disable complete callback -** -** -** Returns None -** -*******************************************************************************/ -static void bta_ble_energy_info_cmpl(tBTM_BLE_TX_TIME_MS tx_time, - tBTM_BLE_RX_TIME_MS rx_time, - tBTM_BLE_IDLE_TIME_MS idle_time, - tBTM_BLE_ENERGY_USED energy_used, - tBTM_STATUS status) -{ - tBTA_STATUS st = (status == BTM_SUCCESS) ? BTA_SUCCESS : BTA_FAILURE; - tBTA_DM_CONTRL_STATE ctrl_state = 0; -#if ((defined BTA_GATT_INCLUDED) && (BTA_GATT_INCLUDED == TRUE) && SDP_INCLUDED == TRUE) - if (BTA_SUCCESS == st) { - ctrl_state = bta_dm_pm_obtain_controller_state(); - } -#endif - if (bta_dm_cb.p_energy_info_cback) { - bta_dm_cb.p_energy_info_cback(tx_time, rx_time, idle_time, energy_used, ctrl_state, st); - } -} - -/******************************************************************************* -** -** Function bta_dm_ble_get_energy_info -** -** Description This function obtains the energy info -** -** Parameters: -** -*******************************************************************************/ -void bta_dm_ble_get_energy_info(tBTA_DM_MSG *p_data) -{ - tBTM_STATUS btm_status = 0; - - bta_dm_cb.p_energy_info_cback = p_data->ble_energy_info.p_energy_info_cback; - btm_status = BTM_BleGetEnergyInfo(bta_ble_energy_info_cmpl); - if (BTM_CMD_STARTED != btm_status) { - bta_ble_energy_info_cmpl(0, 0, 0, 0, btm_status); - } -} -#endif // #if (BLE_HOST_ENERGY_INFO_EN == TRUE) - #if ((defined BTA_GATT_INCLUDED) && (BTA_GATT_INCLUDED == TRUE) && SDP_INCLUDED == TRUE) #ifndef BTA_DM_GATT_CLOSE_DELAY_TOUT #define BTA_DM_GATT_CLOSE_DELAY_TOUT 1000 @@ -7180,28 +6478,4 @@ static void bta_dm_gattc_callback(tBTA_GATTC_EVT event, tBTA_GATTC *p_data) #endif /* #if (GATTC_INCLUDED == TRUE) */ #endif /* BTA_GATT_INCLUDED */ -#if BLE_VND_INCLUDED == TRUE -/******************************************************************************* -** -** Function bta_dm_ctrl_features_rd_cmpl_cback -** -** Description callback to handle controller feature read complete -** -** Parameters: -** -*******************************************************************************/ -static void bta_dm_ctrl_features_rd_cmpl_cback(tBTM_STATUS result) -{ - APPL_TRACE_DEBUG("%s status = %d ", __FUNCTION__, result); - if (result == BTM_SUCCESS) { - if (bta_dm_cb.p_sec_cback) { - bta_dm_cb.p_sec_cback(BTA_DM_LE_FEATURES_READ, NULL); - } - } else { - APPL_TRACE_ERROR("%s Ctrl BLE feature read failed: status :%d", __FUNCTION__, result); - } - -} -#endif /* BLE_VND_INCLUDED */ - #endif /* BLE_INCLUDED */ diff --git a/components/bt/host/bluedroid/bta/dm/bta_dm_api.c b/components/bt/host/bluedroid/bta/dm/bta_dm_api.c index 6dcce7beacd..aaf0d8864fe 100644 --- a/components/bt/host/bluedroid/bta/dm/bta_dm_api.c +++ b/components/bt/host/bluedroid/bta/dm/bta_dm_api.c @@ -73,8 +73,10 @@ tBTA_STATUS BTA_EnableBluetooth(tBTA_DM_SEC_CBACK *p_cback) bta_sys_register (BTA_ID_DM, &bta_dm_reg ); bta_sys_register (BTA_ID_DM_SEARCH, &bta_dm_search_reg ); +#if (CLASSIC_BT_INCLUDED == TRUE) /* if UUID list is not provided as static data */ bta_sys_eir_register(bta_dm_eir_update_uuid); +#endif // (CLASSIC_BT_INCLUDED == TRUE) if ((p_msg = (tBTA_DM_API_ENABLE *) osi_malloc(sizeof(tBTA_DM_API_ENABLE))) != NULL) { p_msg->hdr.event = BTA_DM_API_ENABLE_EVT; @@ -110,53 +112,6 @@ tBTA_STATUS BTA_DisableBluetooth(void) return BTA_SUCCESS; } -#if (BLE_HOST_ENABLE_TEST_MODE_EN == TRUE) -/******************************************************************************* -** -** Function BTA_EnableTestMode -** -** Description Enables bluetooth device under test mode -** -** -** Returns tBTA_STATUS -** -*******************************************************************************/ -tBTA_STATUS BTA_EnableTestMode(void) -{ - BT_HDR *p_msg; - - APPL_TRACE_API("BTA_EnableTestMode"); - - if ((p_msg = (BT_HDR *) osi_malloc(sizeof(BT_HDR))) != NULL) { - p_msg->event = BTA_DM_API_ENABLE_TEST_MODE_EVT; - bta_sys_sendmsg(p_msg); - return BTA_SUCCESS; - } - return BTA_FAILURE; -} - -/******************************************************************************* -** -** Function BTA_DisableTestMode -** -** Description Disable bluetooth device under test mode -** -** -** Returns None -** -*******************************************************************************/ -void BTA_DisableTestMode(void) -{ - BT_HDR *p_msg; - - APPL_TRACE_API("BTA_DisableTestMode"); - - if ((p_msg = (BT_HDR *) osi_malloc(sizeof(BT_HDR))) != NULL) { - p_msg->event = BTA_DM_API_DISABLE_TEST_MODE_EVT; - bta_sys_sendmsg(p_msg); - } -} -#endif // #if (BLE_HOST_ENABLE_TEST_MODE_EN == TRUE) /******************************************************************************* ** @@ -540,18 +495,6 @@ void BTA_DmClearWhiteList(tBTA_UPDATE_WHITELIST_CBACK *update_wl_cb) } } -#if (BLE_HOST_READ_TX_POWER_EN == TRUE) -void BTA_DmBleReadAdvTxPower(tBTA_CMPL_CB *cmpl_cb) -{ - tBTA_DM_API_READ_ADV_TX_POWER *p_msg; - if ((p_msg = (tBTA_DM_API_READ_ADV_TX_POWER *)osi_malloc(sizeof(tBTA_DM_API_READ_ADV_TX_POWER))) != NULL) { - p_msg->hdr.event = BTA_DM_API_BLE_READ_ADV_TX_POWER_EVT; - p_msg->read_tx_power_cb = cmpl_cb; - bta_sys_sendmsg(p_msg); - } -} -#endif // BLE_HOST_READ_TX_POWER_EN - void BTA_DmBleReadChannelMap(BD_ADDR remote_device, tBTA_CMPL_CB *p_callback) { if (!remote_device || !p_callback) { @@ -1222,31 +1165,6 @@ tBTA_STATUS BTA_DmRemoveLocalDiRecord(UINT32 handle) } #endif ///SDP_INCLUDED == TRUE -#if (BLE_HOST_EXECUTE_CBACK_EN == TRUE) -/******************************************************************************* -** -** Function bta_dmexecutecallback -** -** Description This function will request BTA to execute a call back in the context of BTU task -** This API was named in lower case because it is only intended -** for the internal customers(like BTIF). -** -** Returns void -** -*******************************************************************************/ -void bta_dmexecutecallback (tBTA_DM_EXEC_CBACK *p_callback, void *p_param) -{ - tBTA_DM_API_EXECUTE_CBACK *p_msg; - - if ((p_msg = (tBTA_DM_API_EXECUTE_CBACK *) osi_malloc(sizeof(tBTA_DM_API_EXECUTE_CBACK))) != NULL) { - p_msg->hdr.event = BTA_DM_API_EXECUTE_CBACK_EVT; - p_msg->p_param = p_param; - p_msg->p_exec_cback = p_callback; - bta_sys_sendmsg(p_msg); - } -} -#endif // #if (BLE_HOST_EXECUTE_CBACK_EN == TRUE) - /******************************************************************************* ** ** Function BTA_DmAddBleKey @@ -1456,69 +1374,6 @@ void BTA_DmSetBlePrefConnParams(BD_ADDR bd_addr, #endif } -#if (BLE_HOST_CONN_SCAN_PARAM_EN == TRUE) -/******************************************************************************* -** -** Function BTA_DmSetBleConnScanParams -** -** Description This function is called to set scan parameters used in -** BLE connection request -** -** Parameters: scan_interval - scan interval -** scan_window - scan window -** -** Returns void -** -*******************************************************************************/ -void BTA_DmSetBleConnScanParams(UINT32 scan_interval, UINT32 scan_window) -{ - tBTA_DM_API_BLE_SCAN_PARAMS *p_msg; - if ((p_msg = (tBTA_DM_API_BLE_SCAN_PARAMS *)osi_malloc(sizeof(tBTA_DM_API_BLE_SCAN_PARAMS))) != NULL) { - memset(p_msg, 0, sizeof(tBTA_DM_API_BLE_SCAN_PARAMS)); - p_msg->hdr.event = BTA_DM_API_BLE_CONN_SCAN_PARAM_EVT; - p_msg->scan_int = scan_interval; - p_msg->scan_window = scan_window; - bta_sys_sendmsg(p_msg); - } -} -#endif // #if (BLE_HOST_CONN_SCAN_PARAM_EN == TRUE) - -#if (BLE_HOST_BLE_SCAN_PARAM_UNUSED == TRUE) -/******************************************************************************* -** -** Function BTA_DmSetBleScanParams -** -** Description This function is called to set scan parameters -** -** Parameters: client_if - Client IF -** scan_interval - scan interval -** scan_window - scan window -** scan_mode - scan mode -** scan_param_setup_status_cback - Set scan param status callback -** -** Returns void -** -*******************************************************************************/ -void BTA_DmSetBleScanParams(tGATT_IF client_if, UINT32 scan_interval, - UINT32 scan_window, tBLE_SCAN_MODE scan_mode, - tBLE_SCAN_PARAM_SETUP_CBACK scan_param_setup_cback) -{ - tBTA_DM_API_BLE_SCAN_PARAMS *p_msg; - - if ((p_msg = (tBTA_DM_API_BLE_SCAN_PARAMS *)osi_malloc(sizeof(tBTA_DM_API_BLE_SCAN_PARAMS))) != NULL) { - memset(p_msg, 0, sizeof(tBTA_DM_API_BLE_SCAN_PARAMS)); - p_msg->hdr.event = BTA_DM_API_BLE_SCAN_PARAM_EVT; - p_msg->client_if = client_if; - p_msg->scan_int = scan_interval; - p_msg->scan_window = scan_window; - p_msg->scan_mode = scan_mode; - p_msg->scan_param_setup_cback = scan_param_setup_cback; - - bta_sys_sendmsg(p_msg); - } -} -#endif // #if (BLE_HOST_BLE_SCAN_PARAM_UNUSED == TRUE) - #if (BLE_42_SCAN_EN == TRUE) /******************************************************************************* ** @@ -1725,6 +1580,7 @@ void BTA_DmBleSetScanRspRaw (UINT8 *p_raw_scan_rsp, UINT32 raw_scan_rsp_len, } #endif // #if (BLE_42_ADV_EN == TRUE) +#if ((BLE_42_SCAN_EN == TRUE) || (BLE_50_EXTEND_SCAN_EN == TRUE)) /******************************************************************************* ** ** Function BTA_DmUpdateDuplicateExceptionalList @@ -1752,165 +1608,7 @@ void BTA_DmUpdateDuplicateExceptionalList(UINT8 subcode, UINT32 type, BD_ADDR de bta_sys_sendmsg(p_msg); } } -#if (BLE_HOST_SETUP_STORAGE_EN == TRUE) -/******************************************************************************* -** -** Function BTA_DmBleSetStorageParams -** -** Description This function is called to override the BTA scan response. -** -** Parameters batch_scan_full_max -Max storage space (in %) allocated to full scanning -** batch_scan_trunc_max -Max storage space (in %) allocated to truncated scanning -** batch_scan_notify_threshold -Setup notification level based on total space -** p_setup_cback - Setup callback pointer -** p_thres_cback - Threshold callback pointer -** p_rep_cback - Reports callback pointer -** ref_value - Ref value -** -** Returns None -** -*******************************************************************************/ -extern void BTA_DmBleSetStorageParams(UINT8 batch_scan_full_max, - UINT8 batch_scan_trunc_max, - UINT8 batch_scan_notify_threshold, - tBTA_BLE_SCAN_SETUP_CBACK *p_setup_cback, - tBTA_BLE_SCAN_THRESHOLD_CBACK *p_thres_cback, - tBTA_BLE_SCAN_REP_CBACK *p_rep_cback, - tBTA_DM_BLE_REF_VALUE ref_value) -{ - tBTA_DM_API_SET_STORAGE_CONFIG *p_msg; - bta_dm_cb.p_setup_cback = p_setup_cback; - if ((p_msg = (tBTA_DM_API_SET_STORAGE_CONFIG *) - osi_malloc(sizeof(tBTA_DM_API_SET_STORAGE_CONFIG))) != NULL) { - p_msg->hdr.event = BTA_DM_API_BLE_SETUP_STORAGE_EVT; - p_msg->p_setup_cback = bta_ble_scan_setup_cb; - p_msg->p_thres_cback = p_thres_cback; - p_msg->p_read_rep_cback = p_rep_cback; - p_msg->ref_value = ref_value; - p_msg->batch_scan_full_max = batch_scan_full_max; - p_msg->batch_scan_trunc_max = batch_scan_trunc_max; - p_msg->batch_scan_notify_threshold = batch_scan_notify_threshold; - bta_sys_sendmsg(p_msg); - } -} -#endif // #if (BLE_HOST_SETUP_STORAGE_EN == TRUE) - -#if (BLE_HOST_BATCH_SCAN_EN == TRUE) -/******************************************************************************* -** -** Function BTA_DmBleEnableBatchScan -** -** Description This function is called to enable the batch scan -** -** Parameters scan_mode -Batch scan mode -** scan_interval - Scan interval -** scan_window - Scan window -** discard_rule -Discard rules -** addr_type - Address type -** ref_value - Reference value -** -** Returns None -** -*******************************************************************************/ -extern void BTA_DmBleEnableBatchScan(tBTA_BLE_BATCH_SCAN_MODE scan_mode, - UINT32 scan_interval, UINT32 scan_window, - tBTA_BLE_DISCARD_RULE discard_rule, - tBLE_ADDR_TYPE addr_type, - tBTA_DM_BLE_REF_VALUE ref_value) -{ - tBTA_DM_API_ENABLE_SCAN *p_msg; - - if ((p_msg = (tBTA_DM_API_ENABLE_SCAN *) osi_malloc(sizeof(tBTA_DM_API_ENABLE_SCAN))) != NULL) { - p_msg->hdr.event = BTA_DM_API_BLE_ENABLE_BATCH_SCAN_EVT; - p_msg->scan_mode = scan_mode; - p_msg->scan_int = scan_interval; - p_msg->scan_window = scan_window; - p_msg->discard_rule = discard_rule; - p_msg->addr_type = addr_type; - p_msg->ref_value = ref_value; - bta_sys_sendmsg(p_msg); - } -} - -/******************************************************************************* -** -** Function BTA_DmBleDisableBatchScan -** -** Description This function is called to disable the batch scan -** -** Parameters ref_value - Reference value -** -** Returns None -** -*******************************************************************************/ -extern void BTA_DmBleDisableBatchScan(tBTA_DM_BLE_REF_VALUE ref_value) -{ - tBTA_DM_API_DISABLE_SCAN *p_msg; - - if ((p_msg = (tBTA_DM_API_DISABLE_SCAN *) - osi_malloc(sizeof(tBTA_DM_API_DISABLE_SCAN))) != NULL) { - p_msg->hdr.event = BTA_DM_API_BLE_DISABLE_BATCH_SCAN_EVT; - p_msg->ref_value = ref_value; - bta_sys_sendmsg(p_msg); - } -} -#endif // #if (BLE_HOST_BATCH_SCAN_EN == TRUE) - -#if (BLE_HOST_READ_SCAN_REPORTS_EN == TRUE) -/******************************************************************************* -** -** Function BTA_DmBleReadScanReports -** -** Description This function is called to read scan reports -** -** Parameters scan_type -Batch scan mode -** ref_value - Reference value -** -** Returns None -** -*******************************************************************************/ -extern void BTA_DmBleReadScanReports(tBTA_BLE_BATCH_SCAN_MODE scan_type, - tBTA_DM_BLE_REF_VALUE ref_value) -{ - tBTA_DM_API_READ_SCAN_REPORTS *p_msg; - - if ((p_msg = (tBTA_DM_API_READ_SCAN_REPORTS *) - osi_malloc(sizeof(tBTA_DM_API_READ_SCAN_REPORTS))) != NULL) { - p_msg->hdr.event = BTA_DM_API_BLE_READ_SCAN_REPORTS_EVT; - p_msg->scan_type = scan_type; - p_msg->ref_value = ref_value; - bta_sys_sendmsg(p_msg); - } -} -#endif // #if (BLE_HOST_READ_SCAN_REPORTS_EN == TRUE) - -#if (BLE_HOST_TRACK_ADVERTISER_EN == TRUE) -/******************************************************************************* -** -** Function BTA_DmBleTrackAdvertiser -** -** Description This function is called to track advertiser -** -** Parameters ref_value - Reference value -** p_track_adv_cback - Track ADV callback -** -** Returns None -** -*******************************************************************************/ -extern void BTA_DmBleTrackAdvertiser(tBTA_DM_BLE_REF_VALUE ref_value, - tBTA_BLE_TRACK_ADV_CBACK *p_track_adv_cback) -{ - tBTA_DM_API_TRACK_ADVERTISER *p_msg; - - if ((p_msg = (tBTA_DM_API_TRACK_ADVERTISER *) - osi_malloc(sizeof(tBTA_DM_API_TRACK_ADVERTISER))) != NULL) { - p_msg->hdr.event = BTA_DM_API_BLE_TRACK_ADVERTISER_EVT; - p_msg->p_track_adv_cback = p_track_adv_cback; - p_msg->ref_value = ref_value; - bta_sys_sendmsg(p_msg); - } -} -#endif // #if (BLE_HOST_TRACK_ADVERTISER_EN == TRUE) +#endif // ((BLE_42_SCAN_EN == TRUE) || (BLE_50_EXTEND_SCAN_EN == TRUE)) #endif @@ -1921,25 +1619,25 @@ extern void BTA_DmBleTrackAdvertiser(tBTA_DM_BLE_REF_VALUE ref_value, #if (BLE_42_ADV_EN == TRUE) /******************************************************************************* ** -** Function BTA_DmBleBroadcast +** Function BTA_DmBleAdvStop ** ** Description This function starts or stops LE broadcasting. ** -** Parameters start: start or stop broadcast. +** Parameters start: always be false. ** ** Returns None ** *******************************************************************************/ -extern void BTA_DmBleBroadcast (BOOLEAN start, tBTA_START_STOP_ADV_CMPL_CBACK *p_start_stop_adv_cb) +extern void BTA_DmBleAdvStop (BOOLEAN start, tBTA_START_STOP_ADV_CMPL_CBACK *p_start_stop_adv_cb) { tBTA_DM_API_BLE_OBSERVE *p_msg; - APPL_TRACE_API("BTA_DmBleBroadcast: start = %d \n", start); + APPL_TRACE_API("BTA_DmBleAdvStop: start = %d \n", start); if ((p_msg = (tBTA_DM_API_BLE_OBSERVE *) osi_malloc(sizeof(tBTA_DM_API_BLE_OBSERVE))) != NULL) { memset(p_msg, 0, sizeof(tBTA_DM_API_BLE_OBSERVE)); - p_msg->hdr.event = BTA_DM_API_BLE_BROADCAST_EVT; + p_msg->hdr.event = BTA_DM_API_BLE_ADVSTOP_EVT; p_msg->start = start; if (start == FALSE){ p_msg->p_stop_adv_cback= p_start_stop_adv_cb; @@ -1951,6 +1649,8 @@ extern void BTA_DmBleBroadcast (BOOLEAN start, tBTA_START_STOP_ADV_CMPL_CBACK *p #endif // #if (BLE_42_ADV_EN == TRUE) #endif + +#if (BLE_GATT_BGCONN == TRUE) /******************************************************************************* ** ** Function BTA_DmBleSetBgConnType @@ -1981,6 +1681,7 @@ void BTA_DmBleSetBgConnType(tBTA_DM_BLE_CONN_TYPE bg_conn_type, tBTA_DM_BLE_SEL_ } #endif } +#endif// (BLE_GATT_BGCONN == TRUE) /******************************************************************************* ** @@ -2258,390 +1959,6 @@ void BTA_DmBleSetKeyMaterial(const uint8_t *session_key, const uint8_t *iv) } #endif -#if (BLE_HOST_BLE_MULTI_ADV_EN == TRUE) -/******************************************************************************* -** -** Function BTA_BleEnableAdvInstance -** -** Description This function enable a Multi-ADV instance with the specified -** adv parameters -** -** Parameters p_params: pointer to the adv parameter structure. -** p_cback: callback function associated to this adv instance. -** p_ref: reference data pointer to this adv instance. -** -** Returns BTA_SUCCESS if command started successfully; otherwise failure. -** -*******************************************************************************/ -void BTA_BleEnableAdvInstance (tBTA_BLE_ADV_PARAMS *p_params, - tBTA_BLE_MULTI_ADV_CBACK *p_cback, - void *p_ref) -{ - ///This function just used for vendor debug - tBTA_DM_API_BLE_MULTI_ADV_ENB *p_msg; - UINT16 len = sizeof(tBTA_BLE_ADV_PARAMS) + sizeof(tBTA_DM_API_BLE_MULTI_ADV_ENB); - - APPL_TRACE_API ("BTA_BleEnableAdvInstance"); - - if ((p_msg = (tBTA_DM_API_BLE_MULTI_ADV_ENB *) osi_malloc(len)) != NULL) { - memset(p_msg, 0, sizeof(tBTA_DM_API_BLE_MULTI_ADV_ENB)); - - p_msg->hdr.event = BTA_DM_API_BLE_MULTI_ADV_ENB_EVT; - p_msg->p_cback = (void *)p_cback; - if (p_params != NULL) { - p_msg->p_params = (void *)(p_msg + 1); - memcpy(p_msg->p_params, p_params, sizeof(tBTA_BLE_ADV_PARAMS)); - } - p_msg->p_ref = p_ref; - - bta_sys_sendmsg(p_msg); - } -} - -/******************************************************************************* -** -** Function BTA_BleUpdateAdvInstParam -** -** Description This function update a Multi-ADV instance with the specified -** adv parameters. -** -** Parameters inst_id: Adv instance to update the parameter. -** p_params: pointer to the adv parameter structure. -** -** Returns BTA_SUCCESS if command started successfully; otherwise failure. -** -*******************************************************************************/ -void BTA_BleUpdateAdvInstParam (UINT8 inst_id, tBTA_BLE_ADV_PARAMS *p_params) -{ - ///This function just used for vendor debug - tBTA_DM_API_BLE_MULTI_ADV_PARAM *p_msg; - UINT16 len = sizeof(tBTA_BLE_ADV_PARAMS) + sizeof(tBTA_DM_API_BLE_MULTI_ADV_PARAM); - - APPL_TRACE_API ("BTA_BleUpdateAdvInstParam"); - if ((p_msg = (tBTA_DM_API_BLE_MULTI_ADV_PARAM *) osi_malloc(len)) != NULL) { - memset(p_msg, 0, sizeof(tBTA_DM_API_BLE_MULTI_ADV_PARAM)); - p_msg->hdr.event = BTA_DM_API_BLE_MULTI_ADV_PARAM_UPD_EVT; - p_msg->inst_id = inst_id; - p_msg->p_params = (void *)(p_msg + 1); - memcpy(p_msg->p_params, p_params, sizeof(tBTA_BLE_ADV_PARAMS)); - - bta_sys_sendmsg(p_msg); - } -} - -/******************************************************************************* -** -** Function BTA_BleCfgAdvInstData -** -** Description This function configure a Multi-ADV instance with the specified -** adv data or scan response data. -** -** Parameter inst_id: Adv instance to configure the adv data or scan response. -** is_scan_rsp: is the data scan response or adv data. -** data_mask: adv data type as bit mask. -** p_data: pointer to the ADV data structure tBTA_BLE_ADV_DATA. This -** memory space can not be freed until BTA_BLE_MULTI_ADV_DATA_EVT -** is sent to application. -** -** Returns BTA_SUCCESS if command started successfully; otherwise failure. -** -*******************************************************************************/ -void BTA_BleCfgAdvInstData (UINT8 inst_id, BOOLEAN is_scan_rsp, - tBTA_BLE_AD_MASK data_mask, - tBTA_BLE_ADV_DATA *p_data) -{ - ///This function just used for vendor debug - tBTA_DM_API_BLE_MULTI_ADV_DATA *p_msg; - UINT16 len = sizeof(tBTA_DM_API_BLE_MULTI_ADV_DATA) ; - - APPL_TRACE_API ("BTA_BleCfgAdvInstData"); - - if ((p_msg = (tBTA_DM_API_BLE_MULTI_ADV_DATA *) osi_malloc(len)) != NULL) { - memset(p_msg, 0, len); - p_msg->hdr.event = BTA_DM_API_BLE_MULTI_ADV_DATA_EVT; - p_msg->inst_id = inst_id; - p_msg->is_scan_rsp = is_scan_rsp; - p_msg->data_mask = data_mask; - p_msg->p_data = p_data; - - bta_sys_sendmsg(p_msg); - } -} - -/******************************************************************************* -** -** Function BTA_BleDisableAdvInstance -** -** Description This function disable a Multi-ADV instance. -** -** Parameter inst_id: instance ID to disable. -** -** Returns BTA_SUCCESS if command started successfully; otherwise failure. -** -*******************************************************************************/ -void BTA_BleDisableAdvInstance (UINT8 inst_id) //this function just used for vendor debug -{ - tBTA_DM_API_BLE_MULTI_ADV_DISABLE *p_msg; - - APPL_TRACE_API ("BTA_BleDisableAdvInstance: %d", inst_id); - if ((p_msg = (tBTA_DM_API_BLE_MULTI_ADV_DISABLE *) - osi_malloc(sizeof(tBTA_DM_API_BLE_MULTI_ADV_DISABLE))) != NULL) { - memset(p_msg, 0, sizeof(tBTA_DM_API_BLE_MULTI_ADV_DISABLE)); - p_msg->hdr.event = BTA_DM_API_BLE_MULTI_ADV_DISABLE_EVT; - p_msg->inst_id = inst_id; - bta_sys_sendmsg(p_msg); - } -} -#endif // #if (BLE_HOST_BLE_MULTI_ADV_EN == TRUE) - -/******************************************************************************* -** -** Function BTA_DmBleCfgFilterCondition -** -** Description This function is called to configure the adv data payload filter -** condition. -** -** Parameters action: to read/write/clear -** cond_type: filter condition type -** filt_index - Filter index -** p_cond: filter condition parameter -** p_cmpl_back - Command completed callback -** ref_value - Reference value -** -** Returns void -** -*******************************************************************************/ -void BTA_DmBleCfgFilterCondition(tBTA_DM_BLE_SCAN_COND_OP action, - tBTA_DM_BLE_PF_COND_TYPE cond_type, - tBTA_DM_BLE_PF_FILT_INDEX filt_index, - tBTA_DM_BLE_PF_COND_PARAM *p_cond, - tBTA_DM_BLE_PF_CFG_CBACK *p_cmpl_cback, - tBTA_DM_BLE_REF_VALUE ref_value) -{ -#if BLE_ANDROID_CONTROLLER_SCAN_FILTER == TRUE - tBTA_DM_API_CFG_FILTER_COND *p_msg; - APPL_TRACE_API ("BTA_DmBleCfgFilterCondition: %d, %d", action, cond_type); - - UINT16 len = sizeof(tBTA_DM_API_CFG_FILTER_COND) + - sizeof(tBTA_DM_BLE_PF_COND_PARAM); - UINT8 *p; - - if (NULL != p_cond) { - switch (cond_type) { - case BTA_DM_BLE_PF_SRVC_DATA_PATTERN: - case BTA_DM_BLE_PF_MANU_DATA: - /* Length of pattern and pattern mask and other elements in */ - /* tBTA_DM_BLE_PF_MANU_COND */ - len += ((p_cond->manu_data.data_len) * 2) + - sizeof(UINT16) + sizeof(UINT16) + sizeof(UINT8); - break; - - case BTA_DM_BLE_PF_LOCAL_NAME: - len += ((p_cond->local_name.data_len) + sizeof(UINT8)); - break; - - case BTM_BLE_PF_SRVC_UUID: - case BTM_BLE_PF_SRVC_SOL_UUID: - len += sizeof(tBLE_BD_ADDR) + sizeof(tBTA_DM_BLE_PF_COND_MASK); - break; - - default: - break; - } - } - - if ((p_msg = (tBTA_DM_API_CFG_FILTER_COND *) osi_malloc(len)) != NULL) { - memset (p_msg, 0, len); - - p_msg->hdr.event = BTA_DM_API_CFG_FILTER_COND_EVT; - p_msg->action = action; - p_msg->cond_type = cond_type; - p_msg->filt_index = filt_index; - p_msg->p_filt_cfg_cback = p_cmpl_cback; - p_msg->ref_value = ref_value; - if (p_cond) { - p_msg->p_cond_param = (tBTA_DM_BLE_PF_COND_PARAM *)(p_msg + 1); - memcpy(p_msg->p_cond_param, p_cond, sizeof(tBTA_DM_BLE_PF_COND_PARAM)); - - p = (UINT8 *)(p_msg->p_cond_param + 1); - - if (cond_type == BTA_DM_BLE_PF_SRVC_DATA_PATTERN || - cond_type == BTA_DM_BLE_PF_MANU_DATA) { - p_msg->p_cond_param->manu_data.p_pattern = p; - p_msg->p_cond_param->manu_data.data_len = p_cond->manu_data.data_len; - memcpy(p_msg->p_cond_param->manu_data.p_pattern, p_cond->manu_data.p_pattern, - p_cond->manu_data.data_len); - p += p_cond->manu_data.data_len; - - if (cond_type == BTA_DM_BLE_PF_MANU_DATA) { - p_msg->p_cond_param->manu_data.company_id_mask = - p_cond->manu_data.company_id_mask; - if ( p_cond->manu_data.p_pattern_mask != NULL) { - p_msg->p_cond_param->manu_data.p_pattern_mask = p; - memcpy(p_msg->p_cond_param->manu_data.p_pattern_mask, - p_cond->manu_data.p_pattern_mask, p_cond->manu_data.data_len); - } - } - } else if (cond_type == BTA_DM_BLE_PF_LOCAL_NAME) { - p_msg->p_cond_param->local_name.p_data = p; - p_msg->p_cond_param->local_name.data_len = - p_cond->local_name.data_len; - memcpy(p_msg->p_cond_param->local_name.p_data, - p_cond->local_name.p_data, p_cond->local_name.data_len); - } else if ((cond_type == BTM_BLE_PF_SRVC_UUID - || cond_type == BTM_BLE_PF_SRVC_SOL_UUID)) { - if (p_cond->srvc_uuid.p_target_addr != NULL) { - p_msg->p_cond_param->srvc_uuid.p_target_addr = (tBLE_BD_ADDR *)(p); - p_msg->p_cond_param->srvc_uuid.p_target_addr->type = - p_cond->srvc_uuid.p_target_addr->type; - memcpy(p_msg->p_cond_param->srvc_uuid.p_target_addr->bda, - p_cond->srvc_uuid.p_target_addr->bda, BD_ADDR_LEN); - p = (UINT8 *)( p_msg->p_cond_param->srvc_uuid.p_target_addr + 1); - } - if (p_cond->srvc_uuid.p_uuid_mask) { - p_msg->p_cond_param->srvc_uuid.p_uuid_mask = (tBTA_DM_BLE_PF_COND_MASK *)p; - memcpy(p_msg->p_cond_param->srvc_uuid.p_uuid_mask, - p_cond->srvc_uuid.p_uuid_mask, sizeof(tBTA_DM_BLE_PF_COND_MASK)); - } - } - } - - bta_sys_sendmsg(p_msg); - } -#else - UNUSED(action); - UNUSED(cond_type); - UNUSED(filt_index); - UNUSED(p_cond); - UNUSED(p_cmpl_cback); - UNUSED(ref_value); -#endif -} - -/******************************************************************************* -** -** Function BTA_DmBleScanFilterSetup -** -** Description This function is called to setup the adv data payload filter param -** -** Parameters p_target: enable the filter condition on a target device; if NULL -** filt_index - Filter index -** p_filt_params -Filter parameters -** ref_value - Reference value -** action - Add, delete or clear -** p_cmpl_back - Command completed callback -** -** Returns void -** -*******************************************************************************/ -void BTA_DmBleScanFilterSetup(UINT8 action, tBTA_DM_BLE_PF_FILT_INDEX filt_index, - tBTA_DM_BLE_PF_FILT_PARAMS *p_filt_params, - tBLE_BD_ADDR *p_target, - tBTA_DM_BLE_PF_PARAM_CBACK *p_cmpl_cback, - tBTA_DM_BLE_REF_VALUE ref_value) -{ -#if BLE_ANDROID_CONTROLLER_SCAN_FILTER == TRUE - tBTA_DM_API_SCAN_FILTER_PARAM_SETUP *p_msg; - APPL_TRACE_API ("BTA_DmBleScanFilterSetup: %d", action); - - UINT16 len = sizeof(tBTA_DM_API_SCAN_FILTER_PARAM_SETUP) + sizeof(tBLE_BD_ADDR); - - if ((p_msg = (tBTA_DM_API_SCAN_FILTER_PARAM_SETUP *) osi_malloc(len)) != NULL) { - memset (p_msg, 0, len); - - p_msg->hdr.event = BTA_DM_API_SCAN_FILTER_SETUP_EVT; - p_msg->action = action; - p_msg->filt_index = filt_index; - if (p_filt_params) { - memcpy(&p_msg->filt_params, p_filt_params, sizeof(tBTA_DM_BLE_PF_FILT_PARAMS)); - } - p_msg->p_filt_param_cback = p_cmpl_cback; - p_msg->ref_value = ref_value; - - if (p_target) { - p_msg->p_target = (tBLE_BD_ADDR *)(p_msg + 1); - memcpy(p_msg->p_target, p_target, sizeof(tBLE_BD_ADDR)); - } - - bta_sys_sendmsg(p_msg); - } -#else - UNUSED(action); - UNUSED(filt_index); - UNUSED(p_filt_params); - UNUSED(p_target); - UNUSED(p_cmpl_cback); - UNUSED(ref_value); -#endif -} - -#if (BLE_HOST_ENERGY_INFO_EN == TRUE) -/******************************************************************************* -** -** Function BTA_DmBleGetEnergyInfo -** -** Description This function is called to obtain the energy info -** -** Parameters p_cmpl_cback - Command complete callback -** -** Returns void -** -*******************************************************************************/ -void BTA_DmBleGetEnergyInfo(tBTA_BLE_ENERGY_INFO_CBACK *p_cmpl_cback) -{ - tBTA_DM_API_ENERGY_INFO *p_msg; - APPL_TRACE_API ("BTA_DmBleGetEnergyInfo"); - - UINT16 len = sizeof(tBTA_DM_API_ENERGY_INFO) + sizeof(tBLE_BD_ADDR); - - if ((p_msg = (tBTA_DM_API_ENERGY_INFO *) osi_malloc(len)) != NULL) { - memset (p_msg, 0, len); - p_msg->hdr.event = BTA_DM_API_BLE_ENERGY_INFO_EVT; - p_msg->p_energy_info_cback = p_cmpl_cback; - bta_sys_sendmsg(p_msg); - } -} -#endif // #if (BLE_HOST_ENERGY_INFO_EN == TRUE) - -/******************************************************************************* -** -** Function BTA_DmEnableScanFilter -** -** Description This function is called to enable the adv data payload filter -** -** Parameters action - enable or disable the APCF feature -** p_cmpl_cback - Command completed callback -** ref_value - Reference value -** -** Returns void -** -*******************************************************************************/ -void BTA_DmEnableScanFilter(UINT8 action, tBTA_DM_BLE_PF_STATUS_CBACK *p_cmpl_cback, - tBTA_DM_BLE_REF_VALUE ref_value) -{ -#if BLE_ANDROID_CONTROLLER_SCAN_FILTER == TRUE - tBTA_DM_API_ENABLE_SCAN_FILTER *p_msg; - APPL_TRACE_API ("BTA_DmEnableScanFilter: %d\n", action); - - UINT16 len = sizeof(tBTA_DM_API_ENABLE_SCAN_FILTER) + sizeof(tBLE_BD_ADDR); - - if ((p_msg = (tBTA_DM_API_ENABLE_SCAN_FILTER *) osi_malloc(len)) != NULL) { - memset (p_msg, 0, len); - - p_msg->hdr.event = BTA_DM_API_SCAN_FILTER_ENABLE_EVT; - p_msg->action = action; - p_msg->ref_value = ref_value; - p_msg->p_filt_status_cback = p_cmpl_cback; - - bta_sys_sendmsg(p_msg); - } -#else - UNUSED(action); - UNUSED(p_cmpl_cback); - UNUSED(ref_value); -#endif -} - /******************************************************************************* ** ** Function BTA_DmBleUpdateConnectionParams @@ -2831,83 +2148,7 @@ void BTA_DmSetEncryption(BD_ADDR bd_addr, tBTA_TRANSPORT transport, tBTA_DM_ENCR } #endif ///SMP_INCLUDED == TRUE -#if (BLE_HOST_REMOVE_AN_ACL_EN == TRUE) -/******************************************************************************* -** -** Function BTA_DmCloseACL -** -** Description This function force to close an ACL connection and remove the -** device from the security database list of known devices. -** -** Parameters: bd_addr - Address of the peer device -** remove_dev - remove device or not after link down -** -** Returns void -** -*******************************************************************************/ -void BTA_DmCloseACL(BD_ADDR bd_addr, BOOLEAN remove_dev, tBTA_TRANSPORT transport) -{ - tBTA_DM_API_REMOVE_ACL *p_msg; - - APPL_TRACE_API("BTA_DmCloseACL"); - - if ((p_msg = (tBTA_DM_API_REMOVE_ACL *) osi_malloc(sizeof(tBTA_DM_API_REMOVE_ACL))) != NULL) { - memset(p_msg, 0, sizeof(tBTA_DM_API_REMOVE_ACL)); - - p_msg->hdr.event = BTA_DM_API_REMOVE_ACL_EVT; - - memcpy(p_msg->bd_addr, bd_addr, BD_ADDR_LEN); - p_msg->remove_dev = remove_dev; - p_msg->transport = transport; - - bta_sys_sendmsg(p_msg); - } -} -#endif // #if (BLE_HOST_REMOVE_AN_ACL_EN == TRUE) - #if BLE_INCLUDED == TRUE -#if (BLE_HOST_BLE_OBSERVE_EN == TRUE) -/******************************************************************************* -** -** Function BTA_DmBleObserve -** -** Description This procedure keep the device listening for advertising -** events from a broadcast device. -** -** Parameters start: start or stop observe. -** -** Returns void - -** -** Returns void. -** -*******************************************************************************/ -extern void BTA_DmBleObserve(BOOLEAN start, UINT32 duration, - tBTA_DM_SEARCH_CBACK *p_results_cb, - tBTA_START_STOP_SCAN_CMPL_CBACK *p_start_stop_scan_cb) -{ - tBTA_DM_API_BLE_OBSERVE *p_msg; - - APPL_TRACE_API("BTA_DmBleObserve:start = %d ", start); - - if ((p_msg = (tBTA_DM_API_BLE_OBSERVE *) osi_malloc(sizeof(tBTA_DM_API_BLE_OBSERVE))) != NULL) { - memset(p_msg, 0, sizeof(tBTA_DM_API_BLE_OBSERVE)); - - p_msg->hdr.event = BTA_DM_API_BLE_OBSERVE_EVT; - p_msg->start = start; - p_msg->duration = duration; - p_msg->p_cback = p_results_cb; - if (start){ - p_msg->p_start_scan_cback = p_start_stop_scan_cb; - } - else { - p_msg->p_stop_scan_cback = p_start_stop_scan_cb; - } - - bta_sys_sendmsg(p_msg); - } -} -#endif // #if (BLE_HOST_BLE_OBSERVE_EN == TRUE) #if (BLE_42_SCAN_EN == TRUE) /******************************************************************************* @@ -2952,33 +2193,6 @@ extern void BTA_DmBleScan(BOOLEAN start, UINT32 duration, } #endif // #if (BLE_42_SCAN_EN == TRUE) -#if (BLE_HOST_STOP_ADV_UNUSED == TRUE) -/******************************************************************************* -** -** Function BTA_DmBleStopAdvertising -** -** Description This function set the random address for the APP -** -** Parameters void -** -** Returns void -** -** -*******************************************************************************/ -extern void BTA_DmBleStopAdvertising(void) -{ - BT_HDR *p_msg; - - APPL_TRACE_API("BTA_DmBleStopAdvertising\n"); - - if ((p_msg = (BT_HDR *) osi_malloc(sizeof(BT_HDR))) != NULL) { - memset(p_msg, 0, sizeof(BT_HDR)); - p_msg->event = BTA_DM_API_BLE_STOP_ADV_EVT; - bta_sys_sendmsg(p_msg); - } -} -#endif // #if (BLE_HOST_STOP_ADV_UNUSED == TRUE) - /******************************************************************************* ** ** Function BTA_DmSetRandAddress @@ -3429,38 +2643,6 @@ void BTA_VendorInit (void) APPL_TRACE_API("BTA_VendorInit"); } -/******************************************************************************* -** -** Function BTA_VendorCleanup -** -** Description This function frees up Broadcom specific VS specific dynamic memory -** -** Returns void -** -*******************************************************************************/ -void BTA_VendorCleanup (void) -{ - tBTM_BLE_VSC_CB cmn_ble_vsc_cb; - BTM_BleGetVendorCapabilities(&cmn_ble_vsc_cb); - -#if (BLE_INCLUDED == TRUE && BLE_ANDROID_CONTROLLER_SCAN_FILTER == TRUE) - btm_ble_adv_filter_cleanup(); // when BLE_VND_INCLUDED is false, this function will be ignore, so move it out of "if" - -#if 0 //by TH, comment out temporarily - if (cmn_ble_vsc_cb.max_filter > 0) { - btm_ble_adv_filter_cleanup(); -#if BLE_PRIVACY_SPT == TRUE - btm_ble_resolving_list_cleanup (); -#endif - } -#endif - - if (cmn_ble_vsc_cb.tot_scan_results_strg > 0) { - btm_ble_batchscan_cleanup(); - } -#endif - -} #if (BLE_50_FEATURE_SUPPORT == TRUE) void BTA_DmBleGapReadPHY(BD_ADDR addr) { diff --git a/components/bt/host/bluedroid/bta/dm/bta_dm_main.c b/components/bt/host/bluedroid/bta/dm/bta_dm_main.c index 1d69fb2434e..6d86d41be3a 100644 --- a/components/bt/host/bluedroid/bta/dm/bta_dm_main.c +++ b/components/bt/host/bluedroid/bta/dm/bta_dm_main.c @@ -42,11 +42,15 @@ #if BTA_DYNAMIC_MEMORY == FALSE tBTA_DM_CB bta_dm_cb; tBTA_DM_SEARCH_CB bta_dm_search_cb; +#if (CLASSIC_BT_INCLUDED == TRUE) tBTA_DM_DI_CB bta_dm_di_cb; +#endif // #if (CLASSIC_BT_INCLUDED == TRUE) #else tBTA_DM_CB *bta_dm_cb_ptr; tBTA_DM_SEARCH_CB *bta_dm_search_cb_ptr; -tBTA_DM_DI_CB *bta_dm_di_cb_ptr; +#if (CLASSIC_BT_INCLUDED == TRUE) + tBTA_DM_DI_CB *bta_dm_di_cb_ptr; +#endif // #if (CLASSIC_BT_INCLUDED == TRUE) SemaphoreHandle_t deinit_semaphore; #endif @@ -90,9 +94,6 @@ const tBTA_DM_ACTION bta_dm_action[BTA_DM_MAX_EVT] = { #endif // #if (CLASSIC_BT_INCLUDED == TRUE) bta_dm_acl_change, /* BTA_DM_ACL_CHANGE_EVT */ bta_dm_add_device, /* BTA_DM_API_ADD_DEVICE_EVT */ -#if (BLE_HOST_REMOVE_AN_ACL_EN == TRUE) - bta_dm_close_acl, /* BTA_DM_API_REMOVE_ACL_EVT */ -#endif // #if (BLE_HOST_REMOVE_AN_ACL_EN == TRUE) #if (SMP_INCLUDED == TRUE) /* security API events */ bta_dm_bond, /* BTA_DM_API_BOND_EVT */ @@ -134,38 +135,21 @@ const tBTA_DM_ACTION bta_dm_action[BTA_DM_MAX_EVT] = { bta_dm_ble_passkey_reply, /* BTA_DM_API_BLE_PASSKEY_REPLY_EVT */ bta_dm_ble_set_static_passkey, /* BTA_DM_API_BLE_SET_STATIC_PASSKEY_EVT */ bta_dm_ble_confirm_reply, /* BTA_DM_API_BLE_CONFIRM_REPLY_EVT */ - bta_dm_security_grant, + bta_dm_security_grant, /* BTA_DM_API_BLE_SEC_GRANT_EVT */ #endif ///SMP_INCLUDED == TRUE - bta_dm_ble_set_bg_conn_type, +#if (BLE_GATT_BGCONN == TRUE) + bta_dm_ble_set_bg_conn_type, /* BTA_DM_API_BLE_SET_BG_CONN_TYPE */ +#endif // (BLE_GATT_BGCONN == TRUE) bta_dm_ble_set_conn_params, /* BTA_DM_API_BLE_CONN_PARAM_EVT */ -#if (BLE_HOST_CONN_SCAN_PARAM_EN == TRUE) - bta_dm_ble_set_conn_scan_params, /* BTA_DM_API_BLE_CONN_SCAN_PARAM_EVT */ -#endif // #if (BLE_HOST_CONN_SCAN_PARAM_EN == TRUE) -#if (BLE_HOST_BLE_SCAN_PARAM_UNUSED == TRUE) - bta_dm_ble_set_scan_params, /* BTA_DM_API_BLE_SCAN_PARAM_EVT */ -#endif // #if (BLE_HOST_BLE_SCAN_PARAM_UNUSED == TRUE) #if (BLE_42_SCAN_EN == TRUE) bta_dm_ble_set_scan_fil_params, /* BTA_DM_API_BLE_SCAN_FIL_PARAM_EVT */ #endif // #if (BLE_42_SCAN_EN == TRUE) -#if (BLE_HOST_BLE_OBSERVE_EN == TRUE) - bta_dm_ble_observe, /* BTA_DM_API_BLE_OBSERVE_EVT */ -#endif // #if (BLE_HOST_BLE_OBSERVE_EN == TRUE) #if (BLE_42_SCAN_EN == TRUE) bta_dm_ble_scan, /* BTA_DM_API_BLE_SCAN_EVT */ #endif // #if (BLE_42_SCAN_EN == TRUE) bta_dm_ble_update_conn_params, /* BTA_DM_API_UPDATE_CONN_PARAM_EVT */ - /* This handler function added by - Yulong at 2016/9/9 to support the - random address setting for the APP */ bta_dm_ble_set_rand_address, /* BTA_DM_API_SET_RAND_ADDR_EVT*/ bta_dm_ble_clear_rand_address, /* BTA_DM_API_CLEAR_RAND_ADDR_EVT */ - /* This handler function added by - Yulong at 2016/10/19 to support - stop the ble advertising setting - by the APP */ -#if (BLE_HOST_STOP_ADV_UNUSED == TRUE) - bta_dm_ble_stop_advertising, /* BTA_DM_API_BLE_STOP_ADV_EVT */ -#endif // #if (BLE_HOST_STOP_ADV_UNUSED == TRUE) #if BLE_PRIVACY_SPT == TRUE bta_dm_ble_config_local_privacy, /* BTA_DM_API_LOCAL_PRIVACY_EVT */ #endif @@ -183,58 +167,20 @@ const tBTA_DM_ACTION bta_dm_action[BTA_DM_MAX_EVT] = { /* New function to allow set raw scan response data to HCI */ bta_dm_ble_set_scan_rsp_raw, /* BTA_DM_API_BLE_SET_SCAN_RSP_RAW_EVT */ - bta_dm_ble_broadcast, /* BTA_DM_API_BLE_BROADCAST_EVT */ + bta_dm_ble_advstop, /* BTA_DM_API_BLE_ADVSTOP_EVT */ #endif // #if (BLE_42_ADV_EN == TRUE) bta_dm_ble_set_data_length, /* BTA_DM_API_SET_DATA_LENGTH_EVT */ -#if BLE_ANDROID_CONTROLLER_SCAN_FILTER == TRUE - bta_dm_cfg_filter_cond, /* BTA_DM_API_CFG_FILTER_COND_EVT */ - bta_dm_scan_filter_param_setup, /* BTA_DM_API_SCAN_FILTER_SETUP_EVT */ - bta_dm_enable_scan_filter, /* BTA_DM_API_SCAN_FILTER_ENABLE_EVT */ -#endif -#if (BLE_HOST_BLE_MULTI_ADV_EN == TRUE) - bta_dm_ble_multi_adv_enb, /* BTA_DM_API_BLE_MULTI_ADV_ENB_EVT */ - bta_dm_ble_multi_adv_upd_param, /* BTA_DM_API_BLE_MULTI_ADV_PARAM_UPD_EVT */ - bta_dm_ble_multi_adv_data, /* BTA_DM_API_BLE_MULTI_ADV_DATA_EVT */ - btm_dm_ble_multi_adv_disable, /* BTA_DM_API_BLE_MULTI_ADV_DISABLE_EVT */ -#endif // BLE_HOST_BLE_MULTI_ADV_EN -#if (BLE_HOST_SETUP_STORAGE_EN == TRUE) - bta_dm_ble_setup_storage, /* BTA_DM_API_BLE_SETUP_STORAGE_EVT */ -#endif // #if (BLE_HOST_SETUP_STORAGE_EN == TRUE) -#if (BLE_HOST_BATCH_SCAN_EN == TRUE) - bta_dm_ble_enable_batch_scan, /* BTA_DM_API_BLE_ENABLE_BATCH_SCAN_EVT */ - bta_dm_ble_disable_batch_scan, /* BTA_DM_API_BLE_DISABLE_BATCH_SCAN_EVT */ -#endif // #if (BLE_HOST_BATCH_SCAN_EN == TRUE) -#if (BLE_HOST_READ_SCAN_REPORTS_EN == TRUE) - bta_dm_ble_read_scan_reports, /* BTA_DM_API_BLE_READ_SCAN_REPORTS_EVT */ -#endif // #if (BLE_HOST_READ_SCAN_REPORTS_EN == TRUE) -#if (BLE_HOST_TRACK_ADVERTISER_EN == TRUE) - bta_dm_ble_track_advertiser, /* BTA_DM_API_BLE_TRACK_ADVERTISER_EVT */ -#endif // #if (BLE_HOST_TRACK_ADVERTISER_EN == TRUE) -#if (BLE_HOST_ENERGY_INFO_EN == TRUE) - bta_dm_ble_get_energy_info, /* BTA_DM_API_BLE_ENERGY_INFO_EVT */ -#endif // #if (BLE_HOST_ENERGY_INFO_EN == TRUE) bta_dm_ble_disconnect, /* BTA_DM_API_BLE_DISCONNECT_EVT */ #endif -#if (BLE_HOST_ENABLE_TEST_MODE_EN == TRUE) - bta_dm_enable_test_mode, /* BTA_DM_API_ENABLE_TEST_MODE_EVT */ - bta_dm_disable_test_mode, /* BTA_DM_API_DISABLE_TEST_MODE_EVT */ -#endif // #if (BLE_HOST_ENABLE_TEST_MODE_EN == TRUE) -#if (BLE_HOST_EXECUTE_CBACK_EN == TRUE) - bta_dm_execute_callback, /* BTA_DM_API_EXECUTE_CBACK_EVT */ -#endif // #if (BLE_HOST_EXECUTE_CBACK_EN == TRUE) -#if (BLE_HOST_REMOVE_ALL_ACL_EN == TRUE) - bta_dm_remove_all_acl, /* BTA_DM_API_REMOVE_ALL_ACL_EVT */ -#endif // #if (BLE_HOST_REMOVE_ALL_ACL_EN == TRUE) bta_dm_remove_device, /* BTA_DM_API_REMOVE_DEVICE_EVT */ bta_dm_ble_set_channels, /* BTA_DM_API_BLE_SET_CHANNELS_EVT */ bta_dm_update_white_list, /* BTA_DM_API_UPDATE_WHITE_LIST_EVT */ bta_dm_clear_white_list, /* BTA_DM_API_CLEAR_WHITE_LIST_EVT */ -#if (BLE_HOST_READ_TX_POWER_EN == TRUE) - bta_dm_ble_read_adv_tx_power, /* BTA_DM_API_BLE_READ_ADV_TX_POWER_EVT */ -#endif // #if (BLE_HOST_READ_TX_POWER_EN == TRUE) bta_dm_read_rssi, /* BTA_DM_API_READ_RSSI_EVT */ #if BLE_INCLUDED == TRUE +#if ((BLE_42_SCAN_EN == TRUE) || (BLE_50_EXTEND_SCAN_EN == TRUE)) bta_dm_ble_update_duplicate_exceptional_list,/* BTA_DM_API_UPDATE_DUPLICATE_EXCEPTIONAL_LIST_EVT */ +#endif // ((BLE_42_SCAN_EN == TRUE) || (BLE_50_EXTEND_SCAN_EN == TRUE)) #endif #if (BLE_50_FEATURE_SUPPORT == TRUE) bta_dm_ble_gap_read_phy, /* BTA_DM_API_READ_PHY_EVT */ @@ -572,11 +518,15 @@ void bta_dm_sm_deinit(void) { memset(&bta_dm_cb, 0, sizeof(tBTA_DM_CB)); memset(&bta_dm_search_cb, 0, sizeof(tBTA_DM_SEARCH_CB)); +#if (CLASSIC_BT_INCLUDED == TRUE) memset(&bta_dm_di_cb, 0, sizeof(tBTA_DM_DI_CB)); +#endif // #if (CLASSIC_BT_INCLUDED == TRUE) #if BTA_DYNAMIC_MEMORY FREE_AND_RESET(bta_dm_cb_ptr); FREE_AND_RESET(bta_dm_search_cb_ptr); +#if (CLASSIC_BT_INCLUDED == TRUE) FREE_AND_RESET(bta_dm_di_cb_ptr); +#endif // #if (CLASSIC_BT_INCLUDED == TRUE) #endif /* #if BTA_DYNAMIC_MEMORY */ } diff --git a/components/bt/host/bluedroid/bta/dm/bta_dm_pm.c b/components/bt/host/bluedroid/bta/dm/bta_dm_pm.c index 8167ddf9a6b..35727779ee8 100644 --- a/components/bt/host/bluedroid/bta/dm/bta_dm_pm.c +++ b/components/bt/host/bluedroid/bta/dm/bta_dm_pm.c @@ -32,6 +32,8 @@ #include "stack/btm_api.h" #include "osi/allocator.h" +#if (CLASSIC_BT_INCLUDED == TRUE) + #if BTA_DYNAMIC_MEMORY == FALSE tBTA_DM_CONNECTED_SRVCS bta_dm_conn_srvcs; #else @@ -1171,3 +1173,5 @@ tBTA_DM_CONTRL_STATE bta_dm_pm_obtain_controller_state(void) } #endif + +#endif // #if (CLASSIC_BT_INCLUDED == TRUE) diff --git a/components/bt/host/bluedroid/bta/dm/include/bta_dm_int.h b/components/bt/host/bluedroid/bta/dm/include/bta_dm_int.h index bc625d3df81..f4498b54da1 100644 --- a/components/bt/host/bluedroid/bta/dm/include/bta_dm_int.h +++ b/components/bt/host/bluedroid/bta/dm/include/bta_dm_int.h @@ -80,9 +80,6 @@ enum { BTA_DM_ACL_CHANGE_EVT, BTA_DM_API_ADD_DEVICE_EVT, -#if (BLE_HOST_REMOVE_AN_ACL_EN == TRUE) - BTA_DM_API_REMOVE_ACL_EVT, -#endif // #if (BLE_HOST_REMOVE_AN_ACL_EN == TRUE) #if (SMP_INCLUDED == TRUE) /* security API events */ BTA_DM_API_BOND_EVT, @@ -126,22 +123,15 @@ enum { BTA_DM_API_BLE_CONFIRM_REPLY_EVT, BTA_DM_API_BLE_SEC_GRANT_EVT, #endif ///SMP_INCLUDED == TRUE +#if (BLE_GATT_BGCONN == TRUE) BTA_DM_API_BLE_SET_BG_CONN_TYPE, +#endif // (BLE_GATT_BGCONN == TRUE) BTA_DM_API_BLE_CONN_PARAM_EVT, -#if (BLE_HOST_CONN_SCAN_PARAM_EN == TRUE) - BTA_DM_API_BLE_CONN_SCAN_PARAM_EVT, -#endif // #if (BLE_HOST_CONN_SCAN_PARAM_EN == TRUE) -#if (BLE_HOST_BLE_SCAN_PARAM_UNUSED == TRUE) - BTA_DM_API_BLE_SCAN_PARAM_EVT, -#endif // #if (BLE_HOST_BLE_SCAN_PARAM_UNUSED == TRUE) /*******This event added by Yulong at 2016/10/25 to support the scan filter setting for the APP******/ #if (BLE_42_SCAN_EN == TRUE) BTA_DM_API_BLE_SCAN_FIL_PARAM_EVT, #endif // #if (BLE_42_SCAN_EN == TRUE) -#if (BLE_HOST_BLE_OBSERVE_EN == TRUE) - BTA_DM_API_BLE_OBSERVE_EVT, -#endif // #if (BLE_HOST_BLE_OBSERVE_EN == TRUE) #if (BLE_42_SCAN_EN == TRUE) BTA_DM_API_BLE_SCAN_EVT, #endif // #if (BLE_42_SCAN_EN == TRUE) @@ -150,11 +140,6 @@ enum { support the random address setting for the APP******/ BTA_DM_API_SET_RAND_ADDR_EVT, BTA_DM_API_CLEAR_RAND_ADDR_EVT, - /*******This event added by Yulong at 2016/10/19 to - support stop the ble advertising setting by the APP******/ -#if (BLE_HOST_STOP_ADV_UNUSED == TRUE) - BTA_DM_API_BLE_STOP_ADV_EVT, -#endif // #if (BLE_HOST_STOP_ADV_UNUSED == TRUE) #if BLE_PRIVACY_SPT == TRUE BTA_DM_API_LOCAL_PRIVACY_EVT, #endif @@ -173,59 +158,22 @@ enum { BTA_DM_API_BLE_SET_SCAN_RSP_EVT, /* Add for set raw scan response data */ BTA_DM_API_BLE_SET_SCAN_RSP_RAW_EVT, - BTA_DM_API_BLE_BROADCAST_EVT, + BTA_DM_API_BLE_ADVSTOP_EVT, #endif // #if (BLE_42_ADV_EN == TRUE) BTA_DM_API_SET_DATA_LENGTH_EVT, -#if BLE_ANDROID_CONTROLLER_SCAN_FILTER == TRUE - BTA_DM_API_CFG_FILTER_COND_EVT, - BTA_DM_API_SCAN_FILTER_SETUP_EVT, - BTA_DM_API_SCAN_FILTER_ENABLE_EVT, -#endif -#if (BLE_HOST_BLE_MULTI_ADV_EN == TRUE) - BTA_DM_API_BLE_MULTI_ADV_ENB_EVT, - BTA_DM_API_BLE_MULTI_ADV_PARAM_UPD_EVT, - BTA_DM_API_BLE_MULTI_ADV_DATA_EVT, - BTA_DM_API_BLE_MULTI_ADV_DISABLE_EVT, -#endif // #if (BLE_HOST_BLE_MULTI_ADV_EN == TRUE) -#if (BLE_HOST_SETUP_STORAGE_EN == TRUE) - BTA_DM_API_BLE_SETUP_STORAGE_EVT, -#endif // #if (BLE_HOST_SETUP_STORAGE_EN == TRUE) -#if (BLE_HOST_BATCH_SCAN_EN == TRUE) - BTA_DM_API_BLE_ENABLE_BATCH_SCAN_EVT, - BTA_DM_API_BLE_DISABLE_BATCH_SCAN_EVT, -#endif // #if (BLE_HOST_BATCH_SCAN_EN == TRUE) -#if (BLE_HOST_READ_SCAN_REPORTS_EN == TRUE) - BTA_DM_API_BLE_READ_SCAN_REPORTS_EVT, -#endif // #if (BLE_HOST_READ_SCAN_REPORTS_EN == TRUE) -#if (BLE_HOST_TRACK_ADVERTISER_EN == TRUE) - BTA_DM_API_BLE_TRACK_ADVERTISER_EVT, -#endif // #if (BLE_HOST_TRACK_ADVERTISER_EN == TRUE) -#if (BLE_HOST_ENERGY_INFO_EN == TRUE) - BTA_DM_API_BLE_ENERGY_INFO_EVT, -#endif // #if (BLE_HOST_ENERGY_INFO_EN == TRUE) + BTA_DM_API_BLE_DISCONNECT_EVT, #endif -#if (BLE_HOST_ENABLE_TEST_MODE_EN == TRUE) - BTA_DM_API_ENABLE_TEST_MODE_EVT, - BTA_DM_API_DISABLE_TEST_MODE_EVT, -#endif // #if (BLE_HOST_ENABLE_TEST_MODE_EN == TRUE) -#if (BLE_HOST_EXECUTE_CBACK_EN == TRUE) - BTA_DM_API_EXECUTE_CBACK_EVT, -#endif // #if (BLE_HOST_EXECUTE_CBACK_EN == TRUE) -#if (BLE_HOST_REMOVE_ALL_ACL_EN == TRUE) - BTA_DM_API_REMOVE_ALL_ACL_EVT, -#endif // #if (BLE_HOST_REMOVE_ALL_ACL_EN == TRUE) BTA_DM_API_REMOVE_DEVICE_EVT, BTA_DM_API_BLE_SET_CHANNELS_EVT, BTA_DM_API_UPDATE_WHITE_LIST_EVT, BTA_DM_API_CLEAR_WHITE_LIST_EVT, -#if (BLE_HOST_READ_TX_POWER_EN == TRUE) - BTA_DM_API_BLE_READ_ADV_TX_POWER_EVT, -#endif // #if (BLE_HOST_READ_TX_POWER_EN == TRUE) BTA_DM_API_READ_RSSI_EVT, #if BLE_INCLUDED == TRUE +#if ((BLE_42_SCAN_EN == TRUE) || (BLE_50_EXTEND_SCAN_EN == TRUE)) BTA_DM_API_UPDATE_DUPLICATE_EXCEPTIONAL_LIST_EVT, +#endif // ((BLE_42_SCAN_EN == TRUE) || (BLE_50_EXTEND_SCAN_EN == TRUE)) #endif #if (BLE_50_FEATURE_SUPPORT == TRUE) BTA_DM_API_READ_PHY_EVT, @@ -489,6 +437,7 @@ typedef struct { tBTA_UPDATE_WHITELIST_CBACK *update_wl_cb; }tBTA_DM_API_UPDATE_WHITE_LIST; +#if ((BLE_42_SCAN_EN == TRUE) || (BLE_50_EXTEND_SCAN_EN == TRUE)) typedef struct { BT_HDR hdr; UINT8 subcode; @@ -496,13 +445,7 @@ typedef struct { BD_ADDR device_info; tBTA_UPDATE_DUPLICATE_EXCEPTIONAL_LIST_CMPL_CBACK *exceptional_list_cb; }tBTA_DM_API_UPDATE_DUPLICATE_EXCEPTIONAL_LIST; - -#if (BLE_HOST_READ_TX_POWER_EN == TRUE) -typedef struct { - BT_HDR hdr; - tBTA_CMPL_CB *read_tx_power_cb; -}tBTA_DM_API_READ_ADV_TX_POWER; -#endif // #if (BLE_HOST_READ_TX_POWER_EN == TRUE) +#endif // ((BLE_42_SCAN_EN == TRUE) || (BLE_50_EXTEND_SCAN_EN == TRUE)) #endif ///BLE_INCLUDED == TRUE @@ -765,15 +708,6 @@ typedef struct { UINT8 transport; } tBTA_DM_API_REMOVE_DEVICE; -#if (BLE_HOST_EXECUTE_CBACK_EN == TRUE) -/* data type for BTA_DM_API_EXECUTE_CBACK_EVT */ -typedef struct { - BT_HDR hdr; - void *p_param; - tBTA_DM_EXEC_CBACK *p_exec_cback; -} tBTA_DM_API_EXECUTE_CBACK; -#endif // #if (BLE_HOST_EXECUTE_CBACK_EN == TRUE) - /* data type for tBTA_DM_API_SET_ENCRYPTION */ typedef struct { BT_HDR hdr; @@ -886,15 +820,6 @@ typedef struct { tBLE_SCAN_PARAM_SETUP_CBACK scan_param_setup_cback; } tBTA_DM_API_BLE_SCAN_FILTER_PARAMS; -#if (BLE_HOST_CONN_SCAN_PARAM_EN == TRUE) -/* set scan parameter for BLE connections */ -typedef struct { - BT_HDR hdr; - UINT16 scan_int; - UINT16 scan_window; -} tBTA_DM_API_BLE_CONN_SCAN_PARAMS; -#endif // #if (BLE_HOST_CONN_SCAN_PARAM_EN == TRUE) - /* Data type for start/stop observe */ typedef struct { BT_HDR hdr; @@ -971,35 +896,6 @@ typedef struct { } tBTA_DM_API_BLE_FEATURE; -#if (BLE_HOST_BLE_MULTI_ADV_EN == TRUE) -/* multi adv data structure */ -typedef struct { - BT_HDR hdr; - tBTA_BLE_MULTI_ADV_CBACK *p_cback; - void *p_ref; - tBTA_BLE_ADV_PARAMS *p_params; -} tBTA_DM_API_BLE_MULTI_ADV_ENB; - -typedef struct { - BT_HDR hdr; - UINT8 inst_id; - tBTA_BLE_ADV_PARAMS *p_params; -} tBTA_DM_API_BLE_MULTI_ADV_PARAM; - -typedef struct { - BT_HDR hdr; - UINT8 inst_id; - BOOLEAN is_scan_rsp; - tBTA_BLE_AD_MASK data_mask; - tBTA_BLE_ADV_DATA *p_data; -} tBTA_DM_API_BLE_MULTI_ADV_DATA; - -typedef struct { - BT_HDR hdr; - UINT8 inst_id; -} tBTA_DM_API_BLE_MULTI_ADV_DISABLE; -#endif // #if (BLE_HOST_BLE_MULTI_ADV_EN == TRUE) - typedef struct { BT_HDR hdr; UINT32 data_mask; @@ -1016,59 +912,6 @@ typedef struct { tBTA_SET_ADV_DATA_CMPL_CBACK *p_adv_data_cback; } tBTA_DM_API_SET_ADV_CONFIG_RAW; -#if (BLE_HOST_SETUP_STORAGE_EN == TRUE) -typedef struct { - BT_HDR hdr; - UINT8 batch_scan_full_max; - UINT8 batch_scan_trunc_max; - UINT8 batch_scan_notify_threshold; - tBTA_BLE_SCAN_SETUP_CBACK *p_setup_cback; - tBTA_BLE_SCAN_THRESHOLD_CBACK *p_thres_cback; - tBTA_BLE_SCAN_REP_CBACK *p_read_rep_cback; - tBTA_DM_BLE_REF_VALUE ref_value; -} tBTA_DM_API_SET_STORAGE_CONFIG; -#endif // #if (BLE_HOST_SETUP_STORAGE_EN == TRUE) - -#if (BLE_HOST_BATCH_SCAN_EN == TRUE) -typedef struct { - BT_HDR hdr; - tBTA_BLE_BATCH_SCAN_MODE scan_mode; - UINT32 scan_int; - UINT32 scan_window; - tBTA_BLE_DISCARD_RULE discard_rule; - tBLE_ADDR_TYPE addr_type; - tBTA_DM_BLE_REF_VALUE ref_value; -} tBTA_DM_API_ENABLE_SCAN; - -typedef struct { - BT_HDR hdr; - tBTA_DM_BLE_REF_VALUE ref_value; -} tBTA_DM_API_DISABLE_SCAN; -#endif // #if (BLE_HOST_BATCH_SCAN_EN == TRUE) - -#if (BLE_HOST_READ_SCAN_REPORTS_EN == TRUE) -typedef struct { - BT_HDR hdr; - tBTA_BLE_BATCH_SCAN_MODE scan_type; - tBTA_DM_BLE_REF_VALUE ref_value; -} tBTA_DM_API_READ_SCAN_REPORTS; -#endif // #if (BLE_HOST_READ_SCAN_REPORTS_EN == TRUE) - -#if (BLE_HOST_TRACK_ADVERTISER_EN == TRUE) -typedef struct { - BT_HDR hdr; - tBTA_DM_BLE_REF_VALUE ref_value; - tBTA_BLE_TRACK_ADV_CBACK *p_track_adv_cback; -} tBTA_DM_API_TRACK_ADVERTISER; -#endif // #if (BLE_HOST_TRACK_ADVERTISER_EN == TRUE) - -#if (BLE_HOST_ENERGY_INFO_EN == TRUE) -typedef struct { - BT_HDR hdr; - tBTA_BLE_ENERGY_INFO_CBACK *p_energy_info_cback; -} tBTA_DM_API_ENERGY_INFO; -#endif // #if (BLE_HOST_ENERGY_INFO_EN == TRUE) - typedef struct { BT_HDR hdr; BD_ADDR remote_bda; @@ -1349,26 +1192,6 @@ typedef struct { #endif /* BLE_INCLUDED */ -#if (BLE_HOST_REMOVE_AN_ACL_EN == TRUE) -/* data type for BTA_DM_API_REMOVE_ACL_EVT */ -typedef struct { - BT_HDR hdr; - BD_ADDR bd_addr; - BOOLEAN remove_dev; - tBTA_TRANSPORT transport; - -} tBTA_DM_API_REMOVE_ACL; -#endif // #if (BLE_HOST_REMOVE_AN_ACL_EN == TRUE) - -#if (BLE_HOST_REMOVE_ALL_ACL_EN == TRUE) -/* data type for BTA_DM_API_REMOVE_ALL_ACL_EVT */ -typedef struct { - BT_HDR hdr; - tBTA_DM_LINK_TYPE link_type; - -} tBTA_DM_API_REMOVE_ALL_ACL; -#endif // #if (BLE_HOST_REMOVE_ALL_ACL_EN == TRUE) - typedef struct { BT_HDR hdr; BD_ADDR bd_addr; @@ -1378,35 +1201,6 @@ typedef struct { UINT16 timeout; } tBTA_DM_API_UPDATE_CONN_PARAM; -#if BLE_ANDROID_CONTROLLER_SCAN_FILTER == TRUE -typedef struct { - BT_HDR hdr; - tBTA_DM_BLE_SCAN_COND_OP action; - tBTA_DM_BLE_PF_COND_TYPE cond_type; - tBTA_DM_BLE_PF_FILT_INDEX filt_index; - tBTA_DM_BLE_PF_COND_PARAM *p_cond_param; - tBTA_DM_BLE_PF_CFG_CBACK *p_filt_cfg_cback; - tBTA_DM_BLE_REF_VALUE ref_value; -} tBTA_DM_API_CFG_FILTER_COND; - -typedef struct { - BT_HDR hdr; - UINT8 action; - tBTA_DM_BLE_PF_STATUS_CBACK *p_filt_status_cback; - tBTA_DM_BLE_REF_VALUE ref_value; -} tBTA_DM_API_ENABLE_SCAN_FILTER; - -typedef struct { - BT_HDR hdr; - UINT8 action; - tBTA_DM_BLE_PF_FILT_INDEX filt_index; - tBTA_DM_BLE_PF_FILT_PARAMS filt_params; - tBLE_BD_ADDR *p_target; - tBTA_DM_BLE_PF_PARAM_CBACK *p_filt_param_cback; - tBTA_DM_BLE_REF_VALUE ref_value; -} tBTA_DM_API_SCAN_FILTER_PARAM_SETUP; -#endif - #if (BLE_50_DTM_TEST_EN == TRUE) typedef struct { BT_HDR hdr; @@ -1815,12 +1609,14 @@ typedef union { tBTA_DM_API_CFG_COEX_STATUS cfg_coex_status; #endif tBTA_DM_API_SEND_VENDOR_HCI_CMD vendor_hci_cmd; +#if CLASSIC_BT_INCLUDED tBTA_DM_API_CONFIG_EIR config_eir; tBTA_DM_API_SET_AFH_CHANNELS set_afh_channels; tBTA_DM_API_PAGE_TO_SET set_page_timeout; tBTA_DM_API_PAGE_TO_GET get_page_timeout; tBTA_DM_API_SET_ACL_PKT_TYPES set_acl_pkt_types; +#endif /* CLASSIC_BT_INCLUDED */ #if (ENC_KEY_SIZE_CTRL_MODE != ENC_KEY_SIZE_CTRL_MODE_NONE) tBTA_DM_API_SET_MIN_ENC_KEY_SIZE set_min_enc_key_size; #endif @@ -1831,9 +1627,6 @@ typedef union { #if (BLE_INCLUDED == TRUE) tBTA_DM_API_BLE_SET_CHANNELS ble_set_channels; tBTA_DM_API_UPDATE_WHITE_LIST white_list; -#if (BLE_HOST_READ_TX_POWER_EN == TRUE) - tBTA_DM_API_READ_ADV_TX_POWER read_tx_power; -#endif // #if (BLE_HOST_READ_TX_POWER_EN == TRUE) #endif ///BLE_INCLUDED == TRUE tBTA_DM_API_READ_RSSI rssi; @@ -1886,9 +1679,6 @@ typedef union { #endif /* #if (BTA_DM_QOS_INCLUDED == TRUE) */ tBTA_DM_API_DI_DISC di_disc; -#if (BLE_HOST_EXECUTE_CBACK_EN == TRUE) - tBTA_DM_API_EXECUTE_CBACK exec_cback; -#endif // #if (BLE_HOST_EXECUTE_CBACK_EN == TRUE) tBTA_DM_API_SET_ENCRYPTION set_encryption; #if BLE_INCLUDED == TRUE @@ -1899,12 +1689,6 @@ typedef union { tBTA_DM_API_BLE_SEC_GRANT ble_sec_grant; tBTA_DM_API_BLE_SET_BG_CONN_TYPE ble_set_bd_conn_type; tBTA_DM_API_BLE_CONN_PARAMS ble_set_conn_params; -#if (BLE_HOST_CONN_SCAN_PARAM_EN == TRUE) - tBTA_DM_API_BLE_CONN_SCAN_PARAMS ble_set_conn_scan_params; -#endif // #if (BLE_HOST_CONN_SCAN_PARAM_EN == TRUE) -#if (BLE_HOST_BLE_SCAN_PARAM_UNUSED == TRUE) - tBTA_DM_API_BLE_SCAN_PARAMS ble_set_scan_params; -#endif // #if (BLE_HOST_BLE_SCAN_PARAM_UNUSED == TRUE) tBTA_DM_API_BLE_SCAN_FILTER_PARAMS ble_set_scan_fil_params; tBTA_DM_API_BLE_OBSERVE ble_observe; tBTA_DM_API_BLE_SCAN ble_scan; @@ -1917,44 +1701,16 @@ typedef union { tBTA_DM_API_BLE_ADV_PARAMS_ALL ble_set_adv_params_all; tBTA_DM_API_SET_ADV_CONFIG ble_set_adv_data; tBTA_DM_API_SET_ADV_CONFIG_RAW ble_set_adv_data_raw; -#if BLE_ANDROID_CONTROLLER_SCAN_FILTER == TRUE - tBTA_DM_API_SCAN_FILTER_PARAM_SETUP ble_scan_filt_param_setup; - tBTA_DM_API_CFG_FILTER_COND ble_cfg_filter_cond; - tBTA_DM_API_ENABLE_SCAN_FILTER ble_enable_scan_filt; -#endif tBTA_DM_API_UPDATE_CONN_PARAM ble_update_conn_params; tBTA_DM_API_BLE_SET_DATA_LENGTH ble_set_data_length; tBTA_DM_APT_SET_DEV_ADDR set_addr; tBTA_DM_APT_CLEAR_ADDR clear_addr; tBTA_DM_API_SET_RPA_TIMEOUT set_rpa_timeout; tBTA_DM_API_ADD_DEV_TO_RESOLVING_LIST add_dev_to_resolving_list; - -#if (BLE_HOST_BLE_MULTI_ADV_EN == TRUE) - tBTA_DM_API_BLE_MULTI_ADV_ENB ble_multi_adv_enb; - tBTA_DM_API_BLE_MULTI_ADV_PARAM ble_multi_adv_param; - tBTA_DM_API_BLE_MULTI_ADV_DATA ble_multi_adv_data; - tBTA_DM_API_BLE_MULTI_ADV_DISABLE ble_multi_adv_disable; -#endif // #if (BLE_HOST_BLE_MULTI_ADV_EN == TRUE) -#if (BLE_HOST_SETUP_STORAGE_EN == TRUE) - tBTA_DM_API_SET_STORAGE_CONFIG ble_set_storage; -#endif // #if (BLE_HOST_SETUP_STORAGE_EN == TRUE) -#if (BLE_HOST_BATCH_SCAN_EN == TRUE) - tBTA_DM_API_ENABLE_SCAN ble_enable_scan; -#endif // #if (BLE_HOST_BATCH_SCAN_EN == TRUE) -#if (BLE_HOST_READ_SCAN_REPORTS_EN == TRUE) - tBTA_DM_API_READ_SCAN_REPORTS ble_read_reports; -#endif // #if (BLE_HOST_READ_SCAN_REPORTS_EN == TRUE) -#if (BLE_HOST_BATCH_SCAN_EN == TRUE) - tBTA_DM_API_DISABLE_SCAN ble_disable_scan; -#endif // #if (BLE_HOST_BATCH_SCAN_EN == TRUE) -#if (BLE_HOST_TRACK_ADVERTISER_EN == TRUE) - tBTA_DM_API_TRACK_ADVERTISER ble_track_advert; -#endif // #if (BLE_HOST_TRACK_ADVERTISER_EN == TRUE) -#if (BLE_HOST_ENERGY_INFO_EN == TRUE) - tBTA_DM_API_ENERGY_INFO ble_energy_info; -#endif // #if (BLE_HOST_ENERGY_INFO_EN == TRUE) tBTA_DM_API_BLE_DISCONNECT ble_disconnect; +#if ((BLE_42_SCAN_EN == TRUE) || (BLE_50_EXTEND_SCAN_EN == TRUE)) tBTA_DM_API_UPDATE_DUPLICATE_EXCEPTIONAL_LIST ble_duplicate_exceptional_list; +#endif // ((BLE_42_SCAN_EN == TRUE) || (BLE_50_EXTEND_SCAN_EN == TRUE)) #if (BLE_50_FEATURE_SUPPORT == TRUE) tBTA_DM_API_READ_PHY ble_read_phy; tBTA_DM_API_SET_PER_DEF_PHY ble_set_per_def_phy; @@ -2006,13 +1762,6 @@ typedef union { tBTA_DM_API_BLE_SET_CSA_SUPPORT ble_set_csa_support; tBTA_DM_API_BLE_SET_VENDOR_EVT_MASK ble_set_vendor_evt_mask; #endif -#if (BLE_HOST_REMOVE_AN_ACL_EN == TRUE) - tBTA_DM_API_REMOVE_ACL remove_acl; -#endif // #if (BLE_HOST_REMOVE_AN_ACL_EN == TRUE) -#if (BLE_HOST_REMOVE_ALL_ACL_EN == TRUE) - tBTA_DM_API_REMOVE_ALL_ACL remove_all_acl; -#endif // #if (BLE_HOST_REMOVE_ALL_ACL_EN == TRUE) - #if (BLE_FEAT_ISO_EN == TRUE) #if (BLE_FEAT_ISO_BIG_BROCASTER_EN == TRUE) tBTA_DM_API_BIG_CREATE big_creat; @@ -2197,24 +1946,9 @@ typedef struct { BOOLEAN is_bta_dm_active; tBTA_DM_ACTIVE_LINK device_list; tBTA_DM_SEC_CBACK *p_sec_cback; -#if ((defined BLE_INCLUDED) && (BLE_INCLUDED == TRUE)) - tBTA_BLE_SCAN_SETUP_CBACK *p_setup_cback; - tBTA_DM_BLE_PF_CFG_CBACK *p_scan_filt_cfg_cback; - tBTA_DM_BLE_PF_STATUS_CBACK *p_scan_filt_status_cback; - tBTA_DM_BLE_PF_PARAM_CBACK *p_scan_filt_param_cback; -#if (BLE_HOST_BLE_MULTI_ADV_EN == TRUE) - tBTA_BLE_MULTI_ADV_CBACK *p_multi_adv_cback; -#endif // #if (BLE_HOST_BLE_MULTI_ADV_EN == TRUE) -#if (BLE_HOST_ENERGY_INFO_EN == TRUE) - tBTA_BLE_ENERGY_INFO_CBACK *p_energy_info_cback; -#endif // #if (BLE_HOST_ENERGY_INFO_EN == TRUE) -#endif UINT16 state; BOOLEAN disabling; TIMER_LIST_ENT disable_timer; - UINT32 wbt_sdp_handle; /* WIDCOMM Extensions SDP record handle */ - UINT8 wbt_scn; /* WIDCOMM Extensions SCN */ - UINT8 num_master_only; #if (BTA_DM_PM_INCLUDED == TRUE) UINT8 pm_id; tBTA_PM_TIMER pm_timer[BTA_DM_NUM_PM_TIMER]; @@ -2222,7 +1956,9 @@ typedef struct { UINT32 role_policy_mask; /* the bits set indicates the modules that wants to remove role switch from the default link policy */ UINT16 cur_policy; /* current default link policy */ UINT16 rs_event; /* the event waiting for role switch */ +#if (CLASSIC_BT_INCLUDED == TRUE) UINT8 cur_av_count; /* current AV connections */ +#endif // #if (CLASSIC_BT_INCLUDED == TRUE) BOOLEAN disable_pair_mode; /* disable pair mode or not */ BOOLEAN conn_paired_only; /* allow connectable to paired device only or not */ tBTA_DM_API_SEARCH search_msg; @@ -2253,7 +1989,9 @@ typedef struct { tBTA_DM_ENCRYPT_CBACK *p_encrypt_cback; +#if (CLASSIC_BT_INCLUDED == TRUE) TIMER_LIST_ENT switch_delay_timer[BTA_DM_NUM_PEER_DEVICE]; +#endif // #if (CLASSIC_BT_INCLUDED == TRUE) } tBTA_DM_CB; @@ -2423,8 +2161,10 @@ extern tBTA_DM_SEARCH_CB *bta_dm_search_cb_ptr; #if BTA_DYNAMIC_MEMORY == FALSE extern tBTA_DM_DI_CB bta_dm_di_cb; #else +#if (CLASSIC_BT_INCLUDED == TRUE) extern tBTA_DM_DI_CB *bta_dm_di_cb_ptr; #define bta_dm_di_cb (*bta_dm_di_cb_ptr) +#endif // #if (CLASSIC_BT_INCLUDED == TRUE) extern SemaphoreHandle_t deinit_semaphore; #endif @@ -2501,9 +2241,6 @@ extern void bta_dm_ble_set_bg_conn_type (tBTA_DM_MSG *p_data); extern void bta_dm_ble_set_conn_params (tBTA_DM_MSG *p_data); extern void bta_dm_ble_set_scan_params(tBTA_DM_MSG *p_data); extern void bta_dm_ble_set_scan_fil_params(tBTA_DM_MSG *p_data); -#if (BLE_HOST_CONN_SCAN_PARAM_EN == TRUE) -extern void bta_dm_ble_set_conn_scan_params (tBTA_DM_MSG *p_data); -#endif // #if (BLE_HOST_CONN_SCAN_PARAM_EN == TRUE) #if ((defined BTA_GATT_INCLUDED) && (BTA_GATT_INCLUDED == TRUE) && SDP_INCLUDED == TRUE) && (GATTC_INCLUDED == TRUE) extern void bta_dm_close_gatt_conn(tBTA_DM_MSG *p_data); #endif /* ((defined BTA_GATT_INCLUDED) && (BTA_GATT_INCLUDED == TRUE) && SDP_INCLUDED == TRUE) && (GATTC_INCLUDED == TRUE) */ @@ -2513,9 +2250,6 @@ extern void bta_dm_ble_update_conn_params (tBTA_DM_MSG *p_data); extern void bta_dm_ble_disconnect (tBTA_DM_MSG *p_data); extern void bta_dm_ble_set_rand_address(tBTA_DM_MSG *p_data); extern void bta_dm_ble_clear_rand_address(tBTA_DM_MSG *p_data); -#if (BLE_HOST_STOP_ADV_UNUSED == TRUE) -extern void bta_dm_ble_stop_advertising(tBTA_DM_MSG *p_data); -#endif // #if (BLE_HOST_STOP_ADV_UNUSED == TRUE) extern void bta_dm_ble_config_local_privacy (tBTA_DM_MSG *p_data); extern void bta_dm_ble_config_local_icon (tBTA_DM_MSG *p_data); #if (BT_GATTS_KEY_MATERIAL_CHAR == TRUE) @@ -2526,17 +2260,12 @@ extern void bta_dm_ble_set_adv_config (tBTA_DM_MSG *p_data); extern void bta_dm_ble_set_adv_config_raw (tBTA_DM_MSG *p_data); extern void bta_dm_ble_set_scan_rsp (tBTA_DM_MSG *p_data); extern void bta_dm_ble_set_scan_rsp_raw (tBTA_DM_MSG *p_data); -extern void bta_dm_ble_broadcast (tBTA_DM_MSG *p_data); +extern void bta_dm_ble_advstop (tBTA_DM_MSG *p_data); extern void bta_dm_ble_set_data_length(tBTA_DM_MSG *p_data); extern void bta_dm_ble_update_duplicate_exceptional_list(tBTA_DM_MSG *p_data); #if SMP_INCLUDED == TRUE extern void bta_dm_co_security_param_init(void); #endif -#if BLE_ANDROID_CONTROLLER_SCAN_FILTER == TRUE -extern void bta_dm_cfg_filter_cond (tBTA_DM_MSG *p_data); -extern void bta_dm_scan_filter_param_setup (tBTA_DM_MSG *p_data); -extern void bta_dm_enable_scan_filter(tBTA_DM_MSG *p_data); -#endif extern void btm_dm_ble_multi_adv_disable(tBTA_DM_MSG *p_data); extern void bta_dm_ble_multi_adv_data(tBTA_DM_MSG *p_data); extern void bta_dm_ble_multi_adv_upd_param(tBTA_DM_MSG *p_data); @@ -2567,21 +2296,8 @@ extern void bta_dm_ble_gap_set_ext_scan_params(tBTA_DM_MSG *p_data); extern void bta_dm_ble_gap_ext_scan(tBTA_DM_MSG *p_data); extern void bta_dm_ble_gap_set_prefer_ext_conn_params(tBTA_DM_MSG *p_data); #endif // #if (BLE_50_FEATURE_SUPPORT == TRUE) -#if (BLE_HOST_SETUP_STORAGE_EN == TRUE) -extern void bta_dm_ble_setup_storage(tBTA_DM_MSG *p_data); -#endif // #if (BLE_HOST_SETUP_STORAGE_EN == TRUE) -extern void bta_dm_ble_enable_batch_scan(tBTA_DM_MSG *p_data); -extern void bta_dm_ble_disable_batch_scan(tBTA_DM_MSG *p_data); extern void bta_dm_ble_read_scan_reports(tBTA_DM_MSG *p_data); -#if (BLE_HOST_TRACK_ADVERTISER_EN == TRUE) -extern void bta_dm_ble_track_advertiser(tBTA_DM_MSG *p_data); -#endif // #if (BLE_HOST_TRACK_ADVERTISER_EN == TRUE) - -#if (BLE_HOST_ENERGY_INFO_EN == TRUE) -extern void bta_dm_ble_get_energy_info(tBTA_DM_MSG *p_data); -#endif // #if (BLE_HOST_ENERGY_INFO_EN == TRUE) - #endif extern void bta_dm_set_encryption(tBTA_DM_MSG *p_data); extern void bta_dm_confirm(tBTA_DM_MSG *p_data); @@ -2644,7 +2360,6 @@ extern void bta_dm_disable_test_mode(tBTA_DM_MSG *p_data); extern void bta_dm_execute_callback(tBTA_DM_MSG *p_data); -extern void bta_dm_remove_all_acl(tBTA_DM_MSG *p_data); #if (BLE_50_FEATURE_SUPPORT == TRUE) extern void bta_dm_ble_gap_read_phy(tBTA_DM_MSG *p_data); diff --git a/components/bt/host/bluedroid/bta/gatt/bta_gattc_act.c b/components/bt/host/bluedroid/bta/gatt/bta_gattc_act.c index 07ebff28771..e808dc9f54c 100644 --- a/components/bt/host/bluedroid/bta/gatt/bta_gattc_act.c +++ b/components/bt/host/bluedroid/bta/gatt/bta_gattc_act.c @@ -764,10 +764,12 @@ void bta_gattc_conn(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data) } if (p_clcb->p_rcb) { +#if (CLASSIC_BT_INCLUDED == TRUE) /* there is no RM for GATT */ if (p_clcb->transport == BTA_TRANSPORT_BR_EDR) { bta_sys_conn_open(BTA_ID_GATTC, BTA_ALL_APP_ID, p_clcb->bda); } +#endif // #if (CLASSIC_BT_INCLUDED == TRUE) tBTA_GATT_STATUS status = BTA_GATT_OK; if (p_data && p_data->int_conn.already_connect) { //clear already_connect @@ -870,11 +872,11 @@ void bta_gattc_close(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data) cb_data.close.reason = p_clcb->reason; cb_data.close.status = p_clcb->status; bdcpy(cb_data.close.remote_bda, p_clcb->bda); - +#if (CLASSIC_BT_INCLUDED == TRUE) if (p_clcb->transport == BTA_TRANSPORT_BR_EDR) { bta_sys_conn_close( BTA_ID_GATTC , BTA_ALL_APP_ID, p_clcb->bda); } - +#endif // #if (CLASSIC_BT_INCLUDED == TRUE) if (p_data->hdr.event == BTA_GATTC_API_CLOSE_EVT) { cb_data.close.status = GATT_Disconnect(p_data->hdr.layer_specific); } else if (p_data->hdr.event == BTA_GATTC_INT_DISCONN_EVT) { @@ -1338,11 +1340,13 @@ void bta_gattc_confirm(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data) != GATT_SUCCESS) { APPL_TRACE_ERROR("bta_gattc_confirm to handle [0x%04x] failed", handle); } else { +#if (CLASSIC_BT_INCLUDED == TRUE) /* if over BR_EDR, inform PM for mode change */ if (p_clcb->transport == BTA_TRANSPORT_BR_EDR) { bta_sys_busy(BTA_ID_GATTC, BTA_ALL_APP_ID, p_clcb->bda); bta_sys_idle(BTA_ID_GATTC, BTA_ALL_APP_ID, p_clcb->bda); } +#endif // #if (CLASSIC_BT_INCLUDED == TRUE) } } /******************************************************************************* @@ -2202,13 +2206,13 @@ static void bta_gattc_cmpl_cback(UINT16 conn_id, tGATTC_OPTYPE op, tGATT_STATUS APPL_TRACE_ERROR("bta_gattc_cmpl_cback unknown conn_id = %d, ignore data", conn_id); return; } - +#if (CLASSIC_BT_INCLUDED == TRUE) /* if over BR_EDR, inform PM for mode change */ if (p_clcb->transport == BTA_TRANSPORT_BR_EDR) { bta_sys_busy(BTA_ID_GATTC, BTA_ALL_APP_ID, p_clcb->bda); bta_sys_idle(BTA_ID_GATTC, BTA_ALL_APP_ID, p_clcb->bda); } - +#endif // #if (CLASSIC_BT_INCLUDED == TRUE) bta_gattc_cmpl_sendmsg(conn_id, op, status, p_data); } diff --git a/components/bt/host/bluedroid/bta/gatt/bta_gatts_act.c b/components/bt/host/bluedroid/bta/gatt/bta_gatts_act.c index 37c9a675279..4e786bc8a1e 100644 --- a/components/bt/host/bluedroid/bta/gatt/bta_gatts_act.c +++ b/components/bt/host/bluedroid/bta/gatt/bta_gatts_act.c @@ -695,12 +695,13 @@ void bta_gatts_indicate_handle (tBTA_GATTS_CB *p_cb, tBTA_GATTS_DATA *p_msg) p_msg->api_indicate.len, p_msg->api_indicate.value); } - +#if (CLASSIC_BT_INCLUDED == TRUE) /* if over BR_EDR, inform PM for mode change */ if (transport == BTA_TRANSPORT_BR_EDR) { bta_sys_busy(BTA_ID_GATTS, BTA_ALL_APP_ID, remote_bda); bta_sys_idle(BTA_ID_GATTS, BTA_ALL_APP_ID, remote_bda); } +#endif // #if (CLASSIC_BT_INCLUDED == TRUE) } else { APPL_TRACE_ERROR("Unknown connection ID: %d fail sending notification", p_msg->api_indicate.hdr.layer_specific); @@ -839,10 +840,11 @@ void bta_gatts_close (tBTA_GATTS_CB *p_cb, tBTA_GATTS_DATA *p_msg) p_rcb = bta_gatts_find_app_rcb_by_app_if(gatt_if); if (p_rcb && p_rcb->p_cback) { +#if (CLASSIC_BT_INCLUDED == TRUE) if (transport == BTA_TRANSPORT_BR_EDR) { bta_sys_conn_close( BTA_ID_GATTS , BTA_ALL_APP_ID, remote_bda); } - +#endif // #if (CLASSIC_BT_INCLUDED == TRUE) close.status = status; close.conn_id = p_msg->hdr.layer_specific; (*p_rcb->p_cback)(BTA_GATTS_CLOSE_EVT, (tBTA_GATTS *)&close); @@ -925,12 +927,13 @@ static void bta_gatts_send_request_cback (UINT16 conn_id, conn_id, trans_id, req_type); if (p_rcb && p_rcb->p_cback) { +#if (CLASSIC_BT_INCLUDED == TRUE) /* if over BR_EDR, inform PM for mode change */ if (transport == BTA_TRANSPORT_BR_EDR) { bta_sys_busy(BTA_ID_GATTS, BTA_ALL_APP_ID, cb_data.req_data.remote_bda); bta_sys_idle(BTA_ID_GATTS, BTA_ALL_APP_ID, cb_data.req_data.remote_bda); } - +#endif // #if (CLASSIC_BT_INCLUDED == TRUE) cb_data.req_data.conn_id = conn_id; cb_data.req_data.trans_id = trans_id; cb_data.req_data.p_data = (tBTA_GATTS_REQ_DATA *)p_data; @@ -980,6 +983,7 @@ static void bta_gatts_conn_cback (tGATT_IF gatt_if, BD_ADDR bda, UINT16 conn_id, p_reg = bta_gatts_find_app_rcb_by_app_if(gatt_if); if (p_reg && p_reg->p_cback) { +#if (CLASSIC_BT_INCLUDED == TRUE) /* there is no RM for GATT */ if (transport == BTA_TRANSPORT_BR_EDR) { if (connected) { @@ -988,6 +992,7 @@ static void bta_gatts_conn_cback (tGATT_IF gatt_if, BD_ADDR bda, UINT16 conn_id, bta_sys_conn_close( BTA_ID_GATTS , BTA_ALL_APP_ID, bda); } } +#endif // #if (CLASSIC_BT_INCLUDED == TRUE) if(evt == BTA_GATTS_CONNECT_EVT) { tL2C_LCB *p_lcb = l2cu_find_lcb_by_bd_addr(bda, BT_TRANSPORT_LE); if(p_lcb != NULL) { diff --git a/components/bt/host/bluedroid/bta/hh/bta_hh_le.c b/components/bt/host/bluedroid/bta/hh/bta_hh_le.c index ae150a3c946..9bb7801a412 100644 --- a/components/bt/host/bluedroid/bta/hh/bta_hh_le.c +++ b/components/bt/host/bluedroid/bta/hh/bta_hh_le.c @@ -2605,8 +2605,9 @@ static void bta_hh_le_add_dev_bg_conn(tBTA_HH_DEV_CB *p_cb, BOOLEAN check_bond) BTA_GATTC_Enh_Open(bta_hh_cb.gatt_if, p_cb->addr, BLE_ADDR_UNKNOWN_TYPE, FALSE, BTA_GATT_TRANSPORT_LE, FALSE, BLE_ADDR_UNKNOWN_TYPE, false, 0xFF, 0xFF, 0, NULL, NULL); p_cb->in_bg_conn = TRUE; - +#if (BLE_GATT_BGCONN == TRUE) BTA_DmBleSetBgConnType(BTA_DM_BLE_CONN_AUTO, NULL); +#endif // (BLE_GATT_BGCONN == TRUE) } return; } diff --git a/components/bt/host/bluedroid/bta/include/bta/bta_api.h b/components/bt/host/bluedroid/bta/include/bta/bta_api.h index c0adcf22f5c..116bdc95571 100644 --- a/components/bt/host/bluedroid/bta/include/bta/bta_api.h +++ b/components/bt/host/bluedroid/bta/include/bta/bta_api.h @@ -293,9 +293,6 @@ typedef struct { BOOLEAN report_dup; /* report duplicated inquiry response with higher RSSI value */ tBTA_DM_INQ_FILT filter_type; /* Filter condition type. */ tBTA_DM_INQ_COND filter_cond; /* Filter condition data. */ -#if (defined(BTA_HOST_INTERLEAVE_SEARCH) && BTA_HOST_INTERLEAVE_SEARCH == TRUE) - UINT8 intl_duration[4];/*duration array storing the interleave scan's time portions*/ -#endif } tBTA_DM_INQ; /* Config EIR callback */ @@ -514,13 +511,6 @@ typedef struct { tBTA_BLE_SERVICE service; } tBTA_BLE_INQ_DATA; -enum { - BTA_BLE_BATCH_SCAN_MODE_PASS = 1, - BTA_BLE_BATCH_SCAN_MODE_ACTI = 2, - BTA_BLE_BATCH_SCAN_MODE_PASS_ACTI = 3 -}; -typedef UINT8 tBTA_BLE_BATCH_SCAN_MODE; - enum { BTA_BLE_DISCARD_OLD_ITEMS = 0, BTA_BLE_DISCARD_LOWER_RSSI_ITEMS = 1 @@ -533,19 +523,6 @@ enum { }; typedef UINT8 tBTA_BLE_ADV_CHANGE_REASON; -enum { - BTA_BLE_BATCH_SCAN_ENB_EVT = 1, - BTA_BLE_BATCH_SCAN_CFG_STRG_EVT = 2, - BTA_BLE_BATCH_SCAN_DATA_EVT = 3, - BTA_BLE_BATCH_SCAN_THRES_EVT = 4, - BTA_BLE_BATCH_SCAN_PARAM_EVT = 5, - BTA_BLE_BATCH_SCAN_DIS_EVT = 6 -}; -typedef tBTM_BLE_BATCH_SCAN_EVT tBTA_BLE_BATCH_SCAN_EVT; - -#if (BLE_HOST_TRACK_ADVERTISER_EN == TRUE) -typedef tBTM_BLE_TRACK_ADV_ACTION tBTA_BLE_TRACK_ADV_ACTION; -#endif // #if (BLE_HOST_TRACK_ADVERTISER_EN == TRUE) // #endif /* BLE customer specific feature function type definitions */ @@ -579,7 +556,6 @@ enum { BTA_DM_BLE_SCAN_COND_DELETE, BTA_DM_BLE_SCAN_COND_CLEAR = 2 }; -typedef UINT8 tBTA_DM_BLE_SCAN_COND_OP; /* ADV payload filtering vendor specific call event */ enum { @@ -587,18 +563,6 @@ enum { BTA_BLE_SCAN_PF_COND_EVT }; -/* filter selection bit index */ -#define BTA_DM_BLE_PF_ADDR_FILTER BTM_BLE_PF_ADDR_FILTER -#define BTA_DM_BLE_PF_SRVC_DATA BTM_BLE_PF_SRVC_DATA -#define BTA_DM_BLE_PF_SRVC_UUID BTM_BLE_PF_SRVC_UUID -#define BTA_DM_BLE_PF_SRVC_SOL_UUID BTM_BLE_PF_SRVC_SOL_UUID -#define BTA_DM_BLE_PF_LOCAL_NAME BTM_BLE_PF_LOCAL_NAME -#define BTA_DM_BLE_PF_MANU_DATA BTM_BLE_PF_MANU_DATA -#define BTA_DM_BLE_PF_SRVC_DATA_PATTERN BTM_BLE_PF_SRVC_DATA_PATTERN -#define BTA_DM_BLE_PF_TYPE_ALL BTM_BLE_PF_TYPE_ALL -#define BTA_DM_BLE_PF_TYPE_MAX BTM_BLE_PF_TYPE_MAX -typedef UINT8 tBTA_DM_BLE_PF_COND_TYPE; - typedef union { UINT16 uuid16_mask; UINT32 uuid32_mask; @@ -634,18 +598,6 @@ typedef struct { as data pattern, set to all 0xff, match exact data */ } tBTA_DM_BLE_PF_SRVC_PATTERN_COND; -typedef union { - tBLE_BD_ADDR target_addr; - tBTA_DM_BLE_PF_LOCAL_NAME_COND local_name; /* local name filtering */ - tBTA_DM_BLE_PF_MANU_COND manu_data; /* manufacturer data filtering */ - tBTA_DM_BLE_PF_UUID_COND srvc_uuid; /* service UUID filtering */ - tBTA_DM_BLE_PF_UUID_COND solicitate_uuid; /* solicited service UUID filtering */ - tBTA_DM_BLE_PF_SRVC_PATTERN_COND srvc_data; /* service data pattern */ -} tBTA_DM_BLE_PF_COND_PARAM; - -typedef UINT8 tBTA_DM_BLE_PF_FILT_INDEX; -typedef UINT8 tBTA_DM_BLE_PF_AVBL_SPACE; - typedef INT8 tBTA_DM_RSSI_VALUE; typedef UINT8 tBTA_DM_LINK_QUALITY_VALUE; @@ -1053,82 +1005,8 @@ typedef union { /* Security callback */ typedef void (tBTA_DM_SEC_CBACK)(tBTA_DM_SEC_EVT event, tBTA_DM_SEC *p_data); -#if (BLE_HOST_BLE_MULTI_ADV_EN == TRUE) -#define BTA_BLE_MULTI_ADV_ILLEGAL 0 - -/* multi adv callback event */ -#define BTA_BLE_MULTI_ADV_ENB_EVT 1 -#define BTA_BLE_MULTI_ADV_DISABLE_EVT 2 -#define BTA_BLE_MULTI_ADV_PARAM_EVT 3 -#define BTA_BLE_MULTI_ADV_DATA_EVT 4 - -typedef UINT8 tBTA_BLE_MULTI_ADV_EVT; - -/* multi adv callback */ -typedef void (tBTA_BLE_MULTI_ADV_CBACK)(tBTA_BLE_MULTI_ADV_EVT event, - UINT8 inst_id, void *p_ref, tBTA_STATUS status); -#endif // #if (BLE_HOST_BLE_MULTI_ADV_EN == TRUE) - typedef UINT32 tBTA_DM_BLE_REF_VALUE; -#define BTA_DM_BLE_PF_ENABLE_EVT BTM_BLE_PF_ENABLE -#define BTA_DM_BLE_PF_CONFIG_EVT BTM_BLE_PF_CONFIG -typedef UINT8 tBTA_DM_BLE_PF_EVT; - -#define BTA_DM_BLE_PF_ENABLE 1 -#define BTA_DM_BLE_PF_CONFIG 2 -typedef UINT8 tBTA_DM_BLE_PF_ACTION; - -/* Config callback */ -typedef void (tBTA_DM_BLE_PF_CFG_CBACK) (tBTA_DM_BLE_PF_ACTION action, - tBTA_DM_BLE_PF_COND_TYPE cfg_cond, - tBTA_DM_BLE_PF_AVBL_SPACE avbl_space, tBTA_STATUS status, - tBTA_DM_BLE_REF_VALUE ref_value); -/* Param callback */ -typedef void (tBTA_DM_BLE_PF_PARAM_CBACK) (UINT8 action_type, tBTA_DM_BLE_PF_AVBL_SPACE avbl_space, - tBTA_DM_BLE_REF_VALUE ref_value, tBTA_STATUS status); - -/* Status callback */ -typedef void (tBTA_DM_BLE_PF_STATUS_CBACK) (UINT8 action, tBTA_STATUS status, - tBTA_DM_BLE_REF_VALUE ref_value); - - -#define BTA_DM_BLE_PF_BRDCAST_ADDR_FILT 1 -#define BTA_DM_BLE_PF_SERV_DATA_CHG_FILT 2 -#define BTA_DM_BLE_PF_SERV_UUID 4 -#define BTA_DM_BLE_PF_SERV_SOLC_UUID 8 -#define BTA_DM_BLE_PF_LOC_NAME_CHECK 16 -#define BTA_DM_BLE_PF_MANUF_NAME_CHECK 32 -#define BTA_DM_BLE_PF_SERV_DATA_CHECK 64 -typedef UINT16 tBTA_DM_BLE_PF_FEAT_SEL; - -#define BTA_DM_BLE_PF_LIST_LOGIC_OR 1 -#define BTA_DM_BLE_PF_LIST_LOGIC_AND 2 -typedef UINT16 tBTA_DM_BLE_PF_LIST_LOGIC_TYPE; - -#define BTA_DM_BLE_PF_FILT_LOGIC_OR 0 -#define BTA_DM_BLE_PF_FILT_LOGIC_AND 1 -typedef UINT16 tBTA_DM_BLE_PF_FILT_LOGIC_TYPE; - -typedef UINT8 tBTA_DM_BLE_PF_RSSI_THRESHOLD; -typedef UINT8 tBTA_DM_BLE_PF_DELIVERY_MODE; -typedef UINT16 tBTA_DM_BLE_PF_TIMEOUT; -typedef UINT8 tBTA_DM_BLE_PF_TIMEOUT_CNT; -typedef UINT16 tBTA_DM_BLE_PF_ADV_TRACK_ENTRIES; - -typedef struct { - tBTA_DM_BLE_PF_FEAT_SEL feat_seln; - tBTA_DM_BLE_PF_LIST_LOGIC_TYPE list_logic_type; - tBTA_DM_BLE_PF_FILT_LOGIC_TYPE filt_logic_type; - tBTA_DM_BLE_PF_RSSI_THRESHOLD rssi_high_thres; - tBTA_DM_BLE_PF_RSSI_THRESHOLD rssi_low_thres; - tBTA_DM_BLE_PF_DELIVERY_MODE dely_mode; - tBTA_DM_BLE_PF_TIMEOUT found_timeout; - tBTA_DM_BLE_PF_TIMEOUT lost_timeout; - tBTA_DM_BLE_PF_TIMEOUT_CNT found_timeout_cnt; - tBTA_DM_BLE_PF_ADV_TRACK_ENTRIES num_of_tracking_entries; -} tBTA_DM_BLE_PF_FILT_PARAMS; - /* Search callback events */ #define BTA_DM_INQ_RES_EVT 0 /* Inquiry result for a peer device. */ #define BTA_DM_INQ_CMPL_EVT 1 /* Inquiry complete. */ @@ -1310,11 +1188,6 @@ typedef void (tBTA_DM_ENCRYPT_CBACK) (BD_ADDR bd_addr, tBTA_TRANSPORT transport, #define BTA_DM_BLE_SEC_MITM BTM_BLE_SEC_ENCRYPT_MITM typedef tBTM_BLE_SEC_ACT tBTA_DM_BLE_SEC_ACT; -typedef tBTM_BLE_TX_TIME_MS tBTA_DM_BLE_TX_TIME_MS; -typedef tBTM_BLE_RX_TIME_MS tBTA_DM_BLE_RX_TIME_MS; -typedef tBTM_BLE_IDLE_TIME_MS tBTA_DM_BLE_IDLE_TIME_MS; -typedef tBTM_BLE_ENERGY_USED tBTA_DM_BLE_ENERGY_USED; - #define BTA_DM_CONTRL_UNKNOWN 0 /* Unknown state */ #define BTA_DM_CONTRL_ACTIVE 1 /* ACL link on, SCO link ongoing, sniff mode */ #define BTA_DM_CONTRL_SCAN 2 /* Scan state - paging/inquiry/trying to connect*/ @@ -1326,9 +1199,6 @@ typedef UINT8 tBTA_DM_BLE_ADV_STATE; typedef UINT8 tBTA_DM_BLE_ADV_INFO_PRESENT; typedef UINT8 tBTA_DM_BLE_RSSI_VALUE; typedef UINT16 tBTA_DM_BLE_ADV_INFO_TIMESTAMP; -#if (BLE_HOST_TRACK_ADVERTISER_EN == TRUE) -typedef tBTM_BLE_TRACK_ADV_DATA tBTA_DM_BLE_TRACK_ADV_DATA; -#endif // #if (BLE_HOST_TRACK_ADVERTISER_EN == TRUE) typedef void (tBTA_BLE_SCAN_THRESHOLD_CBACK)(tBTA_DM_BLE_REF_VALUE ref_value); @@ -1336,33 +1206,12 @@ typedef void (tBTA_BLE_SCAN_REP_CBACK) (tBTA_DM_BLE_REF_VALUE ref_value, UINT8 r UINT8 num_records, UINT16 data_len, UINT8 *p_rep_data, tBTA_STATUS status); -typedef void (tBTA_BLE_SCAN_SETUP_CBACK) (tBTA_BLE_BATCH_SCAN_EVT evt, - tBTA_DM_BLE_REF_VALUE ref_value, - tBTA_STATUS status); - typedef void (tBTA_START_STOP_SCAN_CMPL_CBACK) (tBTA_STATUS status); typedef void (tBTA_START_STOP_ADV_CMPL_CBACK) (tBTA_STATUS status); typedef void (tBTA_CLEAR_ADV_CMPL_CBACK) (tBTA_STATUS status); -#if (BLE_HOST_TRACK_ADVERTISER_EN == TRUE) -typedef void (tBTA_BLE_TRACK_ADV_CMPL_CBACK)(int action, tBTA_STATUS status, - tBTA_DM_BLE_PF_AVBL_SPACE avbl_space, - tBTA_DM_BLE_REF_VALUE ref_value); - -typedef void (tBTA_BLE_TRACK_ADV_CBACK)(tBTA_DM_BLE_TRACK_ADV_DATA *p_adv_data); -#endif // #if (BLE_HOST_TRACK_ADVERTISER_EN == TRUE) - -#if (BLE_HOST_ENERGY_INFO_EN == TRUE) -typedef void (tBTA_BLE_ENERGY_INFO_CBACK)(tBTA_DM_BLE_TX_TIME_MS tx_time, - tBTA_DM_BLE_RX_TIME_MS rx_time, - tBTA_DM_BLE_IDLE_TIME_MS idle_time, - tBTA_DM_BLE_ENERGY_USED energy_used, - tBTA_DM_CONTRL_STATE ctrl_state, - tBTA_STATUS status); -#endif // #if (BLE_HOST_ENERGY_INFO_EN == TRUE) - #else typedef UINT8 tBTA_DM_BLE_SEC_ACT; #endif @@ -2898,9 +2747,6 @@ extern void BTA_DmBleScan(BOOLEAN start, UINT32 duration, tBTA_DM_SEARCH_CBACK *p_results_cb, tBTA_START_STOP_SCAN_CMPL_CBACK *p_start_stop_scan_cb); -#if (BLE_HOST_STOP_ADV_UNUSED == TRUE) -extern void BTA_DmBleStopAdvertising(void); -#endif // #if (BLE_HOST_STOP_ADV_UNUSED == TRUE) extern void BTA_DmSetRandAddress(BD_ADDR rand_addr, tBTA_SET_RAND_ADDR_CBACK *p_set_rand_addr_cback); extern void BTA_DmClearRandAddress(void); @@ -3066,7 +2912,7 @@ extern void BTA_DmUpdateDuplicateExceptionalList(UINT8 subcode, UINT32 type, /******************************************************************************* ** -** Function BTA_DmBleBroadcast +** Function BTA_DmBleAdvStop ** ** Description This function starts or stops LE broadcasting. ** @@ -3076,68 +2922,7 @@ extern void BTA_DmUpdateDuplicateExceptionalList(UINT8 subcode, UINT32 type, ** Returns None ** *******************************************************************************/ -extern void BTA_DmBleBroadcast (BOOLEAN start, tBTA_START_STOP_ADV_CMPL_CBACK *p_start_stop_adv_cb); - -#if (BLE_HOST_BLE_MULTI_ADV_EN == TRUE) -/******************************************************************************* -** -** Function BTA_BleEnableAdvInstance -** -** Description This function enables the Multi ADV instance feature -** -** Parameters p_params Pointer to ADV param user defined structure -** p_cback Pointer to Multi ADV callback structure -** p_ref - Reference pointer -** -** Returns None -** -*******************************************************************************/ -extern void BTA_BleEnableAdvInstance (tBTA_BLE_ADV_PARAMS *p_params, - tBTA_BLE_MULTI_ADV_CBACK *p_cback, void *p_ref); - -/******************************************************************************* -** -** Function BTA_BleUpdateAdvInstParam -** -** Description This function updates the Multi ADV instance params -** -** Parameters inst_id Instance ID -** p_params Pointer to ADV param user defined structure -** -** Returns None -** -*******************************************************************************/ -extern void BTA_BleUpdateAdvInstParam (UINT8 inst_id, - tBTA_BLE_ADV_PARAMS *p_params); - -/******************************************************************************* -** -** Function BTA_BleCfgAdvInstData -** -** Description This function is called to configure the ADV instance data -** -** Parameters inst_id - Instance ID -** is_scan_rsp - Boolean value Scan response -** Pointer to User defined ADV data structure -** Returns None -** -*******************************************************************************/ -extern void BTA_BleCfgAdvInstData (UINT8 inst_id, BOOLEAN is_scan_rsp, - tBTA_BLE_AD_MASK data_mask, tBTA_BLE_ADV_DATA *p_data); - -/******************************************************************************* -** -** Function BTA_BleDisableAdvInstance -** -** Description This function is called to disable the ADV instance -** -** Parameters inst_id - Instance ID to be disabled -** -** Returns None -** -*******************************************************************************/ -extern void BTA_BleDisableAdvInstance(UINT8 inst_id); -#endif // #if (BLE_HOST_BLE_MULTI_ADV_EN == TRUE) +extern void BTA_DmBleAdvStop (BOOLEAN start, tBTA_START_STOP_ADV_CMPL_CBACK *p_start_stop_adv_cb); /******************************************************************************* ** @@ -3232,178 +3017,6 @@ void BTA_DmBleGapCsSetProcPatams(tBTA_DM_CS_SET_PROC_PARAMS *set_proc_params); void BTA_DmBleGapCsProcEnable(uint16_t conn_handle, uint8_t config_id, uint8_t enable); #endif // (BT_BLE_FEAT_CHANNEL_SOUNDING == TRUE) -/******************************************************************************* -** -** Function BTA_DmBleSetStorageParams -** -** Description This function is called to set the storage parameters -** -** Parameters batch_scan_full_max -Max storage space (in %) allocated to full scanning -** batch_scan_trunc_max -Max storage space (in %) allocated to truncated scanning -** batch_scan_notify_threshold - Setup notification level based on total space -** consumed by both pools. Setting it to 0 will disable threshold notification -** p_setup_cback - Setup callback -** p_thres_cback - Threshold callback -** p_rep_cback - Reports callback -** ref_value - Reference value -** -** Returns None -** -*******************************************************************************/ -extern void BTA_DmBleSetStorageParams(UINT8 batch_scan_full_max, - UINT8 batch_scan_trunc_max, - UINT8 batch_scan_notify_threshold, - tBTA_BLE_SCAN_SETUP_CBACK *p_setup_cback, - tBTA_BLE_SCAN_THRESHOLD_CBACK *p_thres_cback, - tBTA_BLE_SCAN_REP_CBACK *p_rep_cback, - tBTA_DM_BLE_REF_VALUE ref_value); - -/******************************************************************************* -** -** Function BTA_DmBleEnableBatchScan -** -** Description This function is called to enable the batch scan -** -** Parameters scan_mode -Batch scan mode -** scan_interval - Scan interval -** scan_window - Scan window -** discard_rule -Discard rules -** addr_type - Address type -** ref_value - Reference value -** -** Returns None -** -*******************************************************************************/ -extern void BTA_DmBleEnableBatchScan(tBTA_BLE_BATCH_SCAN_MODE scan_mode, - UINT32 scan_interval, UINT32 scan_window, - tBTA_BLE_DISCARD_RULE discard_rule, - tBLE_ADDR_TYPE addr_type, - tBTA_DM_BLE_REF_VALUE ref_value); - -/******************************************************************************* -** -** Function BTA_DmBleReadScanReports -** -** Description This function is called to read the batch scan reports -** -** Parameters scan_mode -Batch scan mode -** ref_value - Reference value -** -** Returns None -** -*******************************************************************************/ -extern void BTA_DmBleReadScanReports(tBTA_BLE_BATCH_SCAN_MODE scan_type, - tBTA_DM_BLE_REF_VALUE ref_value); - -/******************************************************************************* -** -** Function BTA_DmBleDisableBatchScan -** -** Description This function is called to disable the batch scanning -** -** Parameters ref_value - Reference value -** -** Returns None -** -*******************************************************************************/ -extern void BTA_DmBleDisableBatchScan(tBTA_DM_BLE_REF_VALUE ref_value); - -/******************************************************************************* -** -** Function BTA_DmEnableScanFilter -** -** Description This function is called to enable the adv data payload filter -** -** Parameters action - enable or disable the APCF feature -** p_cmpl_cback - Command completed callback -** ref_value - Reference value -** -** Returns void -** -*******************************************************************************/ -extern void BTA_DmEnableScanFilter(UINT8 action, - tBTA_DM_BLE_PF_STATUS_CBACK *p_cmpl_cback, - tBTA_DM_BLE_REF_VALUE ref_value); - -/******************************************************************************* -** -** Function BTA_DmBleScanFilterSetup -** -** Description This function is called to setup the filter params -** -** Parameters p_target: enable the filter condition on a target device; if NULL -** filt_index - Filter index -** p_filt_params -Filter parameters -** ref_value - Reference value -** action - Add, delete or clear -** p_cmpl_back - Command completed callback -** -** Returns void -** -*******************************************************************************/ -extern void BTA_DmBleScanFilterSetup(UINT8 action, - tBTA_DM_BLE_PF_FILT_INDEX filt_index, - tBTA_DM_BLE_PF_FILT_PARAMS *p_filt_params, - tBLE_BD_ADDR *p_target, - tBTA_DM_BLE_PF_PARAM_CBACK *p_cmpl_cback, - tBTA_DM_BLE_REF_VALUE ref_value); - -/******************************************************************************* -** -** Function BTA_DmBleCfgFilterCondition -** -** Description This function is called to configure the adv data payload filter -** condition. -** -** Parameters action: to read/write/clear -** cond_type: filter condition type -** filt_index - Filter index -** p_cond: filter condition parameter -** p_cmpl_back - Command completed callback -** ref_value - Reference value -** -** Returns void -** -*******************************************************************************/ -extern void BTA_DmBleCfgFilterCondition(tBTA_DM_BLE_SCAN_COND_OP action, - tBTA_DM_BLE_PF_COND_TYPE cond_type, - tBTA_DM_BLE_PF_FILT_INDEX filt_index, - tBTA_DM_BLE_PF_COND_PARAM *p_cond, - tBTA_DM_BLE_PF_CFG_CBACK *p_cmpl_cback, - tBTA_DM_BLE_REF_VALUE ref_value); - -#if (BLE_HOST_TRACK_ADVERTISER_EN == TRUE) -/******************************************************************************* -** -** Function BTA_DmBleTrackAdvertiser -** -** Description This function is called to track the advertiser -** -** Parameters ref_value - Reference value -** p_track_adv_cback - ADV callback -** -** Returns None -** -*******************************************************************************/ -extern void BTA_DmBleTrackAdvertiser(tBTA_DM_BLE_REF_VALUE ref_value, - tBTA_BLE_TRACK_ADV_CBACK *p_track_adv_cback); -#endif // #if (BLE_HOST_TRACK_ADVERTISER_EN == TRUE) - -#if (BLE_HOST_ENERGY_INFO_EN == TRUE) -/******************************************************************************* -** -** Function BTA_DmBleGetEnergyInfo -** -** Description This function is called to obtain the energy info -** -** Parameters p_cmpl_cback - Command complete callback -** -** Returns void -** -*******************************************************************************/ -extern void BTA_DmBleGetEnergyInfo(tBTA_BLE_ENERGY_INFO_CBACK *p_cmpl_cback); -#endif // #if (BLE_HOST_ENERGY_INFO_EN == TRUE) - /******************************************************************************* ** ** Function BTA_BrcmInit @@ -3415,17 +3028,6 @@ extern void BTA_DmBleGetEnergyInfo(tBTA_BLE_ENERGY_INFO_CBACK *p_cmpl_cback); *******************************************************************************/ extern void BTA_VendorInit (void); -/******************************************************************************* -** -** Function BTA_BrcmCleanup -** -** Description This function frees up Broadcom specific VS specific dynamic memory -** -** Returns void -** -*******************************************************************************/ -extern void BTA_VendorCleanup (void); - #if (BLE_50_FEATURE_SUPPORT == TRUE) extern void BTA_DmBleGapReadPHY(BD_ADDR addr); diff --git a/components/bt/host/bluedroid/bta/include/bta/bta_sys.h b/components/bt/host/bluedroid/bta/include/bta/bta_sys.h index ecf4791995d..07cd39d24c1 100644 --- a/components/bt/host/bluedroid/bta/include/bta/bta_sys.h +++ b/components/bt/host/bluedroid/bta/include/bta/bta_sys.h @@ -44,7 +44,7 @@ typedef void (tBTA_SYS_DISABLE)(void); /* HW modules */ enum { BTA_SYS_HW_BLUETOOTH, - BTA_SYS_HW_RT, + // BTA_SYS_HW_RT, BTA_SYS_MAX_HW_MODULES }; diff --git a/components/bt/host/bluedroid/bta/sys/bta_sys_conn.c b/components/bt/host/bluedroid/bta/sys/bta_sys_conn.c index 914df55d9cb..b251a38694a 100644 --- a/components/bt/host/bluedroid/bta/sys/bta_sys_conn.c +++ b/components/bt/host/bluedroid/bta/sys/bta_sys_conn.c @@ -28,6 +28,8 @@ #include "bta_sys_int.h" #include "bta/utl.h" +#if (CLASSIC_BT_INCLUDED == TRUE) + /******************************************************************************* ** ** Function bta_sys_rm_register @@ -661,3 +663,5 @@ BOOLEAN bta_sys_vs_hdl(UINT16 evt, void *p) return FALSE; } + +#endif // #if (CLASSIC_BT_INCLUDED == TRUE) diff --git a/components/bt/host/bluedroid/bta/sys/bta_sys_main.c b/components/bt/host/bluedroid/bta/sys/bta_sys_main.c index db6ee489728..ea1bc5a8540 100644 --- a/components/bt/host/bluedroid/bta/sys/bta_sys_main.c +++ b/components/bt/host/bluedroid/bta/sys/bta_sys_main.c @@ -543,7 +543,7 @@ void bta_sys_deregister(UINT8 id) ** ** Function bta_sys_is_register ** -** Description Called by other BTA subsystems to get registeration +** Description Called by other BTA subsystems to get registration ** status. ** ** @@ -724,7 +724,7 @@ void bta_sys_disable(tBTA_SYS_HW_MODULE module) bta_id_max = BTA_ID_BLUETOOTH_MAX; break; default: - APPL_TRACE_WARNING("bta_sys_disable: unkown module"); + APPL_TRACE_WARNING("bta_sys_disable: unknown module"); return; } @@ -750,7 +750,7 @@ void bta_sys_set_trace_level(UINT8 level) { appl_trace_level = level; } - +#if (CLASSIC_BT_INCLUDED == TRUE) /******************************************************************************* ** ** Function bta_sys_get_sys_features @@ -764,3 +764,4 @@ UINT16 bta_sys_get_sys_features (void) { return bta_sys_cb.sys_features; } +#endif // #if (CLASSIC_BT_INCLUDED == TRUE) diff --git a/components/bt/host/bluedroid/bta/sys/include/bta_sys_int.h b/components/bt/host/bluedroid/bta/sys/include/bta_sys_int.h index aa2596d96cc..5cff706b564 100644 --- a/components/bt/host/bluedroid/bta/sys/include/bta_sys_int.h +++ b/components/bt/host/bluedroid/bta/sys/include/bta_sys_int.h @@ -56,8 +56,8 @@ typedef struct { tBTA_SYS_HW_STATE state; tBTA_SYS_HW_CBACK *sys_hw_cback[BTA_SYS_MAX_HW_MODULES]; /* enable callback for each HW modules */ UINT32 sys_hw_module_active; /* bitmask of all active modules */ +#if (CLASSIC_BT_INCLUDED == TRUE) UINT16 sys_features; /* Bitmask of sys features */ - tBTA_SYS_CONN_CBACK *prm_cb; /* role management callback registered by DM */ tBTA_SYS_CONN_CBACK *ppm_cb; /* low power management callback registered by DM */ tBTA_SYS_CONN_CBACK *p_policy_cb; /* link policy change callback registered by DM */ @@ -72,6 +72,7 @@ typedef struct { #endif /* VS event handler */ tBTA_SYS_VS_EVT_HDLR *p_vs_evt_hdlr; +#endif // #if (CLASSIC_BT_INCLUDED == TRUE) } tBTA_SYS_CB; diff --git a/components/bt/host/bluedroid/btc/core/btc_main.c b/components/bt/host/bluedroid/btc/core/btc_main.c index 593bb99e071..0802202797b 100644 --- a/components/bt/host/bluedroid/btc/core/btc_main.c +++ b/components/bt/host/bluedroid/btc/core/btc_main.c @@ -79,9 +79,9 @@ static void btc_deinit_bluetooth(void) #if (GATTC_INCLUDED) bta_gattc_deinit(); #endif /* #if (GATTC_INCLUDED) */ -#if (GATTS_INCLUDED) +#if (GATTS_INCLUDED == TRUE) bta_gatts_deinit(); -#endif /* #if (GATTS_INCLUDED) */ +#endif /* #if (GATTS_INCLUDED == TRUE) */ bte_main_shutdown(); #if (SMP_INCLUDED) btc_config_clean_up(); @@ -168,6 +168,7 @@ uint32_t btc_get_ble_status(void) status |= BIT(BTC_BLE_STATUS_CONN); } +#if ((SMP_INCLUDED == TRUE) || (BLE_PRIVACY_SPT == TRUE)) // Address resolve status extern uint8_t btm_get_ble_addr_resolve_disable_status(void); uint8_t addr_resolve_disable = btm_get_ble_addr_resolve_disable_status(); @@ -175,6 +176,7 @@ uint32_t btc_get_ble_status(void) BTC_TRACE_WARNING("%s address resolve disabled", __func__); status |= BIT(BTC_BLE_STATUS_ADDR_RESOLVE_DISABLE); } +#endif // #if ((SMP_INCLUDED == TRUE) || (BLE_PRIVACY_SPT == TRUE)) #if (SMP_INCLUDED == TRUE) // Number of recorded devices diff --git a/components/bt/host/bluedroid/btc/profile/std/gap/btc_gap_ble.c b/components/bt/host/bluedroid/btc/profile/std/gap/btc_gap_ble.c index 7ebb3bb40e8..472d3b7fbd6 100644 --- a/components/bt/host/bluedroid/btc/profile/std/gap/btc_gap_ble.c +++ b/components/bt/host/bluedroid/btc/profile/std/gap/btc_gap_ble.c @@ -470,35 +470,6 @@ static void btc_stop_adv_callback(uint8_t status) } #endif // #if (BLE_42_ADV_EN == TRUE) -void btc_update_duplicate_exceptional_list_callback(tBTA_STATUS status, uint8_t subcode, uint32_t length, uint8_t *device_info) -{ - esp_ble_gap_cb_param_t param; - bt_status_t ret; - btc_msg_t msg = {0}; - - msg.sig = BTC_SIG_API_CB; - msg.pid = BTC_PID_GAP_BLE; - msg.act = ESP_GAP_BLE_UPDATE_DUPLICATE_EXCEPTIONAL_LIST_COMPLETE_EVT; - param.update_duplicate_exceptional_list_cmpl.status = status; - param.update_duplicate_exceptional_list_cmpl.subcode = subcode; - if(length > sizeof(param.update_duplicate_exceptional_list_cmpl.device_info)) { - length = sizeof(param.update_duplicate_exceptional_list_cmpl.device_info); - } - param.update_duplicate_exceptional_list_cmpl.length = length; - memcpy(param.update_duplicate_exceptional_list_cmpl.device_info, device_info, length); - ret = btc_transfer_context(&msg, ¶m, sizeof(esp_ble_gap_cb_param_t), NULL, NULL); - - if (ret != BT_STATUS_SUCCESS) { - BTC_TRACE_ERROR("%s btc_transfer_context failed\n", __func__); - } -} - -static void btc_ble_update_duplicate_exceptional_list(uint8_t subcode, uint32_t info_type, BD_ADDR device_info, - tBTA_UPDATE_DUPLICATE_EXCEPTIONAL_LIST_CMPL_CBACK p_update_duplicate_ignore_list_cback) -{ - BTA_DmUpdateDuplicateExceptionalList(subcode, info_type, device_info, p_update_duplicate_ignore_list_cback); -} - #if (BLE_42_ADV_EN == TRUE) static void btc_ble_start_advertising (esp_ble_adv_params_t *ble_adv_params, tBTA_START_ADV_CMPL_CBACK start_adv_cback) { @@ -735,6 +706,38 @@ static void btc_stop_scan_callback(tBTA_STATUS status) } #endif // #if (BLE_42_SCAN_EN == TRUE) #endif // #if (BLE_42_FEATURE_SUPPORT == TRUE) + +#if ((BLE_42_SCAN_EN == TRUE) || (BLE_50_EXTEND_SCAN_EN == TRUE)) +void btc_update_duplicate_exceptional_list_callback(tBTA_STATUS status, uint8_t subcode, uint32_t length, uint8_t *device_info) +{ + esp_ble_gap_cb_param_t param; + bt_status_t ret; + btc_msg_t msg = {0}; + + msg.sig = BTC_SIG_API_CB; + msg.pid = BTC_PID_GAP_BLE; + msg.act = ESP_GAP_BLE_UPDATE_DUPLICATE_EXCEPTIONAL_LIST_COMPLETE_EVT; + param.update_duplicate_exceptional_list_cmpl.status = status; + param.update_duplicate_exceptional_list_cmpl.subcode = subcode; + if(length > sizeof(param.update_duplicate_exceptional_list_cmpl.device_info)) { + length = sizeof(param.update_duplicate_exceptional_list_cmpl.device_info); + } + param.update_duplicate_exceptional_list_cmpl.length = length; + memcpy(param.update_duplicate_exceptional_list_cmpl.device_info, device_info, length); + ret = btc_transfer_context(&msg, ¶m, sizeof(esp_ble_gap_cb_param_t), NULL, NULL); + + if (ret != BT_STATUS_SUCCESS) { + BTC_TRACE_ERROR("%s btc_transfer_context failed\n", __func__); + } +} + +static void btc_ble_update_duplicate_exceptional_list(uint8_t subcode, uint32_t info_type, BD_ADDR device_info, + tBTA_UPDATE_DUPLICATE_EXCEPTIONAL_LIST_CMPL_CBACK p_update_duplicate_ignore_list_cback) +{ + BTA_DmUpdateDuplicateExceptionalList(subcode, info_type, device_info, p_update_duplicate_ignore_list_cback); +} +#endif // ((BLE_42_SCAN_EN == TRUE) || (BLE_50_EXTEND_SCAN_EN == TRUE)) + void btc_update_conn_param_callback (UINT8 status, BD_ADDR bd_addr, tBTM_LE_UPDATE_CONN_PRAMS *update_conn_params) { esp_ble_gap_cb_param_t param; @@ -1801,7 +1804,7 @@ static void btc_ble_stop_advertising(tBTA_START_STOP_ADV_CMPL_CBACK *stop_adv_cb { bool stop_adv = false; - BTA_DmBleBroadcast(stop_adv, stop_adv_cb); + BTA_DmBleAdvStop(stop_adv, stop_adv_cb); } #endif // #if (BLE_42_ADV_EN == TRUE) @@ -2695,13 +2698,17 @@ void btc_gap_ble_call_handler(btc_msg_t *msg) btc_scan_rsp_data_raw_callback); break; #endif // #if (BLE_42_ADV_EN == TRUE) +#endif // #if (BLE_42_FEATURE_SUPPORT == TRUE) + +#if ((BLE_42_SCAN_EN == TRUE) || (BLE_50_EXTEND_SCAN_EN == TRUE)) case BTC_GAP_BLE_UPDATE_DUPLICATE_SCAN_EXCEPTIONAL_LIST: btc_ble_update_duplicate_exceptional_list(arg->update_duplicate_exceptional_list.subcode, arg->update_duplicate_exceptional_list.info_type, arg->update_duplicate_exceptional_list.device_info, btc_update_duplicate_exceptional_list_callback); break; -#endif // #if (BLE_42_FEATURE_SUPPORT == TRUE) +#endif // ((BLE_42_SCAN_EN == TRUE) || (BLE_50_EXTEND_SCAN_EN == TRUE)) + #if (SMP_INCLUDED == TRUE) case BTC_GAP_BLE_SET_ENCRYPTION_EVT: { BD_ADDR bd_addr; diff --git a/components/bt/host/bluedroid/btc/profile/std/include/btc_gap_ble.h b/components/bt/host/bluedroid/btc/profile/std/include/btc_gap_ble.h index 9784dbf126a..a429751293b 100644 --- a/components/bt/host/bluedroid/btc/profile/std/include/btc_gap_ble.h +++ b/components/bt/host/bluedroid/btc/profile/std/include/btc_gap_ble.h @@ -231,13 +231,15 @@ typedef union { esp_bd_addr_t remote_bda; esp_ble_wl_addr_type_t wl_addr_type; } update_white_list; -#if (BLE_42_FEATURE_SUPPORT == TRUE) +#if ((BLE_42_SCAN_EN == TRUE) || (BLE_50_EXTEND_SCAN_EN == TRUE)) //BTC_GAP_BLE_UPDATE_DUPLICATE_SCAN_EXCEPTIONAL_LIST struct update_duplicate_exceptional_list_args { uint8_t subcode; uint32_t info_type; esp_duplicate_info_t device_info; } update_duplicate_exceptional_list; +#endif // ((BLE_42_SCAN_EN == TRUE) || (BLE_50_EXTEND_SCAN_EN == TRUE)) +#if (BLE_42_FEATURE_SUPPORT == TRUE) //BTC_GAP_BLE_ACT_SET_CONN_PARAMS struct set_conn_params_args { esp_bd_addr_t bd_addr; diff --git a/components/bt/host/bluedroid/common/include/common/bt_target.h b/components/bt/host/bluedroid/common/include/common/bt_target.h index f590d30fe03..4a47d1673b4 100644 --- a/components/bt/host/bluedroid/common/include/common/bt_target.h +++ b/components/bt/host/bluedroid/common/include/common/bt_target.h @@ -428,13 +428,13 @@ #define CONTROLLER_RPA_LIST_ENABLE FALSE #endif -#if (UC_BT_GATTS_ENABLE) +#if (UC_BT_GATTS_ENABLE == TRUE) #define GATTS_INCLUDED TRUE #else #define GATTS_INCLUDED FALSE #endif /* UC_BT_GATTS_ENABLE */ -#if (UC_BT_GATTC_ENABLE) +#if (UC_BT_GATTC_ENABLE == TRUE) #define GATTC_INCLUDED TRUE #else #define GATTC_INCLUDED FALSE @@ -809,11 +809,6 @@ #define BT_CLASSIC_BQB_INCLUDED FALSE #endif -/* This feature is used to enable interleaved scan*/ -#ifndef BTA_HOST_INTERLEAVE_SEARCH -#define BTA_HOST_INTERLEAVE_SEARCH FALSE -#endif - #ifndef BT_USE_TRACES #define BT_USE_TRACES FALSE #endif @@ -1570,71 +1565,6 @@ #define BLE_INCLUDED FALSE #endif -#ifndef BLE_ANDROID_CONTROLLER_SCAN_FILTER -#define BLE_ANDROID_CONTROLLER_SCAN_FILTER FALSE -#endif - -#ifndef BLE_HOST_BLE_MULTI_ADV_EN -#define BLE_HOST_BLE_MULTI_ADV_EN FALSE -#endif - -#ifndef BLE_HOST_TRACK_ADVERTISER_EN -#define BLE_HOST_TRACK_ADVERTISER_EN FALSE -#endif - -#ifndef BLE_HOST_ENERGY_INFO_EN -#define BLE_HOST_ENERGY_INFO_EN FALSE -#endif - - -#ifndef BLE_HOST_ENABLE_TEST_MODE_EN -#define BLE_HOST_ENABLE_TEST_MODE_EN FALSE -#endif - -#ifndef BLE_HOST_EXECUTE_CBACK_EN -#define BLE_HOST_EXECUTE_CBACK_EN FALSE -#endif - -#ifndef BLE_HOST_REMOVE_ALL_ACL_EN -#define BLE_HOST_REMOVE_ALL_ACL_EN FALSE -#endif - -#ifndef BLE_HOST_REMOVE_AN_ACL_EN -#define BLE_HOST_REMOVE_AN_ACL_EN FALSE -#endif - -#ifndef BLE_HOST_READ_TX_POWER_EN -#define BLE_HOST_READ_TX_POWER_EN FALSE -#endif - -#ifndef BLE_HOST_STOP_ADV_UNUSED -#define BLE_HOST_STOP_ADV_UNUSED FALSE -#endif - -#ifndef BLE_HOST_BLE_OBSERVE_EN -#define BLE_HOST_BLE_OBSERVE_EN FALSE -#endif - -#ifndef BLE_HOST_BLE_SCAN_PARAM_UNUSED -#define BLE_HOST_BLE_SCAN_PARAM_UNUSED FALSE -#endif - -#ifndef BLE_HOST_CONN_SCAN_PARAM_EN -#define BLE_HOST_CONN_SCAN_PARAM_EN FALSE -#endif - -#ifndef BLE_HOST_SETUP_STORAGE_EN -#define BLE_HOST_SETUP_STORAGE_EN FALSE -#endif - -#ifndef BLE_HOST_READ_SCAN_REPORTS_EN -#define BLE_HOST_READ_SCAN_REPORTS_EN FALSE -#endif - -#ifndef BLE_HOST_BATCH_SCAN_EN -#define BLE_HOST_BATCH_SCAN_EN FALSE -#endif - #ifndef BLE_HOST_BG_CONNECT_EN #define BLE_HOST_BG_CONNECT_EN FALSE #endif @@ -1658,14 +1588,6 @@ #define BLE_LOCAL_PRIVACY_ENABLED TRUE #endif -/* - * Toggles support for vendor specific extensions such as RPA offloading, - * feature discovery, multi-adv etc. - */ -#ifndef BLE_VND_INCLUDED -#define BLE_VND_INCLUDED FALSE -#endif - #ifndef BTM_BLE_ADV_TX_POWER #ifdef CONFIG_IDF_TARGET_ESP32 #define BTM_BLE_ADV_TX_POWER {-12, -9, -6, -3, 0, 3, 6, 9} @@ -1690,11 +1612,6 @@ #endif #endif - -#ifndef BLE_BATCH_SCAN_INCLUDED -#define BLE_BATCH_SCAN_INCLUDED TRUE -#endif - /****************************************************************************** ** ** ATT/GATT Protocol/Profile Settings diff --git a/components/bt/host/bluedroid/main/bte_init.c b/components/bt/host/bluedroid/main/bte_init.c index 77508b37773..0039af9ae4c 100644 --- a/components/bt/host/bluedroid/main/bte_init.c +++ b/components/bt/host/bluedroid/main/bte_init.c @@ -254,14 +254,18 @@ void BTE_DeinitStack(void) bta_ag_cb_ptr = NULL; } #endif +#if (CLASSIC_BT_INCLUDED == TRUE) if (bta_dm_conn_srvcs_ptr){ osi_free(bta_dm_conn_srvcs_ptr); bta_dm_conn_srvcs_ptr = NULL; } +#endif // #if (CLASSIC_BT_INCLUDED == TRUE) +#if (CLASSIC_BT_INCLUDED == TRUE) if (bta_dm_di_cb_ptr){ osi_free(bta_dm_di_cb_ptr); bta_dm_di_cb_ptr = NULL; } +#endif // #if (CLASSIC_BT_INCLUDED == TRUE) if (bta_dm_search_cb_ptr){ osi_free(bta_dm_search_cb_ptr); bta_dm_search_cb_ptr = NULL; @@ -428,17 +432,25 @@ bt_status_t BTE_InitStack(void) if ((bta_dm_search_cb_ptr = (tBTA_DM_SEARCH_CB *)osi_malloc(sizeof(tBTA_DM_SEARCH_CB))) == NULL) { goto error_exit; } +#if (CLASSIC_BT_INCLUDED == TRUE) if ((bta_dm_di_cb_ptr = (tBTA_DM_DI_CB *)osi_malloc(sizeof(tBTA_DM_DI_CB))) == NULL) { goto error_exit; } +#endif // #if (CLASSIC_BT_INCLUDED == TRUE) +#if (CLASSIC_BT_INCLUDED == TRUE) if ((bta_dm_conn_srvcs_ptr = (tBTA_DM_CONNECTED_SRVCS *)osi_malloc(sizeof(tBTA_DM_CONNECTED_SRVCS))) == NULL) { goto error_exit; } +#endif // #if (CLASSIC_BT_INCLUDED == TRUE) memset((void *)bta_sys_cb_ptr, 0, sizeof(tBTA_SYS_CB)); memset((void *)bta_dm_cb_ptr, 0, sizeof(tBTA_DM_CB)); memset((void *)bta_dm_search_cb_ptr, 0, sizeof(tBTA_DM_SEARCH_CB)); +#if (CLASSIC_BT_INCLUDED == TRUE) memset((void *)bta_dm_di_cb_ptr, 0, sizeof(tBTA_DM_DI_CB)); +#endif // #if (CLASSIC_BT_INCLUDED == TRUE) +#if (CLASSIC_BT_INCLUDED == TRUE) memset((void *)bta_dm_conn_srvcs_ptr, 0, sizeof(tBTA_DM_CONNECTED_SRVCS)); +#endif // #if (CLASSIC_BT_INCLUDED == TRUE) //memset((void *)bta_prm_cb_ptr, 0, sizeof(tBTA_PRM_CB)); #if (defined BTA_HF_INCLUDED && BTA_HF_INCLUDED == TRUE) diff --git a/components/bt/host/bluedroid/main/bte_main.c b/components/bt/host/bluedroid/main/bte_main.c index c974037ef9a..73cbafc644d 100644 --- a/components/bt/host/bluedroid/main/bte_main.c +++ b/components/bt/host/bluedroid/main/bte_main.c @@ -105,9 +105,6 @@ int bte_main_boot_entry(bluedroid_init_done_cb_t cb) ******************************************************************************/ void bte_main_shutdown(void) { -#if (BLE_INCLUDED == TRUE) - BTA_VendorCleanup(); -#endif #if (BT_BLE_DYNAMIC_ENV_MEMORY == TRUE) free_controller_param(); diff --git a/components/bt/host/bluedroid/stack/btm/btm_acl.c b/components/bt/host/bluedroid/stack/btm/btm_acl.c index fc4b44a277b..a5aed0a91b5 100644 --- a/components/bt/host/bluedroid/stack/btm/btm_acl.c +++ b/components/bt/host/bluedroid/stack/btm/btm_acl.c @@ -75,7 +75,9 @@ void btm_acl_init (void) btm_cb.p_bl_changed_cb = NULL; #endif btm_cb.p_acl_db_list = list_new(osi_free_func); +#if (CLASSIC_BT_INCLUDED == TRUE) btm_cb.p_pm_mode_db_list = list_new(osi_free_func); +#endif// #if (CLASSIC_BT_INCLUDED == TRUE) /* Initialize nonzero defaults */ btm_cb.btm_def_link_super_tout = HCI_DEFAULT_INACT_TOUT; @@ -257,7 +259,9 @@ void btm_acl_created (BD_ADDR bda, DEV_CLASS dc, UINT8 bdn[BTM_MAX_REM_BD_NAME_L #endif BTM_TRACE_DEBUG ("Duplicate btm_acl_created: RemBdAddr: %02x%02x%02x%02x%02x%02x\n", bda[0], bda[1], bda[2], bda[3], bda[4], bda[5]); +#if (CLASSIC_BT_INCLUDED == TRUE) BTM_SetLinkPolicy(p->remote_addr, &btm_cb.btm_def_link_policy); +#endif // (CLASSIC_BT_INCLUDED == TRUE) return; } @@ -292,12 +296,16 @@ void btm_acl_created (BD_ADDR bda, DEV_CLASS dc, UINT8 bdn[BTM_MAX_REM_BD_NAME_L p->conn_addr[0], p->conn_addr[1], p->conn_addr[2], p->conn_addr[3], p->conn_addr[4], p->conn_addr[5]); #endif #endif +#if (CLASSIC_BT_INCLUDED == TRUE) p->switch_role_state = BTM_ACL_SWKEY_STATE_IDLE; + p->p_pm_mode_db = btm_pm_sm_alloc(); + #if BTM_PM_DEBUG == TRUE BTM_TRACE_DEBUG( "btm_pm_sm_alloc handle:%d st:%d", hci_handle, p->p_pm_mode_db->state); #endif // BTM_PM_DEBUG +#endif // (CLASSIC_BT_INCLUDED == TRUE) #if (CLASSIC_BT_INCLUDED == TRUE) btm_sec_update_legacy_auth_state(p, BTM_ACL_LEGACY_AUTH_NONE); @@ -384,7 +392,7 @@ void btm_acl_created (BD_ADDR bda, DEV_CLASS dc, UINT8 bdn[BTM_MAX_REM_BD_NAME_L } } - +#if (CLASSIC_BT_INCLUDED == TRUE) /******************************************************************************* ** ** Function btm_acl_report_role_change @@ -408,6 +416,7 @@ void btm_acl_report_role_change (UINT8 hci_status, BD_ADDR bda) btm_cb.devcb.p_switch_role_cb = NULL; } } +#endif // (CLASSIC_BT_INCLUDED == TRUE) /******************************************************************************* ** @@ -432,8 +441,10 @@ void btm_acl_removed (BD_ADDR bda, tBT_TRANSPORT transport) if (p != (tACL_CONN *)NULL) { p->in_use = FALSE; +#if (CLASSIC_BT_INCLUDED == TRUE) /* if the disconnected channel has a pending role switch, clear it now */ btm_acl_report_role_change(HCI_ERR_NO_CONNECTION, bda); +#endif // (CLASSIC_BT_INCLUDED == TRUE) /* Only notify if link up has had a chance to be issued */ if (p->link_up_issued) { @@ -484,8 +495,9 @@ void btm_acl_removed (BD_ADDR bda, tBT_TRANSPORT transport) } #endif - +#if (CLASSIC_BT_INCLUDED == TRUE) list_remove(btm_cb.p_pm_mode_db_list, p->p_pm_mode_db); +#endif // #if (CLASSIC_BT_INCLUDED == TRUE) /* Clear the ACL connection data */ memset(p, 0, sizeof(tACL_CONN)); if (list_remove(btm_cb.p_acl_db_list, p)) { @@ -532,7 +544,9 @@ void btm_acl_device_down (void) void btm_acl_update_busy_level (tBTM_BLI_EVENT event) { UINT8 busy_level_flags = 0; +#if (CLASSIC_BT_INCLUDED == TRUE) BOOLEAN old_inquiry_state = btm_cb.is_inquiry; +#endif // #if (CLASSIC_BT_INCLUDED == TRUE) BTM_TRACE_DEBUG ("btm_acl_update_busy_level\n"); @@ -543,6 +557,7 @@ void btm_acl_update_busy_level (tBTM_BLI_EVENT event) case BTM_BLI_ACL_DOWN_EVT: BTM_TRACE_DEBUG ("BTM_BLI_ACL_DOWN_EVT\n"); break; +#if (CLASSIC_BT_INCLUDED == TRUE) case BTM_BLI_PAGE_EVT: BTM_TRACE_DEBUG ("BTM_BLI_PAGE_EVT\n"); btm_cb.is_paging = TRUE; @@ -568,16 +583,24 @@ void btm_acl_update_busy_level (tBTM_BLI_EVENT event) btm_cb.is_inquiry = FALSE; busy_level_flags = BTM_BL_INQUIRY_COMPLETE; break; +#endif // #if (CLASSIC_BT_INCLUDED == TRUE) } UINT8 busy_level; +#if (CLASSIC_BT_INCLUDED == TRUE) if (btm_cb.is_paging || btm_cb.is_inquiry) { busy_level = 10; - } else { + } else +#endif // #if (CLASSIC_BT_INCLUDED == TRUE) + { busy_level = BTM_GetNumAclLinks(); } - if ((busy_level != btm_cb.busy_level) || (old_inquiry_state != btm_cb.is_inquiry)) { + if ((busy_level != btm_cb.busy_level) +#if (CLASSIC_BT_INCLUDED == TRUE) + || (old_inquiry_state != btm_cb.is_inquiry) +#endif // #if (CLASSIC_BT_INCLUDED == TRUE) + ) { tBTM_BL_UPDATE_DATA evt = { .event = BTM_BL_UPDATE_EVT, .busy_level = busy_level, @@ -635,7 +658,7 @@ tBTM_STATUS BTM_GetRole (BD_ADDR remote_bd_addr, UINT8 *p_role) return (BTM_SUCCESS); } - +#if (CLASSIC_BT_INCLUDED == TRUE) /******************************************************************************* ** ** Function BTM_SwitchRole @@ -854,6 +877,8 @@ void btm_acl_encrypt_change (UINT16 handle, UINT8 status, UINT8 encr_enable) #endif } } +#endif // (CLASSIC_BT_INCLUDED == TRUE) +#if (CLASSIC_BT_INCLUDED == TRUE) /******************************************************************************* ** ** Function BTM_SetLinkPolicy @@ -937,7 +962,7 @@ void BTM_SetDefaultLinkPolicy (UINT16 settings) /* Set the default Link Policy of the controller */ btsnd_hcic_write_def_policy_set(settings); } - +#endif // (CLASSIC_BT_INCLUDED == TRUE) /******************************************************************************* ** ** Function btm_read_remote_version_complete @@ -1243,6 +1268,7 @@ void btm_establish_continue (tACL_CONN *p_acl_cb) tBTM_BL_EVENT_DATA evt_data; BTM_TRACE_DEBUG ("btm_establish_continue\n"); #if (!defined(BTM_BYPASS_EXTRA_ACL_SETUP) || BTM_BYPASS_EXTRA_ACL_SETUP == FALSE) +#if (CLASSIC_BT_INCLUDED == TRUE) #if (defined BLE_INCLUDED && BLE_INCLUDED == TRUE) if (p_acl_cb->transport == BT_TRANSPORT_BR_EDR) #endif @@ -1256,6 +1282,7 @@ void btm_establish_continue (tACL_CONN *p_acl_cb) BTM_SetLinkPolicy (p_acl_cb->remote_addr, &btm_cb.btm_def_link_policy); } } +#endif // (CLASSIC_BT_INCLUDED == TRUE) #endif p_acl_cb->link_up_issued = TRUE; @@ -1461,6 +1488,7 @@ void btm_process_clk_off_comp_evt (UINT16 hci_handle, UINT16 clock_offset) } +#if (CLASSIC_BT_INCLUDED == TRUE) /******************************************************************************* ** ** Function btm_acl_role_changed @@ -1560,6 +1588,7 @@ void btm_acl_role_changed (UINT8 hci_status, BD_ADDR bd_addr, UINT8 new_role) #endif } +#endif // #if (CLASSIC_BT_INCLUDED == TRUE) /******************************************************************************* ** @@ -1880,6 +1909,7 @@ tBTM_STATUS BTM_RegAclLinkStatNotif(tBTM_ACL_LINK_STAT_CB *p_cb) return BTM_SUCCESS; } +#if (CLASSIC_BT_INCLUDED == TRUE) /******************************************************************************* ** ** Function BTM_SetQoS @@ -1961,7 +1991,7 @@ void btm_qos_setup_complete (UINT8 status, UINT16 handle, FLOW_SPEC *p_flow) (*p_cb)(&qossu); } } - +#endif // (CLASSIC_BT_INCLUDED == TRUE) /******************************************************************************* ** ** Function btm_qos_setup_timeout @@ -1976,7 +2006,9 @@ void btm_qos_setup_timeout (void *p_tle) { BTM_TRACE_DEBUG ("%s\n", __func__); +#if (CLASSIC_BT_INCLUDED == TRUE) btm_qos_setup_complete (HCI_ERR_HOST_TIMEOUT, 0, NULL); +#endif // (CLASSIC_BT_INCLUDED == TRUE) } /******************************************************************************* @@ -2027,6 +2059,7 @@ tBTM_STATUS BTM_ReadRSSI (BD_ADDR remote_bda, tBT_TRANSPORT transport, tBTM_CMPL return (BTM_UNKNOWN_ADDR); } +#if (CLASSIC_BT_INCLUDED == TRUE) /******************************************************************************* ** ** Function BTM_ReadLinkQuality @@ -2070,65 +2103,6 @@ tBTM_STATUS BTM_ReadLinkQuality (BD_ADDR remote_bda, tBTM_CMPL_CB *p_cb) return (BTM_UNKNOWN_ADDR); } -#if (BLE_HOST_READ_TX_POWER_EN == TRUE) -/******************************************************************************* -** -** Function BTM_ReadTxPower -** -** Description This function is called to read the current -** TX power of the connection. The tx power level results -** are returned in the callback. -** (tBTM_RSSI_RESULTS) -** -** Returns BTM_CMD_STARTED if successfully initiated or error code -** -*******************************************************************************/ -tBTM_STATUS BTM_ReadTxPower (BD_ADDR remote_bda, tBT_TRANSPORT transport, tBTM_CMPL_CB *p_cb) -{ - tACL_CONN *p; - BOOLEAN ret; -#define BTM_READ_RSSI_TYPE_CUR 0x00 -#define BTM_READ_RSSI_TYPE_MAX 0X01 - - BTM_TRACE_API ("BTM_ReadTxPower: RemBdAddr: %02x%02x%02x%02x%02x%02x\n", - remote_bda[0], remote_bda[1], remote_bda[2], - remote_bda[3], remote_bda[4], remote_bda[5]); - - /* If someone already waiting on the version, do not allow another */ - if (btm_cb.devcb.p_tx_power_cmpl_cb) { - return (BTM_BUSY); - } - - p = btm_bda_to_acl(remote_bda, transport); - if (p != (tACL_CONN *)NULL) { - btu_start_timer (&btm_cb.devcb.tx_power_timer, BTU_TTYPE_BTM_ACL, - BTM_DEV_REPLY_TIMEOUT); - - btm_cb.devcb.p_tx_power_cmpl_cb = p_cb; - -#if BLE_INCLUDED == TRUE - if (p->transport == BT_TRANSPORT_LE) { - memcpy(btm_cb.devcb.read_tx_pwr_addr, remote_bda, BD_ADDR_LEN); - ret = btsnd_hcic_ble_read_adv_chnl_tx_power(); - } else -#endif - { - ret = btsnd_hcic_read_tx_power (p->hci_handle, BTM_READ_RSSI_TYPE_CUR); - } - if (!ret) { - btm_cb.devcb.p_tx_power_cmpl_cb = NULL; - btu_stop_timer (&btm_cb.devcb.tx_power_timer); - return (BTM_NO_RESOURCES); - } else { - return (BTM_CMD_STARTED); - } - } - - /* If here, no BD Addr found */ - return (BTM_UNKNOWN_ADDR); -} -#endif // #if (BLE_HOST_READ_TX_POWER_EN == TRUE) - tBTM_STATUS BTM_SetAclPktTypes(BD_ADDR remote_bda, UINT16 pkt_types, tBTM_CMPL_CB *p_cb) { #if CLASSIC_BT_INCLUDED == TRUE @@ -2169,7 +2143,6 @@ tBTM_STATUS BTM_SetAclPktTypes(BD_ADDR remote_bda, UINT16 pkt_types, tBTM_CMPL_C void btm_acl_pkt_types_changed(UINT8 status, UINT16 handle, UINT16 pkt_types) { -#if CLASSIC_BT_INCLUDED == TRUE BTM_TRACE_DEBUG ("btm_acl_pkt_types_changed\n"); tACL_CONN *conn = NULL; tBTM_SET_ACL_PKT_TYPES_RESULTS results; @@ -2190,8 +2163,8 @@ void btm_acl_pkt_types_changed(UINT8 status, UINT16 handle, UINT16 pkt_types) } btm_cb.devcb.p_set_acl_pkt_types_cmpl_cb = NULL; } -#endif } +#endif // (CLASSIC_BT_INCLUDED == TRUE) #if (BLE_INCLUDED == TRUE) @@ -2242,35 +2215,6 @@ tBTM_STATUS BTM_ReadChannelMap(BD_ADDR remote_bda, tBTM_CMPL_CB *p_cb) return BTM_UNKNOWN_ADDR; } -#if (BLE_HOST_READ_TX_POWER_EN == TRUE) -tBTM_STATUS BTM_BleReadAdvTxPower(tBTM_CMPL_CB *p_cb) -{ - BOOLEAN ret; - tBTM_TX_POWER_RESULTS result; - /* If someone already waiting on the version, do not allow another */ - if (btm_cb.devcb.p_tx_power_cmpl_cb) { - result.status = BTM_BUSY; - (*p_cb)(&result); - return (BTM_BUSY); - } - - btm_cb.devcb.p_tx_power_cmpl_cb = p_cb; - btu_start_timer (&btm_cb.devcb.tx_power_timer, BTU_TTYPE_BTM_ACL, - BTM_DEV_REPLY_TIMEOUT); - ret = btsnd_hcic_ble_read_adv_chnl_tx_power(); - - if(!ret) { - btm_cb.devcb.p_tx_power_cmpl_cb = NULL; - btu_stop_timer (&btm_cb.devcb.tx_power_timer); - result.status = BTM_NO_RESOURCES; - (*p_cb)(&result); - return (BTM_NO_RESOURCES); - } else { - return BTM_CMD_STARTED; - } -} -#endif // #if (BLE_HOST_READ_TX_POWER_EN == TRUE) - void BTM_BleGetWhiteListSize(uint16_t *length) { tBTM_BLE_CB *p_cb = &btm_cb.ble_ctr_cb; @@ -2294,79 +2238,7 @@ void BTM_BleGetPeriodicAdvListSize(uint8_t *size) #endif ///BLE_INCLUDED == TRUE -#if (BLE_HOST_READ_TX_POWER_EN == TRUE) -/******************************************************************************* -** -** Function btm_read_tx_power_complete -** -** Description This function is called when the command complete message -** is received from the HCI for the read tx power request. -** -** Returns void -** -*******************************************************************************/ -void btm_read_tx_power_complete (UINT8 *p, UINT16 evt_len, BOOLEAN is_ble) -{ - tBTM_CMPL_CB *p_cb = btm_cb.devcb.p_tx_power_cmpl_cb; - tBTM_TX_POWER_RESULTS results; - UINT16 handle; - tACL_CONN *p_acl_cb = NULL; - BTM_TRACE_DEBUG ("btm_read_tx_power_complete\n"); - btu_stop_timer (&btm_cb.devcb.tx_power_timer); - - /* If there was a callback registered for read rssi, call it */ - btm_cb.devcb.p_tx_power_cmpl_cb = NULL; - - if (p_cb) { - if (evt_len < 1) { - BTM_TRACE_ERROR("Bogus event packet, too short\n"); - results.status = BTM_ERR_PROCESSING; - goto err_out; - } - - STREAM_TO_UINT8 (results.hci_status, p); - - if (results.hci_status == HCI_SUCCESS) { - results.status = BTM_SUCCESS; - - if (!is_ble) { - if (evt_len < 1 + 3) { - BTM_TRACE_ERROR("Bogus event packet, too short\n"); - results.status = BTM_ERR_PROCESSING; - goto err_out; - } - STREAM_TO_UINT16 (handle, p); - STREAM_TO_UINT8 (results.tx_power, p); - - /* Search through the list of active channels for the correct BD Addr */ - p_acl_cb = btm_handle_to_acl(handle); - if (p_acl_cb) { - memcpy (results.rem_bda, p_acl_cb->remote_addr, BD_ADDR_LEN); - } - } #if BLE_INCLUDED == TRUE - else { - if (evt_len < 1 + 1) { - BTM_TRACE_ERROR("Bogus event packet, too short\n"); - results.status = BTM_ERR_PROCESSING; - goto err_out; - } - STREAM_TO_UINT8 (results.tx_power, p); - memcpy(results.rem_bda, btm_cb.devcb.read_tx_pwr_addr, BD_ADDR_LEN); - } -#endif - BTM_TRACE_DEBUG ("BTM TX power Complete: tx_power %d, hci status 0x%02x\n", - results.tx_power, results.hci_status); - } else { - results.status = BTM_ERR_PROCESSING; - } - -err_out: - (*p_cb)(&results); - } -} -#endif // #if (BLE_HOST_READ_TX_POWER_EN == TRUE) - /******************************************************************************* ** ** Function btm_read_channel_map_complete @@ -2421,7 +2293,7 @@ void btm_read_channel_map_complete(UINT8 *p) (*p_cb)(&results); } } - +#endif // #if BLE_INCLUDED == TRUE /******************************************************************************* ** @@ -2481,6 +2353,7 @@ err_out: } } +#if (CLASSIC_BT_INCLUDED == TRUE) /******************************************************************************* ** ** Function btm_read_link_quality_complete @@ -2527,6 +2400,7 @@ void btm_read_link_quality_complete (UINT8 *p) (*p_cb)(&results); } } +#endif // (CLASSIC_BT_INCLUDED == TRUE) /******************************************************************************* ** @@ -2585,6 +2459,7 @@ UINT8 BTM_SetTraceLevel (UINT8 new_level) return (btm_cb.trace_level); } +#if (CLASSIC_BT_INCLUDED == TRUE) /******************************************************************************* ** ** Function btm_cont_rswitch @@ -2639,7 +2514,9 @@ void btm_cont_rswitch (tACL_CONN *p, tBTM_SEC_DEV_REC *p_dev_rec, } } } +#endif // (CLASSIC_BT_INCLUDED == TRUE) +#if (CLASSIC_BT_INCLUDED == TRUE) /******************************************************************************* ** ** Function btm_acl_resubmit_page @@ -2693,6 +2570,7 @@ void btm_acl_reset_paging (void) btm_cb.paging = FALSE; } +#endif // #if (CLASSIC_BT_INCLUDED == TRUE) /******************************************************************************* ** @@ -2830,7 +2708,9 @@ void btm_acl_chk_peer_pkt_type_support (tACL_CONN *p, UINT16 *p_pkt_type) void btm_acl_free(void) { list_free(btm_cb.p_acl_db_list); +#if (CLASSIC_BT_INCLUDED == TRUE) list_free(btm_cb.p_pm_mode_db_list); +#endif // #if (CLASSIC_BT_INCLUDED == TRUE) } /******************************************************************************* diff --git a/components/bt/host/bluedroid/stack/btm/btm_ble.c b/components/bt/host/bluedroid/stack/btm/btm_ble.c index a99614e93c0..60601893da8 100644 --- a/components/bt/host/bluedroid/stack/btm/btm_ble.c +++ b/components/bt/host/bluedroid/stack/btm/btm_ble.c @@ -549,48 +549,6 @@ void BTM_BleSecureConnectionCreateOobData(void) #endif } -#if (BLE_HOST_CONN_SCAN_PARAM_EN == TRUE) -/****************************************************************************** -** -** Function BTM_BleSetConnScanParams -** -** Description Set scan parameter used in BLE connection request -** -** Parameters: scan_interval: scan interval -** scan_window: scan window -** -** Returns void -** -*******************************************************************************/ -void BTM_BleSetConnScanParams (UINT32 scan_interval, UINT32 scan_window) -{ -#if SMP_INCLUDED == TRUE - tBTM_BLE_CB *p_ble_cb = &btm_cb.ble_ctr_cb; - BOOLEAN new_param = FALSE; - - if (BTM_BLE_ISVALID_PARAM(scan_interval, BTM_BLE_SCAN_INT_MIN, BTM_BLE_SCAN_INT_MAX) && - BTM_BLE_ISVALID_PARAM(scan_window, BTM_BLE_SCAN_WIN_MIN, BTM_BLE_SCAN_WIN_MAX)) { - if (p_ble_cb->scan_int != scan_interval) { - p_ble_cb->scan_int = scan_interval; - new_param = TRUE; - } - - if (p_ble_cb->scan_win != scan_window) { - p_ble_cb->scan_win = scan_window; - new_param = TRUE; - } -#if (tGATT_BG_CONN_DEV == TRUE) - if (new_param && p_ble_cb->conn_state == BLE_BG_CONN) { - btm_ble_suspend_bg_conn(); - } -#endif // #if (tGATT_BG_CONN_DEV == TRUE) - } else { - BTM_TRACE_ERROR("Illegal Connection Scan Parameters"); - } -#endif -} -#endif // #if (BLE_HOST_CONN_SCAN_PARAM_EN == TRUE) - /******************************************************** ** ** Function BTM_BleSetPrefConnParams diff --git a/components/bt/host/bluedroid/stack/btm/btm_ble_adv_filter.c b/components/bt/host/bluedroid/stack/btm/btm_ble_adv_filter.c index 7eef55e9120..8f00b9d6908 100644 --- a/components/bt/host/bluedroid/stack/btm/btm_ble_adv_filter.c +++ b/components/bt/host/bluedroid/stack/btm/btm_ble_adv_filter.c @@ -22,1286 +22,5 @@ #include "common/bt_target.h" #if (BLE_INCLUDED == TRUE) -#if BLE_ANDROID_CONTROLLER_SCAN_FILTER == TRUE -#include "stack/bt_types.h" -#include "stack/hcimsgs.h" -#include "stack/btu.h" -#include "btm_int.h" -#include "osi/allocator.h" -#include "stack/hcidefs.h" -#include "stack/btm_ble_api.h" -#include "device/controller.h" -#define BTM_BLE_ADV_FILT_META_HDR_LENGTH 3 -#define BTM_BLE_ADV_FILT_FEAT_SELN_LEN 13 -#define BTM_BLE_ADV_FILT_TRACK_NUM 2 - -#define BTM_BLE_PF_SELECT_NONE 0 - -/* BLE meta vsc header: 1 bytes of sub_code, 1 byte of PCF action */ -#define BTM_BLE_META_HDR_LENGTH 3 -#define BTM_BLE_PF_FEAT_SEL_LEN 18 -#define BTM_BLE_PCF_ENABLE_LEN 2 - -#define BTM_BLE_META_ADDR_LEN 7 -#define BTM_BLE_META_UUID_LEN 40 - -#define BTM_BLE_PF_BIT_TO_MASK(x) (UINT16)(1 << (x)) - - -#if BTM_DYNAMIC_MEMORY == FALSE -tBTM_BLE_ADV_FILTER_CB btm_ble_adv_filt_cb; -tBTM_BLE_VSC_CB cmn_ble_adv_vsc_cb; -#else -tBTM_BLE_ADV_FILTER_CB *btm_ble_adv_filt_cb_ptr; -tBTM_BLE_VSC_CB *cmn_ble_adv_vsc_cb_ptr; -#define btm_ble_adv_filt_cb (*btm_ble_adv_filt_cb_ptr) -#define cmn_ble_adv_vsc_cb (*cmn_ble_adv_vsc_cb_ptr) -#endif - -static const BD_ADDR na_bda = {0}; - -static UINT8 btm_ble_cs_update_pf_counter(tBTM_BLE_SCAN_COND_OP action, - UINT8 cond_type, tBLE_BD_ADDR *p_bd_addr, UINT8 num_available); - -#define BTM_BLE_SET_SCAN_PF_OPCODE(x, y) (((x)<<4)|y) -#define BTM_BLE_GET_SCAN_PF_SUBCODE(x) ((x) >> 4) -#define BTM_BLE_GET_SCAN_PF_ACTION(x) ((x) & 0x0f) -#define BTM_BLE_INVALID_COUNTER 0xff - - -/* length of each multi adv sub command */ -#define BTM_BLE_ADV_FILTER_ENB_LEN 3 - -/* length of each batch scan command */ -#define BTM_BLE_ADV_FILTER_CLEAR_LEN 3 -#define BTM_BLE_ADV_FILTER_LEN 2 - -#define BTM_BLE_ADV_FILT_CB_EVT_MASK 0xF0 -#define BTM_BLE_ADV_FILT_SUBCODE_MASK 0x0F - -/******************************************************************************* -** -** Function btm_ble_obtain_vsc_details -** -** Description This function obtains the VSC details -** -** Parameters -** -** Returns status -** -*******************************************************************************/ -tBTM_STATUS btm_ble_obtain_vsc_details(void) -{ - tBTM_STATUS st = BTM_SUCCESS; - -#if BLE_VND_INCLUDED == TRUE - BTM_BleGetVendorCapabilities(&cmn_ble_adv_vsc_cb); - if (0 == cmn_ble_adv_vsc_cb.max_filter) { - st = BTM_MODE_UNSUPPORTED; - return st; - } -#else - cmn_ble_adv_vsc_cb.max_filter = BTM_BLE_MAX_FILTER_COUNTER; -#endif - return st; -} - -/******************************************************************************* -** -** Function btm_ble_advfilt_enq_op_q -** -** Description enqueue an adv filter operation in q to check command complete -** status -** -** Returns void -** -*******************************************************************************/ -void btm_ble_advfilt_enq_op_q(UINT8 action, UINT8 ocf, tBTM_BLE_FILT_CB_EVT cb_evt, - tBTM_BLE_REF_VALUE ref, tBTM_BLE_PF_CFG_CBACK *p_cmpl_cback, - tBTM_BLE_PF_PARAM_CBACK *p_filt_param_cback) -{ - btm_ble_adv_filt_cb.op_q.action_ocf[btm_ble_adv_filt_cb.op_q.next_idx] = (action | (ocf << 4)); - btm_ble_adv_filt_cb.op_q.ref_value[btm_ble_adv_filt_cb.op_q.next_idx] = ref; - btm_ble_adv_filt_cb.op_q.cb_evt[btm_ble_adv_filt_cb.op_q.next_idx] = cb_evt; - btm_ble_adv_filt_cb.op_q.p_scan_cfg_cback[btm_ble_adv_filt_cb.op_q.next_idx] = p_cmpl_cback; - btm_ble_adv_filt_cb.op_q.p_filt_param_cback[btm_ble_adv_filt_cb.op_q.next_idx] - = p_filt_param_cback; - BTM_TRACE_DEBUG("btm_ble_advfilt_enq_op_q: act_ocf:%d, action:%d, ocf:%d,cb_evt;%d, cback:%p", - btm_ble_adv_filt_cb.op_q.action_ocf[btm_ble_adv_filt_cb.op_q.next_idx], action, - ocf, cb_evt, p_cmpl_cback); - btm_ble_adv_filt_cb.op_q.next_idx = (btm_ble_adv_filt_cb.op_q.next_idx + 1) - % BTM_BLE_PF_TYPE_MAX; -} - -/******************************************************************************* -** -** Function btm_ble_advfilt_deq_op_q -** -** Description dequeue an adv filter operation from q when command complete -** is received -** -** Returns void -** -*******************************************************************************/ -void btm_ble_advfilt_deq_op_q(UINT8 *p_action, UINT8 *p_ocf, tBTM_BLE_FILT_CB_EVT *p_cb_evt, - tBTM_BLE_REF_VALUE *p_ref, tBTM_BLE_PF_CFG_CBACK **p_cmpl_cback, - tBTM_BLE_PF_PARAM_CBACK **p_filt_param_cback) -{ - *p_ocf = (btm_ble_adv_filt_cb.op_q.action_ocf[btm_ble_adv_filt_cb.op_q.pending_idx] >> 4); - *p_action = (btm_ble_adv_filt_cb.op_q.action_ocf[btm_ble_adv_filt_cb.op_q.pending_idx] - & BTM_BLE_ADV_FILT_SUBCODE_MASK); - *p_ref = btm_ble_adv_filt_cb.op_q.ref_value[btm_ble_adv_filt_cb.op_q.pending_idx]; - *p_cb_evt = btm_ble_adv_filt_cb.op_q.cb_evt[btm_ble_adv_filt_cb.op_q.pending_idx]; - *p_cmpl_cback = btm_ble_adv_filt_cb.op_q.p_scan_cfg_cback[btm_ble_adv_filt_cb.op_q.pending_idx]; - *p_filt_param_cback = - btm_ble_adv_filt_cb.op_q.p_filt_param_cback[btm_ble_adv_filt_cb.op_q.pending_idx]; - - btm_ble_adv_filt_cb.op_q.pending_idx = (btm_ble_adv_filt_cb.op_q.pending_idx + 1) - % BTM_BLE_PF_TYPE_MAX; - BTM_TRACE_DEBUG("btm_ble_advfilt_deq_op_q: ocf:%d, action:%d, ref_value:%d, cb_evt:%x", - *p_ocf, *p_action, *p_ref, *p_cb_evt); -} - -/******************************************************************************* -** -** Function btm_ble_condtype_to_ocf -** -** Description Convert cond_type to OCF -** -** Returns Returns ocf value -** -*******************************************************************************/ -UINT8 btm_ble_condtype_to_ocf(UINT8 cond_type) -{ - UINT8 ocf = 0; - - switch (cond_type) { - case BTM_BLE_PF_ADDR_FILTER: - ocf = BTM_BLE_META_PF_ADDR; - break; - case BTM_BLE_PF_SRVC_UUID: - ocf = BTM_BLE_META_PF_UUID; - break; - case BTM_BLE_PF_SRVC_SOL_UUID: - ocf = BTM_BLE_META_PF_SOL_UUID; - break; - case BTM_BLE_PF_LOCAL_NAME: - ocf = BTM_BLE_META_PF_LOCAL_NAME; - break; - case BTM_BLE_PF_MANU_DATA: - ocf = BTM_BLE_META_PF_MANU_DATA; - break; - case BTM_BLE_PF_SRVC_DATA_PATTERN: - ocf = BTM_BLE_META_PF_SRVC_DATA; - break; - case BTM_BLE_PF_TYPE_ALL: - ocf = BTM_BLE_META_PF_ALL; - break; - default: - ocf = BTM_BLE_PF_TYPE_MAX; - break; - } - return ocf; -} - -/******************************************************************************* -** -** Function btm_ble_ocf_to_condtype -** -** Description Convert OCF to cond type -** -** Returns Returns condtype value -** -*******************************************************************************/ -UINT8 btm_ble_ocf_to_condtype(UINT8 ocf) -{ - UINT8 cond_type = 0; - - switch (ocf) { - case BTM_BLE_META_PF_FEAT_SEL: - cond_type = BTM_BLE_META_PF_FEAT_SEL; - break; - case BTM_BLE_META_PF_ADDR: - cond_type = BTM_BLE_PF_ADDR_FILTER; - break; - case BTM_BLE_META_PF_UUID: - cond_type = BTM_BLE_PF_SRVC_UUID; - break; - case BTM_BLE_META_PF_SOL_UUID: - cond_type = BTM_BLE_PF_SRVC_SOL_UUID; - break; - case BTM_BLE_META_PF_LOCAL_NAME: - cond_type = BTM_BLE_PF_LOCAL_NAME; - break; - case BTM_BLE_META_PF_MANU_DATA: - cond_type = BTM_BLE_PF_MANU_DATA; - break; - case BTM_BLE_META_PF_SRVC_DATA: - cond_type = BTM_BLE_PF_SRVC_DATA_PATTERN; - break; - case BTM_BLE_META_PF_ALL: - cond_type = BTM_BLE_PF_TYPE_ALL; - break; - default: - cond_type = BTM_BLE_PF_TYPE_MAX; - break; - } - return cond_type; -} - -/******************************************************************************* -** -** Function btm_ble_scan_pf_cmpl_cback -** -** Description the BTM BLE customer feature VSC complete callback for ADV PF filtering -** -** Returns pointer to the counter if found; NULL otherwise. -** -*******************************************************************************/ -void btm_ble_scan_pf_cmpl_cback(tBTM_VSC_CMPL *p_params) -{ - UINT8 status = 0; - UINT8 *p = p_params->p_param_buf, op_subcode = 0, action = 0xff; - UINT16 evt_len = p_params->param_len; - UINT8 ocf = BTM_BLE_META_PF_ALL, cond_type = 0; - UINT8 num_avail = 0, cb_evt = 0; - tBTM_BLE_REF_VALUE ref_value = 0; - tBTM_BLE_PF_CFG_CBACK *p_scan_cfg_cback = NULL; - tBTM_BLE_PF_PARAM_CBACK *p_filt_param_cback = NULL; - - if (evt_len < 3 || evt_len > 4) { - BTM_TRACE_ERROR("%s cannot interpret APCF callback status = %d, length = %d", - __func__, status, evt_len); - btm_ble_advfilt_deq_op_q(&action, &ocf, &cb_evt, &ref_value, &p_scan_cfg_cback, - &p_filt_param_cback); - return; - } - - btm_ble_advfilt_deq_op_q(&action, &ocf, &cb_evt, &ref_value, &p_scan_cfg_cback, - &p_filt_param_cback); - - STREAM_TO_UINT8(status, p); - STREAM_TO_UINT8(op_subcode, p); - STREAM_TO_UINT8(action, p); - - /* Ignore the event, if it is not the same one expected */ - if (3 == evt_len) { - if (ocf != op_subcode) { - BTM_TRACE_ERROR("btm_ble_scan_pf_cmpl_cback:3-Incorrect opcode :%d, %d, %d, %d, %d, %d", - ocf, op_subcode, action, evt_len, ref_value, status); - return; - } else { - if (NULL != btm_ble_adv_filt_cb.p_filt_stat_cback) { - btm_ble_adv_filt_cb.p_filt_stat_cback(action, status, ref_value); - } - BTM_TRACE_DEBUG("btm_ble_scan_pf_cmpl_cback enabled/disabled, %d, %d, %d, %d", - ocf, action, status, ref_value); - return; - } - } - - if (4 == evt_len && ocf != op_subcode) { - BTM_TRACE_ERROR("btm_ble_scan_pf_cmpl_cback:4-Incorrect opcode: %d, %d, %d, %d, %d", - ocf, op_subcode, action, status, ref_value); - return; - } - - STREAM_TO_UINT8(num_avail, p); - switch (op_subcode) { - case BTM_BLE_META_PF_ADDR: - case BTM_BLE_META_PF_UUID: - case BTM_BLE_META_PF_SOL_UUID: - case BTM_BLE_META_PF_LOCAL_NAME: - case BTM_BLE_META_PF_MANU_DATA: - case BTM_BLE_META_PF_SRVC_DATA: - cond_type = btm_ble_ocf_to_condtype(ocf); - BTM_TRACE_DEBUG("btm_ble_scan_pf_cmpl_cback Recd: %d, %d, %d, %d, %d, %d", op_subcode, - ocf, action, status, ref_value, num_avail); - if (HCI_SUCCESS == status) { - if (memcmp(&btm_ble_adv_filt_cb.cur_filter_target.bda, &na_bda, BD_ADDR_LEN) == 0) { - btm_ble_cs_update_pf_counter(action, cond_type, NULL, num_avail); - } else { - btm_ble_cs_update_pf_counter(action, cond_type, - &btm_ble_adv_filt_cb.cur_filter_target, num_avail); - } - } - - /* send ADV PF operation complete */ - btm_ble_adv_filt_cb.op_type = 0; - break; - - case BTM_BLE_META_PF_FEAT_SEL: - BTM_TRACE_DEBUG("btm_ble_scan_pf_cmpl_cback-Feat sel event: %d, %d, %d, %d", - action, status, ref_value, num_avail); - break; - - default: - BTM_TRACE_ERROR("btm_ble_scan_pf_cmpl_cback: unknown operation: %d", op_subcode); - break; - } - - BTM_TRACE_DEBUG("btm_ble_scan_pf_cmpl_cback: calling the cback: %d", cb_evt); - switch (cb_evt) { - case BTM_BLE_FILT_CFG: - if (NULL != p_scan_cfg_cback) { - p_scan_cfg_cback(action, cond_type, num_avail, status, ref_value); - } - break; - case BTM_BLE_FILT_ADV_PARAM: - if (NULL != p_filt_param_cback) { - p_filt_param_cback(action, num_avail, ref_value, status); - } - break; - default: - break; - } -} - -/******************************************************************************* -** -** Function btm_ble_find_addr_filter_counter -** -** Description find the per bd address ADV payload filter counter by BD_ADDR. -** -** Returns pointer to the counter if found; NULL otherwise. -** -*******************************************************************************/ -tBTM_BLE_PF_COUNT *btm_ble_find_addr_filter_counter(tBLE_BD_ADDR *p_le_bda) -{ - UINT8 i; - tBTM_BLE_PF_COUNT *p_addr_filter = &btm_ble_adv_filt_cb.p_addr_filter_count[1]; - - if (p_le_bda == NULL) { - return &btm_ble_adv_filt_cb.p_addr_filter_count[0]; - } - - for (i = 0; i < cmn_ble_adv_vsc_cb.max_filter; i ++, p_addr_filter ++) { - if (p_addr_filter->in_use && - memcmp(p_le_bda->bda, p_addr_filter->bd_addr, BD_ADDR_LEN) == 0) { - return p_addr_filter; - } - } - return NULL; -} - -/******************************************************************************* -** -** Function btm_ble_alloc_addr_filter_counter -** -** Description allocate the per device adv payload filter counter. -** -** Returns pointer to the counter if allocation succeed; NULL otherwise. -** -*******************************************************************************/ -tBTM_BLE_PF_COUNT *btm_ble_alloc_addr_filter_counter(BD_ADDR bd_addr) -{ - UINT8 i; - tBTM_BLE_PF_COUNT *p_addr_filter = &btm_ble_adv_filt_cb.p_addr_filter_count[1]; - - for (i = 0; i < cmn_ble_adv_vsc_cb.max_filter; i ++, p_addr_filter ++) { - if (memcmp(na_bda, p_addr_filter->bd_addr, BD_ADDR_LEN) == 0) { - memcpy(p_addr_filter->bd_addr, bd_addr, BD_ADDR_LEN); - p_addr_filter->in_use = TRUE; - return p_addr_filter; - } - } - return NULL; -} -/******************************************************************************* -** -** Function btm_ble_dealloc_addr_filter_counter -** -** Description de-allocate the per device adv payload filter counter. -** -** Returns TRUE if deallocation succeed; FALSE otherwise. -** -*******************************************************************************/ -BOOLEAN btm_ble_dealloc_addr_filter_counter(tBLE_BD_ADDR *p_bd_addr, UINT8 filter_type) -{ - UINT8 i; - tBTM_BLE_PF_COUNT *p_addr_filter = &btm_ble_adv_filt_cb.p_addr_filter_count[1]; - BOOLEAN found = FALSE; - - if (BTM_BLE_PF_TYPE_ALL == filter_type && NULL == p_bd_addr) { - memset(&btm_ble_adv_filt_cb.p_addr_filter_count[0], 0, sizeof(tBTM_BLE_PF_COUNT)); - } - - for (i = 0; i < cmn_ble_adv_vsc_cb.max_filter; i ++, p_addr_filter ++) { - if ((p_addr_filter->in_use) && (NULL == p_bd_addr || - (memcmp(p_bd_addr->bda, p_addr_filter->bd_addr, BD_ADDR_LEN) == 0)) { - found = TRUE; - memset(p_addr_filter, 0, sizeof(tBTM_BLE_PF_COUNT)); - - if (NULL != p_bd_addr) { - break; - } - } - } - return found; -} - -/******************************************************************************* -** -** Function btm_ble_update_pf_local_name -** -** Description this function update(add,delete or clear) the adv local name filtering condition. -** -** -** Returns BTM_SUCCESS if successful, -** BTM_ILLEGAL_VALUE if parameter is not valid. -** -*******************************************************************************/ -tBTM_STATUS btm_ble_update_pf_local_name(tBTM_BLE_SCAN_COND_OP action, - tBTM_BLE_PF_FILT_INDEX filt_index, - tBTM_BLE_PF_COND_PARAM *p_cond) -{ - tBTM_BLE_PF_LOCAL_NAME_COND *p_local_name = (p_cond == NULL) ? NULL : &p_cond->local_name; - UINT8 param[BTM_BLE_PF_STR_LEN_MAX + BTM_BLE_ADV_FILT_META_HDR_LENGTH], - *p = param, - len = BTM_BLE_ADV_FILT_META_HDR_LENGTH; - tBTM_STATUS st = BTM_ILLEGAL_VALUE; - - memset(param, 0, BTM_BLE_PF_STR_LEN_MAX + BTM_BLE_ADV_FILT_META_HDR_LENGTH); - - UINT8_TO_STREAM(p, BTM_BLE_META_PF_LOCAL_NAME); - UINT8_TO_STREAM(p, action); - - /* Filter index */ - UINT8_TO_STREAM(p, filt_index); - - if (BTM_BLE_SCAN_COND_ADD == action || - BTM_BLE_SCAN_COND_DELETE == action) { - if (NULL == p_local_name) { - return st; - } - - if (p_local_name->data_len > BTM_BLE_PF_STR_LEN_MAX) { - p_local_name->data_len = BTM_BLE_PF_STR_LEN_MAX; - } - - ARRAY_TO_STREAM(p, p_local_name->p_data, p_local_name->data_len); - len += p_local_name->data_len; - } - - /* send local name filter */ - if ((st = BTM_VendorSpecificCommand (HCI_BLE_ADV_FILTER_OCF, - len, - param, - btm_ble_scan_pf_cmpl_cback)) - != BTM_NO_RESOURCES) { - memset(&btm_ble_adv_filt_cb.cur_filter_target, 0, sizeof(tBLE_BD_ADDR)); - } else { - BTM_TRACE_ERROR("Local Name PF filter update failed"); - } - - return st; -} - - -/******************************************************************************* -** -** Function btm_ble_update_srvc_data_change -** -** Description this function update(add/remove) service data change filter. -** -** -** Returns BTM_SUCCESS if successful, -** BTM_ILLEGAL_VALUE if parameter is not valid. -** -*******************************************************************************/ -tBTM_STATUS btm_ble_update_srvc_data_change(tBTM_BLE_SCAN_COND_OP action, - tBTM_BLE_PF_FILT_INDEX filt_index, - tBTM_BLE_PF_COND_PARAM *p_cond) -{ - tBTM_STATUS st = BTM_ILLEGAL_VALUE; - tBLE_BD_ADDR *p_bd_addr = p_cond ? &p_cond->target_addr : NULL; - UINT8 num_avail = (action == BTM_BLE_SCAN_COND_ADD) ? 0 : 1; - - if (btm_ble_cs_update_pf_counter (action, BTM_BLE_PF_SRVC_DATA, p_bd_addr, num_avail) - != BTM_BLE_INVALID_COUNTER) { - st = BTM_SUCCESS; - } - - return st; -} - -/******************************************************************************* -** -** Function btm_ble_update_pf_manu_data -** -** Description this function update(add,delete or clear) the adv manufacturer -** data filtering condition. -** -** -** Returns BTM_SUCCESS if successful, -** BTM_ILLEGAL_VALUE if parameter is not valid. -** -*******************************************************************************/ -tBTM_STATUS btm_ble_update_pf_manu_data(tBTM_BLE_SCAN_COND_OP action, - tBTM_BLE_PF_FILT_INDEX filt_index, - tBTM_BLE_PF_COND_PARAM *p_data, - tBTM_BLE_PF_COND_TYPE cond_type, - tBTM_BLE_FILT_CB_EVT cb_evt, - tBTM_BLE_REF_VALUE ref_value) -{ - tBTM_BLE_PF_MANU_COND *p_manu_data = (p_data == NULL) ? NULL : &p_data->manu_data; - tBTM_BLE_PF_SRVC_PATTERN_COND *p_srvc_data = (p_data == NULL) ? NULL : &p_data->srvc_data; - - UINT8 param[BTM_BLE_PF_STR_LEN_MAX + BTM_BLE_PF_STR_LEN_MAX + BTM_BLE_ADV_FILT_META_HDR_LENGTH], - *p = param, - len = BTM_BLE_ADV_FILT_META_HDR_LENGTH; - tBTM_STATUS st = BTM_ILLEGAL_VALUE; - - if (NULL == p_data) { - return st; - } - - memset(param, 0, BTM_BLE_PF_STR_LEN_MAX + BTM_BLE_PF_STR_LEN_MAX - + BTM_BLE_ADV_FILT_META_HDR_LENGTH); - - if (BTM_BLE_PF_SRVC_DATA_PATTERN == cond_type) { - UINT8_TO_STREAM(p, BTM_BLE_META_PF_SRVC_DATA); - } else { - UINT8_TO_STREAM(p, BTM_BLE_META_PF_MANU_DATA); - } - - UINT8_TO_STREAM(p, action); - - /* Filter index */ - UINT8_TO_STREAM(p, filt_index); - - if (BTM_BLE_SCAN_COND_ADD == action || BTM_BLE_SCAN_COND_DELETE == action) { - if (BTM_BLE_PF_SRVC_DATA_PATTERN == cond_type) { - if (NULL == p_srvc_data) { - return st; - } - if (p_srvc_data->data_len > (BTM_BLE_PF_STR_LEN_MAX - 2)) { - p_srvc_data->data_len = (BTM_BLE_PF_STR_LEN_MAX - 2); - } - - if (p_srvc_data->data_len > 0) { - ARRAY_TO_STREAM(p, p_srvc_data->p_pattern, p_srvc_data->data_len); - len += (p_srvc_data->data_len); - ARRAY_TO_STREAM(p, p_srvc_data->p_pattern_mask, p_srvc_data->data_len); - } - - len += (p_srvc_data->data_len); - BTM_TRACE_DEBUG("Service data length: %d", len); - } else { - if (NULL == p_manu_data) { - BTM_TRACE_ERROR("btm_ble_update_pf_manu_data - No manuf data"); - return st; - } - BTM_TRACE_EVENT("btm_ble_update_pf_manu_data length: %d", - p_manu_data->data_len); - if (p_manu_data->data_len > (BTM_BLE_PF_STR_LEN_MAX - 2)) { - p_manu_data->data_len = (BTM_BLE_PF_STR_LEN_MAX - 2); - } - - UINT16_TO_STREAM(p, p_manu_data->company_id); - if (p_manu_data->data_len > 0 && p_manu_data->p_pattern_mask != NULL) { - ARRAY_TO_STREAM(p, p_manu_data->p_pattern, p_manu_data->data_len); - len += (p_manu_data->data_len + 2); - } else { - len += 2; - } - - if (p_manu_data->company_id_mask != 0) { - UINT16_TO_STREAM (p, p_manu_data->company_id_mask); - } else { - memset(p, 0xff, 2); - p += 2; - } - len += 2; - - if (p_manu_data->data_len > 0 && p_manu_data->p_pattern_mask != NULL) { - ARRAY_TO_STREAM(p, p_manu_data->p_pattern_mask, p_manu_data->data_len); - len += (p_manu_data->data_len); - } - - BTM_TRACE_DEBUG("Manuf data length: %d", len); - } - } - - /* send manufacturer*/ - if ((st = BTM_VendorSpecificCommand (HCI_BLE_ADV_FILTER_OCF, - len, - param, - btm_ble_scan_pf_cmpl_cback)) != BTM_NO_RESOURCES) { - memset(&btm_ble_adv_filt_cb.cur_filter_target, 0, sizeof(tBLE_BD_ADDR)); - } else { - BTM_TRACE_ERROR("manufacturer data PF filter update failed"); - } - - return st; -} - -/******************************************************************************* -** -** Function btm_ble_cs_update_pf_counter -** -** Description this function is to update the adv data payload filter counter -** -** Returns current number of the counter; BTM_BLE_INVALID_COUNTER if -** counter update failed. -** -*******************************************************************************/ -UINT8 btm_ble_cs_update_pf_counter(tBTM_BLE_SCAN_COND_OP action, - UINT8 cond_type, tBLE_BD_ADDR *p_bd_addr, - UINT8 num_available) -{ - tBTM_BLE_PF_COUNT *p_addr_filter = NULL; - UINT8 *p_counter = NULL; - - btm_ble_obtain_vsc_details(); - - if (cond_type > BTM_BLE_PF_TYPE_ALL) { - BTM_TRACE_ERROR("unknown PF filter condition type %d", cond_type); - return BTM_BLE_INVALID_COUNTER; - } - - /* for these three types of filter, always generic */ - if (BTM_BLE_PF_ADDR_FILTER == cond_type || - BTM_BLE_PF_MANU_DATA == cond_type || - BTM_BLE_PF_LOCAL_NAME == cond_type || - BTM_BLE_PF_SRVC_DATA_PATTERN == cond_type) { - p_bd_addr = NULL; - } - - if ((p_addr_filter = btm_ble_find_addr_filter_counter(p_bd_addr)) == NULL && - BTM_BLE_SCAN_COND_ADD == action) { - p_addr_filter = btm_ble_alloc_addr_filter_counter(p_bd_addr->bda); - } - - if (NULL != p_addr_filter) { - /* all filter just cleared */ - if ((BTM_BLE_PF_TYPE_ALL == cond_type && BTM_BLE_SCAN_COND_CLEAR == action) || - /* or bd address filter been deleted */ - (BTM_BLE_PF_ADDR_FILTER == cond_type && - (BTM_BLE_SCAN_COND_DELETE == action || BTM_BLE_SCAN_COND_CLEAR == action))) { - btm_ble_dealloc_addr_filter_counter(p_bd_addr, cond_type); - } - /* if not feature selection, update new addition/reduction of the filter counter */ - else if (cond_type != BTM_BLE_PF_TYPE_ALL) { - p_counter = p_addr_filter->pf_counter; - if (num_available > 0) { - p_counter[cond_type] += 1; - } - - BTM_TRACE_DEBUG("counter = %d, maxfilt = %d, num_avbl=%d", - p_counter[cond_type], cmn_ble_adv_vsc_cb.max_filter, num_available); - return p_counter[cond_type]; - } - } else { - BTM_TRACE_ERROR("no matching filter counter found"); - } - /* no matching filter located and updated */ - return BTM_BLE_INVALID_COUNTER; -} - - -/******************************************************************************* -** -** Function btm_ble_update_addr_filter -** -** Description this function update(add,delete or clear) the address filter of adv. -** -** -** Returns BTM_SUCCESS if successful, -** BTM_ILLEGAL_VALUE if parameter is not valid. -** -*******************************************************************************/ -tBTM_STATUS btm_ble_update_addr_filter(tBTM_BLE_SCAN_COND_OP action, - tBTM_BLE_PF_FILT_INDEX filt_index, - tBTM_BLE_PF_COND_PARAM *p_cond) -{ - UINT8 param[BTM_BLE_META_ADDR_LEN + BTM_BLE_ADV_FILT_META_HDR_LENGTH], - * p = param; - tBTM_STATUS st = BTM_ILLEGAL_VALUE; - tBLE_BD_ADDR *p_addr = (p_cond == NULL) ? NULL : &p_cond->target_addr; - - memset(param, 0, BTM_BLE_META_ADDR_LEN + BTM_BLE_ADV_FILT_META_HDR_LENGTH); - - UINT8_TO_STREAM(p, BTM_BLE_META_PF_ADDR); - UINT8_TO_STREAM(p, action); - - /* Filter index */ - UINT8_TO_STREAM(p, filt_index); - - if (BTM_BLE_SCAN_COND_ADD == action || - BTM_BLE_SCAN_COND_DELETE == action) { - if (NULL == p_addr) { - return st; - } - - BDADDR_TO_STREAM(p, p_addr->bda); - UINT8_TO_STREAM(p, p_addr->type); - } - /* send address filter */ - if ((st = BTM_VendorSpecificCommand (HCI_BLE_ADV_FILTER_OCF, - (UINT8)(BTM_BLE_ADV_FILT_META_HDR_LENGTH + BTM_BLE_META_ADDR_LEN), - param, - btm_ble_scan_pf_cmpl_cback)) != BTM_NO_RESOURCES) { - memset(&btm_ble_adv_filt_cb.cur_filter_target, 0, sizeof(tBLE_BD_ADDR)); - } else { - BTM_TRACE_ERROR("Broadcaster Address Filter Update failed"); - } - return st; -} - -/******************************************************************************* -** -** Function btm_ble_update_uuid_filter -** -** Description this function update(add,delete or clear) service UUID filter. -** -** -** Returns BTM_SUCCESS if successful, -** BTM_ILLEGAL_VALUE if parameter is not valid. -** -*******************************************************************************/ -tBTM_STATUS btm_ble_update_uuid_filter(tBTM_BLE_SCAN_COND_OP action, - tBTM_BLE_PF_FILT_INDEX filt_index, - tBTM_BLE_PF_COND_TYPE filter_type, - tBTM_BLE_PF_COND_PARAM *p_cond, - tBTM_BLE_FILT_CB_EVT cb_evt, - tBTM_BLE_REF_VALUE ref_value) -{ - UINT8 param[BTM_BLE_META_UUID_LEN + BTM_BLE_ADV_FILT_META_HDR_LENGTH], - * p = param, - len = BTM_BLE_ADV_FILT_META_HDR_LENGTH; - tBTM_STATUS st = BTM_ILLEGAL_VALUE; - tBTM_BLE_PF_UUID_COND *p_uuid_cond; - UINT8 evt_type; - - memset(param, 0, BTM_BLE_META_UUID_LEN + BTM_BLE_ADV_FILT_META_HDR_LENGTH); - - if (BTM_BLE_PF_SRVC_UUID == filter_type) { - evt_type = BTM_BLE_META_PF_UUID; - p_uuid_cond = p_cond ? &p_cond->srvc_uuid : NULL; - } else { - evt_type = BTM_BLE_META_PF_SOL_UUID; - p_uuid_cond = p_cond ? &p_cond->solicitate_uuid : NULL; - } - - if (NULL == p_uuid_cond && action != BTM_BLE_SCAN_COND_CLEAR) { - BTM_TRACE_ERROR("Illegal param for add/delete UUID filter"); - return st; - } - - /* need to add address filter first, if adding per bda UUID filter without address filter */ - if (BTM_BLE_SCAN_COND_ADD == action && NULL != p_uuid_cond && - p_uuid_cond->p_target_addr && - btm_ble_find_addr_filter_counter(p_uuid_cond->p_target_addr) == NULL) { - UINT8_TO_STREAM(p, BTM_BLE_META_PF_ADDR); - UINT8_TO_STREAM(p, action); - - /* Filter index */ - UINT8_TO_STREAM(p, filt_index); - - BDADDR_TO_STREAM(p, p_uuid_cond->p_target_addr->bda); - UINT8_TO_STREAM(p, p_uuid_cond->p_target_addr->type); - - /* send address filter */ - if ((st = BTM_VendorSpecificCommand (HCI_BLE_ADV_FILTER_OCF, - (UINT8)(BTM_BLE_ADV_FILT_META_HDR_LENGTH + BTM_BLE_META_ADDR_LEN), - param, - btm_ble_scan_pf_cmpl_cback)) == BTM_NO_RESOURCES) { - BTM_TRACE_ERROR("Update Address filter into controller failed."); - return st; - } - - btm_ble_advfilt_enq_op_q(action, BTM_BLE_META_PF_ADDR, cb_evt, ref_value, NULL, NULL); - BTM_TRACE_DEBUG("Updated Address filter"); - } - - p = param; - UINT8_TO_STREAM(p, evt_type); - UINT8_TO_STREAM(p, action); - - /* Filter index */ - UINT8_TO_STREAM(p, filt_index); - - if ((BTM_BLE_SCAN_COND_ADD == action || - BTM_BLE_SCAN_COND_DELETE == action) && - NULL != p_uuid_cond) { - if (p_uuid_cond->uuid.len == LEN_UUID_16) { - UINT16_TO_STREAM(p, p_uuid_cond->uuid.uu.uuid16); - len += LEN_UUID_16; - } else if (p_uuid_cond->uuid.len == LEN_UUID_32) { /*4 bytes */ - UINT32_TO_STREAM(p, p_uuid_cond->uuid.uu.uuid32); - len += LEN_UUID_32; - } else if (p_uuid_cond->uuid.len == LEN_UUID_128) { - ARRAY_TO_STREAM (p, p_uuid_cond->uuid.uu.uuid128, LEN_UUID_128); - len += LEN_UUID_128; - } else { - BTM_TRACE_ERROR("illegal UUID length: %d", p_uuid_cond->uuid.len); - return BTM_ILLEGAL_VALUE; - } - - if (NULL != p_uuid_cond->p_uuid_mask) { - if (p_uuid_cond->uuid.len == LEN_UUID_16) { - UINT16_TO_STREAM(p, p_uuid_cond->p_uuid_mask->uuid16_mask); - len += LEN_UUID_16; - } else if (p_uuid_cond->uuid.len == LEN_UUID_32) { /*4 bytes */ - UINT32_TO_STREAM(p, p_uuid_cond->p_uuid_mask->uuid32_mask); - len += LEN_UUID_32; - } else if (p_uuid_cond->uuid.len == LEN_UUID_128) { - ARRAY_TO_STREAM (p, p_uuid_cond->p_uuid_mask->uuid128_mask, LEN_UUID_128); - len += LEN_UUID_128; - } - } else { - memset(p, 0xff, p_uuid_cond->uuid.len); - len += p_uuid_cond->uuid.len; - } - BTM_TRACE_DEBUG("btm_ble_update_uuid_filter : %d, %d, %d, %d", filter_type, evt_type, - p_uuid_cond->uuid.len, len); - } - - /* send UUID filter update */ - if ((st = BTM_VendorSpecificCommand (HCI_BLE_ADV_FILTER_OCF, - len, - param, - btm_ble_scan_pf_cmpl_cback)) != BTM_NO_RESOURCES) { - if (p_uuid_cond && p_uuid_cond->p_target_addr) { - memcpy(&btm_ble_adv_filt_cb.cur_filter_target, p_uuid_cond->p_target_addr, - sizeof(tBLE_BD_ADDR)); - } - else { - memset(&btm_ble_adv_filt_cb.cur_filter_target, 0, sizeof(tBLE_BD_ADDR)); - } - } else { - BTM_TRACE_ERROR("UUID filter updating failed"); - } - - return st; -} - - -/******************************************************************************* -** -** Function btm_ble_clear_scan_pf_filter -** -** Description clear all adv payload filter by de-select all the adv pf feature bits -** -** -** Returns BTM_SUCCESS if successful, -** BTM_ILLEGAL_VALUE if parameter is not valid. -** -*******************************************************************************/ -tBTM_STATUS btm_ble_clear_scan_pf_filter(tBTM_BLE_SCAN_COND_OP action, - tBTM_BLE_PF_FILT_INDEX filt_index, - tBTM_BLE_PF_COND_PARAM *p_cond, - tBTM_BLE_PF_CFG_CBACK *p_cmpl_cback, - tBTM_BLE_FILT_CB_EVT cb_evt, - tBTM_BLE_REF_VALUE ref_value) -{ - tBLE_BD_ADDR *p_target = (p_cond == NULL) ? NULL : &p_cond->target_addr; - tBTM_BLE_PF_COUNT *p_bda_filter; - tBTM_STATUS st = BTM_WRONG_MODE; - UINT8 param[20], *p; - - if (BTM_BLE_SCAN_COND_CLEAR != action) { - BTM_TRACE_ERROR("unable to perform action:%d for generic adv filter type", action); - return BTM_ILLEGAL_VALUE; - } - - p = param; - memset(param, 0, 20); - - p_bda_filter = btm_ble_find_addr_filter_counter(p_target); - - if (NULL == p_bda_filter || - /* not a generic filter */ - (p_target != NULL)) { - BTM_TRACE_ERROR("Error: Can not clear filter, No PF filter has been configured!"); - return st; - } - - /* clear the general filter entry */ - if (NULL == p_target) { - /* clear manufacturer data filter */ - st = btm_ble_update_pf_manu_data(BTM_BLE_SCAN_COND_CLEAR, filt_index, NULL, - BTM_BLE_PF_MANU_DATA, cb_evt, ref_value); - if (BTM_CMD_STARTED == st) { - btm_ble_advfilt_enq_op_q(action, BTM_BLE_META_PF_MANU_DATA, cb_evt, - ref_value, NULL, NULL); - } - - /* clear local name filter */ - st = btm_ble_update_pf_local_name(BTM_BLE_SCAN_COND_CLEAR, filt_index, NULL); - if (BTM_CMD_STARTED == st) { - btm_ble_advfilt_enq_op_q(action, BTM_BLE_META_PF_LOCAL_NAME, cb_evt, - ref_value, NULL, NULL); - } - - /* update the counter for service data */ - st = btm_ble_update_srvc_data_change(BTM_BLE_SCAN_COND_CLEAR, filt_index, NULL); - - /* clear UUID filter */ - st = btm_ble_update_uuid_filter(BTM_BLE_SCAN_COND_CLEAR, filt_index, - BTM_BLE_PF_SRVC_UUID, NULL, cb_evt, ref_value); - if (BTM_CMD_STARTED == st) { - btm_ble_advfilt_enq_op_q(action, BTM_BLE_META_PF_UUID, cb_evt, ref_value, NULL, NULL); - } - - st = btm_ble_update_uuid_filter(BTM_BLE_SCAN_COND_CLEAR, filt_index, - BTM_BLE_PF_SRVC_SOL_UUID, NULL, cb_evt, ref_value); - if (BTM_CMD_STARTED == st) { - btm_ble_advfilt_enq_op_q(action, BTM_BLE_META_PF_SOL_UUID, cb_evt, - ref_value, NULL, NULL); - } - - /* clear service data filter */ - st = btm_ble_update_pf_manu_data(BTM_BLE_SCAN_COND_CLEAR, filt_index, NULL, - BTM_BLE_PF_SRVC_DATA_PATTERN, cb_evt, ref_value); - if (BTM_CMD_STARTED == st) { - btm_ble_advfilt_enq_op_q(action, BTM_BLE_META_PF_SRVC_DATA, cb_evt, - ref_value, NULL, NULL); - } - } - - /* select feature based on control block settings */ - UINT8_TO_STREAM(p, BTM_BLE_META_PF_FEAT_SEL); - UINT8_TO_STREAM(p, BTM_BLE_SCAN_COND_CLEAR); - - /* Filter index */ - UINT8_TO_STREAM(p, filt_index); - - /* set PCF selection */ - UINT32_TO_STREAM(p, BTM_BLE_PF_SELECT_NONE); - /* set logic condition as OR as default */ - UINT8_TO_STREAM(p, BTM_BLE_PF_LOGIC_OR); - - if ((st = BTM_VendorSpecificCommand (HCI_BLE_ADV_FILTER_OCF, - (UINT8)(BTM_BLE_ADV_FILT_META_HDR_LENGTH + BTM_BLE_PF_FEAT_SEL_LEN), - param, - btm_ble_scan_pf_cmpl_cback)) - != BTM_NO_RESOURCES) { - if (p_target) { - memcpy(&btm_ble_adv_filt_cb.cur_filter_target, p_target, sizeof(tBLE_BD_ADDR)); - } else { - memset(&btm_ble_adv_filt_cb.cur_filter_target, 0, sizeof(tBLE_BD_ADDR)); - } - } - return st; -} - -/******************************************************************************* -** -** Function BTM_BleAdvFilterParamSetup -** -** Description This function is called to setup the adv data payload filter -** condition. -** -** Parameters action - Type of action to be performed -** filt_index - Filter index -** p_filt_params - Filter parameters -** p_target - Target device -** p_cmpl_back - Callback pointer -** ref_value - reference value -** -** Returns void -** -*******************************************************************************/ -tBTM_STATUS BTM_BleAdvFilterParamSetup(int action, tBTM_BLE_PF_FILT_INDEX filt_index, - tBTM_BLE_PF_FILT_PARAMS *p_filt_params, - tBLE_BD_ADDR *p_target, tBTM_BLE_PF_PARAM_CBACK *p_cmpl_cback, - tBTM_BLE_REF_VALUE ref_value) -{ - tBTM_STATUS st = BTM_WRONG_MODE; - tBTM_BLE_PF_COUNT *p_bda_filter = NULL; - UINT8 len = BTM_BLE_ADV_FILT_META_HDR_LENGTH + BTM_BLE_ADV_FILT_FEAT_SELN_LEN + - BTM_BLE_ADV_FILT_TRACK_NUM; - UINT8 param[len], *p; - - if (BTM_SUCCESS != btm_ble_obtain_vsc_details()) { - return st; - } - - p = param; - memset(param, 0, len); - BTM_TRACE_EVENT (" BTM_BleAdvFilterParamSetup"); - - if (BTM_BLE_SCAN_COND_ADD == action) { - p_bda_filter = btm_ble_find_addr_filter_counter(p_target); - if (NULL == p_bda_filter) { - BTM_TRACE_ERROR("BD Address not found!"); - return st; - } - - BTM_TRACE_DEBUG("BTM_BleAdvFilterParamSetup : Feat mask:%d", p_filt_params->feat_seln); - /* select feature based on control block settings */ - UINT8_TO_STREAM(p, BTM_BLE_META_PF_FEAT_SEL); - UINT8_TO_STREAM(p, BTM_BLE_SCAN_COND_ADD); - - /* Filter index */ - UINT8_TO_STREAM(p, filt_index); - - /* set PCF selection */ - UINT16_TO_STREAM(p, p_filt_params->feat_seln); - /* set logic type */ - UINT16_TO_STREAM(p, p_filt_params->logic_type); - /* set logic condition */ - UINT8_TO_STREAM(p, p_filt_params->filt_logic_type); - /* set RSSI high threshold */ - UINT8_TO_STREAM(p, p_filt_params->rssi_high_thres); - /* set delivery mode */ - UINT8_TO_STREAM(p, p_filt_params->dely_mode); - - if (0x01 == p_filt_params->dely_mode) { - /* set onfound timeout */ - UINT16_TO_STREAM(p, p_filt_params->found_timeout); - /* set onfound timeout count*/ - UINT8_TO_STREAM(p, p_filt_params->found_timeout_cnt); - /* set RSSI low threshold */ - UINT8_TO_STREAM(p, p_filt_params->rssi_low_thres); - /* set onlost timeout */ - UINT16_TO_STREAM(p, p_filt_params->lost_timeout); - /* set num_of_track_entries for firmware greater than L-release version */ - if (cmn_ble_adv_vsc_cb.version_supported > BTM_VSC_CHIP_CAPABILITY_L_VERSION) { - UINT16_TO_STREAM(p, p_filt_params->num_of_tracking_entries); - } - } - - if (cmn_ble_adv_vsc_cb.version_supported == BTM_VSC_CHIP_CAPABILITY_L_VERSION) { - len = BTM_BLE_ADV_FILT_META_HDR_LENGTH + BTM_BLE_ADV_FILT_FEAT_SELN_LEN; - } else { - len = BTM_BLE_ADV_FILT_META_HDR_LENGTH + BTM_BLE_ADV_FILT_FEAT_SELN_LEN + - BTM_BLE_ADV_FILT_TRACK_NUM; - } - - if ((st = BTM_VendorSpecificCommand (HCI_BLE_ADV_FILTER_OCF, - (UINT8)len, - param, - btm_ble_scan_pf_cmpl_cback)) - == BTM_NO_RESOURCES) { - return st; - } - btm_ble_advfilt_enq_op_q(action, BTM_BLE_META_PF_FEAT_SEL, BTM_BLE_FILT_ADV_PARAM, - ref_value, NULL, p_cmpl_cback); - } else if (BTM_BLE_SCAN_COND_DELETE == action) { - /* select feature based on control block settings */ - UINT8_TO_STREAM(p, BTM_BLE_META_PF_FEAT_SEL); - UINT8_TO_STREAM(p, BTM_BLE_SCAN_COND_DELETE); - /* Filter index */ - UINT8_TO_STREAM(p, filt_index); - - if ((st = BTM_VendorSpecificCommand (HCI_BLE_ADV_FILTER_OCF, - (UINT8)(BTM_BLE_ADV_FILT_META_HDR_LENGTH), - param, - btm_ble_scan_pf_cmpl_cback)) - == BTM_NO_RESOURCES) { - return st; - } - btm_ble_advfilt_enq_op_q(action, BTM_BLE_META_PF_FEAT_SEL, BTM_BLE_FILT_ADV_PARAM, - ref_value, NULL, p_cmpl_cback); - } else if (BTM_BLE_SCAN_COND_CLEAR == action) { - /* Deallocate all filters here */ - btm_ble_dealloc_addr_filter_counter(NULL, BTM_BLE_PF_TYPE_ALL); - - /* select feature based on control block settings */ - UINT8_TO_STREAM(p, BTM_BLE_META_PF_FEAT_SEL); - UINT8_TO_STREAM(p, BTM_BLE_SCAN_COND_CLEAR); - - if ((st = BTM_VendorSpecificCommand (HCI_BLE_ADV_FILTER_OCF, - (UINT8)(BTM_BLE_ADV_FILT_META_HDR_LENGTH - 1), - param, - btm_ble_scan_pf_cmpl_cback)) - == BTM_NO_RESOURCES) { - return st; - } - btm_ble_advfilt_enq_op_q(action, BTM_BLE_META_PF_FEAT_SEL, BTM_BLE_FILT_ADV_PARAM, - ref_value, NULL, p_cmpl_cback); - } - - return st; -} - -/******************************************************************************* -** -** Function BTM_BleEnableDisableFilterFeature -** -** Description This function is called to enable / disable the APCF feature -** -** Parameters enable the generic scan condition. -** enable: enable or disable the filter condition -** p_stat_cback - Status callback pointer -** ref_value - Ref value -** Returns void -** -*******************************************************************************/ -tBTM_STATUS BTM_BleEnableDisableFilterFeature(UINT8 enable, - tBTM_BLE_PF_STATUS_CBACK *p_stat_cback, - tBTM_BLE_REF_VALUE ref_value) -{ - UINT8 param[20], *p; - tBTM_STATUS st = BTM_WRONG_MODE; - - if (BTM_SUCCESS != btm_ble_obtain_vsc_details()) { - return st; - } - - p = param; - memset(param, 0, 20); - - /* enable the content filter in controller */ - p = param; - UINT8_TO_STREAM(p, BTM_BLE_META_PF_ENABLE); - /* enable adv data payload filtering */ - UINT8_TO_STREAM(p, enable); - - if ((st = BTM_VendorSpecificCommand (HCI_BLE_ADV_FILTER_OCF, - BTM_BLE_PCF_ENABLE_LEN, param, - btm_ble_scan_pf_cmpl_cback)) == BTM_CMD_STARTED) { - btm_ble_adv_filt_cb.p_filt_stat_cback = p_stat_cback; - btm_ble_advfilt_enq_op_q(enable, BTM_BLE_META_PF_ENABLE, BTM_BLE_FILT_ENABLE_DISABLE, - ref_value, NULL, NULL); - } - return st; -} - -/******************************************************************************* -** -** Function BTM_BleCfgFilterCondition -** -** Description This function is called to configure the adv data payload filter -** condition. -** -** Parameters action: to read/write/clear -** cond_type: filter condition type. -** filt_index - Filter index -** p_cond: filter condition parameter -** p_cmpl_cback - Config callback pointer -** ref_value - Reference value -** -** Returns void -** -*******************************************************************************/ -tBTM_STATUS BTM_BleCfgFilterCondition(tBTM_BLE_SCAN_COND_OP action, - tBTM_BLE_PF_COND_TYPE cond_type, - tBTM_BLE_PF_FILT_INDEX filt_index, - tBTM_BLE_PF_COND_PARAM *p_cond, - tBTM_BLE_PF_CFG_CBACK *p_cmpl_cback, - tBTM_BLE_REF_VALUE ref_value) -{ - tBTM_STATUS st = BTM_ILLEGAL_VALUE; - UINT8 ocf = 0; - BTM_TRACE_EVENT (" BTM_BleCfgFilterCondition action:%d, cond_type:%d, index:%d", action, - cond_type, filt_index); - - if (BTM_SUCCESS != btm_ble_obtain_vsc_details()) { - return st; - } - - switch (cond_type) { - /* write service data filter */ - case BTM_BLE_PF_SRVC_DATA_PATTERN: - /* write manufacturer data filter */ - case BTM_BLE_PF_MANU_DATA: - st = btm_ble_update_pf_manu_data(action, filt_index, p_cond, cond_type, 0, ref_value); - break; - - /* write local name filter */ - case BTM_BLE_PF_LOCAL_NAME: - st = btm_ble_update_pf_local_name(action, filt_index, p_cond); - break; - - /* filter on advertiser address */ - case BTM_BLE_PF_ADDR_FILTER: - st = btm_ble_update_addr_filter(action, filt_index, p_cond); - break; - - /* filter on service/solicited UUID */ - case BTM_BLE_PF_SRVC_UUID: - case BTM_BLE_PF_SRVC_SOL_UUID: - st = btm_ble_update_uuid_filter(action, filt_index, cond_type, p_cond, 0, ref_value); - break; - - case BTM_BLE_PF_SRVC_DATA: - st = btm_ble_update_srvc_data_change(action, filt_index, p_cond); - break; - - case BTM_BLE_PF_TYPE_ALL: /* only used to clear filter */ - st = btm_ble_clear_scan_pf_filter(action, filt_index, p_cond, p_cmpl_cback, - 0, ref_value); - break; - - default: - BTM_TRACE_WARNING("condition type [%d] not supported currently.", cond_type); - break; - } - - if (BTM_CMD_STARTED == st && cond_type != BTM_BLE_PF_TYPE_ALL) { - ocf = btm_ble_condtype_to_ocf(cond_type); - btm_ble_advfilt_enq_op_q(action, ocf, BTM_BLE_FILT_CFG, ref_value, p_cmpl_cback, NULL); - } else if (BTM_CMD_STARTED == st && BTM_BLE_PF_TYPE_ALL == cond_type) { - btm_ble_advfilt_enq_op_q(action, BTM_BLE_META_PF_FEAT_SEL, BTM_BLE_FILT_CFG, - ref_value, p_cmpl_cback, NULL); - } - return st; -} - -/******************************************************************************* -** -** Function btm_ble_adv_filter_init -** -** Description This function initializes the adv filter control block -** -** Parameters -** -** Returns status -** -*******************************************************************************/ -void btm_ble_adv_filter_init(void) -{ -#if BTM_DYNAMIC_MEMORY == TRUE - btm_ble_adv_filt_cb_ptr = (tBTM_BLE_ADV_FILTER_CB *)osi_malloc(sizeof(tBTM_BLE_ADV_FILTER_CB)); - cmn_ble_adv_vsc_cb_ptr = (tBTM_BLE_VSC_CB *)osi_malloc(sizeof(tBTM_BLE_VSC_CB)); - if (btm_ble_adv_filt_cb_ptr == NULL || cmn_ble_adv_vsc_cb_ptr == NULL) { - BTM_TRACE_ERROR("%s malloc failed", __func__); - return; - } - memset((void *)btm_ble_adv_filt_cb_ptr, 0, sizeof(tBTM_BLE_ADV_FILTER_CB)); - memset((void *)cmn_ble_adv_vsc_cb_ptr, 0, sizeof(tBTM_BLE_VSC_CB)); -#endif - memset(&btm_ble_adv_filt_cb, 0, sizeof(tBTM_BLE_ADV_FILTER_CB)); - if (BTM_SUCCESS != btm_ble_obtain_vsc_details()) { - return; - } - - if (cmn_ble_adv_vsc_cb.max_filter > 0) { - btm_ble_adv_filt_cb.p_addr_filter_count = - (tBTM_BLE_PF_COUNT *) osi_malloc( sizeof(tBTM_BLE_PF_COUNT) * cmn_ble_adv_vsc_cb.max_filter); - } -} - -/******************************************************************************* -** -** Function btm_ble_adv_filter_cleanup -** -** Description This function de-initializes the adv filter control block -** -** Parameters -** -** Returns status -** -*******************************************************************************/ -void btm_ble_adv_filter_cleanup(void) -{ - if (btm_ble_adv_filt_cb.p_addr_filter_count) { - osi_free(btm_ble_adv_filt_cb.p_addr_filter_count); - btm_ble_adv_filt_cb.p_addr_filter_count = NULL; - } - -#if BTM_DYNAMIC_MEMORY == TRUE - osi_free(btm_ble_adv_filt_cb_ptr); - btm_ble_adv_filt_cb_ptr = NULL; - osi_free(cmn_ble_adv_vsc_cb_ptr); - cmn_ble_adv_vsc_cb_ptr = NULL; -#endif -} - -#endif // #if BLE_ANDROID_CONTROLLER_SCAN_FILTER == TRUE #endif diff --git a/components/bt/host/bluedroid/stack/btm/btm_ble_batchscan.c b/components/bt/host/bluedroid/stack/btm/btm_ble_batchscan.c index b4b586431c1..6fb140e210d 100644 --- a/components/bt/host/bluedroid/stack/btm/btm_ble_batchscan.c +++ b/components/bt/host/bluedroid/stack/btm/btm_ble_batchscan.c @@ -29,949 +29,6 @@ #include "stack/hcimsgs.h" #if (BLE_INCLUDED == TRUE) -#if (BLE_HOST_BATCH_SCAN_EN == TRUE) -#if BTM_DYNAMIC_MEMORY == FALSE -tBTM_BLE_BATCH_SCAN_CB ble_batchscan_cb; -#if (BLE_HOST_TRACK_ADVERTISER_EN == TRUE) -tBTM_BLE_ADV_TRACK_CB ble_advtrack_cb; -#endif // #if (BLE_HOST_TRACK_ADVERTISER_EN == TRUE) -#else -tBTM_BLE_BATCH_SCAN_CB *ble_batchscan_cb_ptr; -#if (BLE_HOST_TRACK_ADVERTISER_EN == TRUE) -tBTM_BLE_ADV_TRACK_CB *ble_advtrack_cb_ptr; -#endif // #if (BLE_HOST_TRACK_ADVERTISER_EN == TRUE) -#define ble_batchscan_cb (*ble_batchscan_cb_ptr) -#if (BLE_HOST_TRACK_ADVERTISER_EN == TRUE) -#define ble_advtrack_cb (*ble_advtrack_cb_ptr) -#endif // #if (BLE_HOST_TRACK_ADVERTISER_EN == TRUE) -#endif - -/* length of each batch scan command */ -#define BTM_BLE_BATCH_SCAN_STORAGE_CFG_LEN 4 -#define BTM_BLE_BATCH_SCAN_PARAM_CONFIG_LEN 12 -#define BTM_BLE_BATCH_SCAN_ENB_DISB_LEN 2 -#define BTM_BLE_BATCH_SCAN_READ_RESULTS_LEN 2 - -#define BTM_BLE_BATCH_SCAN_CB_EVT_MASK 0xF0 -#define BTM_BLE_BATCH_SCAN_SUBCODE_MASK 0x0F - -/******************************************************************************* -** Local functions -*******************************************************************************/ -void btm_ble_batchscan_vsc_cmpl_cback (tBTM_VSC_CMPL *p_params); -void btm_ble_batchscan_cleanup(void); - -/******************************************************************************* -** -** Function btm_ble_batchscan_filter_track_adv_vse_cback -** -** Description VSE callback for batch scan, filter, and tracking events. -** -** Returns None -** -*******************************************************************************/ -void btm_ble_batchscan_filter_track_adv_vse_cback(UINT8 len, UINT8 *p) -{ -#if (BLE_HOST_TRACK_ADVERTISER_EN == TRUE) - tBTM_BLE_TRACK_ADV_DATA adv_data; - tBTM_BLE_VSC_CB cmn_ble_vsc_cb; -#endif // #if (BLE_HOST_TRACK_ADVERTISER_EN == TRUE) - UINT8 sub_event = 0; - STREAM_TO_UINT8(sub_event, p); - - BTM_TRACE_EVENT("btm_ble_batchscan_filter_track_adv_vse_cback called with event:%x", sub_event); - if (HCI_VSE_SUBCODE_BLE_THRESHOLD_SUB_EVT == sub_event && - NULL != ble_batchscan_cb.p_thres_cback) { - ble_batchscan_cb.p_thres_cback(ble_batchscan_cb.ref_value); - return; - } -#if (BLE_HOST_TRACK_ADVERTISER_EN == TRUE) - if (HCI_VSE_SUBCODE_BLE_TRACKING_SUB_EVT == sub_event && NULL != ble_advtrack_cb.p_track_cback) { - if (len < 10) { - return; - } - - memset(&adv_data, 0 , sizeof(tBTM_BLE_TRACK_ADV_DATA)); - BTM_BleGetVendorCapabilities(&cmn_ble_vsc_cb); - adv_data.client_if = (UINT8)ble_advtrack_cb.ref_value; - if (cmn_ble_vsc_cb.version_supported > BTM_VSC_CHIP_CAPABILITY_L_VERSION) { - STREAM_TO_UINT8(adv_data.filt_index, p); - STREAM_TO_UINT8(adv_data.advertiser_state, p); - STREAM_TO_UINT8(adv_data.advertiser_info_present, p); - STREAM_TO_BDADDR(adv_data.bd_addr.address, p); - STREAM_TO_UINT8(adv_data.addr_type, p); - - /* Extract the adv info details */ - if (ADV_INFO_PRESENT == adv_data.advertiser_info_present) { - STREAM_TO_UINT8(adv_data.tx_power, p); - STREAM_TO_UINT8(adv_data.rssi_value, p); - STREAM_TO_UINT16(adv_data.time_stamp, p); - - STREAM_TO_UINT8(adv_data.adv_pkt_len, p); - if (adv_data.adv_pkt_len > 0) { - adv_data.p_adv_pkt_data = osi_malloc(adv_data.adv_pkt_len); - memcpy(adv_data.p_adv_pkt_data, p, adv_data.adv_pkt_len); - } - - STREAM_TO_UINT8(adv_data.scan_rsp_len, p); - if (adv_data.scan_rsp_len > 0) { - adv_data.p_scan_rsp_data = osi_malloc(adv_data.scan_rsp_len); - memcpy(adv_data.p_scan_rsp_data, p, adv_data.scan_rsp_len); - } - } - } else { - /* Based on L-release version */ - STREAM_TO_UINT8(adv_data.filt_index, p); - STREAM_TO_UINT8(adv_data.addr_type, p); - STREAM_TO_BDADDR(adv_data.bd_addr.address, p); - STREAM_TO_UINT8(adv_data.advertiser_state, p); - } - - BTM_TRACE_EVENT("track_adv_vse_cback called: %d, %d, %d", adv_data.filt_index, - adv_data.addr_type, adv_data.advertiser_state); - ble_advtrack_cb.p_track_cback(&adv_data); - return; - } -#endif // #if (BLE_HOST_TRACK_ADVERTISER_EN == TRUE) -} - -/******************************************************************************* -** -** Function btm_ble_batchscan_enq_op_q -** -** Description enqueue a batchscan operation in q to check command complete -** status -** -** Returns void -** -*******************************************************************************/ -void btm_ble_batchscan_enq_op_q(UINT8 opcode, tBTM_BLE_BATCH_SCAN_STATE cur_state, - UINT8 cb_evt, tBTM_BLE_REF_VALUE ref_value) -{ - ble_batchscan_cb.op_q.sub_code[ble_batchscan_cb.op_q.next_idx] = (opcode | (cb_evt << 4)); - ble_batchscan_cb.op_q.cur_state[ble_batchscan_cb.op_q.next_idx] = cur_state; - ble_batchscan_cb.op_q.ref_value[ble_batchscan_cb.op_q.next_idx] = ref_value; - BTM_TRACE_DEBUG("btm_ble_batchscan_enq_op_q: subcode:%d, Cur_state:%d, ref_value:%d", - ble_batchscan_cb.op_q.sub_code[ble_batchscan_cb.op_q.next_idx], - ble_batchscan_cb.op_q.cur_state[ble_batchscan_cb.op_q.next_idx], - ble_batchscan_cb.op_q.ref_value[ble_batchscan_cb.op_q.next_idx]); - ble_batchscan_cb.op_q.next_idx = (ble_batchscan_cb.op_q.next_idx + 1) - % BTM_BLE_BATCH_SCAN_MAX; -} - -/******************************************************************************* -** -** Function btm_ble_batchscan_enq_rep_q -** -** Description enqueue a batchscan report operation in q to check command complete -** status -** -** Returns void -** -*******************************************************************************/ -tBTM_STATUS btm_ble_batchscan_enq_rep_q(UINT8 report_format, tBTM_BLE_REF_VALUE ref_value) -{ - int i = 0; - for (i = 0; i < BTM_BLE_BATCH_REP_MAIN_Q_SIZE; i++) { - if (report_format == ble_batchscan_cb.main_rep_q.rep_mode[i]) { - return BTM_ILLEGAL_VALUE; - } - } - - ble_batchscan_cb.main_rep_q.rep_mode[ble_batchscan_cb.main_rep_q.next_idx] = report_format; - ble_batchscan_cb.main_rep_q.ref_value[ble_batchscan_cb.main_rep_q.next_idx] = ref_value; - ble_batchscan_cb.main_rep_q.num_records[ble_batchscan_cb.main_rep_q.next_idx] = 0; - ble_batchscan_cb.main_rep_q.data_len[ble_batchscan_cb.main_rep_q.next_idx] = 0; - ble_batchscan_cb.main_rep_q.p_data[ble_batchscan_cb.main_rep_q.next_idx] = NULL; - BTM_TRACE_DEBUG("btm_ble_batchscan_enq_rep_q: index:%d, rep %d, ref %d", - ble_batchscan_cb.main_rep_q.next_idx, report_format, ref_value); - - ble_batchscan_cb.main_rep_q.next_idx = (ble_batchscan_cb.main_rep_q.next_idx + 1) - % BTM_BLE_BATCH_REP_MAIN_Q_SIZE; - return BTM_SUCCESS; -} - -/******************************************************************************* -** -** Function btm_ble_batchscan_enq_rep_data -** -** Description setup the data in the main report queue -** -** Returns void -** -*******************************************************************************/ -void btm_ble_batchscan_enq_rep_data(UINT8 report_format, UINT8 num_records, UINT8 *p_data, - UINT8 data_len) -{ - int index = 0, len = 0; - UINT8 *p_orig_data = NULL, *p_app_data = NULL; - - for (index = 0; index < BTM_BLE_BATCH_REP_MAIN_Q_SIZE; index++) { - if (report_format == ble_batchscan_cb.main_rep_q.rep_mode[index]) { - break; - } - } - - BTM_TRACE_DEBUG("btm_ble_batchscan_enq_rep_data: index:%d, rep %d, num %d len : %d", - index, report_format, num_records, data_len); - - if (index < BTM_BLE_BATCH_REP_MAIN_Q_SIZE && data_len > 0 && num_records > 0) { - len = ble_batchscan_cb.main_rep_q.data_len[index]; - p_orig_data = ble_batchscan_cb.main_rep_q.p_data[index]; - if (NULL != p_orig_data) { - p_app_data = osi_malloc(len + data_len); - memcpy(p_app_data, p_orig_data, len); - memcpy(p_app_data + len, p_data, data_len); - osi_free(p_orig_data); - ble_batchscan_cb.main_rep_q.p_data[index] = p_app_data; - ble_batchscan_cb.main_rep_q.num_records[index] += num_records; - ble_batchscan_cb.main_rep_q.data_len[index] += data_len; - } else { - p_app_data = osi_malloc(data_len); - memcpy(p_app_data, p_data, data_len); - ble_batchscan_cb.main_rep_q.p_data[index] = p_app_data; - ble_batchscan_cb.main_rep_q.num_records[index] = num_records; - ble_batchscan_cb.main_rep_q.data_len[index] = data_len; - } - } -} - -/******************************************************************************* -** -** Function btm_ble_batchscan_deq_rep_q -** -** Description dequeue a batchscan report in q when command complete -** is received -** -** Returns void -** -*******************************************************************************/ -void btm_ble_batchscan_deq_rep_data(UINT8 report_format, tBTM_BLE_REF_VALUE *p_ref_value, - UINT8 *p_num_records, UINT8 **p_data, UINT16 *p_data_len) -{ - int index = 0; - - for (index = 0; index < BTM_BLE_BATCH_REP_MAIN_Q_SIZE; index++) { - if (report_format == ble_batchscan_cb.main_rep_q.rep_mode[index]) { - break; - } - } - - if (BTM_BLE_BATCH_REP_MAIN_Q_SIZE == index) { - BTM_TRACE_ERROR("btm_ble_batchscan_deq_rep_data: rep_format:%d not found", report_format); - return; - } - - *p_num_records = ble_batchscan_cb.main_rep_q.num_records[index]; - *p_ref_value = ble_batchscan_cb.main_rep_q.ref_value[index]; - *p_data = ble_batchscan_cb.main_rep_q.p_data[index]; - *p_data_len = ble_batchscan_cb.main_rep_q.data_len[index]; - - ble_batchscan_cb.main_rep_q.p_data[index] = NULL; - ble_batchscan_cb.main_rep_q.data_len[index] = 0; - ble_batchscan_cb.main_rep_q.rep_mode[index] = 0; - ble_batchscan_cb.main_rep_q.ref_value[index] = 0; - ble_batchscan_cb.main_rep_q.num_records[index] = 0; - - BTM_TRACE_DEBUG("btm_ble_batchscan_deq_rep_data: index:%d, rep %d, num %d, data_len %d", - index, report_format, *p_num_records, *p_data_len); - - ble_batchscan_cb.main_rep_q.pending_idx = (ble_batchscan_cb.main_rep_q.pending_idx + 1) - % BTM_BLE_BATCH_SCAN_MAX; -} - -/******************************************************************************* -** -** Function btm_ble_batchscan_deq_op_q -** -** Description dequeue a batch scan operation from q when command complete -** is received -** -** Returns void -** -*******************************************************************************/ -void btm_ble_batchscan_deq_op_q(UINT8 *p_opcode, tBTM_BLE_BATCH_SCAN_STATE *cur_state, - UINT8 *p_cb_evt, tBTM_BLE_REF_VALUE *p_ref) -{ - *p_cb_evt = (ble_batchscan_cb.op_q.sub_code[ble_batchscan_cb.op_q.pending_idx] >> 4); - *p_opcode = (ble_batchscan_cb.op_q.sub_code[ble_batchscan_cb.op_q.pending_idx] - & BTM_BLE_BATCH_SCAN_SUBCODE_MASK); - *p_ref = ble_batchscan_cb.op_q.ref_value[ble_batchscan_cb.op_q.pending_idx]; - *cur_state = (ble_batchscan_cb.op_q.cur_state[ble_batchscan_cb.op_q.pending_idx]); - ble_batchscan_cb.op_q.pending_idx = (ble_batchscan_cb.op_q.pending_idx + 1) - % BTM_BLE_BATCH_SCAN_MAX; -} - -/******************************************************************************* -** -** Function btm_ble_read_batchscan_reports -** -** Description This function reads the reports from controller -** -** Parameters scan_mode - The mode for which the reports are to be read out from the controller -** ref_value - Reference value -** -** Returns status -** -*******************************************************************************/ -tBTM_STATUS btm_ble_read_batchscan_reports(tBTM_BLE_BATCH_SCAN_MODE scan_mode, - tBTM_BLE_REF_VALUE ref_value) -{ - tBTM_STATUS status = BTM_NO_RESOURCES; - UINT8 param[BTM_BLE_BATCH_SCAN_READ_RESULTS_LEN], *pp; - pp = param; - - memset(param, 0, BTM_BLE_BATCH_SCAN_READ_RESULTS_LEN); - - UINT8_TO_STREAM (pp, BTM_BLE_BATCH_SCAN_READ_RESULTS); - UINT8_TO_STREAM (pp, scan_mode); - - if ((status = BTM_VendorSpecificCommand (HCI_BLE_BATCH_SCAN_OCF, - BTM_BLE_BATCH_SCAN_READ_RESULTS_LEN, param, btm_ble_batchscan_vsc_cmpl_cback)) - != BTM_CMD_STARTED) { - BTM_TRACE_ERROR("btm_ble_read_batchscan_reports %d", status); - return BTM_ILLEGAL_VALUE; - } - - if (BTM_CMD_STARTED == status) { - /* The user needs to be provided scan read reports event */ - btm_ble_batchscan_enq_op_q(BTM_BLE_BATCH_SCAN_READ_RESULTS, ble_batchscan_cb.cur_state, - BTM_BLE_BATCH_SCAN_READ_REPTS_EVT, ref_value); - } - - return status; -} - -/******************************************************************************* -** -** Function btm_ble_batchscan_vsc_cmpl_cback -** -** Description Batch scan VSC complete callback -** -** Parameters p_params - VSC completed callback parameters -** -** Returns void -** -*******************************************************************************/ -void btm_ble_batchscan_vsc_cmpl_cback (tBTM_VSC_CMPL *p_params) -{ - UINT8 *p = p_params->p_param_buf; - UINT16 len = p_params->param_len; - tBTM_BLE_REF_VALUE ref_value = 0; - - UINT8 status = 0, subcode = 0, opcode = 0; - UINT8 report_format = 0, num_records = 0, cb_evt = 0; - UINT16 data_len = 0; - tBTM_BLE_BATCH_SCAN_STATE cur_state = 0; - tBTM_STATUS btm_status = 0; - UINT8 *p_data = NULL; - - if (len < 2) { - BTM_TRACE_ERROR("wrong length for btm_ble_batch_scan_vsc_cmpl_cback"); - btm_ble_batchscan_deq_op_q(&opcode, &cur_state, &cb_evt, &ref_value); - return; - } - - STREAM_TO_UINT8(status, p); - STREAM_TO_UINT8(subcode, p); - - btm_ble_batchscan_deq_op_q(&opcode, &cur_state, &cb_evt, &ref_value); - - BTM_TRACE_DEBUG("btm_ble_batchscan op_code = %02x state = %02x cb_evt = %02x,ref_value=%d", - opcode, cur_state, cb_evt, ref_value); - - if (opcode != subcode) { - BTM_TRACE_ERROR("Got unexpected VSC cmpl, expected: %d got: %d", subcode, opcode); - return; - } - - switch (subcode) { - case BTM_BLE_BATCH_SCAN_ENB_DISAB_CUST_FEATURE: { - if (BTM_SUCCESS == status && BTM_BLE_SCAN_ENABLE_CALLED == cur_state) { - ble_batchscan_cb.cur_state = BTM_BLE_SCAN_ENABLED_STATE; - } else if (BTM_BLE_SCAN_ENABLE_CALLED == cur_state) { - BTM_TRACE_ERROR("SCAN_ENB_DISAB_CUST_FEATURE - Invalid state after enb"); - ble_batchscan_cb.cur_state = BTM_BLE_SCAN_INVALID_STATE; - } - - BTM_TRACE_DEBUG("BTM_BLE_BATCH_SCAN_ENB_DISAB_CUST_FEAT status = %d, state: %d,evt=%d", - status, ble_batchscan_cb.cur_state, cb_evt); - - if (cb_evt != 0 && NULL != ble_batchscan_cb.p_setup_cback) { - ble_batchscan_cb.p_setup_cback(cb_evt, ref_value, status); - } - break; - } - - case BTM_BLE_BATCH_SCAN_SET_STORAGE_PARAM: { - BTM_TRACE_DEBUG("BTM_BLE_BATCH_SCAN_SET_STORAGE_PARAM status = %d, evt=%d", - status, cb_evt); - if (cb_evt != 0 && NULL != ble_batchscan_cb.p_setup_cback) { - ble_batchscan_cb.p_setup_cback(cb_evt, ref_value, status); - } - break; - } - - case BTM_BLE_BATCH_SCAN_SET_PARAMS: { - BTM_TRACE_DEBUG("BTM_BLE_BATCH_SCAN_SET_PARAMS status = %d,evt=%d", status, cb_evt); - - if (BTM_BLE_SCAN_DISABLE_CALLED == cur_state) { - if (BTM_SUCCESS == status) { - ble_batchscan_cb.cur_state = BTM_BLE_SCAN_DISABLED_STATE; - } else { - BTM_TRACE_ERROR("BTM_BLE_BATCH_SCAN_SET_PARAMS - Invalid state after disabled"); - ble_batchscan_cb.cur_state = BTM_BLE_SCAN_INVALID_STATE; - } - } - - if (cb_evt != 0 && NULL != ble_batchscan_cb.p_setup_cback) { - ble_batchscan_cb.p_setup_cback(cb_evt, ref_value, status); - } - break; - } - - case BTM_BLE_BATCH_SCAN_READ_RESULTS: { - if (cb_evt != 0 && NULL != ble_batchscan_cb.p_scan_rep_cback) { - STREAM_TO_UINT8(report_format, p); - STREAM_TO_UINT8(num_records, p); - p = (uint8_t *)(p_params->p_param_buf + 4); - BTM_TRACE_DEBUG("BTM_BLE_BATCH_SCAN_READ_RESULTS status=%d,len=%d,rec=%d", - status, len - 4, num_records); - - if (0 == num_records) { - btm_ble_batchscan_deq_rep_data(report_format, &ref_value, &num_records, - &p_data, &data_len); - if (NULL != ble_batchscan_cb.p_scan_rep_cback) { - ble_batchscan_cb.p_scan_rep_cback(ref_value, report_format, num_records, - data_len, p_data, status); - } - } else { - if ((len - 4) > 0) { - btm_ble_batchscan_enq_rep_data(report_format, num_records, p, len - 4); - /* More records could be in the buffer and needs to be pulled out */ - btm_status = btm_ble_read_batchscan_reports(report_format, ref_value); - if (BTM_CMD_STARTED != btm_status) { - btm_ble_batchscan_deq_rep_data(report_format, &ref_value, &num_records, - &p_data, &data_len); - /* Send whatever is available, in case of a command failure */ - if (NULL != ble_batchscan_cb.p_scan_rep_cback && NULL != p_data) { - ble_batchscan_cb.p_scan_rep_cback(ref_value, report_format, - num_records, data_len, p_data, status); - } - } - } - } - } - break; - } - - default: - break; - } - - return; -} - -/******************************************************************************* -** -** Function btm_ble_set_storage_config -** -** Description This function writes the storage configuration in controller -** -** Parameters batch_scan_full_max -Max storage space (in %) allocated to full scanning -** batch_scan_trunc_max -Max storage space (in %) allocated to truncated scanning -** batch_scan_notify_threshold - Setup notification level based on total space -** -** Returns status -** -*******************************************************************************/ -tBTM_STATUS btm_ble_set_storage_config(UINT8 batch_scan_full_max, UINT8 batch_scan_trunc_max, - UINT8 batch_scan_notify_threshold) -{ - tBTM_STATUS status = BTM_NO_RESOURCES; - UINT8 param[BTM_BLE_BATCH_SCAN_STORAGE_CFG_LEN], *pp; - - pp = param; - memset(param, 0, BTM_BLE_BATCH_SCAN_STORAGE_CFG_LEN); - - UINT8_TO_STREAM (pp, BTM_BLE_BATCH_SCAN_SET_STORAGE_PARAM); - UINT8_TO_STREAM (pp, batch_scan_full_max); - UINT8_TO_STREAM (pp, batch_scan_trunc_max); - UINT8_TO_STREAM (pp, batch_scan_notify_threshold); - - if ((status = BTM_VendorSpecificCommand (HCI_BLE_BATCH_SCAN_OCF, - BTM_BLE_BATCH_SCAN_STORAGE_CFG_LEN, param, - btm_ble_batchscan_vsc_cmpl_cback)) != BTM_CMD_STARTED) { - BTM_TRACE_ERROR("btm_ble_set_storage_config %d", status); - return BTM_ILLEGAL_VALUE; - } - - return status; -} - -/******************************************************************************* -** -** Function btm_ble_set_batchscan_param -** -** Description This function writes the batch scan params in controller -** -** Parameters scan_mode -Batch scan mode -** scan_interval - Scan interval -** scan_window - Scan window -** discard_rule -Discard rules -** addr_type - Address type -** -** Returns status -** -*******************************************************************************/ -tBTM_STATUS btm_ble_set_batchscan_param(tBTM_BLE_BATCH_SCAN_MODE scan_mode, - UINT32 scan_interval, UINT32 scan_window, tBLE_ADDR_TYPE addr_type, - tBTM_BLE_DISCARD_RULE discard_rule) -{ - tBTM_STATUS status = BTM_NO_RESOURCES; - UINT8 scan_param[BTM_BLE_BATCH_SCAN_PARAM_CONFIG_LEN], *pp_scan; - - pp_scan = scan_param; - memset(scan_param, 0, BTM_BLE_BATCH_SCAN_PARAM_CONFIG_LEN); - - // Override param and decide addr_type based on own addr type - // TODO: Remove upper layer parameter? - addr_type = btm_cb.ble_ctr_cb.addr_mgnt_cb.own_addr_type; - - UINT8_TO_STREAM (pp_scan, BTM_BLE_BATCH_SCAN_SET_PARAMS); - UINT8_TO_STREAM (pp_scan, scan_mode); - UINT32_TO_STREAM (pp_scan, scan_window); - UINT32_TO_STREAM (pp_scan, scan_interval); - UINT8_TO_STREAM (pp_scan, addr_type); - UINT8_TO_STREAM (pp_scan, discard_rule); - - if ((status = BTM_VendorSpecificCommand (HCI_BLE_BATCH_SCAN_OCF, - BTM_BLE_BATCH_SCAN_PARAM_CONFIG_LEN, - scan_param, btm_ble_batchscan_vsc_cmpl_cback)) != BTM_CMD_STARTED) { - BTM_TRACE_ERROR("btm_ble_set_batchscan_param %d", status); - return BTM_ILLEGAL_VALUE; - } - - return status; -} - -/******************************************************************************* -** -** Function btm_ble_enable_disable_batchscan -** -** Description This function enables the customer specific feature in controller -** -** Parameters enable_disable: true - enable, false - disable -** -** Returns status -** -*******************************************************************************/ -tBTM_STATUS btm_ble_enable_disable_batchscan(BOOLEAN should_enable) -{ - tBTM_STATUS status = BTM_NO_RESOURCES; - UINT8 shld_enable = 0x01; - UINT8 enable_param[BTM_BLE_BATCH_SCAN_ENB_DISB_LEN], *pp_enable; - - if (!should_enable) { - shld_enable = 0x00; - } - - if (should_enable) { - pp_enable = enable_param; - memset(enable_param, 0, BTM_BLE_BATCH_SCAN_ENB_DISB_LEN); - - UINT8_TO_STREAM (pp_enable, BTM_BLE_BATCH_SCAN_ENB_DISAB_CUST_FEATURE); - UINT8_TO_STREAM (pp_enable, shld_enable); - - if ((status = BTM_VendorSpecificCommand(HCI_BLE_BATCH_SCAN_OCF, - BTM_BLE_BATCH_SCAN_ENB_DISB_LEN, enable_param, - btm_ble_batchscan_vsc_cmpl_cback)) != BTM_CMD_STARTED) { - status = BTM_MODE_UNSUPPORTED; - BTM_TRACE_ERROR("btm_ble_enable_disable_batchscan %d", status); - return BTM_ILLEGAL_VALUE; - } - } else if ((status = btm_ble_set_batchscan_param(BTM_BLE_BATCH_SCAN_MODE_DISABLE, - ble_batchscan_cb.scan_interval, ble_batchscan_cb.scan_window, - ble_batchscan_cb.addr_type, ble_batchscan_cb.discard_rule)) != BTM_CMD_STARTED) { - status = BTM_MODE_UNSUPPORTED; - BTM_TRACE_ERROR("btm_ble_enable_disable_batchscan %d", status); - return BTM_ILLEGAL_VALUE; - } - - if (should_enable) { - ble_batchscan_cb.cur_state = BTM_BLE_SCAN_ENABLE_CALLED; - } else { - ble_batchscan_cb.cur_state = BTM_BLE_SCAN_DISABLE_CALLED; - } - return status; -} - -#if (BLE_HOST_SETUP_STORAGE_EN == TRUE) -/******************************************************************************* -** -** Function BTM_BleSetStorageConfig -** -** Description This function is called to write storage config params. -** -** Parameters: batch_scan_full_max - Max storage space (in %) allocated to full style -** batch_scan_trunc_max - Max storage space (in %) allocated to trunc style -** batch_scan_notify_threshold - Setup notification level based on total space -** p_setup_cback - Setup callback pointer -** p_thres_cback - Threshold callback pointer -** p_rep_cback - Reports callback pointer -** ref_value - Reference value -** -** Returns tBTM_STATUS -** -*******************************************************************************/ -tBTM_STATUS BTM_BleSetStorageConfig(UINT8 batch_scan_full_max, UINT8 batch_scan_trunc_max, - UINT8 batch_scan_notify_threshold, - tBTM_BLE_SCAN_SETUP_CBACK *p_setup_cback, - tBTM_BLE_SCAN_THRESHOLD_CBACK *p_thres_cback, - tBTM_BLE_SCAN_REP_CBACK *p_rep_cback, - tBTM_BLE_REF_VALUE ref_value) -{ - tBTM_STATUS status = BTM_NO_RESOURCES; - tBTM_BLE_VSC_CB cmn_ble_vsc_cb; - - BTM_TRACE_EVENT (" BTM_BleSetStorageConfig: %d, %d, %d, %d, %d", - ble_batchscan_cb.cur_state, ref_value, batch_scan_full_max, batch_scan_trunc_max, - batch_scan_notify_threshold); - - if (!controller_get_interface()->supports_ble()) { - return BTM_ILLEGAL_VALUE; - } - - BTM_BleGetVendorCapabilities(&cmn_ble_vsc_cb); - - if (0 == cmn_ble_vsc_cb.tot_scan_results_strg) { - BTM_TRACE_ERROR("Controller does not support batch scan"); - return BTM_ERR_PROCESSING; - } - - ble_batchscan_cb.p_setup_cback = p_setup_cback; - ble_batchscan_cb.p_thres_cback = p_thres_cback; - ble_batchscan_cb.p_scan_rep_cback = p_rep_cback; - ble_batchscan_cb.ref_value = ref_value; - - if (batch_scan_full_max > BTM_BLE_ADV_SCAN_FULL_MAX || - batch_scan_trunc_max > BTM_BLE_ADV_SCAN_TRUNC_MAX || - batch_scan_notify_threshold > BTM_BLE_ADV_SCAN_THR_MAX) { - BTM_TRACE_ERROR("Illegal set storage config params"); - return BTM_ILLEGAL_VALUE; - } - - if (BTM_BLE_SCAN_INVALID_STATE == ble_batchscan_cb.cur_state || - BTM_BLE_SCAN_DISABLED_STATE == ble_batchscan_cb.cur_state || - BTM_BLE_SCAN_DISABLE_CALLED == ble_batchscan_cb.cur_state) { - status = btm_ble_enable_disable_batchscan(TRUE); - if (BTM_CMD_STARTED != status) { - return status; - } - - ble_batchscan_cb.cur_state = BTM_BLE_SCAN_ENABLE_CALLED; - btm_ble_batchscan_enq_op_q(BTM_BLE_BATCH_SCAN_ENB_DISAB_CUST_FEATURE, - BTM_BLE_SCAN_ENABLE_CALLED, 0, ref_value); - } - - status = btm_ble_set_storage_config(batch_scan_full_max, batch_scan_trunc_max, - batch_scan_notify_threshold); - if (BTM_CMD_STARTED != status) { - return status; - } - /* The user needs to be provided scan config storage event */ - btm_ble_batchscan_enq_op_q(BTM_BLE_BATCH_SCAN_SET_STORAGE_PARAM, ble_batchscan_cb.cur_state, - BTM_BLE_BATCH_SCAN_CFG_STRG_EVT, ref_value); - - return status; -} -#endif // #if (BLE_HOST_SETUP_STORAGE_EN == TRUE) - -/******************************************************************************* -** -** Function BTM_BleEnableBatchScan -** -** Description This function is called to configure and enable batch scanning -** -** Parameters: scan_mode -Batch scan mode -** scan_interval - Scan interval value -** scan_window - Scan window value -** discard_rule - Data discard rule -** ref_value - Reference value -** -** Returns tBTM_STATUS -** -*******************************************************************************/ -tBTM_STATUS BTM_BleEnableBatchScan(tBTM_BLE_BATCH_SCAN_MODE scan_mode, - UINT32 scan_interval, UINT32 scan_window, tBLE_ADDR_TYPE addr_type, - tBTM_BLE_DISCARD_RULE discard_rule, tBTM_BLE_REF_VALUE ref_value) -{ - tBTM_STATUS status = BTM_NO_RESOURCES; - tBTM_BLE_VSC_CB cmn_ble_vsc_cb; - BTM_TRACE_EVENT (" BTM_BleEnableBatchScan: %d, %d, %d, %d, %d, %d", - scan_mode, scan_interval, scan_window, addr_type, discard_rule, ref_value); - - if (!controller_get_interface()->supports_ble()) { - return BTM_ILLEGAL_VALUE; - } - - BTM_BleGetVendorCapabilities(&cmn_ble_vsc_cb); - - if (0 == cmn_ble_vsc_cb.tot_scan_results_strg) { - BTM_TRACE_ERROR("Controller does not support batch scan"); - return BTM_ERR_PROCESSING; - } - - BTM_TRACE_DEBUG("BTM_BleEnableBatchScan: %d, %x, %x, %d, %d", scan_mode, scan_interval, - scan_window, discard_rule, ble_batchscan_cb.cur_state); - - /* Only 16 bits will be used for scan interval and scan window as per agreement with Google */ - /* So the standard LE range would suffice for scan interval and scan window */ - if ((BTM_BLE_ISVALID_PARAM(scan_interval, BTM_BLE_SCAN_INT_MIN, BTM_BLE_SCAN_INT_MAX) || - BTM_BLE_ISVALID_PARAM(scan_window, BTM_BLE_SCAN_WIN_MIN, BTM_BLE_SCAN_WIN_MAX)) - && (BTM_BLE_BATCH_SCAN_MODE_PASS == scan_mode || BTM_BLE_BATCH_SCAN_MODE_ACTI == scan_mode - || BTM_BLE_BATCH_SCAN_MODE_PASS_ACTI == scan_mode) - && (BTM_BLE_DISCARD_OLD_ITEMS == discard_rule || - BTM_BLE_DISCARD_LOWER_RSSI_ITEMS == discard_rule)) { - if (BTM_BLE_SCAN_INVALID_STATE == ble_batchscan_cb.cur_state || - BTM_BLE_SCAN_DISABLED_STATE == ble_batchscan_cb.cur_state || - BTM_BLE_SCAN_DISABLE_CALLED == ble_batchscan_cb.cur_state) { - status = btm_ble_enable_disable_batchscan(TRUE); - if (BTM_CMD_STARTED != status) { - return status; - } - btm_ble_batchscan_enq_op_q(BTM_BLE_BATCH_SCAN_ENB_DISAB_CUST_FEATURE, - BTM_BLE_SCAN_ENABLE_CALLED, 0, ref_value); - } - - ble_batchscan_cb.scan_mode = scan_mode; - ble_batchscan_cb.scan_interval = scan_interval; - ble_batchscan_cb.scan_window = scan_window; - ble_batchscan_cb.addr_type = addr_type; - ble_batchscan_cb.discard_rule = discard_rule; - /* This command starts batch scanning, if enabled */ - status = btm_ble_set_batchscan_param(scan_mode, scan_interval, scan_window, addr_type, - discard_rule); - if (BTM_CMD_STARTED != status) { - return status; - } - - /* The user needs to be provided scan enable event */ - btm_ble_batchscan_enq_op_q(BTM_BLE_BATCH_SCAN_SET_PARAMS, ble_batchscan_cb.cur_state, - BTM_BLE_BATCH_SCAN_ENABLE_EVT, ref_value); - } else { - BTM_TRACE_ERROR("Illegal enable scan params"); - return BTM_ILLEGAL_VALUE; - } - return status; -} - -/******************************************************************************* -** -** Function BTM_BleDisableBatchScan -** -** Description This function is called to disable batch scanning -** -** Parameters: ref_value - Reference value -** -** Returns tBTM_STATUS -** -*******************************************************************************/ -tBTM_STATUS BTM_BleDisableBatchScan(tBTM_BLE_REF_VALUE ref_value) -{ - tBTM_STATUS status = BTM_NO_RESOURCES; - tBTM_BLE_VSC_CB cmn_ble_vsc_cb; - BTM_TRACE_EVENT (" BTM_BleDisableBatchScan"); - - if (!controller_get_interface()->supports_ble()) { - return BTM_ILLEGAL_VALUE; - } - - BTM_BleGetVendorCapabilities(&cmn_ble_vsc_cb); - - if (0 == cmn_ble_vsc_cb.tot_scan_results_strg) { - BTM_TRACE_ERROR("Controller does not support batch scan"); - return BTM_ERR_PROCESSING; - } - - status = btm_ble_enable_disable_batchscan(FALSE); - if (BTM_CMD_STARTED == status) { - /* The user needs to be provided scan disable event */ - btm_ble_batchscan_enq_op_q(BTM_BLE_BATCH_SCAN_SET_PARAMS, - BTM_BLE_SCAN_DISABLE_CALLED, BTM_BLE_BATCH_SCAN_DISABLE_EVT, - ref_value); - } - - return status; -} - -#if (BLE_HOST_READ_SCAN_REPORTS_EN == TRUE) -/******************************************************************************* -** -** Function BTM_BleReadScanReports -** -** Description This function is called to start reading batch scan reports -** -** Parameters: scan_mode - Batch scan mode -** ref_value - Reference value -** -** Returns tBTM_STATUS -** -*******************************************************************************/ -tBTM_STATUS BTM_BleReadScanReports(tBTM_BLE_BATCH_SCAN_MODE scan_mode, - tBTM_BLE_REF_VALUE ref_value) -{ - tBTM_STATUS status = BTM_NO_RESOURCES; - tBTM_BLE_VSC_CB cmn_ble_vsc_cb; - UINT8 read_scan_mode = 0; - UINT8 *p_data = NULL, num_records = 0; - UINT16 data_len = 0; - - BTM_TRACE_EVENT (" BTM_BleReadScanReports; %d, %d", scan_mode, ref_value); - - if (!controller_get_interface()->supports_ble()) { - return BTM_ILLEGAL_VALUE; - } - - BTM_BleGetVendorCapabilities(&cmn_ble_vsc_cb); - - if (0 == cmn_ble_vsc_cb.tot_scan_results_strg) { - BTM_TRACE_ERROR("Controller does not support batch scan"); - return BTM_ERR_PROCESSING; - } - - /* Check if the requested scan mode has already been setup by the user */ - read_scan_mode = ble_batchscan_cb.scan_mode & BTM_BLE_BATCH_SCAN_MODE_ACTI; - if (0 == read_scan_mode) { - read_scan_mode = ble_batchscan_cb.scan_mode & BTM_BLE_BATCH_SCAN_MODE_PASS; - } - - /* Check only for modes, as scan reports can be called after disabling batch scan */ - if (read_scan_mode > 0 && (BTM_BLE_BATCH_SCAN_MODE_PASS == scan_mode || - BTM_BLE_BATCH_SCAN_MODE_ACTI == scan_mode)) { - status = btm_ble_batchscan_enq_rep_q(scan_mode, ref_value); - if (BTM_SUCCESS == status) { - status = btm_ble_read_batchscan_reports(scan_mode, ref_value); - if (BTM_CMD_STARTED != status) { - btm_ble_batchscan_deq_rep_data(scan_mode, &ref_value, - &num_records, &p_data, &data_len); - } - } - } else { - BTM_TRACE_ERROR("Illegal read scan params: %d, %d, %d", read_scan_mode, scan_mode, - ble_batchscan_cb.cur_state); - return BTM_ILLEGAL_VALUE; - } - return status; -} -#endif // #if (BLE_HOST_READ_SCAN_REPORTS_EN == TRUE) - -#if (BLE_HOST_TRACK_ADVERTISER_EN == TRUE) -/******************************************************************************* -** -** Function BTM_BleTrackAdvertiser -** -** Description This function is called to setup the callback for tracking advertisers -** -** Parameters: p_track_cback - Tracking callback pointer -** ref_value - Reference value -** -** Returns tBTM_STATUS -** -*******************************************************************************/ -tBTM_STATUS BTM_BleTrackAdvertiser(tBTM_BLE_TRACK_ADV_CBACK *p_track_cback, - tBTM_BLE_REF_VALUE ref_value) -{ - tBTM_BLE_VSC_CB cmn_ble_vsc_cb; - BTM_TRACE_EVENT (" BTM_BleTrackAdvertiser"); - if (!controller_get_interface()->supports_ble()) { - return BTM_ILLEGAL_VALUE; - } - - BTM_BleGetVendorCapabilities(&cmn_ble_vsc_cb); - - if (0 == cmn_ble_vsc_cb.tot_scan_results_strg) { - BTM_TRACE_ERROR("Controller does not support scan storage"); - return BTM_ERR_PROCESSING; - } - - ble_advtrack_cb.p_track_cback = p_track_cback; - ble_advtrack_cb.ref_value = ref_value; - return BTM_CMD_STARTED; -} -#endif // #if (BLE_HOST_TRACK_ADVERTISER_EN == TRUE) - -/******************************************************************************* -** -** Function btm_ble_batchscan_init -** -** Description This function initialize the batch scan control block. -** -** Parameters None -** -** Returns status -** -*******************************************************************************/ -void btm_ble_batchscan_init(void) -{ -#if BTM_DYNAMIC_MEMORY == TRUE - ble_batchscan_cb_ptr = (tBTM_BLE_BATCH_SCAN_CB *)osi_malloc(sizeof(tBTM_BLE_BATCH_SCAN_CB)); -#if (BLE_HOST_TRACK_ADVERTISER_EN == TRUE) - ble_advtrack_cb_ptr = (tBTM_BLE_ADV_TRACK_CB *)osi_malloc(sizeof(tBTM_BLE_ADV_TRACK_CB)); -#endif // #if (BLE_HOST_TRACK_ADVERTISER_EN == TRUE) - if (ble_batchscan_cb_ptr == NULL || ble_advtrack_cb_ptr == NULL) { - BTM_TRACE_ERROR("%s malloc failed", __func__); - return; - } -#endif - BTM_TRACE_EVENT (" btm_ble_batchscan_init"); - memset(&ble_batchscan_cb, 0, sizeof(tBTM_BLE_BATCH_SCAN_CB)); -#if (BLE_HOST_TRACK_ADVERTISER_EN == TRUE) - memset(&ble_advtrack_cb, 0, sizeof(tBTM_BLE_ADV_TRACK_CB)); -#endif // #if (BLE_HOST_TRACK_ADVERTISER_EN == TRUE) - BTM_RegisterForVSEvents(btm_ble_batchscan_filter_track_adv_vse_cback, TRUE); -} - -/******************************************************************************* -** -** Function btm_ble_batchscan_cleanup -** -** Description This function cleans the batch scan control block. -** -** Parameters None -** -** Returns void -** -*******************************************************************************/ -void btm_ble_batchscan_cleanup(void) -{ - int index = 0; - BTM_TRACE_EVENT (" btm_ble_batchscan_cleanup"); - - for (index = 0; index < BTM_BLE_BATCH_REP_MAIN_Q_SIZE; index++) { - if (NULL != ble_batchscan_cb.main_rep_q.p_data[index]) { - osi_free(ble_batchscan_cb.main_rep_q.p_data[index]); - ble_batchscan_cb.main_rep_q.p_data[index] = NULL; - } - } - - memset(&ble_batchscan_cb, 0, sizeof(tBTM_BLE_BATCH_SCAN_CB)); -#if (BLE_HOST_TRACK_ADVERTISER_EN == TRUE) - memset(&ble_advtrack_cb, 0, sizeof(tBTM_BLE_ADV_TRACK_CB)); -#endif // #if (BLE_HOST_TRACK_ADVERTISER_EN == TRUE) - -#if BTM_DYNAMIC_MEMORY == TRUE - osi_free(ble_batchscan_cb_ptr); - ble_batchscan_cb_ptr = NULL; -#if (BLE_HOST_TRACK_ADVERTISER_EN == TRUE) - osi_free(ble_advtrack_cb_ptr); - ble_advtrack_cb_ptr = NULL; -#endif // #if (BLE_HOST_TRACK_ADVERTISER_EN == TRUE) - -#endif -} - -#endif // #if (BLE_HOST_BATCH_SCAN_EN == TRUE) #endif diff --git a/components/bt/host/bluedroid/stack/btm/btm_ble_bgconn.c b/components/bt/host/bluedroid/stack/btm/btm_ble_bgconn.c index b418bd70f7d..452d3b3a1a0 100644 --- a/components/bt/host/bluedroid/stack/btm/btm_ble_bgconn.c +++ b/components/bt/host/bluedroid/stack/btm/btm_ble_bgconn.c @@ -39,10 +39,11 @@ #endif #if (BLE_INCLUDED == TRUE) - static void btm_suspend_wl_activity(tBTM_BLE_WL_STATE wl_state); static void btm_wl_update_to_controller(void); +#if (BLE_GATT_BGCONN == TRUE) + // Unfortunately (for now?) we have to maintain a copy of the device whitelist // on the host to determine if a device is pending to be connected or not. This // controls whether the host should keep trying to scan for whitelisted @@ -118,6 +119,7 @@ static bool background_connections_pending(void) } return pending_connections; } +#endif // (BLE_GATT_BGCONN == TRUE) /******************************************************************************* ** @@ -137,16 +139,11 @@ void btm_update_scanner_filter_policy(tBTM_BLE_SFP scan_policy) p_inq->sfp = scan_policy; p_inq->scan_type = p_inq->scan_type == BTM_BLE_SCAN_MODE_NONE ? BTM_BLE_SCAN_MODE_ACTI : p_inq->scan_type; - if (btm_cb.cmn_ble_vsc_cb.extended_scan_support == 0) { - btsnd_hcic_ble_set_scan_params(p_inq->scan_type, (UINT16)scan_interval, - (UINT16)scan_window, - btm_cb.ble_ctr_cb.addr_mgnt_cb.own_addr_type, - scan_policy); - } else { - btm_ble_send_extended_scan_params(p_inq->scan_type, scan_interval, scan_window, - btm_cb.ble_ctr_cb.addr_mgnt_cb.own_addr_type, - scan_policy); - } + + btsnd_hcic_ble_set_scan_params(p_inq->scan_type, (UINT16)scan_interval, + (UINT16)scan_window, + btm_cb.ble_ctr_cb.addr_mgnt_cb.own_addr_type, + scan_policy); } /******************************************************************************* ** @@ -340,6 +337,7 @@ BOOLEAN btm_update_dev_to_white_list(BOOLEAN to_add, BD_ADDR bd_addr, tBLE_ADDR_ return FALSE; } +#if (BLE_GATT_BGCONN == TRUE) if (to_add) { /* added the bd_addr to the connection hash map queue */ if(!background_connection_add((bt_bdaddr_t *)bd_addr)) { @@ -359,6 +357,7 @@ BOOLEAN btm_update_dev_to_white_list(BOOLEAN to_add, BD_ADDR bd_addr, tBLE_ADDR_ return TRUE; } } +#endif // (BLE_GATT_BGCONN == TRUE) if (update_wl_cb){ //save add whitelist complete callback @@ -386,7 +385,10 @@ void btm_ble_clear_white_list (tBTM_UPDATE_WHITELIST_CBACK *update_wl_cb) BTM_TRACE_EVENT ("btm_ble_clear_white_list"); btsnd_hcic_ble_clear_white_list(); + +#if (BLE_GATT_BGCONN == TRUE) background_connections_clear(); +#endif // (BLE_GATT_BGCONN == TRUE) if (update_wl_cb) { p_cb->update_wl_cb = update_wl_cb; @@ -462,7 +464,15 @@ void btm_ble_add_2_white_list_complete(UINT8 status) BTM_TRACE_EVENT("%s status=%d", __func__, status); tBTM_BLE_CB *p_cb = &btm_cb.ble_ctr_cb; if (status == HCI_SUCCESS) { - --btm_cb.ble_ctr_cb.white_list_avail_size; + // --btm_cb.ble_ctr_cb.white_list_avail_size; + /* + According to the latest Bluetooth spec: + If the device is already in the Filter Accept List, the Controller should not add the device + to the Filter Accept List again and should return success. + The host cannot obtain the controller as the actual remaining white list size unless the host + also maintains a white list + Keep consistent behavior with the NimBLE host stack + */ } // add whitelist complete callback if (p_cb->update_wl_cb) @@ -485,7 +495,7 @@ void btm_ble_remove_from_white_list_complete(UINT8 *p, UINT16 evt_len) UNUSED(evt_len); BTM_TRACE_EVENT ("%s status=%d", __func__, *p); if (*p == HCI_SUCCESS) { - ++btm_cb.ble_ctr_cb.white_list_avail_size; + // ++btm_cb.ble_ctr_cb.white_list_avail_size; } if (p_cb->update_wl_cb) { @@ -493,6 +503,7 @@ void btm_ble_remove_from_white_list_complete(UINT8 *p, UINT16 evt_len) } } +#if (BLE_GATT_BGCONN == TRUE) /******************************************************************************* ** ** Function btm_ble_start_auto_conn @@ -516,7 +527,10 @@ BOOLEAN btm_ble_start_auto_conn(BOOLEAN start) if (start) { if (p_cb->conn_state == BLE_CONN_IDLE && background_connections_pending() - && btm_ble_topology_check(BTM_BLE_STATE_INIT)) { +#if (BLE_TOPOLOGY_CHECK == TRUE) + && btm_ble_topology_check(BTM_BLE_STATE_INIT) +#endif // (BLE_TOPOLOGY_CHECK == TRUE) + ) { p_cb->wl_state |= BTM_BLE_WL_INIT; btm_execute_wl_dev_operation(); @@ -604,29 +618,21 @@ BOOLEAN btm_ble_start_select_conn(BOOLEAN start, tBTM_BLE_SEL_CBACK *p_select_cb btm_cb.ble_ctr_cb.inq_var.scan_type = BTM_BLE_SCAN_MODE_PASS; /* Process advertising packets only from devices in the white list */ - if (btm_cb.cmn_ble_vsc_cb.extended_scan_support == 0) { - /* use passive scan by default */ - if (!btsnd_hcic_ble_set_scan_params(BTM_BLE_SCAN_MODE_PASS, - scan_int, - scan_win, - p_cb->addr_mgnt_cb.own_addr_type, - SP_ADV_WL)) { - return FALSE; - } - } else { - if (!btm_ble_send_extended_scan_params(BTM_BLE_SCAN_MODE_PASS, - scan_int, - scan_win, - p_cb->addr_mgnt_cb.own_addr_type, - SP_ADV_WL)) { - return FALSE; - } + /* use passive scan by default */ + if (!btsnd_hcic_ble_set_scan_params(BTM_BLE_SCAN_MODE_PASS, + scan_int, + scan_win, + p_cb->addr_mgnt_cb.own_addr_type, + SP_ADV_WL)) { + return FALSE; } - +#if (BLE_TOPOLOGY_CHECK == TRUE) if (!btm_ble_topology_check(BTM_BLE_STATE_PASSIVE_SCAN)) { BTM_TRACE_ERROR("peripheral device cannot initiate passive scan for a selective connection"); return FALSE; - } else if (background_connections_pending()) { + } +#endif // (BLE_TOPOLOGY_CHECK == TRUE) + if (background_connections_pending()) { #if BLE_PRIVACY_SPT == TRUE btm_ble_enable_resolving_list_for_platform(BTM_BLE_RL_SCAN); #endif @@ -675,7 +681,9 @@ void btm_ble_initiate_select_conn(BD_ADDR bda) BTM_TRACE_ERROR("btm_ble_initiate_select_conn failed"); } } -#if (tGATT_BG_CONN_DEV == TRUE) +#endif // (BLE_GATT_BGCONN == TRUE) + +#if (GATT_BG_CONN_DEV == TRUE) /******************************************************************************* ** ** Function btm_ble_suspend_bg_conn @@ -700,7 +708,7 @@ BOOLEAN btm_ble_suspend_bg_conn(void) return FALSE; } -#endif // #if (tGATT_BG_CONN_DEV == TRUE) +#endif // #if (GATT_BG_CONN_DEV == TRUE) /******************************************************************************* ** @@ -713,12 +721,15 @@ BOOLEAN btm_ble_suspend_bg_conn(void) *******************************************************************************/ static void btm_suspend_wl_activity(tBTM_BLE_WL_STATE wl_state) { +#if (BLE_GATT_BGCONN == TRUE) if (wl_state & BTM_BLE_WL_INIT) { btm_ble_start_auto_conn(FALSE); } if (wl_state & BTM_BLE_WL_SCAN) { btm_ble_start_select_conn(FALSE, NULL); } +#endif // (BLE_GATT_BGCONN == TRUE) + #if (BLE_42_ADV_EN == TRUE) if (wl_state & BTM_BLE_WL_ADV) { btm_ble_stop_adv(); @@ -736,9 +747,9 @@ static void btm_suspend_wl_activity(tBTM_BLE_WL_STATE wl_state) *******************************************************************************/ void btm_resume_wl_activity(tBTM_BLE_WL_STATE wl_state) { -#if (tGATT_BG_CONN_DEV == TRUE) +#if (GATT_BG_CONN_DEV == TRUE) btm_ble_resume_bg_conn(); -#endif // #if (tGATT_BG_CONN_DEV == TRUE) +#endif // #if (GATT_BG_CONN_DEV == TRUE) if (wl_state & BTM_BLE_WL_ADV) { #if (BLE_42_ADV_EN == TRUE) btm_ble_start_adv(); @@ -765,7 +776,7 @@ static void btm_wl_update_to_controller(void) btm_execute_wl_dev_operation(); } -#if (tGATT_BG_CONN_DEV == TRUE) +#if (GATT_BG_CONN_DEV == TRUE) /******************************************************************************* ** ** Function btm_ble_resume_bg_conn @@ -795,7 +806,7 @@ BOOLEAN btm_ble_resume_bg_conn(void) return ret; } -#endif // #if (tGATT_BG_CONN_DEV == TRUE) +#endif // #if (GATT_BG_CONN_DEV == TRUE) /******************************************************************************* ** @@ -824,11 +835,13 @@ void btm_ble_set_conn_st(tBTM_BLE_CONN_ST new_st) BTM_TRACE_DEBUG("%s old=%u new=%u", __func__, btm_cb.ble_ctr_cb.conn_state, new_st); btm_cb.ble_ctr_cb.conn_state = new_st; +#if (BLE_TOPOLOGY_CHECK == TRUE) if (new_st == BLE_BG_CONN || new_st == BLE_DIR_CONN) { btm_ble_set_topology_mask(BTM_BLE_STATE_INIT_BIT); } else { btm_ble_clear_topology_mask(BTM_BLE_STATE_INIT_BIT); } +#endif // (BLE_TOPOLOGY_CHECK == TRUE) } /******************************************************************************* diff --git a/components/bt/host/bluedroid/stack/btm/btm_ble_cont_energy.c b/components/bt/host/bluedroid/stack/btm/btm_ble_cont_energy.c index 4b68fe807b7..671662e8bec 100644 --- a/components/bt/host/bluedroid/stack/btm/btm_ble_cont_energy.c +++ b/components/bt/host/bluedroid/stack/btm/btm_ble_cont_energy.c @@ -20,91 +20,5 @@ #include "common/bt_target.h" #if (BLE_INCLUDED == TRUE) -#if (BLE_HOST_ENERGY_INFO_EN == TRUE) -#include "stack/bt_types.h" -#include "stack/hcimsgs.h" -#include "stack/btu.h" -#include "btm_int.h" -//#include "bt_utils.h" -#include "stack/hcidefs.h" -#include "stack/btm_ble_api.h" - -tBTM_BLE_ENERGY_INFO_CB ble_energy_info_cb; - -/******************************************************************************* -** -** Function btm_ble_cont_energy_cmpl_cback -** -** Description Controller VSC complete callback -** -** Parameters -** -** Returns void -** -*******************************************************************************/ -void btm_ble_cont_energy_cmpl_cback (tBTM_VSC_CMPL *p_params) -{ - UINT8 *p = p_params->p_param_buf; - UINT16 len = p_params->param_len; - UINT8 status = 0; - UINT32 total_tx_time = 0, total_rx_time = 0, total_idle_time = 0, total_energy_used = 0; - - if (len < 17) { - BTM_TRACE_ERROR("wrong length for btm_ble_cont_energy_cmpl_cback"); - return; - } - - STREAM_TO_UINT8(status, p); - STREAM_TO_UINT32(total_tx_time, p); - STREAM_TO_UINT32(total_rx_time, p); - STREAM_TO_UINT32(total_idle_time, p); - STREAM_TO_UINT32(total_energy_used, p); - - BTM_TRACE_DEBUG("energy_info status=%d,tx_t=%u, rx_t=%u, ener_used=%u, idle_t=%u", - status, total_tx_time, total_rx_time, total_energy_used, total_idle_time); - - if (NULL != ble_energy_info_cb.p_ener_cback) { - ble_energy_info_cb.p_ener_cback(total_tx_time, total_rx_time, total_idle_time, - total_energy_used, status); - } - - return; -} - -/******************************************************************************* -** -** Function BTM_BleGetEnergyInfo -** -** Description This function obtains the energy info -** -** Parameters p_ener_cback - Callback pointer -** -** Returns status -** -*******************************************************************************/ -tBTM_STATUS BTM_BleGetEnergyInfo(tBTM_BLE_ENERGY_INFO_CBACK *p_ener_cback) -{ - tBTM_STATUS status = BTM_ILLEGAL_VALUE; - tBTM_BLE_VSC_CB cmn_ble_vsc_cb; - - BTM_BleGetVendorCapabilities(&cmn_ble_vsc_cb); - - BTM_TRACE_EVENT("BTM_BleGetEnergyInfo\n"); - - if (0 == cmn_ble_vsc_cb.energy_support) { - BTM_TRACE_ERROR("Controller does not support get energy info\n"); - return BTM_ERR_PROCESSING; - } - - ble_energy_info_cb.p_ener_cback = p_ener_cback; - if ((status = BTM_VendorSpecificCommand (HCI_BLE_ENERGY_INFO_OCF, 0, NULL, - btm_ble_cont_energy_cmpl_cback)) != BTM_CMD_STARTED) { - BTM_TRACE_ERROR("BTM_BleGetEnergyInfo status: %d", status); - return BTM_ILLEGAL_VALUE; - } - - return status; -} -#endif // #if (BLE_HOST_ENERGY_INFO_EN == TRUE) #endif diff --git a/components/bt/host/bluedroid/stack/btm/btm_ble_gap.c b/components/bt/host/bluedroid/stack/btm/btm_ble_gap.c index ad382d49b4b..831dbf7c0a1 100644 --- a/components/bt/host/bluedroid/stack/btm/btm_ble_gap.c +++ b/components/bt/host/bluedroid/stack/btm/btm_ble_gap.c @@ -59,16 +59,6 @@ #define BTM_BLE_GAP_ADV_RPT_BATCH_SIZE (10) -#if BTM_DYNAMIC_MEMORY == FALSE -static tBTM_BLE_VSC_CB cmn_ble_gap_vsc_cb; -#else -static tBTM_BLE_VSC_CB *cmn_ble_gap_vsc_cb_ptr; -#define cmn_ble_gap_vsc_cb (*cmn_ble_gap_vsc_cb_ptr) -#endif - -#if BLE_VND_INCLUDED == TRUE -static tBTM_BLE_CTRL_FEATURES_CBACK *p_ctrl_le_feature_rd_cmpl_cback = NULL; -#endif tBTM_CallbackFunc conn_callback_func; // BLE vendor HCI event callback @@ -79,7 +69,9 @@ static tBTM_BLE_VENDOR_HCI_EVT_CBACK *ble_vs_evt_callback = NULL; ** Local functions *******************************************************************************/ static void btm_ble_update_adv_flag(UINT8 flag); +#if (BLE_42_SCAN_EN == TRUE) static void btm_ble_process_adv_pkt_cont(BD_ADDR bda, UINT8 addr_type, UINT8 evt_type, UINT8 *p); +#endif // (BLE_42_SCAN_EN == TRUE) UINT8 *btm_ble_build_adv_data(tBTM_BLE_AD_MASK *p_data_mask, UINT8 **p_dst, tBTM_BLE_ADV_DATA *p_data); @@ -88,7 +80,6 @@ static UINT8 btm_set_conn_mode_adv_init_addr(tBTM_BLE_INQ_CB *p_cb, BD_ADDR_PTR p_peer_addr_ptr, tBLE_ADDR_TYPE *p_peer_addr_type, tBLE_ADDR_TYPE *p_own_addr_type); -static void btm_ble_stop_observe(void); static void btm_ble_stop_discover(void); #if (BLE_42_SCAN_EN == TRUE) static void btm_adv_pkt_handler(void *arg); @@ -112,6 +103,7 @@ bool btm_ble_inter_get(void) return is_ble50_inter; } +#if (BLE_TOPOLOGY_CHECK == TRUE) /* LE states combo bit to check */ const UINT8 btm_le_state_combo_tbl[BTM_BLE_STATE_MAX][BTM_BLE_STATE_MAX][2] = { {/* single state support */ @@ -253,6 +245,7 @@ const UINT8 btm_le_state_combo_tbl[BTM_BLE_STATE_MAX][BTM_BLE_STATE_MAX][2] = { }; /* check LE combo state supported */ #define BTM_LE_STATES_SUPPORTED(x, y, z) ((x)[(z)] & (y)) +#endif // (BLE_TOPOLOGY_CHECK == TRUE) #if (BLE_42_ADV_EN == TRUE) static osi_mutex_t adv_enable_lock; @@ -390,192 +383,6 @@ void BTM_BleClearWhitelist(tBTM_UPDATE_WHITELIST_CBACK *update_wl_cb) btm_ble_clear_white_list(update_wl_cb); } -/******************************************************************************* -** -** Function BTM_BleUpdateAdvFilterPolicy -** -** Description This function update the filter policy of advertiser. -** -** Parameter adv_policy: advertising filter policy -** -** Return void -*******************************************************************************/ -void BTM_BleUpdateAdvFilterPolicy(tBTM_BLE_AFP adv_policy) -{ - tBTM_BLE_INQ_CB *p_cb = &btm_cb.ble_ctr_cb.inq_var; - tBLE_ADDR_TYPE init_addr_type = BLE_ADDR_PUBLIC; - BD_ADDR p_addr_ptr = {0}; - UINT8 adv_mode = p_cb->adv_mode; - - BTM_TRACE_EVENT ("BTM_BleUpdateAdvFilterPolicy\n"); - - if (!controller_get_interface()->supports_ble()) { - return; - } - - if (p_cb->afp != adv_policy) { - p_cb->afp = adv_policy; - -#if (BLE_42_ADV_EN == TRUE) - /* if adv active, stop and restart */ - btm_ble_stop_adv (); -#endif // #if (BLE_42_ADV_EN == TRUE) - - if (p_cb->connectable_mode & BTM_BLE_CONNECTABLE) { - p_cb->evt_type = btm_set_conn_mode_adv_init_addr(p_cb, p_addr_ptr, &init_addr_type, - &p_cb->adv_addr_type); - } - - uint8_t null_addr[BD_ADDR_LEN] = {0}; - if ((p_cb->evt_type == 0x01 || p_cb->evt_type == 0x04) && memcmp(p_addr_ptr, null_addr, BD_ADDR_LEN) == 0) { - /* directed advertising */ - return; - } - - btsnd_hcic_ble_write_adv_params ((UINT16)(p_cb->adv_interval_min ? p_cb->adv_interval_min : - BTM_BLE_GAP_ADV_SLOW_INT), - (UINT16)(p_cb->adv_interval_max ? p_cb->adv_interval_max : - BTM_BLE_GAP_ADV_SLOW_INT), - p_cb->evt_type, - p_cb->adv_addr_type, - init_addr_type, - p_addr_ptr, - p_cb->adv_chnl_map, - p_cb->afp); - - if (adv_mode == BTM_BLE_ADV_ENABLE) { -#if (BLE_42_ADV_EN == TRUE) - btm_ble_start_adv (); -#endif // #if (BLE_42_ADV_EN == TRUE) - } - - } -} - -/******************************************************************************* -** -** Function btm_ble_send_extended_scan_params -** -** Description This function sends out the extended scan parameters command to the controller -** -** Parameters scan_type - Scan type -** scan_int - Scan interval -** scan_win - Scan window -** addr_type_own - Own address type -** scan_filter_policy - Scan filter policy -** -** Returns TRUE or FALSE -** -*******************************************************************************/ -BOOLEAN btm_ble_send_extended_scan_params(UINT8 scan_type, UINT32 scan_int, - UINT32 scan_win, UINT8 addr_type_own, - UINT8 scan_filter_policy) -{ - UINT8 scan_param[HCIC_PARAM_SIZE_BLE_WRITE_EXTENDED_SCAN_PARAM]; - UINT8 *pp_scan = scan_param; - - memset(scan_param, 0, HCIC_PARAM_SIZE_BLE_WRITE_EXTENDED_SCAN_PARAM); - - UINT8_TO_STREAM(pp_scan, scan_type); - UINT32_TO_STREAM(pp_scan, scan_int); - UINT32_TO_STREAM(pp_scan, scan_win); - UINT8_TO_STREAM(pp_scan, addr_type_own); - UINT8_TO_STREAM(pp_scan, scan_filter_policy); - - BTM_TRACE_DEBUG("%s, %d, %d", __func__, scan_int, scan_win); - if ((BTM_VendorSpecificCommand(HCI_BLE_EXTENDED_SCAN_PARAMS_OCF, - HCIC_PARAM_SIZE_BLE_WRITE_EXTENDED_SCAN_PARAM, scan_param, NULL)) != BTM_SUCCESS) { - BTM_TRACE_ERROR("%s error sending extended scan parameters", __func__); - return FALSE; - } - return TRUE; -} - -/******************************************************************************* -** -** Function BTM_BleObserve -** -** Description This procedure keep the device listening for advertising -** events from a broadcast device. -** -** Parameters start: start or stop observe. -** white_list: use white list in observer mode or not. -** -** Returns void -** -*******************************************************************************/ -tBTM_STATUS BTM_BleObserve(BOOLEAN start, UINT32 duration, - tBTM_INQ_RESULTS_CB *p_results_cb, tBTM_CMPL_CB *p_cmpl_cb) -{ - tBTM_BLE_INQ_CB *p_inq = &btm_cb.ble_ctr_cb.inq_var; - tBTM_STATUS status = BTM_WRONG_MODE; - - UINT32 scan_interval = !p_inq->scan_interval ? BTM_BLE_GAP_DISC_SCAN_INT : p_inq->scan_interval; - UINT32 scan_window = !p_inq->scan_window ? BTM_BLE_GAP_DISC_SCAN_WIN : p_inq->scan_window; - - BTM_TRACE_EVENT ("%s : scan_type:%d, %d, %d\n", __func__, btm_cb.btm_inq_vars.scan_type, - p_inq->scan_interval, p_inq->scan_window); - - if (!controller_get_interface()->supports_ble()) { - return BTM_ILLEGAL_VALUE; - } - - if (start) { - /* shared inquiry database, do not allow observe if any inquiry is active */ - if (BTM_BLE_IS_OBS_ACTIVE(btm_cb.ble_ctr_cb.scan_activity)) { - BTM_TRACE_ERROR("%s Observe Already Active", __func__); - return status; - } - - btm_cb.ble_ctr_cb.p_obs_results_cb = p_results_cb; - btm_cb.ble_ctr_cb.p_obs_cmpl_cb = p_cmpl_cb; - status = BTM_CMD_STARTED; - - /* scan is not started */ - if (!BTM_BLE_IS_SCAN_ACTIVE(btm_cb.ble_ctr_cb.scan_activity)) { - /* allow config of scan type */ - p_inq->scan_type = (p_inq->scan_type == BTM_BLE_SCAN_MODE_NONE) ? - BTM_BLE_SCAN_MODE_ACTI : p_inq->scan_type; - /* assume observe always not using white list */ -#if (defined BLE_PRIVACY_SPT && BLE_PRIVACY_SPT == TRUE) - /* enable resolving list */ - //btm_ble_enable_resolving_list_for_platform(BTM_BLE_RL_SCAN); -#endif - - if (cmn_ble_gap_vsc_cb.extended_scan_support == 0) { - btsnd_hcic_ble_set_scan_params(p_inq->scan_type, (UINT16)scan_interval, - (UINT16)scan_window, - btm_cb.ble_ctr_cb.addr_mgnt_cb.own_addr_type, - BTM_BLE_DEFAULT_SFP); - } else { - btm_ble_send_extended_scan_params(p_inq->scan_type, scan_interval, scan_window, - btm_cb.ble_ctr_cb.addr_mgnt_cb.own_addr_type, - BTM_BLE_DEFAULT_SFP); - } -#if (BLE_42_SCAN_EN == TRUE) - status = btm_ble_start_scan(); -#endif // #if (BLE_42_SCAN_EN == TRUE) - } - - if (status == BTM_CMD_STARTED) { - btm_cb.ble_ctr_cb.scan_activity |= BTM_LE_OBSERVE_ACTIVE; - if (duration != 0) - /* start observer timer */ - { - btu_start_timer (&btm_cb.ble_ctr_cb.obs_timer_ent, BTU_TTYPE_BLE_OBSERVE, duration); - } - } - } else if (BTM_BLE_IS_OBS_ACTIVE(btm_cb.ble_ctr_cb.scan_activity)) { - status = BTM_CMD_STARTED; - btm_ble_stop_observe(); - } else { - BTM_TRACE_ERROR("%s Observe not active\n", __func__); - } - - return status; - -} - #if (BLE_42_SCAN_EN == TRUE) /******************************************************************************* ** @@ -609,7 +416,9 @@ tBTM_STATUS BTM_BleScan(BOOLEAN start, UINT32 duration, btm_cb.ble_ctr_cb.p_scan_results_cb = p_results_cb; btm_cb.ble_ctr_cb.p_scan_cmpl_cb = p_cmpl_cb; +#if (BLE_ADV_REPORT_FLOW_CONTROL == TRUE) btm_cb.ble_ctr_cb.p_obs_discard_cb = p_discard_cb; +#endif // (BLE_ADV_REPORT_FLOW_CONTROL == TRUE) status = BTM_CMD_STARTED; /* scan is not started */ @@ -671,9 +480,9 @@ tBTM_STATUS BTM_BleScan(BOOLEAN start, UINT32 duration, tBTM_STATUS BTM_BleBroadcast(BOOLEAN start, tBTM_START_STOP_ADV_CMPL_CBACK *p_stop_adv_cback) { tBTM_STATUS status = BTM_NO_RESOURCES; - tBTM_LE_RANDOM_CB *p_addr_cb = &btm_cb.ble_ctr_cb.addr_mgnt_cb; + // tBTM_LE_RANDOM_CB *p_addr_cb = &btm_cb.ble_ctr_cb.addr_mgnt_cb; tBTM_BLE_INQ_CB *p_cb = &btm_cb.ble_ctr_cb.inq_var; - UINT8 evt_type = p_cb->scan_rsp ? BTM_BLE_DISCOVER_EVT : BTM_BLE_NON_CONNECT_EVT; + //UINT8 evt_type = p_cb->scan_rsp ? BTM_BLE_DISCOVER_EVT : BTM_BLE_NON_CONNECT_EVT; if (!controller_get_interface()->supports_ble()) { return BTM_ILLEGAL_VALUE; @@ -686,6 +495,8 @@ tBTM_STATUS BTM_BleBroadcast(BOOLEAN start, tBTM_START_STOP_ADV_CMPL_CBACK *p_s #endif if (start) { +// "start" should not be true +#if (0) /* update adv params */ if (!btsnd_hcic_ble_write_adv_params ((UINT16)(p_cb->adv_interval_min ? p_cb->adv_interval_min : BTM_BLE_GAP_ADV_INT), @@ -705,6 +516,7 @@ tBTM_STATUS BTM_BleBroadcast(BOOLEAN start, tBTM_START_STOP_ADV_CMPL_CBACK *p_s } status = btm_ble_start_adv (); +#endif // } else { //save the stop adv callback to the BTM env. p_cb->p_stop_adv_cb = p_stop_adv_cback; @@ -716,138 +528,8 @@ tBTM_STATUS BTM_BleBroadcast(BOOLEAN start, tBTM_START_STOP_ADV_CMPL_CBACK *p_s return status; } #endif // #if (BLE_42_ADV_EN == TRUE) -#if BLE_VND_INCLUDED == TRUE -/******************************************************************************* -** -** Function btm_vsc_brcm_features_complete -** -** Description Command Complete callback for HCI_BLE_VENDOR_CAP_OCF -** -** Returns void -** -*******************************************************************************/ -static void btm_ble_vendor_capability_vsc_cmpl_cback (tBTM_VSC_CMPL *p_vcs_cplt_params) -{ - UINT8 status = 0xFF; - UINT8 *p; - - BTM_TRACE_DEBUG("%s", __func__); - - /* Check status of command complete event */ - if ((p_vcs_cplt_params->opcode == HCI_BLE_VENDOR_CAP_OCF) && - (p_vcs_cplt_params->param_len > 0)) { - p = p_vcs_cplt_params->p_param_buf; - STREAM_TO_UINT8(status, p); - } - - if (status == HCI_SUCCESS) { - STREAM_TO_UINT8(btm_cb.cmn_ble_vsc_cb.adv_inst_max, p); - STREAM_TO_UINT8(btm_cb.cmn_ble_vsc_cb.rpa_offloading, p); - STREAM_TO_UINT16(btm_cb.cmn_ble_vsc_cb.tot_scan_results_strg, p); - STREAM_TO_UINT8(btm_cb.cmn_ble_vsc_cb.max_irk_list_sz, p); - STREAM_TO_UINT8(btm_cb.cmn_ble_vsc_cb.filter_support, p); - STREAM_TO_UINT8(btm_cb.cmn_ble_vsc_cb.max_filter, p); - STREAM_TO_UINT8(btm_cb.cmn_ble_vsc_cb.energy_support, p); - - if (p_vcs_cplt_params->param_len > BTM_VSC_CHIP_CAPABILITY_RSP_LEN_L_RELEASE) { - STREAM_TO_UINT16(btm_cb.cmn_ble_vsc_cb.version_supported, p); - } else { - btm_cb.cmn_ble_vsc_cb.version_supported = BTM_VSC_CHIP_CAPABILITY_L_VERSION; - } - - if (btm_cb.cmn_ble_vsc_cb.version_supported >= BTM_VSC_CHIP_CAPABILITY_M_VERSION) { - STREAM_TO_UINT16(btm_cb.cmn_ble_vsc_cb.total_trackable_advertisers, p); - STREAM_TO_UINT16(btm_cb.cmn_ble_vsc_cb.extended_scan_support, p); - STREAM_TO_UINT16(btm_cb.cmn_ble_vsc_cb.debug_logging_supported, p); - } - btm_cb.cmn_ble_vsc_cb.values_read = TRUE; - } - - BTM_TRACE_DEBUG("%s: stat=%d, irk=%d, ADV ins:%d, rpa=%d, ener=%d, ext_scan=%d", - __func__, status, btm_cb.cmn_ble_vsc_cb.max_irk_list_sz, - btm_cb.cmn_ble_vsc_cb.adv_inst_max, btm_cb.cmn_ble_vsc_cb.rpa_offloading, - btm_cb.cmn_ble_vsc_cb.energy_support, btm_cb.cmn_ble_vsc_cb.extended_scan_support); -#if (BLE_HOST_BLE_MULTI_ADV_EN == TRUE) - if (BTM_BleMaxMultiAdvInstanceCount() > 0) { - btm_ble_multi_adv_init(); - } -#endif // #if (BLE_HOST_BLE_MULTI_ADV_EN == TRUE) - if (btm_cb.cmn_ble_vsc_cb.max_filter > 0) { - btm_ble_adv_filter_init(); - } - -#if (defined BLE_PRIVACY_SPT && BLE_PRIVACY_SPT == TRUE) - /* VS capability included and non-4.2 device */ - if (btm_cb.cmn_ble_vsc_cb.max_irk_list_sz > 0 && - controller_get_interface()->get_ble_resolving_list_max_size() == 0) { - btm_ble_resolving_list_init(btm_cb.cmn_ble_vsc_cb.max_irk_list_sz); - } -#endif - - if (btm_cb.cmn_ble_vsc_cb.tot_scan_results_strg > 0) { - btm_ble_batchscan_init(); - } - - if (p_ctrl_le_feature_rd_cmpl_cback != NULL) { - p_ctrl_le_feature_rd_cmpl_cback(status); - } -} -#endif - -/******************************************************************************* -** -** Function BTM_BleGetVendorCapabilities -** -** Description This function reads local LE features -** -** Parameters p_cmn_vsc_cb : Locala LE capability structure -** -** Returns void -** -*******************************************************************************/ -extern void BTM_BleGetVendorCapabilities(tBTM_BLE_VSC_CB *p_cmn_vsc_cb) -{ - BTM_TRACE_DEBUG("BTM_BleGetVendorCapabilities"); - - if (NULL != p_cmn_vsc_cb) { - *p_cmn_vsc_cb = btm_cb.cmn_ble_vsc_cb; - } -} - -/****************************************************************************** -** -** Function BTM_BleReadControllerFeatures -** -** Description Reads BLE specific controller features -** -** Parameters: tBTM_BLE_CTRL_FEATURES_CBACK : Callback to notify when features are read -** -** Returns void -** -*******************************************************************************/ -extern void BTM_BleReadControllerFeatures(tBTM_BLE_CTRL_FEATURES_CBACK *p_vsc_cback) -{ - if (TRUE == btm_cb.cmn_ble_vsc_cb.values_read) { - return; - } - -#if BLE_VND_INCLUDED == TRUE - BTM_TRACE_DEBUG("BTM_BleReadControllerFeatures"); - - p_ctrl_le_feature_rd_cmpl_cback = p_vsc_cback; - if ( BTM_VendorSpecificCommand (HCI_BLE_VENDOR_CAP_OCF, - 0, - NULL, - btm_ble_vendor_capability_vsc_cmpl_cback) - != BTM_CMD_STARTED) { - BTM_TRACE_ERROR("LE Get_Vendor Capabilities Command Failed."); - } -#else - UNUSED(p_vsc_cback); -#endif - return ; -} +#if (BLE_VENDOR_HCI_EN == TRUE) void BTM_VendorHciEchoCmdCallback(tBTM_VSC_CMPL *p1) { #if (!CONFIG_BT_STACK_NO_LOG) @@ -880,6 +562,7 @@ void BTM_VendorHciEchoCmdTest(uint8_t echo) &echo, BTM_VendorHciEchoCmdCallback); } +#endif // (BLE_VENDOR_HCI_EN == TRUE) /******************************************************************************* ** @@ -949,12 +632,6 @@ BOOLEAN BTM_BleConfigPrivacy(BOOLEAN privacy_mode, tBTM_SET_LOCAL_PRIVACY_CBACK btm_gen_resolvable_private_addr((void *)btm_gen_resolve_paddr_low); #endif -#if (BLE_HOST_BLE_MULTI_ADV_EN == TRUE) - if (BTM_BleMaxMultiAdvInstanceCount() > 0) { - btm_ble_multi_adv_enb_privacy(privacy_mode); - } -#endif // #if (BLE_HOST_BLE_MULTI_ADV_EN == TRUE) - /* 4.2 controller only allow privacy 1.2 or mixed mode, resolvable private address in controller */ if (controller_get_interface()->supports_ble_privacy()) { #if (defined(GAP_INCLUDED) && GAP_INCLUDED == TRUE && GATTS_INCLUDED == TRUE) @@ -1224,24 +901,8 @@ void BTM_BleConfigConnParams(uint16_t int_min, uint16_t int_max, uint16_t latenc #endif } -#if (BLE_HOST_BLE_MULTI_ADV_EN == TRUE) -/******************************************************************************* -** -** Function BTM_BleMaxMultiAdvInstanceCount -** -** Description Returns max number of multi adv instances supported by controller -** -** Returns Max multi adv instance count -** -*******************************************************************************/ -extern UINT8 BTM_BleMaxMultiAdvInstanceCount(void) -{ - return btm_cb.cmn_ble_vsc_cb.adv_inst_max < BTM_BLE_MULTI_ADV_MAX ? - btm_cb.cmn_ble_vsc_cb.adv_inst_max : BTM_BLE_MULTI_ADV_MAX; -} -#endif // #if (BLE_HOST_BLE_MULTI_ADV_EN == TRUE) - #if BLE_PRIVACY_SPT == TRUE +#if (BLE_42_SCAN_EN == TRUE) /******************************************************************************* ** ** Function btm_ble_resolve_random_addr_on_adv @@ -1282,6 +943,7 @@ static void btm_ble_resolve_random_addr_on_adv(void *p_rec, void *p) return; } +#endif // #if (BLE_42_SCAN_EN == TRUE) #endif /******************************************************************************* @@ -1302,6 +964,7 @@ BOOLEAN BTM_BleLocalPrivacyEnabled(void) #endif } +#if (BLE_GATT_BGCONN == TRUE) /******************************************************************************* ** ** Function BTM_BleSetBgConnType @@ -1360,7 +1023,9 @@ BOOLEAN BTM_BleSetBgConnType(tBTM_BLE_CONN_TYPE bg_conn_type, } return started; } +#endif // (BLE_GATT_BGCONN == TRUE) +#if (GATT_BG_CONN_DEV == TRUE) /******************************************************************************* ** ** Function BTM_BleClearBgConnDev @@ -1378,10 +1043,9 @@ void BTM_BleClearBgConnDev(void) { btm_ble_start_auto_conn(FALSE); btm_ble_clear_white_list(NULL); -#if (tGATT_BG_CONN_DEV == TRUE) gatt_reset_bgdev_list(); -#endif // #if (tGATT_BG_CONN_DEV == TRUE) } +#endif // #if (GATT_BG_CONN_DEV == TRUE) /******************************************************************************* ** @@ -1563,6 +1227,7 @@ tBTM_STATUS BTM_BleSetAdvParamsAll(UINT16 adv_int_min, UINT16 adv_int_max, UINT8 btm_ble_stop_adv(); osi_mutex_lock(&adv_param_lock, OSI_MUTEX_MAX_TIMEOUT); +#if (BLE_TOPOLOGY_CHECK == TRUE) if(adv_type == BTM_BLE_CONNECT_DIR_EVT){ btm_ble_set_topology_mask(BTM_BLE_STATE_HI_DUTY_DIR_ADV_BIT); }else if(adv_type == BTM_BLE_CONNECT_LO_DUTY_DIR_EVT){ @@ -1570,7 +1235,7 @@ tBTM_STATUS BTM_BleSetAdvParamsAll(UINT16 adv_int_min, UINT16 adv_int_max, UINT8 }else if(adv_type == BTM_BLE_NON_CONNECT_EVT){ btm_ble_set_topology_mask(BTM_BLE_STATE_NON_CONN_ADV_BIT); } - +#endif // (BLE_TOPOLOGY_CHECK == TRUE) p_cb->adv_interval_min = adv_int_min; p_cb->adv_interval_max = adv_int_max; p_cb->adv_chnl_map = chnl_map; @@ -1620,99 +1285,6 @@ tBTM_STATUS BTM_BleStartAdv(void) return status; } #endif // #if (BLE_42_ADV_EN == TRUE) -/******************************************************************************* -** -** Function BTM_BleReadAdvParams -** -** Description This function is called to set advertising parameters. -** -** Parameters adv_int_min: minimum advertising interval -** adv_int_max: maximum advertising interval -** p_dir_bda: connectable direct initiator's LE device address -** chnl_map: advertising channel map. -** -** Returns void -** -*******************************************************************************/ -void BTM_BleReadAdvParams (UINT16 *adv_int_min, UINT16 *adv_int_max, - tBLE_BD_ADDR *p_dir_bda, tBTM_BLE_ADV_CHNL_MAP *p_chnl_map) -{ - tBTM_BLE_INQ_CB *p_cb = &btm_cb.ble_ctr_cb.inq_var; - - BTM_TRACE_EVENT ("BTM_BleReadAdvParams "); - if (!controller_get_interface()->supports_ble()) { - return ; - } - - *adv_int_min = p_cb->adv_interval_min; - *adv_int_max = p_cb->adv_interval_max; - *p_chnl_map = p_cb->adv_chnl_map; - - if (p_dir_bda != NULL) { - memcpy(p_dir_bda, &p_cb->direct_bda, sizeof(tBLE_BD_ADDR)); - } -} - -#if (BLE_HOST_BLE_SCAN_PARAM_UNUSED == TRUE) -/******************************************************************************* -** -** Function BTM_BleSetScanParams -** -** Description This function is called to set scan parameters. -** -** Parameters client_if - Client IF -** scan_interval - Scan interval -** scan_window - Scan window -** scan_mode - Scan mode -** scan_setup_status_cback - Scan param setup status callback -** -** Returns void -** -*******************************************************************************/ -void BTM_BleSetScanParams(tGATT_IF client_if, UINT32 scan_interval, UINT32 scan_window, - tBLE_SCAN_MODE scan_mode, - tBLE_SCAN_PARAM_SETUP_CBACK scan_setup_status_cback) -{ - tBTM_BLE_INQ_CB *p_cb = &btm_cb.ble_ctr_cb.inq_var; - UINT32 max_scan_interval; - UINT32 max_scan_window; - - BTM_TRACE_EVENT ("%s\n", __func__); - if (!controller_get_interface()->supports_ble()) { - return; - } - - /* If not supporting extended scan support, use the older range for checking */ - if (btm_cb.cmn_ble_vsc_cb.extended_scan_support == 0) { - max_scan_interval = BTM_BLE_SCAN_INT_MAX; - max_scan_window = BTM_BLE_SCAN_WIN_MAX; - } else { - /* If supporting extended scan support, use the new extended range for checking */ - max_scan_interval = BTM_BLE_EXT_SCAN_INT_MAX; - max_scan_window = BTM_BLE_EXT_SCAN_WIN_MAX; - } - - if (BTM_BLE_ISVALID_PARAM(scan_interval, BTM_BLE_SCAN_INT_MIN, max_scan_interval) && - BTM_BLE_ISVALID_PARAM(scan_window, BTM_BLE_SCAN_WIN_MIN, max_scan_window) && - (scan_mode == BTM_BLE_SCAN_MODE_ACTI || scan_mode == BTM_BLE_SCAN_MODE_PASS)) { - p_cb->scan_type = scan_mode; - p_cb->scan_interval = scan_interval; - p_cb->scan_window = scan_window; - - if (scan_setup_status_cback != NULL) { - scan_setup_status_cback(client_if, BTM_SUCCESS); - } - } else { - if (scan_setup_status_cback != NULL) { - scan_setup_status_cback(client_if, BTM_ILLEGAL_VALUE); - } - - BTM_TRACE_ERROR("Illegal params: scan_interval = %d scan_window = %d\n", - scan_interval, scan_window); - } - -} -#endif // #if (BLE_HOST_BLE_SCAN_PARAM_UNUSED == TRUE) #if (BLE_42_SCAN_EN == TRUE) tBTM_STATUS BTM_BleSetScanFilterParams(tGATT_IF client_if, UINT32 scan_interval, UINT32 scan_window, @@ -1731,15 +1303,10 @@ tBTM_STATUS BTM_BleSetScanFilterParams(tGATT_IF client_if, UINT32 scan_interval, if (BTM_BleUpdateOwnType(&addr_type_own, NULL) != 0) { return BTM_ILLEGAL_VALUE; } - /* If not supporting extended scan support, use the older range for checking */ - if (btm_cb.cmn_ble_vsc_cb.extended_scan_support == 0) { - max_scan_interval = BTM_BLE_SCAN_INT_MAX; - max_scan_window = BTM_BLE_SCAN_WIN_MAX; - } else { - /* If supporting extended scan support, use the new extended range for checking */ - max_scan_interval = BTM_BLE_EXT_SCAN_INT_MAX; - max_scan_window = BTM_BLE_EXT_SCAN_WIN_MAX; - } + + max_scan_interval = BTM_BLE_SCAN_INT_MAX; + max_scan_window = BTM_BLE_SCAN_WIN_MAX; + osi_mutex_lock(&scan_param_lock, OSI_MUTEX_MAX_TIMEOUT); @@ -1849,6 +1416,7 @@ tBTM_STATUS BTM_BleWriteScanRspRaw(UINT8 *p_raw_scan_rsp, UINT32 raw_scan_rsp_le } #endif // #if (BLE_42_ADV_EN == TRUE) +#if ((BLE_42_SCAN_EN == TRUE) || (BLE_50_EXTEND_SCAN_EN == TRUE)) /******************************************************************************* ** ** Function BTM_UpdateBleDuplicateExceptionalList @@ -1913,6 +1481,7 @@ tBTM_STATUS BTM_UpdateBleDuplicateExceptionalList(uint8_t subcode, uint32_t type return status; } +#endif // ((BLE_42_SCAN_EN == TRUE) || (BLE_50_EXTEND_SCAN_EN == TRUE)) #if (BLE_42_ADV_EN == TRUE) /******************************************************************************* @@ -2786,82 +2355,6 @@ tBTM_STATUS btm_ble_set_connectability(UINT16 combined_mode) return status; } - -/******************************************************************************* -** -** Function btm_ble_start_inquiry -** -** Description This function is called to start BLE inquiry procedure. -** If the duration is zero, the periodic inquiry mode is cancelled. -** -** Parameters: mode - GENERAL or LIMITED inquiry -** p_inq_params - pointer to the BLE inquiry parameter. -** p_results_cb - callback returning pointer to results (tBTM_INQ_RESULTS) -** p_cmpl_cb - callback indicating the end of an inquiry -** -** -** -** Returns BTM_CMD_STARTED if successfully started -** BTM_NO_RESOURCES if could not allocate a message buffer -** BTM_BUSY - if an inquiry is already active -** -*******************************************************************************/ -tBTM_STATUS btm_ble_start_inquiry (UINT8 mode, UINT8 duration) -{ - tBTM_STATUS status = BTM_CMD_STARTED; - tBTM_BLE_CB *p_ble_cb = &btm_cb.ble_ctr_cb; - tBTM_INQUIRY_VAR_ST *p_inq = &btm_cb.btm_inq_vars; - - BTM_TRACE_DEBUG("btm_ble_start_inquiry: mode = %02x inq_active = 0x%02x", mode, btm_cb.btm_inq_vars.inq_active); - - /* if selective connection is active, or inquiry is already active, reject it */ - if (BTM_BLE_IS_INQ_ACTIVE(p_ble_cb->scan_activity) || - BTM_BLE_IS_SEL_CONN_ACTIVE (p_ble_cb->scan_activity)) { - BTM_TRACE_ERROR("LE Inquiry is active, can not start inquiry"); - return (BTM_BUSY); - } - - if (!BTM_BLE_IS_SCAN_ACTIVE(p_ble_cb->scan_activity)) { - btsnd_hcic_ble_set_scan_params(BTM_BLE_SCAN_MODE_ACTI, - BTM_BLE_LOW_LATENCY_SCAN_INT, - BTM_BLE_LOW_LATENCY_SCAN_WIN, - btm_cb.ble_ctr_cb.addr_mgnt_cb.own_addr_type, - SP_ADV_ALL); -#if (defined BLE_PRIVACY_SPT && BLE_PRIVACY_SPT == TRUE) - /* enable IRK list */ - //btm_ble_enable_resolving_list_for_platform(BTM_BLE_RL_SCAN); -#endif -#if (BLE_42_SCAN_EN == TRUE) - status = btm_ble_start_scan(); -#endif // #if (BLE_42_SCAN_EN == TRUE) - } else if ((p_ble_cb->inq_var.scan_interval != BTM_BLE_LOW_LATENCY_SCAN_INT) || - (p_ble_cb->inq_var.scan_window != BTM_BLE_LOW_LATENCY_SCAN_WIN)) { - BTM_TRACE_DEBUG("%s, restart LE scan with low latency scan params", __FUNCTION__); - btsnd_hcic_ble_set_scan_enable(BTM_BLE_SCAN_DISABLE, BTM_BLE_DUPLICATE_ENABLE); - btsnd_hcic_ble_set_scan_params(BTM_BLE_SCAN_MODE_ACTI, - BTM_BLE_LOW_LATENCY_SCAN_INT, - BTM_BLE_LOW_LATENCY_SCAN_WIN, - btm_cb.ble_ctr_cb.addr_mgnt_cb.own_addr_type, - SP_ADV_ALL); - btsnd_hcic_ble_set_scan_enable(BTM_BLE_SCAN_ENABLE, BTM_BLE_DUPLICATE_DISABLE); - } - - if (status == BTM_CMD_STARTED) { - p_inq->inq_active |= mode; - p_ble_cb->scan_activity |= mode; - - BTM_TRACE_DEBUG("btm_ble_start_inquiry inq_active = 0x%02x", p_inq->inq_active); - - if (duration != 0) { - /* start inquiry timer */ - btu_start_timer (&p_ble_cb->inq_var.inq_timer_ent, BTU_TTYPE_BLE_INQUIRY, duration); - } - } - - return status; - -} - /******************************************************************************* ** ** Function btm_ble_read_remote_name_cmpl @@ -3505,6 +2998,7 @@ void btm_clear_all_pending_le_entry(void) } } +#if (BLE_GATT_BGCONN == TRUE) /******************************************************************************* ** ** Function btm_send_sel_conn_callback @@ -3548,6 +3042,7 @@ void btm_send_sel_conn_callback(BD_ADDR remote_bda, UINT8 evt_type, UINT8 *p_dat btm_ble_initiate_select_conn(remote_bda); } } +#endif // #if (BLE_GATT_BGCONN == TRUE) #if (BLE_42_SCAN_EN == TRUE) static void btm_adv_pkt_handler(void *arg) @@ -3592,7 +3087,6 @@ static void btm_adv_pkt_handler(void *arg) UNUSED(hci_evt_code); UNUSED(hci_evt_len); } -#endif // #if (BLE_42_SCAN_EN == TRUE) /******************************************************************************* ** @@ -3687,9 +3181,6 @@ static void btm_ble_process_last_adv_pkt(void) { UINT8 result = 0; UINT8 null_bda[6] = {0}; - tBTM_INQUIRY_VAR_ST *p_inq = &btm_cb.btm_inq_vars; - tBTM_INQ_RESULTS_CB *p_inq_results_cb = p_inq->p_inq_results_cb; - tBTM_INQ_RESULTS_CB *p_obs_results_cb = btm_cb.ble_ctr_cb.p_obs_results_cb; tBTM_INQ_RESULTS_CB *p_scan_results_cb = btm_cb.ble_ctr_cb.p_scan_results_cb; tBTM_BLE_INQ_CB *p_le_inq_cb = &btm_cb.ble_ctr_cb.inq_var; tINQ_DB_ENT *p_i = btm_inq_db_find (p_le_inq_cb->adv_addr); @@ -3708,24 +3199,13 @@ static void btm_ble_process_last_adv_pkt(void) __func__); return; } +#if (BLE_GATT_BGCONN == TRUE) /* background connection in selective connection mode */ if (btm_cb.ble_ctr_cb.bg_conn_type == BTM_BLE_CONN_SELECTIVE) { //do nothing - } else { - if (p_inq_results_cb && (result & BTM_BLE_INQ_RESULT)) { - (p_inq_results_cb)((tBTM_INQ_RESULTS *) &p_i->inq_info.results, p_le_inq_cb->adv_data_cache); - p_le_inq_cb->adv_len = 0; - memset(p_le_inq_cb->adv_addr, 0, BD_ADDR_LEN); - p_i->inq_info.results.adv_data_len = 0; - p_i->inq_info.results.scan_rsp_len = 0; - } - if (p_obs_results_cb && (result & BTM_BLE_OBS_RESULT)) { - (p_obs_results_cb)((tBTM_INQ_RESULTS *) &p_i->inq_info.results, p_le_inq_cb->adv_data_cache); - p_le_inq_cb->adv_len = 0; - memset(p_le_inq_cb->adv_addr, 0, BD_ADDR_LEN); - p_i->inq_info.results.adv_data_len = 0; - p_i->inq_info.results.scan_rsp_len = 0; - } + } else +#endif // (BLE_GATT_BGCONN == TRUE) + { if (p_scan_results_cb && (result & BTM_BLE_DISCO_RESULT)) { (p_scan_results_cb)((tBTM_INQ_RESULTS *) &p_i->inq_info.results, p_le_inq_cb->adv_data_cache); p_le_inq_cb->adv_len = 0; @@ -3753,8 +3233,6 @@ static void btm_ble_process_adv_pkt_cont(BD_ADDR bda, UINT8 addr_type, UINT8 evt tINQ_DB_ENT *p_i; tBTM_INQUIRY_VAR_ST *p_inq = &btm_cb.btm_inq_vars; - tBTM_INQ_RESULTS_CB *p_inq_results_cb = p_inq->p_inq_results_cb; - tBTM_INQ_RESULTS_CB *p_obs_results_cb = btm_cb.ble_ctr_cb.p_obs_results_cb; tBTM_INQ_RESULTS_CB *p_scan_results_cb = btm_cb.ble_ctr_cb.p_scan_results_cb; tBTM_BLE_INQ_CB *p_le_inq_cb = &btm_cb.ble_ctr_cb.inq_var; BOOLEAN update = TRUE; @@ -3831,19 +3309,11 @@ static void btm_ble_process_adv_pkt_cont(BD_ADDR bda, UINT8 addr_type, UINT8 evt /* assume a DUMO device, BR/EDR inquiry is always active */ ((p_i->inq_info.results.device_type & BT_DEVICE_TYPE_BLE) == BT_DEVICE_TYPE_BLE && p_i->scan_rsp)) { - BTM_TRACE_WARNING("INQ RES: Extra Response Received...cancelling inquiry.."); - - /* if is non-periodic inquiry active, cancel now */ - if ((p_inq->inq_active & BTM_BR_INQ_ACTIVE_MASK) != 0 && - (p_inq->inq_active & BTM_PERIODIC_INQUIRY_ACTIVE) == 0) { - btsnd_hcic_inq_cancel(); - } - - btm_ble_stop_inquiry(); btm_acl_update_busy_level (BTM_BLI_INQ_DONE_EVT); } } +#if (BLE_GATT_BGCONN == TRUE) /* background connection in selective connection mode */ if (btm_cb.ble_ctr_cb.bg_conn_type == BTM_BLE_CONN_SELECTIVE) { if (result & BTM_BLE_SEL_CONN_RESULT) { @@ -3851,21 +3321,9 @@ static void btm_ble_process_adv_pkt_cont(BD_ADDR bda, UINT8 addr_type, UINT8 evt } else { BTM_TRACE_DEBUG("None LE device, can not initiate selective connection\n"); } - } else { - if (p_inq_results_cb && (result & BTM_BLE_INQ_RESULT)) { - (p_inq_results_cb)((tBTM_INQ_RESULTS *) &p_i->inq_info.results, p_le_inq_cb->adv_data_cache); - p_le_inq_cb->adv_len = 0; - memset(p_le_inq_cb->adv_addr, 0, BD_ADDR_LEN); - p_i->inq_info.results.adv_data_len = 0; - p_i->inq_info.results.scan_rsp_len = 0; - } - if (p_obs_results_cb && (result & BTM_BLE_OBS_RESULT)) { - (p_obs_results_cb)((tBTM_INQ_RESULTS *) &p_i->inq_info.results, p_le_inq_cb->adv_data_cache); - p_le_inq_cb->adv_len = 0; - memset(p_le_inq_cb->adv_addr, 0, BD_ADDR_LEN); - p_i->inq_info.results.adv_data_len = 0; - p_i->inq_info.results.scan_rsp_len = 0; - } + } else +#endif // (BLE_GATT_BGCONN == TRUE) + { if (p_scan_results_cb && (result & BTM_BLE_DISCO_RESULT)) { (p_scan_results_cb)((tBTM_INQ_RESULTS *) &p_i->inq_info.results, p_le_inq_cb->adv_data_cache); p_le_inq_cb->adv_len = 0; @@ -3895,7 +3353,7 @@ void btm_ble_process_direct_adv_pkt(UINT8 *p) // TODO } -#if (BLE_42_SCAN_EN == TRUE) + /******************************************************************************* ** ** Function btm_ble_start_scan @@ -3924,11 +3382,13 @@ tBTM_STATUS btm_ble_start_scan(void) status = BTM_NO_RESOURCES; } btm_cb.ble_ctr_cb.inq_var.state |= BTM_BLE_SCANNING; +#if (BLE_TOPOLOGY_CHECK == TRUE) if (p_inq->scan_type == BTM_BLE_SCAN_MODE_ACTI) { btm_ble_set_topology_mask(BTM_BLE_STATE_ACTIVE_SCAN_BIT); } else { btm_ble_set_topology_mask(BTM_BLE_STATE_PASSIVE_SCAN_BIT); } +#endif // (BLE_TOPOLOGY_CHECK == TRUE) } osi_mutex_unlock(&scan_enable_lock); return status; @@ -3959,73 +3419,6 @@ void btm_ble_stop_scan(void) btm_cb.ble_ctr_cb.wl_state &= ~BTM_BLE_WL_SCAN; } -/******************************************************************************* -** -** Function btm_ble_stop_inquiry -** -** Description Stop the BLE Inquiry. -** -** Returns void -** -*******************************************************************************/ -void btm_ble_stop_inquiry(void) -{ - tBTM_INQUIRY_VAR_ST *p_inq = &btm_cb.btm_inq_vars; - tBTM_BLE_CB *p_ble_cb = &btm_cb.ble_ctr_cb; - - btu_stop_timer (&p_ble_cb->inq_var.inq_timer_ent); - - p_ble_cb->scan_activity &= ~BTM_BLE_INQUIRY_MASK; - - /* If no more scan activity, stop LE scan now */ - if (!BTM_BLE_IS_SCAN_ACTIVE(p_ble_cb->scan_activity)) { - btm_ble_stop_scan(); - } else if ((p_ble_cb->inq_var.scan_interval != BTM_BLE_LOW_LATENCY_SCAN_INT) || - (p_ble_cb->inq_var.scan_window != BTM_BLE_LOW_LATENCY_SCAN_WIN)) { - BTM_TRACE_DEBUG("%s: setting default params for ongoing observe", __FUNCTION__); -#if (BLE_42_SCAN_EN == TRUE) - btm_ble_stop_scan(); - btm_ble_start_scan(); -#endif // #if (BLE_42_SCAN_EN == TRUE) - } - - /* If we have a callback registered for inquiry complete, call it */ - BTM_TRACE_DEBUG ("BTM Inq Compl Callback: status 0x%02x, num results %d", - p_inq->inq_cmpl_info.status, p_inq->inq_cmpl_info.num_resp); - - btm_process_inq_complete(HCI_SUCCESS, (UINT8)(p_inq->inqparms.mode & BTM_BLE_INQUIRY_MASK)); -} - -/******************************************************************************* -** -** Function btm_ble_stop_observe -** -** Description Stop the BLE Observe. -** -** Returns void -** -*******************************************************************************/ -static void btm_ble_stop_observe(void) -{ - tBTM_BLE_CB *p_ble_cb = & btm_cb.ble_ctr_cb; - tBTM_CMPL_CB *p_obs_cb = p_ble_cb->p_obs_cmpl_cb; - - btu_stop_timer (&p_ble_cb->obs_timer_ent); - - p_ble_cb->scan_activity &= ~BTM_LE_OBSERVE_ACTIVE; - - p_ble_cb->p_obs_results_cb = NULL; - p_ble_cb->p_obs_cmpl_cb = NULL; - - if (!BTM_BLE_IS_SCAN_ACTIVE(p_ble_cb->scan_activity)) { - btm_ble_stop_scan(); - } - - if (p_obs_cb) { - (p_obs_cb)((tBTM_INQUIRY_CMPL *) &btm_cb.btm_inq_vars.inq_cmpl_info); - } -} - /******************************************************************************* ** ** Function btm_ble_stop_observe @@ -4055,9 +3448,11 @@ static void btm_ble_stop_discover(void) if(btsnd_hcic_ble_set_scan_enable (BTM_BLE_SCAN_DISABLE, BTM_BLE_DUPLICATE_ENABLE)) { osi_sem_take(&scan_enable_sem, OSI_SEM_MAX_TIMEOUT); } +#if (BLE_TOPOLOGY_CHECK == TRUE) /* reset status */ btm_ble_clear_topology_mask(BTM_BLE_STATE_ACTIVE_SCAN_BIT); btm_ble_clear_topology_mask(BTM_BLE_STATE_PASSIVE_SCAN_BIT); +#endif // (BLE_TOPOLOGY_CHECK == TRUE) } if (p_scan_cb) { @@ -4078,6 +3473,7 @@ static void btm_ble_stop_discover(void) *******************************************************************************/ typedef BOOLEAN (BTM_TOPOLOGY_FUNC_PTR)(tBTM_BLE_STATE_MASK); #if (BLE_42_ADV_EN == TRUE) +#if (BLE_TOPOLOGY_CHECK == TRUE) static BOOLEAN btm_ble_adv_states_operation(BTM_TOPOLOGY_FUNC_PTR *p_handler, UINT8 adv_evt) { BOOLEAN rt = FALSE; @@ -4109,6 +3505,7 @@ static BOOLEAN btm_ble_adv_states_operation(BTM_TOPOLOGY_FUNC_PTR *p_handler, UI return rt; } +#endif // (BLE_TOPOLOGY_CHECK == TRUE) /******************************************************************************* ** @@ -4125,10 +3522,11 @@ tBTM_STATUS btm_ble_start_adv(void) tBTM_STATUS rt = BTM_NO_RESOURCES; BTM_TRACE_EVENT ("btm_ble_start_adv\n"); - +#if (BLE_TOPOLOGY_CHECK == TRUE) if (!btm_ble_adv_states_operation (btm_ble_topology_check, p_cb->evt_type)) { return BTM_WRONG_MODE; } +#endif // (BLE_TOPOLOGY_CHECK == TRUE) osi_mutex_lock(&adv_enable_lock, OSI_MUTEX_MAX_TIMEOUT); @@ -4152,7 +3550,9 @@ tBTM_STATUS btm_ble_start_adv(void) UINT8 adv_mode = p_cb->adv_mode; p_cb->adv_mode = BTM_BLE_ADV_ENABLE; p_cb->state |= BTM_BLE_ADVERTISING; +#if (BLE_TOPOLOGY_CHECK == TRUE) btm_ble_adv_states_operation(btm_ble_set_topology_mask, p_cb->evt_type); +#endif // (BLE_TOPOLOGY_CHECK == TRUE) if (btsnd_hcic_ble_set_adv_enable (BTM_BLE_ADV_ENABLE)) { osi_sem_take(&adv_enable_sem, OSI_SEM_MAX_TIMEOUT); rt = adv_enable_status; @@ -4161,7 +3561,9 @@ tBTM_STATUS btm_ble_start_adv(void) p_cb->adv_mode = BTM_BLE_ADV_DISABLE; p_cb->state = temp_state; p_cb->adv_mode = adv_mode; +#if (BLE_TOPOLOGY_CHECK == TRUE) btm_ble_adv_states_operation(btm_ble_clear_topology_mask, p_cb->evt_type); +#endif // (BLE_TOPOLOGY_CHECK == TRUE) btm_cb.ble_ctr_cb.wl_state &= ~BTM_BLE_WL_ADV; } @@ -4191,16 +3593,18 @@ tBTM_STATUS btm_ble_stop_adv(void) BOOLEAN temp_fast_adv_on = p_cb->fast_adv_on; tBTM_BLE_GAP_STATE temp_state = p_cb->state; tBTM_BLE_WL_STATE temp_wl_state = btm_cb.ble_ctr_cb.wl_state; +#if (BLE_TOPOLOGY_CHECK == TRUE) tBTM_BLE_STATE_MASK temp_mask = btm_ble_get_topology_mask (); +#endif // (BLE_TOPOLOGY_CHECK == TRUE) p_cb->fast_adv_on = FALSE; p_cb->adv_mode = BTM_BLE_ADV_DISABLE; p_cb->state &= ~BTM_BLE_ADVERTISING; btm_cb.ble_ctr_cb.wl_state &= ~BTM_BLE_WL_ADV; - +#if (BLE_TOPOLOGY_CHECK == TRUE) /* clear all adv states */ btm_ble_clear_topology_mask (BTM_BLE_STATE_ALL_ADV_MASK); - +#endif // (BLE_TOPOLOGY_CHECK == TRUE) if (btsnd_hcic_ble_set_adv_enable (BTM_BLE_ADV_DISABLE)) { osi_sem_take(&adv_enable_sem, OSI_SEM_MAX_TIMEOUT); rt = adv_enable_status; @@ -4210,8 +3614,9 @@ tBTM_STATUS btm_ble_stop_adv(void) p_cb->adv_mode = temp_adv_mode; p_cb->state = temp_state; btm_cb.ble_ctr_cb.wl_state = temp_wl_state; +#if (BLE_TOPOLOGY_CHECK == TRUE) btm_ble_set_topology_mask (temp_mask); - +#endif // (BLE_TOPOLOGY_CHECK == TRUE) rt = BTM_NO_RESOURCES; } if(adv_enable_status != HCI_SUCCESS) { @@ -4341,13 +3746,11 @@ void btm_ble_timeout(TIMER_LIST_ENT *p_tle) switch (p_tle->event) { case BTU_TTYPE_BLE_OBSERVE: - btm_ble_stop_observe(); break; case BTU_TTYPE_BLE_SCAN: btm_ble_stop_discover(); break; case BTU_TTYPE_BLE_INQUIRY: - btm_ble_stop_inquiry(); break; case BTU_TTYPE_BLE_GAP_LIM_DISC: @@ -4363,12 +3766,6 @@ void btm_ble_timeout(TIMER_LIST_ENT *p_tle) /* refresh the random addr */ btm_gen_resolvable_private_addr((void *)btm_gen_resolve_paddr_low); #endif - } else { -#if (BLE_HOST_BLE_MULTI_ADV_EN == TRUE) - if (BTM_BleMaxMultiAdvInstanceCount() > 0) { - btm_ble_multi_adv_configure_rpa((tBTM_BLE_MULTI_ADV_INST *)p_tle->param); - } -#endif // #if (BLE_HOST_BLE_MULTI_ADV_EN == TRUE) } } break; @@ -4477,6 +3874,7 @@ void btm_ble_dir_adv_tout(void) btm_cb.ble_ctr_cb.inq_var.directed_conn = FALSE; } +#if (BLE_TOPOLOGY_CHECK == TRUE) /******************************************************************************* ** ** Function btm_ble_set_topology_mask @@ -4558,6 +3956,7 @@ void btm_ble_update_link_topology_mask(UINT8 link_role, BOOLEAN increase) btm_ble_clear_topology_mask(BTM_BLE_STATE_ALL_ADV_MASK); } } +#endif // (BLE_TOPOLOGY_CHECK == TRUE) /******************************************************************************* ** @@ -4576,8 +3975,10 @@ BOOLEAN btm_ble_update_mode_operation(UINT8 link_role, BD_ADDR bd_addr, UINT8 st btm_cb.ble_ctr_cb.inq_var.adv_mode = BTM_BLE_ADV_DISABLE; /* make device fall back into undirected adv mode by default */ btm_cb.ble_ctr_cb.inq_var.directed_conn = BTM_BLE_CONNECT_EVT; +#if (BLE_TOPOLOGY_CHECK == TRUE) /* clear all adv states */ btm_ble_clear_topology_mask (BTM_BLE_STATE_ALL_ADV_MASK); +#endif // (BLE_TOPOLOGY_CHECK == TRUE) } if (btm_cb.ble_ctr_cb.inq_var.connectable_mode == BTM_BLE_CONNECTABLE) { @@ -4590,9 +3991,9 @@ BOOLEAN btm_ble_update_mode_operation(UINT8 link_role, BD_ADDR bd_addr, UINT8 st now in order */ if (btm_ble_get_conn_st() == BLE_CONN_IDLE && status != HCI_ERR_HOST_REJECT_RESOURCES && !btm_send_pending_direct_conn()) { -#if (tGATT_BG_CONN_DEV == TRUE) +#if (GATT_BG_CONN_DEV == TRUE) bg_con = btm_ble_resume_bg_conn(); -#endif // #if (tGATT_BG_CONN_DEV == TRUE) +#endif // #if (GATT_BG_CONN_DEV == TRUE) } return bg_con; @@ -4633,24 +4034,15 @@ void btm_ble_init (void) { BTM_TRACE_DEBUG("%s", __func__); -#if BTM_DYNAMIC_MEMORY == TRUE - cmn_ble_gap_vsc_cb_ptr = (tBTM_BLE_VSC_CB *)osi_malloc(sizeof(tBTM_BLE_VSC_CB)); - if (cmn_ble_gap_vsc_cb_ptr == NULL) { - BTM_TRACE_ERROR("%s malloc failed", __func__); - return; - } -#endif - tBTM_BLE_CB *p_cb = &btm_cb.ble_ctr_cb; - - btu_free_timer(&p_cb->obs_timer_ent); +#if (BLE_42_SCAN_EN == TRUE) btu_free_timer(&p_cb->scan_timer_ent); +#endif // (BLE_42_SCAN_EN == TRUE) btu_free_timer(&p_cb->inq_var.fast_adv_timer); memset(p_cb, 0, sizeof(tBTM_BLE_CB)); - memset(&(btm_cb.cmn_ble_vsc_cb), 0 , sizeof(tBTM_BLE_VSC_CB)); - btm_cb.cmn_ble_vsc_cb.values_read = FALSE; +#if (BLE_TOPOLOGY_CHECK == TRUE) p_cb->cur_states = 0; - +#endif // (BLE_TOPOLOGY_CHECK == TRUE) p_cb->conn_pending_q = fixed_queue_new(QUEUE_SIZE_MAX); p_cb->inq_var.adv_mode = BTM_BLE_ADV_DISABLE; @@ -4673,11 +4065,7 @@ void btm_ble_init (void) assert(p_cb->adv_rpt_ready != NULL); osi_event_bind(p_cb->adv_rpt_ready, btu_get_current_thread(), 0); #endif // #if (BLE_42_SCAN_EN == TRUE) -#if BLE_VND_INCLUDED == FALSE -#if BLE_ANDROID_CONTROLLER_SCAN_FILTER == TRUE - btm_ble_adv_filter_init(); -#endif // #if BLE_ANDROID_CONTROLLER_SCAN_FILTER == TRUE -#endif + #if (BLE_VENDOR_HCI_EN == TRUE) BTM_RegisterForVSEvents(btm_ble_vs_evt_callback, TRUE); #endif // #if (BLE_VENDOR_HCI_EN == TRUE) @@ -4706,10 +4094,6 @@ void btm_ble_free (void) osi_event_delete(p_cb->adv_rpt_ready); p_cb->adv_rpt_ready = NULL; #endif // #if (BLE_42_SCAN_EN == TRUE) -#if BTM_DYNAMIC_MEMORY == TRUE - osi_free(cmn_ble_gap_vsc_cb_ptr); - cmn_ble_gap_vsc_cb_ptr = NULL; -#endif } static bool enable_topology_check_flag = true; @@ -4718,6 +4102,8 @@ void esp_qa_enable_topology_check(bool enable) // This is a workaround: If the topology check is disabled, the 'Supported States' will not be checked. enable_topology_check_flag = enable; } + +#if (BLE_TOPOLOGY_CHECK == TRUE) /******************************************************************************* ** ** Function btm_ble_topology_check @@ -4782,7 +4168,7 @@ BOOLEAN btm_ble_topology_check(tBTM_BLE_STATE_MASK request_state_mask) } return rt; } - +#endif // (BLE_TOPOLOGY_CHECK == TRUE) /******************************************************************************* ** ** Function BTM_Ble_Authorization diff --git a/components/bt/host/bluedroid/stack/btm/btm_ble_multi_adv.c b/components/bt/host/bluedroid/stack/btm/btm_ble_multi_adv.c index 31d60546f12..75b5e9e1bc5 100644 --- a/components/bt/host/bluedroid/stack/btm/btm_ble_multi_adv.c +++ b/components/bt/host/bluedroid/stack/btm/btm_ble_multi_adv.c @@ -23,848 +23,5 @@ #if (BLE_INCLUDED == TRUE) -#if (BLE_HOST_BLE_MULTI_ADV_EN == TRUE) -#include "stack/bt_types.h" -#include "stack/hcimsgs.h" -#include "stack/btu.h" -#include "btm_int.h" -//#include "bt_utils.h" -#include "stack/hcidefs.h" -#include "stack/btm_ble_api.h" -/************************************************************************************ -** Constants & Macros -************************************************************************************/ -/* length of each multi adv sub command */ -#define BTM_BLE_MULTI_ADV_ENB_LEN 3 -#define BTM_BLE_MULTI_ADV_SET_PARAM_LEN 24 -#define BTM_BLE_MULTI_ADV_WRITE_DATA_LEN (BTM_BLE_AD_DATA_LEN + 3) -#define BTM_BLE_MULTI_ADV_SET_RANDOM_ADDR_LEN 8 - -#define BTM_BLE_MULTI_ADV_CB_EVT_MASK 0xF0 -#define BTM_BLE_MULTI_ADV_SUBCODE_MASK 0x0F - -/************************************************************************************ -** Static variables -************************************************************************************/ -#if BTM_DYNAMIC_MEMORY == FALSE -tBTM_BLE_MULTI_ADV_CB btm_multi_adv_cb; -tBTM_BLE_MULTI_ADV_INST_IDX_Q btm_multi_adv_idx_q; -#else -tBTM_BLE_MULTI_ADV_CB *btm_multi_adv_cb_ptr; -tBTM_BLE_MULTI_ADV_INST_IDX_Q *btm_multi_adv_idx_q_ptr; -#define btm_multi_adv_cb (*btm_multi_adv_cb_ptr) -#define btm_multi_adv_idx_q (*btm_multi_adv_idx_q_ptr) -#endif - -/************************************************************************************ -** Externs -************************************************************************************/ -extern void btm_ble_update_dmt_flag_bits(UINT8 *flag_value, - const UINT16 connect_mode, const UINT16 disc_mode); - -/******************************************************************************* -** -** Function btm_ble_multi_adv_enq_op_q -** -** Description enqueue a multi adv operation in q to check command complete -** status. -** -** Returns void -** -*******************************************************************************/ -void btm_ble_multi_adv_enq_op_q(UINT8 opcode, UINT8 inst_id, UINT8 cb_evt) -{ - tBTM_BLE_MULTI_ADV_OPQ *p_op_q = &btm_multi_adv_cb.op_q; - - p_op_q->p_inst_id[p_op_q->next_idx] = inst_id; - - p_op_q->p_sub_code[p_op_q->next_idx] = (opcode | (cb_evt << 4)); - - p_op_q->next_idx = (p_op_q->next_idx + 1) % BTM_BleMaxMultiAdvInstanceCount(); -} - -/******************************************************************************* -** -** Function btm_ble_multi_adv_deq_op_q -** -** Description dequeue a multi adv operation from q when command complete -** is received. -** -** Returns void -** -*******************************************************************************/ -void btm_ble_multi_adv_deq_op_q(UINT8 *p_opcode, UINT8 *p_inst_id, UINT8 *p_cb_evt) -{ - tBTM_BLE_MULTI_ADV_OPQ *p_op_q = &btm_multi_adv_cb.op_q; - - *p_inst_id = p_op_q->p_inst_id[p_op_q->pending_idx] & 0x7F; - *p_cb_evt = (p_op_q->p_sub_code[p_op_q->pending_idx] >> 4); - *p_opcode = (p_op_q->p_sub_code[p_op_q->pending_idx] & BTM_BLE_MULTI_ADV_SUBCODE_MASK); - - p_op_q->pending_idx = (p_op_q->pending_idx + 1) % BTM_BleMaxMultiAdvInstanceCount(); -} - -/******************************************************************************* -** -** Function btm_ble_multi_adv_vsc_cmpl_cback -** -** Description Multi adv VSC complete callback -** -** Parameters -** -** Returns void -** -*******************************************************************************/ -void btm_ble_multi_adv_vsc_cmpl_cback (tBTM_VSC_CMPL *p_params) -{ - UINT8 status, subcode; - UINT8 *p = p_params->p_param_buf, inst_id; - UINT16 len = p_params->param_len; - tBTM_BLE_MULTI_ADV_INST *p_inst ; - UINT8 cb_evt = 0, opcode; - - if (len < 2) { - BTM_TRACE_ERROR("wrong length for btm_ble_multi_adv_vsc_cmpl_cback"); - return; - } - - STREAM_TO_UINT8(status, p); - STREAM_TO_UINT8(subcode, p); - - btm_ble_multi_adv_deq_op_q(&opcode, &inst_id, &cb_evt); - - BTM_TRACE_DEBUG("op_code = %02x inst_id = %d cb_evt = %02x", opcode, inst_id, cb_evt); - - if (opcode != subcode || inst_id == 0) { - BTM_TRACE_ERROR("get unexpected VSC cmpl, expect: %d get: %d", subcode, opcode); - return; - } - - p_inst = &btm_multi_adv_cb.p_adv_inst[inst_id - 1]; - - switch (subcode) { - case BTM_BLE_MULTI_ADV_ENB: { - BTM_TRACE_DEBUG("BTM_BLE_MULTI_ADV_ENB status = %d", status); - - /* Mark as not in use here, if instance cannot be enabled */ - if (HCI_SUCCESS != status && BTM_BLE_MULTI_ADV_ENB_EVT == cb_evt) { - btm_multi_adv_cb.p_adv_inst[inst_id - 1].in_use = FALSE; - } - break; - } - - case BTM_BLE_MULTI_ADV_SET_PARAM: { - BTM_TRACE_DEBUG("BTM_BLE_MULTI_ADV_SET_PARAM status = %d", status); - break; - } - - case BTM_BLE_MULTI_ADV_WRITE_ADV_DATA: { - BTM_TRACE_DEBUG("BTM_BLE_MULTI_ADV_WRITE_ADV_DATA status = %d", status); - break; - } - - case BTM_BLE_MULTI_ADV_WRITE_SCAN_RSP_DATA: { - BTM_TRACE_DEBUG("BTM_BLE_MULTI_ADV_WRITE_SCAN_RSP_DATA status = %d", status); - break; - } - - case BTM_BLE_MULTI_ADV_SET_RANDOM_ADDR: { - BTM_TRACE_DEBUG("BTM_BLE_MULTI_ADV_SET_RANDOM_ADDR status = %d", status); - break; - } - - default: - break; - } - - if (cb_evt != 0 && p_inst->p_cback != NULL) { - (p_inst->p_cback)(cb_evt, inst_id, p_inst->p_ref, status); - } - return; -} - -/******************************************************************************* -** -** Function btm_ble_enable_multi_adv -** -** Description This function enable the customer specific feature in controller -** -** Parameters enable: enable or disable -** inst_id: adv instance ID, can not be 0 -** -** Returns status -** -*******************************************************************************/ -tBTM_STATUS btm_ble_enable_multi_adv (BOOLEAN enable, UINT8 inst_id, UINT8 cb_evt) -{ - UINT8 param[BTM_BLE_MULTI_ADV_ENB_LEN], *pp; - UINT8 enb = enable ? 1 : 0; - tBTM_STATUS rt; - - pp = param; - memset(param, 0, BTM_BLE_MULTI_ADV_ENB_LEN); - - UINT8_TO_STREAM (pp, BTM_BLE_MULTI_ADV_ENB); - UINT8_TO_STREAM (pp, enb); - UINT8_TO_STREAM (pp, inst_id); - - BTM_TRACE_EVENT (" btm_ble_enable_multi_adv: enb %d, Inst ID %d", enb, inst_id); - - if ((rt = BTM_VendorSpecificCommand (HCI_BLE_MULTI_ADV_OCF, - BTM_BLE_MULTI_ADV_ENB_LEN, - param, - btm_ble_multi_adv_vsc_cmpl_cback)) - == BTM_CMD_STARTED) { - btm_ble_multi_adv_enq_op_q(BTM_BLE_MULTI_ADV_ENB, inst_id, cb_evt); - } - return rt; -} - -/******************************************************************************* -** -** Function btm_ble_multi_adv_set_params -** -** Description This function enable the customer specific feature in controller -** -** Parameters advertise parameters used for this instance. -** -** Returns status -** -*******************************************************************************/ -tBTM_STATUS btm_ble_multi_adv_set_params (tBTM_BLE_MULTI_ADV_INST *p_inst, - tBTM_BLE_ADV_PARAMS *p_params, - UINT8 cb_evt) -{ - UINT8 param[BTM_BLE_MULTI_ADV_SET_PARAM_LEN], *pp; - tBTM_STATUS rt; - BD_ADDR dummy = {0, 0, 0, 0, 0, 0}; - - pp = param; - memset(param, 0, BTM_BLE_MULTI_ADV_SET_PARAM_LEN); - - UINT8_TO_STREAM(pp, BTM_BLE_MULTI_ADV_SET_PARAM); - - UINT16_TO_STREAM (pp, p_params->adv_int_min); - UINT16_TO_STREAM (pp, p_params->adv_int_max); - UINT8_TO_STREAM (pp, p_params->adv_type); - -#if (defined BLE_PRIVACY_SPT && BLE_PRIVACY_SPT == TRUE) - if (btm_cb.ble_ctr_cb.privacy_mode != BTM_PRIVACY_NONE) { - UINT8_TO_STREAM (pp, BLE_ADDR_RANDOM); - BDADDR_TO_STREAM (pp, p_inst->rpa); - } else -#endif - { - UINT8_TO_STREAM (pp, BLE_ADDR_PUBLIC); - BDADDR_TO_STREAM (pp, controller_get_interface()->get_address()->address); - } - - BTM_TRACE_EVENT (" btm_ble_multi_adv_set_params,Min %d, Max %d,adv_type %d", - p_params->adv_int_min, p_params->adv_int_max, p_params->adv_type); - - UINT8_TO_STREAM (pp, 0); - BDADDR_TO_STREAM (pp, dummy); - - if (p_params->channel_map == 0 || p_params->channel_map > BTM_BLE_DEFAULT_ADV_CHNL_MAP) { - p_params->channel_map = BTM_BLE_DEFAULT_ADV_CHNL_MAP; - } - UINT8_TO_STREAM (pp, p_params->channel_map); - - if (p_params->adv_filter_policy >= AP_SCAN_CONN_POLICY_MAX) { - p_params->adv_filter_policy = AP_SCAN_CONN_ALL; - } - UINT8_TO_STREAM (pp, p_params->adv_filter_policy); - - UINT8_TO_STREAM (pp, p_inst->inst_id); - - if (p_params->tx_power > BTM_BLE_ADV_TX_POWER_MAX) { - p_params->tx_power = BTM_BLE_ADV_TX_POWER_MAX; - } - UINT8_TO_STREAM (pp, btm_ble_map_adv_tx_power(p_params->tx_power)); - - BTM_TRACE_EVENT("set_params:Chnl Map %d,adv_fltr policy %d,ID:%d, TX Power%d", - p_params->channel_map, p_params->adv_filter_policy, p_inst->inst_id, p_params->tx_power); - - if ((rt = BTM_VendorSpecificCommand (HCI_BLE_MULTI_ADV_OCF, - BTM_BLE_MULTI_ADV_SET_PARAM_LEN, - param, - btm_ble_multi_adv_vsc_cmpl_cback)) - == BTM_CMD_STARTED) { - p_inst->adv_evt = p_params->adv_type; - -#if (defined BLE_PRIVACY_SPT && BLE_PRIVACY_SPT == TRUE) - if (btm_cb.ble_ctr_cb.privacy_mode != BTM_PRIVACY_NONE) { - /* start timer */ - p_inst->raddr_timer_ent.param = (TIMER_PARAM_TYPE) p_inst; - btu_start_timer_oneshot(&p_inst->raddr_timer_ent, BTU_TTYPE_BLE_RANDOM_ADDR, - BTM_BLE_PRIVATE_ADDR_INT); - } -#endif - btm_ble_multi_adv_enq_op_q(BTM_BLE_MULTI_ADV_SET_PARAM, p_inst->inst_id, cb_evt); - } - return rt; -} - -/******************************************************************************* -** -** Function btm_ble_multi_adv_write_rpa -** -** Description This function write the random address for the adv instance into -** controller -** -** Parameters -** -** Returns status -** -*******************************************************************************/ -tBTM_STATUS btm_ble_multi_adv_write_rpa (tBTM_BLE_MULTI_ADV_INST *p_inst, BD_ADDR random_addr) -{ - UINT8 param[BTM_BLE_MULTI_ADV_SET_RANDOM_ADDR_LEN], *pp = param; - tBTM_STATUS rt; - - BTM_TRACE_EVENT ("%s-BD_ADDR:%02x-%02x-%02x-%02x-%02x-%02x,inst_id:%d", - __FUNCTION__, random_addr[5], random_addr[4], random_addr[3], random_addr[2], - random_addr[1], random_addr[0], p_inst->inst_id); - - memset(param, 0, BTM_BLE_MULTI_ADV_SET_RANDOM_ADDR_LEN); - - UINT8_TO_STREAM (pp, BTM_BLE_MULTI_ADV_SET_RANDOM_ADDR); - BDADDR_TO_STREAM(pp, random_addr); - UINT8_TO_STREAM(pp, p_inst->inst_id); - - if ((rt = BTM_VendorSpecificCommand (HCI_BLE_MULTI_ADV_OCF, - BTM_BLE_MULTI_ADV_SET_RANDOM_ADDR_LEN, - param, - btm_ble_multi_adv_vsc_cmpl_cback)) == BTM_CMD_STARTED) { - /* start a periodical timer to refresh random addr */ - btu_stop_timer_oneshot(&p_inst->raddr_timer_ent); - p_inst->raddr_timer_ent.param = (TIMER_PARAM_TYPE) p_inst; - btu_start_timer_oneshot(&p_inst->raddr_timer_ent, BTU_TTYPE_BLE_RANDOM_ADDR, - BTM_BLE_PRIVATE_ADDR_INT); - - btm_ble_multi_adv_enq_op_q(BTM_BLE_MULTI_ADV_SET_RANDOM_ADDR, p_inst->inst_id, 0); - } - return rt; -} - -/******************************************************************************* -** -** Function btm_ble_multi_adv_gen_rpa_cmpl -** -** Description RPA generation completion callback for each adv instance. Will -** continue write the new RPA into controller. -** -** Returns none. -** -*******************************************************************************/ -void btm_ble_multi_adv_gen_rpa_cmpl(tBTM_RAND_ENC *p) -{ -#if (SMP_INCLUDED == TRUE) - tSMP_ENC output; - UINT8 index = 0; - tBTM_BLE_MULTI_ADV_INST *p_inst = NULL; - - /* Retrieve the index of adv instance from stored Q */ - if (btm_multi_adv_idx_q.front == -1) { - BTM_TRACE_ERROR(" %s can't locate advertise instance", __FUNCTION__); - return; - } else { - index = btm_multi_adv_idx_q.inst_index_queue[btm_multi_adv_idx_q.front]; - if (btm_multi_adv_idx_q.front == btm_multi_adv_idx_q.rear) { - btm_multi_adv_idx_q.front = -1; - btm_multi_adv_idx_q.rear = -1; - } else { - btm_multi_adv_idx_q.front = (btm_multi_adv_idx_q.front + 1) % BTM_BLE_MULTI_ADV_MAX; - } - } - - p_inst = &(btm_multi_adv_cb.p_adv_inst[index]); - - BTM_TRACE_EVENT ("btm_ble_multi_adv_gen_rpa_cmpl inst_id = %d", p_inst->inst_id); - if (p) { - p->param_buf[2] &= (~BLE_RESOLVE_ADDR_MASK); - p->param_buf[2] |= BLE_RESOLVE_ADDR_MSB; - - p_inst->rpa[2] = p->param_buf[0]; - p_inst->rpa[1] = p->param_buf[1]; - p_inst->rpa[0] = p->param_buf[2]; - - if (!SMP_Encrypt(btm_cb.devcb.id_keys.irk, BT_OCTET16_LEN, p->param_buf, 3, &output)) { - BTM_TRACE_DEBUG("generate random address failed"); - } else { - /* set hash to be LSB of rpAddress */ - p_inst->rpa[5] = output.param_buf[0]; - p_inst->rpa[4] = output.param_buf[1]; - p_inst->rpa[3] = output.param_buf[2]; - } - - if (p_inst->inst_id != BTM_BLE_MULTI_ADV_DEFAULT_STD && - p_inst->inst_id < BTM_BleMaxMultiAdvInstanceCount()) { - /* set it to controller */ - btm_ble_multi_adv_write_rpa(p_inst, p_inst->rpa); - } - } -#endif -} - -/******************************************************************************* -** -** Function btm_ble_multi_adv_configure_rpa -** -** Description This function set the random address for the adv instance -** -** Parameters advertise parameters used for this instance. -** -** Returns none -** -*******************************************************************************/ -void btm_ble_multi_adv_configure_rpa (tBTM_BLE_MULTI_ADV_INST *p_inst) -{ - if (btm_multi_adv_idx_q.front == (btm_multi_adv_idx_q.rear + 1) % BTM_BLE_MULTI_ADV_MAX) { - BTM_TRACE_ERROR("outstanding rand generation exceeded max allowed "); - return; - } else { - if (btm_multi_adv_idx_q.front == -1) { - btm_multi_adv_idx_q.front = 0; - btm_multi_adv_idx_q.rear = 0; - } else { - btm_multi_adv_idx_q.rear = (btm_multi_adv_idx_q.rear + 1) % BTM_BLE_MULTI_ADV_MAX; - } - btm_multi_adv_idx_q.inst_index_queue[btm_multi_adv_idx_q.rear] = p_inst->index; - } - btm_gen_resolvable_private_addr((void *)btm_ble_multi_adv_gen_rpa_cmpl); -} - -/******************************************************************************* -** -** Function btm_ble_multi_adv_reenable -** -** Description This function re-enable adv instance upon a connection establishment. -** -** Parameters advertise parameters used for this instance. -** -** Returns none. -** -*******************************************************************************/ -void btm_ble_multi_adv_reenable(UINT8 inst_id) -{ - tBTM_BLE_MULTI_ADV_INST *p_inst = &btm_multi_adv_cb.p_adv_inst[inst_id - 1]; - - if (TRUE == p_inst->in_use) { - if (p_inst->adv_evt != BTM_BLE_CONNECT_DIR_EVT) { - btm_ble_enable_multi_adv (TRUE, p_inst->inst_id, 0); - } else - /* mark directed adv as disabled if adv has been stopped */ - { - (p_inst->p_cback)(BTM_BLE_MULTI_ADV_DISABLE_EVT, p_inst->inst_id, p_inst->p_ref, 0); - p_inst->in_use = FALSE; - } - } -} - -/******************************************************************************* -** -** Function btm_ble_multi_adv_enb_privacy -** -** Description This function enable/disable privacy setting in multi adv -** -** Parameters enable: enable or disable the adv instance. -** -** Returns none. -** -*******************************************************************************/ -void btm_ble_multi_adv_enb_privacy(BOOLEAN enable) -{ - UINT8 i; - tBTM_BLE_MULTI_ADV_INST *p_inst = &btm_multi_adv_cb.p_adv_inst[0]; - - for (i = 0; i < BTM_BleMaxMultiAdvInstanceCount() - 1; i ++, p_inst++) { - p_inst->in_use = FALSE; - if (enable) { - btm_ble_multi_adv_configure_rpa (p_inst); - } else { - btu_stop_timer_oneshot(&p_inst->raddr_timer_ent); - } - } -} - -/******************************************************************************* -** -** Function BTM_BleEnableAdvInstance -** -** Description This function enable a Multi-ADV instance with the specified -** adv parameters -** -** Parameters p_params: pointer to the adv parameter structure, set as default -** adv parameter when the instance is enabled. -** p_cback: callback function for the adv instance. -** p_ref: reference data attach to the adv instance to be enabled. -** -** Returns status -** -*******************************************************************************/ -tBTM_STATUS BTM_BleEnableAdvInstance (tBTM_BLE_ADV_PARAMS *p_params, - tBTM_BLE_MULTI_ADV_CBACK *p_cback, void *p_ref) -{ - UINT8 i; - tBTM_STATUS rt = BTM_NO_RESOURCES; - tBTM_BLE_MULTI_ADV_INST *p_inst = &btm_multi_adv_cb.p_adv_inst[0]; - - BTM_TRACE_EVENT("BTM_BleEnableAdvInstance called"); - - if (0 == btm_cb.cmn_ble_vsc_cb.adv_inst_max) { - BTM_TRACE_ERROR("Controller does not support Multi ADV"); - return BTM_ERR_PROCESSING; - } - - if (NULL == p_inst) { - BTM_TRACE_ERROR("Invalid instance in BTM_BleEnableAdvInstance"); - return BTM_ERR_PROCESSING; - } - - for (i = 0; i < BTM_BleMaxMultiAdvInstanceCount() - 1; i ++, p_inst++) { - if (FALSE == p_inst->in_use) { - p_inst->in_use = TRUE; - /* configure adv parameter */ - if (p_params) { - rt = btm_ble_multi_adv_set_params(p_inst, p_params, 0); - } else { - rt = BTM_CMD_STARTED; - } - - /* enable adv */ - BTM_TRACE_EVENT("btm_ble_enable_multi_adv being called with inst_id:%d", - p_inst->inst_id); - - if (BTM_CMD_STARTED == rt) { - if ((rt = btm_ble_enable_multi_adv (TRUE, p_inst->inst_id, - BTM_BLE_MULTI_ADV_ENB_EVT)) == BTM_CMD_STARTED) { - p_inst->p_cback = p_cback; - p_inst->p_ref = p_ref; - } - } - - if (BTM_CMD_STARTED != rt) { - p_inst->in_use = FALSE; - BTM_TRACE_ERROR("BTM_BleEnableAdvInstance failed"); - } - break; - } - } - return rt; -} - -/******************************************************************************* -** -** Function BTM_BleUpdateAdvInstParam -** -** Description This function update a Multi-ADV instance with the specified -** adv parameters. -** -** Parameters inst_id: adv instance ID -** p_params: pointer to the adv parameter structure. -** -** Returns status -** -*******************************************************************************/ -tBTM_STATUS BTM_BleUpdateAdvInstParam (UINT8 inst_id, tBTM_BLE_ADV_PARAMS *p_params) -{ - tBTM_STATUS rt = BTM_ILLEGAL_VALUE; - tBTM_BLE_MULTI_ADV_INST *p_inst = &btm_multi_adv_cb.p_adv_inst[inst_id - 1]; - - BTM_TRACE_EVENT("BTM_BleUpdateAdvInstParam called with inst_id:%d", inst_id); - - if (0 == btm_cb.cmn_ble_vsc_cb.adv_inst_max) { - BTM_TRACE_ERROR("Controller does not support Multi ADV"); - return BTM_ERR_PROCESSING; - } - - if (inst_id < BTM_BleMaxMultiAdvInstanceCount() && - inst_id != BTM_BLE_MULTI_ADV_DEFAULT_STD && - p_params != NULL) { - if (FALSE == p_inst->in_use) { - BTM_TRACE_DEBUG("adv instance %d is not active", inst_id); - return BTM_WRONG_MODE; - } else { - btm_ble_enable_multi_adv(FALSE, inst_id, 0); - } - - if (BTM_CMD_STARTED == btm_ble_multi_adv_set_params(p_inst, p_params, 0)) { - rt = btm_ble_enable_multi_adv(TRUE, inst_id, BTM_BLE_MULTI_ADV_PARAM_EVT); - } - } - return rt; -} - -/******************************************************************************* -** -** Function BTM_BleCfgAdvInstData -** -** Description This function configure a Multi-ADV instance with the specified -** adv data or scan response data. -** -** Parameters inst_id: adv instance ID -** is_scan_rsp: is this scan response. if no, set as adv data. -** data_mask: adv data mask. -** p_data: pointer to the adv data structure. -** -** Returns status -** -*******************************************************************************/ -tBTM_STATUS BTM_BleCfgAdvInstData (UINT8 inst_id, BOOLEAN is_scan_rsp, - tBTM_BLE_AD_MASK data_mask, - tBTM_BLE_ADV_DATA *p_data) -{ - UINT8 param[BTM_BLE_MULTI_ADV_WRITE_DATA_LEN], *pp = param; - UINT8 sub_code = (is_scan_rsp) ? - BTM_BLE_MULTI_ADV_WRITE_SCAN_RSP_DATA : BTM_BLE_MULTI_ADV_WRITE_ADV_DATA; - UINT8 *p_len; - tBTM_STATUS rt; - UINT8 *pp_temp = (UINT8 *)(param + BTM_BLE_MULTI_ADV_WRITE_DATA_LEN - 1); - tBTM_BLE_VSC_CB cmn_ble_vsc_cb; - - BTM_BleGetVendorCapabilities(&cmn_ble_vsc_cb); - if (0 == cmn_ble_vsc_cb.adv_inst_max) { - BTM_TRACE_ERROR("Controller does not support Multi ADV"); - return BTM_ERR_PROCESSING; - } - - btm_ble_update_dmt_flag_bits(&p_data->flag, btm_cb.btm_inq_vars.connectable_mode, - btm_cb.btm_inq_vars.discoverable_mode); - - BTM_TRACE_EVENT("BTM_BleCfgAdvInstData called with inst_id:%d", inst_id); - if (inst_id > BTM_BLE_MULTI_ADV_MAX || inst_id == BTM_BLE_MULTI_ADV_DEFAULT_STD) { - return BTM_ILLEGAL_VALUE; - } - - memset(param, 0, BTM_BLE_MULTI_ADV_WRITE_DATA_LEN); - - UINT8_TO_STREAM(pp, sub_code); - p_len = pp ++; - btm_ble_build_adv_data(&data_mask, &pp, p_data); - *p_len = (UINT8)(pp - param - 2); - UINT8_TO_STREAM(pp_temp, inst_id); - - if ((rt = BTM_VendorSpecificCommand (HCI_BLE_MULTI_ADV_OCF, - (UINT8)BTM_BLE_MULTI_ADV_WRITE_DATA_LEN, - param, - btm_ble_multi_adv_vsc_cmpl_cback)) - == BTM_CMD_STARTED) { - btm_ble_multi_adv_enq_op_q(sub_code, inst_id, BTM_BLE_MULTI_ADV_DATA_EVT); - } - return rt; -} - -/******************************************************************************* -** -** Function BTM_BleDisableAdvInstance -** -** Description This function disables a Multi-ADV instance. -** -** Parameters inst_id: adv instance ID -** -** Returns status -** -*******************************************************************************/ -tBTM_STATUS BTM_BleDisableAdvInstance (UINT8 inst_id) -{ - tBTM_STATUS rt = BTM_ILLEGAL_VALUE; - tBTM_BLE_VSC_CB cmn_ble_vsc_cb; - - BTM_TRACE_EVENT("BTM_BleDisableAdvInstance with inst_id:%d", inst_id); - - BTM_BleGetVendorCapabilities(&cmn_ble_vsc_cb); - - if (0 == cmn_ble_vsc_cb.adv_inst_max) { - BTM_TRACE_ERROR("Controller does not support Multi ADV"); - return BTM_ERR_PROCESSING; - } - - if (inst_id < BTM_BleMaxMultiAdvInstanceCount() && - inst_id != BTM_BLE_MULTI_ADV_DEFAULT_STD) { - if ((rt = btm_ble_enable_multi_adv(FALSE, inst_id, BTM_BLE_MULTI_ADV_DISABLE_EVT)) - == BTM_CMD_STARTED) { - btm_ble_multi_adv_configure_rpa(&btm_multi_adv_cb.p_adv_inst[inst_id - 1]); - btu_stop_timer_oneshot(&btm_multi_adv_cb.p_adv_inst[inst_id - 1].raddr_timer_ent); - btm_multi_adv_cb.p_adv_inst[inst_id - 1].in_use = FALSE; - } - } - return rt; -} -/******************************************************************************* -** -** Function btm_ble_multi_adv_vse_cback -** -** Description VSE callback for multi adv events. -** -** Returns -** -*******************************************************************************/ -void btm_ble_multi_adv_vse_cback(UINT8 len, UINT8 *p) -{ - UINT8 sub_event; - UINT8 adv_inst; - UINT16 conn_handle; - tACL_CONN *p_acl_cb = NULL; - /* Check if this is a BLE RSSI vendor specific event */ - STREAM_TO_UINT8(sub_event, p); - len--; - - BTM_TRACE_EVENT("btm_ble_multi_adv_vse_cback called with event:%d", sub_event); - if ((sub_event == HCI_VSE_SUBCODE_BLE_MULTI_ADV_ST_CHG) && (len >= 4)) { - STREAM_TO_UINT8(adv_inst, p); - ++p; - STREAM_TO_UINT16(conn_handle, p); - - if ((p_acl_cb = btm_handle_to_acl(conn_handle)) != NULL) { -#if (defined BLE_PRIVACY_SPT && BLE_PRIVACY_SPT == TRUE) - if (btm_cb.ble_ctr_cb.privacy_mode != BTM_PRIVACY_NONE && - adv_inst <= BTM_BLE_MULTI_ADV_MAX && adv_inst != BTM_BLE_MULTI_ADV_DEFAULT_STD) { - memcpy(p_acl_cb->conn_addr, btm_multi_adv_cb.p_adv_inst[adv_inst - 1].rpa, - BD_ADDR_LEN); - } -#endif - } - - if (adv_inst < BTM_BleMaxMultiAdvInstanceCount() && - adv_inst != BTM_BLE_MULTI_ADV_DEFAULT_STD) { - BTM_TRACE_EVENT("btm_ble_multi_adv_reenable called"); - btm_ble_multi_adv_reenable(adv_inst); - } - /* re-enable connectibility */ - else if (adv_inst == BTM_BLE_MULTI_ADV_DEFAULT_STD) { - if (btm_cb.ble_ctr_cb.inq_var.connectable_mode == BTM_BLE_CONNECTABLE) { - btm_ble_set_connectability ( btm_cb.ble_ctr_cb.inq_var.connectable_mode ); - } - } - - } - -} -/******************************************************************************* -** -** Function btm_ble_multi_adv_init -** -** Description This function initialize the multi adv control block. -** -** Parameters None -** -** Returns void -** -*******************************************************************************/ -void btm_ble_multi_adv_init(void) -{ -#if BTM_DYNAMIC_MEMORY == TRUE - btm_multi_adv_cb_ptr = (tBTM_BLE_MULTI_ADV_CB *)osi_malloc(sizeof(tBTM_BLE_MULTI_ADV_CB)); - btm_multi_adv_idx_q_ptr = (tBTM_BLE_MULTI_ADV_INST_IDX_Q *)osi_malloc(sizeof(tBTM_BLE_MULTI_ADV_INST_IDX_Q)); - if (btm_multi_adv_cb_ptr == NULL || btm_multi_adv_idx_q_ptr == NULL) { - BTM_TRACE_ERROR("%s malloc failed", __func__); - return; - } -#endif - - UINT8 i = 0; - memset(&btm_multi_adv_cb, 0, sizeof(tBTM_BLE_MULTI_ADV_CB)); - memset (&btm_multi_adv_idx_q, 0, sizeof (tBTM_BLE_MULTI_ADV_INST_IDX_Q)); - btm_multi_adv_idx_q.front = -1; - btm_multi_adv_idx_q.rear = -1; - - if (btm_cb.cmn_ble_vsc_cb.adv_inst_max > 0) { - btm_multi_adv_cb.p_adv_inst = osi_malloc( sizeof(tBTM_BLE_MULTI_ADV_INST) * - (btm_cb.cmn_ble_vsc_cb.adv_inst_max)); - memset(btm_multi_adv_cb.p_adv_inst, 0, sizeof(tBTM_BLE_MULTI_ADV_INST) * - (btm_cb.cmn_ble_vsc_cb.adv_inst_max)); - - btm_multi_adv_cb.op_q.p_sub_code = osi_malloc( sizeof(UINT8) * - (btm_cb.cmn_ble_vsc_cb.adv_inst_max)); - memset(btm_multi_adv_cb.op_q.p_sub_code, 0, - sizeof(UINT8) * (btm_cb.cmn_ble_vsc_cb.adv_inst_max)); - - btm_multi_adv_cb.op_q.p_inst_id = osi_malloc( sizeof(UINT8) * - (btm_cb.cmn_ble_vsc_cb.adv_inst_max)); - memset(btm_multi_adv_cb.op_q.p_inst_id, 0, - sizeof(UINT8) * (btm_cb.cmn_ble_vsc_cb.adv_inst_max)); - } - - /* Initialize adv instance indices and IDs. */ - for (i = 0; i < btm_cb.cmn_ble_vsc_cb.adv_inst_max; i++) { - btm_multi_adv_cb.p_adv_inst[i].index = i; - btm_multi_adv_cb.p_adv_inst[i].inst_id = i + 1; - } - - BTM_RegisterForVSEvents(btm_ble_multi_adv_vse_cback, TRUE); -} - -/******************************************************************************* -** -** Function btm_ble_multi_adv_cleanup -** -** Description This function cleans up multi adv control block. -** -** Parameters -** Returns void -** -*******************************************************************************/ -void btm_ble_multi_adv_cleanup(void) -{ -#if BTM_DYNAMIC_MEMORY == TRUE - if (btm_multi_adv_cb_ptr == NULL) - { - BTM_TRACE_WARNING("%s memory has been freed", __func__); - return; - } -#endif - if (btm_multi_adv_cb.p_adv_inst) { - osi_free(btm_multi_adv_cb.p_adv_inst); - btm_multi_adv_cb.p_adv_inst = NULL; - } - - if (btm_multi_adv_cb.op_q.p_sub_code) { - osi_free(btm_multi_adv_cb.op_q.p_sub_code); - btm_multi_adv_cb.op_q.p_sub_code = NULL; - } - - if (btm_multi_adv_cb.op_q.p_inst_id) { - osi_free(btm_multi_adv_cb.op_q.p_inst_id); - btm_multi_adv_cb.op_q.p_inst_id = NULL; - } - -#if BTM_DYNAMIC_MEMORY == TRUE - if(btm_multi_adv_cb_ptr) { - osi_free(btm_multi_adv_cb_ptr); - btm_multi_adv_cb_ptr = NULL; - } - if(btm_multi_adv_idx_q_ptr) { - osi_free(btm_multi_adv_idx_q_ptr); - btm_multi_adv_idx_q_ptr = NULL; - } -#endif -} - -/******************************************************************************* -** -** Function btm_ble_multi_adv_get_ref -** -** Description This function obtains the reference pointer for the instance ID provided -** -** Parameters inst_id - Instance ID -** -** Returns void* -** -*******************************************************************************/ -void *btm_ble_multi_adv_get_ref(UINT8 inst_id) -{ - tBTM_BLE_MULTI_ADV_INST *p_inst = NULL; - - if (inst_id < BTM_BleMaxMultiAdvInstanceCount()) { - p_inst = &btm_multi_adv_cb.p_adv_inst[inst_id - 1]; - if (NULL != p_inst) { - return p_inst->p_ref; - } - } - - return NULL; -} -#endif // #if (BLE_HOST_BLE_MULTI_ADV_EN == TRUE) #endif diff --git a/components/bt/host/bluedroid/stack/btm/btm_ble_privacy.c b/components/bt/host/bluedroid/stack/btm/btm_ble_privacy.c index ccc7f6e0b7c..633d15e2536 100644 --- a/components/bt/host/bluedroid/stack/btm/btm_ble_privacy.c +++ b/components/bt/host/bluedroid/stack/btm/btm_ble_privacy.c @@ -499,6 +499,7 @@ void btm_ble_set_privacy_mode_complete(UINT8 *p, UINT16 evt_len) } } +#if (0) /******************************************************************************* VSC that implement controller based privacy ********************************************************************************/ @@ -534,7 +535,7 @@ void btm_ble_resolving_list_vsc_op_cmpl (tBTM_VSC_CMPL *p_params) /* RPA offloading enable/disabled */ } } - +#endif /******************************************************************************* ** ** Function btm_ble_remove_resolving_list_entry @@ -569,6 +570,7 @@ tBTM_STATUS btm_ble_remove_resolving_list_entry(tBTM_SEC_DEV_REC *p_dev_rec) * send key to the controller, but to resolve the random address in host. */ #endif } else { +#if (0) UINT8 param[20] = {0}; UINT8 *p = param; @@ -580,6 +582,7 @@ tBTM_STATUS btm_ble_remove_resolving_list_entry(tBTM_SEC_DEV_REC *p_dev_rec) BTM_BLE_META_REMOVE_IRK_LEN, param, btm_ble_resolving_list_vsc_op_cmpl); +#endif } if (st == BTM_CMD_STARTED) { @@ -609,6 +612,7 @@ tBTM_STATUS btm_ble_clear_resolving_list(void) st = BTM_SUCCESS; } } else { +#if (0) UINT8 param[20] = {0}; UINT8 *p = param; @@ -617,6 +621,7 @@ tBTM_STATUS btm_ble_clear_resolving_list(void) BTM_BLE_META_CLEAR_IRK_LEN, param, btm_ble_resolving_list_vsc_op_cmpl); +#endif } return st; @@ -647,6 +652,7 @@ tBTM_STATUS btm_ble_read_resolving_list_entry(tBTM_SEC_DEV_REC *p_dev_rec) st = BTM_CMD_STARTED; } } else { +#if (0) UINT8 param[20] = {0}; UINT8 *p = param; @@ -657,6 +663,7 @@ tBTM_STATUS btm_ble_read_resolving_list_entry(tBTM_SEC_DEV_REC *p_dev_rec) BTM_BLE_META_READ_IRK_LEN, param, btm_ble_resolving_list_vsc_op_cmpl); +#endif } if (st == BTM_CMD_STARTED) { @@ -711,11 +718,11 @@ BOOLEAN btm_ble_suspend_resolving_list_activity(void) btm_ble_stop_scan(); p_ble_cb->suspended_rl_state |= BTM_BLE_RL_SCAN; } -#if (tGATT_BG_CONN_DEV == TRUE) +#if (GATT_BG_CONN_DEV == TRUE) if (btm_ble_suspend_bg_conn()) { p_ble_cb->suspended_rl_state |= BTM_BLE_RL_INIT; } -#endif // #if (tGATT_BG_CONN_DEV == TRUE) +#endif // #if (GATT_BG_CONN_DEV == TRUE) return TRUE; } @@ -743,14 +750,15 @@ void btm_ble_resume_resolving_list_activity(void) btm_ble_start_scan(); } #endif // #if (BLE_42_SCAN_EN == TRUE) -#if (tGATT_BG_CONN_DEV == TRUE) +#if (GATT_BG_CONN_DEV == TRUE) if (p_ble_cb->suspended_rl_state & BTM_BLE_RL_INIT) { btm_ble_resume_bg_conn(); } -#endif // #if (tGATT_BG_CONN_DEV == TRUE) +#endif // #if (GATT_BG_CONN_DEV == TRUE) p_ble_cb->suspended_rl_state = BTM_BLE_RL_IDLE; } +#if (0) /******************************************************************************* ** ** Function btm_ble_vendor_enable_irk_feature @@ -780,6 +788,7 @@ tBTM_STATUS btm_ble_vendor_enable_irk_feature(BOOLEAN enable) return st; } +#endif /******************************************************************************* ** @@ -797,7 +806,9 @@ BOOLEAN btm_ble_exe_disable_resolving_list(void) } if (!controller_get_interface()->supports_ble_privacy()) { +#if (0) btm_ble_vendor_enable_irk_feature(FALSE); +#endif } else { //btsnd_hcic_ble_set_addr_resolution_enable(FALSE); } @@ -821,7 +832,9 @@ void btm_ble_exe_enable_resolving_list(void) } if (!controller_get_interface()->supports_ble_privacy()) { +#if (0) btm_ble_vendor_enable_irk_feature(TRUE); +#endif } else { //btsnd_hcic_ble_set_addr_resolution_enable(TRUE); } @@ -930,6 +943,7 @@ BOOLEAN btm_ble_resolving_list_load_dev(tBTM_SEC_DEV_REC *p_dev_rec) #endif } else { +#if (0) UINT8 param[40] = {0}; UINT8 *p = param; @@ -945,6 +959,7 @@ BOOLEAN btm_ble_resolving_list_load_dev(tBTM_SEC_DEV_REC *p_dev_rec) == BTM_CMD_STARTED) { rt = TRUE; } +#endif } if (rt) { diff --git a/components/bt/host/bluedroid/stack/btm/btm_devctl.c b/components/bt/host/bluedroid/stack/btm/btm_devctl.c index 63c26e881e7..057eba2dbbc 100644 --- a/components/bt/host/bluedroid/stack/btm/btm_devctl.c +++ b/components/bt/host/bluedroid/stack/btm/btm_devctl.c @@ -88,18 +88,21 @@ void btm_dev_init (void) #endif btm_cb.devcb.reset_timer.param = (TIMER_PARAM_TYPE)TT_DEV_RESET; +#if (CLASSIC_BT_INCLUDED == TRUE) btm_cb.devcb.rln_timer.param = (TIMER_PARAM_TYPE)TT_DEV_RLN; +#endif // (CLASSIC_BT_INCLUDED == TRUE) btm_cb.btm_acl_pkt_types_supported = BTM_ACL_PKT_TYPES_MASK_DH1 + BTM_ACL_PKT_TYPES_MASK_DM1 + BTM_ACL_PKT_TYPES_MASK_DH3 + BTM_ACL_PKT_TYPES_MASK_DM3 + BTM_ACL_PKT_TYPES_MASK_DH5 + BTM_ACL_PKT_TYPES_MASK_DM5; - +#if (CLASSIC_BT_INCLUDED == TRUE) btm_cb.btm_sco_pkt_types_supported = BTM_SCO_PKT_TYPES_MASK_HV1 + BTM_SCO_PKT_TYPES_MASK_HV2 + BTM_SCO_PKT_TYPES_MASK_HV3 + BTM_SCO_PKT_TYPES_MASK_EV3 + BTM_SCO_PKT_TYPES_MASK_EV4 + BTM_SCO_PKT_TYPES_MASK_EV5; +#endif // #if (CLASSIC_BT_INCLUDED == TRUE) } @@ -121,6 +124,7 @@ static void btm_db_reset (void) btm_inq_db_reset(); +#if (CLASSIC_BT_INCLUDED == TRUE) if (btm_cb.devcb.p_rln_cmpl_cb) { p_cb = btm_cb.devcb.p_rln_cmpl_cb; btm_cb.devcb.p_rln_cmpl_cb = NULL; @@ -129,6 +133,7 @@ static void btm_db_reset (void) (*p_cb)((void *) NULL); } } +#endif // (CLASSIC_BT_INCLUDED == TRUE) if (btm_cb.devcb.p_rssi_cmpl_cb) { p_cb = btm_cb.devcb.p_rssi_cmpl_cb; @@ -169,17 +174,18 @@ static void reset_complete(void) #if (BLE_INCLUDED == TRUE) btm_cb.ble_ctr_cb.conn_state = BLE_CONN_IDLE; +#if (BLE_GATT_BGCONN == TRUE) btm_cb.ble_ctr_cb.bg_conn_type = BTM_BLE_CONN_NONE; btm_cb.ble_ctr_cb.p_select_cback = NULL; -#if (tGATT_BG_CONN_DEV == TRUE) +#endif // (BLE_GATT_BGCONN == TRUE) +#if (GATT_BG_CONN_DEV == TRUE) gatt_reset_bgdev_list(); -#endif // #if (tGATT_BG_CONN_DEV == TRUE) -#if (BLE_HOST_BLE_MULTI_ADV_EN == TRUE) - btm_ble_multi_adv_init(); -#endif // #if (BLE_HOST_BLE_MULTI_ADV_EN == TRUE) -#endif +#endif // #if (GATT_BG_CONN_DEV == TRUE) +#endif +#if (CLASSIC_BT_INCLUDED == TRUE) btm_pm_reset(); +#endif // #if (CLASSIC_BT_INCLUDED == TRUE) l2c_link_processs_num_bufs(controller->get_acl_buffer_count_classic()); #if BTM_SCO_HCI_INCLUDED == TRUE @@ -247,6 +253,7 @@ BOOLEAN BTM_IsDeviceUp (void) return controller_get_interface()->get_is_ready(); } +#if (CLASSIC_BT_INCLUDED == TRUE) /******************************************************************************* ** ** Function btm_dev_timeout @@ -270,6 +277,7 @@ void btm_dev_timeout (TIMER_LIST_ENT *p_tle) } } } +#endif // (CLASSIC_BT_INCLUDED == TRUE) /******************************************************************************* ** @@ -330,7 +338,7 @@ static void btm_decode_ext_features_page (UINT8 page_number, const BD_FEATURES p BTM_TRACE_DEBUG("Local supported ACL packet types: 0x%04x", btm_cb.btm_acl_pkt_types_supported); - +#if (CLASSIC_BT_INCLUDED == TRUE) /* Create (e)SCO supported packet types mask */ btm_cb.btm_sco_pkt_types_supported = 0; #if BTM_SCO_INCLUDED == TRUE @@ -411,9 +419,9 @@ static void btm_decode_ext_features_page (UINT8 page_number, const BD_FEATURES p } else { btm_cb.btm_def_link_policy &= ~HCI_ENABLE_PARK_MODE; } - +#endif // #if (CLASSIC_BT_INCLUDED == TRUE) btm_sec_dev_reset (); - +#if (CLASSIC_BT_INCLUDED == TRUE) if (HCI_LMP_INQ_RSSI_SUPPORTED(p_features)) { if (HCI_EXT_INQ_RSP_SUPPORTED(p_features)) { BTM_SetInquiryMode (BTM_INQ_RESULT_EXTENDED); @@ -421,7 +429,7 @@ static void btm_decode_ext_features_page (UINT8 page_number, const BD_FEATURES p BTM_SetInquiryMode (BTM_INQ_RESULT_WITH_RSSI); } } - +#endif // (CLASSIC_BT_INCLUDED == TRUE) #if L2CAP_NON_FLUSHABLE_PB_INCLUDED == TRUE if ( HCI_NON_FLUSHABLE_PB_SUPPORTED(p_features)) { l2cu_set_non_flushable_pbf(TRUE); @@ -552,7 +560,7 @@ tBTM_STATUS BTM_ReadLocalDeviceName (char **p_name, tBT_DEVICE_TYPE name_type) #endif } - +#if (CLASSIC_BT_INCLUDED == TRUE) /******************************************************************************* ** ** Function BTM_ReadLocalDeviceNameFromController @@ -610,7 +618,7 @@ void btm_read_local_name_complete (UINT8 *p, UINT16 evt_len) } } } - +#endif // (CLASSIC_BT_INCLUDED == TRUE) /******************************************************************************* ** ** Function BTM_SetDeviceClass @@ -764,6 +772,7 @@ void btm_vsc_complete (UINT8 *p, UINT16 opcode, UINT16 evt_len, tBTM_BLE_CB *ble_cb = &btm_cb.ble_ctr_cb; switch(opcode) { case HCI_VENDOR_BLE_UPDATE_DUPLICATE_EXCEPTIONAL_LIST: { +#if ((BLE_42_SCAN_EN == TRUE) || (BLE_50_EXTEND_SCAN_EN == TRUE)) uint8_t subcode, status; uint32_t length; STREAM_TO_UINT8(status, p); STREAM_TO_UINT8(subcode, p); @@ -772,6 +781,7 @@ void btm_vsc_complete (UINT8 *p, UINT16 opcode, UINT16 evt_len, (*ble_cb->update_exceptional_list_cmp_cb)(status, subcode, length, p); } break; +#endif // ((BLE_42_SCAN_EN == TRUE) || (BLE_50_EXTEND_SCAN_EN == TRUE)) } case HCI_VENDOR_BLE_CLEAR_ADV: { uint8_t status; @@ -1090,65 +1100,6 @@ tBTM_STATUS BTM_WriteVoiceSettings(UINT16 settings) return (BTM_NO_RESOURCES); } -#if (BLE_HOST_ENABLE_TEST_MODE_EN == TRUE) -/******************************************************************************* -** -** Function BTM_EnableTestMode -** -** Description Send HCI the enable device under test command. -** -** Note: Controller can only be taken out of this mode by -** resetting the controller. -** -** Returns -** BTM_SUCCESS Command sent. -** BTM_NO_RESOURCES If out of resources to send the command. -** -** -*******************************************************************************/ -tBTM_STATUS BTM_EnableTestMode(void) -{ - UINT8 cond; - - BTM_TRACE_EVENT ("BTM: BTM_EnableTestMode"); - - /* set auto accept connection as this is needed during test mode */ - /* Allocate a buffer to hold HCI command */ - cond = HCI_DO_AUTO_ACCEPT_CONNECT; - if (!btsnd_hcic_set_event_filter(HCI_FILTER_CONNECTION_SETUP, - HCI_FILTER_COND_NEW_DEVICE, - &cond, sizeof(cond))) { - return (BTM_NO_RESOURCES); - } - - /* put device to connectable mode */ - if (BTM_SetConnectability(BTM_CONNECTABLE, BTM_DEFAULT_CONN_WINDOW, - BTM_DEFAULT_CONN_INTERVAL) != BTM_SUCCESS) { - return BTM_NO_RESOURCES; - } - - /* put device to discoverable mode */ - if (BTM_SetDiscoverability(BTM_GENERAL_DISCOVERABLE, BTM_DEFAULT_DISC_WINDOW, - BTM_DEFAULT_DISC_INTERVAL) != BTM_SUCCESS) { - return BTM_NO_RESOURCES; - } - - /* mask off all of event from controller */ - hci_layer_get_interface()->transmit_command( - hci_packet_factory_get_interface()->make_set_event_mask((const bt_event_mask_t *)("\x00\x00\x00\x00\x00\x00\x00\x00")), - NULL, - NULL, - NULL); - - /* Send the HCI command */ - if (btsnd_hcic_enable_test_mode ()) { - return (BTM_SUCCESS); - } else { - return (BTM_NO_RESOURCES); - } -} -#endif // #if (BLE_HOST_ENABLE_TEST_MODE_EN == TRUE) - #if (CLASSIC_BT_INCLUDED == TRUE) /******************************************************************************* ** diff --git a/components/bt/host/bluedroid/stack/btm/btm_inq.c b/components/bt/host/bluedroid/stack/btm/btm_inq.c index c74f2b43961..db93304a4e6 100644 --- a/components/bt/host/bluedroid/stack/btm/btm_inq.c +++ b/components/bt/host/bluedroid/stack/btm/btm_inq.c @@ -718,9 +718,6 @@ tBTM_STATUS BTM_CancelInquiry(void) { tBTM_STATUS status = BTM_SUCCESS; tBTM_INQUIRY_VAR_ST *p_inq = &btm_cb.btm_inq_vars; -#if (defined(BTA_HOST_INTERLEAVE_SEARCH) && BTA_HOST_INTERLEAVE_SEARCH == TRUE) - UINT8 active_mode = p_inq->inq_active; -#endif BTM_TRACE_API ("BTM_CancelInquiry called\n"); /*** Make sure the device is ready ***/ @@ -745,23 +742,11 @@ tBTM_STATUS BTM_CancelInquiry(void) /* Initiate the cancel inquiry */ else { if (((p_inq->inqparms.mode & BTM_BR_INQUIRY_MASK) != 0) -#if (defined(BTA_HOST_INTERLEAVE_SEARCH) && BTA_HOST_INTERLEAVE_SEARCH == TRUE) - && (active_mode & BTM_BR_INQUIRY_MASK) -#endif ) { if (!btsnd_hcic_inq_cancel()) { status = BTM_NO_RESOURCES; } } -#if BLE_INCLUDED == TRUE - if (((p_inq->inqparms.mode & BTM_BLE_INQUIRY_MASK) != 0) -#if (defined(BTA_HOST_INTERLEAVE_SEARCH) && BTA_HOST_INTERLEAVE_SEARCH == TRUE) - && (active_mode & BTM_BLE_INQ_ACTIVE_MASK) -#endif - ) { - btm_ble_stop_inquiry(); - } -#endif } /* Do not send the BUSY_LEVEL event yet. Wait for the cancel_complete event @@ -819,16 +804,6 @@ tBTM_STATUS BTM_StartInquiry (tBTM_INQ_PARMS *p_inqparms, tBTM_INQ_RESULTS_CB *p /* Only one active inquiry is allowed in this implementation. Also do not allow an inquiry if the inquiry filter is being updated */ if (p_inq->inq_active || p_inq->inqfilt_active) { -#if (defined BLE_INCLUDED && BLE_INCLUDED == TRUE) - /*check if LE observe is already running*/ - if (p_inq->scan_type == INQ_LE_OBSERVE && p_inq->p_inq_ble_results_cb != NULL) { - BTM_TRACE_API("BTM_StartInquiry: LE observe in progress"); - p_inq->scan_type = INQ_GENERAL; - p_inq->inq_active = BTM_INQUIRY_INACTIVE; - btm_cb.ble_ctr_cb.inq_var.scan_type = BTM_BLE_SCAN_MODE_NONE; - btsnd_hcic_ble_set_scan_enable (BTM_BLE_SCAN_DISABLE, BTM_BLE_DUPLICATE_ENABLE); - } else -#endif { return (BTM_BUSY); BTM_TRACE_API("BTM_StartInquiry: return BUSY\n"); @@ -852,13 +827,6 @@ tBTM_STATUS BTM_StartInquiry (tBTM_INQ_PARMS *p_inqparms, tBTM_INQ_RESULTS_CB *p return (BTM_ILLEGAL_VALUE); } -#if (defined(BTA_HOST_INTERLEAVE_SEARCH) && BTA_HOST_INTERLEAVE_SEARCH == TRUE) - if (p_inq->next_state == BTM_FINISH) { - return BTM_ILLEGAL_VALUE; - } -#endif - - /* Save the inquiry parameters to be used upon the completion of setting/clearing the inquiry filter */ p_inq->inqparms = *p_inqparms; @@ -870,85 +838,12 @@ tBTM_STATUS BTM_StartInquiry (tBTM_INQ_PARMS *p_inqparms, tBTM_INQ_RESULTS_CB *p p_inq->inq_active = p_inqparms->mode; BTM_TRACE_DEBUG("BTM_StartInquiry: p_inq->inq_active = 0x%02x\n", p_inq->inq_active); - - /* interleave scan minimal conditions */ -#if (BLE_INCLUDED==TRUE && (defined(BTA_HOST_INTERLEAVE_SEARCH) && BTA_HOST_INTERLEAVE_SEARCH == TRUE)) - - /* check if both modes are present */ - if ((p_inqparms->mode & BTM_BLE_INQUIRY_MASK) && (p_inqparms->mode & BTM_BR_INQUIRY_MASK)) { - BTM_TRACE_API("BTM:Interleave Inquiry Mode Set\n"); - p_inqparms->duration = p_inqparms->intl_duration[p_inq->next_state]; - p_inq->inqparms.duration = p_inqparms->duration; - } else { - BTM_TRACE_API("BTM:Single Mode: No interleaving, Mode:0x%02x\n", p_inqparms->mode); - p_inq->next_state = BTM_NO_INTERLEAVING; - } -#endif - - - - /* start LE inquiry here if requested */ -#if BLE_INCLUDED == TRUE - if ((p_inqparms->mode & BTM_BLE_INQUIRY_MASK) -#if (defined(BTA_HOST_INTERLEAVE_SEARCH) && BTA_HOST_INTERLEAVE_SEARCH == TRUE) - && (p_inq->next_state == BTM_BLE_ONE || p_inq->next_state == BTM_BLE_TWO || - p_inq->next_state == BTM_NO_INTERLEAVING) -#endif - ) - - { -#if (defined(BTA_HOST_INTERLEAVE_SEARCH) && BTA_HOST_INTERLEAVE_SEARCH == TRUE) - p_inq->inq_active = (p_inqparms->mode & BTM_BLE_INQUIRY_MASK); - BTM_TRACE_API("BTM:Starting LE Scan with duration %d and activeMode:0x%02x\n", - p_inqparms->duration, (p_inqparms->mode & BTM_BLE_INQUIRY_MASK)); -#endif - if (!controller_get_interface()->supports_ble()) { - p_inq->inqparms.mode &= ~ BTM_BLE_INQUIRY_MASK; - status = BTM_ILLEGAL_VALUE; - } - /* BLE for now does not support filter condition for inquiry */ - else if ((status = btm_ble_start_inquiry((UINT8)(p_inqparms->mode & BTM_BLE_INQUIRY_MASK), - p_inqparms->duration)) != BTM_CMD_STARTED) { - BTM_TRACE_ERROR("Err Starting LE Inquiry.\n"); - p_inq->inqparms.mode &= ~ BTM_BLE_INQUIRY_MASK; - } -#if (!defined(BTA_HOST_INTERLEAVE_SEARCH) || BTA_HOST_INTERLEAVE_SEARCH == FALSE) - p_inqparms->mode &= ~BTM_BLE_INQUIRY_MASK; -#endif - -#if (defined(BTA_HOST_INTERLEAVE_SEARCH) && BTA_HOST_INTERLEAVE_SEARCH == TRUE) - if (p_inq->next_state == BTM_NO_INTERLEAVING) { - p_inq->next_state = BTM_FINISH; - } else { - BTM_TRACE_API("BTM:Interleaving: started LE scan, Advancing to next state: %d\n", - p_inq->next_state + 1); - p_inq->next_state += 1; - } - /* reset next_state if status <> BTM_Started */ - if (status != BTM_CMD_STARTED) { - p_inq->next_state = BTM_BR_ONE; - } - - /* if interleave scan..return here */ - return status; -#endif - - - BTM_TRACE_DEBUG("BTM_StartInquiry: mode = %02x\n", p_inqparms->mode); - } -#endif /* end of BLE_INCLUDED */ - /* we're done with this routine if BR/EDR inquiry is not desired. */ if ((p_inqparms->mode & BTM_BR_INQUIRY_MASK) == BTM_INQUIRY_NONE) { return status; } /* BR/EDR inquiry portion */ -#if (defined(BTA_HOST_INTERLEAVE_SEARCH) && BTA_HOST_INTERLEAVE_SEARCH == TRUE) - if ((p_inq->next_state == BTM_BR_ONE || p_inq->next_state == BTM_BR_TWO || - p_inq->next_state == BTM_NO_INTERLEAVING )) { - p_inq->inq_active = (p_inqparms->mode & BTM_BR_INQUIRY_MASK); -#endif /* If a filter is specified, then save it for later and clear the current filter. The setting of the filter is done upon completion of clearing of the previous filter. @@ -977,25 +872,6 @@ tBTM_STATUS BTM_StartInquiry (tBTM_INQ_PARMS *p_inqparms, tBTM_INQ_RESULTS_CB *p p_inq->state = BTM_INQ_INACTIVE_STATE; } -#if (defined(BTA_HOST_INTERLEAVE_SEARCH) && BTA_HOST_INTERLEAVE_SEARCH == TRUE) - if (p_inq->next_state == BTM_NO_INTERLEAVING) { - p_inq->next_state = BTM_FINISH; - } else { - BTM_TRACE_API("BTM:Interleaving: Started BTM inq, Advancing to next state: %d\n", - p_inq->next_state + 1); - p_inq->next_state += 1; - } - } - if (status != BTM_CMD_STARTED) { - /* Some error beginning the scan process. - Reset the next_state parameter.. Do we need to reset the inq_active also? - */ - BTM_TRACE_API("BTM:Interleaving: Error in Starting inquiry, status: 0x%02x\n", status); - p_inq->next_state = BTM_BR_ONE; - } -#endif - - return (status); } @@ -1210,6 +1086,7 @@ tBTM_STATUS BTM_ClearInqDb (BD_ADDR p_bda) return (BTM_SUCCESS); } +#if (CLASSIC_BT_INCLUDED == TRUE) /******************************************************************************* ** ** Function BTM_ReadInquiryRspTxPower @@ -1240,6 +1117,7 @@ tBTM_STATUS BTM_ReadInquiryRspTxPower (tBTM_CMPL_CB *p_cb) return (BTM_CMD_STARTED); } } +#endif // (CLASSIC_BT_INCLUDED == TRUE) /********************************************************************************* ********************************************************************************** @@ -1968,11 +1846,6 @@ void btm_process_inq_results (UINT8 *p, UINT8 inq_res_mode) /* BTM_TRACE_DEBUG("BTMINQ: Found devices, cancelling inquiry..."); */ btsnd_hcic_inq_cancel(); -#if BLE_INCLUDED == TRUE - if ((p_inq->inqparms.mode & BTM_BLE_INQUIRY_MASK) != 0) { - btm_ble_stop_inquiry(); - } -#endif btm_acl_update_busy_level (BTM_BLI_INQ_DONE_EVT); } /* Initialize flag to FALSE. This flag is set/used by application */ @@ -2053,27 +1926,10 @@ void btm_process_inq_complete (UINT8 status, UINT8 mode) tBTM_CMPL_CB *p_inq_cb = btm_cb.btm_inq_vars.p_inq_cmpl_cb; tBTM_INQUIRY_VAR_ST *p_inq = &btm_cb.btm_inq_vars; -#if (defined(BTA_HOST_INTERLEAVE_SEARCH) && BTA_HOST_INTERLEAVE_SEARCH == TRUE) - /* inquiry inactive case happens when inquiry is cancelled. - Make mode 0 for no further inquiries from the current inquiry process - */ - if (status != HCI_SUCCESS || p_inq->next_state == BTM_FINISH || !p_inq->inq_active) { - /* re-initialize for next inquiry request */ - p_inq->next_state = BTM_BR_ONE; - /* make the mode 0 here */ - p_inq->inqparms.mode &= ~(p_inq->inqparms.mode); - - } -#endif - -#if (!defined(BTA_HOST_INTERLEAVE_SEARCH) || BTA_HOST_INTERLEAVE_SEARCH == FALSE) p_inq->inqparms.mode &= ~(mode); -#endif if (p_inq->scan_type == INQ_LE_OBSERVE && !p_inq->inq_active) { /*end of LE observe*/ - p_inq->p_inq_ble_results_cb = (tBTM_INQ_RESULTS_CB *) NULL; - p_inq->p_inq_ble_cmpl_cb = (tBTM_CMPL_CB *) NULL; p_inq->scan_type = INQ_NONE; } @@ -2117,24 +1973,9 @@ void btm_process_inq_complete (UINT8 status, UINT8 mode) (p_inq_cb)((tBTM_INQUIRY_CMPL *) &p_inq->inq_cmpl_info); } } -#if (defined(BTA_HOST_INTERLEAVE_SEARCH) && BTA_HOST_INTERLEAVE_SEARCH == TRUE) - if (p_inq->inqparms.mode != 0 && !(p_inq->inq_active & BTM_PERIODIC_INQUIRY_ACTIVE)) { - /* make inquiry inactive for next iteration */ - p_inq->inq_active = BTM_INQUIRY_INACTIVE; - /* call the inquiry again */ - BTM_StartInquiry(&p_inq->inqparms, p_inq->p_inq_results_cb, p_inq->p_inq_cmpl_cb); - } -#endif } if (p_inq->inqparms.mode == 0 && p_inq->scan_type == INQ_GENERAL) { //this inquiry is complete p_inq->scan_type = INQ_NONE; -#if (defined BLE_INCLUDED && BLE_INCLUDED == TRUE) - /* check if the LE observe is pending */ - if (p_inq->p_inq_ble_results_cb != NULL) { - BTM_TRACE_DEBUG("BTM Inq Compl: resuming a pending LE scan"); - BTM_BleObserve(1, 0, p_inq->p_inq_ble_results_cb, p_inq->p_inq_ble_cmpl_cb); - } -#endif } #if (BTM_INQ_DEBUG == TRUE) BTM_TRACE_DEBUG ("inq_active:0x%x state:%d inqfilt_active:%d\n", @@ -2342,6 +2183,8 @@ void btm_inq_rmt_name_failed (void) btm_sec_rmt_name_request_complete (NULL, NULL, HCI_ERR_UNSPECIFIED); #endif ///SMP_INCLUDED == TRUE } + +#if (CLASSIC_BT_INCLUDED == TRUE) /******************************************************************************* ** ** Function btm_read_linq_tx_power_complete @@ -2377,6 +2220,7 @@ void btm_read_linq_tx_power_complete(UINT8 *p) } } +#endif // #if (CLASSIC_BT_INCLUDED == TRUE) /******************************************************************************* ** ** Function BTM_WriteEIR diff --git a/components/bt/host/bluedroid/stack/btm/btm_main.c b/components/bt/host/bluedroid/stack/btm/btm_main.c index b109e5395b6..55430477869 100644 --- a/components/bt/host/bluedroid/stack/btm/btm_main.c +++ b/components/bt/host/bluedroid/stack/btm/btm_main.c @@ -64,9 +64,12 @@ void btm_init (void) #endif /* #if BTM_DYNAMIC_MEMORY */ /* All fields are cleared; nonzero fields are reinitialized in appropriate function */ memset(&btm_cb, 0, sizeof(tBTM_CB)); +#if (CLASSIC_BT_INCLUDED == TRUE) btm_cb.page_queue = fixed_queue_new(QUEUE_SIZE_MAX); +#endif // #if (CLASSIC_BT_INCLUDED == TRUE) +#if (SMP_INCLUDED == TRUE) btm_cb.sec_pending_q = fixed_queue_new(QUEUE_SIZE_MAX); - +#endif // (SMP_INCLUDED == TRUE) #if defined(BTM_INITIAL_TRACE_LEVEL) btm_cb.trace_level = BTM_INITIAL_TRACE_LEVEL; #else @@ -86,7 +89,9 @@ void btm_init (void) #if BLE_INCLUDED == TRUE btm_ble_lock_init(); btm_ble_sem_init(); +#if ((SMP_INCLUDED == TRUE) || (BLE_PRIVACY_SPT == TRUE)) btm_cb.addr_res_en = TRUE; +#endif // ((SMP_INCLUDED == TRUE) || (BLE_PRIVACY_SPT == TRUE)) #endif btm_sec_dev_init(); #if (BLE_50_FEATURE_SUPPORT == TRUE) @@ -110,8 +115,12 @@ void btm_init (void) *******************************************************************************/ void btm_free(void) { +#if (CLASSIC_BT_INCLUDED == TRUE) fixed_queue_free(btm_cb.page_queue, osi_free_func); +#endif // #if (CLASSIC_BT_INCLUDED == TRUE) +#if (SMP_INCLUDED == TRUE) fixed_queue_free(btm_cb.sec_pending_q, osi_free_func); +#endif // (SMP_INCLUDED == TRUE) btm_acl_free(); btm_sec_dev_free(); #if BTM_SCO_INCLUDED == TRUE @@ -151,7 +160,7 @@ uint8_t btm_ble_acl_active_count(void) return count; } - +#if ((SMP_INCLUDED == TRUE) || (BLE_PRIVACY_SPT == TRUE)) // Address resolution status uint8_t btm_get_ble_addr_resolve_disable_status(void) { @@ -163,4 +172,5 @@ void btm_ble_addr_resolve_enable(bool enable) { btm_cb.addr_res_en = enable; } +#endif // ((SMP_INCLUDED == TRUE) || (BLE_PRIVACY_SPT == TRUE)) #endif /*BLE_INCLUDED*/ diff --git a/components/bt/host/bluedroid/stack/btm/btm_pm.c b/components/bt/host/bluedroid/stack/btm/btm_pm.c index de48a2dad60..9391976a4e6 100644 --- a/components/bt/host/bluedroid/stack/btm/btm_pm.c +++ b/components/bt/host/bluedroid/stack/btm/btm_pm.c @@ -45,6 +45,8 @@ //#include "bt_utils.h" //#include "osi/include/log.h" #include "osi/allocator.h" + +#if (CLASSIC_BT_INCLUDED == TRUE) /*****************************************************************************/ /* to handle different modes */ /*****************************************************************************/ @@ -820,9 +822,10 @@ void btm_pm_proc_mode_change (UINT8 hci_status, UINT16 hci_handle, UINT8 mode, U (*btm_cb.pm_reg_db[yy].cback)( p->remote_addr, mode, interval, hci_status); } } - +#if (CLASSIC_BT_INCLUDED == TRUE) /* If mode change was because of an active role switch or change link key */ btm_cont_rswitch(p, btm_find_dev(p->remote_addr), hci_status); +#endif // (CLASSIC_BT_INCLUDED == TRUE) } /******************************************************************************* @@ -901,7 +904,7 @@ BOOLEAN btm_pm_device_in_active_or_sniff_mode(void) return FALSE; } - +#if (CLASSIC_BT_INCLUDED == TRUE) /******************************************************************************* ** ** Function btm_pm_device_in_scan_state @@ -930,7 +933,7 @@ BOOLEAN btm_pm_device_in_scan_state(void) return FALSE; } - +#endif // #if (CLASSIC_BT_INCLUDED == TRUE) /******************************************************************************* ** ** Function BTM_PM_ReadControllerState @@ -944,9 +947,13 @@ tBTM_CONTRL_STATE BTM_PM_ReadControllerState(void) { if (TRUE == btm_pm_device_in_active_or_sniff_mode()) { return BTM_CONTRL_ACTIVE; - } else if (TRUE == btm_pm_device_in_scan_state()) { + } +#if (CLASSIC_BT_INCLUDED == TRUE) + else if (TRUE == btm_pm_device_in_scan_state()) { return BTM_CONTRL_SCAN; - } else { + } +#endif // #if (CLASSIC_BT_INCLUDED == TRUE) + else { return BTM_CONTRL_IDLE; } } @@ -963,3 +970,5 @@ static const char *mode_to_string(tBTM_PM_MODE mode) } } #endif + +#endif // #if (CLASSIC_BT_INCLUDED == TRUE) diff --git a/components/bt/host/bluedroid/stack/btm/btm_sec.c b/components/bt/host/bluedroid/stack/btm/btm_sec.c index 35337e40a37..4dcfaffe523 100644 --- a/components/bt/host/bluedroid/stack/btm/btm_sec.c +++ b/components/bt/host/bluedroid/stack/btm/btm_sec.c @@ -211,7 +211,7 @@ static BOOLEAN btm_serv_trusted(tBTM_SEC_DEV_REC *p_dev_rec, tBTM_SEC_SERV_REC * } return (FALSE); } -#endif ///SMP_INCLUDED == TRUE + /******************************************************************************* ** ** Function BTM_SecRegister @@ -274,6 +274,7 @@ BOOLEAN BTM_SecRegisterLinkKeyNotificationCallback (tBTM_LINK_KEY_CALLBACK *p_ca btm_cb.api.p_link_key_callback = p_callback; return TRUE; } +#endif ///SMP_INCLUDED == TRUE /******************************************************************************* ** @@ -410,6 +411,7 @@ void BTM_SetPinType (UINT8 pin_type, PIN_CODE pin_code, UINT8 pin_code_len) } #endif ///CLASSIC_BT_INCLUDED == TRUE +#if (CLASSIC_BT_INCLUDED == TRUE) /******************************************************************************* ** ** Function BTM_SetPairableMode @@ -455,6 +457,8 @@ void BTM_SetSecureConnectionsOnly (BOOLEAN secure_connections_only_mode) btm_cb.devcb.secure_connections_only = secure_connections_only_mode; btm_cb.security_mode = BTM_SEC_MODE_SC; } +#endif // #if (CLASSIC_BT_INCLUDED == TRUE) + #define BTM_NO_AVAIL_SEC_SERVICES ((UINT16) 0xffff) /******************************************************************************* @@ -2641,6 +2645,7 @@ tBTM_STATUS btm_sec_mx_access_request (BD_ADDR bd_addr, UINT16 psm, BOOLEAN is_o ** Returns void ** *******************************************************************************/ +#if (CLASSIC_BT_INCLUDED == TRUE) #if (SMP_INCLUDED == TRUE) void btm_sec_conn_req (UINT8 *bda, UINT8 *dc) { @@ -2701,7 +2706,7 @@ void btm_sec_conn_req (UINT8 *bda, UINT8 *dc) } } #endif ///SMP_INCLUDED == TRUE - +#endif // (CLASSIC_BT_INCLUDED == TRUE) /******************************************************************************* ** ** Function btm_sec_bond_cancel_complete @@ -2778,10 +2783,12 @@ void btm_create_conn_cancel_complete (UINT8 *p, UINT16 evt_len) case HCI_ERR_CONNECTION_EXISTS: case HCI_ERR_NO_CONNECTION: default: +#if (SMP_INCLUDED == TRUE) /* Notify application of the error */ if (btm_cb.api.p_bond_cancel_cmpl_callback) { btm_cb.api.p_bond_cancel_cmpl_callback(BTM_ERR_PROCESSING); } +#endif // #if (SMP_INCLUDED == TRUE) break; } } @@ -3007,7 +3014,9 @@ void btm_sec_rmt_name_request_complete (UINT8 *p_bd_addr, UINT8 *p_bd_name, UINT BTM_TRACE_EVENT ("btm_sec_rmt_name_request_complete\n"); if (((p_bd_addr == NULL) && !BTM_ACL_IS_CONNECTED(btm_cb.connecting_bda)) || ((p_bd_addr != NULL) && !BTM_ACL_IS_CONNECTED(p_bd_addr))) { +#if (CLASSIC_BT_INCLUDED == TRUE) btm_acl_resubmit_page(); +#endif // #if (CLASSIC_BT_INCLUDED == TRUE) } /* If remote name request failed, p_bd_addr is null and we need to search */ @@ -4303,8 +4312,9 @@ void btm_sec_connected (UINT8 *bda, UINT16 handle, UINT8 status, UINT8 enc_mode) BOOLEAN is_pairing_device = FALSE; tACL_CONN *p_acl_cb; UINT8 bit_shift = 0; - +#if (CLASSIC_BT_INCLUDED == TRUE) btm_acl_resubmit_page(); +#endif // #if (CLASSIC_BT_INCLUDED == TRUE) tBTM_SEC_DEV_REC *p_dev_rec = btm_find_dev (bda); @@ -4545,10 +4555,11 @@ void btm_sec_connected (UINT8 *bda, UINT16 handle, UINT8 status, UINT8 enc_mode) /* commands events and data at the same time. */ /* Set the packet types to the default allowed by the device */ btm_set_packet_types (p_acl_cb, btm_cb.btm_acl_pkt_types_supported); - +#if (CLASSIC_BT_INCLUDED == TRUE) if (btm_cb.btm_def_link_policy) { BTM_SetLinkPolicy (p_acl_cb->remote_addr, &btm_cb.btm_def_link_policy); } +#endif // #if (CLASSIC_BT_INCLUDED == TRUE) #endif } btm_acl_created (bda, p_dev_rec->dev_class, p_dev_rec->sec_bd_name, handle, HCI_ROLE_SLAVE, BT_TRANSPORT_BR_EDR); @@ -4635,10 +4646,10 @@ BOOLEAN btm_sec_disconnected (UINT16 handle, UINT8 reason) tBTM_SEC_CALLBACK *p_callback = NULL; tBT_TRANSPORT transport = BT_TRANSPORT_BR_EDR; +#if (CLASSIC_BT_INCLUDED == TRUE) /* If page was delayed for disc complete, can do it now */ btm_cb.discing = FALSE; -#if (CLASSIC_BT_INCLUDED == TRUE) btm_acl_resubmit_page(); #endif diff --git a/components/bt/host/bluedroid/stack/btm/include/btm_ble_int.h b/components/bt/host/bluedroid/stack/btm/include/btm_ble_int.h index c8181086f72..76b34bcefe6 100644 --- a/components/bt/host/bluedroid/stack/btm/include/btm_ble_int.h +++ b/components/bt/host/bluedroid/stack/btm/include/btm_ble_int.h @@ -331,26 +331,27 @@ typedef struct { ** BLE Inquiry *****************************************************/ tBTM_BLE_INQ_CB inq_var; - - /* observer callback and timer */ - tBTM_INQ_RESULTS_CB *p_obs_results_cb; - tBTM_CMPL_CB *p_obs_cmpl_cb; +#if (BLE_42_SCAN_EN == TRUE) +#if (BLE_ADV_REPORT_FLOW_CONTROL == TRUE) + // /* observer callback and timer */ tBTM_INQ_DIS_CB *p_obs_discard_cb; - TIMER_LIST_ENT obs_timer_ent; - +#endif // (BLE_ADV_REPORT_FLOW_CONTROL == TRUE) /* scan callback and timer */ tBTM_INQ_RESULTS_CB *p_scan_results_cb; tBTM_CMPL_CB *p_scan_cmpl_cb; TIMER_LIST_ENT scan_timer_ent; -#if (BLE_42_SCAN_EN == TRUE) struct pkt_queue *adv_rpt_queue; struct osi_event *adv_rpt_ready; #endif // #if (BLE_42_SCAN_EN == TRUE) +#if (BLE_GATT_BGCONN == TRUE) /* background connection procedure cb value */ tBTM_BLE_CONN_TYPE bg_conn_type; +#endif // (BLE_GATT_BGCONN == TRUE) UINT32 scan_int; UINT32 scan_win; +#if (BLE_GATT_BGCONN == TRUE) tBTM_BLE_SEL_CBACK *p_select_cback; +#endif // (BLE_GATT_BGCONN == TRUE) /* white list information */ UINT8 white_list_avail_size; #if (BLE_50_EXTEND_SYNC_EN == TRUE) @@ -380,12 +381,18 @@ typedef struct { tBTM_BLE_WL_OP wl_op_q[BTM_BLE_MAX_BG_CONN_DEV_NUM]; +#if (BLE_TOPOLOGY_CHECK == TRUE) /* current BLE link state */ tBTM_BLE_STATE_MASK cur_states; /* bit mask of tBTM_BLE_STATE */ UINT8 link_count[2]; /* total link count master and slave*/ +#endif // (BLE_TOPOLOGY_CHECK == TRUE) +#if ((BLE_42_SCAN_EN == TRUE) || (BLE_50_EXTEND_SCAN_EN == TRUE)) tBTM_UPDATE_DUPLICATE_EXCEPTIONAL_LIST_CMPL_CBACK *update_exceptional_list_cmp_cb; +#endif // ((BLE_42_SCAN_EN == TRUE) || (BLE_50_EXTEND_SCAN_EN == TRUE)) +#if (BLE_VENDOR_HCI_EN == TRUE) tBTM_SET_CSA_SUPPORT_CMPL_CBACK *set_csa_support_cmpl_cb; tBTM_SET_VENDOR_EVT_MASK_CBACK *set_vendor_evt_mask_cmpl_cb; +#endif // (BLE_VENDOR_HCI_EN == TRUE) } tBTM_BLE_CB; #ifdef __cplusplus @@ -406,12 +413,9 @@ BOOLEAN btm_ble_cancel_remote_name(BD_ADDR remote_bda); tBTM_STATUS btm_ble_set_discoverability(UINT16 combined_mode); tBTM_STATUS btm_ble_set_connectability(UINT16 combined_mode); -tBTM_STATUS btm_ble_start_inquiry (UINT8 mode, UINT8 duration); void btm_ble_stop_scan(void); void btm_clear_all_pending_le_entry(void); -BOOLEAN btm_ble_send_extended_scan_params(UINT8 scan_type, UINT32 scan_int, UINT32 scan_win, UINT8 addr_type_own, UINT8 scan_filter_policy); -void btm_ble_stop_inquiry(void); void btm_ble_init (void); void btm_ble_free (void); void btm_ble_connected (UINT8 *bda, UINT16 handle, UINT8 enc_mode, UINT8 role, tBLE_ADDR_TYPE addr_type, BOOLEAN addr_matched); @@ -470,11 +474,11 @@ void btm_ble_remove_from_white_list_complete(UINT8 *p, UINT16 evt_len); void btm_ble_clear_white_list_complete(UINT8 *p, UINT16 evt_len); void btm_ble_white_list_init(UINT8 white_list_size); -#if (tGATT_BG_CONN_DEV == TRUE) +#if (GATT_BG_CONN_DEV == TRUE) /* background connection function */ BOOLEAN btm_ble_suspend_bg_conn(void); BOOLEAN btm_ble_resume_bg_conn(void); -#endif // #if (tGATT_BG_CONN_DEV == TRUE) +#endif // #if (GATT_BG_CONN_DEV == TRUE) void btm_ble_initiate_select_conn(BD_ADDR bda); BOOLEAN btm_ble_start_auto_conn(BOOLEAN start); @@ -518,23 +522,13 @@ void btm_ble_add_default_entry_to_resolving_list(void); void btm_ble_set_privacy_mode_complete(UINT8 *p, UINT16 evt_len); #endif -#if (BLE_HOST_BLE_MULTI_ADV_EN == TRUE) -void btm_ble_multi_adv_configure_rpa (tBTM_BLE_MULTI_ADV_INST *p_inst); -void btm_ble_multi_adv_init(void); -void *btm_ble_multi_adv_get_ref(UINT8 inst_id); -void btm_ble_multi_adv_cleanup(void); -void btm_ble_multi_adv_reenable(UINT8 inst_id); -void btm_ble_multi_adv_enb_privacy(BOOLEAN enable); -#endif // #if (BLE_HOST_BLE_MULTI_ADV_EN == TRUE) char btm_ble_map_adv_tx_power(int tx_power_index); -void btm_ble_batchscan_init(void); -void btm_ble_batchscan_cleanup(void); -void btm_ble_adv_filter_init(void); -void btm_ble_adv_filter_cleanup(void); +#if (BLE_TOPOLOGY_CHECK == TRUE) BOOLEAN btm_ble_topology_check(tBTM_BLE_STATE_MASK request); BOOLEAN btm_ble_clear_topology_mask(tBTM_BLE_STATE_MASK request_state); BOOLEAN btm_ble_set_topology_mask(tBTM_BLE_STATE_MASK request_state); tBTM_BLE_STATE_MASK btm_ble_get_topology_mask(void); +#endif // (BLE_TOPOLOGY_CHECK == TRUE) #if BTM_BLE_CONFORMANCE_TESTING == TRUE void btm_ble_set_no_disc_if_pair_fail (BOOLEAN disble_disc); diff --git a/components/bt/host/bluedroid/stack/btm/include/btm_int.h b/components/bt/host/bluedroid/stack/btm/include/btm_int.h index d4d96c81a9a..25a45d2e88b 100644 --- a/components/bt/host/bluedroid/stack/btm/include/btm_int.h +++ b/components/bt/host/bluedroid/stack/btm/include/btm_int.h @@ -140,7 +140,10 @@ UINT8 legacy_auth_state; #define BTM_ACL_SWKEY_STATE_SWITCHING 3 #define BTM_ACL_SWKEY_STATE_ENCRYPTION_ON 4 #define BTM_ACL_SWKEY_STATE_IN_PROGRESS 5 + +#if (CLASSIC_BT_INCLUDED == TRUE) UINT8 switch_role_state; +#endif // (CLASSIC_BT_INCLUDED == TRUE) #define BTM_ACL_ENCRYPT_STATE_IDLE 0 #define BTM_ACL_ENCRYPT_STATE_ENCRYPT_OFF 1 /* encryption turning off */ @@ -180,40 +183,49 @@ typedef struct { tBTM_DEV_STATUS_CB *p_dev_status_cb; /* Device status change callback */ tBTM_VS_EVT_CB *p_vend_spec_cb[BTM_MAX_VSE_CALLBACKS]; /* Register for vendor specific events */ +#if (CLASSIC_BT_INCLUDED == TRUE) tBTM_CMPL_CB *p_stored_link_key_cmpl_cb; /* Read/Write/Delete stored link key */ +#endif // (CLASSIC_BT_INCLUDED == TRUE) TIMER_LIST_ENT reset_timer; tBTM_CMPL_CB *p_reset_cmpl_cb; +#if (CLASSIC_BT_INCLUDED == TRUE) TIMER_LIST_ENT rln_timer; tBTM_CMPL_CB *p_rln_cmpl_cb; /* Callback function to be called when */ +#endif // (CLASSIC_BT_INCLUDED == TRUE) + /* read local name function complete */ TIMER_LIST_ENT rssi_timer; tBTM_CMPL_CB *p_rssi_cmpl_cb; /* Callback function to be called when */ /* read rssi function completes */ - +#if BLE_INCLUDED == TRUE tBTM_CMPL_CB *p_ble_ch_map_cmpl_cb; /* Callback function to be called when */ +#endif // #if BLE_INCLUDED == TRUE /* read channel map function completes */ - +#if (CLASSIC_BT_INCLUDED == TRUE) TIMER_LIST_ENT lnk_quality_timer; tBTM_CMPL_CB *p_lnk_qual_cmpl_cb;/* Callback function to be called when */ +#endif // (CLASSIC_BT_INCLUDED == TRUE) + +#if (CLASSIC_BT_INCLUDED == TRUE) /* read link quality function completes */ TIMER_LIST_ENT txpwer_timer; tBTM_CMPL_CB *p_txpwer_cmpl_cb; /* Callback function to be called when */ -/* read inq tx power function completes */ +#endif // #if (CLASSIC_BT_INCLUDED == TRUE) +/* read inq tx power function completes */ +#if (CLASSIC_BT_INCLUDED == TRUE) TIMER_LIST_ENT qossu_timer; tBTM_CMPL_CB *p_qossu_cmpl_cb; /* Callback function to be called when */ /* qos setup function completes */ +#endif // (CLASSIC_BT_INCLUDED == TRUE) +#if (CLASSIC_BT_INCLUDED == TRUE) tBTM_ROLE_SWITCH_CMPL switch_role_ref_data; tBTM_CMPL_CB *p_switch_role_cb; /* Callback function to be called when */ /* requested switch role is completed */ - -#if (BLE_HOST_READ_TX_POWER_EN == TRUE) -TIMER_LIST_ENT tx_power_timer; -tBTM_CMPL_CB *p_tx_power_cmpl_cb;/* Callback function to be called */ -#endif // #if (BLE_HOST_READ_TX_POWER_EN == TRUE) +#endif // (CLASSIC_BT_INCLUDED == TRUE) #if CLASSIC_BT_INCLUDED == TRUE TIMER_LIST_ENT afh_channels_timer; @@ -265,10 +277,11 @@ UINT32 test_local_sign_cntr; #endif #endif /* BLE_INCLUDED */ - tBTM_IO_CAP loc_io_caps; /* IO capability of the local device */ +#if (SMP_INCLUDED == TRUE) tBTM_AUTH_REQ loc_auth_req; /* the auth_req flag */ BOOLEAN secure_connections_only; /* Rejects service level 0 connections if */ +#endif // #if (SMP_INCLUDED == TRUE) /* itself or peer device doesn't support */ /* secure connections */ } tBTM_DEVCB; @@ -347,8 +360,6 @@ typedef struct { tBTM_CMPL_CB *p_inq_cmpl_cb; tBTM_INQ_RESULTS_CB *p_inq_results_cb; - tBTM_CMPL_CB *p_inq_ble_cmpl_cb; /*completion callback exclusively for LE Observe*/ - tBTM_INQ_RESULTS_CB *p_inq_ble_results_cb;/*results callback exclusively for LE observe*/ tBTM_CMPL_CB *p_inqfilter_cmpl_cb; /* Called (if not NULL) after inquiry filter completed */ UINT32 inq_counter; /* Counter incremented each time an inquiry completes */ /* Used for determining whether or not duplicate devices */ @@ -378,9 +389,6 @@ typedef struct { UINT8 state; /* Current state that the inquiry process is in */ UINT8 inq_active; /* Bit Mask indicating type of inquiry is active */ BOOLEAN no_inc_ssp; /* TRUE, to stop inquiry on incoming SSP */ -#if (defined(BTA_HOST_INTERLEAVE_SEARCH) && BTA_HOST_INTERLEAVE_SEARCH == TRUE) - btm_inq_state next_state; /*interleaving state to determine next mode to be inquired*/ -#endif } tBTM_INQUIRY_VAR_ST; /* The MSB of the clock offset field indicates that the offset is valid if TRUE */ @@ -863,8 +871,9 @@ typedef struct { list_t *p_acl_db_list; #if (CLASSIC_BT_INCLUDED == TRUE) UINT8 btm_scn[BTM_MAX_SCN]; /* current SCNs: TRUE if SCN is in use */ -#endif ///CLASSIC_BT_INCLUDED == TRUE + UINT16 btm_def_link_policy; +#endif ///CLASSIC_BT_INCLUDED == TRUE UINT16 btm_def_link_super_tout; tBTM_ACL_LINK_STAT_CB *p_acl_link_stat_cb; /* Callback for when ACL link related events came */ @@ -875,11 +884,12 @@ typedef struct { /**************************************************** ** Power Management ****************************************************/ +#if (CLASSIC_BT_INCLUDED == TRUE) list_t *p_pm_mode_db_list; tBTM_PM_RCB pm_reg_db[BTM_MAX_PM_RECORDS + 1]; /* per application/module */ UINT16 pm_pend_link_hdl; /* the index of acl_db, which has a pending PM cmd */ UINT8 pm_pend_id; /* the id pf the module, which has a pending PM cmd */ - +#endif // #if (CLASSIC_BT_INCLUDED == TRUE) /***************************************************** ** Device control *****************************************************/ @@ -890,18 +900,22 @@ typedef struct { *****************************************************/ #if (BLE_INCLUDED == TRUE) tBTM_BLE_CB ble_ctr_cb; - +#if (SMP_INCLUDED == TRUE) UINT16 enc_handle; BT_OCTET8 enc_rand; /* received rand value from LTK request*/ UINT16 ediv; /* received ediv value from LTK request */ UINT8 key_size; - tBTM_BLE_VSC_CB cmn_ble_vsc_cb; +#endif // (SMP_INCLUDED == TRUE) +#if ((SMP_INCLUDED == TRUE) || (BLE_PRIVACY_SPT == TRUE)) BOOLEAN addr_res_en; /* internal use for test: address resolution enable/disable */ +#endif // ((SMP_INCLUDED == TRUE) || (BLE_PRIVACY_SPT == TRUE)) #endif /* Packet types supported by the local device */ UINT16 btm_acl_pkt_types_supported; +#if (CLASSIC_BT_INCLUDED == TRUE) UINT16 btm_sco_pkt_types_supported; +#endif // #if (CLASSIC_BT_INCLUDED == TRUE) /***************************************************** @@ -915,7 +929,7 @@ typedef struct { #if BTM_SCO_INCLUDED == TRUE tSCO_CB sco_cb; #endif - +#if (SMP_INCLUDED == TRUE) /***************************************************** ** Security Management *****************************************************/ @@ -924,18 +938,22 @@ typedef struct { #define BTM_SEC_MAX_RMT_NAME_CALLBACKS 2 tBTM_RMT_NAME_CALLBACK *p_rmt_name_callback[BTM_SEC_MAX_RMT_NAME_CALLBACKS]; +#endif // #if (SMP_INCLUDED == TRUE) #if (SMP_INCLUDED == TRUE) tBTM_SEC_DEV_REC *p_collided_dev_rec; #endif ///SMP_INCLUDED == TRUE + UINT8 security_mode; + UINT32 dev_rec_count; /* Counter used for device record timestamp */ +#if (SMP_INCLUDED == TRUE) TIMER_LIST_ENT sec_collision_tle; UINT32 collision_start_time; UINT32 max_collision_delay; - UINT32 dev_rec_count; /* Counter used for device record timestamp */ - UINT8 security_mode; BOOLEAN pairing_disabled; BOOLEAN connect_only_paired; BOOLEAN security_mode_changed; /* mode changed during bonding */ BOOLEAN sec_req_pending; /* TRUE if a request is pending */ +#endif // #if (SMP_INCLUDED == TRUE) + #if (CLASSIC_BT_INCLUDED == TRUE) BOOLEAN pin_type_changed; /* pin type changed during bonding */ #endif ///CLASSIC_BT_INCLUDED == TRUE @@ -952,10 +970,12 @@ typedef struct { UINT8 disc_reason; /* for legacy devices */ UINT16 disc_handle; /* for legacy devices */ #endif ///CLASSIC_BT_INCLUDED == TRUE +#if (SMP_INCLUDED == TRUE) tBTM_PAIRING_STATE pairing_state; /* The current pairing state */ UINT8 pairing_flags; /* The current pairing flags */ BD_ADDR pairing_bda; /* The device currently pairing */ TIMER_LIST_ENT pairing_tle; /* Timer for pairing process */ +#endif // #if (SMP_INCLUDED == TRUE) #endif ///SMP_INCLUDED == TRUE #if SMP_INCLUDED == TRUE || CLASSIC_BT_INCLUDED == TRUE @@ -971,12 +991,18 @@ typedef struct { UINT8 acl_disc_reason; UINT8 trace_level; UINT8 busy_level; /* the current busy level */ +#if (CLASSIC_BT_INCLUDED == TRUE) BOOLEAN is_paging; /* TRUE, if paging is in progress */ BOOLEAN is_inquiry; /* TRUE, if inquiry is in progress */ fixed_queue_t *page_queue; BOOLEAN paging; +#endif // #if (CLASSIC_BT_INCLUDED == TRUE) +#if (SMP_INCLUDED == TRUE && CLASSIC_BT_INCLUDED == TRUE) BOOLEAN discing; +#endif // (SMP_INCLUDED == TRUE && CLASSIC_BT_INCLUDED == TRUE) +#if (SMP_INCLUDED == TRUE) fixed_queue_t *sec_pending_q; /* pending sequrity requests in tBTM_SEC_QUEUE_ENTRY format */ +#endif // (SMP_INCLUDED == TRUE) #if (!defined(BT_TRACE_VERBOSE) || (BT_TRACE_VERBOSE == FALSE)) char state_temp_buffer[BTM_STATE_BUFFER_SIZE]; #endif diff --git a/components/bt/host/bluedroid/stack/btu/btu_hcif.c b/components/bt/host/bluedroid/stack/btu/btu_hcif.c index 52365cf62c2..75b62e5b593 100644 --- a/components/bt/host/bluedroid/stack/btu/btu_hcif.c +++ b/components/bt/host/bluedroid/stack/btu/btu_hcif.c @@ -1025,8 +1025,9 @@ static void btu_hcif_encryption_change_evt (UINT8 *p) STREAM_TO_UINT8 (status, p); STREAM_TO_UINT16 (handle, p); STREAM_TO_UINT8 (encr_enable, p); - +#if (CLASSIC_BT_INCLUDED == TRUE) btm_acl_encrypt_change (handle, status, encr_enable); +#endif // (CLASSIC_BT_INCLUDED == TRUE) btm_sec_encrypt_change (handle, status, encr_enable); } #endif ///SMP_INCLUDED == TRUE @@ -1211,22 +1212,25 @@ static void btu_hcif_hdl_command_complete (UINT16 opcode, UINT8 *p, UINT16 evt_l break; case HCI_GET_LINK_QUALITY: +#if (CLASSIC_BT_INCLUDED == TRUE) btm_read_link_quality_complete (p); +#endif // (CLASSIC_BT_INCLUDED == TRUE) break; #endif // #if (CLASSIC_BT_INCLUDED == TRUE) case HCI_READ_LOCAL_NAME: +#if (CLASSIC_BT_INCLUDED == TRUE) btm_read_local_name_complete (p, evt_len); +#endif // (CLASSIC_BT_INCLUDED == TRUE) break; case HCI_READ_RSSI: btm_read_rssi_complete (p, evt_len); break; case HCI_BLE_READ_CHNL_MAP: +#if BLE_INCLUDED == TRUE btm_read_channel_map_complete (p); +#endif // #if BLE_INCLUDED == TRUE break; case HCI_READ_TRANSMIT_POWER_LEVEL: -#if (BLE_HOST_READ_TX_POWER_EN == TRUE) - btm_read_tx_power_complete(p, evt_len, FALSE); -#endif // #if (BLE_HOST_READ_TX_POWER_EN == TRUE) break; #if (CLASSIC_BT_INCLUDED == TRUE) case HCI_CREATE_CONNECTION_CANCEL: @@ -1306,9 +1310,6 @@ static void btu_hcif_hdl_command_complete (UINT16 opcode, UINT8 *p, UINT16 evt_l break; case HCI_BLE_READ_ADV_CHNL_TX_POWER: -#if (BLE_HOST_READ_TX_POWER_EN == TRUE) - btm_read_tx_power_complete(p, evt_len, TRUE); -#endif // #if (BLE_HOST_READ_TX_POWER_EN == TRUE) break; #if (BLE_42_ADV_EN == TRUE) case HCI_BLE_WRITE_ADV_ENABLE: @@ -1702,13 +1703,16 @@ static void btu_hcif_hdl_command_status (UINT16 opcode, UINT8 status, UINT8 *p_c break; case HCI_QOS_SETUP_COMP_EVT: + #if (CLASSIC_BT_INCLUDED == TRUE) /* Tell qos setup that we are done */ btm_qos_setup_complete(status, 0, NULL); + #endif // (CLASSIC_BT_INCLUDED == TRUE) break; case HCI_SWITCH_ROLE: /* Tell BTM that the command failed */ /* read bd addr out of stored command */ + #if (CLASSIC_BT_INCLUDED == TRUE) if (p_cmd != NULL) { p_cmd++; STREAM_TO_BDADDR (bd_addr, p_cmd); @@ -1717,6 +1721,7 @@ static void btu_hcif_hdl_command_status (UINT16 opcode, UINT8 status, UINT8 *p_c btm_acl_role_changed(status, NULL, BTM_ROLE_UNDEFINED); } l2c_link_role_changed (NULL, BTM_ROLE_UNDEFINED, HCI_ERR_COMMAND_DISALLOWED); + #endif // (CLASSIC_BT_INCLUDED == TRUE) break; case HCI_CREATE_CONNECTION: diff --git a/components/bt/host/bluedroid/stack/btu/btu_task.c b/components/bt/host/bluedroid/stack/btu/btu_task.c index bffa6837b0d..f6ce7e44269 100644 --- a/components/bt/host/bluedroid/stack/btu/btu_task.c +++ b/components/bt/host/bluedroid/stack/btu/btu_task.c @@ -315,7 +315,9 @@ static void btu_general_alarm_process(void *param) switch (p_tle->event) { case BTU_TTYPE_BTM_DEV_CTL: +#if (CLASSIC_BT_INCLUDED == TRUE) btm_dev_timeout(p_tle); +#endif // (CLASSIC_BT_INCLUDED == TRUE) break; case BTU_TTYPE_L2CAP_LINK: @@ -374,11 +376,15 @@ static void btu_general_alarm_process(void *param) break; case BTU_TTYPE_ATT_WAIT_FOR_RSP: +#if (GATTC_INCLUDED == TRUE) gatt_rsp_timeout(p_tle); +#endif // (GATTC_INCLUDED == TRUE) break; case BTU_TTYPE_ATT_WAIT_FOR_IND_ACK: +#if (GATTC_INCLUDED == TRUE) gatt_ind_ack_timeout(p_tle); +#endif // (GATTC_INCLUDED == TRUE) break; #if (defined(SMP_INCLUDED) && SMP_INCLUDED == TRUE) diff --git a/components/bt/host/bluedroid/stack/gap/include/gap_int.h b/components/bt/host/bluedroid/stack/gap/include/gap_int.h index 8f5472589c0..dc6353c3250 100644 --- a/components/bt/host/bluedroid/stack/gap/include/gap_int.h +++ b/components/bt/host/bluedroid/stack/gap/include/gap_int.h @@ -128,8 +128,9 @@ typedef struct { } tGAP_CLCB; typedef struct { +#if (CLASSIC_BT_INCLUDED == TRUE) tGAP_INFO blk[GAP_MAX_BLOCKS]; - tBTM_CMPL_CB *btm_cback[GAP_MAX_BLOCKS]; +#endif // (CLASSIC_BT_INCLUDED == TRUE) UINT8 trace_level; //tGAP_FINDADDR_CB findaddr_cb; /* Contains the control block for finding a device addr */ //tBTM_INQ_INFO *cur_inqptr; diff --git a/components/bt/host/bluedroid/stack/gatt/gatt_api.c b/components/bt/host/bluedroid/stack/gatt/gatt_api.c index db7952e95ac..a245247d568 100644 --- a/components/bt/host/bluedroid/stack/gatt/gatt_api.c +++ b/components/bt/host/bluedroid/stack/gatt/gatt_api.c @@ -1044,11 +1044,13 @@ tGATT_STATUS GATTC_Read (UINT16 conn_id, tGATT_READ_TYPE type, tGATT_READ_PARAM default: break; } +#if (SMP_INCLUDED == TRUE) /* start security check */ if (gatt_security_check_start(p_clcb) == FALSE) { status = GATT_NO_RESOURCES; gatt_clcb_dealloc(p_clcb); } +#endif // (SMP_INCLUDED == TRUE) } else { status = GATT_NO_RESOURCES; } @@ -1108,10 +1110,11 @@ tGATT_STATUS GATTC_Write (UINT16 conn_id, tGATT_WRITE_TYPE type, tGATT_VALUE *p_ p_clcb->start_offset = p_write->offset; p->offset = 0; } - +#if (SMP_INCLUDED == TRUE) if (gatt_security_check_start(p_clcb) == FALSE) { status = GATT_NO_RESOURCES; } +#endif // (SMP_INCLUDED == TRUE) } else { status = GATT_NO_RESOURCES; } @@ -1388,13 +1391,9 @@ void GATT_Deregister (tGATT_IF gatt_if) } } } -#if (tGATT_BG_CONN_DEV == TRUE) +#if (GATT_BG_CONN_DEV == TRUE) gatt_deregister_bgdev_list(gatt_if); -#endif // #if (tGATT_BG_CONN_DEV == TRUE) - /* update the listen mode */ -#if (defined(BLE_PERIPHERAL_MODE_SUPPORT) && (BLE_PERIPHERAL_MODE_SUPPORT == TRUE)) - GATT_Listen(gatt_if, FALSE, NULL); -#endif +#endif // #if (GATT_BG_CONN_DEV == TRUE) memset (p_reg, 0, sizeof(tGATT_REG)); } @@ -1470,11 +1469,11 @@ BOOLEAN GATT_Connect (tGATT_IF gatt_if, BD_ADDR bd_addr, tBLE_ADDR_TYPE bd_addr_ if (is_direct) { status = gatt_act_connect (p_reg, bd_addr, bd_addr_type, transport, is_aux, is_pawr_synced, adv_handle, subevent); } else { -#if (tGATT_BG_CONN_DEV == TRUE) +#if (GATT_BG_CONN_DEV == TRUE) if (transport == BT_TRANSPORT_LE) { status = gatt_update_auto_connect_dev(gatt_if, TRUE, bd_addr, TRUE); } else -#endif // #if (tGATT_BG_CONN_DEV == TRUE) +#endif // #if (GATT_BG_CONN_DEV == TRUE) { GATT_TRACE_ERROR("Unsupported transport for background connection"); } @@ -1532,7 +1531,7 @@ BOOLEAN GATT_CancelConnect (tGATT_IF gatt_if, BD_ADDR bd_addr, BOOLEAN is_direct status = gatt_cancel_open(gatt_if, bd_addr); } } else { -#if (tGATT_BG_CONN_DEV == TRUE) +#if (GATT_BG_CONN_DEV == TRUE) if (!gatt_if) { if (gatt_get_num_apps_for_bg_dev(bd_addr)) { while (gatt_find_app_for_bg_dev(bd_addr, &temp_gatt_if)) { @@ -1545,7 +1544,7 @@ BOOLEAN GATT_CancelConnect (tGATT_IF gatt_if, BD_ADDR bd_addr, BOOLEAN is_direct } else { status = gatt_remove_bg_dev_for_app(gatt_if, bd_addr); } -#endif // #if (tGATT_BG_CONN_DEV == TRUE) +#endif // #if (GATT_BG_CONN_DEV == TRUE) } return status; @@ -1584,6 +1583,7 @@ tGATT_STATUS GATT_Disconnect (UINT16 conn_id) return ret; } +#if (GATTS_INCLUDED == TRUE) /******************************************************************************* ** ** Function GATT_SendServiceChangeIndication @@ -1630,6 +1630,7 @@ tGATT_STATUS GATT_SendServiceChangeIndication (BD_ADDR bd_addr) return status; } +#endif // (GATTS_INCLUDED == TRUE) /******************************************************************************* ** @@ -1698,45 +1699,7 @@ BOOLEAN GATT_GetConnIdIfConnected(tGATT_IF gatt_if, BD_ADDR bd_addr, UINT16 *p_c return status; } - -/******************************************************************************* -** -** Function GATT_Listen -** -** Description This function start or stop LE advertisement and listen for -** connection. -** -** Parameters gatt_if: application interface -** p_bd_addr: listen for specific address connection, or NULL for -** listen to all device connection. -** start: start or stop listening. -** -** Returns TRUE if advertisement is started; FALSE if adv start failure. -** -*******************************************************************************/ -BOOLEAN GATT_Listen (tGATT_IF gatt_if, BOOLEAN start, BD_ADDR_PTR bd_addr) -{ - tGATT_REG *p_reg; - - GATT_TRACE_API ("GATT_Listen gatt_if=%d", gatt_if); - - /* Make sure app is registered */ - if ((p_reg = gatt_get_regcb(gatt_if)) == NULL) { - GATT_TRACE_ERROR("GATT_Listen - gatt_if =%d is not registered", gatt_if); - return (FALSE); - } - - if (bd_addr != NULL) { -#if (tGATT_BG_CONN_DEV == TRUE) - gatt_update_auto_connect_dev(gatt_if, start, bd_addr, FALSE); -#endif // #if (tGATT_BG_CONN_DEV == TRUE) - } else { - p_reg->listening = start ? GATT_LISTEN_TO_ALL : GATT_LISTEN_TO_NONE; - } - - return gatt_update_listen_mode(); -} - +#if (GATTS_INCLUDED == TRUE) tGATT_STATUS GATTS_SetServiceChangeMode(UINT8 mode) { if (mode > GATTS_SEND_SERVICE_CHANGE_MANUAL) { @@ -1748,6 +1711,8 @@ tGATT_STATUS GATTS_SetServiceChangeMode(UINT8 mode) return GATT_SUCCESS; } +#endif // (GATTS_INCLUDED == TRUE) + tGATT_STATUS GATTS_HandleMultiValueNotification (UINT16 conn_id, tGATT_HLV *tuples, UINT16 num_tuples) { tGATT_STATUS cmd_sent = GATT_ILLEGAL_PARAMETER; diff --git a/components/bt/host/bluedroid/stack/gatt/gatt_auth.c b/components/bt/host/bluedroid/stack/gatt/gatt_auth.c index 4db0a554d5e..a5769a83d71 100644 --- a/components/bt/host/bluedroid/stack/gatt/gatt_auth.c +++ b/components/bt/host/bluedroid/stack/gatt/gatt_auth.c @@ -129,6 +129,8 @@ void gatt_verify_signature(tGATT_TCB *p_tcb, BT_HDR *p_buf) } #endif ///SMP_INCLUDED == TRUE +#if (SMP_INCLUDED == TRUE) + /******************************************************************************* ** ** Function gatt_sec_check_complete @@ -155,6 +157,7 @@ void gatt_sec_check_complete(BOOLEAN sec_check_ok, tGATT_CLCB *p_clcb, UINT8 s #endif ///GATTC_INCLUDED == TRUE } } + /******************************************************************************* ** ** Function gatt_enc_cmpl_cback @@ -253,6 +256,7 @@ void gatt_notify_enc_cmpl(BD_ADDR bd_addr) } return; } + /******************************************************************************* ** ** Function gatt_set_sec_act @@ -268,6 +272,7 @@ void gatt_set_sec_act(tGATT_TCB *p_tcb, tGATT_SEC_ACTION sec_act) p_tcb->sec_act = sec_act; } } + /******************************************************************************* ** ** Function gatt_get_sec_act @@ -285,6 +290,7 @@ tGATT_SEC_ACTION gatt_get_sec_act(tGATT_TCB *p_tcb) } return sec_act; } +#endif // (SMP_INCLUDED == TRUE) /******************************************************************************* ** ** Function gatt_determine_sec_act @@ -420,7 +426,7 @@ tGATT_STATUS gatt_get_link_encrypt_status(tGATT_TCB *p_tcb) return encrypt_status ; } - +#if (SMP_INCLUDED == TRUE) /******************************************************************************* ** ** Function gatt_convert_sec_action @@ -450,6 +456,7 @@ static BOOLEAN gatt_convert_sec_action(tGATT_SEC_ACTION gatt_sec_act, tBTM_BLE_S return status; } + /******************************************************************************* ** ** Function gatt_check_enc_req @@ -517,6 +524,6 @@ BOOLEAN gatt_security_check_start(tGATT_CLCB *p_clcb) return status; } - +#endif // (SMP_INCLUDED == TRUE) #endif /* BLE_INCLUDED */ diff --git a/components/bt/host/bluedroid/stack/gatt/gatt_main.c b/components/bt/host/bluedroid/stack/gatt/gatt_main.c index f92a2c392bd..93eb1bb1948 100644 --- a/components/bt/host/bluedroid/stack/gatt/gatt_main.c +++ b/components/bt/host/bluedroid/stack/gatt/gatt_main.c @@ -102,8 +102,9 @@ void gatt_init (void) #endif /* #if GATT_DYNAMIC_MEMORY */ memset (&gatt_cb, 0, sizeof(tGATT_CB)); memset (&fixed_reg, 0, sizeof(tL2CAP_FIXED_CHNL_REG)); - +#if (GATTC_INCLUDED == TRUE) gatt_cb.auto_disc = TRUE; +#endif // (GATTC_INCLUDED == TRUE) gatt_cb.p_clcb_list = list_new(osi_free_func); gatt_cb.p_tcb_list = list_new(osi_free_func); #if defined(GATT_INITIAL_TRACE_LEVEL) @@ -111,11 +112,11 @@ void gatt_init (void) #else gatt_cb.trace_level = BT_TRACE_LEVEL_NONE; /* No traces */ #endif - gatt_cb.def_mtu_size = GATT_DEF_BLE_MTU_SIZE; - gatt_cb.sign_op_queue = fixed_queue_new(QUEUE_SIZE_MAX); +#if (GATTS_INCLUDED == TRUE) gatt_cb.srv_chg_clt_q = fixed_queue_new(QUEUE_SIZE_MAX); gatt_cb.pending_new_srv_start_q = fixed_queue_new(QUEUE_SIZE_MAX); gatt_cb.srv_chg_mode = GATTS_SEND_SERVICE_CHANGE_MODE; +#endif // (GATTS_INCLUDED == TRUE) /* First, register fixed L2CAP channel for ATT over BLE */ fixed_reg.fixed_chnl_opts.mode = L2CAP_FCR_BASIC_MODE; @@ -140,11 +141,10 @@ void gatt_init (void) #endif ///CLASSIC_BT_GATT_INCLUDED == TRUE BTM_SetSecurityLevel(TRUE, "", BTM_SEC_SERVICE_ATT, BTM_SEC_NONE, BT_PSM_ATT, 0, 0); BTM_SetSecurityLevel(FALSE, "", BTM_SEC_SERVICE_ATT, BTM_SEC_NONE, BT_PSM_ATT, 0, 0); - +#if (GATTS_INCLUDED == TRUE) gatt_cb.hdl_cfg.gatt_start_hdl = GATT_GATT_START_HANDLE; gatt_cb.hdl_cfg.gap_start_hdl = GATT_GAP_START_HANDLE; gatt_cb.hdl_cfg.app_start_hdl = GATT_APP_START_HANDLE; -#if (GATTS_INCLUDED == TRUE) gatt_profile_db_init(); #endif ///GATTS_INCLUDED == TRUE //init local MTU size @@ -165,28 +165,30 @@ void gatt_init (void) void gatt_free(void) { GATT_TRACE_DEBUG("gatt_free()"); - fixed_queue_free(gatt_cb.sign_op_queue, NULL); - gatt_cb.sign_op_queue = NULL; +#if (GATTS_INCLUDED == TRUE) fixed_queue_free(gatt_cb.srv_chg_clt_q, NULL); gatt_cb.srv_chg_clt_q = NULL; fixed_queue_free(gatt_cb.pending_new_srv_start_q, osi_free_func); gatt_cb.pending_new_srv_start_q = NULL; +#endif // (GATTS_INCLUDED == TRUE) list_node_t *p_node = NULL; tGATT_TCB *p_tcb = NULL; for(p_node = list_begin(gatt_cb.p_tcb_list); p_node; p_node = list_next(p_node)) { p_tcb = list_node(p_node); +#if (SMP_INCLUDED == TRUE) fixed_queue_free(p_tcb->pending_enc_clcb, NULL); p_tcb->pending_enc_clcb = NULL; - - fixed_queue_free(p_tcb->pending_ind_q, NULL); - p_tcb->pending_ind_q = NULL; - +#endif // (SMP_INCLUDED == TRUE) +#if (GATTS_INCLUDED == TRUE) btu_free_timer(&p_tcb->conf_timer_ent); memset(&p_tcb->conf_timer_ent, 0, sizeof(TIMER_LIST_ENT)); +#endif // (GATTS_INCLUDED == TRUE) +#if (GATTC_INCLUDED == TRUE) btu_free_timer(&p_tcb->ind_ack_timer_ent); memset(&p_tcb->ind_ack_timer_ent, 0, sizeof(TIMER_LIST_ENT)); +#endif // #if (GATTC_INCLUDED == TRUE) #if (GATTS_INCLUDED == TRUE) fixed_queue_free(p_tcb->sr_cmd.multi_rsp_q, NULL); @@ -411,12 +413,11 @@ BOOLEAN gatt_act_connect (tGATT_REG *p_reg, BD_ADDR bd_addr, // but here p_tcb is get from gatt_allocate_tcb_by_bdaddr(), is too old, so we get p_tcb again p_tcb = gatt_find_tcb_by_addr(bd_addr, transport); if(p_tcb != NULL) { +#if (SMP_INCLUDED == TRUE) if(p_tcb->pending_enc_clcb != NULL) { fixed_queue_free(p_tcb->pending_enc_clcb, NULL); } - if(p_tcb->pending_ind_q != NULL) { - fixed_queue_free(p_tcb->pending_ind_q, NULL); - } +#endif // (SMP_INCLUDED == TRUE) gatt_tcb_free(p_tcb); } @@ -450,8 +451,10 @@ static void gatt_le_connect_cback (UINT16 chan, BD_ADDR bd_addr, BOOLEAN connect { tGATT_TCB *p_tcb = gatt_find_tcb_by_addr(bd_addr, transport); +#if (GATTS_INCLUDED == TRUE) BOOLEAN check_srv_chg = FALSE; tGATTS_SRV_CHG *p_srv_chg_clt = NULL; +#endif // (GATTS_INCLUDED == TRUE) /* ignore all fixed channel connect/disconnect on BR/EDR link for GATT */ if (transport == BT_TRANSPORT_BR_EDR) { @@ -461,7 +464,7 @@ static void gatt_le_connect_cback (UINT16 chan, BD_ADDR bd_addr, BOOLEAN connect GATT_TRACE_DEBUG ("GATT ATT protocol channel with BDA: %08x%04x is %s", (bd_addr[0] << 24) + (bd_addr[1] << 16) + (bd_addr[2] << 8) + bd_addr[3], (bd_addr[4] << 8) + bd_addr[5], (connected) ? "connected" : "disconnected"); - +#if (GATTS_INCLUDED == TRUE) if ((p_srv_chg_clt = gatt_is_bda_in_the_srv_chg_clt_list(bd_addr)) != NULL) { check_srv_chg = TRUE; } else { @@ -469,6 +472,7 @@ static void gatt_le_connect_cback (UINT16 chan, BD_ADDR bd_addr, BOOLEAN connect gatt_add_a_bonded_dev_for_srv_chg(bd_addr); } } +#endif // #if (GATTS_INCLUDED == TRUE) if (connected) { /* do we have a channel initiating a connection? */ @@ -481,11 +485,11 @@ static void gatt_le_connect_cback (UINT16 chan, BD_ADDR bd_addr, BOOLEAN connect gatt_send_conn_cback(p_tcb); } - if (check_srv_chg) { #if (GATTS_INCLUDED == TRUE) + if (check_srv_chg) { gatt_chk_srv_chg (p_srv_chg_clt); -#endif ///GATTS_INCLUDED == TRUE } +#endif ///GATTS_INCLUDED == TRUE } /* this is incoming connection or background connection callback */ @@ -498,11 +502,11 @@ static void gatt_le_connect_cback (UINT16 chan, BD_ADDR bd_addr, BOOLEAN connect p_tcb->payload_size = GATT_DEF_BLE_MTU_SIZE; gatt_send_conn_cback (p_tcb); - if (check_srv_chg) { #if (GATTS_INCLUDED == TRUE) + if (check_srv_chg) { gatt_chk_srv_chg (p_srv_chg_clt); -#endif ///GATTS_INCLUDED == TRUE } +#endif ///GATTS_INCLUDED == TRUE } else { GATT_TRACE_ERROR("CCB max out, no resources"); } @@ -931,23 +935,23 @@ static void gatt_send_conn_cback(tGATT_TCB *p_tcb) { UINT8 i; tGATT_REG *p_reg; -#if (tGATT_BG_CONN_DEV == TRUE) +#if (GATT_BG_CONN_DEV == TRUE) tGATT_BG_CONN_DEV *p_bg_dev = NULL; -#endif // #if (tGATT_BG_CONN_DEV == TRUE) +#endif // #if (GATT_BG_CONN_DEV == TRUE) UINT16 conn_id; -#if (tGATT_BG_CONN_DEV == TRUE) +#if (GATT_BG_CONN_DEV == TRUE) p_bg_dev = gatt_find_bg_dev(p_tcb->peer_bda); -#endif // #if (tGATT_BG_CONN_DEV == TRUE) +#endif // #if (GATT_BG_CONN_DEV == TRUE) /* notifying all applications for the connection up event */ for (i = 0, p_reg = gatt_cb.cl_rcb ; i < GATT_MAX_APPS; i++, p_reg++) { if (p_reg->in_use) { -#if (tGATT_BG_CONN_DEV == TRUE) +#if (GATT_BG_CONN_DEV == TRUE) if (p_bg_dev && gatt_is_bg_dev_for_app(p_bg_dev, p_reg->gatt_if)) { gatt_update_app_use_link_flag(p_reg->gatt_if, p_tcb, TRUE, TRUE); } -#endif // #if (tGATT_BG_CONN_DEV == TRUE) +#endif // #if (GATT_BG_CONN_DEV == TRUE) if (p_reg->app_cb.p_conn_cb) { conn_id = GATT_CREATE_CONN_ID(p_tcb->tcb_idx, p_reg->gatt_if); (*p_reg->app_cb.p_conn_cb)(p_reg->gatt_if, p_tcb->peer_bda, conn_id, diff --git a/components/bt/host/bluedroid/stack/gatt/gatt_sr.c b/components/bt/host/bluedroid/stack/gatt/gatt_sr.c index 585a4c921a0..faa85bc9d1c 100644 --- a/components/bt/host/bluedroid/stack/gatt/gatt_sr.c +++ b/components/bt/host/bluedroid/stack/gatt/gatt_sr.c @@ -1633,33 +1633,6 @@ static void gatts_proc_srv_chg_ind_ack(tGATT_TCB *p_tcb ) } } -/******************************************************************************* -** -** Function gatts_chk_pending_ind -** -** Description This function check any pending indication needs to be sent if -** there is a pending indication then sent the indication -** -** Returns void -** -*******************************************************************************/ -static void gatts_chk_pending_ind(tGATT_TCB *p_tcb ) -{ -#if (GATTS_INCLUDED == TRUE) - tGATT_VALUE *p_buf = (tGATT_VALUE *)fixed_queue_try_peek_first(p_tcb->pending_ind_q); - GATT_TRACE_DEBUG("gatts_chk_pending_ind"); - - if (p_buf ) { - GATTS_HandleValueIndication (p_buf->conn_id, - p_buf->handle, - p_buf->len, - p_buf->value); - osi_free(fixed_queue_try_remove_from_queue(p_tcb->pending_ind_q, - p_buf)); - } -#endif ///GATTS_INCLUDED == TRUE -} - /******************************************************************************* ** ** Function gatts_proc_ind_ack @@ -1686,7 +1659,6 @@ static BOOLEAN gatts_proc_ind_ack(tGATT_TCB *p_tcb, UINT16 ack_handle) #endif /* GATTS_ROBUST_CACHING_ENABLED */ } - gatts_chk_pending_ind(p_tcb); return continue_processing; } diff --git a/components/bt/host/bluedroid/stack/gatt/gatt_utils.c b/components/bt/host/bluedroid/stack/gatt/gatt_utils.c index ae99c39a9fe..e950b67932e 100644 --- a/components/bt/host/bluedroid/stack/gatt/gatt_utils.c +++ b/components/bt/host/bluedroid/stack/gatt/gatt_utils.c @@ -80,30 +80,7 @@ static const UINT8 base_uuid[LEN_UUID_128] = {0xFB, 0x34, 0x9B, 0x5F, 0x80, 0x0 static UINT8 gatt_tcb_id[GATT_MAX_PHY_CHANNEL / 8 + 1]; -/******************************************************************************* -** -** Function gatt_free_pending_ind -** -** Description Free all pending indications -** -** Returns None -** -*******************************************************************************/ -void gatt_free_pending_ind(tGATT_TCB *p_tcb) -{ - GATT_TRACE_DEBUG("gatt_free_pending_ind"); - if (p_tcb->pending_ind_q == NULL) { - return; - } - - /* release all queued indications */ - while (!fixed_queue_is_empty(p_tcb->pending_ind_q)) { - osi_free(fixed_queue_dequeue(p_tcb->pending_ind_q, 0)); - } - fixed_queue_free(p_tcb->pending_ind_q, NULL); - p_tcb->pending_ind_q = NULL; -} - +#if (SMP_INCLUDED == TRUE) /******************************************************************************* ** ** Function gatt_free_pending_enc_queue @@ -127,7 +104,8 @@ void gatt_free_pending_enc_queue(tGATT_TCB *p_tcb) fixed_queue_free(p_tcb->pending_enc_clcb, NULL); p_tcb->pending_enc_clcb = NULL; } - +#endif // (SMP_INCLUDED == TRUE) +#if (GATTS_INCLUDED == TRUE) /******************************************************************************* ** ** Function gatt_free_pending_prepare_write_queue @@ -153,7 +131,9 @@ void gatt_free_pending_prepare_write_queue(tGATT_TCB *p_tcb) p_tcb->prepare_write_record.total_num = 0; p_tcb->prepare_write_record.error_code_app = GATT_SUCCESS; } +#endif // (GATTS_INCLUDED == TRUE) +#if (GATTS_INCLUDED == TRUE) /******************************************************************************* ** ** Function gatt_delete_dev_from_srv_chg_clt_list @@ -248,30 +228,9 @@ tGATTS_PENDING_NEW_SRV_START *gatt_sr_is_new_srv_chg(tBT_UUID *p_app_uuid128, tB return p_buf; } +#endif // (GATTS_INCLUDED == TRUE) - -/******************************************************************************* -** -** Function gatt_add_pending_ind -** -** Description Add a pending indication -** -** Returns Pointer to the current pending indication buffer, NULL no buffer available -** -*******************************************************************************/ -tGATT_VALUE *gatt_add_pending_ind(tGATT_TCB *p_tcb, tGATT_VALUE *p_ind) -{ - tGATT_VALUE *p_buf; - GATT_TRACE_DEBUG ("gatt_add_pending_ind"); - if ((p_buf = (tGATT_VALUE *)osi_malloc((UINT16)sizeof(tGATT_VALUE))) != NULL) { - GATT_TRACE_DEBUG ("enqueue a pending indication"); - memcpy(p_buf, p_ind, sizeof(tGATT_VALUE)); - fixed_queue_enqueue(p_tcb->pending_ind_q, p_buf, FIXED_QUEUE_MAX_TIMEOUT); - } - return p_buf; -} - - +#if (GATTS_INCLUDED == TRUE) /******************************************************************************* ** ** Function gatt_add_pending_new_srv_start @@ -327,7 +286,7 @@ tGATTS_SRV_CHG *gatt_add_srv_chg_clt(tGATTS_SRV_CHG *p_srv_chg) ** Returns Pointer to the allocated buffer, NULL no buffer available ** *******************************************************************************/ -#if (GATTS_INCLUDED == TRUE) + tGATT_HDL_LIST_ELEM *gatt_alloc_hdl_buffer(void) { UINT8 i; @@ -803,7 +762,7 @@ BOOLEAN gatt_find_the_connected_bda(UINT8 start_idx, BD_ADDR bda, UINT8 *p_found return found; } - +#if (GATTS_INCLUDED == TRUE) /******************************************************************************* ** ** Function gatt_is_srv_chg_ind_pending @@ -818,23 +777,10 @@ BOOLEAN gatt_is_srv_chg_ind_pending (tGATT_TCB *p_tcb) { BOOLEAN srv_chg_ind_pending = FALSE; - GATT_TRACE_DEBUG("gatt_is_srv_chg_ind_pending is_queue_empty=%d", - fixed_queue_is_empty(p_tcb->pending_ind_q)); + GATT_TRACE_DEBUG("gatt_is_srv_chg_ind_pending is_queue_empty=%d_%d", p_tcb->indicate_handle, gatt_cb.handle_of_h_r); if (p_tcb->indicate_handle == gatt_cb.handle_of_h_r) { srv_chg_ind_pending = TRUE; - } else if (! fixed_queue_is_empty(p_tcb->pending_ind_q)) { - list_t *list = fixed_queue_get_list(p_tcb->pending_ind_q); - for (const list_node_t *node = list_begin(list); - node != list_end(list); - node = list_next(node)) { - tGATT_VALUE *p_buf = (tGATT_VALUE *)list_node(node); - if (p_buf->handle == gatt_cb.handle_of_h_r) - { - srv_chg_ind_pending = TRUE; - break; - } - } } GATT_TRACE_DEBUG("srv_chg_ind_pending = %d", srv_chg_ind_pending); @@ -874,7 +820,7 @@ tGATTS_SRV_CHG *gatt_is_bda_in_the_srv_chg_clt_list (BD_ADDR bda) return p_buf; } - +#endif // (GATTS_INCLUDED == TRUE) /******************************************************************************* ** @@ -1083,8 +1029,9 @@ tGATT_TCB *gatt_allocate_tcb_by_bdaddr(BD_ADDR bda, tBT_TRANSPORT transport) } if (allocated) { memset(p_tcb, 0, sizeof(tGATT_TCB)); +#if (SMP_INCLUDED == TRUE) p_tcb->pending_enc_clcb = fixed_queue_new(QUEUE_SIZE_MAX); - p_tcb->pending_ind_q = fixed_queue_new(QUEUE_SIZE_MAX); +#endif // (SMP_INCLUDED == TRUE) p_tcb->in_use = TRUE; p_tcb->tcb_idx = i; p_tcb->transport = transport; @@ -1300,6 +1247,8 @@ void gatt_start_rsp_timer(UINT16 clcb_idx) btu_start_timer (&p_clcb->rsp_timer_ent, BTU_TTYPE_ATT_WAIT_FOR_RSP, GATT_WAIT_FOR_RSP_TOUT); } + +#if (GATTS_INCLUDED == TRUE) /******************************************************************************* ** ** Function gatt_start_conf_timer @@ -1315,6 +1264,9 @@ void gatt_start_conf_timer(tGATT_TCB *p_tcb) btu_start_timer (&p_tcb->conf_timer_ent, BTU_TTYPE_ATT_WAIT_FOR_RSP, GATT_WAIT_FOR_RSP_TOUT); } +#endif // (GATTS_INCLUDED == TRUE) + +#if (GATTC_INCLUDED == TRUE) /******************************************************************************* ** ** Function gatt_start_ind_ack_timer @@ -1332,6 +1284,7 @@ void gatt_start_ind_ack_timer(tGATT_TCB *p_tcb) GATT_WAIT_FOR_IND_ACK_TOUT); } + /******************************************************************************* ** ** Function gatt_rsp_timeout @@ -1390,6 +1343,9 @@ void gatt_ind_ack_timeout(TIMER_LIST_ENT *p_tle) attp_send_cl_msg(((tGATT_TCB *)p_tle->param), 0, GATT_HANDLE_VALUE_CONF, NULL); } +#endif // (GATTC_INCLUDED == TRUE) + +#if (GATTS_INCLUDED == TRUE) /******************************************************************************* ** ** Function gatt_sr_find_i_rcb_by_handle @@ -1422,7 +1378,7 @@ UINT8 gatt_sr_find_i_rcb_by_handle(UINT16 handle) ** Returns GATT_MAX_SR_PROFILES if not found. Otherwise index of th eservice. ** *******************************************************************************/ -#if (GATTS_INCLUDED == TRUE) + UINT8 gatt_sr_find_i_rcb_by_app_id(tBT_UUID *p_app_uuid128, tBT_UUID *p_svc_uuid, UINT16 svc_inst) { UINT8 i_rcb = 0; @@ -1446,7 +1402,7 @@ UINT8 gatt_sr_find_i_rcb_by_app_id(tBT_UUID *p_app_uuid128, tBT_UUID *p_svc_uuid } return i_rcb; } -#endif ///GATTS_INCLUDED == TRUE + /******************************************************************************* ** ** Function gatt_sr_find_i_rcb_by_handle @@ -1482,6 +1438,7 @@ UINT8 gatt_sr_alloc_rcb(tGATT_HDL_LIST_ELEM *p_list ) return ii; } +#endif ///GATTS_INCLUDED == TRUE /******************************************************************************* ** ** Function gatt_sr_get_sec_info @@ -2145,6 +2102,7 @@ BOOLEAN gatt_find_specific_app_in_hold_link(tGATT_TCB *p_tcb, tGATT_IF p_gatt_if return found; } +#if (GATTC_INCLUDED == TRUE) /******************************************************************************* ** ** Function gatt_cmd_enq @@ -2198,6 +2156,7 @@ tGATT_CLCB *gatt_cmd_dequeue(tGATT_TCB *p_tcb, UINT8 *p_op_code) return p_clcb; } +#endif // (GATTC_INCLUDED == TRUE) /******************************************************************************* ** @@ -2366,16 +2325,22 @@ void gatt_cleanup_upon_disc(BD_ADDR bda, UINT16 reason, tBT_TRANSPORT transport) gatt_clcb_dealloc(p_clcb); } } - +#if (GATTC_INCLUDED == TRUE) btu_free_timer (&p_tcb->ind_ack_timer_ent); +#endif // #if (GATTC_INCLUDED == TRUE) +#if (GATTS_INCLUDED == TRUE) btu_free_timer (&p_tcb->conf_timer_ent); - gatt_free_pending_ind(p_tcb); +#endif // (GATTS_INCLUDED == TRUE) +#if (SMP_INCLUDED == TRUE) gatt_free_pending_enc_queue(p_tcb); +#endif // (SMP_INCLUDED == TRUE) +#if (GATTS_INCLUDED == TRUE) gatt_free_pending_prepare_write_queue(p_tcb); -#if (GATTS_INCLUDED) +#endif // (GATTS_INCLUDED == TRUE) +#if (GATTS_INCLUDED == TRUE) fixed_queue_free(p_tcb->sr_cmd.multi_rsp_q, osi_free_func); p_tcb->sr_cmd.multi_rsp_q = NULL; -#endif /* #if (GATTS_INCLUDED) */ +#endif /* #if (GATTS_INCLUDED == TRUE) */ for (i = 0; i < GATT_MAX_APPS; i ++) { p_reg = &gatt_cb.cl_rcb[i]; if (p_reg->in_use && p_reg->app_cb.p_conn_cb) { @@ -2389,7 +2354,9 @@ void gatt_cleanup_upon_disc(BD_ADDR bda, UINT16 reason, tBT_TRANSPORT transport) GATT_TRACE_DEBUG ("exit gatt_cleanup_upon_disc "); BTM_Recovery_Pre_State(); } +#if (GATTS_INCLUDED == TRUE) gatt_delete_dev_from_srv_chg_clt_list(bda); +#endif // (GATTS_INCLUDED == TRUE) } /******************************************************************************* ** @@ -2457,7 +2424,7 @@ void gatt_dbg_display_uuid(tBT_UUID bt_uuid) } -#if (tGATT_BG_CONN_DEV == TRUE) +#if (GATT_BG_CONN_DEV == TRUE) /******************************************************************************* ** ** Function gatt_is_bg_dev_for_app @@ -2838,9 +2805,9 @@ BOOLEAN gatt_update_auto_connect_dev (tGATT_IF gatt_if, BOOLEAN add, BD_ADDR bd_ } return ret; } -#endif // #if (tGATT_BG_CONN_DEV == TRUE) - +#endif // #if (GATT_BG_CONN_DEV == TRUE) +#if (SMP_INCLUDED == TRUE) /******************************************************************************* ** ** Function gatt_add_pending_new_srv_start @@ -2858,57 +2825,11 @@ tGATT_PENDING_ENC_CLCB *gatt_add_pending_enc_channel_clcb(tGATT_TCB *p_tcb, tGAT if ((p_buf = (tGATT_PENDING_ENC_CLCB *)osi_malloc((UINT16)sizeof(tGATT_PENDING_ENC_CLCB))) != NULL) { GATT_TRACE_DEBUG ("enqueue a new pending encryption channel clcb"); p_buf->p_clcb = p_clcb; - fixed_queue_enqueue(p_tcb->pending_enc_clcb, p_buf, FIXED_QUEUE_MAX_TIMEOUT); + fixed_queue_enqueue(p_tcb->pending_enc_clcb, p_buf, FIXED_QUEUE_MAX_TIMEOUT); } return p_buf; } -/******************************************************************************* -** -** Function gatt_update_listen_mode -** -** Description update peripheral role listening mode -** -** Returns Pointer to the new service start buffer, NULL no buffer available -** -*******************************************************************************/ -BOOLEAN gatt_update_listen_mode(void) -{ - UINT8 ii = 0; - tGATT_REG *p_reg = &gatt_cb.cl_rcb[0]; - UINT8 listening = 0; - UINT16 connectability, window, interval; - BOOLEAN rt = TRUE; - - for (; ii < GATT_MAX_APPS; ii ++, p_reg ++) { - if ( p_reg->in_use && p_reg->listening > listening) { - listening = p_reg->listening; - } - } - - if (listening == GATT_LISTEN_TO_ALL || - listening == GATT_LISTEN_TO_NONE) { - BTM_BleUpdateAdvFilterPolicy (AP_SCAN_CONN_ALL); - } else { - BTM_BleUpdateAdvFilterPolicy (AP_SCAN_CONN_WL); - } - - if (rt) { - connectability = BTM_ReadConnectability (&window, &interval); - - if (listening != GATT_LISTEN_TO_NONE) { - connectability |= BTM_BLE_CONNECTABLE; - } else { - if ((connectability & BTM_BLE_CONNECTABLE) == 0) { - connectability &= ~BTM_BLE_CONNECTABLE; - } - } - /* turning on the adv now */ - btm_ble_set_connectability(connectability); - } - - return rt; - -} +#endif // (SMP_INCLUDED == TRUE) char *gatt_uuid_to_str(const tBT_UUID *uuid) { diff --git a/components/bt/host/bluedroid/stack/gatt/include/gatt_int.h b/components/bt/host/bluedroid/stack/gatt/include/gatt_int.h index 8701c746d10..933312a46eb 100644 --- a/components/bt/host/bluedroid/stack/gatt/include/gatt_int.h +++ b/components/bt/host/bluedroid/stack/gatt/include/gatt_int.h @@ -376,8 +376,11 @@ typedef struct{ }tGATT_PREPARE_WRITE_RECORD; typedef struct { +#if (SMP_INCLUDED == TRUE) fixed_queue_t *pending_enc_clcb; /* pending encryption channel q */ tGATT_SEC_ACTION sec_act; +#endif // (SMP_INCLUDED == TRUE) + BD_ADDR peer_bda; tBT_TRANSPORT transport; UINT32 trans_id; @@ -394,30 +397,33 @@ typedef struct { /* server response data */ #if (GATTS_INCLUDED == TRUE) tGATT_SR_CMD sr_cmd; -#endif ///GATTS_INCLUDED == TRUE UINT16 indicate_handle; - fixed_queue_t *pending_ind_q; TIMER_LIST_ENT conf_timer_ent; /* peer confirm to indication timer */ +#endif ///GATTS_INCLUDED == TRUE UINT8 prep_cnt[GATT_MAX_APPS]; +#if (GATTC_INCLUDED == TRUE) UINT8 ind_count; tGATT_CMD_Q cl_cmd_q[GATT_CL_MAX_LCB]; TIMER_LIST_ENT ind_ack_timer_ent; /* local app confirm to indication timer */ +#endif // (GATTC_INCLUDED == TRUE) UINT8 pending_cl_req; UINT8 next_slot_inq; /* index of next available slot in queue */ - +#if (GATTS_ROBUST_CACHING_ENABLED == TRUE) /* client supported feature */ UINT8 cl_supp_feat; /* server supported feature */ UINT8 sr_supp_feat; /* if false, should handle database out of sync */ BOOLEAN is_robust_cache_change_aware; - +#endif // (GATTS_ROBUST_CACHING_ENABLED == TRUE) BOOLEAN in_use; UINT8 tcb_idx; +#if (GATTS_INCLUDED == TRUE) tGATT_PREPARE_WRITE_RECORD prepare_write_record; /* prepare write packets record */ +#endif // (GATTS_INCLUDED == TRUE) } tGATT_TCB; @@ -483,14 +489,14 @@ typedef struct { UINT32 service_change; } tGATT_SVC_CHG; -#if (tGATT_BG_CONN_DEV == TRUE) +#if (GATT_BG_CONN_DEV == TRUE) typedef struct { tGATT_IF gatt_if[GATT_MAX_APPS]; tGATT_IF listen_gif[GATT_MAX_APPS]; BD_ADDR remote_bda; BOOLEAN in_use; } tGATT_BG_CONN_DEV; -#endif // #if (tGATT_BG_CONN_DEV == TRUE) +#endif // #if (GATT_BG_CONN_DEV == TRUE) #define GATT_SVC_CHANGED_CONNECTING 1 /* wait for connection */ #define GATT_SVC_CHANGED_SERVICE 2 /* GATT service discovery */ @@ -514,11 +520,11 @@ typedef struct { typedef struct { list_t *p_tcb_list; - fixed_queue_t *sign_op_queue; - +#if (GATTS_INCLUDED == TRUE) tGATT_SR_REG sr_reg[GATT_MAX_SR_PROFILES]; UINT16 next_handle; /* next available handle */ tGATT_SVC_CHG gattp_attr; /* GATT profile attribute service change */ +#endif // (GATTS_INCLUDED == TRUE) tGATT_IF gatt_if; #if (GATTS_INCLUDED == TRUE) tGATT_HDL_LIST_INFO hdl_list_info; @@ -526,13 +532,13 @@ typedef struct { tGATT_SRV_LIST_INFO srv_list_info; tGATT_SRV_LIST_ELEM srv_list[GATT_MAX_SR_PROFILES]; #endif ///GATTS_INCLUDED == TRUE +#if (GATTS_INCLUDED == TRUE) fixed_queue_t *srv_chg_clt_q; /* service change clients queue */ fixed_queue_t *pending_new_srv_start_q; /* pending new service start queue */ +#endif // (GATTS_INCLUDED == TRUE) tGATT_REG cl_rcb[GATT_MAX_APPS]; list_t *p_clcb_list; /* connection link control block*/ - tGATT_SCCB sccb[GATT_MAX_SCCB]; /* sign complete callback function GATT_MAX_SCCB <= GATT_CL_MAX_LCB */ UINT8 trace_level; - UINT16 def_mtu_size; #if GATT_CONFORMANCE_TESTING == TRUE BOOLEAN enable_err_rsp; @@ -556,14 +562,19 @@ typedef struct { tGATT_APPL_INFO cb_info; - +#if (GATTS_INCLUDED == TRUE) tGATT_HDL_CFG hdl_cfg; -#if (tGATT_BG_CONN_DEV == TRUE) +#endif // (GATTS_INCLUDED == TRUE) +#if (GATT_BG_CONN_DEV == TRUE) tGATT_BG_CONN_DEV bgconn_dev[GATT_MAX_BG_CONN_DEV]; -#endif // #if (tGATT_BG_CONN_DEV == TRUE) +#endif // #if (GATT_BG_CONN_DEV == TRUE) +#if (GATTC_INCLUDED == TRUE) BOOLEAN auto_disc; /* internal use: true for auto discovering after connected */ +#endif // (GATTC_INCLUDED == TRUE) +#if (GATTS_INCLUDED == TRUE) UINT8 srv_chg_mode; /* internal use: service change mode */ tGATTS_RSP rsp; /* use to read internal service attribute */ +#endif // (GATTS_INCLUDED == TRUE) } tGATT_CB; typedef struct{ @@ -652,10 +663,8 @@ extern tGATTS_SRV_CHG *gatt_is_bda_in_the_srv_chg_clt_list (BD_ADDR bda); extern BOOLEAN gatt_find_the_connected_bda(UINT8 start_idx, BD_ADDR bda, UINT8 *p_found_idx, tBT_TRANSPORT *p_transport); extern void gatt_set_srv_chg(void); extern void gatt_delete_dev_from_srv_chg_clt_list(BD_ADDR bd_addr); -extern tGATT_VALUE *gatt_add_pending_ind(tGATT_TCB *p_tcb, tGATT_VALUE *p_ind); extern tGATTS_PENDING_NEW_SRV_START *gatt_add_pending_new_srv_start( tGATTS_HNDL_RANGE *p_new_srv_start); extern void gatt_free_srvc_db_buffer_app_id(tBT_UUID *p_app_id); -extern BOOLEAN gatt_update_listen_mode(void); extern BOOLEAN gatt_cl_send_next_cmd_inq(tGATT_TCB *p_tcb); /* reserved handle list */ @@ -673,7 +682,7 @@ extern BOOLEAN gatt_add_an_item_to_list(tGATT_HDL_LIST_INFO *p_list, tGATT_HDL_L extern BOOLEAN gatt_remove_an_item_from_list(tGATT_HDL_LIST_INFO *p_list, tGATT_HDL_LIST_ELEM *p_remove); extern tGATTS_SRV_CHG *gatt_add_srv_chg_clt(tGATTS_SRV_CHG *p_srv_chg); -#if (tGATT_BG_CONN_DEV == TRUE) +#if (GATT_BG_CONN_DEV == TRUE) /* for background connection */ extern BOOLEAN gatt_update_auto_connect_dev (tGATT_IF gatt_if, BOOLEAN add, BD_ADDR bd_addr, BOOLEAN is_initiator); extern BOOLEAN gatt_is_bg_dev_for_app(tGATT_BG_CONN_DEV *p_dev, tGATT_IF gatt_if); @@ -683,7 +692,7 @@ extern BOOLEAN gatt_find_app_for_bg_dev(BD_ADDR bd_addr, tGATT_IF *p_gatt_if); extern tGATT_BG_CONN_DEV *gatt_find_bg_dev(BD_ADDR remote_bda); extern void gatt_deregister_bgdev_list(tGATT_IF gatt_if); extern void gatt_reset_bgdev_list(void); -#endif // #if (tGATT_BG_CONN_DEV == TRUE) +#endif // #if (GATT_BG_CONN_DEV == TRUE) /* server function */ extern UINT8 gatt_sr_find_i_rcb_by_handle(UINT16 handle); diff --git a/components/bt/host/bluedroid/stack/include/stack/btm_api.h b/components/bt/host/bluedroid/stack/include/stack/btm_api.h index 3415df5de39..3f932d087db 100644 --- a/components/bt/host/bluedroid/stack/include/stack/btm_api.h +++ b/components/bt/host/bluedroid/stack/include/stack/btm_api.h @@ -80,19 +80,6 @@ enum { typedef uint8_t tBTM_STATUS; -#if (defined(BTA_HOST_INTERLEAVE_SEARCH) && BTA_HOST_INTERLEAVE_SEARCH == TRUE) -typedef enum { - BTM_BR_ONE, /*0 First state or BR/EDR scan 1*/ - BTM_BLE_ONE, /*1BLE scan 1*/ - BTM_BR_TWO, /*2 BR/EDR scan 2*/ - BTM_BLE_TWO, /*3 BLE scan 2*/ - BTM_FINISH, /*4 End of Interleave Scan, or normal scan*/ - BTM_NO_INTERLEAVING /*5 No Interleaving*/ -} btm_inq_state; -#endif - - - /************************* ** Device Control Types **************************/ @@ -647,9 +634,6 @@ typedef struct { /* contains the parameters passed to the inquiry fun BOOLEAN report_dup; /* report duplicated inquiry response with higher RSSI value */ UINT8 filter_cond_type; /* new devices, BD ADDR, COD, or No filtering */ tBTM_INQ_FILT_COND filter_cond; /* filter value based on filter cond type */ -#if (defined(BTA_HOST_INTERLEAVE_SEARCH) && BTA_HOST_INTERLEAVE_SEARCH == TRUE) - UINT8 intl_duration[4]; /*duration array storing the interleave scan's time portions*/ -#endif } tBTM_INQ_PARMS; #define BTM_INQ_RESULT_BR 0x01 @@ -3046,28 +3030,6 @@ tBTM_STATUS BTM_ReadRSSI (BD_ADDR remote_bda, tBT_TRANSPORT transport, tBTM_CMPL ** *******************************************************************************/ tBTM_STATUS BTM_ReadChannelMap(BD_ADDR remote_bda, tBTM_CMPL_CB *p_cb); -#if (BLE_HOST_READ_TX_POWER_EN == TRUE) -/******************************************************************************* -** -** Function BTM_ReadTxPower -** -** Description This function is called to read the current connection -** TX power of the connection. The TX power level results -** are returned in the callback. -** (tBTM_RSSI_RESULTS) -** -** Returns BTM_CMD_STARTED if command issued to controller. -** BTM_NO_RESOURCES if couldn't allocate memory to issue command -** BTM_UNKNOWN_ADDR if no active link with bd addr specified -** BTM_BUSY if command is already in progress -** -*******************************************************************************/ -//extern -tBTM_STATUS BTM_ReadTxPower (BD_ADDR remote_bda, - tBT_TRANSPORT transport, tBTM_CMPL_CB *p_cb); - -tBTM_STATUS BTM_BleReadAdvTxPower(tBTM_CMPL_CB *p_cb); -#endif // #if (BLE_HOST_READ_TX_POWER_EN == TRUE) void BTM_BleGetWhiteListSize(uint16_t *length); diff --git a/components/bt/host/bluedroid/stack/include/stack/btm_ble_api.h b/components/bt/host/bluedroid/stack/include/stack/btm_ble_api.h index 33522b7aef6..eaefaf6a798 100644 --- a/components/bt/host/bluedroid/stack/include/stack/btm_ble_api.h +++ b/components/bt/host/bluedroid/stack/include/stack/btm_ble_api.h @@ -57,13 +57,6 @@ typedef UINT32 tBTM_BLE_REF_VALUE; #define BTM_BLE_SCAN_MODE_NONE 0xff typedef UINT8 tBLE_SCAN_MODE; -#define BTM_BLE_BATCH_SCAN_MODE_DISABLE 0 -#define BTM_BLE_BATCH_SCAN_MODE_PASS 1 -#define BTM_BLE_BATCH_SCAN_MODE_ACTI 2 -#define BTM_BLE_BATCH_SCAN_MODE_PASS_ACTI 3 - -typedef UINT8 tBTM_BLE_BATCH_SCAN_MODE; - /* advertising channel map */ #define BTM_BLE_ADV_CHNL_37 (0x01 << 0) #define BTM_BLE_ADV_CHNL_38 (0x01 << 1) @@ -129,8 +122,6 @@ typedef UINT8 tBTM_BLE_SFP; #define BTM_BLE_SCAN_INT_MAX 0x4000 #define BTM_BLE_SCAN_WIN_MIN 0x0004 #define BTM_BLE_SCAN_WIN_MAX 0x4000 -#define BTM_BLE_EXT_SCAN_INT_MAX 0x00FFFFFF -#define BTM_BLE_EXT_SCAN_WIN_MAX 0xFFFF #define BTM_BLE_CONN_INT_MIN 0x0006 #define BTM_BLE_CONN_INT_MAX 0x0C80 #define BTM_BLE_CONN_LATENCY_MAX 499 @@ -393,22 +384,7 @@ typedef UINT8 tBTM_BLE_AD_TYPE; typedef UINT8 tBTM_BLE_ADV_TX_POWER; /* adv tx power in dBm */ -typedef struct { -#if (BLE_HOST_BLE_MULTI_ADV_EN == TRUE) - UINT8 adv_inst_max; /* max adv instance supported in controller */ -#endif // #if (BLE_HOST_BLE_MULTI_ADV_EN == TRUE) - UINT8 rpa_offloading; - UINT16 tot_scan_results_strg; - UINT8 max_irk_list_sz; - UINT8 filter_support; - UINT8 max_filter; - UINT8 energy_support; - BOOLEAN values_read; - UINT16 version_supported; - UINT16 total_trackable_advertisers; - UINT8 extended_scan_support; - UINT8 debug_logging_supported; -} tBTM_BLE_VSC_CB; + /* slave preferred connection interval range */ typedef struct { @@ -500,40 +476,6 @@ typedef struct { tBTM_BLE_ADV_TX_POWER tx_power; } tBTM_BLE_ADV_PARAMS; -#if (BLE_HOST_BLE_MULTI_ADV_EN == TRUE) -typedef struct { - UINT8 *p_sub_code; /* dynamic array to store sub code */ - UINT8 *p_inst_id; /* dynamic array to store instance id */ - UINT8 pending_idx; - UINT8 next_idx; -} tBTM_BLE_MULTI_ADV_OPQ; - -typedef void (tBTM_BLE_MULTI_ADV_CBACK)(tBTM_BLE_MULTI_ADV_EVT evt, UINT8 inst_id, - void *p_ref, tBTM_STATUS status); - -typedef struct { - UINT8 inst_id; - BOOLEAN in_use; - UINT8 adv_evt; - BD_ADDR rpa; - TIMER_LIST_ENT raddr_timer_ent; - tBTM_BLE_MULTI_ADV_CBACK *p_cback; - void *p_ref; - UINT8 index; -} tBTM_BLE_MULTI_ADV_INST; - -typedef struct { - UINT8 inst_index_queue[BTM_BLE_MULTI_ADV_MAX]; - int front; - int rear; -} tBTM_BLE_MULTI_ADV_INST_IDX_Q; - -typedef struct { - tBTM_BLE_MULTI_ADV_INST *p_adv_inst; /* dynamic array to store adv instance */ - tBTM_BLE_MULTI_ADV_OPQ op_q; -} tBTM_BLE_MULTI_ADV_CB; -#endif // #if (BLE_HOST_BLE_MULTI_ADV_EN == TRUE) - typedef UINT8 tGATT_IF; typedef void (tBTM_BLE_SCAN_THRESHOLD_CBACK)(tBTM_BLE_REF_VALUE ref_value); @@ -542,60 +484,17 @@ typedef void (tBTM_BLE_SCAN_REP_CBACK)(tBTM_BLE_REF_VALUE ref_value, UINT8 repor UINT8 *p_rep_data, UINT8 status); typedef void (tBTM_BLE_SCAN_SETUP_CBACK)(UINT8 evt, tBTM_BLE_REF_VALUE ref_value, UINT8 status); -#ifndef BTM_BLE_BATCH_SCAN_MAX -#define BTM_BLE_BATCH_SCAN_MAX 5 -#endif #ifndef BTM_BLE_BATCH_REP_MAIN_Q_SIZE #define BTM_BLE_BATCH_REP_MAIN_Q_SIZE 2 #endif -typedef enum { - BTM_BLE_SCAN_INVALID_STATE = 0, - BTM_BLE_SCAN_ENABLE_CALLED = 1, - BTM_BLE_SCAN_ENABLED_STATE = 2, - BTM_BLE_SCAN_DISABLE_CALLED = 3, - BTM_BLE_SCAN_DISABLED_STATE = 4 -} tBTM_BLE_BATCH_SCAN_STATE; - enum { BTM_BLE_DISCARD_OLD_ITEMS, BTM_BLE_DISCARD_LOWER_RSSI_ITEMS }; typedef UINT8 tBTM_BLE_DISCARD_RULE; -typedef struct { - UINT8 sub_code[BTM_BLE_BATCH_SCAN_MAX]; - tBTM_BLE_BATCH_SCAN_STATE cur_state[BTM_BLE_BATCH_SCAN_MAX]; - tBTM_BLE_REF_VALUE ref_value[BTM_BLE_BATCH_SCAN_MAX]; - UINT8 pending_idx; - UINT8 next_idx; -} tBTM_BLE_BATCH_SCAN_OPQ; - -typedef struct { - UINT8 rep_mode[BTM_BLE_BATCH_REP_MAIN_Q_SIZE]; - tBTM_BLE_REF_VALUE ref_value[BTM_BLE_BATCH_REP_MAIN_Q_SIZE]; - UINT8 num_records[BTM_BLE_BATCH_REP_MAIN_Q_SIZE]; - UINT16 data_len[BTM_BLE_BATCH_REP_MAIN_Q_SIZE]; - UINT8 *p_data[BTM_BLE_BATCH_REP_MAIN_Q_SIZE]; - UINT8 pending_idx; - UINT8 next_idx; -} tBTM_BLE_BATCH_SCAN_REP_Q; - -typedef struct { - tBTM_BLE_BATCH_SCAN_STATE cur_state; - tBTM_BLE_BATCH_SCAN_MODE scan_mode; - UINT32 scan_interval; - UINT32 scan_window; - tBLE_ADDR_TYPE addr_type; - tBTM_BLE_DISCARD_RULE discard_rule; - tBTM_BLE_BATCH_SCAN_OPQ op_q; - tBTM_BLE_BATCH_SCAN_REP_Q main_rep_q; - tBTM_BLE_SCAN_SETUP_CBACK *p_setup_cback; - tBTM_BLE_SCAN_THRESHOLD_CBACK *p_thres_cback; - tBTM_BLE_SCAN_REP_CBACK *p_scan_rep_cback; - tBTM_BLE_REF_VALUE ref_value; -} tBTM_BLE_BATCH_SCAN_CB; /// Ble scan duplicate type enum { @@ -959,53 +858,7 @@ typedef UINT8 tBTM_BLE_CONN_TYPE; #define ADV_INFO_PRESENT 0x00 #define NO_ADV_INFO_PRESENT 0x01 -#if (BLE_HOST_TRACK_ADVERTISER_EN == TRUE) -typedef btgatt_track_adv_info_t tBTM_BLE_TRACK_ADV_DATA; - -typedef void (tBTM_BLE_TRACK_ADV_CBACK)(tBTM_BLE_TRACK_ADV_DATA *p_track_adv_data); - -typedef UINT8 tBTM_BLE_TRACK_ADV_EVT; - -typedef struct { - tBTM_BLE_REF_VALUE ref_value; - tBTM_BLE_TRACK_ADV_CBACK *p_track_cback; -} tBTM_BLE_ADV_TRACK_CB; - -enum { - BTM_BLE_TRACK_ADV_ADD, - BTM_BLE_TRACK_ADV_REMOVE -}; - -typedef UINT8 tBTM_BLE_TRACK_ADV_ACTION; -#endif // #if (BLE_HOST_TRACK_ADVERTISER_EN == TRUE) - -#define BTM_BLE_MULTI_ADV_INVALID 0 - -#define BTM_BLE_BATCH_SCAN_ENABLE_EVT 1 -#define BTM_BLE_BATCH_SCAN_CFG_STRG_EVT 2 -#define BTM_BLE_BATCH_SCAN_READ_REPTS_EVT 3 -#define BTM_BLE_BATCH_SCAN_THR_EVT 4 -#define BTM_BLE_BATCH_SCAN_PARAM_EVT 5 -#define BTM_BLE_BATCH_SCAN_DISABLE_EVT 6 - -typedef UINT8 tBTM_BLE_BATCH_SCAN_EVT; - -typedef UINT32 tBTM_BLE_TX_TIME_MS; -typedef UINT32 tBTM_BLE_RX_TIME_MS; -typedef UINT32 tBTM_BLE_IDLE_TIME_MS; -typedef UINT32 tBTM_BLE_ENERGY_USED; - -typedef void (tBTM_BLE_ENERGY_INFO_CBACK)(tBTM_BLE_TX_TIME_MS tx_time, tBTM_BLE_RX_TIME_MS rx_time, - tBTM_BLE_IDLE_TIME_MS idle_time, - tBTM_BLE_ENERGY_USED energy_used, - tBTM_STATUS status); - -typedef struct { - tBTM_BLE_ENERGY_INFO_CBACK *p_ener_cback; -} tBTM_BLE_ENERGY_INFO_CB; - typedef BOOLEAN (tBTM_BLE_SEL_CBACK)(BD_ADDR random_bda, UINT8 *p_remote_name); -typedef void (tBTM_BLE_CTRL_FEATURES_CBACK)(tBTM_STATUS status); /* callback function for SMP signing algorithm, signed data in little endian order with tlen bits long */ typedef void (tBTM_BLE_SIGN_CBACK)(void *p_ref_data, UINT8 *p_signing_data); @@ -1016,8 +869,6 @@ typedef void (tBTM_BLE_RANDOM_SET_CBACK) (BD_ADDR random_bda); typedef void (tBTM_BLE_SCAN_REQ_CBACK)(BD_ADDR remote_bda, tBLE_ADDR_TYPE addr_type, UINT8 adv_evt); typedef void (*tBLE_SCAN_PARAM_SETUP_CBACK)(tGATT_IF client_if, tBTM_STATUS status); -tBTM_BLE_SCAN_SETUP_CBACK bta_ble_scan_setup_cb; - typedef void (tBTM_START_ADV_CMPL_CBACK) (UINT8 status); typedef void (tBTM_START_STOP_ADV_CMPL_CBACK) (UINT8 status); @@ -2218,61 +2069,6 @@ tBTM_STATUS BTM_BleSetRandAddress(BD_ADDR rand_addr); void BTM_BleClearRandAddress(void); -/******************************************************************************* -** -** Function BTM_BleSetAdvParams -** -** Description This function is called to set advertising parameters. -** -** Parameters adv_int_min: minimum advertising interval -** adv_int_max: maximum advertising interval -** p_dir_bda: connectable direct initiator's LE device address -** chnl_map: advertising channel map. -** -** Returns void -** -*******************************************************************************/ -//extern -void BTM_BleReadAdvParams (UINT16 *adv_int_min, UINT16 *adv_int_max, - tBLE_BD_ADDR *p_dir_bda, tBTM_BLE_ADV_CHNL_MAP *p_chnl_map); - -/******************************************************************************* -** -** Function BTM_BleObtainVendorCapabilities -** -** Description This function is called to obtain vendor capabilities -** -** Parameters p_cmn_vsc_cb - Returns the vendor capabilities -** -** Returns void -** -*******************************************************************************/ -//extern -void BTM_BleObtainVendorCapabilities(tBTM_BLE_VSC_CB *p_cmn_vsc_cb); - -#if (BLE_HOST_BLE_SCAN_PARAM_UNUSED == TRUE) -/******************************************************************************* -** -** Function BTM_BleSetScanParams -** -** Description This function is called to set Scan parameters. -** -** Parameters client_if - Client IF value -** scan_interval - Scan interval -** scan_window - Scan window -** scan_type - Scan type -** scan_setup_status_cback - Scan setup status callback -** -** Returns void -** -*******************************************************************************/ -//extern -void BTM_BleSetScanParams(tGATT_IF client_if, UINT32 scan_interval, - UINT32 scan_window, tBLE_SCAN_MODE scan_type, - tBLE_SCAN_PARAM_SETUP_CBACK scan_setup_status_cback); - -#endif // #if (BLE_HOST_BLE_SCAN_PARAM_UNUSED == TRUE) - /******************************************************************************* ** ** Function BTM_BleSetScanFilterParams @@ -2296,116 +2092,6 @@ tBTM_STATUS BTM_BleSetScanFilterParams(tGATT_IF client_if, UINT32 scan_interval, tBLE_SCAN_PARAM_SETUP_CBACK scan_setup_status_cback); -/******************************************************************************* -** -** Function BTM_BleGetVendorCapabilities -** -** Description This function reads local LE features -** -** Parameters p_cmn_vsc_cb : Locala LE capability structure -** -** Returns void -** -*******************************************************************************/ -//extern -void BTM_BleGetVendorCapabilities(tBTM_BLE_VSC_CB *p_cmn_vsc_cb); -/******************************************************************************* -** -** Function BTM_BleSetStorageConfig -** -** Description This function is called to setup storage configuration and setup callbacks. -** -** Parameters UINT8 batch_scan_full_max -Batch scan full maximum - UINT8 batch_scan_trunc_max - Batch scan truncated value maximum - UINT8 batch_scan_notify_threshold - Threshold value - tBTM_BLE_SCAN_SETUP_CBACK *p_setup_cback - Setup callback - tBTM_BLE_SCAN_THRESHOLD_CBACK *p_thres_cback -Threshold callback - void *p_ref - Reference value -** -** Returns tBTM_STATUS -** -*******************************************************************************/ -//extern -tBTM_STATUS BTM_BleSetStorageConfig(UINT8 batch_scan_full_max, - UINT8 batch_scan_trunc_max, - UINT8 batch_scan_notify_threshold, - tBTM_BLE_SCAN_SETUP_CBACK *p_setup_cback, - tBTM_BLE_SCAN_THRESHOLD_CBACK *p_thres_cback, - tBTM_BLE_SCAN_REP_CBACK *p_cback, - tBTM_BLE_REF_VALUE ref_value); - -/******************************************************************************* -** -** Function BTM_BleEnableBatchScan -** -** Description This function is called to enable batch scan -** -** Parameters tBTM_BLE_BATCH_SCAN_MODE scan_mode - Batch scan mode - UINT32 scan_interval -Scan interval - UINT32 scan_window - Scan window value - tBLE_ADDR_TYPE addr_type - Address type - tBTM_BLE_DISCARD_RULE discard_rule - Data discard rules -** -** Returns tBTM_STATUS -** -*******************************************************************************/ -//extern -tBTM_STATUS BTM_BleEnableBatchScan(tBTM_BLE_BATCH_SCAN_MODE scan_mode, - UINT32 scan_interval, UINT32 scan_window, - tBTM_BLE_DISCARD_RULE discard_rule, - tBLE_ADDR_TYPE addr_type, - tBTM_BLE_REF_VALUE ref_value); - -/******************************************************************************* -** -** Function BTM_BleDisableBatchScan -** -** Description This function is called to disable batch scanning -** -** Parameters void -** -** Returns void -** -*******************************************************************************/ -//extern -tBTM_STATUS BTM_BleDisableBatchScan(tBTM_BLE_REF_VALUE ref_value); - -#if (BLE_HOST_READ_SCAN_REPORTS_EN == TRUE) -/******************************************************************************* -** -** Function BTM_BleReadScanReports -** -** Description This function is called to read batch scan reports -** -** Parameters tBLE_SCAN_MODE scan_mode - Scan mode report to be read out - tBTM_BLE_SCAN_REP_CBACK* p_cback - Reports callback -** -** Returns tBTM_STATUS -** -*******************************************************************************/ -//extern -tBTM_STATUS BTM_BleReadScanReports(tBLE_SCAN_MODE scan_mode, - tBTM_BLE_REF_VALUE ref_value); -#endif // #if (BLE_HOST_READ_SCAN_REPORTS_EN == TRUE) - -#if (BLE_HOST_TRACK_ADVERTISER_EN == TRUE) -/******************************************************************************* -** -** Function BTM_BleTrackAdvertiser -** -** Description This function is called to read batch scan reports -** -** Parameters p_track_cback - Tracking callback -** ref_value - Reference value -** -** Returns tBTM_STATUS -** -*******************************************************************************/ -//extern -tBTM_STATUS BTM_BleTrackAdvertiser(tBTM_BLE_TRACK_ADV_CBACK *p_track_cback, - tBTM_BLE_REF_VALUE ref_value); -#endif // #if (BLE_HOST_TRACK_ADVERTISER_EN == TRUE) - /******************************************************************************* ** ** Function BTM_BleWriteScanRsp @@ -2788,20 +2474,6 @@ void BTM_BleSetPrefConnParams (BD_ADDR bd_addr, //extern void BTM_BleSetConnScanParams (UINT32 scan_interval, UINT32 scan_window); -/****************************************************************************** -** -** Function BTM_BleReadControllerFeatures -** -** Description Reads BLE specific controller features -** -** Parameters: tBTM_BLE_CTRL_FEATURES_CBACK : Callback to notify when features are read -** -** Returns void -** -*******************************************************************************/ -//extern -void BTM_BleReadControllerFeatures(tBTM_BLE_CTRL_FEATURES_CBACK *p_vsc_cback); - /******************************************************************************* ** ** Function BTM_CheckAdvData @@ -3005,20 +2677,6 @@ BOOLEAN BTM_BleLocalPrivacyEnabled(void); //extern void BTM_BleEnableMixedPrivacyMode(BOOLEAN mixed_on); -#if (BLE_HOST_BLE_MULTI_ADV_EN == TRUE) -/******************************************************************************* -** -** Function BTM_BleMaxMultiAdvInstanceCount -** -** Description Returns max number of multi adv instances supported by controller -** -** Returns Max multi adv instance count -** -*******************************************************************************/ -//extern -UINT8 BTM_BleMaxMultiAdvInstanceCount(void); -#endif // #if (BLE_HOST_BLE_MULTI_ADV_EN == TRUE) - /******************************************************************************* ** ** Function BTM_BleSetConnectableMode @@ -3077,19 +2735,6 @@ BOOLEAN BTM_BleUpdateAdvWhitelist(BOOLEAN add_remove, BD_ADDR emote_bda, tBLE_AD *******************************************************************************/ void BTM_BleClearWhitelist(tBTM_UPDATE_WHITELIST_CBACK *update_wl_cb); -/******************************************************************************* -** -** Function BTM_BleUpdateAdvFilterPolicy -** -** Description This function update the filter policy of advertiser. -** -** Parameter adv_policy: advertising filter policy -** -** Return void -*******************************************************************************/ -//extern -void BTM_BleUpdateAdvFilterPolicy(tBTM_BLE_AFP adv_policy); - /******************************************************************************* ** ** Function BTM_BleReceiverTest @@ -3198,80 +2843,6 @@ BOOLEAN BTM_BleSecurityProcedureIsRunning (BD_ADDR bd_addr); //extern UINT8 BTM_BleGetSupportedKeySize (BD_ADDR bd_addr); -#if (BLE_HOST_BLE_MULTI_ADV_EN == TRUE) -/*******************************************************************************/ -/* Multi ADV API */ -/******************************************************************************* -** -** Function BTM_BleEnableAdvInstance -** -** Description This function enable a Multi-ADV instance with the specified -** adv parameters -** -** Parameters p_params: pointer to the adv parameter structure, set as default -** adv parameter when the instance is enabled. -** p_cback: callback function for the adv instance. -** p_ref: reference data attach to the adv instance to be enabled. -** -** Returns status -** -*******************************************************************************/ -//extern -tBTM_STATUS BTM_BleEnableAdvInstance (tBTM_BLE_ADV_PARAMS *p_params, - tBTM_BLE_MULTI_ADV_CBACK *p_cback, - void *p_ref); - -/******************************************************************************* -** -** Function BTM_BleUpdateAdvInstParam -** -** Description This function update a Multi-ADV instance with the specified -** adv parameters. -** -** Parameters inst_id: adv instance ID -** p_params: pointer to the adv parameter structure. -** -** Returns status -** -*******************************************************************************/ -//extern -tBTM_STATUS BTM_BleUpdateAdvInstParam (UINT8 inst_id, tBTM_BLE_ADV_PARAMS *p_params); - -/******************************************************************************* -** -** Function BTM_BleCfgAdvInstData -** -** Description This function configure a Multi-ADV instance with the specified -** adv data or scan response data. -** -** Parameters inst_id: adv instance ID -** is_scan_rsp: is this scacn response, if no set as adv data. -** data_mask: adv data mask. -** p_data: pointer to the adv data structure. -** -** Returns status -** -*******************************************************************************/ -//extern -tBTM_STATUS BTM_BleCfgAdvInstData (UINT8 inst_id, BOOLEAN is_scan_rsp, - tBTM_BLE_AD_MASK data_mask, - tBTM_BLE_ADV_DATA *p_data); - -/******************************************************************************* -** -** Function BTM_BleDisableAdvInstance -** -** Description This function disable a Multi-ADV instance. -** -** Parameters inst_id: adv instance ID -** -** Returns status -** -*******************************************************************************/ -//extern -tBTM_STATUS BTM_BleDisableAdvInstance (UINT8 inst_id); - -#endif // #if (BLE_HOST_BLE_MULTI_ADV_EN == TRUE) /******************************************************************************* ** @@ -3333,20 +2904,6 @@ tBTM_STATUS BTM_BleEnableDisableFilterFeature(UINT8 enable, tBTM_BLE_PF_STATUS_CBACK *p_stat_cback, tBTM_BLE_REF_VALUE ref_value); -/******************************************************************************* -** -** Function BTM_BleGetEnergyInfo -** -** Description This function obtains the energy info -** -** Parameters p_ener_cback - Callback pointer -** -** Returns status -** -*******************************************************************************/ -//extern -tBTM_STATUS BTM_BleGetEnergyInfo(tBTM_BLE_ENERGY_INFO_CBACK *p_ener_cback); - /******************************************************************************* ** ** Function BTM_SetBleDataLength diff --git a/components/bt/host/bluedroid/stack/include/stack/gatt_api.h b/components/bt/host/bluedroid/stack/include/stack/gatt_api.h index 83667e77242..2e1d2d54c2b 100644 --- a/components/bt/host/bluedroid/stack/include/stack/gatt_api.h +++ b/components/bt/host/bluedroid/stack/include/stack/gatt_api.h @@ -1227,23 +1227,6 @@ extern BOOLEAN GATT_GetConnIdIfConnected(tGATT_IF gatt_if, BD_ADDR bd_addr, UINT16 *p_conn_id, tBT_TRANSPORT transport); -/******************************************************************************* -** -** Function GATT_Listen -** -** Description This function start or stop LE advertisement and listen for -** connection. -** -** Parameters gatt_if: application interface -** p_bd_addr: listen for specific address connection, or NULL for -** listen to all device connection. -** start: is a direct connection or a background auto connection -** -** Returns TRUE if advertisement is started; FALSE if adv start failure. -** -*******************************************************************************/ -extern BOOLEAN GATT_Listen (tGATT_IF gatt_if, BOOLEAN start, BD_ADDR_PTR bd_addr); - /******************************************************************************* ** ** Function GATT_ConfigServiceChangeCCC diff --git a/components/bt/host/bluedroid/stack/include/stack/hcidefs.h b/components/bt/host/bluedroid/stack/include/stack/hcidefs.h index 9365de9d54f..ca6f901377a 100644 --- a/components/bt/host/bluedroid/stack/include/stack/hcidefs.h +++ b/components/bt/host/bluedroid/stack/include/stack/hcidefs.h @@ -488,10 +488,9 @@ //ESP BLE subcode define #define HCI_SUBCODE_BLE_INIT 0x00 #define HCI_SUBCODE_BLE_MULTI_ADV 0x01 -#define HCI_SUBCODE_BLE_BATCH_SCAN 0x02 #define HCI_SUBCODE_BLE_ADV_FILTER 0x03 #define HCI_SUBCODE_BLE_TRACK_ADV 0x04 -#define HCI_SUBCODE_BLE_ENERGY_INFO 0x05 + #define HCI_SUBCODE_BLE_EXTENDED_SCAN_PARAMS 0x06 #define HCI_SUBCODE_BLE_LONG_ADV 0x07 #define HCI_SUBCODE_BLE_DUPLICATE_EXCEPTIONAL_LIST 0x08 @@ -536,14 +535,11 @@ //ESP BLE HCI CMD /* Multi adv OCF */ #define HCI_BLE_MULTI_ADV_OCF HCI_ESP_VENDOR_OPCODE_BUILD(HCI_VENDOR_OGF, HCI_ESP_GROUP_BLE, HCI_SUBCODE_BLE_MULTI_ADV) -/* Batch scan OCF */ -#define HCI_BLE_BATCH_SCAN_OCF HCI_ESP_VENDOR_OPCODE_BUILD(HCI_VENDOR_OGF, HCI_ESP_GROUP_BLE, HCI_SUBCODE_BLE_BATCH_SCAN) + /* ADV filter OCF */ #define HCI_BLE_ADV_FILTER_OCF HCI_ESP_VENDOR_OPCODE_BUILD(HCI_VENDOR_OGF, HCI_ESP_GROUP_BLE, HCI_SUBCODE_BLE_ADV_FILTER) /* Tracking OCF */ #define HCI_BLE_TRACK_ADV_OCF HCI_ESP_VENDOR_OPCODE_BUILD(HCI_VENDOR_OGF, HCI_ESP_GROUP_BLE, HCI_SUBCODE_BLE_TRACK_ADV) -/* Energy info OCF */ -#define HCI_BLE_ENERGY_INFO_OCF HCI_ESP_VENDOR_OPCODE_BUILD(HCI_VENDOR_OGF, HCI_ESP_GROUP_BLE, HCI_SUBCODE_BLE_ENERGY_INFO) /* Extended BLE Scan parameters OCF */ #define HCI_BLE_EXTENDED_SCAN_PARAMS_OCF HCI_ESP_VENDOR_OPCODE_BUILD(HCI_VENDOR_OGF, HCI_ESP_GROUP_BLE, HCI_SUBCODE_BLE_EXTENDED_SCAN_PARAMS) /* BLE update duplicate scan exceptional list */ @@ -576,12 +572,6 @@ /* multi adv VSE subcode */ #define HCI_VSE_SUBCODE_BLE_MULTI_ADV_ST_CHG 0x55 /* multi adv instance state change */ -/* subcode for batch scan feature */ -#define BTM_BLE_BATCH_SCAN_ENB_DISAB_CUST_FEATURE 0x01 -#define BTM_BLE_BATCH_SCAN_SET_STORAGE_PARAM 0x02 -#define BTM_BLE_BATCH_SCAN_SET_PARAMS 0x03 -#define BTM_BLE_BATCH_SCAN_READ_RESULTS 0x04 - /* batch scan VSE subcode */ #define HCI_VSE_SUBCODE_BLE_THRESHOLD_SUB_EVT 0x54 /* Threshold event */ diff --git a/components/bt/host/bluedroid/stack/l2cap/include/l2c_int.h b/components/bt/host/bluedroid/stack/l2cap/include/l2c_int.h index d17f82f4cc3..df956dc4426 100644 --- a/components/bt/host/bluedroid/stack/l2cap/include/l2c_int.h +++ b/components/bt/host/bluedroid/stack/l2cap/include/l2c_int.h @@ -488,19 +488,24 @@ typedef struct { list_t *p_lcb_pool; /* Link Control Block pool */ list_t *p_ccb_pool; /* Channel Control Block pool */ +#if (CLASSIC_BT_INCLUDED == TRUE) tL2C_RCB rcb_pool[MAX_L2CAP_CLIENTS]; /* Registration info pool */ +#endif // #if (CLASSIC_BT_INCLUDED == TRUE) - +#if (CLASSIC_BT_INCLUDED == TRUE) UINT8 desire_role; /* desire to be master/slave when accepting a connection */ BOOLEAN disallow_switch; /* FALSE, to allow switch at create conn */ +#endif // (CLASSIC_BT_INCLUDED == TRUE) UINT16 num_lm_acl_bufs; /* # of ACL buffers on controller */ UINT16 idle_timeout; /* Idle timeout */ list_t *rcv_pending_q; /* Recv pending queue */ TIMER_LIST_ENT rcv_hold_tle; /* Timer list entry for rcv hold */ - tL2C_LCB *p_cur_hcit_lcb; /* Current HCI Transport buffer */ + // tL2C_LCB *p_cur_hcit_lcb; /* Current HCI Transport buffer */ +#if (CLASSIC_BT_INCLUDED == TRUE) UINT16 num_links_active; /* Number of links active */ +#endif // #if (CLASSIC_BT_INCLUDED == TRUE) #if (L2CAP_NON_FLUSHABLE_PB_INCLUDED == TRUE) UINT16 non_flushable_pbf; /* L2CAP_PKT_START_NON_FLUSHABLE if controller supports */ @@ -529,13 +534,16 @@ typedef struct { tL2C_RCB ble_rcb_pool[BLE_MAX_L2CAP_CLIENTS]; /* Registration info pool */ #endif +#if (CLASSIC_BT_INCLUDED == TRUE) tL2CA_ECHO_DATA_CB *p_echo_data_cb; /* Echo data callback */ +#endif // #if (CLASSIC_BT_INCLUDED == TRUE) #if (defined(L2CAP_HIGH_PRI_CHAN_QUOTA_IS_CONFIGURABLE) && (L2CAP_HIGH_PRI_CHAN_QUOTA_IS_CONFIGURABLE == TRUE)) UINT16 high_pri_min_xmit_quota; /* Minimum number of ACL credit for high priority link */ #endif /* (L2CAP_HIGH_PRI_CHAN_QUOTA_IS_CONFIGURABLE == TRUE) */ - +#if (CLASSIC_BT_INCLUDED == TRUE) UINT16 dyn_psm; +#endif // #if (CLASSIC_BT_INCLUDED == TRUE) } tL2C_CB; diff --git a/components/bt/host/bluedroid/stack/l2cap/l2c_api.c b/components/bt/host/bluedroid/stack/l2cap/l2c_api.c index b7fbbbdcfc9..07377901a78 100644 --- a/components/bt/host/bluedroid/stack/l2cap/l2c_api.c +++ b/components/bt/host/bluedroid/stack/l2cap/l2c_api.c @@ -863,7 +863,7 @@ UINT8 L2CA_SetTraceLevel (UINT8 new_level) return (l2cb.l2cap_trace_level); } - +#if (CLASSIC_BT_INCLUDED == TRUE) /******************************************************************************* ** ** Function L2CA_SetDesireRole @@ -901,6 +901,7 @@ UINT8 L2CA_SetDesireRole (UINT8 new_role) return (l2cb.desire_role); } +#endif // (CLASSIC_BT_INCLUDED == TRUE) #if (CLASSIC_BT_INCLUDED == TRUE) diff --git a/components/bt/host/bluedroid/stack/l2cap/l2c_ble.c b/components/bt/host/bluedroid/stack/l2cap/l2c_ble.c index 39ba389451a..e41174695eb 100644 --- a/components/bt/host/bluedroid/stack/l2cap/l2c_ble.c +++ b/components/bt/host/bluedroid/stack/l2cap/l2c_ble.c @@ -506,8 +506,13 @@ void l2cble_advertiser_conn_comp (UINT16 handle, BD_ADDR bda, tBLE_ADDR_TYPE typ void l2cble_conn_comp(UINT16 handle, UINT8 role, BD_ADDR bda, tBLE_ADDR_TYPE type, UINT16 conn_interval, UINT16 conn_latency, UINT16 conn_timeout) { +#if (BLE_TOPOLOGY_CHECK == TRUE) btm_ble_update_link_topology_mask(role, TRUE); - +#else + btm_cb.ble_ctr_cb.inq_var.adv_mode = BTM_BLE_ADV_DISABLE; + /* make device fall back into undirected adv mode by default */ + btm_cb.ble_ctr_cb.inq_var.directed_conn = BTM_BLE_CONNECT_EVT; +#endif // (BLE_TOPOLOGY_CHECK == TRUE) if (role == HCI_ROLE_MASTER) { l2cble_scanner_conn_comp(handle, bda, type, conn_interval, conn_latency, conn_timeout); } else { @@ -945,11 +950,14 @@ BOOLEAN l2cble_init_direct_conn (tL2C_LCB *p_lcb) #endif // CONTROLLER_RPA_LIST_ENABLE #endif // (defined BLE_PRIVACY_SPT) && (BLE_PRIVACY_SPT == TRUE) +#if (BLE_TOPOLOGY_CHECK == TRUE) if (!btm_ble_topology_check(BTM_BLE_STATE_INIT)) { l2cu_release_lcb (p_lcb); L2CAP_TRACE_ERROR("initiate direct connection fail, topology limitation"); return FALSE; } +#endif // (BLE_TOPOLOGY_CHECK == TRUE) + uint32_t link_timeout = L2CAP_BLE_LINK_CONNECT_TOUT; if(GATTC_CONNECT_RETRY_COUNT) { if(!p_lcb->retry_create_con) { @@ -1079,11 +1087,11 @@ BOOLEAN l2cble_create_conn (tL2C_LCB *p_lcb) L2CAP_TRACE_WARNING ("L2CAP - LE - cannot start new connection at conn st: %d", conn_st); btm_ble_enqueue_direct_conn_req(p_lcb); -#if (tGATT_BG_CONN_DEV == TRUE) +#if (GATT_BG_CONN_DEV == TRUE) if (conn_st == BLE_BG_CONN) { btm_ble_suspend_bg_conn(); } -#endif // #if (tGATT_BG_CONN_DEV == TRUE) +#endif // #if (GATT_BG_CONN_DEV == TRUE) rt = TRUE; } return rt; @@ -1110,6 +1118,7 @@ void l2c_link_processs_ble_num_bufs (UINT16 num_lm_ble_bufs) l2cb.num_lm_ble_bufs = l2cb.controller_le_xmit_window = num_lm_ble_bufs; } +#if (BLE_INCLUDED == TRUE) /******************************************************************************* ** ** Function l2c_ble_link_adjust_allocation @@ -1229,6 +1238,7 @@ void l2c_ble_link_adjust_allocation (void) } } } +#endif // #if (BLE_INCLUDED == TRUE) #if (defined BLE_LLT_INCLUDED) && (BLE_LLT_INCLUDED == TRUE) /******************************************************************************* diff --git a/components/bt/host/bluedroid/stack/l2cap/l2c_link.c b/components/bt/host/bluedroid/stack/l2cap/l2c_link.c index 9cb412e7488..a51c4e84278 100644 --- a/components/bt/host/bluedroid/stack/l2cap/l2c_link.c +++ b/components/bt/host/bluedroid/stack/l2cap/l2c_link.c @@ -392,10 +392,12 @@ BOOLEAN l2c_link_hci_disc_comp (UINT16 handle, UINT8 reason) p_lcb->link_state = LST_DISCONNECTING; #if (BLE_INCLUDED == TRUE) +#if (BLE_TOPOLOGY_CHECK == TRUE) /* Check for BLE and handle that differently */ if (p_lcb->transport == BT_TRANSPORT_LE) { btm_ble_update_link_topology_mask(p_lcb->link_role, FALSE); } +#endif // (BLE_TOPOLOGY_CHECK == TRUE) #endif #if (CLASSIC_BT_INCLUDED == TRUE) /* Link is disconnected. For all channels, send the event through */ @@ -734,7 +736,7 @@ void l2c_info_timeout (tL2C_LCB *p_lcb) #endif ///CLASSIC_BT_INCLUDED == TRUE } } - +#if (CLASSIC_BT_INCLUDED == TRUE) /******************************************************************************* ** ** Function l2c_link_adjust_allocation @@ -855,7 +857,7 @@ void l2c_link_adjust_allocation (void) } } - +#endif // #if (CLASSIC_BT_INCLUDED == TRUE) /******************************************************************************* ** ** Function l2c_link_adjust_chnl_allocation @@ -936,6 +938,7 @@ UINT8 l2c_link_pkts_rcvd (UINT16 *num_pkts, UINT16 *handles) return (num_found); } +#if (CLASSIC_BT_INCLUDED == TRUE) /******************************************************************************* ** ** Function l2c_link_role_changed @@ -973,6 +976,7 @@ void l2c_link_role_changed (BD_ADDR bd_addr, UINT8 new_role, UINT8 hci_status) } } } +#endif // (CLASSIC_BT_INCLUDED == TRUE) /******************************************************************************* ** @@ -1009,7 +1013,9 @@ void l2c_pin_code_request (BD_ADDR bd_addr) *******************************************************************************/ BOOLEAN l2c_link_check_power_mode (tL2C_LCB *p_lcb) { +#if (CLASSIC_BT_INCLUDED == TRUE) tBTM_PM_MODE mode; +#endif // #if (CLASSIC_BT_INCLUDED == TRUE) tL2C_CCB *p_ccb; BOOLEAN need_to_active = FALSE; @@ -1029,6 +1035,7 @@ BOOLEAN l2c_link_check_power_mode (tL2C_LCB *p_lcb) /* if we have packets to send */ if ( need_to_active ) { +#if (CLASSIC_BT_INCLUDED == TRUE) /* check power mode */ if (BTM_ReadPowerMode(p_lcb->remote_bd_addr, &mode) == BTM_SUCCESS) { if ( mode == BTM_PM_STS_PENDING ) { @@ -1037,6 +1044,7 @@ BOOLEAN l2c_link_check_power_mode (tL2C_LCB *p_lcb) return TRUE; } } +#endif // #if (CLASSIC_BT_INCLUDED == TRUE) } return FALSE; } diff --git a/components/bt/host/bluedroid/stack/l2cap/l2c_main.c b/components/bt/host/bluedroid/stack/l2cap/l2c_main.c index dfdef99bef5..d5d6b91dbba 100644 --- a/components/bt/host/bluedroid/stack/l2cap/l2c_main.c +++ b/components/bt/host/bluedroid/stack/l2cap/l2c_main.c @@ -859,8 +859,10 @@ void l2c_init (void) l2c_cb_ptr = (tL2C_CB *)osi_malloc(sizeof(tL2C_CB)); #endif /* #if L2C_DYNAMIC_MEMORY */ memset (&l2cb, 0, sizeof (tL2C_CB)); +#if (CLASSIC_BT_INCLUDED == TRUE) /* the psm is increased by 2 before being used */ l2cb.dyn_psm = 0xFFF; +#endif // #if (CLASSIC_BT_INCLUDED == TRUE) l2cb.p_ccb_pool = list_new(osi_free_func); if (l2cb.p_ccb_pool == NULL) { @@ -877,13 +879,13 @@ void l2c_init (void) #endif - +#if (CLASSIC_BT_INCLUDED == TRUE) #ifdef L2CAP_DESIRED_LINK_ROLE l2cb.desire_role = L2CAP_DESIRED_LINK_ROLE; #else l2cb.desire_role = HCI_ROLE_SLAVE; #endif - +#endif // (CLASSIC_BT_INCLUDED == TRUE) /* Set the default idle timeout */ l2cb.idle_timeout = L2CAP_LINK_INACTIVITY_TOUT; diff --git a/components/bt/host/bluedroid/stack/l2cap/l2c_utils.c b/components/bt/host/bluedroid/stack/l2cap/l2c_utils.c index 0d3fed93d1d..de1faec7493 100644 --- a/components/bt/host/bluedroid/stack/l2cap/l2c_utils.c +++ b/components/bt/host/bluedroid/stack/l2cap/l2c_utils.c @@ -113,8 +113,10 @@ tL2C_LCB *l2cu_allocate_lcb (BD_ADDR p_bd_addr, BOOLEAN is_bonding, tBT_TRANSPOR } else #endif { +#if (CLASSIC_BT_INCLUDED == TRUE) l2cb.num_links_active++; l2c_link_adjust_allocation(); +#endif // #if (CLASSIC_BT_INCLUDED == TRUE) } p_lcb->link_xmit_data_q = list_new(NULL); return (p_lcb); @@ -261,11 +263,13 @@ void l2cu_release_lcb (tL2C_LCB *p_lcb) } else #endif { +#if (CLASSIC_BT_INCLUDED == TRUE) if (l2cb.num_links_active >= 1) { l2cb.num_links_active--; } l2c_link_adjust_allocation(); +#endif // #if (CLASSIC_BT_INCLUDED == TRUE) } /* Check for ping outstanding */ @@ -369,6 +373,7 @@ uint8_t l2cu_ble_plcb_active_count(void) } +#if (CLASSIC_BT_INCLUDED == TRUE) /******************************************************************************* ** ** Function l2cu_get_conn_role @@ -385,6 +390,7 @@ UINT8 l2cu_get_conn_role (tL2C_LCB *p_this_lcb) { return l2cb.desire_role; } +#endif // (CLASSIC_BT_INCLUDED == TRUE) /******************************************************************************* ** @@ -1797,6 +1803,7 @@ tL2C_CCB *l2cu_find_ccb_by_remote_cid (tL2C_LCB *p_lcb, UINT16 remote_cid) return (NULL); } +#if (CLASSIC_BT_INCLUDED == TRUE) /******************************************************************************* ** ** Function l2cu_allocate_rcb @@ -1826,6 +1833,7 @@ tL2C_RCB *l2cu_allocate_rcb (UINT16 psm) /* If here, no free RCB found */ return (NULL); } +#endif // #if (CLASSIC_BT_INCLUDED == TRUE) #if (BLE_INCLUDED == TRUE) /******************************************************************************* @@ -1905,7 +1913,7 @@ void l2cu_disconnect_chnl (tL2C_CCB *p_ccb) } } - +#if (CLASSIC_BT_INCLUDED == TRUE) /******************************************************************************* ** ** Function l2cu_find_rcb_by_psm @@ -1930,6 +1938,7 @@ tL2C_RCB *l2cu_find_rcb_by_psm (UINT16 psm) /* If here, no match found */ return (NULL); } +#endif // #if (CLASSIC_BT_INCLUDED == TRUE) #if (BLE_INCLUDED == TRUE) /******************************************************************************* @@ -2274,8 +2283,11 @@ BOOLEAN l2cu_create_conn (tL2C_LCB *p_lcb, tBT_TRANSPORT transport) #if BTM_SCO_INCLUDED == TRUE BOOLEAN is_sco_active; #endif + +#if (CLASSIC_BT_INCLUDED == TRUE) list_node_t *p_node = NULL; tL2C_LCB *p_lcb_cur = NULL; +#endif // (CLASSIC_BT_INCLUDED == TRUE) #if (BLE_INCLUDED == TRUE) tBT_DEVICE_TYPE dev_type; @@ -2298,6 +2310,7 @@ BOOLEAN l2cu_create_conn (tL2C_LCB *p_lcb, tBT_TRANSPORT transport) } #endif +#if (CLASSIC_BT_INCLUDED == TRUE) /* If there is a connection where we perform as a slave, try to switch roles for this connection */ for (p_node = list_begin(l2cb.p_lcb_pool); p_node; p_node = list_next(p_node)) { @@ -2341,6 +2354,8 @@ BOOLEAN l2cu_create_conn (tL2C_LCB *p_lcb, tBT_TRANSPORT transport) p_lcb->link_state = LST_CONNECTING; return (l2cu_create_conn_after_switch (p_lcb)); +#endif // (CLASSIC_BT_INCLUDED == TRUE) + return false; } /******************************************************************************* @@ -2367,7 +2382,7 @@ UINT8 l2cu_get_num_hi_priority (void) return no_hi; } - +#if (CLASSIC_BT_INCLUDED == TRUE) /******************************************************************************* ** ** Function l2cu_create_conn_after_switch @@ -2442,7 +2457,7 @@ BOOLEAN l2cu_create_conn_after_switch (tL2C_LCB *p_lcb) return (TRUE); } - +#endif // (CLASSIC_BT_INCLUDED == TRUE) /******************************************************************************* **