From 8184004a4ea93a9be455d3adeb8f3dd0ecb9d85f Mon Sep 17 00:00:00 2001 From: Zhou Xiao Date: Fri, 23 May 2025 12:29:46 +0800 Subject: [PATCH 1/4] fix(ble): fixed printf va list cross function pass failure --- .../bt/common/ble_log/ble_log_spi_out.c | 40 ++++++++++++++----- 1 file changed, 30 insertions(+), 10 deletions(-) diff --git a/components/bt/common/ble_log/ble_log_spi_out.c b/components/bt/common/ble_log/ble_log_spi_out.c index bdeb79f117..e2624a2a95 100644 --- a/components/bt/common/ble_log/ble_log_spi_out.c +++ b/components/bt/common/ble_log/ble_log_spi_out.c @@ -183,7 +183,7 @@ static void spi_out_log_flush(void); static int spi_out_ul_log_init(void); static void spi_out_ul_log_deinit(void); static void spi_out_ul_log_write(uint8_t source, const uint8_t *addr, uint16_t len, bool with_ts); -static bool spi_out_ul_log_printf(uint8_t source, const char *format, va_list args); +static bool spi_out_ul_log_printf(uint8_t source, const char *format, va_list args, int offset); #if SPI_OUT_LL_ENABLED static int spi_out_ll_log_init(void); @@ -589,12 +589,14 @@ static void spi_out_ul_log_write(uint8_t source, const uint8_t *addr, uint16_t l spi_out_log_cb_write_loss(ul_log_cb); } -static bool spi_out_ul_log_printf(uint8_t source, const char *format, va_list args) +static bool spi_out_ul_log_printf(uint8_t source, const char *format, va_list args, int offset) { - int len = vsnprintf((char *)ul_log_str_buf, SPI_OUT_UL_LOG_STR_BUF_SIZE, format, args); + int len = vsnprintf((char *)(ul_log_str_buf + offset), + SPI_OUT_UL_LOG_STR_BUF_SIZE - offset, format, args); if (len < 0) { return false; } + len += offset; // Truncate string if overflowed if (len >= SPI_OUT_UL_LOG_STR_BUF_SIZE) { @@ -1103,16 +1105,23 @@ int ble_log_spi_out_printf(uint8_t source, const char *format, ...) return -1; } + if (!format) { + return -1; + } + // Get arguments va_list args; va_start(args, format); + va_list args_copy; + va_copy(args_copy, args); + xSemaphoreTake(ul_log_mutex, portMAX_DELAY); - bool ret = spi_out_ul_log_printf(source, format, args); + bool ret = spi_out_ul_log_printf(source, format, args_copy, 0); xSemaphoreGive(ul_log_mutex); + va_end(args_copy); va_end(args); - return ret? 0: -1; } @@ -1122,18 +1131,29 @@ int ble_log_spi_out_printf_enh(uint8_t source, uint8_t level, const char *tag, c return -1; } + if (!tag || !format) { + return -1; + } + va_list args; va_start(args, format); + va_list args_copy; + va_copy(args_copy, args); + // Create log prefix in the format: "[level][tag] " + bool ret = false; xSemaphoreTake(ul_log_mutex, portMAX_DELAY); - snprintf((char *)ul_log_str_buf, SPI_OUT_UL_LOG_STR_BUF_SIZE, - "[%d][%s] %s", level, tag? tag: "NULL", format); - bool ret = spi_out_ul_log_printf(source, (const char *)ul_log_str_buf, args); + int prefix_len = snprintf((char *)ul_log_str_buf, SPI_OUT_UL_LOG_STR_BUF_SIZE, + "[%d][%s]", level, tag? tag: "NULL"); + if ((prefix_len < 0) || (prefix_len >= SPI_OUT_UL_LOG_STR_BUF_SIZE)) { + goto exit; + } + ret = spi_out_ul_log_printf(source, format, args_copy, prefix_len); +exit: xSemaphoreGive(ul_log_mutex); - + va_end(args_copy); va_end(args); - return ret? 0: -1; } From f582bd9ed0a1f327d74fa46572ea6ffaaec58b09 Mon Sep 17 00:00:00 2001 From: Zhou Xiao Date: Fri, 23 May 2025 19:11:50 +0800 Subject: [PATCH 2/4] fix(ble): fixed ts sync sleep support trigger --- components/bt/common/ble_log/ble_log_spi_out.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/bt/common/ble_log/ble_log_spi_out.c b/components/bt/common/ble_log/ble_log_spi_out.c index e2624a2a95..3e2f3057c9 100644 --- a/components/bt/common/ble_log/ble_log_spi_out.c +++ b/components/bt/common/ble_log/ble_log_spi_out.c @@ -1053,7 +1053,7 @@ IRAM_ATTR void ble_log_spi_out_ll_write(uint32_t len, const uint8_t *addr, uint3 #if SPI_OUT_TS_SYNC_SLEEP_SUPPORT if (ts_sync_inited && ts_sync_enabled) { - if ((last_tx_done_ts - ts_sync_data.esp_ts) >= SPI_OUT_TS_SYNC_TIMEOUT) { + if (last_tx_done_ts >= (SPI_OUT_TS_SYNC_TIMEOUT + ts_sync_data.esp_ts)) { if (spi_out_log_cb_check_trans(ll_task_log_cb, sizeof(ts_sync_data_t), &need_append)) { spi_out_ts_sync_toggle(); spi_out_log_cb_write(ll_task_log_cb, (const uint8_t *)&ts_sync_data, From b8c1c2b61640cb0f4594d2574ae192c536ef7fa2 Mon Sep 17 00:00:00 2001 From: Zhou Xiao Date: Mon, 26 May 2025 10:46:19 +0800 Subject: [PATCH 3/4] fix(ble): fixed spi log init failure return value for ESP32 --- components/bt/controller/esp32/bt.c | 1 + 1 file changed, 1 insertion(+) diff --git a/components/bt/controller/esp32/bt.c b/components/bt/controller/esp32/bt.c index abf5c3d4d3..bf85ceb4b7 100644 --- a/components/bt/controller/esp32/bt.c +++ b/components/bt/controller/esp32/bt.c @@ -1701,6 +1701,7 @@ esp_err_t esp_bt_controller_init(esp_bt_controller_config_t *cfg) #if CONFIG_BT_BLE_LOG_SPI_OUT_ENABLED if (ble_log_spi_out_init() != 0) { ESP_LOGE(BTDM_LOG_TAG, "BLE Log SPI output init failed"); + err = ESP_ERR_NO_MEM; goto error; } #endif // CONFIG_BT_BLE_LOG_SPI_OUT_ENABLED From 3ce74704344063d13f2d94198b41f05e963950ae Mon Sep 17 00:00:00 2001 From: Zhou Xiao Date: Mon, 26 May 2025 15:33:47 +0800 Subject: [PATCH 4/4] change(ble): make falling edge when disabling ts sync --- components/bt/common/ble_log/ble_log_spi_out.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/components/bt/common/ble_log/ble_log_spi_out.c b/components/bt/common/ble_log/ble_log_spi_out.c index 3e2f3057c9..c63e447c8f 100644 --- a/components/bt/common/ble_log/ble_log_spi_out.c +++ b/components/bt/common/ble_log/ble_log_spi_out.c @@ -747,10 +747,6 @@ static void spi_out_ts_sync_deinit(void) static void spi_out_ts_sync_enable(bool enable) { - // Reset ts sync io - ts_sync_data.io_level = false; - gpio_set_level(SPI_OUT_SYNC_IO_NUM, (uint32_t)ts_sync_data.io_level); - // Update ts sync status ts_sync_enabled = enable; if (enable) { @@ -771,7 +767,12 @@ static void spi_out_ts_sync_enable(bool enable) } } #endif // !SPI_OUT_TS_SYNC_SLEEP_SUPPORT + if (!ts_sync_data.io_level) { + gpio_set_level(SPI_OUT_SYNC_IO_NUM, 1); + } } + ts_sync_data.io_level = 0; + gpio_set_level(SPI_OUT_SYNC_IO_NUM, (uint32_t)ts_sync_data.io_level); } static void spi_out_ts_sync_toggle(void)