From 8fd5dbb730216eb78b1f5d69eecedd8ae2816a9a Mon Sep 17 00:00:00 2001 From: Zhou Xiao Date: Sat, 28 Feb 2026 18:00:21 +0800 Subject: [PATCH] feat(ble_log): encode HCI direction in ble_log pipeline Add ble_log_write_hci macro that encodes upstream/downstream direction in MSB of HCI type byte. Update all 4 callsites (NimBLE + Bluedroid) to use the new macro. Parser reads MSB to determine direction; backward compatible (old firmware MSB=0 defaults to "sent"). --- components/bt/common/ble_log/include/ble_log.h | 16 +++++++++++++++- .../bt/host/bluedroid/api/esp_bluedroid_hci.c | 2 +- components/bt/host/bluedroid/hci/hci_hal_h4.c | 2 +- .../bt/host/nimble/esp-hci/src/esp_nimble_hci.c | 4 ++-- 4 files changed, 19 insertions(+), 5 deletions(-) diff --git a/components/bt/common/ble_log/include/ble_log.h b/components/bt/common/ble_log/include/ble_log.h index e57d80c26c..421513e1f8 100644 --- a/components/bt/common/ble_log/include/ble_log.h +++ b/components/bt/common/ble_log/include/ble_log.h @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2025 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2025-2026 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ @@ -38,6 +38,20 @@ typedef enum { BLE_LOG_SRC_MAX, } ble_log_src_t; +/* HCI Log Direction */ +#define BLE_LOG_HCI_DOWNSTREAM 0 +#define BLE_LOG_HCI_UPSTREAM 1 + +/* HCI Log Write Macro + * Encodes direction in MSB of data[0] (HCI type byte) before writing. + * Safe because ble_log_write_hex -> ble_log_lbm_write_trans does synchronous memcpy. + * Parser reads MSB to determine direction; old firmware with MSB=0 defaults to "sent". */ +#define ble_log_write_hci(direction, data, len) do { \ + (data)[0] |= ((direction) << 7); \ + ble_log_write_hex(BLE_LOG_SRC_HCI, (data), (len)); \ + (data)[0] &= 0x7F; \ +} while (0) + /* INTERFACE */ bool ble_log_init(void); void ble_log_deinit(void); diff --git a/components/bt/host/bluedroid/api/esp_bluedroid_hci.c b/components/bt/host/bluedroid/api/esp_bluedroid_hci.c index 3dcaee9e38..4ddc169a97 100644 --- a/components/bt/host/bluedroid/api/esp_bluedroid_hci.c +++ b/components/bt/host/bluedroid/api/esp_bluedroid_hci.c @@ -74,7 +74,7 @@ void hci_host_send_packet(uint8_t *data, uint16_t len) ble_log_spi_out_hci_write(BLE_LOG_SPI_OUT_SOURCE_HCI_DOWNSTREAM, data, len); #endif // CONFIG_BT_BLE_LOG_SPI_OUT_HCI_ENABLED #if CONFIG_BLE_LOG_HOST_SIDE_HCI_LOG_ENABLED - ble_log_write_hex(BLE_LOG_SRC_HCI, data, len); + ble_log_write_hci(BLE_LOG_HCI_DOWNSTREAM, data, len); #endif /* CONFIG_BLE_LOG_HOST_SIDE_HCI_LOG_ENABLED */ #if (BT_CONTROLLER_INCLUDED == TRUE) esp_vhci_host_send_packet(data, len); diff --git a/components/bt/host/bluedroid/hci/hci_hal_h4.c b/components/bt/host/bluedroid/hci/hci_hal_h4.c index b4b3ec17d6..ae51b55dcd 100644 --- a/components/bt/host/bluedroid/hci/hci_hal_h4.c +++ b/components/bt/host/bluedroid/hci/hci_hal_h4.c @@ -615,7 +615,7 @@ static int host_recv_pkt_cb(uint8_t *data, uint16_t len) ble_log_spi_out_hci_write(BLE_LOG_SPI_OUT_SOURCE_HCI_UPSTREAM, data, len); #endif // CONFIG_BT_BLE_LOG_SPI_OUT_HCI_ENABLED #if CONFIG_BLE_LOG_HOST_SIDE_HCI_LOG_ENABLED - ble_log_write_hex(BLE_LOG_SRC_HCI, data, len); + ble_log_write_hci(BLE_LOG_HCI_UPSTREAM, data, len); #endif /* CONFIG_BLE_LOG_HOST_SIDE_HCI_LOG_ENABLED */ //Target has packet to host, malloc new buffer for packet BT_HDR *pkt = NULL; diff --git a/components/bt/host/nimble/esp-hci/src/esp_nimble_hci.c b/components/bt/host/nimble/esp-hci/src/esp_nimble_hci.c index 097d249295..02065c0853 100644 --- a/components/bt/host/nimble/esp-hci/src/esp_nimble_hci.c +++ b/components/bt/host/nimble/esp-hci/src/esp_nimble_hci.c @@ -84,7 +84,7 @@ void esp_vhci_host_send_packet_wrapper(uint8_t *data, uint16_t len) ble_log_spi_out_hci_write(BLE_LOG_SPI_OUT_SOURCE_HCI_DOWNSTREAM, data, len); #endif // CONFIG_BT_BLE_LOG_SPI_OUT_HCI_ENABLED #if CONFIG_BLE_LOG_HOST_SIDE_HCI_LOG_ENABLED - ble_log_write_hex(BLE_LOG_SRC_HCI, data, len); + ble_log_write_hci(BLE_LOG_HCI_DOWNSTREAM, data, len); #endif /* CONFIG_BLE_LOG_HOST_SIDE_HCI_LOG_ENABLED */ esp_vhci_host_send_packet(data, len); } @@ -267,7 +267,7 @@ static int host_rcv_pkt(uint8_t *data, uint16_t len) ble_log_spi_out_hci_write(BLE_LOG_SPI_OUT_SOURCE_HCI_UPSTREAM, data, len); #endif // CONFIG_BT_BLE_LOG_SPI_OUT_HCI_ENABLED #if CONFIG_BLE_LOG_HOST_SIDE_HCI_LOG_ENABLED - ble_log_write_hex(BLE_LOG_SRC_HCI, data, len); + ble_log_write_hci(BLE_LOG_HCI_UPSTREAM, data, len); #endif /* CONFIG_BLE_LOG_HOST_SIDE_HCI_LOG_ENABLED */ bt_record_hci_data(data, len);