Skip to content

Commit 865f473

Browse files
authored
Merge branch 'espressif:release/v5.3' into release/v5.3
2 parents fa66855 + fb25eb0 commit 865f473

File tree

318 files changed

+4415
-1693
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

318 files changed

+4415
-1693
lines changed

components/bt/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -902,7 +902,7 @@ if(CONFIG_BT_ENABLED)
902902
if(CONFIG_IDF_TARGET_ESP32C6)
903903
add_prebuilt_library(libble_app "controller/lib_${target}/${target}-bt-lib/esp32c6/libble_app.a")
904904
else()
905-
if(CONFIG_BT_CTRL_RUN_IN_FLASH_ONLY)
905+
if(CONFIG_BT_CTRL_RUN_IN_FLASH_ONLY AND CONFIG_IDF_TARGET_ESP32C2)
906906
add_prebuilt_library(libble_app "controller/lib_${target}/${target}-bt-lib/libble_app_flash.a")
907907
else()
908908
add_prebuilt_library(libble_app "controller/lib_${target}/${target}-bt-lib/libble_app.a")

components/bt/common/btc/profile/esp/blufi/blufi_prf.c

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* SPDX-FileCopyrightText: 2015-2021 Espressif Systems (Shanghai) CO LTD
2+
* SPDX-FileCopyrightText: 2015-2024 Espressif Systems (Shanghai) CO LTD
33
*
44
* SPDX-License-Identifier: Apache-2.0
55
*/
@@ -95,7 +95,29 @@ void btc_blufi_report_error(esp_blufi_error_state_t state)
9595

