From d6fb7d4c0b943ecc354cc8a8a96305d8e03355bf Mon Sep 17 00:00:00 2001 From: Zhou Xiao Date: Fri, 14 Feb 2025 11:53:59 +0800 Subject: [PATCH] feat(ble): support esp ble controller spi output interface for ESP32-C2 (cherry picked from commit 0b57f8ae875e52cfc816ebbb0eb1e7c7fb46cfad) Co-authored-by: Zhou Xiao --- components/bt/controller/esp32c2/Kconfig.in | 43 +++++++++++++++++++++ components/bt/controller/esp32c2/bt.c | 19 +++++++++ 2 files changed, 62 insertions(+) diff --git a/components/bt/controller/esp32c2/Kconfig.in b/components/bt/controller/esp32c2/Kconfig.in index 7ccde3047e..d0f9407b2e 100644 --- a/components/bt/controller/esp32c2/Kconfig.in +++ b/components/bt/controller/esp32c2/Kconfig.in @@ -308,6 +308,49 @@ config BT_LE_CONTROLLER_LOG_DUMP_ONLY help Only operate in dump mode +config BT_LE_CONTROLLER_LOG_SPI_OUT_ENABLED + bool "Output ble controller logs to SPI bus (Experimental)" + depends on BT_LE_CONTROLLER_LOG_ENABLED + depends on !BT_LE_CONTROLLER_LOG_DUMP_ONLY + default n + help + Output ble controller logs to SPI bus + +config BT_LE_CONTROLLER_LOG_SPI_OUT_QUEUE_SIZE + int "Number of ble controller log async SPI output queues" + depends on BT_LE_CONTROLLER_LOG_SPI_OUT_ENABLED + default 4 + help + The number of ble controller log async SPI output queues + +config BT_LE_CONTROLLER_LOG_SPI_OUT_TRANS_BUF_SIZE + int "Size of ble controller log async SPI output transaction buffer size" + depends on BT_LE_CONTROLLER_LOG_SPI_OUT_ENABLED + default 512 + help + The size of ble controller log async SPI output transaction buffer size + +config BT_LE_CONTROLLER_LOG_SPI_OUT_MOSI_IO_NUM + int "GPIO number of SPI MOSI" + depends on BT_LE_CONTROLLER_LOG_SPI_OUT_ENABLED + default 1 + help + GPIO number of SPI MOSI + +config BT_LE_CONTROLLER_LOG_SPI_OUT_SCLK_IO_NUM + int "GPIO number of SPI SCLK" + depends on BT_LE_CONTROLLER_LOG_SPI_OUT_ENABLED + default 6 + help + GPIO number of SPI SCLK + +config BT_LE_CONTROLLER_LOG_SPI_OUT_CS_IO_NUM + int "GPIO number of SPI CS" + depends on BT_LE_CONTROLLER_LOG_SPI_OUT_ENABLED + default 7 + help + GPIO number of SPI CS + config BT_LE_CONTROLLER_LOG_STORAGE_ENABLE bool "Store ble controller logs to flash(Experimental)" depends on !BT_LE_CONTROLLER_LOG_DUMP_ONLY diff --git a/components/bt/controller/esp32c2/bt.c b/components/bt/controller/esp32c2/bt.c index 26b9e9bd86..7ae9ca30cd 100644 --- a/components/bt/controller/esp32c2/bt.c +++ b/components/bt/controller/esp32c2/bt.c @@ -64,6 +64,12 @@ #include "hal/efuse_ll.h" #include "soc/rtc.h" +#if CONFIG_BT_LE_CONTROLLER_LOG_ENABLED +#if CONFIG_BT_LE_CONTROLLER_LOG_SPI_OUT_ENABLED +#include "ble_log/ble_log_spi_out.h" +#endif // CONFIG_BT_LE_CONTROLLER_LOG_SPI_OUT_ENABLED +#endif // CONFIG_BT_LE_CONTROLLER_LOG_ENABLED + /* Macro definition ************************************************************************ */ @@ -210,6 +216,7 @@ enum log_out_mode { LOG_DUMP_MEMORY, LOG_ASYNC_OUT, LOG_STORAGE_TO_FLASH, + LOG_SPI_OUT, }; bool log_is_inited = false; @@ -218,6 +225,8 @@ uint8_t log_output_mode = LOG_DUMP_MEMORY; #else #if CONFIG_BT_LE_CONTROLLER_LOG_STORAGE_ENABLE uint8_t log_output_mode = LOG_STORAGE_TO_FLASH; +#elif CONFIG_BT_LE_CONTROLLER_LOG_SPI_OUT_ENABLED +uint8_t log_output_mode = LOG_SPI_OUT; #else uint8_t log_output_mode = LOG_ASYNC_OUT; #endif // CONFIG_BT_LE_CONTROLLER_LOG_STORAGE_ENABLE @@ -265,6 +274,13 @@ esp_err_t esp_bt_controller_log_init(uint8_t log_output_mode) } #endif // CONFIG_BT_LE_CONTROLLER_LOG_STORAGE_ENABLE break; + case LOG_SPI_OUT: + task_create = true; +#if CONFIG_BT_LE_CONTROLLER_LOG_SPI_OUT_ENABLED + ble_log_spi_out_init(); + bt_controller_log_interface = ble_log_spi_out_write_esp; +#endif // CONFIG_BT_LE_CONTROLLER_LOG_SPI_OUT_ENABLED + break; default: assert(0); } @@ -280,6 +296,9 @@ esp_err_t esp_bt_controller_log_init(uint8_t log_output_mode) void esp_bt_ontroller_log_deinit(void) { ble_log_deinit_async(); +#if CONFIG_BT_LE_CONTROLLER_LOG_SPI_OUT_ENABLED + ble_log_spi_out_deinit(); +#endif log_is_inited = false; }