fix(bt): fixed the npl callout stop issue

This commit is contained in:
ShenWeilong
2026-06-05 19:10:51 +08:00
parent df148c4adb
commit bb4eeb8edc
4 changed files with 30 additions and 2 deletions

View File

@@ -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 {

View File

@@ -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

View File

@@ -28,7 +28,8 @@ extern "C" {
/* Use esp timer instead of FreeRTOS timer to implement the callout. */
#define BTDM_OSAL_USE_ESP_TIMER (1)
#else
#define BTDM_OSAL_USE_ESP_TIMER (0)
/* Always use esp timer */
#define BTDM_OSAL_USE_ESP_TIMER (1)
#endif
struct btdm_osal_event_freertos {

View File

@@ -795,6 +795,9 @@ wr_btdm_osal_callout_reset(struct btdm_osal_callout *co, btdm_osal_time_t ticks)
struct btdm_osal_callout_freertos *callout = (struct btdm_osal_callout_freertos *)co->co;
#if BTDM_OSAL_USE_ESP_TIMER
esp_timer_stop(callout->handle);
if (callout->evq) {
btdm_osal_eventq_remove(callout->evq, &callout->ev);
}
return esp_err_to_npl_error(esp_timer_start_once(callout->handle, ticks * 1000));
#else
@@ -806,6 +809,9 @@ wr_btdm_osal_callout_reset(struct btdm_osal_callout *co, btdm_osal_time_t ticks)
}
if (in_isr()) {
xTimerStopFromISR(callout->handle, &woken1);
if (callout->evq) {
btdm_osal_eventq_remove(callout->evq, &callout->ev);
}
xTimerChangePeriodFromISR(callout->handle, ticks, &woken2);
xTimerResetFromISR(callout->handle, &woken3);
@@ -814,6 +820,9 @@ wr_btdm_osal_callout_reset(struct btdm_osal_callout *co, btdm_osal_time_t ticks)
}
} else {
xTimerStop(callout->handle, portMAX_DELAY);
if (callout->evq) {
btdm_osal_eventq_remove(callout->evq, &callout->ev);
}
xTimerChangePeriod(callout->handle, ticks, portMAX_DELAY);
xTimerReset(callout->handle, portMAX_DELAY);
}
@@ -844,6 +853,10 @@ wr_btdm_osal_callout_stop(struct btdm_osal_callout *co)
#else
xTimerStop(callout->handle, portMAX_DELAY);
#endif
if (callout->evq) {
btdm_osal_eventq_remove(callout->evq, &callout->ev);
}
}
bool IRAM_ATTR