From b1443370206da60846706ca3fd1e3fb79f8ed2c3 Mon Sep 17 00:00:00 2001 From: Zhou Xiao Date: Wed, 26 Feb 2025 12:27:22 +0800 Subject: [PATCH] fix(ble): fix flushout and sync issues --- components/bt/common/ble_log/ble_log_spi_out.c | 18 ++++++++++++------ .../ble_log/include/ble_log/ble_log_spi_out.h | 2 ++ 2 files changed, 14 insertions(+), 6 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 885fee17a8..a85fc3bfc2 100644 --- a/components/bt/common/ble_log/ble_log_spi_out.c +++ b/components/bt/common/ble_log/ble_log_spi_out.c @@ -176,8 +176,10 @@ IRAM_ATTR static void esp_timer_cb_flushout(void) if (trans_head->trans.length) { spi_out_append_trans(); } - } else { - // Restart flushout timer + } + + // Restart flushout timer if not active + if (!esp_timer_is_active(flushout_timer_handle)) { esp_timer_start_once(flushout_timer_handle, SPI_OUT_FLUSHOUT_TIMEOUT); } @@ -193,6 +195,9 @@ IRAM_ATTR static void esp_timer_cb_ts_sync(void) uint32_t lc_ts = 0; uint32_t esp_ts = 0; + // Toggle sync IO + sync_io_level = !sync_io_level; + // Enter critical portMUX_TYPE spinlock = portMUX_INITIALIZER_UNLOCKED; portENTER_CRITICAL_SAFE(&spinlock); @@ -205,7 +210,7 @@ IRAM_ATTR static void esp_timer_cb_ts_sync(void) lc_ts = r_os_cputime_get32(); #endif // CONFIG_IDF_TARGET_ESP32C2 - // Toggle Sync IO + // Set sync IO level gpio_set_level(CONFIG_BT_BLE_LOG_SPI_OUT_SYNC_IO_NUM, (uint32_t)sync_io_level); // Get ESP timestamp @@ -219,9 +224,6 @@ IRAM_ATTR static void esp_timer_cb_ts_sync(void) memcpy(sync_frame + 1, &lc_ts, sizeof(lc_ts)); memcpy(sync_frame + 5, &esp_ts, sizeof(esp_ts)); ble_log_spi_out_write(BLE_LOG_SPI_OUT_SOURCE_SYNC, sync_frame, 9); - - // Update IO level - sync_io_level = !sync_io_level; } #endif // CONFIG_BT_BLE_LOG_SPI_OUT_TS_SYNC_ENABLED @@ -351,6 +353,10 @@ void ble_log_spi_out_ts_sync_stop(void) if (esp_timer_is_active(ts_sync_timer_handle)) { esp_timer_stop(ts_sync_timer_handle); } + + // Set sync IO to low level + sync_io_level = 0; + gpio_set_level(CONFIG_BT_BLE_LOG_SPI_OUT_SYNC_IO_NUM, (uint32_t)sync_io_level); } } #endif // CONFIG_BT_BLE_LOG_SPI_OUT_TS_SYNC_ENABLED diff --git a/components/bt/common/ble_log/include/ble_log/ble_log_spi_out.h b/components/bt/common/ble_log/include/ble_log/ble_log_spi_out.h index ca167f8fb9..c1a4506637 100644 --- a/components/bt/common/ble_log/include/ble_log/ble_log_spi_out.h +++ b/components/bt/common/ble_log/include/ble_log/ble_log_spi_out.h @@ -6,6 +6,7 @@ #ifndef __BT_SPI_OUT_H__ #define __BT_SPI_OUT_H__ +#include #include #include "driver/spi_master.h" #include "driver/gpio.h" @@ -19,6 +20,7 @@ #define BLE_LOG_SPI_OUT_SOURCE_NIMBLE 3 #define BLE_LOG_SPI_OUT_SOURCE_HCI_UPSTREAM 4 #define BLE_LOG_SPI_OUT_SOURCE_HCI_DOWNSTREAM 5 +#define BLE_LOG_SPI_OUT_SOURCE_USER 0x10 #define BLE_LOG_SPI_OUT_SOURCE_SYNC 0xFE #define BLE_LOG_SPI_OUT_SOURCE_LOSS 0xFF