From 33cddfae156db9f2b0a981d9cf77dd91f275dfb9 Mon Sep 17 00:00:00 2001 From: Zhou Xiao Date: Thu, 20 Aug 2026 15:33:02 +0800 Subject: [PATCH 1/2] refactor(ble_log): remove obsolete unit test hooks --- components/bt/common/ble_log/src/ble_log_rt.c | 6 -- .../bt/common/ble_log/src/ble_log_util.c | 2 - .../src/internal_include/ble_log_util.h | 63 ------------------- 3 files changed, 71 deletions(-) diff --git a/components/bt/common/ble_log/src/ble_log_rt.c b/components/bt/common/ble_log/src/ble_log_rt.c index afec0b1e126..dae3f19d244 100644 --- a/components/bt/common/ble_log/src/ble_log_rt.c +++ b/components/bt/common/ble_log/src/ble_log_rt.c @@ -43,9 +43,7 @@ BLE_LOG_STATIC void ble_log_rt_task(void *pvParameters) ble_log_prph_trans_t *trans = NULL; uint32_t curr_os_ts = 0; uint32_t last_hook_os_ts = 0; -#ifndef UNIT_TEST while (1) -#endif /* !UNIT_TEST */ { /* CRITICAL: * Blocking queue receive is mandatory for light sleep support */ @@ -56,11 +54,7 @@ BLE_LOG_STATIC void ble_log_rt_task(void *pvParameters) /* Task hook */ curr_os_ts = pdTICKS_TO_MS(xTaskGetTickCount()); if ((curr_os_ts - last_hook_os_ts) < BLE_LOG_TASK_HOOK_TIMEOUT_MS) { -#ifndef UNIT_TEST continue; -#else /* UNIT_TEST */ - return; -#endif /* !UNIT_TEST */ } last_hook_os_ts = curr_os_ts; diff --git a/components/bt/common/ble_log/src/ble_log_util.c b/components/bt/common/ble_log/src/ble_log_util.c index 8c84c389aa9..b602f3ced41 100644 --- a/components/bt/common/ble_log/src/ble_log_util.c +++ b/components/bt/common/ble_log/src/ble_log_util.c @@ -17,9 +17,7 @@ #define BLE_LOG_REF_COUNT_WAIT_TIMEOUT_MS (1000) /* VARIABLE */ -#ifndef UNIT_TEST BLE_LOG_DRAM_ATTR portMUX_TYPE ble_log_spin_lock = portMUX_INITIALIZER_UNLOCKED; -#endif /* !UNIT_TEST */ /* INTERNAL INTERFACE */ #include "esp_compiler.h" diff --git a/components/bt/common/ble_log/src/internal_include/ble_log_util.h b/components/bt/common/ble_log/src/internal_include/ble_log_util.h index 274ea1adbd9..f3a99fa8645 100644 --- a/components/bt/common/ble_log/src/internal_include/ble_log_util.h +++ b/components/bt/common/ble_log/src/internal_include/ble_log_util.h @@ -19,10 +19,8 @@ #include "esp_bit_defs.h" #include "freertos/FreeRTOS.h" -#ifndef UNIT_TEST #include "esp_heap_caps.h" #include "esp_rom_serial_output.h" -#endif /* !UNIT_TEST */ /* MACRO */ #define BLE_LOG_ATOMIC_LOAD_ACQUIRE(VAR) __atomic_load_n(&(VAR), __ATOMIC_ACQUIRE) @@ -30,9 +28,6 @@ #define BLE_LOG_ATOMIC_STORE_RELEASE(VAR, VALUE) __atomic_store_n(&(VAR), (VALUE), __ATOMIC_RELEASE) #define BLE_LOG_ATOMIC_STORE_RELAXED(VAR, VALUE) __atomic_store_n(&(VAR), (VALUE), __ATOMIC_RELAXED) -/* Unit test */ -#ifndef UNIT_TEST - /* Reference counting macros */ #define BLE_LOG_REF_COUNT_ACQUIRE(VAR) __atomic_fetch_add(VAR, 1, __ATOMIC_ACQUIRE) #define BLE_LOG_REF_COUNT_RELEASE(VAR) __atomic_fetch_sub(VAR, 1, __ATOMIC_RELEASE) @@ -96,64 +91,6 @@ void ble_log_cas_release(volatile bool *cas_lock) __atomic_store_n(cas_lock, false, __ATOMIC_RELEASE); } -#else /* UNIT_TEST */ - -/* Reference counting macros */ -#define BLE_LOG_REF_COUNT_ACQUIRE(VAR) (*VAR)++ -#define BLE_LOG_REF_COUNT_RELEASE(VAR) (*VAR)-- -#define BLE_LOG_ATOMIC_LOAD_SEQ_CST(VAR) BLE_LOG_ATOMIC_LOAD_ACQUIRE(VAR) -#define BLE_LOG_ATOMIC_STORE_SEQ_CST(VAR, VALUE) BLE_LOG_ATOMIC_STORE_RELAXED(VAR, VALUE) -#define BLE_LOG_REF_COUNT_ACQUIRE_SEQ_CST(VAR) BLE_LOG_REF_COUNT_ACQUIRE(VAR) - -/* Specifier*/ -#define BLE_LOG_STATIC -#define BLE_LOG_INLINE - -/* Section */ -#define BLE_LOG_DRAM_ATTR -#define BLE_LOG_IRAM_ATTR - -/* Memory operation */ -void *mocked_malloc(size_t size); -void mocked_free(void *ptr); -void mocked_memcpy(void *dst, const void *src, size_t len); -void mocked_memset(void *ptr, int value, size_t len); -#define BLE_LOG_MALLOC(size) mocked_malloc(size) -#define BLE_LOG_FREE(ptr) mocked_free(ptr) -#define BLE_LOG_ALIGNED_MALLOC(size) mocked_malloc(size) -#define BLE_LOG_MEMCPY(dst, src, len) mocked_memcpy(dst, src, len) -#define BLE_LOG_MEMSET(ptr, value, len) mocked_memset(ptr, value, len) - -/* Critical section wrapper */ -void mocked_enter_critical(void); -void mocked_exit_critical(void); -#define BLE_LOG_ENTER_CRITICAL() mocked_enter_critical() -#define BLE_LOG_EXIT_CRITICAL() mocked_exit_critical() - -/* FreeRTOS API wrapper */ -bool mocked_in_isr(void); -#define BLE_LOG_IN_ISR() mocked_in_isr() - -/* Spin lock wrapper */ -void mocked_acquire_spin_lock(void *spin_lock); -void mocked_release_spin_lock(void *spin_lock); -#define BLE_LOG_ACQUIRE_SPIN_LOCK(spin_lock) mocked_acquire_spin_lock(spin_lock) -#define BLE_LOG_RELEASE_SPIN_LOCK(spin_lock) mocked_release_spin_lock(spin_lock) - -/* Printf wrapper */ -void mocked_printf(const char *fmt, ...); -#define BLE_LOG_CONSOLE mocked_printf - -/* Assert wrapper */ -void mocked_assert(bool expr); -#define BLE_LOG_ASSERT(expr) mocked_assert(expr) - -#define BLE_LOG_FEED_WDT() - -bool ble_log_cas_acquire(volatile bool *cas_lock); -void ble_log_cas_release(volatile bool *cas_lock); -#endif /* UNIT_TEST */ - #define BLE_LOG_VERSION (5) /* TYPEDEF */ From afc12706a00bfe31340d607464b293b83b1f28d5 Mon Sep 17 00:00:00 2001 From: Zhou Xiao Date: Thu, 20 Aug 2026 16:10:54 +0800 Subject: [PATCH 2/2] refactor(ble_log): simplify timestamp sync scheduling --- components/bt/common/ble_log/Kconfig.in | 61 +++++++++---------- components/bt/common/ble_log/src/ble_log_rt.c | 21 +------ components/bt/common/ble_log/src/ble_log_ts.c | 5 +- .../ble_log/src/internal_include/ble_log_rt.h | 9 +-- 4 files changed, 34 insertions(+), 62 deletions(-) diff --git a/components/bt/common/ble_log/Kconfig.in b/components/bt/common/ble_log/Kconfig.in index fc54c1af528..aeee0f11059 100644 --- a/components/bt/common/ble_log/Kconfig.in +++ b/components/bt/common/ble_log/Kconfig.in @@ -143,7 +143,9 @@ if BLE_LOG_ENABLED bool "Enable BLE Log Timestamp Synchronization (TS)" default n help - Enable BLE Log TS with external logging module + Enable BLE Log TS with external logging module. Synchronization is + triggered periodically by an ESP Timer using task dispatch. The + timer does not wake the system from light sleep. if BLE_LOG_TS_ENABLED config BLE_LOG_SYNC_IO_NUM @@ -152,38 +154,6 @@ if BLE_LOG_ENABLED default 0 help GPIO number for TS toggle output - - config BLE_LOG_TS_TRIGGER_TIMEOUT_MS - int "Timeout (ms) for Timestamp Synchronization toggle" - default 1000 - help - Timeout (ms) for Timestamp Synchronization toggle - - choice BLE_LOG_TS_TRIGGER_CHOICE - prompt "BLE Log Timestamp Synchronization trigger choice" - default BLE_LOG_TS_TRIGGER_TASK_EVENT - help - Choose BLE Log Timestamp Synchronization trigger - - config BLE_LOG_TS_TRIGGER_ESP_TIMER - bool "BLE Log Timestamp Synchronization trigger - ESP Timer" - help - ESP Timer based periodic TS trigger - - config BLE_LOG_TS_TRIGGER_TASK_EVENT - bool "BLE Log Timestamp Synchronization trigger - Task Event" - help - Task Event based TS trigger (Light Sleep Test Compatibility) - endchoice - - config BLE_LOG_TS_TRIGGER_ESP_TIMER_ISR_DISPATCH_METHOD - bool "Utilize ISR dispatch method for ESP Timer as Timestamp Synchronization trigger" - default n - select ESP_TIMER_SUPPORTS_ISR_DISPATCH_METHOD - select GPIO_CTRL_FUNC_IN_IRAM - depends on BLE_LOG_TS_TRIGGER_ESP_TIMER - help - Utilize ISR dispatch method for ESP Timer as Timestamp Synchronization trigger endif choice BLE_LOG_PRPH_CHOICE @@ -288,6 +258,31 @@ if BLE_LOG_ENABLED config BLE_LOG_LBM_LL_TRANS_SIZE int default 512 + + config BLE_LOG_TS_TRIGGER_TIMEOUT_MS + int + depends on BLE_LOG_TS_ENABLED + default 1000 + + config BLE_LOG_TS_TRIGGER_CHOICE + bool + depends on BLE_LOG_TS_ENABLED + default y + + config BLE_LOG_TS_TRIGGER_ESP_TIMER + bool + depends on BLE_LOG_TS_ENABLED + default y + + config BLE_LOG_TS_TRIGGER_TASK_EVENT + bool + depends on BLE_LOG_TS_ENABLED + default n + + config BLE_LOG_TS_TRIGGER_ESP_TIMER_ISR_DISPATCH_METHOD + bool + depends on BLE_LOG_TS_ENABLED + default n endif menu "Legacy SPI Log Output (Deprecated - use BT Log Async Output instead)" diff --git a/components/bt/common/ble_log/src/ble_log_rt.c b/components/bt/common/ble_log/src/ble_log_rt.c index dae3f19d244..7aaac49c4eb 100644 --- a/components/bt/common/ble_log/src/ble_log_rt.c +++ b/components/bt/common/ble_log/src/ble_log_rt.c @@ -25,9 +25,7 @@ BLE_LOG_STATIC TaskHandle_t rt_task_handle = NULL; BLE_LOG_STATIC BLE_LOG_DRAM_ATTR QueueHandle_t rt_queue_handle = NULL; #if CONFIG_BLE_LOG_TS_ENABLED BLE_LOG_STATIC BLE_LOG_DRAM_ATTR uint32_t rt_ts_enabled = 0; -#if CONFIG_BLE_LOG_TS_TRIGGER_ESP_TIMER BLE_LOG_STATIC esp_timer_handle_t rt_ts_timer = NULL; -#endif /* CONFIG_BLE_LOG_TS_TRIGGER_ESP_TIMER */ #endif /* CONFIG_BLE_LOG_TS_ENABLED */ /* PRIVATE FUNCTION DECLARATION */ @@ -53,7 +51,7 @@ BLE_LOG_STATIC void ble_log_rt_task(void *pvParameters) /* Task hook */ curr_os_ts = pdTICKS_TO_MS(xTaskGetTickCount()); - if ((curr_os_ts - last_hook_os_ts) < BLE_LOG_TASK_HOOK_TIMEOUT_MS) { + if ((curr_os_ts - last_hook_os_ts) < BLE_LOG_TS_TRIGGER_TIMEOUT_MS) { continue; } last_hook_os_ts = curr_os_ts; @@ -65,19 +63,12 @@ BLE_LOG_STATIC void ble_log_rt_task(void *pvParameters) }; ble_log_write_hex(BLE_LOG_SRC_INTERNAL, (const uint8_t *)&ble_log_info, sizeof(ble_log_info_t)); -#if CONFIG_BLE_LOG_TS_TRIGGER_TASK_EVENT - ble_log_rt_ts_trigger(NULL); -#endif /* CONFIG_BLE_LOG_TS_TRIGGER_TASK_EVENT */ - ble_log_write_enh_stat(); ble_log_write_buf_util(); } } #if CONFIG_BLE_LOG_TS_ENABLED -#if CONFIG_BLE_LOG_TS_TRIGGER_ESP_TIMER_ISR_DISPATCH_METHOD -BLE_LOG_IRAM_ATTR -#endif /* CONFIG_BLE_LOG_TS_TRIGGER_ESP_TIMER_ISR_DISPATCH_METHOD */ BLE_LOG_STATIC void ble_log_rt_ts_trigger(void *arg) { (void)arg; @@ -115,23 +106,19 @@ bool ble_log_rt_init(void) #if CONFIG_BLE_LOG_TS_ENABLED BLE_LOG_ATOMIC_STORE_RELAXED(rt_ts_enabled, false); -#if CONFIG_BLE_LOG_TS_TRIGGER_ESP_TIMER /* Initialize ESP Timer Trigger */ esp_timer_create_args_t ts_timer_args = { .callback = ble_log_rt_ts_trigger, .arg = NULL, -#if CONFIG_BLE_LOG_TS_TRIGGER_ESP_TIMER_ISR_DISPATCH_METHOD - .dispatch_method = ESP_TIMER_ISR, -#endif /* CONFIG_BLE_LOG_TS_TRIGGER_ESP_TIMER_ISR_DISPATCH_METHOD */ .name = "ble_log_ts_timer", + .skip_unhandled_events = true, }; if (esp_timer_create(&ts_timer_args, &rt_ts_timer) != ESP_OK) { goto exit; } - if (esp_timer_start_periodic(rt_ts_timer, BLE_LOG_TS_TRIGGER_TIMEOUT_US) != ESP_OK) { + if (esp_timer_start_periodic(rt_ts_timer, BLE_LOG_TS_TRIGGER_TIMEOUT_MS * 1000) != ESP_OK) { goto exit; } -#endif /* CONFIG_BLE_LOG_TS_TRIGGER_ESP_TIMER */ #endif /* CONFIG_BLE_LOG_TS_ENABLED */ BLE_LOG_ATOMIC_STORE_RELEASE(rt_inited, true); @@ -154,13 +141,11 @@ void ble_log_rt_deinit(void) } #if CONFIG_BLE_LOG_TS_ENABLED BLE_LOG_ATOMIC_STORE_RELEASE(rt_ts_enabled, false); -#if CONFIG_BLE_LOG_TS_TRIGGER_ESP_TIMER if (rt_ts_timer) { esp_timer_stop_blocking(rt_ts_timer, portMAX_DELAY); esp_timer_delete(rt_ts_timer); rt_ts_timer = NULL; } -#endif /* CONFIG_BLE_LOG_TS_TRIGGER_ESP_TIMER */ #endif /* CONFIG_BLE_LOG_TS_ENABLED */ /* CRITICAL: diff --git a/components/bt/common/ble_log/src/ble_log_ts.c b/components/bt/common/ble_log/src/ble_log_ts.c index 8fd7d1f1ab8..03f931fe6ce 100644 --- a/components/bt/common/ble_log/src/ble_log_ts.c +++ b/components/bt/common/ble_log/src/ble_log_ts.c @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2025 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2025-2026 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ @@ -61,9 +61,6 @@ void ble_log_ts_deinit(void) gpio_reset_pin(CONFIG_BLE_LOG_SYNC_IO_NUM); } -#if CONFIG_BLE_LOG_TS_TRIGGER_ESP_TIMER_ISR_DISPATCH_METHOD -BLE_LOG_IRAM_ATTR -#endif /* CONFIG_BLE_LOG_TS_TRIGGER_ESP_TIMER_ISR_DISPATCH_METHOD */ void ble_log_ts_info_update(ble_log_ts_info_t **info) { if (!ts_inited) { diff --git a/components/bt/common/ble_log/src/internal_include/ble_log_rt.h b/components/bt/common/ble_log/src/internal_include/ble_log_rt.h index 13b6aa43658..f6295692763 100644 --- a/components/bt/common/ble_log/src/internal_include/ble_log_rt.h +++ b/components/bt/common/ble_log/src/internal_include/ble_log_rt.h @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2025 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2025-2026 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ @@ -22,12 +22,7 @@ /* MACRO */ #define BLE_LOG_TASK_PRIO (ESP_TASK_PRIO_MAX - 1) #define BLE_LOG_TASK_STACK_SIZE CONFIG_BLE_LOG_TASK_STACK_SIZE -#if CONFIG_BLE_LOG_TS_ENABLED -#define BLE_LOG_TS_TRIGGER_TIMEOUT_US (CONFIG_BLE_LOG_TS_TRIGGER_TIMEOUT_MS * 1000) -#define BLE_LOG_TASK_HOOK_TIMEOUT_MS CONFIG_BLE_LOG_TS_TRIGGER_TIMEOUT_MS -#else /* !CONFIG_BLE_LOG_TS_ENABLED */ -#define BLE_LOG_TASK_HOOK_TIMEOUT_MS (1000) -#endif /* CONFIG_BLE_LOG_TS_ENABLED */ +#define BLE_LOG_TS_TRIGGER_TIMEOUT_MS (1000) /* INTERFACE */ bool ble_log_rt_init(void);