From 96e01bf510c147741a09a855335c51e72f567e57 Mon Sep 17 00:00:00 2001 From: Zhou Xiao Date: Fri, 14 Feb 2025 11:54:05 +0800 Subject: [PATCH] feat(ble): support esp ble controller spi output interface for ESP32-H2 (cherry picked from commit 9c98c7e040509836671fea35c63728e4768d3d00) Co-authored-by: Zhou Xiao --- components/bt/controller/esp32h2/Kconfig.in | 43 +++++++++++++++++++++ components/bt/controller/esp32h2/bt.c | 20 ++++++++++ 2 files changed, 63 insertions(+) diff --git a/components/bt/controller/esp32h2/Kconfig.in b/components/bt/controller/esp32h2/Kconfig.in index c8936bdbec..a05ecb77c4 100644 --- a/components/bt/controller/esp32h2/Kconfig.in +++ b/components/bt/controller/esp32h2/Kconfig.in @@ -333,6 +333,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 25 + 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 26 + 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 27 + 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/esp32h2/bt.c b/components/bt/controller/esp32h2/bt.c index 97e0213fc3..c63459d3c9 100644 --- a/components/bt/controller/esp32h2/bt.c +++ b/components/bt/controller/esp32h2/bt.c @@ -52,6 +52,13 @@ #include "esp_private/periph_ctrl.h" #include "esp_sleep.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 ************************************************************************ */ @@ -190,6 +197,7 @@ enum log_out_mode { LOG_DUMP_MEMORY, LOG_ASYNC_OUT, LOG_STORAGE_TO_FLASH, + LOG_SPI_OUT, }; bool log_is_inited = false; @@ -198,6 +206,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 @@ -245,6 +255,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); } @@ -259,6 +276,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; }