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 82f0246e3e..31c1af4a8c 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 475af54302..a8f78aae33 100644 --- a/components/bt/host/bluedroid/hci/hci_hal_h4.c +++ b/components/bt/host/bluedroid/hci/hci_hal_h4.c @@ -613,7 +613,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);