From be78df3b6c7394390fa6d2bc04f991dd7ac2de2c Mon Sep 17 00:00:00 2001 From: Matthias Ringwald Date: Fri, 5 Apr 2024 11:42:18 +0200 Subject: [PATCH] hci_dump: add hci_dump_btstack_event to log internal events --- doc/manual/docs-template/how_to.md | 111 +++++++++++++++-------------- src/hci_dump.c | 9 +++ src/hci_dump.h | 8 +++ 3 files changed, 73 insertions(+), 55 deletions(-) diff --git a/doc/manual/docs-template/how_to.md b/doc/manual/docs-template/how_to.md index 008094b17..55571e5b2 100644 --- a/doc/manual/docs-template/how_to.md +++ b/doc/manual/docs-template/how_to.md @@ -82,62 +82,63 @@ Chipset properties: ### ENABLE_* directives {#sec:enableDirectives} BTstack properties: -| \#define | Description | -|-----------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------| -| ENABLE_CLASSIC | Enable Classic related code in HCI and L2CAP | -| ENABLE_BLE | Enable BLE related code in HCI and L2CAP | -| ENABLE_EHCILL | Enable eHCILL low power mode on TI CC256x/WL18xx chipsets | -| ENABLE_H5 | Enable support for SLIP mode in `btstack_uart.h` drivers for HCI H5 ('Three-Wire Mode') | -| ENABLE_LOG_DEBUG | Enable log_debug messages | -| ENABLE_LOG_ERROR | Enable log_error messages | -| ENABLE_LOG_INFO | Enable log_info messages | -| ENABLE_SCO_OVER_HCI | Enable SCO over HCI for chipsets (if supported) | -| ENABLE_SCO_OVER_PCM | Enable SCO ofer PCM/I2S for chipsets (if supported) | -| ENABLE_HFP_WIDE_BAND_SPEECH | Enable support for mSBC codec used in HFP profile for Wide-Band Speech | -| ENABLE_HFP_AT_MESSAGES | Enable `HFP_SUBEVENT_AT_MESSAGE_SENT` and `HFP_SUBEVENT_AT_MESSAGE_RECEIVED` events | -| ENABLE_LE_PERIPHERAL | Enable support for LE Peripheral Role in HCI and Security Manager | -| ENABLE_LE_CENTRAL | Enable support for LE Central Role in HCI and Security Manager | -| ENABLE_LE_SECURE_CONNECTIONS | Enable LE Secure Connections | -| ENABLE_LE_SECURE_CONNECTIONS_DEBUG_KEY | Enable support for LE Secure Connection debug keys for testing | -| ENABLE_LE_PROACTIVE_AUTHENTICATION | Enable automatic encryption for bonded devices on re-connect | -| ENABLE_GATT_CLIENT_PAIRING | Enable GATT Client to start pairing and retry operation on security error | -| ENABLE_MICRO_ECC_FOR_LE_SECURE_CONNECTIONS | Use [micro-ecc library](https://github.com/kmackay/micro-ecc) for ECC operations | -| ENABLE_LE_DATA_LENGTH_EXTENSION | Enable LE Data Length Extension support | -| ENABLE_LE_ENHANCED_CONNECTION_COMPLETE_EVENT | Enable LE Enhanced Connection Complete Event v1 & v2 | -| ENABLE_LE_EXTENDED_ADVERTISING | Enable extended advertising and scanning | -| ENABLE_LE_PERIODIC_ADVERTISING | Enable periodic advertising and scanning | -| ENABLE_LE_SIGNED_WRITE | Enable LE Signed Writes in ATT/GATT | -| ENABLE_LE_PRIVACY_ADDRESS_RESOLUTION | Enable address resolution for resolvable private addresses in Controller | -| ENABLE_CROSS_TRANSPORT_KEY_DERIVATION | Enable Cross-Transport Key Derivation (CTKD) for Secure Connections | -| ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE | Enable Enhanced Retransmission Mode for L2CAP Channels. Mandatory for AVRCP Browsing | -| ENABLE_L2CAP_LE_CREDIT_BASED_FLOW_CONTROL_MODE | Enable LE credit-based flow-control mode for L2CAP channels | -| ENABLE_L2CAP_ENHANCED_CREDIT_BASED_FLOW_CONTROL_MODE | Enable Enhanced credit-based flow-control mode for L2CAP Channels | -| ENABLE_HCI_CONTROLLER_TO_HOST_FLOW_CONTROL | Enable HCI Controller to Host Flow Control, see below | -| ENABLE_HCI_SERIALIZED_CONTROLLER_OPERATIONS | Serialize Inquiry, Remote Name Request, and Create Connection operations | -| ENABLE_ATT_DELAYED_RESPONSE | Enable support for delayed ATT operations, see [GATT Server](profiles/#sec:GATTServerProfile) | -| ENABLE_BCM_PCM_WBS | Enable support for Wide-Band Speech codec in BCM controller, requires ENABLE_SCO_OVER_PCM | -| ENABLE_CC256X_ASSISTED_HFP | Enable support for Assisted HFP mode in CC256x Controller, requires ENABLE_SCO_OVER_PCM | -| Enable_RTK_PCM_WBS | Enable support for Wide-Band Speech codec in Realtek controller, requires ENABLE_SCO_OVER_PCM | -| ENABLE_CC256X_BAUDRATE_CHANGE_FLOWCONTROL_BUG_WORKAROUND | Enable workaround for bug in CC256x Flow Control during baud rate change, see chipset docs. | -| ENABLE_CYPRESS_BAUDRATE_CHANGE_FLOWCONTROL_BUG_WORKAROUND | Enable workaround for bug in CYW2070x Flow Control during baud rate change, similar to CC256x. | -| ENABLE_LE_LIMIT_ACL_FRAGMENT_BY_MAX_OCTETS | Force HCI to fragment ACL-LE packets to fit into over-the-air packet | +| \#define | Description | +|-----------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------| +| ENABLE_CLASSIC | Enable Classic related code in HCI and L2CAP | +| ENABLE_BLE | Enable BLE related code in HCI and L2CAP | +| ENABLE_EHCILL | Enable eHCILL low power mode on TI CC256x/WL18xx chipsets | +| ENABLE_H5 | Enable support for SLIP mode in `btstack_uart.h` drivers for HCI H5 ('Three-Wire Mode') | +| ENABLE_LOG_DEBUG | Enable log_debug messages | +| ENABLE_LOG_ERROR | Enable log_error messages | +| ENABLE_LOG_INFO | Enable log_info messages | +| ENABLE_LOG_BTSTACK_EVENTS | Log internal/custom BTstack events | +| ENABLE_SCO_OVER_HCI | Enable SCO over HCI for chipsets (if supported) | +| ENABLE_SCO_OVER_PCM | Enable SCO ofer PCM/I2S for chipsets (if supported) | +| ENABLE_HFP_WIDE_BAND_SPEECH | Enable support for mSBC codec used in HFP profile for Wide-Band Speech | +| ENABLE_HFP_AT_MESSAGES | Enable `HFP_SUBEVENT_AT_MESSAGE_SENT` and `HFP_SUBEVENT_AT_MESSAGE_RECEIVED` events | +| ENABLE_LE_PERIPHERAL | Enable support for LE Peripheral Role in HCI and Security Manager | +| ENABLE_LE_CENTRAL | Enable support for LE Central Role in HCI and Security Manager | +| ENABLE_LE_SECURE_CONNECTIONS | Enable LE Secure Connections | +| ENABLE_LE_SECURE_CONNECTIONS_DEBUG_KEY | Enable support for LE Secure Connection debug keys for testing | +| ENABLE_LE_PROACTIVE_AUTHENTICATION | Enable automatic encryption for bonded devices on re-connect | +| ENABLE_GATT_CLIENT_PAIRING | Enable GATT Client to start pairing and retry operation on security error | +| ENABLE_MICRO_ECC_FOR_LE_SECURE_CONNECTIONS | Use [micro-ecc library](https://github.com/kmackay/micro-ecc) for ECC operations | +| ENABLE_LE_DATA_LENGTH_EXTENSION | Enable LE Data Length Extension support | +| ENABLE_LE_ENHANCED_CONNECTION_COMPLETE_EVENT | Enable LE Enhanced Connection Complete Event v1 & v2 | +| ENABLE_LE_EXTENDED_ADVERTISING | Enable extended advertising and scanning | +| ENABLE_LE_PERIODIC_ADVERTISING | Enable periodic advertising and scanning | +| ENABLE_LE_SIGNED_WRITE | Enable LE Signed Writes in ATT/GATT | +| ENABLE_LE_PRIVACY_ADDRESS_RESOLUTION | Enable address resolution for resolvable private addresses in Controller | +| ENABLE_CROSS_TRANSPORT_KEY_DERIVATION | Enable Cross-Transport Key Derivation (CTKD) for Secure Connections | +| ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE | Enable Enhanced Retransmission Mode for L2CAP Channels. Mandatory for AVRCP Browsing | +| ENABLE_L2CAP_LE_CREDIT_BASED_FLOW_CONTROL_MODE | Enable LE credit-based flow-control mode for L2CAP channels | +| ENABLE_L2CAP_ENHANCED_CREDIT_BASED_FLOW_CONTROL_MODE | Enable Enhanced credit-based flow-control mode for L2CAP Channels | +| ENABLE_HCI_CONTROLLER_TO_HOST_FLOW_CONTROL | Enable HCI Controller to Host Flow Control, see below | +| ENABLE_HCI_SERIALIZED_CONTROLLER_OPERATIONS | Serialize Inquiry, Remote Name Request, and Create Connection operations | +| ENABLE_ATT_DELAYED_RESPONSE | Enable support for delayed ATT operations, see [GATT Server](profiles/#sec:GATTServerProfile) | +| ENABLE_BCM_PCM_WBS | Enable support for Wide-Band Speech codec in BCM controller, requires ENABLE_SCO_OVER_PCM | +| ENABLE_CC256X_ASSISTED_HFP | Enable support for Assisted HFP mode in CC256x Controller, requires ENABLE_SCO_OVER_PCM | +| ENABLE_RTK_PCM_WBS | Enable support for Wide-Band Speech codec in Realtek controller, requires ENABLE_SCO_OVER_PCM | +| ENABLE_CC256X_BAUDRATE_CHANGE_FLOWCONTROL_BUG_WORKAROUND | Enable workaround for bug in CC256x Flow Control during baud rate change, see chipset docs. | +| ENABLE_CYPRESS_BAUDRATE_CHANGE_FLOWCONTROL_BUG_WORKAROUND | Enable workaround for bug in CYW2070x Flow Control during baud rate change, similar to CC256x. | +| ENABLE_LE_LIMIT_ACL_FRAGMENT_BY_MAX_OCTETS | Force HCI to fragment ACL-LE packets to fit into over-the-air packet | | ENABLE_TLV_FLASH_EXPLICIT_DELETE_FIELD | Enable use of explicit delete field in TLV Flash implementation - required when flash value cannot be overwritten with zero | -| ENABLE_TLV_FLASH_WRITE_ONCE | Enable storing of emtpy tag instead of overwriting existing tag - required when flash value cannot be overwritten at all | -| ENABLE_CONTROLLER_WARM_BOOT | Enable stack startup without power cycle (if supported/possible) | -| ENABLE_SEGGER_RTT | Use SEGGER RTT for console output and packet log, see [additional options](#sec:rttConfiguration) | -| ENABLE_EXPLICIT_CONNECTABLE_MODE_CONTROL | Disable calls to control Connectable Mode by L2CAP | -| ENABLE_EXPLICIT_IO_CAPABILITIES_REPLY | Let application trigger sending IO Capabilities (Negative) Reply | -| ENABLE_EXPLICIT_LINK_KEY_REPLY | Let application trigger sending Link Key (Negative) Response, allows for asynchronous link key lookup | -| ENABLE_EXPLICIT_BR_EDR_SECURITY_MANAGER | Report BR/EDR Security Manager support in L2CAP Information Response | -| ENABLE_EXPLICIT_DEDICATED_BONDING_DISCONNECT | Keep connection after dedicated bonding is complete | -| ENABLE_CLASSIC_OOB_PAIRING | Enable support for classic Out-of-Band (OOB) pairing | -| ENABLE_A2DP_EXPLICIT_CONFIG | Let application configure stream endpoint (skip auto-config of SBC endpoint) | -| ENABLE_AVDTP_ACCEPTOR_EXPLICIT_START_STREAM_CONFIRMATION | allow accept or reject of stream start on A2DP_SUBEVENT_START_STREAM_REQUESTED | -| ENABLE_LE_WHITELIST_TOUCH_AFTER_RESOLVING_LIST_UPDATE | Enable Workaround for Controller bug | -| ENABLE_LE_SET_ADV_PARAMS_ON_RANDOM_ADDRESS_CHANGE | Send HCI LE Set Advertising Params after HCI LE Set Random Address - workaround for Controller Bug | -| ENABLE_CONTROLLER_DUMP_PACKETS | Dump number of packets in Controller per type for debugging | -| ENABLE_HCI_COMMAND_STATUS_DISCARDED_FOR_FAILED_CONNECTIONS WORKAROUND | Track connection handle for HCI Commands and assume command has failed if disonnect event for connection is received | -| ENABLE_MUTUAL_AUTHENTICATION_FOR_LEGACY_SECURE_CONNECTIONS | Re-authentication after connection was encrypted to avoid BIAS Attack. Not needed for min encryption key size of 16 | +| ENABLE_TLV_FLASH_WRITE_ONCE | Enable storing of emtpy tag instead of overwriting existing tag - required when flash value cannot be overwritten at all | +| ENABLE_CONTROLLER_WARM_BOOT | Enable stack startup without power cycle (if supported/possible) | +| ENABLE_SEGGER_RTT | Use SEGGER RTT for console output and packet log, see [additional options](#sec:rttConfiguration) | +| ENABLE_EXPLICIT_CONNECTABLE_MODE_CONTROL | Disable calls to control Connectable Mode by L2CAP | +| ENABLE_EXPLICIT_IO_CAPABILITIES_REPLY | Let application trigger sending IO Capabilities (Negative) Reply | +| ENABLE_EXPLICIT_LINK_KEY_REPLY | Let application trigger sending Link Key (Negative) Response, allows for asynchronous link key lookup | +| ENABLE_EXPLICIT_BR_EDR_SECURITY_MANAGER | Report BR/EDR Security Manager support in L2CAP Information Response | +| ENABLE_EXPLICIT_DEDICATED_BONDING_DISCONNECT | Keep connection after dedicated bonding is complete | +| ENABLE_CLASSIC_OOB_PAIRING | Enable support for classic Out-of-Band (OOB) pairing | +| ENABLE_A2DP_EXPLICIT_CONFIG | Let application configure stream endpoint (skip auto-config of SBC endpoint) | +| ENABLE_AVDTP_ACCEPTOR_EXPLICIT_START_STREAM_CONFIRMATION | allow accept or reject of stream start on A2DP_SUBEVENT_START_STREAM_REQUESTED | +| ENABLE_LE_WHITELIST_TOUCH_AFTER_RESOLVING_LIST_UPDATE | Enable Workaround for Controller bug | +| ENABLE_LE_SET_ADV_PARAMS_ON_RANDOM_ADDRESS_CHANGE | Send HCI LE Set Advertising Params after HCI LE Set Random Address - workaround for Controller Bug | +| ENABLE_CONTROLLER_DUMP_PACKETS | Dump number of packets in Controller per type for debugging | +| ENABLE_HCI_COMMAND_STATUS_DISCARDED_FOR_FAILED_CONNECTIONS WORKAROUND | Track connection handle for HCI Commands and assume command has failed if disonnect event for connection is received | +| ENABLE_MUTUAL_AUTHENTICATION_FOR_LEGACY_SECURE_CONNECTIONS | Re-authentication after connection was encrypted to avoid BIAS Attack. Not needed for min encryption key size of 16 | Notes: diff --git a/src/hci_dump.c b/src/hci_dump.c index a2ef28c86..6b75bf179 100644 --- a/src/hci_dump.c +++ b/src/hci_dump.c @@ -116,6 +116,15 @@ void hci_dump_log_P(int log_level, PGM_P format, ...){ } #endif +void hci_dump_btstack_event(const uint8_t *packet, uint16_t len){ +#ifdef ENABLE_LOG_BTSTACK_EVENTS + hci_dump_packet(HCI_EVENT_PACKET, 1, packet, size); +#else + UNUSED(packet); + UNUSED(len); +#endif +} + void hci_dump_enable_log_level(int log_level, int enable){ if (log_level < HCI_DUMP_LOG_LEVEL_DEBUG) return; if (log_level > HCI_DUMP_LOG_LEVEL_ERROR) return; diff --git a/src/hci_dump.h b/src/hci_dump.h index cf0de1e56..00c733531 100644 --- a/src/hci_dump.h +++ b/src/hci_dump.h @@ -145,6 +145,14 @@ __attribute__ ((format (__printf__, 2, 3))) ; #endif +/** + * @brief Dump internal BTstack event + * @note only logged if ENABLE_LOG_BTSTACK_EVENTS is defined + * @param packet + * @param len + */ +void hci_dump_btstack_event(const uint8_t *packet, uint16_t len); + /** * @brief Setup header for PacketLogger format * @param buffer