9696
void btc_blufi_recv_handler(uint8_t *data, int len)
9797
{
98+
if (len < sizeof(struct blufi_hdr)) {
99+
BTC_TRACE_ERROR("%s invalid data length: %d", __func__, len);
100+
btc_blufi_report_error(ESP_BLUFI_DATA_FORMAT_ERROR);
101+
return;
102+
}
103+
98104
struct blufi_hdr *hdr = (struct blufi_hdr *)data;
105+
106+
// Verify if the received data length matches the expected length based on the BLUFI protocol
107+
int target_data_len;
108+
109+
if (BLUFI_FC_IS_CHECK(hdr->fc)) {
110+
target_data_len = hdr->data_len + 4 + 2; // Data + (Type + Frame Control + Sequence Number + Data Length) + Checksum
111+
} else {
112+
target_data_len = hdr->data_len + 4; // Data + (Type + Frame Control + Sequence Number + Data Length)
113+
}
114+
115+
if (len != target_data_len) {
116+
BTC_TRACE_ERROR("%s: Invalid data length: %d, expected: %d", __func__, len, target_data_len);
117+
btc_blufi_report_error(ESP_BLUFI_DATA_FORMAT_ERROR);
118+
return;
119+
}
120+
99121
uint16_t checksum, checksum_pkt;
100122
int ret;
101123

components/bt/controller/esp32/Kconfig.in

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -467,6 +467,29 @@ menu "BLE disconnect when instant passed"
467467
when instant passed in channel map update procedure.
468468
endmenu
469469

470+
config BTDM_BLE_CHAN_ASS_EN
471+
bool "Enable channel assessment"
472+
depends on (BTDM_CTRL_MODE_BLE_ONLY || BTDM_CTRL_MODE_BTDM)
473+
default y
474+
help
475+
If this option is enabled, The Controller will records the communication quality
476+
for each channel and then start a timer to check and update the channel map every 4 seconds.
477+
478+
config BTDM_BLE_PING_EN
479+
bool "Enable LE Ping procedure"
480+
depends on (BTDM_CTRL_MODE_BTDM || BTDM_CTRL_MODE_BLE_ONLY)
481+
default y
482+
help
483+
If this option is disabled, The Controller will not start the LE authenticated payload timer.
484+
This option is used for some compatibility problems related to LE ping procedure.
485+
486+
config BTDM_BLE_VS_QA_SUPPORT
487+
bool "BLE vendor HCI QA support"
488+
depends on (BTDM_CTRL_MODE_BTDM || BTDM_CTRL_MODE_BLE_ONLY)
489+
default n
490+
help
491+
This enables BLE vendor HCI command and event for QA.
492+
470493
config BTDM_RESERVE_DRAM
471494
hex
472495
default 0xdb5c if BT_ENABLED

components/bt/controller/esp32/bt.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -248,6 +248,7 @@ extern uint32_t _bt_controller_data_end;
248248
extern void config_bt_funcs_reset(void);
249249
extern void config_ble_funcs_reset(void);
250250
extern void config_btdm_funcs_reset(void);
251+
extern void config_ble_vs_qa_funcs_reset(void);
251252

252253
/* Local Function Declare
253254
*********************************************************************
@@ -1553,6 +1554,7 @@ esp_err_t esp_bt_controller_init(esp_bt_controller_config_t *cfg)
15531554
btdm_controller_mem_init();
15541555

15551556
periph_module_enable(PERIPH_BT_MODULE);
1557+
periph_module_reset(PERIPH_BT_MODULE);
15561558

15571559
#ifdef CONFIG_PM_ENABLE
15581560
s_btdm_allow_light_sleep = false;
@@ -1746,6 +1748,10 @@ static void patch_apply(void)
17461748
#ifndef CONFIG_BTDM_CTRL_MODE_BR_EDR_ONLY
17471749
config_ble_funcs_reset();
17481750
#endif
1751+
1752+
#ifdef CONFIG_BTDM_BLE_VS_QA_SUPPORT
1753+
config_ble_vs_qa_funcs_reset();
1754+
#endif
17491755
}
17501756

17511757
esp_err_t esp_bt_controller_enable(esp_bt_mode_t mode)

components/bt/controller/esp32c2/bt.c

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* SPDX-FileCopyrightText: 2015-2024 Espressif Systems (Shanghai) CO LTD
2+
* SPDX-FileCopyrightText: 2015-2025 Espressif Systems (Shanghai) CO LTD
33
*
44
* SPDX-License-Identifier: Apache-2.0
55
*/
@@ -1147,9 +1147,17 @@ esp_err_t esp_ble_tx_power_set(esp_ble_power_type_t power_type, esp_power_level_
11471147

11481148
switch (power_type) {
11491149
case ESP_BLE_PWR_TYPE_DEFAULT:
1150+
if (ble_txpwr_set(ESP_BLE_ENHANCED_PWR_TYPE_DEFAULT, 0, power_level) == 0) {
1151+
stat = ESP_OK;
1152+
}
1153+
break;
11501154
case ESP_BLE_PWR_TYPE_ADV:
1155+
if (ble_txpwr_set(ESP_BLE_ENHANCED_PWR_TYPE_ADV, 0xFF, power_level) == 0) {
1156+
stat = ESP_OK;
1157+
}
1158+
break;
11511159
case ESP_BLE_PWR_TYPE_SCAN:
1152-
if (ble_txpwr_set(ESP_BLE_ENHANCED_PWR_TYPE_DEFAULT, 0, power_level) == 0) {
1160+
if (ble_txpwr_set(ESP_BLE_ENHANCED_PWR_TYPE_SCAN, 0, power_level) == 0) {
11531161
stat = ESP_OK;
11541162
}
11551163
break;
@@ -1179,9 +1187,13 @@ esp_err_t esp_ble_tx_power_set_enhanced(esp_ble_enhanced_power_type_t power_type
11791187
esp_err_t stat = ESP_FAIL;
11801188
switch (power_type) {
11811189
case ESP_BLE_ENHANCED_PWR_TYPE_DEFAULT:
1190+
if (ble_txpwr_set(ESP_BLE_ENHANCED_PWR_TYPE_DEFAULT, 0, power_level) == 0) {
1191+
stat = ESP_OK;
1192+
}
1193+
break;
11821194
case ESP_BLE_ENHANCED_PWR_TYPE_SCAN:
11831195
case ESP_BLE_ENHANCED_PWR_TYPE_INIT:
1184-
if (ble_txpwr_set(ESP_BLE_ENHANCED_PWR_TYPE_DEFAULT, 0, power_level) == 0) {
1196+
if (ble_txpwr_set(ESP_BLE_ENHANCED_PWR_TYPE_SCAN, 0, power_level) == 0) {
11851197
stat = ESP_OK;
11861198
}
11871199
break;
@@ -1204,11 +1216,15 @@ esp_power_level_t esp_ble_tx_power_get(esp_ble_power_type_t power_type)
12041216
int tx_level = 0;
12051217

12061218
switch (power_type) {
1207-
case ESP_BLE_PWR_TYPE_ADV:
1208-
case ESP_BLE_PWR_TYPE_SCAN:
12091219
case ESP_BLE_PWR_TYPE_DEFAULT:
12101220
tx_level = ble_txpwr_get(ESP_BLE_ENHANCED_PWR_TYPE_DEFAULT, 0);
12111221
break;
1222+
case ESP_BLE_PWR_TYPE_ADV:
1223+
tx_level = ble_txpwr_get(ESP_BLE_ENHANCED_PWR_TYPE_ADV, 0);
1224+
break;
1225+
case ESP_BLE_PWR_TYPE_SCAN:
1226+
tx_level = ble_txpwr_get(ESP_BLE_ENHANCED_PWR_TYPE_SCAN, 0);
1227+
break;
12121228
case ESP_BLE_PWR_TYPE_CONN_HDL0:
12131229
case ESP_BLE_PWR_TYPE_CONN_HDL1:
12141230
case ESP_BLE_PWR_TYPE_CONN_HDL2:
@@ -1237,9 +1253,11 @@ esp_power_level_t esp_ble_tx_power_get_enhanced(esp_ble_enhanced_power_type_t po
12371253

12381254
switch (power_type) {
12391255
case ESP_BLE_ENHANCED_PWR_TYPE_DEFAULT:
1256+
tx_level = ble_txpwr_get(ESP_BLE_ENHANCED_PWR_TYPE_DEFAULT, 0);
1257+
break;
12401258
case ESP_BLE_ENHANCED_PWR_TYPE_SCAN:
12411259
case ESP_BLE_ENHANCED_PWR_TYPE_INIT:
1242-
tx_level = ble_txpwr_get(ESP_BLE_ENHANCED_PWR_TYPE_DEFAULT, 0);
1260+
tx_level = ble_txpwr_get(ESP_BLE_ENHANCED_PWR_TYPE_SCAN, 0);
12431261
break;
12441262
case ESP_BLE_ENHANCED_PWR_TYPE_ADV:
12451263
case ESP_BLE_ENHANCED_PWR_TYPE_CONN:

components/bt/controller/esp32c6/Kconfig.in

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -697,3 +697,11 @@ config BT_LE_CTRL_CHECK_CONNECT_IND_ACCESS_ADDRESS
697697
Enabling this option will add stricter verification of the Access Address in the CONNECT_IND PDU.
698698
This improves security by ensuring that only connection requests with valid Access Addresses are accepted.
699699
If disabled, only basic checks are applied, improving compatibility.
700+
701+
config BT_CTRL_RUN_IN_FLASH_ONLY
702+
bool "Reduce BLE IRAM usage (READ DOCS FIRST) (EXPERIMENTAL)"
703+
default n
704+
help
705+
Move most IRAM into flash. This will increase the usage of flash and reduce ble performance.
706+
Because the code is moved to the flash, the execution speed of the code is reduced.
707+
To have a small impact on performance, you need to enable flash suspend (SPI_FLASH_AUTO_SUSPEND).

components/bt/controller/esp32c6/bt.c

Lines changed: 38 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* SPDX-FileCopyrightText: 2015-2024 Espressif Systems (Shanghai) CO LTD
2+
* SPDX-FileCopyrightText: 2015-2025 Espressif Systems (Shanghai) CO LTD
33
*
44
* SPDX-License-Identifier: Apache-2.0
55
*/
@@ -133,6 +133,10 @@ extern void r_ble_lll_rfmgmt_set_sleep_cb(void *s_cb, void *w_cb, void *s_arg,
133133
extern void r_ble_rtc_wake_up_state_clr(void);
134134
extern int os_msys_init(void);
135135
extern void os_msys_deinit(void);
136+
#if CONFIG_BT_CTRL_RUN_IN_FLASH_ONLY
137+
extern void r_ble_ll_scan_start_time_init_compensation(uint32_t init_compensation);
138+
extern void r_priv_sdk_config_insert_proc_time_set(uint16_t insert_proc_time);
139+
#endif // CONFIG_BT_CTRL_RUN_IN_FLASH_ONLY
136140
#if CONFIG_FREERTOS_USE_TICKLESS_IDLE
137141
extern sleep_retention_entries_config_t *r_esp_ble_mac_retention_link_get(uint8_t *size, uint8_t extra);
138142
extern void r_esp_ble_set_wakeup_overhead(uint32_t overhead);
@@ -497,11 +501,13 @@ static int esp_ecc_gen_dh_key(const uint8_t *peer_pub_key_x, const uint8_t *peer
497501
return rc;
498502
}
499503

500-
static int esp_intr_alloc_wrapper(int source, int flags, intr_handler_t handler,
501-
void *arg, void **ret_handle_in)
504+
static int esp_intr_alloc_wrapper(int source, int flags, intr_handler_t handler, void *arg, void **ret_handle_in)
502505
{
503-
int rc = esp_intr_alloc(source, flags | ESP_INTR_FLAG_IRAM, handler,
504-
arg, (intr_handle_t *)ret_handle_in);
506+
#if CONFIG_BT_CTRL_RUN_IN_FLASH_ONLY
507+
int rc = esp_intr_alloc(source, flags, handler, arg, (intr_handle_t *)ret_handle_in);
508+
#else
509+
int rc = esp_intr_alloc(source, flags | ESP_INTR_FLAG_IRAM, handler, arg, (intr_handle_t *)ret_handle_in);
510+
#endif
505511
return rc;
506512
}
507513

@@ -1045,6 +1051,10 @@ esp_err_t esp_bt_controller_enable(esp_bt_mode_t mode)
10451051
coex_enable();
10461052
#endif // CONFIG_SW_COEXIST_ENABLE
10471053

1054+
#if CONFIG_BT_CTRL_RUN_IN_FLASH_ONLY
1055+
r_ble_ll_scan_start_time_init_compensation(500);
1056+
r_priv_sdk_config_insert_proc_time_set(500);
1057+
#endif // CONFIG_BT_CTRL_RUN_IN_FLASH_ONLY
10481058
if (r_ble_controller_enable(mode) != 0) {
10491059
ret = ESP_FAIL;
10501060
goto error;
@@ -1205,9 +1215,17 @@ esp_err_t esp_ble_tx_power_set(esp_ble_power_type_t power_type, esp_power_level_
12051215

12061216
switch (power_type) {
12071217
case ESP_BLE_PWR_TYPE_DEFAULT:
1218+
if (r_ble_txpwr_set(ESP_BLE_ENHANCED_PWR_TYPE_DEFAULT, 0, power_level) == 0) {
1219+
stat = ESP_OK;
1220+
}
1221+
break;
12081222
case ESP_BLE_PWR_TYPE_ADV:
1223+
if (r_ble_txpwr_set(ESP_BLE_ENHANCED_PWR_TYPE_ADV, 0xFF, power_level) == 0) {
1224+
stat = ESP_OK;
1225+
}
1226+
break;
12091227
case ESP_BLE_PWR_TYPE_SCAN:
1210-
if (r_ble_txpwr_set(ESP_BLE_ENHANCED_PWR_TYPE_DEFAULT, 0, power_level) == 0) {
1228+
if (r_ble_txpwr_set(ESP_BLE_ENHANCED_PWR_TYPE_SCAN, 0, power_level) == 0) {
12111229
stat = ESP_OK;
12121230
}
12131231
break;
@@ -1238,9 +1256,13 @@ esp_err_t esp_ble_tx_power_set_enhanced(esp_ble_enhanced_power_type_t power_type
12381256
esp_err_t stat = ESP_FAIL;
12391257
switch (power_type) {
12401258
case ESP_BLE_ENHANCED_PWR_TYPE_DEFAULT:
1259+
if (r_ble_txpwr_set(ESP_BLE_ENHANCED_PWR_TYPE_DEFAULT, 0, power_level) == 0) {
1260+
stat = ESP_OK;
1261+
}
1262+
break;
12411263
case ESP_BLE_ENHANCED_PWR_TYPE_SCAN:
12421264
case ESP_BLE_ENHANCED_PWR_TYPE_INIT:
1243-
if (r_ble_txpwr_set(ESP_BLE_ENHANCED_PWR_TYPE_DEFAULT, 0, power_level) == 0) {
1265+
if (r_ble_txpwr_set(ESP_BLE_ENHANCED_PWR_TYPE_SCAN, 0, power_level) == 0) {
12441266
stat = ESP_OK;
12451267
}
12461268
break;
@@ -1263,11 +1285,15 @@ esp_power_level_t esp_ble_tx_power_get(esp_ble_power_type_t power_type)
12631285
int tx_level = 0;
12641286

12651287
switch (power_type) {
1266-
case ESP_BLE_PWR_TYPE_ADV:
1267-
case ESP_BLE_PWR_TYPE_SCAN:
12681288
case ESP_BLE_PWR_TYPE_DEFAULT:
12691289
tx_level = r_ble_txpwr_get(ESP_BLE_ENHANCED_PWR_TYPE_DEFAULT, 0);
12701290
break;
1291+
case ESP_BLE_PWR_TYPE_ADV:
1292+
tx_level = r_ble_txpwr_get(ESP_BLE_ENHANCED_PWR_TYPE_ADV, 0);
1293+
break;
1294+
case ESP_BLE_PWR_TYPE_SCAN:
1295+
tx_level = r_ble_txpwr_get(ESP_BLE_ENHANCED_PWR_TYPE_SCAN, 0);
1296+
break;
12711297
case ESP_BLE_PWR_TYPE_CONN_HDL0:
12721298
case ESP_BLE_PWR_TYPE_CONN_HDL1:
12731299
case ESP_BLE_PWR_TYPE_CONN_HDL2:
@@ -1297,9 +1323,11 @@ esp_power_level_t esp_ble_tx_power_get_enhanced(esp_ble_enhanced_power_type_t po
12971323

12981324
switch (power_type) {
12991325
case ESP_BLE_ENHANCED_PWR_TYPE_DEFAULT:
1326+
tx_level = r_ble_txpwr_get(ESP_BLE_ENHANCED_PWR_TYPE_DEFAULT, 0);
1327+
break;
13001328
case ESP_BLE_ENHANCED_PWR_TYPE_SCAN:
13011329
case ESP_BLE_ENHANCED_PWR_TYPE_INIT:
1302-
tx_level = r_ble_txpwr_get(ESP_BLE_ENHANCED_PWR_TYPE_DEFAULT, 0);
1330+
tx_level = r_ble_txpwr_get(ESP_BLE_ENHANCED_PWR_TYPE_SCAN, 0);
13031331
break;
13041332
case ESP_BLE_ENHANCED_PWR_TYPE_ADV:
13051333
case ESP_BLE_ENHANCED_PWR_TYPE_CONN:

components/bt/controller/esp32h2/Kconfig.in

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -698,3 +698,11 @@ config BT_LE_CTRL_CHECK_CONNECT_IND_ACCESS_ADDRESS
698698
Enabling this option will add stricter verification of the Access Address in the CONNECT_IND PDU.
699699
This improves security by ensuring that only connection requests with valid Access Addresses are accepted.
700700
If disabled, only basic checks are applied, improving compatibility.
701+
702+
config BT_CTRL_RUN_IN_FLASH_ONLY
703+
bool "Reduce BLE IRAM usage (READ DOCS FIRST) (EXPERIMENTAL)"
704+
default n
705+
help
706+
Move most IRAM into flash. This will increase the usage of flash and reduce ble performance.
707+
Because the code is moved to the flash, the execution speed of the code is reduced.
708+
To have a small impact on performance, you need to enable flash suspend (SPI_FLASH_AUTO_SUSPEND).

0 commit comments

Comments
 (0)