Merge branch 'bugfix/fix_bluedroid_ble50_adv_data_length_issue_v4.3' into 'release/v4.3'

components/bt: Fix bluedroid ble50 adv data length issue(backport release/v4.3)

See merge request espressif/esp-idf!16580
This commit is contained in:
Xie Wen Xiang 2021-12-31 00:40:11 +00:00
commit 9b2f6a2a77
5 changed files with 22 additions and 13 deletions

View File

@ -66,6 +66,13 @@ config BT_CTRL_HW_CCA
help
It enables HW CCA feature in controller
config BT_CTRL_HW_CCA_VAL
int "CCA threshold value"
range 20 60
default 20
help
It is the threshold value of HW CCA, if the value is 30, it means CCA threshold is -30 dBm.
config BT_CTRL_HW_CCA_EFF
int
default 1 if BT_CTRL_HW_CCA

@ -1 +1 @@
Subproject commit 07df01f3bfd650a257d5481e6b32f5ce9731735a
Subproject commit a01066d87297c330196162fd84cdb108cfa9f67b

View File

@ -209,7 +209,8 @@ static void parse_ble_read_adv_max_len_response(
{
uint8_t *stream = read_command_complete_header(response, HCI_BLE_RD_MAX_ADV_DATA_LEN, 1 /* bytes after */);
STREAM_TO_UINT8(*adv_max_len_ptr, stream);
// Size: 2 Octets ; Value: 0x001F 0x0672 ; Maximum supported advertising data length
STREAM_TO_UINT16(*adv_max_len_ptr, stream);
osi_free(response);
}

View File

@ -689,23 +689,16 @@ tBTM_STATUS BTM_BlePeriodicAdvCfgDataRaw(UINT8 instance, UINT16 len, UINT8 *data
{
tBTM_STATUS status = BTM_SUCCESS;
tHCI_STATUS err = HCI_SUCCESS;
uint16_t rem_len;
uint16_t rem_len = len;
UINT8 operation = 0;
UINT16 data_offset = 0;
tBTM_BLE_5_GAP_CB_PARAMS cb_params = {0};
if ((status = btm_ble_ext_adv_set_data_validate(instance, len, data)) != BTM_SUCCESS) {
BTM_TRACE_ERROR("%s, invalid extend adv data.", __func__);
goto end;
}
if (len > controller_get_interface()->ble_get_ext_adv_data_max_len()) {
BTM_TRACE_ERROR("%s, The adv data len(%d) is longer then the controller adv max len(%d)",
__func__, len, controller_get_interface()->ble_get_ext_adv_data_max_len());
status = BTM_ILLEGAL_VALUE;
}
rem_len = len;
do {
UINT8 send_data_len = (rem_len > BTM_BLE_PERIODIC_ADV_DATA_LEN_MAX) ? BTM_BLE_PERIODIC_ADV_DATA_LEN_MAX : rem_len;
@ -729,8 +722,8 @@ tBTM_STATUS BTM_BlePeriodicAdvCfgDataRaw(UINT8 instance, UINT16 len, UINT8 *data
data_offset += send_data_len;
} while(rem_len);
end:
cb_params.status = status;
BTM_ExtBleCallbackTrigger(BTM_BLE_5_GAP_PERIODIC_ADV_DATA_SET_COMPLETE_EVT, &cb_params);
return status;
@ -1108,6 +1101,12 @@ static tBTM_STATUS btm_ble_ext_adv_set_data_validate(UINT8 instance, UINT16 len,
BTM_TRACE_ERROR("%s, for the legacy adv, the adv data length can't exceed 31. line %d", __func__, __LINE__);
return BTM_ILLEGAL_VALUE;
}
} else {
if (len > controller_get_interface()->ble_get_ext_adv_data_max_len()) {
BTM_TRACE_ERROR("%s, The adv data len(%d) is longer then the controller adv max len(%d)",
__func__, len, controller_get_interface()->ble_get_ext_adv_data_max_len());
return BTM_ILLEGAL_VALUE;
}
}
return BTM_SUCCESS;

View File

@ -26,7 +26,7 @@ extern "C" {
#endif
#define ESP_BT_CTRL_CONFIG_MAGIC_VAL 0x5A5AA5A5
#define ESP_BT_CTRL_CONFIG_VERSION 0x02104270
#define ESP_BT_CTRL_CONFIG_VERSION 0x02112280
#define ESP_BT_HCI_TL_MAGIC_VALUE 0xfadebead
#define ESP_BT_HCI_TL_VERSION 0x00010000
@ -179,6 +179,7 @@ enum {
.hw_target_code = BLE_HW_TARGET_CODE_ESP32C3_CHIP_ECO0, \
.slave_ce_len_min = SLAVE_CE_LEN_MIN_DEFAULT, \
.hw_recorrect_en = AGC_RECORRECT_EN, \
.cca_thresh = CONFIG_BT_CTRL_HW_CCA_VAL, \
};
#else
@ -245,6 +246,7 @@ typedef struct {
uint32_t hw_target_code; /*!< hardware target */
uint8_t slave_ce_len_min;
uint8_t hw_recorrect_en;
uint8_t cca_thresh; /*!< cca threshold*/
} esp_bt_controller_config_t;
/**