From 78f1241f78ddacecdd85486f7582adc189f3bb8d Mon Sep 17 00:00:00 2001 From: Zhou Xiao Date: Fri, 14 Feb 2025 11:54:20 +0800 Subject: [PATCH] feat(ble): support esp ble controller spi output interface for ESP32-C6 (cherry picked from commit 58b8775f95d6584838fdb386f33b96da0e87c56d) Co-authored-by: Zhou Xiao --- components/bt/controller/esp32c6/Kconfig.in | 43 +++++++++++++++++++++ components/bt/controller/esp32c6/bt.c | 20 ++++++++++ 2 files changed, 63 insertions(+) diff --git a/components/bt/controller/esp32c6/Kconfig.in b/components/bt/controller/esp32c6/Kconfig.in index 12db967d04..893a210daf 100644 --- a/components/bt/controller/esp32c6/Kconfig.in +++ b/components/bt/controller/esp32c6/Kconfig.in @@ -342,6 +342,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/esp32c6/bt.c b/components/bt/controller/esp32c6/bt.c index 5dd632f58c..a4aadbfd9d 100644 --- a/components/bt/controller/esp32c6/bt.c +++ b/components/bt/controller/esp32c6/bt.c @@ -56,6 +56,13 @@ #include "hal/efuse_hal.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 ************************************************************************ */ @@ -192,6 +199,7 @@ enum log_out_mode { LOG_DUMP_MEMORY, LOG_ASYNC_OUT, LOG_STORAGE_TO_FLASH, + LOG_SPI_OUT, }; bool log_is_inited = false; @@ -200,6 +208,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 @@ -247,6 +257,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); } @@ -262,6 +279,9 @@ esp_err_t esp_bt_controller_log_init(uint8_t log_output_mode) void esp_bt_ontroller_log_deinit(void) { r_ble_log_deinit_async(); +#if CONFIG_BT_LE_CONTROLLER_LOG_SPI_OUT_ENABLED + ble_log_spi_out_deinit(); +#endif log_is_inited = false; }