mirror of
https://github.com/espressif/esp-idf.git
synced 2025-08-02 20:24:32 +02:00
Merge branch 'change/ble_update_lib_20250414_v5.4' into 'release/v5.4'
change(ble): [AUTO_MR] 20250414 - Update ESP BLE Controller Lib (v5.4) See merge request espressif/esp-idf!38494
This commit is contained in:
@@ -9,7 +9,6 @@ config BT_ALARM_MAX_NUM
|
|||||||
config BT_BLE_LOG_SPI_OUT_ENABLED
|
config BT_BLE_LOG_SPI_OUT_ENABLED
|
||||||
bool "Output ble logs to SPI bus (Experimental)"
|
bool "Output ble logs to SPI bus (Experimental)"
|
||||||
default n
|
default n
|
||||||
select SPI_MASTER_IN_IRAM
|
|
||||||
help
|
help
|
||||||
Output ble logs to SPI bus
|
Output ble logs to SPI bus
|
||||||
|
|
||||||
|
@@ -140,14 +140,16 @@ static int spi_out_init_trans(spi_out_trans_cb_t **trans_cb, uint16_t buf_size)
|
|||||||
if (!(*trans_cb)) {
|
if (!(*trans_cb)) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
memset(*trans_cb, 0, sizeof(spi_out_trans_cb_t));
|
||||||
|
|
||||||
uint8_t *buf = (uint8_t *)spi_bus_dma_memory_alloc(SPI_OUT_BUS, (size_t)buf_size, 0);
|
uint8_t *buf = (uint8_t *)spi_bus_dma_memory_alloc(SPI_OUT_BUS, (size_t)buf_size, 0);
|
||||||
if (!buf) {
|
if (!buf) {
|
||||||
free(*trans_cb);
|
free(*trans_cb);
|
||||||
|
*trans_cb = NULL;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Initialization
|
// Initialization
|
||||||
memset(*trans_cb, 0, sizeof(spi_out_trans_cb_t));
|
|
||||||
(*trans_cb)->buf_size = buf_size;
|
(*trans_cb)->buf_size = buf_size;
|
||||||
(*trans_cb)->trans.tx_buffer = buf;
|
(*trans_cb)->trans.tx_buffer = buf;
|
||||||
return 0;
|
return 0;
|
||||||
@@ -158,8 +160,13 @@ static void spi_out_deinit_trans(spi_out_trans_cb_t **trans_cb)
|
|||||||
if (!(*trans_cb)) {
|
if (!(*trans_cb)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if ((*trans_cb)->trans.tx_buffer) {
|
||||||
|
// Do not free buffer until recycled
|
||||||
|
while ((*trans_cb)->flag == SPI_OUT_TRANS_CB_FLAG_IN_QUEUE) {}
|
||||||
free((uint8_t *)(*trans_cb)->trans.tx_buffer);
|
free((uint8_t *)(*trans_cb)->trans.tx_buffer);
|
||||||
|
(*trans_cb)->trans.tx_buffer = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
free(*trans_cb);
|
free(*trans_cb);
|
||||||
*trans_cb = NULL;
|
*trans_cb = NULL;
|
||||||
return;
|
return;
|
||||||
@@ -174,7 +181,7 @@ IRAM_ATTR static void spi_out_tx_done_cb(spi_transaction_t *ret_trans)
|
|||||||
|
|
||||||
IRAM_ATTR static inline int spi_out_append_trans(spi_out_trans_cb_t *trans_cb)
|
IRAM_ATTR static inline int spi_out_append_trans(spi_out_trans_cb_t *trans_cb)
|
||||||
{
|
{
|
||||||
if (trans_cb->flag != SPI_OUT_TRANS_CB_FLAG_NEED_QUEUE) {
|
if (trans_cb->flag != SPI_OUT_TRANS_CB_FLAG_NEED_QUEUE || !trans_cb->length) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -185,6 +192,8 @@ IRAM_ATTR static inline int spi_out_append_trans(spi_out_trans_cb_t *trans_cb)
|
|||||||
trans_cb->flag = SPI_OUT_TRANS_CB_FLAG_IN_QUEUE;
|
trans_cb->flag = SPI_OUT_TRANS_CB_FLAG_IN_QUEUE;
|
||||||
return 0;
|
return 0;
|
||||||
} else {
|
} else {
|
||||||
|
trans_cb->length = 0;
|
||||||
|
trans_cb->flag = SPI_OUT_TRANS_CB_FLAG_AVAILABLE;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -224,6 +233,7 @@ static void spi_out_log_cb_deinit(spi_out_log_cb_t **log_cb)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
free(*log_cb);
|
free(*log_cb);
|
||||||
|
*log_cb = NULL;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -578,7 +588,7 @@ static void spi_out_ts_sync_deinit(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// CRITICAL: This function is called in ESP Timer task
|
// CRITICAL: This function is called in ESP Timer task
|
||||||
IRAM_ATTR static void esp_timer_cb_ts_sync(void)
|
static void esp_timer_cb_ts_sync(void)
|
||||||
{
|
{
|
||||||
// Initialize variables
|
// Initialize variables
|
||||||
uint32_t lc_ts = 0;
|
uint32_t lc_ts = 0;
|
||||||
@@ -627,7 +637,9 @@ int ble_log_spi_out_init(void)
|
|||||||
.quadwp_io_num = -1,
|
.quadwp_io_num = -1,
|
||||||
.quadhd_io_num = -1,
|
.quadhd_io_num = -1,
|
||||||
.max_transfer_sz = SPI_OUT_MAX_TRANSFER_SIZE,
|
.max_transfer_sz = SPI_OUT_MAX_TRANSFER_SIZE,
|
||||||
|
#if CONFIG_SPI_MASTER_ISR_IN_IRAM
|
||||||
.intr_flags = ESP_INTR_FLAG_IRAM
|
.intr_flags = ESP_INTR_FLAG_IRAM
|
||||||
|
#endif // CONFIG_SPI_MASTER_ISR_IN_IRAM
|
||||||
};
|
};
|
||||||
spi_device_interface_config_t dev_config = {
|
spi_device_interface_config_t dev_config = {
|
||||||
.clock_speed_hz = SPI_MASTER_FREQ_20M,
|
.clock_speed_hz = SPI_MASTER_FREQ_20M,
|
||||||
@@ -782,7 +794,7 @@ IRAM_ATTR void ble_log_spi_out_ll_log_ev_proc(void)
|
|||||||
}
|
}
|
||||||
#endif // CONFIG_BT_BLE_LOG_SPI_OUT_LL_ENABLED
|
#endif // CONFIG_BT_BLE_LOG_SPI_OUT_LL_ENABLED
|
||||||
|
|
||||||
IRAM_ATTR int ble_log_spi_out_write(uint8_t source, const uint8_t *addr, uint16_t len)
|
int ble_log_spi_out_write(uint8_t source, const uint8_t *addr, uint16_t len)
|
||||||
{
|
{
|
||||||
if (!ul_log_inited) {
|
if (!ul_log_inited) {
|
||||||
return -1;
|
return -1;
|
||||||
@@ -798,7 +810,7 @@ IRAM_ATTR int ble_log_spi_out_write(uint8_t source, const uint8_t *addr, uint16_
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
IRAM_ATTR int ble_log_spi_out_printf(uint8_t source, const char *format, ...)
|
int ble_log_spi_out_printf(uint8_t source, const char *format, ...)
|
||||||
{
|
{
|
||||||
if (!ul_log_inited) {
|
if (!ul_log_inited) {
|
||||||
return -1;
|
return -1;
|
||||||
@@ -845,7 +857,7 @@ IRAM_ATTR int ble_log_spi_out_printf(uint8_t source, const char *format, ...)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
IRAM_ATTR int ble_log_spi_out_printf_enh(uint8_t source, uint8_t level, const char *tag, const char *format, ...)
|
int ble_log_spi_out_printf_enh(uint8_t source, uint8_t level, const char *tag, const char *format, ...)
|
||||||
{
|
{
|
||||||
if (!ul_log_inited) {
|
if (!ul_log_inited) {
|
||||||
return -1;
|
return -1;
|
||||||
@@ -897,7 +909,7 @@ IRAM_ATTR int ble_log_spi_out_printf_enh(uint8_t source, uint8_t level, const ch
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
IRAM_ATTR int ble_log_spi_out_write_with_ts(uint8_t source, const uint8_t *addr, uint16_t len)
|
int ble_log_spi_out_write_with_ts(uint8_t source, const uint8_t *addr, uint16_t len)
|
||||||
{
|
{
|
||||||
if (!ul_log_inited) {
|
if (!ul_log_inited) {
|
||||||
return -1;
|
return -1;
|
||||||
|
@@ -682,6 +682,11 @@ config BT_LE_PLACE_CONN_RELATED_INTO_IRAM
|
|||||||
depends on BT_CTRL_RUN_IN_FLASH_ONLY
|
depends on BT_CTRL_RUN_IN_FLASH_ONLY
|
||||||
default n
|
default n
|
||||||
|
|
||||||
|
config BT_LE_PLACE_SLEEP_RELATED_INTO_IRAM
|
||||||
|
bool
|
||||||
|
depends on BT_CTRL_RUN_IN_FLASH_ONLY && BT_LE_SLEEP_ENABLE
|
||||||
|
default y
|
||||||
|
|
||||||
config BT_LE_CTRL_CHECK_CONNECT_IND_ACCESS_ADDRESS
|
config BT_LE_CTRL_CHECK_CONNECT_IND_ACCESS_ADDRESS
|
||||||
bool "Enable enhanced Access Address check in CONNECT_IND"
|
bool "Enable enhanced Access Address check in CONNECT_IND"
|
||||||
default n
|
default n
|
||||||
|
@@ -592,13 +592,6 @@ static int esp_intr_free_wrapper(void **ret_handle)
|
|||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if CONFIG_FREERTOS_USE_TICKLESS_IDLE
|
|
||||||
void sleep_modem_light_sleep_overhead_set(uint32_t overhead)
|
|
||||||
{
|
|
||||||
esp_ble_set_wakeup_overhead(overhead);
|
|
||||||
}
|
|
||||||
#endif /* CONFIG_FREERTOS_USE_TICKLESS_IDLE */
|
|
||||||
|
|
||||||
modem_clock_lpclk_src_t esp_bt_get_lpclk_src(void)
|
modem_clock_lpclk_src_t esp_bt_get_lpclk_src(void)
|
||||||
{
|
{
|
||||||
return s_bt_lpclk_src;
|
return s_bt_lpclk_src;
|
||||||
@@ -613,7 +606,7 @@ void esp_bt_set_lpclk_src(modem_clock_lpclk_src_t clk_src)
|
|||||||
s_bt_lpclk_src = clk_src;
|
s_bt_lpclk_src = clk_src;
|
||||||
}
|
}
|
||||||
|
|
||||||
IRAM_ATTR void controller_sleep_cb(uint32_t enable_tick, void *arg)
|
void controller_sleep_cb(uint32_t enable_tick, void *arg)
|
||||||
{
|
{
|
||||||
if (!s_ble_active) {
|
if (!s_ble_active) {
|
||||||
return;
|
return;
|
||||||
@@ -626,7 +619,7 @@ IRAM_ATTR void controller_sleep_cb(uint32_t enable_tick, void *arg)
|
|||||||
s_ble_active = false;
|
s_ble_active = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
IRAM_ATTR void controller_wakeup_cb(void *arg)
|
void controller_wakeup_cb(void *arg)
|
||||||
{
|
{
|
||||||
if (s_ble_active) {
|
if (s_ble_active) {
|
||||||
return;
|
return;
|
||||||
@@ -666,7 +659,7 @@ esp_err_t controller_sleep_init(modem_clock_lpclk_src_t slow_clk_src)
|
|||||||
esp_sleep_enable_bt_wakeup();
|
esp_sleep_enable_bt_wakeup();
|
||||||
ESP_LOGW(NIMBLE_PORT_LOG_TAG, "Enable light sleep, the wake up source is BLE timer");
|
ESP_LOGW(NIMBLE_PORT_LOG_TAG, "Enable light sleep, the wake up source is BLE timer");
|
||||||
|
|
||||||
rc = esp_pm_register_inform_out_light_sleep_overhead_callback(sleep_modem_light_sleep_overhead_set);
|
rc = esp_pm_register_inform_out_light_sleep_overhead_callback(esp_ble_set_wakeup_overhead);
|
||||||
if (rc != ESP_OK) {
|
if (rc != ESP_OK) {
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
@@ -676,7 +669,7 @@ esp_err_t controller_sleep_init(modem_clock_lpclk_src_t slow_clk_src)
|
|||||||
error:
|
error:
|
||||||
#if CONFIG_FREERTOS_USE_TICKLESS_IDLE
|
#if CONFIG_FREERTOS_USE_TICKLESS_IDLE
|
||||||
esp_sleep_disable_bt_wakeup();
|
esp_sleep_disable_bt_wakeup();
|
||||||
esp_pm_unregister_inform_out_light_sleep_overhead_callback(sleep_modem_light_sleep_overhead_set);
|
esp_pm_unregister_inform_out_light_sleep_overhead_callback(esp_ble_set_wakeup_overhead);
|
||||||
#endif /* CONFIG_FREERTOS_USE_TICKLESS_IDLE */
|
#endif /* CONFIG_FREERTOS_USE_TICKLESS_IDLE */
|
||||||
/*lock should release first and then delete*/
|
/*lock should release first and then delete*/
|
||||||
if (s_pm_lock != NULL) {
|
if (s_pm_lock != NULL) {
|
||||||
@@ -693,7 +686,7 @@ void controller_sleep_deinit(void)
|
|||||||
r_ble_rtc_wake_up_state_clr();
|
r_ble_rtc_wake_up_state_clr();
|
||||||
esp_sleep_disable_bt_wakeup();
|
esp_sleep_disable_bt_wakeup();
|
||||||
esp_sleep_pd_config(ESP_PD_DOMAIN_XTAL, ESP_PD_OPTION_AUTO);
|
esp_sleep_pd_config(ESP_PD_DOMAIN_XTAL, ESP_PD_OPTION_AUTO);
|
||||||
esp_pm_unregister_inform_out_light_sleep_overhead_callback(sleep_modem_light_sleep_overhead_set);
|
esp_pm_unregister_inform_out_light_sleep_overhead_callback(esp_ble_set_wakeup_overhead);
|
||||||
#endif // CONFIG_FREERTOS_USE_TICKLESS_IDLE
|
#endif // CONFIG_FREERTOS_USE_TICKLESS_IDLE
|
||||||
#ifdef CONFIG_PM_ENABLE
|
#ifdef CONFIG_PM_ENABLE
|
||||||
/*lock should release first and then delete*/
|
/*lock should release first and then delete*/
|
||||||
|
@@ -818,3 +818,7 @@ config BT_LE_CTRL_ADV_DATA_LENGTH_ZERO_AUX
|
|||||||
When this option is enabled, auxiliary packets will be present in the events of
|
When this option is enabled, auxiliary packets will be present in the events of
|
||||||
'Non-Connectable and Non-Scannable' regardless of whether the advertising length is 0.
|
'Non-Connectable and Non-Scannable' regardless of whether the advertising length is 0.
|
||||||
If this option is not enabled, auxiliary packets will only be present when the advertising length is not 0.
|
If this option is not enabled, auxiliary packets will only be present when the advertising length is not 0.
|
||||||
|
|
||||||
|
config BT_LE_RXBUF_OPT_ENABLED
|
||||||
|
bool "Enable rxbuf optimization feature"
|
||||||
|
default y
|
||||||
|
@@ -47,6 +47,9 @@ void adv_stack_enableScanReqRxdVsEvent(bool en);
|
|||||||
void conn_stack_enableChanMapUpdCompVsEvent(bool en);
|
void conn_stack_enableChanMapUpdCompVsEvent(bool en);
|
||||||
void sleep_stack_enableWakeupVsEvent(bool en);
|
void sleep_stack_enableWakeupVsEvent(bool en);
|
||||||
#endif // (CONFIG_BT_NIMBLE_ENABLED || CONFIG_BT_BLUEDROID_ENABLED)
|
#endif // (CONFIG_BT_NIMBLE_ENABLED || CONFIG_BT_BLUEDROID_ENABLED)
|
||||||
|
#if CONFIG_BT_LE_RXBUF_OPT_ENABLED
|
||||||
|
extern void mmgmt_enableRxbufOptFeature(void);
|
||||||
|
#endif // CONFIG_BT_LE_RXBUF_OPT_ENABLED
|
||||||
|
|
||||||
/* Local functions definition
|
/* Local functions definition
|
||||||
***************************************************************************
|
***************************************************************************
|
||||||
@@ -143,6 +146,10 @@ int ble_stack_enable(void)
|
|||||||
ble_stack_enableVsEvents(true);
|
ble_stack_enableVsEvents(true);
|
||||||
#endif // (CONFIG_BT_NIMBLE_ENABLED || CONFIG_BT_BLUEDROID_ENABLED)
|
#endif // (CONFIG_BT_NIMBLE_ENABLED || CONFIG_BT_BLUEDROID_ENABLED)
|
||||||
|
|
||||||
|
#if CONFIG_BT_LE_RXBUF_OPT_ENABLED
|
||||||
|
mmgmt_enableRxbufOptFeature();
|
||||||
|
#endif // CONFIG_BT_LE_RXBUF_OPT_ENABLED
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -822,3 +822,7 @@ config BT_LE_CTRL_ADV_DATA_LENGTH_ZERO_AUX
|
|||||||
When this option is enabled, auxiliary packets will be present in the events of
|
When this option is enabled, auxiliary packets will be present in the events of
|
||||||
'Non-Connectable and Non-Scannable' regardless of whether the advertising length is 0.
|
'Non-Connectable and Non-Scannable' regardless of whether the advertising length is 0.
|
||||||
If this option is not enabled, auxiliary packets will only be present when the advertising length is not 0.
|
If this option is not enabled, auxiliary packets will only be present when the advertising length is not 0.
|
||||||
|
|
||||||
|
config BT_LE_RXBUF_OPT_ENABLED
|
||||||
|
bool "Enable rxbuf optimization feature"
|
||||||
|
default y
|
||||||
|
@@ -44,6 +44,9 @@ void adv_stack_enableScanReqRxdVsEvent(bool en);
|
|||||||
void conn_stack_enableChanMapUpdCompVsEvent(bool en);
|
void conn_stack_enableChanMapUpdCompVsEvent(bool en);
|
||||||
void sleep_stack_enableWakeupVsEvent(bool en);
|
void sleep_stack_enableWakeupVsEvent(bool en);
|
||||||
#endif // (CONFIG_BT_NIMBLE_ENABLED || CONFIG_BT_BLUEDROID_ENABLED)
|
#endif // (CONFIG_BT_NIMBLE_ENABLED || CONFIG_BT_BLUEDROID_ENABLED)
|
||||||
|
#if CONFIG_BT_LE_RXBUF_OPT_ENABLED
|
||||||
|
extern void mmgmt_enableRxbufOptFeature(void);
|
||||||
|
#endif // CONFIG_BT_LE_RXBUF_OPT_ENABLED
|
||||||
|
|
||||||
/* Local functions definition
|
/* Local functions definition
|
||||||
***************************************************************************
|
***************************************************************************
|
||||||
@@ -137,6 +140,10 @@ int ble_stack_enable(void)
|
|||||||
ble_stack_enableVsEvents(true);
|
ble_stack_enableVsEvents(true);
|
||||||
#endif // (CONFIG_BT_NIMBLE_ENABLED || CONFIG_BT_BLUEDROID_ENABLED)
|
#endif // (CONFIG_BT_NIMBLE_ENABLED || CONFIG_BT_BLUEDROID_ENABLED)
|
||||||
|
|
||||||
|
#if CONFIG_BT_LE_RXBUF_OPT_ENABLED
|
||||||
|
mmgmt_enableRxbufOptFeature();
|
||||||
|
#endif // CONFIG_BT_LE_RXBUF_OPT_ENABLED
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Submodule components/bt/controller/lib_esp32c2/esp32c2-bt-lib updated: c0d98a9a03...a69fafcc0a
Submodule components/bt/controller/lib_esp32c6/esp32c6-bt-lib updated: 246541ab93...73812a3edc
Submodule components/bt/controller/lib_esp32h2/esp32h2-bt-lib updated: a3192174a9...dcbae97062
@@ -10,6 +10,10 @@ entries:
|
|||||||
entries:
|
entries:
|
||||||
.conn_iram1+
|
.conn_iram1+
|
||||||
|
|
||||||
|
[sections:bt_sleep_iram_text]
|
||||||
|
entries:
|
||||||
|
.sleep_iram1+
|
||||||
|
|
||||||
[sections:bt_bss]
|
[sections:bt_bss]
|
||||||
entries:
|
entries:
|
||||||
.bss+
|
.bss+
|
||||||
@@ -39,6 +43,10 @@ entries:
|
|||||||
else:
|
else:
|
||||||
bt_conn_iram_text -> flash_text
|
bt_conn_iram_text -> flash_text
|
||||||
bt_isr_iram_text -> flash_text
|
bt_isr_iram_text -> flash_text
|
||||||
|
if BT_LE_PLACE_SLEEP_RELATED_INTO_IRAM = y:
|
||||||
|
bt_sleep_iram_text -> iram0_bt_text
|
||||||
|
else:
|
||||||
|
bt_sleep_iram_text -> flash_text
|
||||||
else:
|
else:
|
||||||
bt_iram_text -> iram0_bt_text
|
bt_iram_text -> iram0_bt_text
|
||||||
bt_bss -> dram0_bt_bss
|
bt_bss -> dram0_bt_bss
|
||||||
@@ -47,6 +55,7 @@ entries:
|
|||||||
|
|
||||||
bt_conn_iram_text -> iram0_bt_text
|
bt_conn_iram_text -> iram0_bt_text
|
||||||
bt_isr_iram_text -> iram0_bt_text
|
bt_isr_iram_text -> iram0_bt_text
|
||||||
|
bt_sleep_iram_text -> iram0_bt_text
|
||||||
|
|
||||||
# For the following fragments, order matters for
|
# For the following fragments, order matters for
|
||||||
# 'ALIGN(4) ALIGN(4, post) SURROUND(sym)', which generates:
|
# 'ALIGN(4) ALIGN(4, post) SURROUND(sym)', which generates:
|
||||||
|
@@ -110,7 +110,9 @@ IRAM_ATTR npl_freertos_event_init(struct ble_npl_event *ev, ble_npl_event_fn *fn
|
|||||||
void
|
void
|
||||||
IRAM_ATTR npl_freertos_event_deinit(struct ble_npl_event *ev)
|
IRAM_ATTR npl_freertos_event_deinit(struct ble_npl_event *ev)
|
||||||
{
|
{
|
||||||
BLE_LL_ASSERT(ev->event);
|
if (!ev->event) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
#if OS_MEM_ALLOC
|
#if OS_MEM_ALLOC
|
||||||
os_memblock_put(&ble_freertos_ev_pool,ev->event);
|
os_memblock_put(&ble_freertos_ev_pool,ev->event);
|
||||||
#else
|
#else
|
||||||
|
Reference in New Issue
Block a user