mirror of
https://github.com/espressif/esp-idf.git
synced 2026-04-27 19:13:21 +00:00
fix(ble/bluedroid): delete BLE_HOST_BLE_MULTI_ADV_EN
This commit is contained in:
@@ -633,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
|
||||
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
@@ -5776,116 +5769,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)
|
||||
{
|
||||
|
||||
@@ -2258,142 +2258,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
|
||||
|
||||
@@ -195,12 +195,6 @@ const tBTA_DM_ACTION bta_dm_action[BTA_DM_MAX_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)
|
||||
|
||||
@@ -181,12 +181,6 @@ enum {
|
||||
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)
|
||||
@@ -971,35 +965,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;
|
||||
@@ -1928,13 +1893,6 @@ typedef union {
|
||||
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)
|
||||
@@ -2202,9 +2160,6 @@ typedef struct {
|
||||
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)
|
||||
|
||||
@@ -1050,22 +1050,6 @@ 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
|
||||
@@ -3075,67 +3059,6 @@ extern void BTA_DmUpdateDuplicateExceptionalList(UINT8 subcode, UINT32 type,
|
||||
*******************************************************************************/
|
||||
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)
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function BTA_DmBleUpdateConnectionParams
|
||||
|
||||
@@ -854,11 +854,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
|
||||
@@ -1627,10 +1622,6 @@
|
||||
#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
|
||||
|
||||
@@ -767,11 +767,6 @@ static void btm_ble_vendor_capability_vsc_cmpl_cback (tBTM_VSC_CMPL *p_vcs_cplt_
|
||||
__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();
|
||||
}
|
||||
@@ -949,12 +944,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,23 +1213,6 @@ 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
|
||||
/*******************************************************************************
|
||||
**
|
||||
@@ -4363,12 +4335,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;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -179,9 +179,7 @@ static void reset_complete(void)
|
||||
#if (tGATT_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
|
||||
|
||||
btm_pm_reset();
|
||||
|
||||
@@ -518,14 +518,6 @@ 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);
|
||||
|
||||
@@ -394,9 +394,6 @@ 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;
|
||||
@@ -500,40 +497,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);
|
||||
@@ -3005,20 +2968,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
|
||||
@@ -3198,80 +3147,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)
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
|
||||
Reference in New Issue
Block a user