diff --git a/src/btstack_defines.h b/src/btstack_defines.h index ba4bd5a7f..fe9c6324b 100644 --- a/src/btstack_defines.h +++ b/src/btstack_defines.h @@ -1996,6 +1996,29 @@ typedef uint8_t sm_key_t[16]; #define GAP_SUBEVENT_CIS_CREATED 0x07u +/** + * Generic version of + * - HCI_SUBEVENT_LE_CONNECTION_COMPLETE + * - HCI_SUBEVENT_LE_ENHANCED_CONNECTION_COMPLETE_V1 + * - HCI_SUBEVENT_LE_ENHANCED_CONNECTION_COMPLETE_V2 + * @format 11H11BBB22211H + * @param subevent_code + * @param status + * @param connection_handle + * @param role + * @param peer_address_type + * @param peer_address + * @param local_resolvable_private_address - 00..00 if not valid + * @param peer_resolvable_private_address - 00..00 if not valid + * @param conn_interval + * @param conn_latency + * @param supervision_timeout + * @param master_clock_accuracy + * @param advertising_handle - 0xff if not set + * @param sync_handle - 0xffff if not set + */ +#define GAP_SUBEVENT_LE_CONNECTION_COMPLETE 0x08u + /** HSP Subevent */ /** diff --git a/src/btstack_event.h b/src/btstack_event.h index 312f4e4c0..ffeb4b42d 100644 --- a/src/btstack_event.h +++ b/src/btstack_event.h @@ -6017,6 +6017,124 @@ static inline uint8_t gap_subevent_cis_created_get_flush_timeout_p_to_c(const ui return event[16]; } +/** + * @brief Get field status from event GAP_SUBEVENT_LE_CONNECTION_COMPLETE + * @param event packet + * @return status + * @note: btstack_type 1 + */ +static inline uint8_t gap_subevent_le_connection_complete_get_status(const uint8_t * event){ + return event[3]; +} +/** + * @brief Get field connection_handle from event GAP_SUBEVENT_LE_CONNECTION_COMPLETE + * @param event packet + * @return connection_handle + * @note: btstack_type H + */ +static inline hci_con_handle_t gap_subevent_le_connection_complete_get_connection_handle(const uint8_t * event){ + return little_endian_read_16(event, 4); +} +/** + * @brief Get field role from event GAP_SUBEVENT_LE_CONNECTION_COMPLETE + * @param event packet + * @return role + * @note: btstack_type 1 + */ +static inline uint8_t gap_subevent_le_connection_complete_get_role(const uint8_t * event){ + return event[6]; +} +/** + * @brief Get field peer_address_type from event GAP_SUBEVENT_LE_CONNECTION_COMPLETE + * @param event packet + * @return peer_address_type + * @note: btstack_type 1 + */ +static inline uint8_t gap_subevent_le_connection_complete_get_peer_address_type(const uint8_t * event){ + return event[7]; +} +/** + * @brief Get field peer_address from event GAP_SUBEVENT_LE_CONNECTION_COMPLETE + * @param event packet + * @param Pointer to storage for peer_address + * @note: btstack_type B + */ +static inline void gap_subevent_le_connection_complete_get_peer_address(const uint8_t * event, bd_addr_t peer_address){ + reverse_bytes(&event[8], peer_address, 6); +} +/** + * @brief Get field local_resolvable_private_address from event GAP_SUBEVENT_LE_CONNECTION_COMPLETE + * @param event packet + * @param Pointer to storage for local_resolvable_private_address + * @note: btstack_type B + */ +static inline void gap_subevent_le_connection_complete_get_local_resolvable_private_address(const uint8_t * event, bd_addr_t local_resolvable_private_address){ + reverse_bytes(&event[14], local_resolvable_private_address, 6); +} +/** + * @brief Get field peer_resolvable_private_address from event GAP_SUBEVENT_LE_CONNECTION_COMPLETE + * @param event packet + * @param Pointer to storage for peer_resolvable_private_address + * @note: btstack_type B + */ +static inline void gap_subevent_le_connection_complete_get_peer_resolvable_private_address(const uint8_t * event, bd_addr_t peer_resolvable_private_address){ + reverse_bytes(&event[20], peer_resolvable_private_address, 6); +} +/** + * @brief Get field conn_interval from event GAP_SUBEVENT_LE_CONNECTION_COMPLETE + * @param event packet + * @return conn_interval + * @note: btstack_type 2 + */ +static inline uint16_t gap_subevent_le_connection_complete_get_conn_interval(const uint8_t * event){ + return little_endian_read_16(event, 26); +} +/** + * @brief Get field conn_latency from event GAP_SUBEVENT_LE_CONNECTION_COMPLETE + * @param event packet + * @return conn_latency + * @note: btstack_type 2 + */ +static inline uint16_t gap_subevent_le_connection_complete_get_conn_latency(const uint8_t * event){ + return little_endian_read_16(event, 28); +} +/** + * @brief Get field supervision_timeout from event GAP_SUBEVENT_LE_CONNECTION_COMPLETE + * @param event packet + * @return supervision_timeout + * @note: btstack_type 2 + */ +static inline uint16_t gap_subevent_le_connection_complete_get_supervision_timeout(const uint8_t * event){ + return little_endian_read_16(event, 30); +} +/** + * @brief Get field master_clock_accuracy from event GAP_SUBEVENT_LE_CONNECTION_COMPLETE + * @param event packet + * @return master_clock_accuracy + * @note: btstack_type 1 + */ +static inline uint8_t gap_subevent_le_connection_complete_get_master_clock_accuracy(const uint8_t * event){ + return event[32]; +} +/** + * @brief Get field advertising_handle from event GAP_SUBEVENT_LE_CONNECTION_COMPLETE + * @param event packet + * @return advertising_handle + * @note: btstack_type 1 + */ +static inline uint8_t gap_subevent_le_connection_complete_get_advertising_handle(const uint8_t * event){ + return event[33]; +} +/** + * @brief Get field sync_handle from event GAP_SUBEVENT_LE_CONNECTION_COMPLETE + * @param event packet + * @return sync_handle + * @note: btstack_type H + */ +static inline hci_con_handle_t gap_subevent_le_connection_complete_get_sync_handle(const uint8_t * event){ + return little_endian_read_16(event, 34); +} + /** * @brief Get field acl_handle from event HSP_SUBEVENT_RFCOMM_CONNECTION_COMPLETE * @param event packet