From 47a44052ba345d67fb920208c203a72fe4b33650 Mon Sep 17 00:00:00 2001 From: Matthias Ringwald Date: Thu, 6 Jan 2022 18:21:26 +0100 Subject: [PATCH] btstack_defines: add new GAP_EVENT_EXTENDED_ADVERTISING_REPORT and missing LE Subevents --- src/btstack_defines.h | 250 ++++++++++- src/btstack_event.h | 990 +++++++++++++++++++++++++++++++++++++++++- 2 files changed, 1229 insertions(+), 11 deletions(-) diff --git a/src/btstack_defines.h b/src/btstack_defines.h index addb41342..41e6ffb8d 100644 --- a/src/btstack_defines.h +++ b/src/btstack_defines.h @@ -634,6 +634,7 @@ typedef uint8_t sm_key_t[16]; * @param dhkey_y y coordinate of P256 public key */ #define HCI_SUBEVENT_LE_READ_LOCAL_P256_PUBLIC_KEY_COMPLETE 0x08u + /** * @format 11Q * @param subevent_code @@ -649,7 +650,7 @@ typedef uint8_t sm_key_t[16]; * @param connection_handle * @param role * @param peer_address_type - * @param perr_addresss + * @param peer_addresss * @param local_resolvable_private_addres * @param peer_resolvable_private_addres * @param conn_interval @@ -662,6 +663,222 @@ typedef uint8_t sm_key_t[16]; // array of advertisements, not handled by event accessor generator #define HCI_SUBEVENT_LE_DIRECT_ADVERTISING_REPORT 0x0Bu +/** + * @format 11H1 + * @param subevent_code + * @param status + * @param connection_handle + * @param tx_phy + */ +#define HCI_SUBEVENT_LE_PHY_UPDATE_COMPLETE 0x0Cu + +// array of advertisements, not handled by event accessor generator +#define HCI_SUBEVENT_LE_EXTENDED_ADVERTISING_REPORT 0x0Du + +/** + * @format 11H11B121 + * @param subevent_code + * @param status + * @param sync_handle + * @param advertising_sid + * @param advertiser_address_type + * @param advertiser_address + * @param advertiser_phy + * @param periodic_advertising_interval + * @param advertiser_clock_accuracy + */ +#define HCI_SUBEVENT_LE_PERIODIC_ADVERTISING_SYNC_ESTABLISHMENT 0x0Eu + +/** + * @format 11H1111JV + * @param subevent_code + * @param status + * @param sync_handle + * @param tx_power + * @param rssi + * @param cte_type + * @param data_status + * @param data_length + * @param data +*/ +#define HCI_SUBEVENT_LE_PERIODIC_ADVERTISING_REPORT 0x0Fu + +/** + * @format 1H + * @param subevent_code + * @param sync_handle + */ +#define HCI_SUBEVENT_LE_PERIODIC_ADVERTISING_SYNC_LOST 0x10u + +/** + * @format 1 + * @param subevent_code + */ +#define HCI_SUBEVENT_LE_SCAN_TIMEOUT 0x11u + +/** + * @format 111H1 + * @param subevent_code + * @param status + * @param advertising_handle + * @param connection_handle + * @param num_completed_exteneded_advertising_events + */ +#define HCI_SUBEVENT_LE_ADVERTISING_SET_TERMINATED 0x12u + +/** + * @format 111B + * @param subevent_code + * @param advertising_handle + * @param scanner_address_type + * @param scanner_address + */ +#define HCI_SUBEVENT_LE_SCAN_REQUEST_RECEIVED 0x13u + +/** + * @format 1H1 + * @param subevent_code + * @param connection_handle + * @param channel_selection_algorithm + */ +#define HCI_SUBEVENT_LE_CHANNEL_SELECTION_ALGORITHM 0x14u + +// array of advertisements, not handled by event accessor generator +#define HCI_SUBEVENT_LE_CONNECTIONLESS_IQ_REPORT 0x15u + +// array of advertisements, not handled by event accessor generator +#define HCI_SUBEVENT_LE_CONNECTION_IQ_REPORT 0x16u + +/** + * @format 11H + * @param subevent_code + * @param status + * @param connection_handle + */ +#define HCI_SUBEVENT_LE_LE_CTE_REQUEST_FAILED 0x17u + +/** + * @format 11H2H11B121 + * @param subevent_code + * @param status + * @param connection_handle + * @param service_data + * @param sync_handle + * @param advertising_sid + * @param advertiser_address_type + * @param advertiser_address + * @param advertiser_phy + * @param periodic_advertising_interval + * @param advertiser_clock_accuracy + */ +#define HCI_SUBEVENT_LE_PERIODIC_ADVERTISING_SYNC_TRANSFER_RECEIVED 0x18u + +/** + * @format 11H33331111111222 + * @param subevent_code + * @param status + * @param connection_handle + * @param cig_sync_delay + * @param cis_sync_delay + * @param transport_latency_c_to_p + * @param transport_latency_p_to_c + * @param phy_c_to_p + * @param phy_p_to_c + * @param nse + * @param bn_c_to_p + * @param bn_p_to_c + * @param ft_c_to_p + * @param ft_p_to_c + * @param max_pdu_c_to_p + * @param max_pdu_p_to_c + * @param iso_interval + */ +#define HCI_SUBEVENT_LE_CIS_ESTABLISHED 0x19u + +/** + * @format 1HH11 + * @param subevent_code + * @param acl_connection_handle + * @param cis_connection_handle + * @param cig_id + * @param cis_id + */ +#define HCI_SUBEVEWNT_LE_CIS_REQUEST 0x1au + +// array of advertisements, not handled by event accessor generator +#define HCI_SUBEVENT_LE_CREATE_BIG_COMPLETE 0x1Bu + +/** + * @format 111 + * @param subevent_code + * @param big_handle + * @param reason + */ +#define HCI_SUBEVENT_LE_TERMINATE_BIG_COMPLETE 0x1Cu + +// array of advertisements, not handled by event accessor generator +#define HCI_SUBEVENT_LE_BIG_SYNC_ESTABLISHED 0x1Du + +/** + * @format 111 + * @param subevent_code + * @param big_handle + * @param reason + */ +#define HCI_SUBEVENT_LE_BIG_SYNC_LOST 0x1Eu + +/** + * @format 11H1 + * @param subevent_code + * @param status + * @param connection_handle + * @param peer_clock_accuracy + */ +#define HCI_SUBEVENT_LE_REQUEST_PEER_SCA_COMPLETE 0x1Fu + +/** + * @format 11H11111 + * @param subevent_code + * @param status + * @param connection_handle + * @param reason + * @param phy + * @param tx_power_level + * @param tx_power_level_flag + * @param delta + */ +#define HCI_SUBEVENT_LE_TRANSMIT_POWER_REPORTING 0x21u + +/** + * @format 1H112111232111 + * @param subevent_code + * @param sync_handle + * @param num_bis + * @param nse + * @param iso_interval + * @param bn + * @param pto + * @param irc + * @param max_pdu + * @param sdu_interval + * @param max_sdu + * @param phy + * @param framing + * @param encryption + */ +#define HCI_SUBEVENT_LE_BIGINFO_ADVERTISING_REPORT 0x22u + +/** + * @format 11H2222 + * @param subevent_code + * @param status + * @param connection_handle + * @param subrate_factor + * @param peripheral_latency + * @param continuation_number + * @param supervision_timeout + */ +#define HCI_SUBEVENT_LE_SUBRATE_CHANGE 0x23u /** * @format 1 @@ -1422,6 +1639,24 @@ typedef uint8_t sm_key_t[16]; */ #define GAP_EVENT_ADVERTISING_REPORT 0xDAu +/** + * @format 21B1111121BJV + * @param advertising_event_type + * @param address_type + * @param address + * @param primary_phy + * @param secondary_phy + * @param advertising_sid + * @param tx_power + * @param rssi + * @param periodic_advertising_interval + * @param direct_address_type + * @param direct_address + * @param data_length + * @param data + */ +#define GAP_EVENT_EXTENDED_ADVERTISING_REPORT 0xDBu + /** * @format B13211122221JV * @param bd_addr @@ -1439,13 +1674,13 @@ typedef uint8_t sm_key_t[16]; * @param name_len * @param name */ -#define GAP_EVENT_INQUIRY_RESULT 0xDBu +#define GAP_EVENT_INQUIRY_RESULT 0xDCu /** * @format 1 * @param status */ -#define GAP_EVENT_INQUIRY_COMPLETE 0xDCu +#define GAP_EVENT_INQUIRY_COMPLETE 0xDDu /** * @format H1 @@ -1454,7 +1689,7 @@ typedef uint8_t sm_key_t[16]; * @note Classic: rssi is in dB relative to Golden Receive Power Range * @note LE: rssi is absolute dBm */ -#define GAP_EVENT_RSSI_MEASUREMENT 0xDDu +#define GAP_EVENT_RSSI_MEASUREMENT 0xDEu /** * @format 1KKKK @@ -1464,7 +1699,7 @@ typedef uint8_t sm_key_t[16]; * @param c_256 Simple Pairing Hash C derived from P-256 public key * @param r_256 Simple Pairing Randomizer derived from P-256 public key */ -#define GAP_EVENT_LOCAL_OOB_DATA 0xDEu +#define GAP_EVENT_LOCAL_OOB_DATA 0xDFu /** @@ -1474,7 +1709,7 @@ typedef uint8_t sm_key_t[16]; * @param ssp * @param initiator */ -#define GAP_EVENT_PAIRING_STARTED 0xDFu +#define GAP_EVENT_PAIRING_STARTED 0xE0u /** * @format HB1 @@ -1482,7 +1717,8 @@ typedef uint8_t sm_key_t[16]; * @param bd_addr * @param status */ -#define GAP_EVENT_PAIRING_COMPLETE 0xE0u +#define GAP_EVENT_PAIRING_COMPLETE 0xE1u + // Meta Events, see below for sub events #define HCI_EVENT_HSP_META 0xE8u diff --git a/src/btstack_event.h b/src/btstack_event.h index 29da9237e..927b72232 100644 --- a/src/btstack_event.h +++ b/src/btstack_event.h @@ -1132,6 +1132,43 @@ static inline uint8_t hci_event_keypress_notification_get_notification_type(cons return event[8]; } +/** + * @brief Get field acl_connection_handle from event HCI_SUBEVEWNT_LE_CIS_REQUEST_EVENT + * @param event packet + * @return acl_connection_handle + * @note: btstack_type H + */ +static inline hci_con_handle_t hci_subevewnt_le_cis_request_event_get_acl_connection_handle(const uint8_t * event){ + return little_endian_read_16(event, 3); +} +/** + * @brief Get field cis_connection_handle from event HCI_SUBEVEWNT_LE_CIS_REQUEST_EVENT + * @param event packet + * @return cis_connection_handle + * @note: btstack_type H + */ +static inline hci_con_handle_t hci_subevewnt_le_cis_request_event_get_cis_connection_handle(const uint8_t * event){ + return little_endian_read_16(event, 5); +} +/** + * @brief Get field cig_id from event HCI_SUBEVEWNT_LE_CIS_REQUEST_EVENT + * @param event packet + * @return cig_id + * @note: btstack_type 1 + */ +static inline uint8_t hci_subevewnt_le_cis_request_event_get_cig_id(const uint8_t * event){ + return event[7]; +} +/** + * @brief Get field cis_id from event HCI_SUBEVEWNT_LE_CIS_REQUEST_EVENT + * @param event packet + * @return cis_id + * @note: btstack_type 1 + */ +static inline uint8_t hci_subevewnt_le_cis_request_event_get_cis_id(const uint8_t * event){ + return event[8]; +} + /** * @brief Get field state from event BTSTACK_EVENT_STATE * @param event packet @@ -3470,6 +3507,124 @@ static inline const uint8_t * gap_event_advertising_report_get_data(const uint8_ return &event[12]; } +/** + * @brief Get field advertising_event_type from event GAP_EVENT_EXTENDED_ADVERTISING_REPORT + * @param event packet + * @return advertising_event_type + * @note: btstack_type 2 + */ +static inline uint16_t gap_event_extended_advertising_report_get_advertising_event_type(const uint8_t * event){ + return little_endian_read_16(event, 2); +} +/** + * @brief Get field address_type from event GAP_EVENT_EXTENDED_ADVERTISING_REPORT + * @param event packet + * @return address_type + * @note: btstack_type 1 + */ +static inline uint8_t gap_event_extended_advertising_report_get_address_type(const uint8_t * event){ + return event[4]; +} +/** + * @brief Get field address from event GAP_EVENT_EXTENDED_ADVERTISING_REPORT + * @param event packet + * @param Pointer to storage for address + * @note: btstack_type B + */ +static inline void gap_event_extended_advertising_report_get_address(const uint8_t * event, bd_addr_t address){ + reverse_bytes(&event[5], address, 6); +} +/** + * @brief Get field primary_phy from event GAP_EVENT_EXTENDED_ADVERTISING_REPORT + * @param event packet + * @return primary_phy + * @note: btstack_type 1 + */ +static inline uint8_t gap_event_extended_advertising_report_get_primary_phy(const uint8_t * event){ + return event[11]; +} +/** + * @brief Get field secondary_phy from event GAP_EVENT_EXTENDED_ADVERTISING_REPORT + * @param event packet + * @return secondary_phy + * @note: btstack_type 1 + */ +static inline uint8_t gap_event_extended_advertising_report_get_secondary_phy(const uint8_t * event){ + return event[12]; +} +/** + * @brief Get field advertising_sid from event GAP_EVENT_EXTENDED_ADVERTISING_REPORT + * @param event packet + * @return advertising_sid + * @note: btstack_type 1 + */ +static inline uint8_t gap_event_extended_advertising_report_get_advertising_sid(const uint8_t * event){ + return event[13]; +} +/** + * @brief Get field tx_power from event GAP_EVENT_EXTENDED_ADVERTISING_REPORT + * @param event packet + * @return tx_power + * @note: btstack_type 1 + */ +static inline uint8_t gap_event_extended_advertising_report_get_tx_power(const uint8_t * event){ + return event[14]; +} +/** + * @brief Get field rssi from event GAP_EVENT_EXTENDED_ADVERTISING_REPORT + * @param event packet + * @return rssi + * @note: btstack_type 1 + */ +static inline uint8_t gap_event_extended_advertising_report_get_rssi(const uint8_t * event){ + return event[15]; +} +/** + * @brief Get field periodic_advertising_interval from event GAP_EVENT_EXTENDED_ADVERTISING_REPORT + * @param event packet + * @return periodic_advertising_interval + * @note: btstack_type 2 + */ +static inline uint16_t gap_event_extended_advertising_report_get_periodic_advertising_interval(const uint8_t * event){ + return little_endian_read_16(event, 16); +} +/** + * @brief Get field direct_address_type from event GAP_EVENT_EXTENDED_ADVERTISING_REPORT + * @param event packet + * @return direct_address_type + * @note: btstack_type 1 + */ +static inline uint8_t gap_event_extended_advertising_report_get_direct_address_type(const uint8_t * event){ + return event[18]; +} +/** + * @brief Get field direct_address from event GAP_EVENT_EXTENDED_ADVERTISING_REPORT + * @param event packet + * @param Pointer to storage for direct_address + * @note: btstack_type B + */ +static inline void gap_event_extended_advertising_report_get_direct_address(const uint8_t * event, bd_addr_t direct_address){ + reverse_bytes(&event[19], direct_address, 6); +} +/** + * @brief Get field data_length from event GAP_EVENT_EXTENDED_ADVERTISING_REPORT + * @param event packet + * @return data_length + * @note: btstack_type J + */ +static inline uint8_t gap_event_extended_advertising_report_get_data_length(const uint8_t * event){ + return event[25]; +} +/** + * @brief Get field data from event GAP_EVENT_EXTENDED_ADVERTISING_REPORT + * @param event packet + * @return data + * @note: btstack_type V + */ +static inline const uint8_t * gap_event_extended_advertising_report_get_data(const uint8_t * event){ + return &event[26]; +} + /** * @brief Get field bd_addr from event GAP_EVENT_INQUIRY_RESULT * @param event packet @@ -4088,13 +4243,13 @@ static inline uint8_t hci_subevent_le_enhanced_connection_complete_get_peer_addr return event[7]; } /** - * @brief Get field perr_addresss from event HCI_SUBEVENT_LE_ENHANCED_CONNECTION_COMPLETE + * @brief Get field peer_addresss from event HCI_SUBEVENT_LE_ENHANCED_CONNECTION_COMPLETE * @param event packet - * @param Pointer to storage for perr_addresss + * @param Pointer to storage for peer_addresss * @note: btstack_type B */ -static inline void hci_subevent_le_enhanced_connection_complete_get_perr_addresss(const uint8_t * event, bd_addr_t perr_addresss){ - reverse_bytes(&event[8], perr_addresss, 6); +static inline void hci_subevent_le_enhanced_connection_complete_get_peer_addresss(const uint8_t * event, bd_addr_t peer_addresss){ + reverse_bytes(&event[8], peer_addresss, 6); } /** * @brief Get field local_resolvable_private_addres from event HCI_SUBEVENT_LE_ENHANCED_CONNECTION_COMPLETE @@ -4151,6 +4306,833 @@ static inline uint8_t hci_subevent_le_enhanced_connection_complete_get_master_cl return event[32]; } +/** + * @brief Get field status from event HCI_SUBEVENT_LE_PHY_UPDATE_COMPLETE + * @param event packet + * @return status + * @note: btstack_type 1 + */ +static inline uint8_t hci_subevent_le_phy_update_complete_get_status(const uint8_t * event){ + return event[3]; +} +/** + * @brief Get field connection_handle from event HCI_SUBEVENT_LE_PHY_UPDATE_COMPLETE + * @param event packet + * @return connection_handle + * @note: btstack_type H + */ +static inline hci_con_handle_t hci_subevent_le_phy_update_complete_get_connection_handle(const uint8_t * event){ + return little_endian_read_16(event, 4); +} +/** + * @brief Get field tx_phy from event HCI_SUBEVENT_LE_PHY_UPDATE_COMPLETE + * @param event packet + * @return tx_phy + * @note: btstack_type 1 + */ +static inline uint8_t hci_subevent_le_phy_update_complete_get_tx_phy(const uint8_t * event){ + return event[6]; +} + +/** + * @brief Get field status from event HCI_SUBEVENT_LE_PERIODIC_ADVERTISING_SYNC_ESTABLISHMENT + * @param event packet + * @return status + * @note: btstack_type 1 + */ +static inline uint8_t hci_subevent_le_periodic_advertising_sync_establishment_get_status(const uint8_t * event){ + return event[3]; +} +/** + * @brief Get field sync_handle from event HCI_SUBEVENT_LE_PERIODIC_ADVERTISING_SYNC_ESTABLISHMENT + * @param event packet + * @return sync_handle + * @note: btstack_type H + */ +static inline hci_con_handle_t hci_subevent_le_periodic_advertising_sync_establishment_get_sync_handle(const uint8_t * event){ + return little_endian_read_16(event, 4); +} +/** + * @brief Get field advertising_sid from event HCI_SUBEVENT_LE_PERIODIC_ADVERTISING_SYNC_ESTABLISHMENT + * @param event packet + * @return advertising_sid + * @note: btstack_type 1 + */ +static inline uint8_t hci_subevent_le_periodic_advertising_sync_establishment_get_advertising_sid(const uint8_t * event){ + return event[6]; +} +/** + * @brief Get field advertiser_address_type from event HCI_SUBEVENT_LE_PERIODIC_ADVERTISING_SYNC_ESTABLISHMENT + * @param event packet + * @return advertiser_address_type + * @note: btstack_type 1 + */ +static inline uint8_t hci_subevent_le_periodic_advertising_sync_establishment_get_advertiser_address_type(const uint8_t * event){ + return event[7]; +} +/** + * @brief Get field advertiser_address from event HCI_SUBEVENT_LE_PERIODIC_ADVERTISING_SYNC_ESTABLISHMENT + * @param event packet + * @param Pointer to storage for advertiser_address + * @note: btstack_type B + */ +static inline void hci_subevent_le_periodic_advertising_sync_establishment_get_advertiser_address(const uint8_t * event, bd_addr_t advertiser_address){ + reverse_bytes(&event[8], advertiser_address, 6); +} +/** + * @brief Get field advertiser_phy from event HCI_SUBEVENT_LE_PERIODIC_ADVERTISING_SYNC_ESTABLISHMENT + * @param event packet + * @return advertiser_phy + * @note: btstack_type 1 + */ +static inline uint8_t hci_subevent_le_periodic_advertising_sync_establishment_get_advertiser_phy(const uint8_t * event){ + return event[14]; +} +/** + * @brief Get field periodic_advertising_interval from event HCI_SUBEVENT_LE_PERIODIC_ADVERTISING_SYNC_ESTABLISHMENT + * @param event packet + * @return periodic_advertising_interval + * @note: btstack_type 2 + */ +static inline uint16_t hci_subevent_le_periodic_advertising_sync_establishment_get_periodic_advertising_interval(const uint8_t * event){ + return little_endian_read_16(event, 15); +} +/** + * @brief Get field advertiser_clock_accuracy from event HCI_SUBEVENT_LE_PERIODIC_ADVERTISING_SYNC_ESTABLISHMENT + * @param event packet + * @return advertiser_clock_accuracy + * @note: btstack_type 1 + */ +static inline uint8_t hci_subevent_le_periodic_advertising_sync_establishment_get_advertiser_clock_accuracy(const uint8_t * event){ + return event[17]; +} + +/** + * @brief Get field status from event HCI_SUBEVENT_LE_PERIODIC_ADVERTISING_REPORT + * @param event packet + * @return status + * @note: btstack_type 1 + */ +static inline uint8_t hci_subevent_le_periodic_advertising_report_get_status(const uint8_t * event){ + return event[3]; +} +/** + * @brief Get field sync_handle from event HCI_SUBEVENT_LE_PERIODIC_ADVERTISING_REPORT + * @param event packet + * @return sync_handle + * @note: btstack_type H + */ +static inline hci_con_handle_t hci_subevent_le_periodic_advertising_report_get_sync_handle(const uint8_t * event){ + return little_endian_read_16(event, 4); +} +/** + * @brief Get field tx_power from event HCI_SUBEVENT_LE_PERIODIC_ADVERTISING_REPORT + * @param event packet + * @return tx_power + * @note: btstack_type 1 + */ +static inline uint8_t hci_subevent_le_periodic_advertising_report_get_tx_power(const uint8_t * event){ + return event[6]; +} +/** + * @brief Get field rssi from event HCI_SUBEVENT_LE_PERIODIC_ADVERTISING_REPORT + * @param event packet + * @return rssi + * @note: btstack_type 1 + */ +static inline uint8_t hci_subevent_le_periodic_advertising_report_get_rssi(const uint8_t * event){ + return event[7]; +} +/** + * @brief Get field cte_type from event HCI_SUBEVENT_LE_PERIODIC_ADVERTISING_REPORT + * @param event packet + * @return cte_type + * @note: btstack_type 1 + */ +static inline uint8_t hci_subevent_le_periodic_advertising_report_get_cte_type(const uint8_t * event){ + return event[8]; +} +/** + * @brief Get field data_status from event HCI_SUBEVENT_LE_PERIODIC_ADVERTISING_REPORT + * @param event packet + * @return data_status + * @note: btstack_type 1 + */ +static inline uint8_t hci_subevent_le_periodic_advertising_report_get_data_status(const uint8_t * event){ + return event[9]; +} +/** + * @brief Get field data_length from event HCI_SUBEVENT_LE_PERIODIC_ADVERTISING_REPORT + * @param event packet + * @return data_length + * @note: btstack_type J + */ +static inline uint8_t hci_subevent_le_periodic_advertising_report_get_data_length(const uint8_t * event){ + return event[10]; +} +/** + * @brief Get field data from event HCI_SUBEVENT_LE_PERIODIC_ADVERTISING_REPORT + * @param event packet + * @return data + * @note: btstack_type V + */ +static inline const uint8_t * hci_subevent_le_periodic_advertising_report_get_data(const uint8_t * event){ + return &event[11]; +} + +/** + * @brief Get field sync_handle from event HCI_SUBEVENT_LE_PERIODIC_ADVERTISING_SYNC_LOST + * @param event packet + * @return sync_handle + * @note: btstack_type H + */ +static inline hci_con_handle_t hci_subevent_le_periodic_advertising_sync_lost_get_sync_handle(const uint8_t * event){ + return little_endian_read_16(event, 3); +} + + +/** + * @brief Get field status from event HCI_SUBEVENT_LE_ADVERTISING_SET_TERMINATED + * @param event packet + * @return status + * @note: btstack_type 1 + */ +static inline uint8_t hci_subevent_le_advertising_set_terminated_get_status(const uint8_t * event){ + return event[3]; +} +/** + * @brief Get field advertising_handle from event HCI_SUBEVENT_LE_ADVERTISING_SET_TERMINATED + * @param event packet + * @return advertising_handle + * @note: btstack_type 1 + */ +static inline uint8_t hci_subevent_le_advertising_set_terminated_get_advertising_handle(const uint8_t * event){ + return event[4]; +} +/** + * @brief Get field connection_handle from event HCI_SUBEVENT_LE_ADVERTISING_SET_TERMINATED + * @param event packet + * @return connection_handle + * @note: btstack_type H + */ +static inline hci_con_handle_t hci_subevent_le_advertising_set_terminated_get_connection_handle(const uint8_t * event){ + return little_endian_read_16(event, 5); +} +/** + * @brief Get field num_completed_exteneded_advertising_events from event HCI_SUBEVENT_LE_ADVERTISING_SET_TERMINATED + * @param event packet + * @return num_completed_exteneded_advertising_events + * @note: btstack_type 1 + */ +static inline uint8_t hci_subevent_le_advertising_set_terminated_get_num_completed_exteneded_advertising_events(const uint8_t * event){ + return event[7]; +} + +/** + * @brief Get field advertising_handle from event HCI_SUBEVENT_LE_SCAN_REQUEST_RECEIVED + * @param event packet + * @return advertising_handle + * @note: btstack_type 1 + */ +static inline uint8_t hci_subevent_le_scan_request_received_get_advertising_handle(const uint8_t * event){ + return event[3]; +} +/** + * @brief Get field scanner_address_type from event HCI_SUBEVENT_LE_SCAN_REQUEST_RECEIVED + * @param event packet + * @return scanner_address_type + * @note: btstack_type 1 + */ +static inline uint8_t hci_subevent_le_scan_request_received_get_scanner_address_type(const uint8_t * event){ + return event[4]; +} +/** + * @brief Get field scanner_address from event HCI_SUBEVENT_LE_SCAN_REQUEST_RECEIVED + * @param event packet + * @param Pointer to storage for scanner_address + * @note: btstack_type B + */ +static inline void hci_subevent_le_scan_request_received_get_scanner_address(const uint8_t * event, bd_addr_t scanner_address){ + reverse_bytes(&event[5], scanner_address, 6); +} + +/** + * @brief Get field connection_handle from event HCI_SUBEVENT_LE_CHANNEL_SELECTION_ALGORITHM + * @param event packet + * @return connection_handle + * @note: btstack_type H + */ +static inline hci_con_handle_t hci_subevent_le_channel_selection_algorithm_get_connection_handle(const uint8_t * event){ + return little_endian_read_16(event, 3); +} +/** + * @brief Get field channel_selection_algorithm from event HCI_SUBEVENT_LE_CHANNEL_SELECTION_ALGORITHM + * @param event packet + * @return channel_selection_algorithm + * @note: btstack_type 1 + */ +static inline uint8_t hci_subevent_le_channel_selection_algorithm_get_channel_selection_algorithm(const uint8_t * event){ + return event[5]; +} + +/** + * @brief Get field status from event HCI_SUBEVENT_LE_LE_CTE_REQUEST_FAILED + * @param event packet + * @return status + * @note: btstack_type 1 + */ +static inline uint8_t hci_subevent_le_le_cte_request_failed_get_status(const uint8_t * event){ + return event[3]; +} +/** + * @brief Get field connection_handle from event HCI_SUBEVENT_LE_LE_CTE_REQUEST_FAILED + * @param event packet + * @return connection_handle + * @note: btstack_type H + */ +static inline hci_con_handle_t hci_subevent_le_le_cte_request_failed_get_connection_handle(const uint8_t * event){ + return little_endian_read_16(event, 4); +} + +/** + * @brief Get field status from event HCI_SUBEVENT_LE_PERIODIC_ADVERTISING_SYNC_TRANSFER_RECEIVED + * @param event packet + * @return status + * @note: btstack_type 1 + */ +static inline uint8_t hci_subevent_le_periodic_advertising_sync_transfer_received_get_status(const uint8_t * event){ + return event[3]; +} +/** + * @brief Get field connection_handle from event HCI_SUBEVENT_LE_PERIODIC_ADVERTISING_SYNC_TRANSFER_RECEIVED + * @param event packet + * @return connection_handle + * @note: btstack_type H + */ +static inline hci_con_handle_t hci_subevent_le_periodic_advertising_sync_transfer_received_get_connection_handle(const uint8_t * event){ + return little_endian_read_16(event, 4); +} +/** + * @brief Get field service_data from event HCI_SUBEVENT_LE_PERIODIC_ADVERTISING_SYNC_TRANSFER_RECEIVED + * @param event packet + * @return service_data + * @note: btstack_type 2 + */ +static inline uint16_t hci_subevent_le_periodic_advertising_sync_transfer_received_get_service_data(const uint8_t * event){ + return little_endian_read_16(event, 6); +} +/** + * @brief Get field sync_handle from event HCI_SUBEVENT_LE_PERIODIC_ADVERTISING_SYNC_TRANSFER_RECEIVED + * @param event packet + * @return sync_handle + * @note: btstack_type H + */ +static inline hci_con_handle_t hci_subevent_le_periodic_advertising_sync_transfer_received_get_sync_handle(const uint8_t * event){ + return little_endian_read_16(event, 8); +} +/** + * @brief Get field advertising_sid from event HCI_SUBEVENT_LE_PERIODIC_ADVERTISING_SYNC_TRANSFER_RECEIVED + * @param event packet + * @return advertising_sid + * @note: btstack_type 1 + */ +static inline uint8_t hci_subevent_le_periodic_advertising_sync_transfer_received_get_advertising_sid(const uint8_t * event){ + return event[10]; +} +/** + * @brief Get field advertiser_address_type from event HCI_SUBEVENT_LE_PERIODIC_ADVERTISING_SYNC_TRANSFER_RECEIVED + * @param event packet + * @return advertiser_address_type + * @note: btstack_type 1 + */ +static inline uint8_t hci_subevent_le_periodic_advertising_sync_transfer_received_get_advertiser_address_type(const uint8_t * event){ + return event[11]; +} +/** + * @brief Get field advertiser_address from event HCI_SUBEVENT_LE_PERIODIC_ADVERTISING_SYNC_TRANSFER_RECEIVED + * @param event packet + * @param Pointer to storage for advertiser_address + * @note: btstack_type B + */ +static inline void hci_subevent_le_periodic_advertising_sync_transfer_received_get_advertiser_address(const uint8_t * event, bd_addr_t advertiser_address){ + reverse_bytes(&event[12], advertiser_address, 6); +} +/** + * @brief Get field advertiser_phy from event HCI_SUBEVENT_LE_PERIODIC_ADVERTISING_SYNC_TRANSFER_RECEIVED + * @param event packet + * @return advertiser_phy + * @note: btstack_type 1 + */ +static inline uint8_t hci_subevent_le_periodic_advertising_sync_transfer_received_get_advertiser_phy(const uint8_t * event){ + return event[18]; +} +/** + * @brief Get field periodic_advertising_interval from event HCI_SUBEVENT_LE_PERIODIC_ADVERTISING_SYNC_TRANSFER_RECEIVED + * @param event packet + * @return periodic_advertising_interval + * @note: btstack_type 2 + */ +static inline uint16_t hci_subevent_le_periodic_advertising_sync_transfer_received_get_periodic_advertising_interval(const uint8_t * event){ + return little_endian_read_16(event, 19); +} +/** + * @brief Get field advertiser_clock_accuracy from event HCI_SUBEVENT_LE_PERIODIC_ADVERTISING_SYNC_TRANSFER_RECEIVED + * @param event packet + * @return advertiser_clock_accuracy + * @note: btstack_type 1 + */ +static inline uint8_t hci_subevent_le_periodic_advertising_sync_transfer_received_get_advertiser_clock_accuracy(const uint8_t * event){ + return event[21]; +} + +/** + * @brief Get field status from event HCI_SUBEVENT_LE_CIS_ESTABLISHED + * @param event packet + * @return status + * @note: btstack_type 1 + */ +static inline uint8_t hci_subevent_le_cis_established_get_status(const uint8_t * event){ + return event[3]; +} +/** + * @brief Get field connection_handle from event HCI_SUBEVENT_LE_CIS_ESTABLISHED + * @param event packet + * @return connection_handle + * @note: btstack_type H + */ +static inline hci_con_handle_t hci_subevent_le_cis_established_get_connection_handle(const uint8_t * event){ + return little_endian_read_16(event, 4); +} +/** + * @brief Get field cig_sync_delay from event HCI_SUBEVENT_LE_CIS_ESTABLISHED + * @param event packet + * @return cig_sync_delay + * @note: btstack_type 3 + */ +static inline uint32_t hci_subevent_le_cis_established_get_cig_sync_delay(const uint8_t * event){ + return little_endian_read_24(event, 6); +} +/** + * @brief Get field cis_sync_delay from event HCI_SUBEVENT_LE_CIS_ESTABLISHED + * @param event packet + * @return cis_sync_delay + * @note: btstack_type 3 + */ +static inline uint32_t hci_subevent_le_cis_established_get_cis_sync_delay(const uint8_t * event){ + return little_endian_read_24(event, 9); +} +/** + * @brief Get field transport_latency_c_to_p from event HCI_SUBEVENT_LE_CIS_ESTABLISHED + * @param event packet + * @return transport_latency_c_to_p + * @note: btstack_type 3 + */ +static inline uint32_t hci_subevent_le_cis_established_get_transport_latency_c_to_p(const uint8_t * event){ + return little_endian_read_24(event, 12); +} +/** + * @brief Get field transport_latency_p_to_c from event HCI_SUBEVENT_LE_CIS_ESTABLISHED + * @param event packet + * @return transport_latency_p_to_c + * @note: btstack_type 3 + */ +static inline uint32_t hci_subevent_le_cis_established_get_transport_latency_p_to_c(const uint8_t * event){ + return little_endian_read_24(event, 15); +} +/** + * @brief Get field phy_c_to_p from event HCI_SUBEVENT_LE_CIS_ESTABLISHED + * @param event packet + * @return phy_c_to_p + * @note: btstack_type 1 + */ +static inline uint8_t hci_subevent_le_cis_established_get_phy_c_to_p(const uint8_t * event){ + return event[18]; +} +/** + * @brief Get field phy_p_to_c from event HCI_SUBEVENT_LE_CIS_ESTABLISHED + * @param event packet + * @return phy_p_to_c + * @note: btstack_type 1 + */ +static inline uint8_t hci_subevent_le_cis_established_get_phy_p_to_c(const uint8_t * event){ + return event[19]; +} +/** + * @brief Get field nse from event HCI_SUBEVENT_LE_CIS_ESTABLISHED + * @param event packet + * @return nse + * @note: btstack_type 1 + */ +static inline uint8_t hci_subevent_le_cis_established_get_nse(const uint8_t * event){ + return event[20]; +} +/** + * @brief Get field bn_c_to_p from event HCI_SUBEVENT_LE_CIS_ESTABLISHED + * @param event packet + * @return bn_c_to_p + * @note: btstack_type 1 + */ +static inline uint8_t hci_subevent_le_cis_established_get_bn_c_to_p(const uint8_t * event){ + return event[21]; +} +/** + * @brief Get field bn_p_to_c from event HCI_SUBEVENT_LE_CIS_ESTABLISHED + * @param event packet + * @return bn_p_to_c + * @note: btstack_type 1 + */ +static inline uint8_t hci_subevent_le_cis_established_get_bn_p_to_c(const uint8_t * event){ + return event[22]; +} +/** + * @brief Get field ft_c_to_p from event HCI_SUBEVENT_LE_CIS_ESTABLISHED + * @param event packet + * @return ft_c_to_p + * @note: btstack_type 1 + */ +static inline uint8_t hci_subevent_le_cis_established_get_ft_c_to_p(const uint8_t * event){ + return event[23]; +} +/** + * @brief Get field ft_p_to_c from event HCI_SUBEVENT_LE_CIS_ESTABLISHED + * @param event packet + * @return ft_p_to_c + * @note: btstack_type 1 + */ +static inline uint8_t hci_subevent_le_cis_established_get_ft_p_to_c(const uint8_t * event){ + return event[24]; +} +/** + * @brief Get field max_pdu_c_to_p from event HCI_SUBEVENT_LE_CIS_ESTABLISHED + * @param event packet + * @return max_pdu_c_to_p + * @note: btstack_type 2 + */ +static inline uint16_t hci_subevent_le_cis_established_get_max_pdu_c_to_p(const uint8_t * event){ + return little_endian_read_16(event, 25); +} +/** + * @brief Get field max_pdu_p_to_c from event HCI_SUBEVENT_LE_CIS_ESTABLISHED + * @param event packet + * @return max_pdu_p_to_c + * @note: btstack_type 2 + */ +static inline uint16_t hci_subevent_le_cis_established_get_max_pdu_p_to_c(const uint8_t * event){ + return little_endian_read_16(event, 27); +} +/** + * @brief Get field iso_interval from event HCI_SUBEVENT_LE_CIS_ESTABLISHED + * @param event packet + * @return iso_interval + * @note: btstack_type 2 + */ +static inline uint16_t hci_subevent_le_cis_established_get_iso_interval(const uint8_t * event){ + return little_endian_read_16(event, 29); +} + +/** + * @brief Get field big_handle from event HCI_SUBEVENT_LE_TERMINATE_BIG_COMPLETE + * @param event packet + * @return big_handle + * @note: btstack_type 1 + */ +static inline uint8_t hci_subevent_le_terminate_big_complete_get_big_handle(const uint8_t * event){ + return event[3]; +} +/** + * @brief Get field reason from event HCI_SUBEVENT_LE_TERMINATE_BIG_COMPLETE + * @param event packet + * @return reason + * @note: btstack_type 1 + */ +static inline uint8_t hci_subevent_le_terminate_big_complete_get_reason(const uint8_t * event){ + return event[4]; +} + +/** + * @brief Get field big_handle from event HCI_SUBEVENT_LE_BIG_SYNC_LOST + * @param event packet + * @return big_handle + * @note: btstack_type 1 + */ +static inline uint8_t hci_subevent_le_big_sync_lost_get_big_handle(const uint8_t * event){ + return event[3]; +} +/** + * @brief Get field reason from event HCI_SUBEVENT_LE_BIG_SYNC_LOST + * @param event packet + * @return reason + * @note: btstack_type 1 + */ +static inline uint8_t hci_subevent_le_big_sync_lost_get_reason(const uint8_t * event){ + return event[4]; +} + +/** + * @brief Get field status from event HCI_SUBEVENT_LE_REQUEST_PEER_SCA_COMPLETE + * @param event packet + * @return status + * @note: btstack_type 1 + */ +static inline uint8_t hci_subevent_le_request_peer_sca_complete_get_status(const uint8_t * event){ + return event[3]; +} +/** + * @brief Get field connection_handle from event HCI_SUBEVENT_LE_REQUEST_PEER_SCA_COMPLETE + * @param event packet + * @return connection_handle + * @note: btstack_type H + */ +static inline hci_con_handle_t hci_subevent_le_request_peer_sca_complete_get_connection_handle(const uint8_t * event){ + return little_endian_read_16(event, 4); +} +/** + * @brief Get field peer_clock_accuracy from event HCI_SUBEVENT_LE_REQUEST_PEER_SCA_COMPLETE + * @param event packet + * @return peer_clock_accuracy + * @note: btstack_type 1 + */ +static inline uint8_t hci_subevent_le_request_peer_sca_complete_get_peer_clock_accuracy(const uint8_t * event){ + return event[6]; +} + +/** + * @brief Get field status from event HCI_SUBEVENT_LE_TRANSMIT_POWER_REPORTING + * @param event packet + * @return status + * @note: btstack_type 1 + */ +static inline uint8_t hci_subevent_le_transmit_power_reporting_get_status(const uint8_t * event){ + return event[3]; +} +/** + * @brief Get field connection_handle from event HCI_SUBEVENT_LE_TRANSMIT_POWER_REPORTING + * @param event packet + * @return connection_handle + * @note: btstack_type H + */ +static inline hci_con_handle_t hci_subevent_le_transmit_power_reporting_get_connection_handle(const uint8_t * event){ + return little_endian_read_16(event, 4); +} +/** + * @brief Get field reason from event HCI_SUBEVENT_LE_TRANSMIT_POWER_REPORTING + * @param event packet + * @return reason + * @note: btstack_type 1 + */ +static inline uint8_t hci_subevent_le_transmit_power_reporting_get_reason(const uint8_t * event){ + return event[6]; +} +/** + * @brief Get field phy from event HCI_SUBEVENT_LE_TRANSMIT_POWER_REPORTING + * @param event packet + * @return phy + * @note: btstack_type 1 + */ +static inline uint8_t hci_subevent_le_transmit_power_reporting_get_phy(const uint8_t * event){ + return event[7]; +} +/** + * @brief Get field tx_power_level from event HCI_SUBEVENT_LE_TRANSMIT_POWER_REPORTING + * @param event packet + * @return tx_power_level + * @note: btstack_type 1 + */ +static inline uint8_t hci_subevent_le_transmit_power_reporting_get_tx_power_level(const uint8_t * event){ + return event[8]; +} +/** + * @brief Get field tx_power_level_flag from event HCI_SUBEVENT_LE_TRANSMIT_POWER_REPORTING + * @param event packet + * @return tx_power_level_flag + * @note: btstack_type 1 + */ +static inline uint8_t hci_subevent_le_transmit_power_reporting_get_tx_power_level_flag(const uint8_t * event){ + return event[9]; +} +/** + * @brief Get field delta from event HCI_SUBEVENT_LE_TRANSMIT_POWER_REPORTING + * @param event packet + * @return delta + * @note: btstack_type 1 + */ +static inline uint8_t hci_subevent_le_transmit_power_reporting_get_delta(const uint8_t * event){ + return event[10]; +} + +/** + * @brief Get field sync_handle from event HCI_SUBEVENT_LE_BIGINFO_ADVERTISING_REPORT + * @param event packet + * @return sync_handle + * @note: btstack_type H + */ +static inline hci_con_handle_t hci_subevent_le_biginfo_advertising_report_get_sync_handle(const uint8_t * event){ + return little_endian_read_16(event, 3); +} +/** + * @brief Get field num_bis from event HCI_SUBEVENT_LE_BIGINFO_ADVERTISING_REPORT + * @param event packet + * @return num_bis + * @note: btstack_type 1 + */ +static inline uint8_t hci_subevent_le_biginfo_advertising_report_get_num_bis(const uint8_t * event){ + return event[5]; +} +/** + * @brief Get field nse from event HCI_SUBEVENT_LE_BIGINFO_ADVERTISING_REPORT + * @param event packet + * @return nse + * @note: btstack_type 1 + */ +static inline uint8_t hci_subevent_le_biginfo_advertising_report_get_nse(const uint8_t * event){ + return event[6]; +} +/** + * @brief Get field iso_interval from event HCI_SUBEVENT_LE_BIGINFO_ADVERTISING_REPORT + * @param event packet + * @return iso_interval + * @note: btstack_type 2 + */ +static inline uint16_t hci_subevent_le_biginfo_advertising_report_get_iso_interval(const uint8_t * event){ + return little_endian_read_16(event, 7); +} +/** + * @brief Get field bn from event HCI_SUBEVENT_LE_BIGINFO_ADVERTISING_REPORT + * @param event packet + * @return bn + * @note: btstack_type 1 + */ +static inline uint8_t hci_subevent_le_biginfo_advertising_report_get_bn(const uint8_t * event){ + return event[9]; +} +/** + * @brief Get field pto from event HCI_SUBEVENT_LE_BIGINFO_ADVERTISING_REPORT + * @param event packet + * @return pto + * @note: btstack_type 1 + */ +static inline uint8_t hci_subevent_le_biginfo_advertising_report_get_pto(const uint8_t * event){ + return event[10]; +} +/** + * @brief Get field irc from event HCI_SUBEVENT_LE_BIGINFO_ADVERTISING_REPORT + * @param event packet + * @return irc + * @note: btstack_type 1 + */ +static inline uint8_t hci_subevent_le_biginfo_advertising_report_get_irc(const uint8_t * event){ + return event[11]; +} +/** + * @brief Get field max_pdu from event HCI_SUBEVENT_LE_BIGINFO_ADVERTISING_REPORT + * @param event packet + * @return max_pdu + * @note: btstack_type 2 + */ +static inline uint16_t hci_subevent_le_biginfo_advertising_report_get_max_pdu(const uint8_t * event){ + return little_endian_read_16(event, 12); +} +/** + * @brief Get field sdu_interval from event HCI_SUBEVENT_LE_BIGINFO_ADVERTISING_REPORT + * @param event packet + * @return sdu_interval + * @note: btstack_type 3 + */ +static inline uint32_t hci_subevent_le_biginfo_advertising_report_get_sdu_interval(const uint8_t * event){ + return little_endian_read_24(event, 14); +} +/** + * @brief Get field max_sdu from event HCI_SUBEVENT_LE_BIGINFO_ADVERTISING_REPORT + * @param event packet + * @return max_sdu + * @note: btstack_type 2 + */ +static inline uint16_t hci_subevent_le_biginfo_advertising_report_get_max_sdu(const uint8_t * event){ + return little_endian_read_16(event, 17); +} +/** + * @brief Get field phy from event HCI_SUBEVENT_LE_BIGINFO_ADVERTISING_REPORT + * @param event packet + * @return phy + * @note: btstack_type 1 + */ +static inline uint8_t hci_subevent_le_biginfo_advertising_report_get_phy(const uint8_t * event){ + return event[19]; +} +/** + * @brief Get field framing from event HCI_SUBEVENT_LE_BIGINFO_ADVERTISING_REPORT + * @param event packet + * @return framing + * @note: btstack_type 1 + */ +static inline uint8_t hci_subevent_le_biginfo_advertising_report_get_framing(const uint8_t * event){ + return event[20]; +} +/** + * @brief Get field encryption from event HCI_SUBEVENT_LE_BIGINFO_ADVERTISING_REPORT + * @param event packet + * @return encryption + * @note: btstack_type 1 + */ +static inline uint8_t hci_subevent_le_biginfo_advertising_report_get_encryption(const uint8_t * event){ + return event[21]; +} + +/** + * @brief Get field status from event HCI_SUBEVENT_LE_SUBRATE_CHANGE + * @param event packet + * @return status + * @note: btstack_type 1 + */ +static inline uint8_t hci_subevent_le_subrate_change_get_status(const uint8_t * event){ + return event[3]; +} +/** + * @brief Get field connection_handle from event HCI_SUBEVENT_LE_SUBRATE_CHANGE + * @param event packet + * @return connection_handle + * @note: btstack_type H + */ +static inline hci_con_handle_t hci_subevent_le_subrate_change_get_connection_handle(const uint8_t * event){ + return little_endian_read_16(event, 4); +} +/** + * @brief Get field subrate_factor from event HCI_SUBEVENT_LE_SUBRATE_CHANGE + * @param event packet + * @return subrate_factor + * @note: btstack_type 2 + */ +static inline uint16_t hci_subevent_le_subrate_change_get_subrate_factor(const uint8_t * event){ + return little_endian_read_16(event, 6); +} +/** + * @brief Get field peripheral_latency from event HCI_SUBEVENT_LE_SUBRATE_CHANGE + * @param event packet + * @return peripheral_latency + * @note: btstack_type 2 + */ +static inline uint16_t hci_subevent_le_subrate_change_get_peripheral_latency(const uint8_t * event){ + return little_endian_read_16(event, 8); +} +/** + * @brief Get field continuation_number from event HCI_SUBEVENT_LE_SUBRATE_CHANGE + * @param event packet + * @return continuation_number + * @note: btstack_type 2 + */ +static inline uint16_t hci_subevent_le_subrate_change_get_continuation_number(const uint8_t * event){ + return little_endian_read_16(event, 10); +} +/** + * @brief Get field supervision_timeout from event HCI_SUBEVENT_LE_SUBRATE_CHANGE + * @param event packet + * @return supervision_timeout + * @note: btstack_type 2 + */ +static inline uint16_t hci_subevent_le_subrate_change_get_supervision_timeout(const uint8_t * event){ + return little_endian_read_16(event, 12); +} + /** * @brief Get field acl_handle from event HSP_SUBEVENT_RFCOMM_CONNECTION_COMPLETE * @param event packet