mirror of
https://github.com/espressif/esp-idf.git
synced 2026-10-01 18:50:34 +03:00
Merge branch 'feat/add_ble50_instant_v5.3' into 'release/v5.3'
Add support for BLE 5.0 instances in related events (v5.3) See merge request espressif/esp-idf!31990
This commit is contained in:
@@ -880,6 +880,10 @@ typedef uint8_t esp_ble_gap_adv_type_t;
|
||||
/// Extend advertising tx power, range: [-127, +126] dBm
|
||||
#define EXT_ADV_TX_PWR_NO_PREFERENCE (127) /*!< host has no preference for tx power */
|
||||
|
||||
|
||||
/// max number of advertising sets to enable or disable
|
||||
#define EXT_ADV_NUM_SETS_MAX (10) /*!< max evt instance num */
|
||||
|
||||
/**
|
||||
* @brief ext adv parameters
|
||||
*/
|
||||
@@ -1290,72 +1294,86 @@ typedef union {
|
||||
*/
|
||||
struct ble_ext_adv_set_rand_addr_cmpl_evt_param {
|
||||
esp_bt_status_t status; /*!< Indicate extend advertising random address set status */
|
||||
uint8_t instance; /*!< extend advertising handle */
|
||||
} ext_adv_set_rand_addr; /*!< Event parameter of ESP_GAP_BLE_EXT_ADV_SET_RAND_ADDR_COMPLETE_EVT */
|
||||
/**
|
||||
* @brief ESP_GAP_BLE_EXT_ADV_SET_PARAMS_COMPLETE_EVT
|
||||
*/
|
||||
struct ble_ext_adv_set_params_cmpl_evt_param {
|
||||
esp_bt_status_t status; /*!< Indicate extend advertising parameters set status */
|
||||
uint8_t instance; /*!< extend advertising handle */
|
||||
} ext_adv_set_params; /*!< Event parameter of ESP_GAP_BLE_EXT_ADV_SET_PARAMS_COMPLETE_EVT */
|
||||
/**
|
||||
* @brief ESP_GAP_BLE_EXT_ADV_DATA_SET_COMPLETE_EVT
|
||||
*/
|
||||
struct ble_ext_adv_data_set_cmpl_evt_param {
|
||||
esp_bt_status_t status; /*!< Indicate extend advertising data set status */
|
||||
uint8_t instance; /*!< extend advertising handle */
|
||||
} ext_adv_data_set; /*!< Event parameter of ESP_GAP_BLE_EXT_ADV_DATA_SET_COMPLETE_EVT */
|
||||
/**
|
||||
* @brief ESP_GAP_BLE_EXT_SCAN_RSP_DATA_SET_COMPLETE_EVT
|
||||
*/
|
||||
struct ble_ext_adv_scan_rsp_set_cmpl_evt_param {
|
||||
esp_bt_status_t status; /*!< Indicate extend advertising scan response data set status */
|
||||
uint8_t instance; /*!< extend advertising handle */
|
||||
} scan_rsp_set; /*!< Event parameter of ESP_GAP_BLE_EXT_SCAN_RSP_DATA_SET_COMPLETE_EVT */
|
||||
/**
|
||||
* @brief ESP_GAP_BLE_EXT_ADV_START_COMPLETE_EVT
|
||||
*/
|
||||
struct ble_ext_adv_start_cmpl_evt_param {
|
||||
esp_bt_status_t status; /*!< Indicate advertising start operation success status */
|
||||
uint8_t instance_num; /*!< extend advertising handle numble*/
|
||||
uint8_t instance[EXT_ADV_NUM_SETS_MAX]; /*!< extend advertising handle list*/
|
||||
} ext_adv_start; /*!< Event parameter of ESP_GAP_BLE_EXT_ADV_START_COMPLETE_EVT */
|
||||
/**
|
||||
* @brief ESP_GAP_BLE_EXT_ADV_STOP_COMPLETE_EVT
|
||||
*/
|
||||
struct ble_ext_adv_stop_cmpl_evt_param {
|
||||
esp_bt_status_t status; /*!< Indicate advertising stop operation success status */
|
||||
uint8_t instance_num; /*!< extend advertising handle numble*/
|
||||
uint8_t instance[EXT_ADV_NUM_SETS_MAX]; /*!< extend advertising handle list*/
|
||||
} ext_adv_stop; /*!< Event parameter of ESP_GAP_BLE_EXT_ADV_STOP_COMPLETE_EVT */
|
||||
/**
|
||||
* @brief ESP_GAP_BLE_EXT_ADV_SET_REMOVE_COMPLETE_EVT
|
||||
*/
|
||||
struct ble_ext_adv_set_remove_cmpl_evt_param {
|
||||
esp_bt_status_t status; /*!< Indicate advertising stop operation success status */
|
||||
uint8_t instance; /*!< extend advertising handle */
|
||||
} ext_adv_remove; /*!< Event parameter of ESP_GAP_BLE_EXT_ADV_SET_REMOVE_COMPLETE_EVT */
|
||||
/**
|
||||
* @brief ESP_GAP_BLE_EXT_ADV_SET_CLEAR_COMPLETE_EVT
|
||||
*/
|
||||
struct ble_ext_adv_set_clear_cmpl_evt_param {
|
||||
esp_bt_status_t status; /*!< Indicate advertising stop operation success status */
|
||||
uint8_t instance; /*!< extend advertising handle */
|
||||
} ext_adv_clear; /*!< Event parameter of ESP_GAP_BLE_EXT_ADV_SET_CLEAR_COMPLETE_EVT */
|
||||
/**
|
||||
* @brief ESP_GAP_BLE_PERIODIC_ADV_SET_PARAMS_COMPLETE_EVT
|
||||
*/
|
||||
struct ble_periodic_adv_set_params_cmpl_param {
|
||||
esp_bt_status_t status; /*!< Indicate periodic advertisingparameters set status */
|
||||
uint8_t instance; /*!< extend advertising handle */
|
||||
} peroid_adv_set_params; /*!< Event parameter of ESP_GAP_BLE_PERIODIC_ADV_SET_PARAMS_COMPLETE_EVT */
|
||||
/**
|
||||
* @brief ESP_GAP_BLE_PERIODIC_ADV_DATA_SET_COMPLETE_EVT
|
||||
*/
|
||||
struct ble_periodic_adv_data_set_cmpl_param {
|
||||
esp_bt_status_t status; /*!< Indicate periodic advertising data set status */
|
||||
uint8_t instance; /*!< extend advertising handle */
|
||||
} period_adv_data_set; /*!< Event parameter of ESP_GAP_BLE_PERIODIC_ADV_DATA_SET_COMPLETE_EVT */
|
||||
/**
|
||||
* @brief ESP_GAP_BLE_PERIODIC_ADV_START_COMPLETE_EVT
|
||||
*/
|
||||
struct ble_periodic_adv_start_cmpl_param {
|
||||
esp_bt_status_t status; /*!< Indicate periodic advertising start status */
|
||||
uint8_t instance; /*!< extend advertising handle */
|
||||
} period_adv_start; /*!< Event parameter of ESP_GAP_BLE_PERIODIC_ADV_START_COMPLETE_EVT */
|
||||
/**
|
||||
* @brief ESP_GAP_BLE_PERIODIC_ADV_STOP_COMPLETE_EVT
|
||||
*/
|
||||
struct ble_periodic_adv_stop_cmpl_param {
|
||||
esp_bt_status_t status; /*!< Indicate periodic advertising stop status */
|
||||
uint8_t instance; /*!< extend advertising handle */
|
||||
} period_adv_stop; /*!< Event parameter of ESP_GAP_BLE_PERIODIC_ADV_STOP_COMPLETE_EVT */
|
||||
/**
|
||||
* @brief ESP_GAP_BLE_PERIODIC_ADV_CREATE_SYNC_COMPLETE_EVT
|
||||
|
||||
@@ -989,34 +989,48 @@ static void btc_ble_5_gap_callback(tBTA_DM_BLE_5_GAP_EVENT event,
|
||||
case BTA_DM_BLE_5_GAP_EXT_ADV_SET_RAND_ADDR_COMPLETE_EVT:
|
||||
msg.act = ESP_GAP_BLE_EXT_ADV_SET_RAND_ADDR_COMPLETE_EVT;
|
||||
param.ext_adv_set_rand_addr.status = btc_btm_status_to_esp_status(params->set_ext_rand_addr.status);
|
||||
param.ext_adv_set_rand_addr.instance = params->set_ext_rand_addr.instance;
|
||||
break;
|
||||
case BTA_DM_BLE_5_GAP_EXT_ADV_SET_PARAMS_COMPLETE_EVT: {
|
||||
msg.act = ESP_GAP_BLE_EXT_ADV_SET_PARAMS_COMPLETE_EVT;
|
||||
param.ext_adv_set_rand_addr.status = btc_btm_status_to_esp_status(params->set_params.status);
|
||||
param.ext_adv_set_params.status = btc_btm_status_to_esp_status(params->set_params.status);
|
||||
param.ext_adv_set_params.instance = params->set_params.instance;
|
||||
break;
|
||||
}
|
||||
case BTA_DM_BLE_5_GAP_EXT_ADV_DATA_SET_COMPLETE_EVT: {
|
||||
msg.act = ESP_GAP_BLE_EXT_ADV_DATA_SET_COMPLETE_EVT;
|
||||
param.ext_adv_data_set.status = btc_btm_status_to_esp_status(params->adv_data_set.status);
|
||||
param.ext_adv_data_set.instance = params->adv_data_set.instance;
|
||||
break;
|
||||
}
|
||||
case BTA_DM_BLE_5_GAP_EXT_SCAN_RSP_DATA_SET_COMPLETE_EVT: {
|
||||
msg.act = ESP_GAP_BLE_EXT_SCAN_RSP_DATA_SET_COMPLETE_EVT;
|
||||
param.scan_rsp_set.status = btc_btm_status_to_esp_status(params->scan_rsp_data_set.status);
|
||||
param.scan_rsp_set.instance = params->scan_rsp_data_set.instance;
|
||||
break;
|
||||
}
|
||||
case BTA_DM_BLE_5_GAP_EXT_ADV_START_COMPLETE_EVT: {
|
||||
msg.act = ESP_GAP_BLE_EXT_ADV_START_COMPLETE_EVT;
|
||||
param.ext_adv_start.status = btc_btm_status_to_esp_status(params->adv_start.status);
|
||||
for (UINT8 i = 0; i < params->adv_start.instance_num; i++) {
|
||||
param.ext_adv_start.instance[i] = params->adv_start.instance[i];
|
||||
}
|
||||
|
||||
param.ext_adv_start.instance_num = params->adv_start.instance_num;
|
||||
break;
|
||||
}
|
||||
case BTA_DM_BLE_5_GAP_EXT_ADV_STOP_COMPLETE_EVT:
|
||||
msg.act = ESP_GAP_BLE_EXT_ADV_STOP_COMPLETE_EVT;
|
||||
param.ext_adv_stop.status = btc_btm_status_to_esp_status(params->adv_start.status);
|
||||
for (UINT8 i = 0; i < params->adv_start.instance_num; i++) {
|
||||
param.ext_adv_stop.instance[i] = params->adv_start.instance[i];
|
||||
}
|
||||
param.ext_adv_stop.instance_num = params->adv_start.instance_num;
|
||||
break;
|
||||
case BTA_DM_BLE_5_GAP_EXT_ADV_SET_REMOVE_COMPLETE_EVT:
|
||||
msg.act = ESP_GAP_BLE_EXT_ADV_SET_REMOVE_COMPLETE_EVT;
|
||||
param.ext_adv_remove.status = btc_btm_status_to_esp_status(params->adv_start.status);
|
||||
param.ext_adv_remove.instance = params->adv_start.instance[0];
|
||||
break;
|
||||
case BTA_DM_BLE_5_GAP_EXT_ADV_SET_CLEAR_COMPLETE_EVT:
|
||||
msg.act = ESP_GAP_BLE_EXT_ADV_SET_CLEAR_COMPLETE_EVT;
|
||||
@@ -1025,21 +1039,25 @@ static void btc_ble_5_gap_callback(tBTA_DM_BLE_5_GAP_EVENT event,
|
||||
case BTA_DM_BLE_5_GAP_PERIODIC_ADV_SET_PARAMS_COMPLETE_EVT: {
|
||||
msg.act = ESP_GAP_BLE_PERIODIC_ADV_SET_PARAMS_COMPLETE_EVT;
|
||||
param.peroid_adv_set_params.status = btc_btm_status_to_esp_status(params->per_adv_set_params.status);
|
||||
param.peroid_adv_set_params.instance = params->per_adv_set_params.instance;
|
||||
break;
|
||||
}
|
||||
case BTA_DM_BLE_5_GAP_PERIODIC_ADV_DATA_SET_COMPLETE_EVT: {
|
||||
msg.act = ESP_GAP_BLE_PERIODIC_ADV_DATA_SET_COMPLETE_EVT;
|
||||
param.period_adv_data_set.status = btc_btm_status_to_esp_status(params->per_adv_data_set.status);
|
||||
param.period_adv_data_set.instance = params->per_adv_data_set.instance;
|
||||
break;
|
||||
}
|
||||
case BTA_DM_BLE_5_GAP_PERIODIC_ADV_START_COMPLETE_EVT: {
|
||||
msg.act = ESP_GAP_BLE_PERIODIC_ADV_START_COMPLETE_EVT;
|
||||
param.period_adv_start.status = btc_btm_status_to_esp_status(params->per_adv_start.status);
|
||||
param.period_adv_start.instance = params->per_adv_start.instance;
|
||||
break;
|
||||
}
|
||||
case BTA_DM_BLE_5_GAP_PERIODIC_ADV_STOP_COMPLETE_EVT: {
|
||||
msg.act = ESP_GAP_BLE_PERIODIC_ADV_STOP_COMPLETE_EVT;
|
||||
param.period_adv_stop.status = btc_btm_status_to_esp_status(params->per_adv_stop.status);
|
||||
param.period_adv_stop.instance = params->per_adv_stop.instance;
|
||||
break;
|
||||
}
|
||||
case BTA_DM_BLE_5_GAP_PERIODIC_ADV_CREATE_SYNC_COMPLETE_EVT: {
|
||||
|
||||
@@ -340,8 +340,8 @@ tBTM_STATUS BTM_BleSetExtendedAdvRandaddr(UINT8 instance, BD_ADDR rand_addr)
|
||||
}
|
||||
|
||||
end:
|
||||
cb_params.status = status;
|
||||
|
||||
cb_params.set_ext_rand_addr.status = status;
|
||||
cb_params.set_ext_rand_addr.instance = instance;
|
||||
BTM_ExtBleCallbackTrigger(BTM_BLE_5_GAP_EXT_ADV_SET_RAND_ADDR_COMPLETE_EVT, &cb_params);
|
||||
|
||||
return status;
|
||||
@@ -420,7 +420,8 @@ end:
|
||||
BTM_UpdateAddrInfor(BLE_ADDR_RANDOM, rand_addr);
|
||||
}
|
||||
}
|
||||
cb_params.status = status;
|
||||
cb_params.set_params.status = status;
|
||||
cb_params.set_params.instance = instance;
|
||||
BTM_ExtBleCallbackTrigger(BTM_BLE_5_GAP_EXT_ADV_SET_PARAMS_COMPLETE_EVT, &cb_params);
|
||||
|
||||
return status;
|
||||
@@ -471,7 +472,14 @@ tBTM_STATUS BTM_BleConfigExtendedAdvDataRaw(BOOLEAN is_scan_rsp, UINT8 instance,
|
||||
} while (rem_len);
|
||||
|
||||
end:
|
||||
cb_params.status = status;
|
||||
if (is_scan_rsp) {
|
||||
cb_params.scan_rsp_data_set.status = status;
|
||||
cb_params.scan_rsp_data_set.instance = instance;
|
||||
} else {
|
||||
cb_params.adv_data_set.status = status;
|
||||
cb_params.adv_data_set.instance = instance;
|
||||
}
|
||||
|
||||
BTM_ExtBleCallbackTrigger(is_scan_rsp ? BTM_BLE_5_GAP_EXT_SCAN_RSP_DATA_SET_COMPLETE_EVT : BTM_BLE_5_GAP_EXT_ADV_DATA_SET_COMPLETE_EVT, &cb_params);
|
||||
|
||||
return status;
|
||||
@@ -574,7 +582,12 @@ end:
|
||||
}
|
||||
}
|
||||
|
||||
cb_params.status = status;
|
||||
cb_params.adv_start.status = status;
|
||||
cb_params.adv_start.instance_num = num;
|
||||
for (uint8_t i = 0; i < num; i++) {
|
||||
cb_params.adv_start.instance[i] = ext_adv[i].instance;
|
||||
}
|
||||
|
||||
BTM_ExtBleCallbackTrigger(enable ? BTM_BLE_5_GAP_EXT_ADV_START_COMPLETE_EVT : BTM_BLE_5_GAP_EXT_ADV_STOP_COMPLETE_EVT, &cb_params);
|
||||
|
||||
return status;
|
||||
@@ -629,7 +642,9 @@ tBTM_STATUS BTM_BleExtAdvSetRemove(UINT8 instance)
|
||||
|
||||
end:
|
||||
|
||||
cb_params.status = status;
|
||||
cb_params.adv_start.status = status;
|
||||
cb_params.adv_start.instance_num = 1;
|
||||
cb_params.adv_start.instance[0] = instance;
|
||||
|
||||
BTM_ExtBleCallbackTrigger(BTM_BLE_5_GAP_EXT_ADV_SET_REMOVE_COMPLETE_EVT, &cb_params);
|
||||
|
||||
@@ -655,7 +670,7 @@ tBTM_STATUS BTM_BleExtAdvSetClear(void)
|
||||
}
|
||||
}
|
||||
|
||||
cb_params.status = status;
|
||||
cb_params.adv_start.status = status;
|
||||
|
||||
BTM_ExtBleCallbackTrigger(BTM_BLE_5_GAP_EXT_ADV_SET_CLEAR_COMPLETE_EVT, &cb_params);
|
||||
|
||||
@@ -693,7 +708,8 @@ tBTM_STATUS BTM_BlePeriodicAdvSetParams(UINT8 instance, tBTM_BLE_Periodic_Adv_Pa
|
||||
|
||||
end:
|
||||
|
||||
cb_params.status = status;
|
||||
cb_params.per_adv_set_params.status = status;
|
||||
cb_params.per_adv_set_params.instance = instance;
|
||||
|
||||
BTM_ExtBleCallbackTrigger(BTM_BLE_5_GAP_PERIODIC_ADV_SET_PARAMS_COMPLETE_EVT, &cb_params);
|
||||
|
||||
@@ -747,7 +763,9 @@ tBTM_STATUS BTM_BlePeriodicAdvCfgDataRaw(UINT8 instance, UINT16 len, UINT8 *data
|
||||
} while(rem_len);
|
||||
|
||||
end:
|
||||
cb_params.status = status;
|
||||
cb_params.per_adv_data_set.status = status;
|
||||
cb_params.per_adv_data_set.instance = instance;
|
||||
|
||||
BTM_ExtBleCallbackTrigger(BTM_BLE_5_GAP_PERIODIC_ADV_DATA_SET_COMPLETE_EVT, &cb_params);
|
||||
|
||||
return status;
|
||||
@@ -771,8 +789,13 @@ tBTM_STATUS BTM_BlePeriodicAdvEnable(UINT8 instance, UINT8 enable)
|
||||
}
|
||||
|
||||
end:
|
||||
|
||||
cb_params.status = status;
|
||||
if (enable) {
|
||||
cb_params.per_adv_start.status = status;
|
||||
cb_params.per_adv_start.instance = instance;
|
||||
} else {
|
||||
cb_params.per_adv_stop.status = status;
|
||||
cb_params.per_adv_stop.instance = instance;
|
||||
}
|
||||
|
||||
BTM_ExtBleCallbackTrigger(enable ? BTM_BLE_5_GAP_PERIODIC_ADV_START_COMPLETE_EVT : BTM_BLE_5_GAP_PERIODIC_ADV_STOP_COMPLETE_EVT, &cb_params);
|
||||
|
||||
|
||||
@@ -388,6 +388,12 @@ void BTM_BleUpdateAdvFilterPolicy(tBTM_BLE_AFP adv_policy)
|
||||
&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 :
|
||||
|
||||
@@ -1100,46 +1100,58 @@ typedef struct {
|
||||
|
||||
typedef struct {
|
||||
UINT8 status;
|
||||
UINT8 instance;
|
||||
} tBTM_BLE_SET_PERF_PHY_CMPL;
|
||||
|
||||
typedef struct {
|
||||
UINT8 status;
|
||||
UINT8 instance;
|
||||
} tBTM_BLE_EXT_ADV_SET_RAND_ADDR_CMPL;
|
||||
|
||||
typedef struct {
|
||||
UINT8 status;
|
||||
UINT8 instance;
|
||||
} tBTM_BLE_EXT_ADV_SET_PARAMS_CMPL;
|
||||
|
||||
typedef struct {
|
||||
UINT8 status;
|
||||
UINT8 instance;
|
||||
} tBTM_BLE_EXT_ADV_DATA_SET_CMPL;
|
||||
|
||||
typedef struct {
|
||||
UINT8 status;
|
||||
UINT8 instance;
|
||||
} tBTM_BLE_EXT_ADV_SCAN_RSP_DATA_SET_CMPL;
|
||||
|
||||
typedef struct {
|
||||
UINT8 status;
|
||||
UINT8 instance_num;
|
||||
UINT8 instance[10];
|
||||
} tBTM_BLE_EXT_ADV_START_CMPL;
|
||||
|
||||
typedef struct {
|
||||
UINT8 status;
|
||||
UINT8 instance;
|
||||
} tBTM_BLE_EXT_ADV_STOP_CMPL;
|
||||
|
||||
typedef struct {
|
||||
UINT8 status;
|
||||
UINT8 instance;
|
||||
} tBTM_BLE_PERIOD_ADV_SET_PARAMS_CMPL;
|
||||
|
||||
typedef struct {
|
||||
UINT8 status;
|
||||
UINT8 instance;
|
||||
} tBTM_BLE_PERIOD_ADV_DATA_SET_CMPL;
|
||||
|
||||
typedef struct {
|
||||
UINT8 status;
|
||||
UINT8 instance;
|
||||
} tBTM_BLE_PERIOD_ADV_START_CMPL;
|
||||
|
||||
typedef struct {
|
||||
UINT8 status;
|
||||
UINT8 instance;
|
||||
} tBTM_BLE_PERIOD_ADV_STOP_CMPL;
|
||||
|
||||
typedef struct {
|
||||
|
||||
Reference in New Issue
Block a user