diff --git a/components/bt/controller/esp32h2/Kconfig.in b/components/bt/controller/esp32h2/Kconfig.in index 5ff989a8b4..87de9de997 100644 --- a/components/bt/controller/esp32h2/Kconfig.in +++ b/components/bt/controller/esp32h2/Kconfig.in @@ -355,6 +355,16 @@ menu "Controller debug features" help Output ble controller logs to SPI bus + config BT_LE_CONTROLLER_LOG_UHCI_OUT_ENABLED + bool "Output ble controller logs via UART DMA (Experimental)" + depends on BT_LE_CONTROLLER_LOG_ENABLED + depends on !BT_LE_CONTROLLER_LOG_DUMP_ONLY + depends on !BT_LE_CONTROLLER_LOG_SPI_OUT_ENABLED + select BT_BLE_LOG_UHCI_OUT_ENABLED + default y + help + Output ble controller logs via UART DMA + 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 28672c244a..e4f34c5935 100644 --- a/components/bt/controller/esp32h2/bt.c +++ b/components/bt/controller/esp32h2/bt.c @@ -59,6 +59,10 @@ #include "ble_log/ble_log_spi_out.h" #endif // CONFIG_BT_BLE_LOG_SPI_OUT_ENABLED +#if CONFIG_BT_BLE_LOG_UHCI_OUT_ENABLED +#include "ble_log/ble_log_uhci_out.h" +#endif // CONFIG_BT_BLE_LOG_UHCI_OUT_ENABLED + /* Macro definition ************************************************************************ */ @@ -191,9 +195,9 @@ static int esp_ecc_gen_key_pair(uint8_t *pub, uint8_t *priv); static int esp_ecc_gen_dh_key(const uint8_t *peer_pub_key_x, const uint8_t *peer_pub_key_y, const uint8_t *our_priv_key, uint8_t *out_dhkey); #if CONFIG_BT_LE_CONTROLLER_LOG_ENABLED -#if !CONFIG_BT_LE_CONTROLLER_LOG_SPI_OUT_ENABLED +#if !CONFIG_BT_LE_CONTROLLER_LOG_SPI_OUT_ENABLED && !CONFIG_BT_LE_CONTROLLER_LOG_UHCI_OUT_ENABLED static void esp_bt_controller_log_interface(uint32_t len, const uint8_t *addr, uint32_t len_append, const uint8_t *addr_append, uint32_t flag); -#endif // !CONFIG_BT_LE_CONTROLLER_LOG_SPI_OUT_ENABLED +#endif // !CONFIG_BT_LE_CONTROLLER_LOG_SPI_OUT_ENABLED && !CONFIG_BT_LE_CONTROLLER_LOG_UHCI_OUT_ENABLED #if CONFIG_BT_LE_CONTROLLER_LOG_STORAGE_ENABLE static void esp_bt_ctrl_log_partition_get_and_erase_first_block(void); #endif // CONFIG_BT_LE_CONTROLLER_LOG_STORAGE_ENABLE @@ -220,11 +224,21 @@ esp_err_t esp_bt_controller_log_init(void) } #endif // CONFIG_BT_BLE_LOG_SPI_OUT_ENABLED +#if CONFIG_BT_BLE_LOG_UHCI_OUT_ENABLED + if (ble_log_uhci_out_init() != 0) { + goto uhci_out_init_failed; + } +#endif // CONFIG_BT_BLE_LOG_UHCI_OUT_ENABLED + #if CONFIG_BT_LE_CONTROLLER_LOG_SPI_OUT_ENABLED if (r_ble_log_init_simple(ble_log_spi_out_ll_write, ble_log_spi_out_ll_log_ev_proc) != 0) { goto log_init_failed; } -#else // !CONFIG_BT_LE_CONTROLLER_LOG_SPI_OUT_ENABLED +#elif CONFIG_BT_LE_CONTROLLER_LOG_UHCI_OUT_ENABLED + if (r_ble_log_init_simple(ble_log_uhci_out_ll_write, ble_log_uhci_out_ll_log_ev_proc) != 0) { + goto log_init_failed; + } +#else uint8_t buffers = 0; #if CONFIG_BT_LE_CONTROLLER_LOG_CTRL_ENABLED buffers |= ESP_BLE_LOG_BUF_CONTROLLER; @@ -238,12 +252,12 @@ esp_err_t esp_bt_controller_log_init(void) task_create = false; #elif CONFIG_BT_LE_CONTROLLER_LOG_STORAGE_ENABLE esp_bt_ctrl_log_partition_get_and_erase_first_block(); -#endif // CONFIG_BT_LE_CONTROLLER_LOG_SPI_OUT_ENABLED +#endif if (r_ble_log_init_async(esp_bt_controller_log_interface, task_create, buffers, (uint32_t *)log_bufs_size) != 0) { goto log_init_failed; } -#endif // CONFIG_BT_LE_CONTROLLER_LOG_SPI_OUT_ENABLED +#endif if (r_ble_log_ctrl_level_and_mod(CONFIG_BT_LE_CONTROLLER_LOG_OUTPUT_LEVEL, CONFIG_BT_LE_CONTROLLER_LOG_MOD_OUTPUT_SWITCH) != ESP_OK) { goto ctrl_level_init_failed; @@ -254,14 +268,20 @@ esp_err_t esp_bt_controller_log_init(void) ctrl_level_init_failed: #if CONFIG_BT_LE_CONTROLLER_LOG_SPI_OUT_ENABLED r_ble_log_deinit_simple(); -#else // !CONFIG_BT_LE_CONTROLLER_LOG_SPI_OUT_ENABLED +#elif CONFIG_BT_LE_CONTROLLER_LOG_UHCI_OUT_ENABLED + r_ble_log_deinit_simple(); +#else r_ble_log_deinit_async(); -#endif // CONFIG_BT_LE_CONTROLLER_LOG_SPI_OUT_ENABLED +#endif log_init_failed: #if CONFIG_BT_BLE_LOG_SPI_OUT_ENABLED ble_log_spi_out_deinit(); spi_out_init_failed: #endif // CONFIG_BT_BLE_LOG_SPI_OUT_ENABLED +#if CONFIG_BT_BLE_LOG_UHCI_OUT_ENABLED + ble_log_uhci_out_deinit(); +uhci_out_init_failed: +#endif // CONFIG_BT_BLE_LOG_UHCI_OUT_ENABLED return ESP_FAIL; } @@ -271,11 +291,17 @@ void esp_bt_controller_log_deinit(void) ble_log_spi_out_deinit(); #endif // CONFIG_BT_BLE_LOG_SPI_OUT_ENABLED +#if CONFIG_BT_BLE_LOG_UHCI_OUT_ENABLED + ble_log_uhci_out_deinit(); +#endif // CONFIG_BT_BLE_LOG_UHCI_OUT_ENABLED + #if CONFIG_BT_LE_CONTROLLER_LOG_SPI_OUT_ENABLED r_ble_log_deinit_simple(); -#else // !CONFIG_BT_LE_CONTROLLER_LOG_SPI_OUT_ENABLED +#elif CONFIG_BT_LE_CONTROLLER_LOG_UHCI_OUT_ENABLED + r_ble_log_deinit_simple(); +#else r_ble_log_deinit_async(); -#endif // CONFIG_BT_LE_CONTROLLER_LOG_SPI_OUT_ENABLED +#endif log_is_inited = false; } @@ -1406,7 +1432,7 @@ esp_power_level_t esp_ble_tx_power_get_enhanced(esp_ble_enhanced_power_type_t po } #if CONFIG_BT_LE_CONTROLLER_LOG_ENABLED -#if !CONFIG_BT_LE_CONTROLLER_LOG_SPI_OUT_ENABLED +#if !CONFIG_BT_LE_CONTROLLER_LOG_SPI_OUT_ENABLED && !CONFIG_BT_LE_CONTROLLER_LOG_UHCI_OUT_ENABLED static void esp_bt_controller_log_interface(uint32_t len, const uint8_t *addr, uint32_t len_append, const uint8_t *addr_append, uint32_t flag) { bool end = (flag & BIT(BLE_LOG_INTERFACE_FLAG_END)); @@ -1428,7 +1454,7 @@ static void esp_bt_controller_log_interface(uint32_t len, const uint8_t *addr, u portEXIT_CRITICAL_SAFE(&spinlock); #endif // CONFIG_BT_LE_CONTROLLER_LOG_STORAGE_ENABLE } -#endif // !CONFIG_BT_LE_CONTROLLER_LOG_SPI_OUT_ENABLED +#endif // !CONFIG_BT_LE_CONTROLLER_LOG_SPI_OUT_ENABLED && !CONFIG_BT_LE_CONTROLLER_LOG_UHCI_OUT_ENABLED void esp_ble_controller_log_dump_all(bool output) { @@ -1436,9 +1462,13 @@ void esp_ble_controller_log_dump_all(bool output) ble_log_spi_out_dump_all(); #endif // CONFIG_BT_BLE_LOG_SPI_OUT_ENABLED +#if CONFIG_BT_BLE_LOG_UHCI_OUT_ENABLED + ble_log_uhci_out_dump_all(); +#endif // CONFIG_BT_BLE_LOG_UHCI_OUT_ENABLED + #if CONFIG_BT_LE_CONTROLLER_LOG_STORAGE_ENABLE esp_bt_read_ctrl_log_from_flash(output); -#elif !CONFIG_BT_LE_CONTROLLER_LOG_SPI_OUT_ENABLED +#elif !CONFIG_BT_LE_CONTROLLER_LOG_SPI_OUT_ENABLED && !CONFIG_BT_LE_CONTROLLER_LOG_UHCI_OUT_ENABLED portMUX_TYPE spinlock = portMUX_INITIALIZER_UNLOCKED; portENTER_CRITICAL_SAFE(&spinlock); esp_panic_handler_feed_wdts();