From 87744faea5d833e97297e009bc14b51ef853ca06 Mon Sep 17 00:00:00 2001 From: ShenWeilong Date: Fri, 5 Jun 2026 19:10:51 +0800 Subject: [PATCH] fix(bt): fixed the npl callout stop issue --- .../npl/freertos/include/nimble/npl_freertos.h | 3 ++- .../bt/porting/npl/freertos/src/npl_os_freertos.c | 13 +++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/components/bt/porting/npl/freertos/include/nimble/npl_freertos.h b/components/bt/porting/npl/freertos/include/nimble/npl_freertos.h index 57c2db43e20..6cec8d98228 100644 --- a/components/bt/porting/npl/freertos/include/nimble/npl_freertos.h +++ b/components/bt/porting/npl/freertos/include/nimble/npl_freertos.h @@ -19,7 +19,8 @@ extern "C" { /* Use esp timer instead of FreeRTOS timer to implement the callout. */ #define BLE_NPL_USE_ESP_TIMER (1) #else -#define BLE_NPL_USE_ESP_TIMER (0) +/* Always use esp timer */ +#define BLE_NPL_USE_ESP_TIMER (1) #endif typedef struct { diff --git a/components/bt/porting/npl/freertos/src/npl_os_freertos.c b/components/bt/porting/npl/freertos/src/npl_os_freertos.c index d4b8fc883c5..5430647bb3e 100644 --- a/components/bt/porting/npl/freertos/src/npl_os_freertos.c +++ b/components/bt/porting/npl/freertos/src/npl_os_freertos.c @@ -787,6 +787,9 @@ IRAM_ATTR npl_freertos_callout_reset(struct ble_npl_callout *co, ble_npl_time_t struct ble_npl_callout_freertos *callout = (struct ble_npl_callout_freertos *)co->co; #if BLE_NPL_USE_ESP_TIMER esp_timer_stop(callout->handle); + if (callout->evq) { + npl_freertos_eventq_remove(callout->evq, &callout->ev); + } return esp_err_to_npl_error(esp_timer_start_once(callout->handle, ticks*1000)); #else @@ -798,6 +801,9 @@ IRAM_ATTR npl_freertos_callout_reset(struct ble_npl_callout *co, ble_npl_time_t } if (in_isr()) { xTimerStopFromISR(callout->handle, &woken1); + if (callout->evq) { + npl_freertos_eventq_remove(callout->evq, &callout->ev); + } xTimerChangePeriodFromISR(callout->handle, ticks, &woken2); xTimerResetFromISR(callout->handle, &woken3); @@ -806,6 +812,9 @@ IRAM_ATTR npl_freertos_callout_reset(struct ble_npl_callout *co, ble_npl_time_t } } else { xTimerStop(callout->handle, portMAX_DELAY); + if (callout->evq) { + npl_freertos_eventq_remove(callout->evq, &callout->ev); + } xTimerChangePeriod(callout->handle, ticks, portMAX_DELAY); xTimerReset(callout->handle, portMAX_DELAY); } @@ -828,6 +837,10 @@ IRAM_ATTR npl_freertos_callout_stop(struct ble_npl_callout *co) #else xTimerStop(callout->handle, portMAX_DELAY); #endif + + if (callout->evq) { + npl_freertos_eventq_remove(callout->evq, &callout->ev); + } } bool