diff --git a/components/bt/controller/esp32c5/Kconfig.in b/components/bt/controller/esp32c5/Kconfig.in index a95e6ef679..e027a57155 100644 --- a/components/bt/controller/esp32c5/Kconfig.in +++ b/components/bt/controller/esp32c5/Kconfig.in @@ -320,6 +320,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/esp32c5/bt.c b/components/bt/controller/esp32c5/bt.c index 3d035ac307..e928a3656b 100644 --- a/components/bt/controller/esp32c5/bt.c +++ b/components/bt/controller/esp32c5/bt.c @@ -60,6 +60,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 ************************************************************************ */ @@ -189,9 +193,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 @@ -218,25 +222,35 @@ 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; #endif // CONFIG_BT_LE_CONTROLLER_LOG_CTRL_ENABLED #if CONFIG_BT_LE_CONTROLLER_LOG_HCI_ENABLED buffers |= ESP_BLE_LOG_BUF_HCI; -#endif // CONFIG_BT_LE_CONTROLLER_LOG_HCI_ENABLED +#endif bool task_create = true; #if CONFIG_BT_LE_CONTROLLER_LOG_DUMP_ONLY 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; @@ -252,14 +266,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; } @@ -269,11 +289,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; } @@ -1412,7 +1438,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)); @@ -1434,7 +1460,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) { @@ -1442,9 +1468,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();