diff options
Diffstat (limited to 'pw_bluetooth/public/pw_bluetooth/hci_commands.emb')
-rw-r--r-- | pw_bluetooth/public/pw_bluetooth/hci_commands.emb | 2934 |
1 files changed, 2934 insertions, 0 deletions
diff --git a/pw_bluetooth/public/pw_bluetooth/hci_commands.emb b/pw_bluetooth/public/pw_bluetooth/hci_commands.emb new file mode 100644 index 000000000..fdabc7b62 --- /dev/null +++ b/pw_bluetooth/public/pw_bluetooth/hci_commands.emb @@ -0,0 +1,2934 @@ +# Copyright 2023 The Pigweed Authors +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may not +# use this file except in compliance with the License. You may obtain a copy of +# the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations under +# the License. + +# This file contains Emboss definitions for Host Controller Interface packets +# and types found in the Bluetooth Core Specification. The Emboss compiler is +# used to generate a C++ header from this file. + +import "hci_common.emb" as hci + +[$default byte_order: "LittleEndian"] +[(cpp) namespace: "pw::bluetooth::emboss"] +# =========================== Constants ================================= + + +enum InquiryAccessCode: + -- General- and Device-specific Inquiry Access Codes (DIACs) for use in Inquiry + -- command LAP fields. + -- (https://www.bluetooth.com/specifications/assigned-numbers/baseband) + [maximum_bits: 24] + GIAC = 0x9E8B33 + -- General Inquiry Access Code + + LIAC = 0x9E8B00 + -- Limited Dedicated Inquiry Access Code + + +enum PcmDataFormat: + -- PCM data formats from assigned numbers. + -- (https://www.bluetooth.com/specifications/assigned-numbers/host-controller-interface) + [maximum_bits: 8] + NOT_APPLICABLE = 0x00 + ONES_COMPLEMENT = 0x01 + TWOS_COMPLEMENT = 0x02 + SIGN_MAGNITUDE = 0x03 + UNSIGNED = 0x04 + + +enum ScoDataPath: + [maximum_bits: 8] + HCI = 0x00 + AUDIO_TEST_MODE = 0xFF + -- 0x01 - 0xFE specify the logical channel number (vendor specific) + + +enum PageTimeout: + [maximum_bits: 16] + MIN = 0x0001 + MAX = 0xFFFF + DEFAULT = 0x2000 + + +enum ScanInterval: + -- The minimum and maximum range values for Page and Inquiry Scan Interval (in time slices) + -- Page Scan Interval: (see Core Spec v5.0, Vol 2, Part E, Section 7.3.19) + -- Inquiry Scan Interval: (see Core Spec v5.0, Vol 2, Part E, Section 7.3.21) + [maximum_bits: 16] + MIN = 0x0012 + MAX = 0x1000 + + +enum ScanWindow: + -- The minimum and maximum range valeus for Page and Inquiry Scan Window (in time slices) + -- Page Scan Window: (see Core Spec v5.0, Vol 2, Part E, Section 7.3.19) + -- Inquiry Scan Window: (see Core Spec v5.0, Vol 2, Part E, Section 7.3.21) + [maximum_bits: 16] + MIN = 0x0011 + MAX = 0x1000 + + +bits ScoPacketType: + -- Bitmask of SCO packet types. + # SCO packet types + 0 [+1] Flag hv1 + $next [+1] Flag hv2 + $next [+1] Flag hv3 + # eSCO packet types + $next [+1] Flag ev3 + $next [+1] Flag ev4 + $next [+1] Flag ev5 + $next [+1] Flag not_2_ev3 + $next [+1] Flag not_3_ev3 + $next [+1] Flag not_2_ev5 + $next [+1] Flag not_3_ev5 + + +bits PacketType: + -- Bitmask values for supported Packet Types + -- Used for HCI_Create_Connection and HCI_Change_Connection_Packet_Type + -- All other bits reserved for future use. + 1 [+1] Flag disable_2_dh1 + 2 [+1] Flag disable_3_dh1 + 3 [+1] Flag enable_dm1 # Note: always on in >= v1.2 + 4 [+1] Flag enable_dh1 + 8 [+1] Flag disable_2_dh3 + 9 [+1] Flag disable_3_dh3 + 10 [+1] Flag enable_dm3 + 11 [+1] Flag enable_dh3 + 12 [+1] Flag disable_2_dh5 + 13 [+1] Flag disable_3_dh5 + 14 [+1] Flag enable_dm5 + 15 [+1] Flag enable_dh5 + + +enum OobDataPresent: + -- Whether there is out-of-band data present, and what type. + -- All other values reserved for future use. + [maximum_bits: 8] + NOT_PRESENT = 0x00 + P192_ = 0x01 + P256_ = 0x02 + P192_AND_P256 = 0x03 + + +bits ScanEnableBits: + -- Bitmask Values for the Scan_Enable parameter in a HCI_(Read,Write)_Scan_Enable command. + 0 [+1] Flag inquiry + -- Inquiry scan enabled + + 1 [+1] Flag page + -- Page scan enabled + + +enum InquiryScanType: + [maximum_bits: 8] + STANDARD = 0x00 + -- Standard scan (Default) (Mandatory) + + INTERLACED = 0x01 + + +struct LocalName: + 0 [+248] UInt:8[248] local_name + + +struct ExtendedInquiryResponse: + 0 [+240] UInt:8[240] extended_inquiry_response + + +enum LEExtendedDuplicateFilteringOption: + -- Possible values that can be used for the |filter_duplicates| parameter in a + -- HCI_LE_Set_Extended_Scan_Enable command. + [maximum_bits: 8] + DISABLED = 0x00 + ENABLED = 0x01 + ENABLED_RESET_FOR_EACH_SCAN_PERIOD = 0x02 + -- Duplicate advertisements in a single scan period should not be sent to the + -- Host in advertising report events; this setting shall only be used if the + -- Period parameter is non-zero. + + +enum LEPeriodicAdvertisingCreateSyncUseParams: + [maximum_bits: 1] + + USE_PARAMS = 0x00 + -- Use the Advertising_SID, Advertiser_Address_Type, and Adertiser_Address parameters to + -- determine which advertiser to listen to. + + USE_PERIODIC_ADVERTISER_LIST = 0x01 + -- Use the Periodic Advertiser List to determine which advertiser to listen to. + + +bits LEPeriodicAdvertisingCreateSyncOptions: + -- First parameter to the LE Periodic Advertising Create Sync command + 0 [+1] LEPeriodicAdvertisingCreateSyncUseParams advertiser_source + $next [+1] Flag enable_reporting + -- 0: Reporting initially enabled + -- 1: Reporting initially disabled + + $next [+1] Flag enable_duplicate_filtering + -- 0: Duplicate filtering initially disabled + -- 1: Duplicate filtering initially enabled + + +enum LEPeriodicAdvertisingAddressType: + -- Possible values that can be specified for the |advertiser_address_type| in an LE Periodic + -- Advertising Create Sync command. + [maximum_bits: 8] + PUBLIC = 0x00 + -- Public Device Address or Public Identity Address + + RANDOM = 0x01 + -- Random Device Address or Random (static) Identity Address + + +bits LEPeriodicAdvertisingSyncCTEType: + -- Bit definitions for a |sync_cte_type| field in an LE Periodic Advertising Create Sync command + + 0 [+1] Flag dont_sync_aoa + -- Do not sync to packets with an AoA Constant Tone Extension + + $next [+1] Flag dont_sync_aod_1us + -- Do not sync to packets with an AoD Constant Tone Extension with 1 microsecond slots + + $next [+1] Flag dont_sync_aod_2us + -- Do not sync to packets with an AoD Constant Tone Extension with 2 microsecond slots + + $next [+1] Flag dont_sync_type_3 + -- Do not sync to packets with a typoe 3 Constant Tone Extension (currently reserved for future + -- use) + + $next [+1] Flag dont_sync_without_cte + -- Do not sync to packets without a Constant Tone Extension + + +enum LEOwnAddressType: + -- Possible values that can be used for the |own_address_type| parameter in various LE packets. + + [maximum_bits: 8] + + PUBLIC = 0x00 + -- Public Device Address + + RANDOM = 0x01 + -- Random Device Address + + PRIVATE_DEFAULT_TO_PUBLIC = 0x02 + -- Controller generates the Resolvable Private Address based on the local IRK from the resolving + -- list. If the resolving list contains no matching entry, then use the public address. + + PRIVATE_DEFAULT_TO_RANDOM = 0x03 + -- Controller generates the Resolvable Private Address based on the local IRK from the resolving + -- list. If the resolving list contains no matching entry, then use the random address from + -- LE_Set_Random_Address. + + +enum LEScanType: + -- Possible values that can be used for the |scan_type| parameter in various LE HCI commands. + [maximum_bits: 8] + PASSIVE = 0x00 + -- Passive Scanning. No scanning PDUs shall be sent (default) + + ACTIVE = 0x01 + -- Active scanning. Scanning PDUs may be sent. + + +enum LEScanFilterPolicy: + -- Possible values that can be used for the |filter_policy| parameter in various LE HCI commands + [maximum_bits: 8] + BASIC_UNFILTERED = 0x00 + BASIC_FILTERED = 0x01 + EXTENDED_UNFILTERED = 0x02 + EXTENDED_FILTERED = 0x03 + + +bits LEScanPHYBits: + 0 [+1] Flag le_1m + -- Scan advertisements on the LE 1M PHY + + 2 [+1] Flag le_coded + -- Scan advertisements on the LE Coded PHY + + +bits LEInitiatingPHYBits: + 0 [+1] Flag le_1m + 1 [+1] Flag le_2m + 2 [+1] Flag le_coded + + +enum LEPrivacyMode: + -- Possible values for the |privacy_mode| parameter in an LE Set Privacy Mode + -- command + [maximum_bits: 8] + NETWORK = 0x00 + -- Use Network Privacy Mode for this peer device (default). + + DEVICE = 0x01 + -- Use Device Privacy Mode for this peer device. + + +enum InquiryMode: + [maximum_bits: 8] + STANDARD = 0x00 + -- Standard Inquiry Result format (default) + + RSSI = 0x01 + -- Inquiry Result format with RSSI + + EXTENDED = 0x02 + -- Inquiry Result format with RSSI or EIR format + + +enum PageScanType: + [maximum_bits: 8] + STANDARD_SCAN = 0x00 + -- Standard scan (default) (mandatory) + + INTERLACED_SCAN = 0x01 + -- Interlaced scan (optional) + + +bits LEEventMask: + 0 [+1] Flag le_connection_complete + $next [+1] Flag le_advertising_report + $next [+1] Flag le_connection_update_complete + $next [+1] Flag le_read_remote_features_complete + $next [+1] Flag le_long_term_key_request + $next [+1] Flag le_remote_connection_parameter_request + $next [+1] Flag le_data_length_change + $next [+1] Flag le_read_local_p256_public_key_complete + $next [+1] Flag le_generate_dhkey_complete + $next [+1] Flag le_enhanced_connection_complete + $next [+1] Flag le_directed_advertising_report + $next [+1] Flag le_phy_update_complete + $next [+1] Flag le_extended_advertising_report + $next [+1] Flag le_periodic_advertising_sync_established + $next [+1] Flag le_periodic_advertising_report + $next [+1] Flag le_periodic_advertising_sync_lost + $next [+1] Flag le_extended_scan_timeout + $next [+1] Flag le_extended_advertising_set_terminated + $next [+1] Flag le_scan_request_received + $next [+1] Flag le_channel_selection_algorithm + $next [+1] Flag le_connectionless_iq_report + $next [+1] Flag le_connection_iq_report + $next [+1] Flag le_cte_request_failed + $next [+1] Flag le_periodic_advertising_sync_transfer_received_event + $next [+1] Flag le_cis_established_event + $next [+1] Flag le_cis_request_event + $next [+1] Flag le_create_big_complete_event + $next [+1] Flag le_terminate_big_complete_event + $next [+1] Flag le_big_sync_established_event + $next [+1] Flag le_big_sync_lost_event + $next [+1] Flag le_request_peer_sca_complete_event + $next [+1] Flag le_path_loss_threshold_event + $next [+1] Flag le_transmit_power_reporting_event + $next [+1] Flag le_biginfo_advertising_report_event + $next [+1] Flag le_subrate_change_event + + +enum LEAdvertisingType: + [maximum_bits: 8] + CONNECTABLE_AND_SCANNABLE_UNDIRECTED = 0x00 + -- ADV_IND + + CONNECTABLE_HIGH_DUTY_CYCLE_DIRECTED = 0x01 + -- ADV_DIRECT_IND + + SCANNABLE_UNDIRECTED = 0x02 + -- ADV_SCAN_IND + + NOT_CONNECTABLE_UNDIRECTED = 0x03 + -- ADV_NONCONN_IND + + CONNECTABLE_LOW_DUTY_CYCLE_DIRECTED = 0x04 + -- ADV_DIRECT_IND + + +bits LEAdvertisingChannels: + 0 [+1] Flag channel_37 + $next [+1] Flag channel_38 + $next [+1] Flag channel_39 + + +enum LEAdvertisingFilterPolicy: + [maximum_bits: 8] + + ALLOW_ALL = 0x00 + -- Process scan and connection requests from all devices (i.e., the Filter + -- Accept List is not in use) (default). + + ALLOW_ALL_CONNECTIONS_AND_USE_FILTER_ACCEPT_LIST_FOR_SCANS = 0x01 + -- Process connection requests from all devices and scan requests only from + -- devices that are in the Filter Accept List. + + ALLOW_ALL_SCANS_AND_USE_FILTER_ACCEPT_LIST_FOR_CONNECTIONS = 0x02 + -- Process scan requests from all devices and connection requests only from + -- devices that are in the Filter Accept List. + + ALLOW_FILTER_ACCEPT_LIST_ONLY = 0x03 + -- Process scan and connection requests only from devices in the Filter + -- Accept List. + + +enum ScanRequestNotifications: + [maximum_bits: 8] + DISABLED = 0x00 + ENABLED = 0x01 + + +enum LESetExtendedAdvDataOp: + -- Potential values for the Operation parameter in a HCI_LE_Set_Extended_Advertising_Data command. + [maximum_bits: 8] + INTERMEDIATE_FRAGMENT = 0x00 + -- Intermediate fragment of fragmented extended advertising data. + + FIRST_FRAGMENT = 0x01 + -- First fragment of fragmented extended advertising data. + + LAST_FRAGMENT = 0x02 + -- Last fragment of fragmented extended advertising data. + + COMPLETE = 0x03 + -- Complete extended advertising data. + + UNCHANGED_DATA = 0x04 + -- Unchanged data (just update the Advertising DID) + + +enum LEExtendedAdvFragmentPreference: + -- Potential values for the Fragment_Preference parameter in a + -- HCI_LE_Set_Extended_Advertising_Data command. + [maximum_bits: 8] + MAY_FRAGMENT = 0x00 + -- The Controller may fragment all Host advertising data + + SHOULD_NOT_FRAGMENT = 0x01 + -- The Controller should not fragment or should minimize fragmentation of Host advertising data + + +bits LEAdvertisingEventProperties: + -- The Advertising_Event_Properties bitfield values used in a HCI LE Set Extended Advertising + -- Parameters command. + 0 [+1] Flag connectable + $next [+1] Flag scannable + $next [+1] Flag directed + $next [+1] Flag high_duty_cycle_directed_connectable + $next [+1] Flag use_legacy_pdus + $next [+1] Flag anonymous_advertising + $next [+1] Flag include_tx_power + + +enum FlowControlMode: + [maximum_bits: 8] + PACKET_BASED = 0x00 + DATA_BLOCK_BASED = 0x01 + + +bits EventMaskPage2: + 8 [+1] Flag number_of_completed_data_blocks_event + 14 [+1] Flag triggered_clock_capture_event + 15 [+1] Flag synchronization_train_complete_event + 16 [+1] Flag synchronization_train_received_event + 17 [+1] Flag connectionless_peripheral_broadcast_receive_event + 18 [+1] Flag connectionless_peripheral_broadcast_timeout_event + 19 [+1] Flag truncated_page_complete_event + 20 [+1] Flag peripheral_page_response_timeout_event + 21 [+1] Flag connectionless_peripheral_broadcast_channel_map_event + 22 [+1] Flag inquiry_response_notification_event + 23 [+1] Flag authenticated_payload_timeout_expired_event + 24 [+1] Flag sam_status_change_event + 25 [+1] Flag encryption_change_event_v2 + + +bits LECISPHYOptions: + -- Identifies PHYs that can be used for transmission + 0 [+1] Flag le_1m + $next [+1] Flag le_2m + $next [+1] Flag le_coded + + +struct LESetCIGParametersCISOptions: + -- Parameters for the CISes defined in a LESetCIGParametersCommand + + 0 [+1] UInt cis_id + -- Used to identify a CIS + [requires: 0x00 <= this <= 0xEF] + + $next [+2] UInt max_sdu_c_to_p + -- Maximum size, in octets, of the payload from the Central's Host + [requires: 0x0000 <= this <= 0x0FFF] + + $next [+2] UInt max_sdu_p_to_c + -- Maximum size, in octets, of the payload from the Peripheral's Host + [requires: 0x0000 <= this <= 0x0FFF] + + $next [+1] bits: + + 0 [+LECISPHYOptions.$size_in_bits] LECISPHYOptions phy_c_to_p + -- Identifies which PHY to use for transmission from the Central to the Peripheral + + $next [+1] bits: + + 0 [+LECISPHYOptions.$size_in_bits] LECISPHYOptions phy_p_to_c + -- Identifies which PHY to use for transmission from the Peripheral to the Central + + $next [+1] UInt rtn_c_to_p + -- Number of times every CIS Data PDU should be retransmitted from the Central to the + -- Peripheral + + $next [+1] UInt rtn_p_to_c + -- Number of times every CIS Data PDU should be retransmitted from the Peripheral to the + -- Central + + +enum LESleepClockAccuracyRange: + -- Accuracy of the sleep clock, provided as a range + [maximum_bits: 8] + PPM_251_TO_500 = 0x00 + PPM_151_TO_250 = 0x01 + PPM_101_TO_150 = 0x02 + PPM_76_TO_100 = 0x03 + PPM_51_TO_75 = 0x04 + PPM_31_TO_50 = 0x05 + PPM_21_TO_30 = 0x06 + PPM_0_TO_20 = 0x07 + + +enum LECISPacking: + -- Preferred method of arranging subevents of multiple CISes + [maximum_bits: 8] + SEQUENTIAL = 0x00 + INTERLEAVED = 0x01 + + +enum LECISFraming: + -- Format of CIS Data PDUs + [maximum_bits: 8] + UNFRAMED = 0x00 + FRAMED = 0x01 + + +enum DataPathDirection: + [maximum_bits: 8] + INPUT = 0x00 + -- Host to Controller + + OUTPUT = 0x01 + -- Controller to Host + +# ========================= HCI Command packets ========================= +# Core Spec v5.3 Vol 4, Part E, Section 7 + +# ========== 7.1 Link Control Commands ========== + + +struct InquiryCommand: + -- 7.1.1 Inquiry command (v1.1) (BR/EDR) + -- HCI_Inquiry + -- + -- Note: NO Command Complete; Sends Inquiry Complete at the end of the + -- inquiry to indicate it's completion. No Inquiry Complete event is sent if + -- Inquiry is cancelled. + + let hdr_size = hci.CommandHeader.$size_in_bytes + + 0 [+hdr_size] hci.CommandHeader header + + $next [+3] InquiryAccessCode lap + -- LAP (Lower Address Part) + -- In the range 0x9E8B00 - 0x9E8B3F, defined by the Bluetooth SIG in + -- Baseband Assigned Numbers. + + $next [+1] UInt inquiry_length + -- Time before the inquiry is halted. Defined in 1.28s units. + -- Range: 0x01 to kInquiryLengthMax in hci_constants.h + + $next [+1] UInt num_responses + -- Maximum number of responses before inquiry is halted. + -- Set to 0x00 for unlimited. + + +struct InquiryCancelCommand: + -- 7.1.2 Inquiry Cancel command (v1.1) (BR/EDR) + -- HCI_Inquiry_Cancel + -- + -- No command parameters + let hdr_size = hci.CommandHeader.$size_in_bytes + 0 [+hdr_size] hci.CommandHeader header + +# 7.1.3 Periodic Inquiry Mode command +# HCI_Periodic_Inquiry_Mode +# TODO: b/265052417 - Definition needs to be added + + +# 7.1.4 Exit Periodic Inquiry Mode command +# HCI_Exit_Periodic_Inquiry_Mode +# TODO: b/265052417 - Definition needs to be added + + +struct CreateConnectionCommand: + -- 7.1.5 Create Connection (v1.1) (BR/EDR) + -- HCI_Create_Connection + -- + -- NOTE on ReturnParams: No Command Complete event will be sent by the + -- Controller to indicate that this command has been completed. Instead, the + -- Connection Complete event will indicate that this command has been + -- completed. + let hdr_size = hci.CommandHeader.$size_in_bytes + 0 [+hdr_size] hci.CommandHeader header + $next [+hci.BdAddr.$size_in_bytes] hci.BdAddr bd_addr + -- BD_ADDR of the device to be connected + + $next [+2] PacketType packet_type + -- Mask of allowable packet types. + + $next [+1] hci.PageScanRepetitionMode page_scan_repetition_mode + -- The Page Scan Repetition Mode of the remote device as retrieved by Inquiry. + + $next [+1] UInt reserved + [requires: this == 0] + + $next [+2] hci.ClockOffset clock_offset + -- Clock Offset. The lower 15 bits are set to the clock offset as retrieved + -- by an Inquiry. The highest bit is set to 1 if the rest of this parameter + -- is valid. + + $next [+1] hci.GenericEnableParam allow_role_switch + -- Allow Role Switch. + -- Allowed values: + -- 0x00 - No role switch allowed, this device will be the central + -- 0x01 - Role switch allowed, this device may become peripheral during + -- connection setup + + +struct DisconnectCommand: + -- 7.1.6 Disconnect command (v1.1) (BR/EDR & LE) + -- HCI_Disconnect + -- + -- NOTE on ReturnParams: No Command Complete event will be sent by the + -- Controller to indicate that this command has been completed. Instead, the + -- Disconnection Complete event will indicate that this command has been + -- completed. + let hdr_size = hci.CommandHeader.$size_in_bytes + 0 [+hdr_size] hci.CommandHeader header + $next [+2] UInt connection_handle + -- Connection_Handle (only the lower 12-bits are meaningful). + -- Range: 0x0000 to 0x0EFF + + $next [+1] hci.StatusCode reason + -- Reason for the disconnect. + + +struct CreateConnectionCancelCommand: + -- 7.1.7 Create Connection Cancel command (v1.1) (BR/EDR) + -- HCI_Create_Connection_Cancel + let hdr_size = hci.CommandHeader.$size_in_bytes + 0 [+hdr_size] hci.CommandHeader header + $next [+hci.BdAddr.$size_in_bytes] hci.BdAddr bd_addr + -- BD_ADDR of the Create Connection Command request + + +struct AcceptConnectionRequestCommand: + -- 7.1.8 Accept Connection Request command (v1.1) (BR/EDR) + -- HCI_Accept_Connection_Request + let hdr_size = hci.CommandHeader.$size_in_bytes + 0 [+hdr_size] hci.CommandHeader header + $next [+hci.BdAddr.$size_in_bytes] hci.BdAddr bd_addr + -- The 48-bit BD_ADDR of the remote device requesting the connection. + + $next [+1] hci.ConnectionRole role + + +struct RejectConnectionRequestCommand: + -- 7.1.9 Reject Connection Request command (v1.1) (BR/EDR) + -- HCI_Reject_Connection_Request + let hdr_size = hci.CommandHeader.$size_in_bytes + 0 [+hdr_size] hci.CommandHeader header + $next [+hci.BdAddr.$size_in_bytes] hci.BdAddr bd_addr + -- The 48-bit BD_ADDR of the remote device requesting the connection. + + $next [+1] hci.StatusCode reason + -- Must be one of CONNECTION_REJECTED* from hci.StatusCode in this file + + +struct LinkKeyRequestReplyCommand: + -- 7.1.10 Link Key Request Reply command (v1.1) (BR/EDR) + -- HCI_Link_Key_Request_Reply + let hdr_size = hci.CommandHeader.$size_in_bytes + 0 [+hdr_size] hci.CommandHeader header + $next [+hci.BdAddr.$size_in_bytes] hci.BdAddr bd_addr + -- The 48-bit BD_ADDR of the remote device requesting the connection. + + let bredr_link_key_size = hci.LinkKey.$size_in_bytes + $next [+bredr_link_key_size] hci.LinkKey link_key + -- Link key to use for the connection with the peer device. + + +struct LinkKeyRequestNegativeReplyCommand: + -- 7.1.11 Link Key Request Negative Reply command (v1.1) (BR/EDR) + -- HCI_Link_Key_Request_Negative_Reply + let hdr_size = hci.CommandHeader.$size_in_bytes + 0 [+hdr_size] hci.CommandHeader header + $next [+hci.BdAddr.$size_in_bytes] hci.BdAddr bd_addr + -- BD_ADDR of the peer device that the host does not have a link key for. + +# 7.1.12 PIN Code Request Reply command +# HCI_PIN_Code_Request_Reply +# TODO: b/265052417 - Definition needs to be added + + +# 7.1.13 PIN Code Request Negative Reply command +# HCI_PIN_Code_Request_Negative_Reply +# TODO: b/265052417 - Definition needs to be added + + +# 7.1.14 Change Connection Packet Type command +# HCI_Change_Connection_Packet_Type +# TODO: b/265052417 - Definition needs to be added + + +struct AuthenticationRequestedCommand: + -- 7.1.15 Authentication Requested command (v1.1) (BR/EDR) + -- HCI_Authentication_Requested + -- + -- NOTE on ReturnParams: No Command Complete event will be sent by the + -- Controller to indicate that this command has been completed. Instead, the + -- Authentication Complete event will indicate that this command has been + -- completed. + let hdr_size = hci.CommandHeader.$size_in_bytes + 0 [+hdr_size] hci.CommandHeader header + $next [+2] UInt connection_handle + -- Connection_Handle (only the lower 12-bits are meaningful). + -- Range: 0x0000 to 0x0EFF + -- Must be the handle of a connected ACL-U logical link. + + +struct SetConnectionEncryptionCommand: + -- 7.1.16 Set Connection Encryption command (v1.1) (BR/EDR) + -- HCI_Set_Connection_Encryption + -- + -- NOTE on ReturnParams: No Command Complete event will be sent by the + -- Controller to indicate that this command has been completed. Instead, the + -- Encryption Change event will indicate that this command has been completed. + let hdr_size = hci.CommandHeader.$size_in_bytes + 0 [+hdr_size] hci.CommandHeader header + $next [+2] UInt connection_handle + -- Connection_Handle (only the lower 12-bits are meaningful). + -- Range: 0x0000 to 0x0EFF + -- Must be the handle of a connected ACL-U logical link. + + $next [+1] hci.GenericEnableParam encryption_enable + -- Whether link level encryption should be turned on or off. + +# 7.1.17 Change Connection Link Key command +# HCI_Change_Connection_Link_Key +# TODO: b/265052417 - Definition needs to be added + + +# 7.1.18 Link Key Selection command +# HCI_Link_Key_Selection +# TODO: b/265052417 - Definition needs to be added + + +struct RemoteNameRequestCommand: + -- 7.1.19 Remote Name Request command (v1.1) (BR/EDR) + -- HCI_Remote_Name_Request + -- + -- NOTE on ReturnParams: No Command Complete event will be sent by the + -- Controller to indicate that this command has been completed. Instead, the + -- Remote Name Request Complete event will indicate that this command has been + -- completed. + let hdr_size = hci.CommandHeader.$size_in_bytes + 0 [+hdr_size] hci.CommandHeader header + $next [+hci.BdAddr.$size_in_bytes] hci.BdAddr bd_addr + -- Address of the device whose name is to be requested. + + $next [+1] hci.PageScanRepetitionMode page_scan_repetition_mode + -- Page Scan Repetition Mode of the device, obtained by Inquiry. + + $next [+1] UInt reserved + [requires: this == 0] + + $next [+2] hci.ClockOffset clock_offset + -- Clock offset. The lower 15 bits of this represent bits 16-2 + -- of CLKNPeripheral-CLK, and the highest bit is set when the other + -- bits are valid. + +# 7.1.20 Remote Name Request Cancel command +# HCI_Remote_Name_Request_Cancel + + +struct ReadRemoteSupportedFeaturesCommand: + -- 7.1.21 Read Remote Supported Features command (v1.1) (BR/EDR) + -- HCI_Read_Remote_Supported_Features + -- + -- NOTE on ReturnParams: No Command Complete event will be sent by the + -- Controller to indicate that this command has been completed. Instead, the + -- Read Remote Supported Features Complete event will indicate that this + -- command has been completed. + let hdr_size = hci.CommandHeader.$size_in_bytes + 0 [+hdr_size] hci.CommandHeader header + $next [+2] UInt connection_handle + -- Connection_Handle (only the lower 12-bits are meaningful). + -- Range: 0x0000 to 0x0EFF + -- Must be the handle of a connected ACL-U logical link. + + +struct ReadRemoteExtendedFeaturesCommand: + -- 7.1.22 Read Remote Extended Features command (v1.2) (BR/EDR) + -- HCI_Read_Remote_Extended_Features + -- + -- NOTE on ReturnParams: No Command Complete event will be sent by the + -- Controller to indicate that this command has been completed. Instead, the + -- Read Remote Extended Features Complete event will indicate that this + -- command has been completed. + let hdr_size = hci.CommandHeader.$size_in_bytes + 0 [+hdr_size] hci.CommandHeader header + $next [+2] UInt connection_handle + -- Connection_Handle (only the lower 12-bits are meaningful). + -- Range: 0x0000 to 0x0EFF + -- Must be the handle of a connected ACL-U logical link. + + $next [+1] UInt page_number + -- Page of features to read. + -- Values: + -- - 0x00 standard features as if requested by Read Remote Supported Features + -- - 0x01-0xFF the corresponding features page (see Vol 2, Part C, Sec 3.3). + + +struct ReadRemoteVersionInfoCommand: + -- 7.1.23 Read Remote Version Information command (v1.1) (BR/EDR & LE) + -- HCI_Read_Remote_Version_Information + -- + -- NOTE on ReturnParams: No Command Complete event will be sent by the + -- Controller to indicate that this command has been completed. Instead, the + -- Read Remote Version Information Complete event will indicate that this + -- command has been completed. + let hdr_size = hci.CommandHeader.$size_in_bytes + 0 [+hdr_size] hci.CommandHeader header + $next [+2] UInt connection_handle + -- Connection_Handle (only the lower 12-bits are meaningful). + -- Range: 0x0000 to 0x0EFF + +# 7.1.24 Read Clock Offset command +# HCI_Read_Clock_Offset +# TODO: b/265052417 - Definition needs to be added + + +# 7.1.25 Read LMP Handle command +# HCI_Read_LMP_Handle +# TODO: b/265052417 - Definition needs to be added + + +# 7.1.26 Setup Synchronous Connection command +# HCI_Setup_Synchronous_Connection +# TODO: b/265052417 - Definition needs to be added + + +# 7.1.27 Accept Synchronous Connection Request command +# HCI_Accept_Synchronous_Connection_Request +# TODO: b/265052417 - Definition needs to be added + + +struct RejectSynchronousConnectionRequestCommand: + -- 7.1.28 Reject Synchronous Connection command (BR/EDR) + -- HCI_Reject_Synchronous_Connection_Request + let hdr_size = hci.CommandHeader.$size_in_bytes + 0 [+hdr_size] hci.CommandHeader header + $next [+hci.BdAddr.$size_in_bytes] hci.BdAddr bd_addr + -- Address of the remote device that sent the request. + + $next [+1] hci.StatusCode reason + -- Reason the connection request was rejected. + + +struct IoCapabilityRequestReplyCommand: + -- 7.1.29 IO Capability Request Reply command (v2.1 + EDR) (BR/EDR) + -- HCI_IO_Capability_Request_Reply + let hdr_size = hci.CommandHeader.$size_in_bytes + 0 [+hdr_size] hci.CommandHeader header + $next [+hci.BdAddr.$size_in_bytes] hci.BdAddr bd_addr + -- The BD_ADDR of the remote device involved in simple pairing process + + $next [+1] hci.IoCapability io_capability + -- The IO capabilities of this device. + + $next [+1] OobDataPresent oob_data_present + -- Whether there is out-of-band data present, and what type. + + $next [+1] hci.AuthenticationRequirements authentication_requirements + -- Authentication requirements of the host. + + +struct UserConfirmationRequestReplyCommand: + -- 7.1.30 User Confirmation Request Reply command (v2.1 + EDR) (BR/EDR) + -- HCI_User_Confirmation_Request_Reply + let hdr_size = hci.CommandHeader.$size_in_bytes + 0 [+hdr_size] hci.CommandHeader header + $next [+hci.BdAddr.$size_in_bytes] hci.BdAddr bd_addr + -- The BD_ADDR of the remote device involved in simple pairing process + + +struct UserConfirmationRequestNegativeReplyCommand: + -- 7.1.31 User Confirmation Request Negative Reply command (v2.1 + EDR) (BR/EDR) + -- HCI_User_Confirmation_Request_Negative_Reply + let hdr_size = hci.CommandHeader.$size_in_bytes + 0 [+hdr_size] hci.CommandHeader header + $next [+hci.BdAddr.$size_in_bytes] hci.BdAddr bd_addr + -- The BD_ADDR of the remote device involved in simple pairing process + + +struct UserPasskeyRequestReplyCommand: + -- 7.1.32 User Passkey Request Reply command (v2.1 + EDR) (BR/EDR) + -- HCI_User_Passkey_Request_Reply + let hdr_size = hci.CommandHeader.$size_in_bytes + 0 [+hdr_size] hci.CommandHeader header + $next [+hci.BdAddr.$size_in_bytes] hci.BdAddr bd_addr + -- The BD_ADDR of the remote device involved in simple pairing process + + $next [+4] UInt numeric_value + -- Numeric value (passkey) entered by user. + [requires: 0 <= this <= 999999] + + +struct UserPasskeyRequestNegativeReplyCommand: + -- 7.1.33 User Passkey Request Negative Reply command (v2.1 + EDR) (BR/EDR) + -- HCI_User_Passkey_Request_Negative_Reply + let hdr_size = hci.CommandHeader.$size_in_bytes + 0 [+hdr_size] hci.CommandHeader header + $next [+hci.BdAddr.$size_in_bytes] hci.BdAddr bd_addr + -- The BD_ADDR of the remote device involved in the simple pairing process. + +# 7.1.34 Remote OOB Data Request Reply command +# HCI_Remote_OOB_Data_Request_Reply +# TODO: b/265052417 - Definition needs to be added + + +# 7.1.35 Remote OOB Data Request Negative Reply command +# HCI_Remote_OOB_Data_Request_Negative_Reply +# TODO: b/265052417 - Definition needs to be added + + +struct IoCapabilityRequestNegativeReplyCommand: + -- 7.1.36 IO Capability Request Negative Reply command (v2.1 + EDR) (BR/EDR) + -- HCI_IO_Capability_Request_Negative_Reply + let hdr_size = hci.CommandHeader.$size_in_bytes + 0 [+hdr_size] hci.CommandHeader header + $next [+hci.BdAddr.$size_in_bytes] hci.BdAddr bd_addr + -- The BD_ADDR of the remote device involved in the simple pairing process. + + $next [+1] hci.StatusCode reason + -- Reason that Simple Pairing was rejected. See 7.1.36 for valid error codes. + + +struct CodecId: + 0 [+1] hci.CodingFormat coding_format + $next [+2] UInt company_id + -- See assigned numbers. + + $next [+2] UInt vendor_codec_id + -- Shall be ignored if |coding_format| is not VENDOR_SPECIFIC. + + +struct SynchronousConnectionParameters: + -- Enhanced Setup Synchronous Connection Command (CSA2) (BR/EDR) + -- TODO: b/308794058 - Use CodecId instead of VendorCodingFormat + struct VendorCodingFormat: + 0 [+1] hci.CodingFormat coding_format + $next [+2] UInt company_id + -- See assigned numbers. + + $next [+2] UInt vendor_codec_id + -- Shall be ignored if |coding_format| is not VENDOR_SPECIFIC. + + enum ScoRetransmissionEffort: + [maximum_bits: 8] + NONE = 0x00 + -- SCO or eSCO + + POWER_OPTIMIZED = 0x01 + -- eSCO only + + QUALITY_OPTIMIZED = 0x02 + -- eSCO only + + DONT_CARE = 0xFF + -- SCO or eSCO + + 0 [+4] UInt transmit_bandwidth + -- Transmit bandwidth in octets per second. + + $next [+4] UInt receive_bandwidth + -- Receive bandwidth in octets per second. + + let vcf_size = VendorCodingFormat.$size_in_bytes + $next [+vcf_size] VendorCodingFormat transmit_coding_format + -- Local Controller -> Remote Controller coding format. + + $next [+vcf_size] VendorCodingFormat receive_coding_format + -- Remote Controller -> Local Controller coding format. + + $next [+2] UInt transmit_codec_frame_size_bytes + $next [+2] UInt receive_codec_frame_size_bytes + $next [+4] UInt input_bandwidth + -- Host->Controller data rate in octets per second. + + $next [+4] UInt output_bandwidth + -- Controller->Host data rate in octets per second. + + $next [+vcf_size] VendorCodingFormat input_coding_format + -- Host->Controller coding format. + + $next [+vcf_size] VendorCodingFormat output_coding_format + -- Controller->Host coding format. + + $next [+2] UInt input_coded_data_size_bits + -- Size, in bits, of the sample or framed data. + + $next [+2] UInt output_coded_data_size_bits + -- Size, in bits, of the sample or framed data. + + $next [+1] PcmDataFormat input_pcm_data_format + $next [+1] PcmDataFormat output_pcm_data_format + $next [+1] UInt input_pcm_sample_payload_msb_position + -- The number of bit positions within an audio sample that the MSB of + -- the sample is away from starting at the MSB of the data. + + $next [+1] UInt output_pcm_sample_payload_msb_position + -- The number of bit positions within an audio sample that the MSB of + -- the sample is away from starting at the MSB of the data. + + $next [+1] ScoDataPath input_data_path + $next [+1] ScoDataPath output_data_path + $next [+1] UInt input_transport_unit_size_bits + -- The number of bits in each unit of data received from the Host over the audio data transport. + -- 0 indicates "not applicable" (implied by the choice of audio data transport). + + $next [+1] UInt output_transport_unit_size_bits + -- The number of bits in each unit of data sent to the Host over the audio data transport. + -- 0 indicates "not applicable" (implied by the choice of audio data transport). + + $next [+2] UInt max_latency_ms + -- The value in milliseconds representing the upper limit of the sum of + -- the synchronous interval, and the size of the eSCO window, where the + -- eSCO window is the reserved slots plus the retransmission window. + -- Minimum: 0x0004 + -- Don't care: 0xFFFF + + $next [+2] bits: + 0 [+ScoPacketType.$size_in_bits] ScoPacketType packet_types + -- Bitmask of allowed packet types. + + $next [+1] ScoRetransmissionEffort retransmission_effort + + +struct EnhancedSetupSynchronousConnectionCommand: + -- 7.1.45 Enhanced Setup Synchronous Connection command + -- HCI_Enhanced_Setup_Synchronous_Connection + let hdr_size = hci.CommandHeader.$size_in_bytes + 0 [+hdr_size] hci.CommandHeader header + $next [+2] UInt connection_handle + -- The connection handle of the associated ACL link if creating a new (e)SCO connection, or the + -- handle of an existing eSCO link if updating connection parameters. + + let scp_size = SynchronousConnectionParameters.$size_in_bytes + $next [+scp_size] SynchronousConnectionParameters connection_parameters + + +struct EnhancedAcceptSynchronousConnectionRequestCommand: + -- 7.1.46 Enhanced Accept Synchronous Connection Request command (CSA2) (BR/EDR) + -- HCI_Enhanced_Accept_Synchronous_Connection_Request + let hdr_size = hci.CommandHeader.$size_in_bytes + 0 [+hdr_size] hci.CommandHeader header + $next [+hci.BdAddr.$size_in_bytes] hci.BdAddr bd_addr + -- The 48-bit BD_ADDR of the remote device requesting the connection. + + let scp_size = SynchronousConnectionParameters.$size_in_bytes + $next [+scp_size] SynchronousConnectionParameters connection_parameters + +# 7.1.47 Truncated Page command +# HCI_Truncated_Page +# TODO: b/265052417 - Definition needs to be added + + +# 7.1.48 Truncated Page Cancel command +# HCI_Truncated_Page_Cancel +# TODO: b/265052417 - Definition needs to be added + + +# 7.1.49 Set Connectionless Peripheral Broadcast command +# HCI_Set_Connectionless_Peripheral_Broadcast +# TODO: b/265052417 - Definition needs to be added + + +# 7.1.50 Set Connectionless Peripheral Broadcast Receive command +# HCI_Set_Connectionless_Peripheral_Broadcast_Receive +# TODO: b/265052417 - Definition needs to be added + + +# 7.1.51 Start Synchronization Train command +# HCI_Start_Synchronization_Train +# TODO: b/265052417 - Definition needs to be added + + +# 7.1.52 Receive Synchronization Train command +# HCI_Receive_Synchronization_Train +# TODO: b/265052417 - Definition needs to be added + + +# 7.1.53 Remote OOB Extended Data Request Reply command +# HCI_Remote_OOB_Extended_Data_Request_Reply +# TODO: b/265052417 - Definition needs to be added + + +# ========== 7.3 Controller & Baseband Commands ========== + + +struct SetEventMaskCommand: + -- 7.3.1 Set Event Mask command (v1.1) + -- HCI_Set_Event_Mask + let hdr_size = hci.CommandHeader.$size_in_bytes + 0 [+hdr_size] hci.CommandHeader header + $next [+8] UInt event_mask + -- 64-bit Bit mask used to control which HCI events are generated by the HCI for the + -- Host. See enum class EventMask in hci_constants.h + + +struct ResetCommand: + -- 7.3.2 Reset command (v1.1) + -- HCI_Reset + let hdr_size = hci.CommandHeader.$size_in_bytes + 0 [+hdr_size] hci.CommandHeader header + +# 7.3.3 Set Event Filter command +# HCI_Set_Event_Filter +# TODO: b/265052417 - Definition needs to be added + + +# 7.3.4 Flush command +# HCI_Flush +# TODO: b/265052417 - Definition needs to be added + + +# 7.3.5 Read PIN Type command +# HCI_Read_PIN_Type +# TODO: b/265052417 - Definition needs to be added + + +# 7.3.6 Write PIN Type command +# HCI_Write_PIN_Type +# TODO: b/265052417 - Definition needs to be added + + +# 7.3.8 Read Stored Link Key command +# HCI_Read_Stored_Link_Key +# TODO: b/265052417 - Definition needs to be added + + +# 7.3.9 Write Stored Link Key command +# HCI_Write_Stored_Link_Key +# TODO: b/265052417 - Definition needs to be added + + +# 7.3.10 Delete Stored Link Key command +# HCI_Delete_Stored_Link_Key +# TODO: b/265052417 - Definition needs to be added + + +struct WriteLocalNameCommand: + -- 7.3.11 Write Local Name command (v1.1) (BR/EDR) + -- HCI_Write_Local_Name + let hdr_size = hci.CommandHeader.$size_in_bytes + 0 [+hdr_size] hci.CommandHeader header + let local_name_size = LocalName.$size_in_bytes + $next [+local_name_size] LocalName local_name + -- A UTF-8 encoded User Friendly Descriptive Name for the device. + -- If the name contained in the parameter is shorter than 248 octets, the end + -- of the name is indicated by a NULL octet (0x00), and the following octets + -- (to fill up 248 octets, which is the length of the parameter) do not have + -- valid values. + + +struct ReadLocalNameCommand: + -- 7.3.12 Read Local Name command (v1.1) (BR/EDR) + -- HCI_Read_Local_Name + let hdr_size = hci.CommandHeader.$size_in_bytes + 0 [+hdr_size] hci.CommandHeader header + +# 7.3.13 Read Connection Accept Timeout command +# HCI_Read_Connection_Accept_Timeout +# TODO: b/265052417 - Definition needs to be added + + +# 7.3.14 Write Connection Accept Timeout command +# HCI_Write_Connection_Accept_Timeout +# TODO: b/265052417 - Definition needs to be added + + +# 7.3.15 Read Page Timeout command +# HCI_Read_Page_Timeout +# TODO: b/265052417 - Definition needs to be added + + +struct WritePageTimeoutCommand: + -- 7.3.16 Write Page Timeout command (v1.1) (BR/EDR) + -- HCI_Write_Page_Timeout + let hdr_size = hci.CommandHeader.$size_in_bytes + 0 [+hdr_size] hci.CommandHeader header + $next [+2] UInt page_timeout + -- Page_Timeout, in time slices (0.625 ms) + -- Range: From MIN to MAX in PageTimeout in this file + [requires: 0x0001 <= this <= 0xFFFF] + + +struct ReadScanEnableCommand: + -- 7.3.17 Read Scan Enable command (v1.1) (BR/EDR) + -- HCI_Read_Scan_Enable + let hdr_size = hci.CommandHeader.$size_in_bytes + 0 [+hdr_size] hci.CommandHeader header + + +struct WriteScanEnableCommand: + -- 7.3.18 Write Scan Enable command (v1.1) (BR/EDR) + -- HCI_Write_Scan_Enable + let hdr_size = hci.CommandHeader.$size_in_bytes + 0 [+hdr_size] hci.CommandHeader header + $next [+1] bits: + 0 [+ScanEnableBits.$size_in_bits] ScanEnableBits scan_enable + + +struct ReadPageScanActivityCommand: + -- 7.3.19 Read Page Scan Activity command (v1.1) (BR/EDR) + -- HCI_Read_Page_Scan_Activity + let hdr_size = hci.CommandHeader.$size_in_bytes + 0 [+hdr_size] hci.CommandHeader header + + +struct WritePageScanActivityCommand: + -- 7.3.20 Write Page Scan Activity command (v1.1) (BR/EDR) + -- HCI_Write_Page_Scan_Activity + let hdr_size = hci.CommandHeader.$size_in_bytes + 0 [+hdr_size] hci.CommandHeader header + $next [+2] UInt page_scan_interval + -- Page_Scan_Interval, in time slices (0.625ms) + -- Valid Range: MIN - MAX in ScanInterval in this file + [requires: 0x0012 <= this <= 0x1000] + + $next [+2] UInt page_scan_window + -- Page_Scan_Window, in time slices + -- Valid Range: MIN - MAX in ScanWindow in this file + [requires: 0x0011 <= this <= 0x1000] + + +struct ReadInquiryScanActivityCommand: + -- 7.3.21 Read Inquiry Scan Activity command (v1.1) (BR/EDR) + -- HCI_Read_Inquiry_Scan_Activity + let hdr_size = hci.CommandHeader.$size_in_bytes + 0 [+hdr_size] hci.CommandHeader header + + +struct WriteInquiryScanActivityCommand: + -- 7.3.22 Write Inquiry Scan Activity command (v1.1) (BR/EDR) + -- HCI_Write_Inquiry_Scan_Activity + let hdr_size = hci.CommandHeader.$size_in_bytes + 0 [+hdr_size] hci.CommandHeader header + $next [+2] UInt inquiry_scan_interval + -- Inquiry_Scan_Interval, in time slices (0.625ms) + -- Valid Range: MIN - MAX in ScanInterval in this file + [requires: 0x0012 <= this <= 0x1000] + + $next [+2] UInt inquiry_scan_window + -- Inquiry_Scan_Window, in time slices + -- Valid Range: MIN - MAX in ScanWindow in this file + [requires: 0x0011 <= this <= 0x1000] + +# 7.3.23 Read Authentication Enable command +# HCI_Read_Authentication_Enable +# TODO: b/265052417 - Definition needs to be added + + +# 7.3.24 Write Authentication Enable command +# HCI_Write_Authentication_Enable +# TODO: b/265052417 - Definition needs to be added + + +struct ReadClassOfDeviceCommand: + -- 7.3.25 Read Class of Device command (v1.1) (BR/EDR) + -- HCI_Read_Class_Of_Device + let hdr_size = hci.CommandHeader.$size_in_bytes + 0 [+hdr_size] hci.CommandHeader header + + +struct WriteClassOfDeviceCommand: + -- 7.3.26 Write Class Of Device command (v1.1) (BR/EDR) + -- HCI_Write_Class_Of_Device + let hdr_size = hci.CommandHeader.$size_in_bytes + 0 [+hdr_size] hci.CommandHeader header + $next [+3] hci.ClassOfDevice class_of_device + +# 7.3.27 Read Voice Setting command +# HCI_Read_Voice_Setting +# TODO: b/265052417 - Definition needs to be added + + +# 7.3.28 Write Voice Setting command +# HCI_Write_Voice_Setting +# TODO: b/265052417 - Definition needs to be added + + +# 7.3.29 Read Automatic Flush Timeout command +# HCI_Read_Automatic_Flush_Timeout +# TODO: b/265052417 - Definition needs to be added + + +struct WriteAutomaticFlushTimeoutCommand: + -- 7.3.30 Write Automatic Flush Timeout command (v1.1) (BR/EDR) + -- HCI_Write_Automatic_Flush_Timeout + let hdr_size = hci.CommandHeader.$size_in_bytes + 0 [+hdr_size] hci.CommandHeader header + $next [+2] UInt connection_handle + -- Connection_Handle (only the lower 12-bits are meaningful). + -- Range: 0x0000 to 0x0EFF + [requires: 0x0000 <= this <= 0x0EFF] + + $next [+2] UInt flush_timeout + -- The value for the Flush_Timeout configuration parameter (Core Spec v5.2, Vol 4, Part E, Sec 6.19). + -- Range: 0x0000 to 0x07FF. 0x0000 indicates infinite flush timeout (no automatic flush). + -- Time = flush_timeout * 0.625ms. + -- Time Range: 0.625ms to 1279.375ms. + [requires: 0x0000 <= this <= 0x07FF] + +# 7.3.31 Read Num Broadcast Retransmissions command +# HCI_Read_Num_Broadcast_Retransmissions +# TODO: b/265052417 - Definition needs to be added + + +# 7.3.32 Write Num Broadcast Retransmissions command +# HCI_Write_Num_Broadcast_Retransmissions +# TODO: b/265052417 - Definition needs to be added + + +# 7.3.33 Read Hold Mode Activity command +# HCI_Read_Hold_Mode_Activity +# TODO: b/265052417 - Definition needs to be added + + +# 7.3.34 Write Hold Mode Activity command +# HCI_Write_Hold_Mode_Activity +# TODO: b/265052417 - Definition needs to be added + + +# 7.3.35 Read Transmit Power Level command +# HCI_Read_Transmit_Power_Level +# TODO: b/265052417 - Definition needs to be added + + +# 7.3.36 Read Synchronous Flow Control Enable command +# HCI_Read_Synchronous_Flow_Control_Enable +# TODO: b/265052417 - Definition needs to be added + + +struct WriteSynchronousFlowControlEnableCommand: + -- 7.3.37 Write Synchonous Flow Control Enable command (BR/EDR) + -- HCI_Write_Synchronous_Flow_Control_Enable + let hdr_size = hci.CommandHeader.$size_in_bytes + 0 [+hdr_size] hci.CommandHeader header + $next [+1] hci.GenericEnableParam synchronous_flow_control_enable + -- If enabled, HCI_Number_Of_Completed_Packets events shall be sent from the controller + -- for synchronous connection handles. + +# 7.3.38 Set Controller To Host Flow Control command +# HCI_Set_Controller_To_Host_Flow_Control +# TODO: b/265052417 - Definition needs to be added + + +# 7.3.39 Host Buffer Size command +# HCI_Host_Buffer_Size +# TODO: b/265052417 - Definition needs to be added + + +# 7.3.40 Host Number Of Completed Packets command +# HCI_Host_Number_Of_Completed_Packets +# TODO: b/265052417 - Definition needs to be added + + +# 7.3.41 Read Link Supervision Timeout command +# HCI_Read_Link_Supervision_Timeout +# TODO: b/265052417 - Definition needs to be added + + +# 7.3.42 Write Link Supervision Timeout command +# HCI_Write_Link_Supervision_Timeout +# TODO: b/265052417 - Definition needs to be added + + +# 7.3.43 Read Number Of Supported IAC command +# HCI_Read_Number_Of_Supported_IAC +# TODO: b/265052417 - Definition needs to be added + + +# 7.3.44 Read Current IAC LAP command +# HCI_Read_Current_IAC_LAP +# TODO: b/265052417 - Definition needs to be added + + +# 7.3.45 Write Current IAC LAP command +# HCI_Write_Current_IAC_LAP +# TODO: b/265052417 - Definition needs to be added + + +# 7.3.46 Set AFH Host Channel Classification command +# HCI_Set_AFH_Host_Channel_Classification +# TODO: b/265052417 - Definition needs to be added + + +# 7.3.47 Read Inquiry Scan Type command +# HCI_Read_Inquiry_Scan_Type +# TODO: b/265052417 - Definition needs to be added + + +struct WriteInquiryScanTypeCommand: + -- 7.3.48 Write Inquiry Scan Type (v1.2) (BR/EDR) + -- HCI_Write_Inquiry_Scan_Type + let hdr_size = hci.CommandHeader.$size_in_bytes + 0 [+hdr_size] hci.CommandHeader header + $next [+1] InquiryScanType inquiry_scan_type + -- See enum class InquiryScanType in this file for possible values + + +struct ReadInquiryModeCommand: + -- 7.3.49 Read Inquiry Mode (v1.2) (BR/EDR) + -- HCI_Read_Inquiry_Mode + let hdr_size = hci.CommandHeader.$size_in_bytes + 0 [+hdr_size] hci.CommandHeader header + + +struct WriteInquiryModeCommand: + -- 7.3.50 Write Inquiry Mode (v1.2) (BR/EDR) + -- HCI_Write_Inquiry_Mode + let hdr_size = hci.CommandHeader.$size_in_bytes + 0 [+hdr_size] hci.CommandHeader header + $next [+1] InquiryMode inquiry_mode + + +struct ReadPageScanTypeCommand: + -- 7.3.51 Read Page Scan Type (v1.2) (BR/EDR) + -- HCI_Read_Page_Scan_Type + let hdr_size = hci.CommandHeader.$size_in_bytes + 0 [+hdr_size] hci.CommandHeader header + + +struct WritePageScanTypeCommand: + -- 7.3.52 Write Page Scan Type (v1.2) (BR/EDR) + -- HCI_Write_Page_Scan_Type + let hdr_size = hci.CommandHeader.$size_in_bytes + 0 [+hdr_size] hci.CommandHeader header + $next [+1] PageScanType page_scan_type + +# 7.3.53 Read AFH Channel Assessment Mode command +# HCI_Read_AFH_Channel_Assessment_Mode +# TODO: b/265052417 - Definition needs to be added + + +# 7.3.54 Write AFH Channel Assessment Mode command +# HCI_Write_AFH_Channel_Assessment_Mode +# TODO: b/265052417 - Definition needs to be added + + +# 7.3.55 Read Extended Inquiry Response command +# HCI_Read_Extended_Inquiry_Response +# TODO: b/265052417 - Definition needs to be added + + +struct WriteExtendedInquiryResponseCommand: + -- 7.3.56 Write Extended Inquiry Response (v1.2) (BR/EDR) + -- HCI_Write_Extended_Inquiry_Response + let hdr_size = hci.CommandHeader.$size_in_bytes + 0 [+hdr_size] hci.CommandHeader header + $next [+1] UInt fec_required + -- If FEC Encoding is required. (v1.2) (7.3.56) + + let eir_size = ExtendedInquiryResponse.$size_in_bytes + $next [+eir_size] ExtendedInquiryResponse extended_inquiry_response + -- Extended inquiry response data as defined in Vol 3, Part C, Sec 8 + +# 7.3.57 Refresh Encryption Key command +# HCI_Refresh_Encryption_Key +# TODO: b/265052417 - Definition needs to be added + + +struct ReadSimplePairingModeCommand: + -- 7.3.58 Read Simple Pairing Mode (v2.1 + EDR) (BR/EDR) + -- HCI_Read_Simple_Pairing_Mode + let hdr_size = hci.CommandHeader.$size_in_bytes + 0 [+hdr_size] hci.CommandHeader header + + +struct WriteSimplePairingModeCommand: + -- 7.3.59 Write Simple Pairing Mode (v2.1 + EDR) (BR/EDR) + -- HCI_Write_Simple_Pairing_Mode + let hdr_size = hci.CommandHeader.$size_in_bytes + 0 [+hdr_size] hci.CommandHeader header + $next [+1] hci.GenericEnableParam simple_pairing_mode + +# 7.3.60 Read Local OOB Data command +# HCI_Read_Local_OOB_Data +# TODO: b/265052417 - Definition needs to be added + + +# 7.3.61 Read Inquiry Response Transmit Power Level command +# HCI_Read_Inquiry_Response_Transmit_Power_Level +# TODO: b/265052417 - Definition needs to be added + + +# 7.3.62 Write Inquiry Transmit Power Level command +# HCI_Write_Inquiry_Transmit_Power_Level +# TODO: b/265052417 - Definition needs to be added + + +# 7.3.63 Send Keypress Notification command +# HCI_Send_Keypress_Notification +# TODO: b/265052417 - Definition needs to be added + + +# 7.3.64 Read Default Erroneous Data Reporting command +# HCI_Read_Default_Erroneous_Data_Reporting +# TODO: b/265052417 - Definition needs to be added + + +# 7.3.65 Write Default Erroneous Data Reporting command +# HCI_Write_Default_Erroneous_Data_Reporting +# TODO: b/265052417 - Definition needs to be added + + +# 7.3.66 Enhanced Flush command +# HCI_Enhanced_Flush +# TODO: b/265052417 - Definition needs to be added + + +struct SetEventMaskPage2Command: + -- 7.3.69 Set Event Mask Page 2 command (v3.0 + HS) + -- HCI_Set_Event_Mask_Page_2 + 0 [+hci.CommandHeader.$size_in_bytes] hci.CommandHeader header + $next [+8] bits: + 0 [+26] EventMaskPage2 event_mask_page_2 + -- Bit mask used to control which HCI events are generated by the HCI for the Host. + + +struct ReadFlowControlModeCommand: + -- 7.3.72 Read Flow Control Mode command (v3.0 + HS) (BR/EDR) + -- HCI_Read_Flow_Control_Mode + 0 [+hci.CommandHeader.$size_in_bytes] hci.CommandHeader header + + +struct WriteFlowControlModeCommand: + -- 7.3.73 Write Flow Control Mode command (v3.0 + HS) (BR/EDR) + -- HCI_Write_Flow_Control_Mode + 0 [+hci.CommandHeader.$size_in_bytes] hci.CommandHeader header + $next [+1] FlowControlMode flow_control_mode + +# 7.3.74 Read Enhanced Transmit Power Level command +# HCI_Read_Enhanced_Transmit_Power_Level +# TODO: b/265052417 - Definition needs to be added + + +struct ReadLEHostSupportCommand: + -- 7.3.78 Read LE Host Support command (v4.0) (BR/EDR) + -- HCI_Read_LE_Host_Support + 0 [+hci.CommandHeader.$size_in_bytes] hci.CommandHeader header + + +struct WriteLEHostSupportCommand: + -- 7.3.79 Write LE Host Support command (v4.0) (BR/EDR) + -- HCI_Write_LE_Host_Support + let hdr_size = hci.CommandHeader.$size_in_bytes + 0 [+hdr_size] hci.CommandHeader header + $next [+1] hci.GenericEnableParam le_supported_host + -- Sets the LE Supported (Host) Link Manager Protocol feature bit. + + $next [+1] UInt unused + -- Core Spec v5.0, Vol 2, Part E, Section 6.35: This parameter was named + -- "Simultaneous_LE_Host" and the value is set to "disabled(0x00)" and + -- "shall be ignored". + -- Core Spec v5.3, Vol 4, Part E, Section 7.3.79: This parameter was renamed + -- to "Unused" and "shall be ignored by the controller". + +# 7.3.80 Set MWS Channel Parameters command +# HCI_Set_MWS_Channel_Parameters +# TODO: b/265052417 - Definition needs to be added + + +# 7.3.81 Set External Frame Configuration command +# HCI_Set_External_Frame_Configuration +# TODO: b/265052417 - Definition needs to be added + + +# 7.3.82 Set MWS Signaling command +# HCI_Set_MWS_Signaling +# TODO: b/265052417 - Definition needs to be added + + +# 7.3.83 Set MWS Transport Layer command +# HCI_Set_MWS_Transport_Layer +# TODO: b/265052417 - Definition needs to be added + + +# 7.3.84 Set MWS Scan Frequency Table command +# HCI_Set_MWS_Scan_Frequency_Table +# TODO: b/265052417 - Definition needs to be added + + +# 7.3.85 Set MWS_PATTERN Configuration command +# HCI_Set_MWS_PATTERN_Configuration +# TODO: b/265052417 - Definition needs to be added + + +# 7.3.86 Set Reserved LT_ADDR command +# HCI_Set_Reserved_LT_ADDR +# TODO: b/265052417 - Definition needs to be added + + +# 7.3.87 Delete Reserved LT_ADDR command +# HCI_Delete_Reserved_LT_ADDR +# TODO: b/265052417 - Definition needs to be added + + +# 7.3.88 Set Connectionless Peripheral Broadcast Data command +# HCI_Set_Connectionless_Peripheral_Broadcast_Data +# TODO: b/265052417 - Definition needs to be added + + +# 7.3.89 Read Synchronization Train Parameters command +# HCI_Read_Synchronization_Train_Parameters +# TODO: b/265052417 - Definition needs to be added + + +# 7.3.90 Write Synchronization Train Parameters command +# HCI_Write_Synchronization_Train_Parameters +# TODO: b/265052417 - Definition needs to be added + + +# 7.3.91 Read Secure Connections Host Support command +# HCI_Read_Secure_Connections_Host_Support +# TODO: b/265052417 - Definition needs to be added + + +struct WriteSecureConnectionsHostSupportCommand: + -- 7.3.92 Write Secure Connections Host Support command + -- HCI_Write_Secure_Connections_Host_Support + let hdr_size = hci.CommandHeader.$size_in_bytes + 0 [+hdr_size] hci.CommandHeader header + $next [+1] hci.GenericEnableParam secure_connections_host_support + + +struct ReadAuthenticatedPayloadTimeoutCommand: + -- 7.3.93 Read Authenticated Payload Timeout command (v4.1) (BR/EDR & LE) + -- HCI_Read_Authenticated_Payload_Timeout + 0 [+hci.CommandHeader.$size_in_bytes] hci.CommandHeader header + $next [+2] UInt connection_handle + [requires: 0x0000 <= this <= 0x0EFF] + + +struct WriteAuthenticatedPayloadTimeoutCommand: + -- 7.3.94 Write Authenticated Payload Timeout command (v4.1) (BR/EDR & LE) + -- HCI_Write_Authenticated_Payload_Timeout + 0 [+hci.CommandHeader.$size_in_bytes] hci.CommandHeader header + $next [+2] UInt connection_handle + [requires: 0x0000 <= this <= 0x0EFF] + + $next [+2] UInt authenticated_payload_timeout + -- Default = 0x0BB8 (30 s) + -- Time = N * 10 ms + -- Time Range: 10 ms to 655,350 ms + [requires: 0x0001 <= this <= 0xFFFF] + +# 7.3.95 Read Local OOB Extended Data command +# HCI_Read_Local_OOB_Extended_Data +# TODO: b/265052417 - Definition needs to be added + + +# 7.3.96 Read Extended Page Timeout command +# HCI_Read_Extended_Page_Timeout +# TODO: b/265052417 - Definition needs to be added + + +# 7.3.97 Write Extended Page Timeout command +# HCI_Write_Extended_Page_Timeout +# TODO: b/265052417 - Definition needs to be added + + +# 7.3.98 Read Extended Inquiry Length command +# HCI_Read_Extended_Inquiry_Length +# TODO: b/265052417 - Definition needs to be added + + +# 7.3.99 Write Extended Inquiry Length command +# HCI_Write_Extended_Inquiry_Length +# TODO: b/265052417 - Definition needs to be added + + +# 7.3.100 Set Ecosystem Base Interval command +# HCI_Set_Ecosystem_Base_Interval +# TODO: b/265052417 - Definition needs to be added + + +# 7.3.101 Configure Data Path command +# HCI_Configure_Data_Path +# TODO: b/265052417 - Definition needs to be added + + +# 7.3.102 Set Min Encryption Key Size command +# HCI_Set_Min_Encryption_Key_size +# TODO: b/265052417 - Definition needs to be added + + +# ========== 7.4 Informational Parameters ========== + + +struct ReadLocalVersionInformationCommand: + -- 7.4.1 Read Local Version Information command (v1.1) + -- HCI_Read_Local_Version_Information + let hdr_size = hci.CommandHeader.$size_in_bytes + 0 [+hdr_size] hci.CommandHeader header + + +struct ReadLocalSupportedCommandsCommand: + -- 7.4.2 Read Local Supported Commands command (v1.2) + -- HCI_Read_Local_Supported_Commands + let hdr_size = hci.CommandHeader.$size_in_bytes + 0 [+hdr_size] hci.CommandHeader header + + +struct ReadLocalSupportedFeaturesCommand: + -- 7.4.3 Read Local Supported Features command (v1.1) + -- HCI_Read_Local_Supported_Features + let hdr_size = hci.CommandHeader.$size_in_bytes + 0 [+hdr_size] hci.CommandHeader header + + +struct ReadLocalExtendedFeaturesCommand: + -- 7.4.4 Read Local Extended Features command (v1.2) (BR/EDR) + -- HCI_Read_Local_Extended_Features + let hdr_size = hci.CommandHeader.$size_in_bytes + 0 [+hdr_size] hci.CommandHeader header + $next [+1] UInt page_number + -- 0x00: Requests the normal LMP features as returned by + -- Read_Local_Supported_Features. + -- 0x01-0xFF: Return the corresponding page of features. + + +struct ReadBufferSizeCommand: + -- 7.4.5 Read Buffer Size command (v1.1) + -- HCI_Read_Buffer_Size + let hdr_size = hci.CommandHeader.$size_in_bytes + 0 [+hdr_size] hci.CommandHeader header + + +struct ReadBdAddrCommand: + -- 7.4.6 Read BD_ADDR command (v1.1) (BR/EDR, LE) + -- HCI_Read_BD_ADDR + let hdr_size = hci.CommandHeader.$size_in_bytes + 0 [+hdr_size] hci.CommandHeader header + +# 7.4.7 Read Data Block Size command +# HCI_Read_Data_Block_Size +# TODO: b/265052417 - Definition needs to be added + + +# 7.4.8 Read Local Supported Codecs command +# HCI_Read_Local_Supported_Codecs [v1][v2] +# TODO: b/265052417 - Definition needs to be added + + +# 7.4.9 Read Local Simple Pairing Options command +# HCI_Read_Local_Simple_Pairing_Options +# TODO: b/265052417 - Definition needs to be added + + +# 7.4.10 Read Local Supported Codec Capabilities command +# HCI_Read_Local_Supported_Codec_Capabilities +# TODO: b/265052417 - Definition needs to be added + + +# 7.4.11 Read Local Supported Controller Delay command +# HCI_Read_Local_Supported_Controller_Delay +# TODO: b/265052417 - Definition needs to be added + + +# ========== 7.5 Status Parameters ========== + + +struct ReadEncryptionKeySizeCommand: + -- 7.5.6 Read Encryption Key Size (v1.1) (BR/EDR) + -- HCI_Read_Encryption_Key_Size + let hdr_size = hci.CommandHeader.$size_in_bytes + 0 [+hdr_size] hci.CommandHeader header + $next [+2] UInt connection_handle + -- Identifies an active ACL link (only the lower 12 bits are meaningful). + [requires: 0x0000 <= this <= 0x0EFF] + +# ========== 7.8 LE Controller Commands ========== + + +struct LESetEventMaskCommand: + -- 7.8.1 LE Set Event Mask command (v4.0) (LE) + -- HCI_LE_Set_Event_Mask + let hdr_size = hci.CommandHeader.$size_in_bytes + 0 [+hdr_size] hci.CommandHeader header + $next [+8] bits: + 0 [+35] LEEventMask le_event_mask + -- Bitmask that indicates which LE events are generated by the HCI for the Host. + + +struct LEReadBufferSizeCommandV1: + -- 7.8.2 LE Read Buffer Size command [v1] (v4.0) (LE) + -- HCI_LE_Read_Buffer_Size [v1] + let hdr_size = hci.CommandHeader.$size_in_bytes + 0 [+hdr_size] hci.CommandHeader header + + +struct LEReadBufferSizeCommandV2: + -- 7.8.2 LE Read Buffer Size command [v2] (v5.2) (LE) + -- HCI_LE_Read_Buffer_Size [v2] + -- Version 2 of this command changed the opcode and added ISO return + -- parameters. + let hdr_size = hci.CommandHeader.$size_in_bytes + 0 [+hdr_size] hci.CommandHeader header + + +struct LEReadLocalSupportedFeaturesCommand: + -- 7.8.3 LE Read Local Supported Features command (v4.0) (LE) + -- HCI_LE_Read_Local_Supported_Features + let hdr_size = hci.CommandHeader.$size_in_bytes + 0 [+hdr_size] hci.CommandHeader header + + +struct LESetRandomAddressCommand: + -- 7.8.4 LE Set Random Address command (v4.0) (LE) + -- HCI_LE_Set_Random_Address + let hdr_size = hci.CommandHeader.$size_in_bytes + 0 [+hdr_size] hci.CommandHeader header + $next [+hci.BdAddr.$size_in_bytes] hci.BdAddr random_address + + +struct LESetAdvertisingParametersCommand: + -- 7.8.5 LE Set Advertising Parameters command (v4.0) (LE) + -- HCI_LE_Set_Advertising_Parameters + + [requires: advertising_interval_min <= advertising_interval_max] + + let hdr_size = hci.CommandHeader.$size_in_bytes + + 0 [+hdr_size] hci.CommandHeader header + + $next [+2] UInt advertising_interval_min + -- Default: 0x0800 (1.28 s) + -- Time: N * 0.625 ms + -- Time Range: 20 ms to 10.24 s + [requires: 0x0020 <= this <= 0x4000] + + $next [+2] UInt advertising_interval_max + -- Default: 0x0800 (1.28 s) + -- Time: N * 0.625 ms + -- Time Range: 20 ms to 10.24 s + [requires: 0x0020 <= this <= 0x4000] + + $next [+1] LEAdvertisingType adv_type + -- Used to determine the packet type that is used for advertising when + -- advertising is enabled. + + $next [+1] LEOwnAddressType own_address_type + + $next [+1] hci.LEPeerAddressType peer_address_type + -- ANONYMOUS address type not allowed. + + $next [+hci.BdAddr.$size_in_bytes] hci.BdAddr peer_address + -- Public Device Address, Random Device Address, Public Identity Address, or + -- Random (static) Identity Address of the device to be connected. + + $next [+1] bits: + + 0 [+3] LEAdvertisingChannels advertising_channel_map + -- Indicates the advertising channels that shall be used when transmitting + -- advertising packets. At least 1 channel must be enabled. + -- Default: all channels enabled + + $next [+1] LEAdvertisingFilterPolicy advertising_filter_policy + -- This parameter shall be ignored when directed advertising is enabled. + + +struct LEReadAdvertisingChannelTxPowerCommand: + -- 7.8.6 LE Read Advertising Channel Tx Power command (v4.0) (LE) + -- HCI_LE_Read_Advertising_Channel_Tx_Power + let hdr_size = hci.CommandHeader.$size_in_bytes + 0 [+hdr_size] hci.CommandHeader header + + +struct LESetAdvertisingDataCommand: + -- 7.8.7 LE Set Advertising Data command (v4.0) (LE) + -- HCI_LE_Set_Advertising_Data + let hdr_size = hci.CommandHeader.$size_in_bytes + 0 [+hdr_size] hci.CommandHeader header + $next [+1] UInt advertising_data_length + -- The number of significant octets in `advertising_data`. + [requires: 0x00 <= this <= 0x1F] + + $next [+31] UInt:8[31] advertising_data + -- 31 octets of advertising data formatted as defined in Core Spec + -- v5.3, Vol 3, Part C, Section 11. + -- Default: All octets zero + + +struct LESetScanResponseDataCommand: + -- 7.8.8 LE Set Scan Response Data command (v4.0) (LE) + -- HCI_LE_Set_Scan_Response_Data + let hdr_size = hci.CommandHeader.$size_in_bytes + 0 [+hdr_size] hci.CommandHeader header + $next [+1] UInt scan_response_data_length + -- The number of significant octets in `scan_response_data`. + [requires: 0x00 <= this <= 0x1F] + + $next [+31] UInt:8[31] scan_response_data + -- 31 octets of scan response data formatted as defined in Core Spec + -- v5.3, Vol 3, Part C, Section 11. + -- Default: All octets zero + + +struct LESetAdvertisingEnableCommand: + -- 7.8.9 LE Set Advertising Enable command (v4.0) (LE) + -- HCI_LE_Set_Advertising_Enable + let hdr_size = hci.CommandHeader.$size_in_bytes + 0 [+hdr_size] hci.CommandHeader header + $next [+1] hci.GenericEnableParam advertising_enable + + +struct LESetScanParametersCommand: + -- 7.8.10 LE Set Scan Parameters command (v4.0) (LE) + -- HCI_LE_Set_Scan_Parameters + + [requires: le_scan_window <= le_scan_interval] + + let hdr_size = hci.CommandHeader.$size_in_bytes + + 0 [+hdr_size] hci.CommandHeader header + + $next [+1] LEScanType le_scan_type + -- Controls the type of scan to perform. + + $next [+2] UInt le_scan_interval + -- Default: 0x0010 (10ms) + -- Time: N * 0.625 ms + -- Time Range: 2.5 ms to 10.24 s + [requires: 0x0004 <= this <= 0x4000] + + $next [+2] UInt le_scan_window + -- Default: 0x0010 (10ms) + -- Time: N * 0.625 ms + -- Time Range: 2.5ms to 10.24 s + [requires: 0x0004 <= this <= 0x4000] + + $next [+1] LEOwnAddressType own_address_type + -- The type of address being used in the scan request packets. + + $next [+1] LEScanFilterPolicy scanning_filter_policy + + +struct LESetScanEnableCommand: + -- 7.8.11 LE Set Scan Enable command (v4.0) (LE) + -- HCI_LE_Set_Scan_Enable + let hdr_size = hci.CommandHeader.$size_in_bytes + 0 [+hdr_size] hci.CommandHeader header + $next [+1] hci.GenericEnableParam le_scan_enable + $next [+1] hci.GenericEnableParam filter_duplicates + -- Controls whether the Link Layer should filter out duplicate advertising + -- reports to the Host, or if the Link Layer should generate advertising + -- reports for each packet received. Ignored if le_scan_enable is set to + -- disabled. + -- See Core Spec v5.3, Vol 6, Part B, Section 4.4.3.5 + + +struct LECreateConnectionCommand: + -- 7.8.12 LE Create Connection command (v4.0) (LE) + -- HCI_LE_Create_Connection + + [requires: le_scan_window <= le_scan_interval && connection_interval_min <= connection_interval_max] + + let hdr_size = hci.CommandHeader.$size_in_bytes + + 0 [+hdr_size] hci.CommandHeader header + + $next [+2] UInt le_scan_interval + -- The time interval from when the Controller started the last LE scan until + -- it begins the subsequent LE scan. + -- Time: N * 0.625 ms + -- Time Range: 2.5 ms to 10.24 s + [requires: 0x0004 <= this <= 0x4000] + + $next [+2] UInt le_scan_window + -- Amount of time for the duration of the LE scan. + -- Time: N * 0.625 ms + -- Time Range: 2.5 ms to 10.24 s + [requires: 0x0004 <= this <= 0x4000] + + $next [+1] hci.GenericEnableParam initiator_filter_policy + + $next [+1] hci.LEAddressType peer_address_type + + $next [+hci.BdAddr.$size_in_bytes] hci.BdAddr peer_address + + $next [+1] LEOwnAddressType own_address_type + + $next [+2] UInt connection_interval_min + -- Time: N * 1.25 ms + -- Time Range: 7.5 ms to 4 s. + [requires: 0x0006 <= this <= 0x0C80] + + $next [+2] UInt connection_interval_max + -- Time: N * 1.25 ms + -- Time Range: 7.5 ms to 4 s. + [requires: 0x0006 <= this <= 0x0C80] + + $next [+2] UInt max_latency + -- Maximum Peripheral latency for the connection in number of connection + -- events. + [requires: 0x0000 <= this <= 0x01F3] + + $next [+2] UInt supervision_timeout + -- See Core Spec v5.3, Vol 6, Part B, Section 4.5.2. + -- Time: N * 10 ms + -- Time Range: 100 ms to 32 s + [requires: 0x000A <= this <= 0x0C80] + + $next [+2] UInt min_connection_event_length + -- Time: N * 0.625 ms + + $next [+2] UInt max_connection_event_length + -- Time: N * 0.625 ms + + +struct LECreateConnectionCancelCommand: + -- 7.8.13 LE Create Connection Cancel command (v4.0) (LE) + -- HCI_LE_Create_Connection_Cancel + let hdr_size = hci.CommandHeader.$size_in_bytes + 0 [+hdr_size] hci.CommandHeader header + +# 7.8.14 LE Read Filter Accept List Size command +# HCI_LE_Read_Filter_Accept_List_Size +# TODO: b/265052417 - Definition needs to be added + + +struct LEClearFilterAcceptListCommand: + -- 7.8.15 LE Clear Filter Accept List command (v4.0) (LE) + -- HCI_LE_Clear_Filter_Accept_List + let hdr_size = hci.CommandHeader.$size_in_bytes + 0 [+hdr_size] hci.CommandHeader header + + +struct LEAddDeviceToFilterAcceptListCommand: + -- 7.8.16 LE Add Device To Filter Accept List command (v4.0) (LE) + -- HCI_LE_Add_Device_To_Filter_Accept_List + let hdr_size = hci.CommandHeader.$size_in_bytes + 0 [+hdr_size] hci.CommandHeader header + $next [+1] hci.LEPeerAddressType address_type + -- The address type of the peer. + + $next [+hci.BdAddr.$size_in_bytes] hci.BdAddr address + -- Public Device Address or Random Device Address of the device to be added + -- to the Filter Accept List. Ignored if `address_type` is ANONYMOUS. + + +struct LERemoveDeviceFromFilterAcceptListCommand: + -- 7.8.17 LE Remove Device From Filter Accept List command (v4.0) (LE) + -- HCI_LE_Remove_Device_From_Filter_Accept_List + let hdr_size = hci.CommandHeader.$size_in_bytes + 0 [+hdr_size] hci.CommandHeader header + $next [+1] hci.LEPeerAddressType address_type + -- The address type of the peer. + + $next [+hci.BdAddr.$size_in_bytes] hci.BdAddr address + -- Public Device Address or Random Device Address of the device to be added + -- to the Filter Accept List. Ignored if `address_type` is ANONYMOUS. + + +struct LEConnectionUpdateCommand: + -- 7.8.18 LE Connection Update command (v4.0) (LE) + -- HCI_LE_Connection_Update + + [requires: connection_interval_min <= connection_interval_max && min_connection_event_length <= max_connection_event_length] + + let hdr_size = hci.CommandHeader.$size_in_bytes + + 0 [+hdr_size] hci.CommandHeader header + + $next [+2] UInt connection_handle + [requires: 0x0000 <= this <= 0x0EFF] + + $next [+2] UInt connection_interval_min + -- Time: N * 1.25 ms + -- Time Range: 7.5 ms to 4 s. + [requires: 0x0006 <= this <= 0x0C80] + + $next [+2] UInt connection_interval_max + -- Time: N * 1.25 ms + -- Time Range: 7.5 ms to 4 s. + [requires: 0x0006 <= this <= 0x0C80] + + $next [+2] UInt max_latency + -- Maximum Peripheral latency for the connection in number of subrated + -- connection events. + [requires: 0x0000 <= this <= 0x01F3] + + $next [+2] UInt supervision_timeout + -- See Core Spec v5.3, Vol 6, Part B, Section 4.5.2. + -- Time: N * 10 ms + -- Time Range: 100 ms to 32 s + [requires: 0x000A <= this <= 0x0C80] + + $next [+2] UInt min_connection_event_length + -- Time: N * 0.625 ms + + $next [+2] UInt max_connection_event_length + -- Time: N * 0.625 ms + +# 7.8.19 LE Set Host Channel Classification command +# HCI_LE_Set_Host_Channel_Classification +# TODO: b/265052417 - Definition needs to be added + + +# 7.8.20 LE Read Channel Map command +# HCI_LE_Read_Channel_Map +# TODO: b/265052417 - Definition needs to be added + + +struct LEReadRemoteFeaturesCommand: + -- 7.8.21 LE Read Remote Features command (v4.0) (LE) + -- HCI_LE_Read_Remote_Features + let hdr_size = hci.CommandHeader.$size_in_bytes + 0 [+hdr_size] hci.CommandHeader header + $next [+2] UInt connection_handle + [requires: 0x0000 <= this <= 0x0EFF] + +# 7.8.22 LE Encrypt command +# HCI_LE_Encrypt +# TODO: b/265052417 - Definition needs to be added + + +# 7.8.23 LE Rand command +# HCI_LE_Rand +# TODO: b/265052417 - Definition needs to be added + + +struct LEEnableEncryptionCommand: + -- 7.8.24 LE Enable Encryption command (v4.0) (LE) + -- HCI_LE_Enable_Encryption + let hdr_size = hci.CommandHeader.$size_in_bytes + 0 [+hdr_size] hci.CommandHeader header + $next [+2] UInt connection_handle + [requires: 0x0000 <= this <= 0x0EFF] + + $next [+8] UInt random_number + $next [+2] UInt encrypted_diversifier + $next [+hci.LinkKey.$size_in_bytes] hci.LinkKey long_term_key + + +struct LELongTermKeyRequestReplyCommand: + -- 7.8.25 LE Long Term Key Request Reply command (v4.0) (LE) + -- HCI_LE_Long_Term_Key_Request_Reply + let hdr_size = hci.CommandHeader.$size_in_bytes + 0 [+hdr_size] hci.CommandHeader header + $next [+2] UInt connection_handle + [requires: 0x0000 <= this <= 0x0EFF] + + $next [+hci.LinkKey.$size_in_bytes] hci.LinkKey long_term_key + + +struct LELongTermKeyRequestNegativeReplyCommand: + -- 7.8.26 LE Long Term Key Request Negative Reply command (v4.0) (LE) + -- HCI_LE_Long_Term_Key_Request_Negative_Reply + let hdr_size = hci.CommandHeader.$size_in_bytes + 0 [+hdr_size] hci.CommandHeader header + $next [+2] UInt connection_handle + [requires: 0x0000 <= this <= 0x0EFF] + + +struct LEReadSupportedStatesCommand: + -- 7.8.27 LE Read Supported States command (v4.0) (LE) + -- HCI_LE_Read_Supported_States + let hdr_size = hci.CommandHeader.$size_in_bytes + 0 [+hdr_size] hci.CommandHeader header + +# 7.8.28 LE Receiver Test command +# HCI_LE_Receiver_Test [v1] [v2] [v3] +# TODO: b/265052417 - Definition needs to be added + + +# 7.8.29 LE Transmitter Test command +# HCI_LE_Transmitter_Test [v1] [v2] [v3] [v4] +# TODO: b/265052417 - Definition needs to be added + + +# 7.8.30 LE Test End command +# HCI_LE_Test_End +# TODO: b/265052417 - Definition needs to be added + + +# 7.8.31 LE Remote Connection Parameter Request Reply command +# HCI_LE_Remote_Connection_Parameter_Request_Reply +# TODO: b/265052417 - Definition needs to be added + + +# 7.8.32 LE Remote Connection Parameter Request Negative Reply command +# HCI_LE_Remote_Connection_Parameter_Request_Negative_Reply +# TODO: b/265052417 - Definition needs to be added + + +# 7.8.33 LE Set Data Length command +# HCI_LE_Set_Data_Length +# TODO: b/265052417 - Definition needs to be added + + +# 7.8.34 LE Read Suggested Default Data Length command +# HCI_LE_Read_Suggested_Default_Data_Length +# TODO: b/265052417 - Definition needs to be added + + +# 7.8.35 LE Write Suggested Default Data Length command +# HCI_LE_Write_Suggested_Default_Data_Length +# TODO: b/265052417 - Definition needs to be added + + +# 7.8.36 LE Read Local P-256 Public Key command +# HCI_LE_Read_Local_P-256_Public_Key +# TODO: b/265052417 - Definition needs to be added + + +# 7.8.37 LE Generate DHKey command +# HCI_LE_Generate_DHKey [v1] [v2] +# TODO: b/265052417 - Definition needs to be added + + +# 7.8.38 LE Add Device To Resolving List command +# HCI_LE_Add_Device_To_Resolving_List +# TODO: b/265052417 - Definition needs to be added + + +# 7.8.39 LE Remove Device From Resolving List command +# HCI_LE_Remove_Device_From_Resolving_List +# TODO: b/265052417 - Definition needs to be added + + +struct LEClearResolvingListCommand: + -- 7.8.40 LE Clear Resolving List command (v4.2) (LE) + -- HCI_LE_Clear_Resolving_List + let hdr_size = hci.CommandHeader.$size_in_bytes + 0 [+hdr_size] hci.CommandHeader header + +# 7.8.41 LE Read Resolving List Size command +# HCI_LE_Read_Resolving_List_Size +# TODO: b/265052417 - Definition needs to be added + + +# 7.8.42 LE Read Peer Resolvable Address command +# HCI_LE_Read_Peer_Resolvable_Address +# TODO: b/265052417 - Definition needs to be added + + +# 7.8.43 LE Read Local Resolvable Address command +# HCI_LE_Read_Local_Resolvable_Address +# TODO: b/265052417 - Definition needs to be added + + +struct LESetAddressResolutionEnableCommand: + -- 7.8.44 LE Set Address Resolution Enable command (v4.2) (LE) + -- HCI_LE_Set_Address_Resolution_Enable + let hdr_size = hci.CommandHeader.$size_in_bytes + 0 [+hdr_size] hci.CommandHeader header + $next [+1] hci.GenericEnableParam address_resolution_enable + +# 7.8.45 LE Set Resolvable Private Address Timeout command +# HCI_LE_Set_Resolvable_Private_Address_Timeout +# TODO: b/265052417 - Definition needs to be added + + +# 7.8.46 LE Read Maximum Data Length command +# HCI_LE_Read_Maximum_Data_Length +# TODO: b/265052417 - Definition needs to be added + + +# 7.8.47 LE Read PHY command +# HCI_LE_Read_PHY +# TODO: b/265052417 - Definition needs to be added + + +# 7.8.48 LE Set Default PHY command +# HCI_LE_Set_Default_PHY +# TODO: b/265052417 - Definition needs to be added + + +# 7.8.49 LE Set PHY command +# HCI_LE_Set_PHY +# TODO: b/265052417 - Definition needs to be added + + +struct LESetAdvertisingSetRandomAddressCommand: + -- 7.8.52 LE Set Advertising Set Random Address command (v5.0) (LE) + -- HCI_LE_Set_Advertising_Set_Random_Address + let hdr_size = hci.CommandHeader.$size_in_bytes + 0 [+hdr_size] hci.CommandHeader header + $next [+1] UInt advertising_handle + -- Handle used to identify an advertising set. + + $next [+hci.BdAddr.$size_in_bytes] hci.BdAddr random_address + -- The random address to use in the advertising PDUs. + + +struct LESetExtendedAdvertisingParametersV1Command: + -- 7.8.53 LE Set Extended Advertising Parameters [v1] command (v5.0) (LE) + -- HCI_LE_Set_Extended_Advertising_Parameters [v1] + + let hdr_size = hci.CommandHeader.$size_in_bytes + + 0 [+hdr_size] hci.CommandHeader header + + $next [+1] UInt advertising_handle + -- Handle used to identify an advertising set. + + $next [+2] bits: + + 0 [+7] LEAdvertisingEventProperties advertising_event_properties + + $next [+3] UInt primary_advertising_interval_min + -- Time = N * 0.625 s + -- Time Range: 20 ms to 10,485.759375 s + [requires: 0x000020 <= this] + + $next [+3] UInt primary_advertising_interval_max + -- Time = N * 0.625 s + -- Time Range: 20 ms to 10,485.759375 s + [requires: 0x000020 <= this] + + $next [+1] bits: + + 0 [+3] LEAdvertisingChannels primary_advertising_channel_map + + $next [+1] LEOwnAddressType own_address_type + + $next [+1] hci.LEPeerAddressTypeNoAnon peer_address_type + + $next [+hci.BdAddr.$size_in_bytes] hci.BdAddr peer_address + -- Public Device Address, Random Device Address, Public Identity Address, or Random (static) + -- Identity Address of the device to be connected. + + $next [+1] LEAdvertisingFilterPolicy advertising_filter_policy + + $next [+1] Int advertising_tx_power + -- Range: -127 <= N <= +126 + -- Units: dBm + -- If N = 127: Host has no preference. + [requires: -127 <= this] + + $next [+1] hci.LEPrimaryAdvertisingPHY primary_advertising_phy + -- LEPHY::kLE2M and LEPHY::kLECodedS2 are excluded. + + $next [+1] UInt secondary_advertising_max_skip + -- Maximum advertising events the controller can skip before sending the AUX_ADV_IND packets on + -- the secondary advertising physical channel. If this value is zero, AUX_ADV_IND shall be sent + -- prior to the next advertising event. + + $next [+1] hci.LESecondaryAdvertisingPHY secondary_advertising_phy + + $next [+1] UInt advertising_sid + -- Value of the Advertising SID subfield in the ADI field of the PDU + [requires: 0x00 <= this <= 0x0F] + + $next [+1] hci.GenericEnableParam scan_request_notification_enable + +# TODO: b/265052417 - LE Set Extended Advertising Parameters [v2] definition needs to be added + + +struct LESetExtendedAdvertisingDataCommand: + -- 7.8.54 LE Set Extended Advertising Data command (v5.0) (LE) + -- HCI_LE_Set_Extended_Advertising_Data + + let hdr_size = hci.CommandHeader.$size_in_bytes + + 0 [+hdr_size] hci.CommandHeader header + + $next [+1] UInt advertising_handle + -- Handle used to identify an advertising set. + + $next [+1] LESetExtendedAdvDataOp operation + + $next [+1] LEExtendedAdvFragmentPreference fragment_preference + -- Provides a hint to the Controller as to whether advertising data should be fragmented. + + $next [+1] UInt advertising_data_length (sz) + -- Length of the advertising data included in this command packet, up to + -- kMaxLEExtendedAdvertisingDataLength bytes. If the advertising set uses legacy advertising + -- PDUs that support advertising data then this shall not exceed kMaxLEAdvertisingDataLength + -- bytes. + [requires: 0 <= this <= 251] + + $next [+sz] UInt:8[sz] advertising_data + -- Variable length advertising data. + + +struct LESetExtendedScanResponseDataCommand: + -- 7.8.55 LE Set Extended Scan Response Data command (v5.0) (LE) + -- HCI_LE_Set_Extended_Scan_Response_Data + let hdr_size = hci.CommandHeader.$size_in_bytes + 0 [+hdr_size] hci.CommandHeader header + $next [+1] UInt advertising_handle + -- Used to identify an advertising set + [requires: 0x00 <= this <= 0xEF] + + $next [+1] LESetExtendedAdvDataOp operation + $next [+1] LEExtendedAdvFragmentPreference fragment_preference + -- Provides a hint to the controller as to whether advertising data should be fragmented + + $next [+1] UInt scan_response_data_length (sz) + -- The number of octets in the scan_response_data parameter + [requires: 0 <= this <= 251] + + $next [+sz] UInt:8[sz] scan_response_data + -- Scan response data formatted as defined in Core Spec v5.4, Vol 3, Part C, Section 11 + + +struct LESetExtendedAdvertisingEnableData: + -- Data fields for variable-length portion of an LE Set Extended Advertising Enable command + 0 [+1] UInt advertising_handle + $next [+2] UInt duration + $next [+1] UInt max_extended_advertising_events + + +struct LESetExtendedAdvertisingEnableCommand: + -- 7.8.56 LE Set Extended Advertising Enable command (v5.0) (LE) + -- HCI_LE_Set_Extended_Advertising_Enable + let hdr_size = hci.CommandHeader.$size_in_bytes + 0 [+hdr_size] hci.CommandHeader header + $next [+1] hci.GenericEnableParam enable + $next [+1] UInt num_sets + let single_data_size = LESetExtendedAdvertisingEnableData.$size_in_bytes + $next [+single_data_size*num_sets] LESetExtendedAdvertisingEnableData[] data + + +struct LEReadMaxAdvertisingDataLengthCommand: + -- 7.8.57 LE Read Maximum Advertising Data Length command (v5.0) (LE) + -- HCI_LE_Read_Maximum_Advertising_Data_Length + -- This command has no parameters + let hdr_size = hci.CommandHeader.$size_in_bytes + 0 [+hdr_size] hci.CommandHeader header + + +struct LEReadNumSupportedAdvertisingSetsCommand: + -- 7.8.58 LE Read Number of Supported Advertising Sets command (v5.0) (LE) + -- HCI_LE_Read_Number_of_Supported_Advertising_Sets + -- This command has no parameters + let hdr_size = hci.CommandHeader.$size_in_bytes + 0 [+hdr_size] hci.CommandHeader header + + +struct LERemoveAdvertisingSetCommand: + -- 7.8.59 LE Remove Advertising Set command (v5.0) (LE) + -- HCI_LE_Remove_Advertising_Set + let hdr_size = hci.CommandHeader.$size_in_bytes + 0 [+hdr_size] hci.CommandHeader header + $next [+1] UInt advertising_handle + + +struct LEClearAdvertisingSetsCommand: + -- 7.8.60 LE Clear Advertising Sets command (v5.0) (LE) + -- HCI_LE_Clear_Advertising_Sets + -- This command has no parameters + let hdr_size = hci.CommandHeader.$size_in_bytes + 0 [+hdr_size] hci.CommandHeader header + +# 7.8.61 LE Set Periodic Advertising Parameters command +# HCI_LE_Set_Periodic_Advertising_Parameters [v1] [v2] +# TODO: b/265052417 - Definition needs to be added + + +# 7.8.62 LE Set Periodic Advertising Data command +# HCI_LE_Set_Periodic_Advertising_Data +# TODO: b/265052417 - Definition needs to be added + + +# 7.8.63 LE Set Periodic Advertising Enable command +# HCI_LE_Set_Periodic_Advertising_Enable +# TODO: b/265052417 - Definition needs to be added + + +struct LESetExtendedScanParametersData: + -- Data fields for variable-length portion of an LE Set Extneded Scan Parameters command + + 0 [+1] LEScanType scan_type + + $next [+2] UInt scan_interval + -- Time interval from when the Controller started its last scan until it begins the subsequent + -- scan on the primary advertising physical channel. + -- Time = N × 0.625 ms + -- Time Range: 2.5 ms to 40.959375 s + [requires: 0x0004 <= this] + + $next [+2] UInt scan_window + -- Duration of the scan on the primary advertising physical channel. + -- Time = N × 0.625 ms + -- Time Range: 2.5 ms to 40.959375 s + [requires: 0x0004 <= this] + + +struct LESetExtendedScanParametersCommand: + -- 7.8.64 LE Set Extended Scan Parameters command (v5.0) (LE) + -- HCI_LE_Set_Extended_Scan_Parameters + -- num_entries corresponds to the number of bits set in the |scanning_phys| field + let hdr_size = hci.CommandHeader.$size_in_bytes + 0 [+hdr_size] hci.CommandHeader header + $next [+1] LEOwnAddressType own_address_type + $next [+1] LEScanFilterPolicy scanning_filter_policy + $next [+1] bits: + 0 [+LEScanPHYBits.$size_in_bits] LEScanPHYBits scanning_phys + + let single_entry_size = LESetExtendedScanParametersData.$size_in_bytes + let num_entries = (scanning_phys.le_1m ? 1 : 0)+(scanning_phys.le_coded ? 1 : 0) + let total_entries_size = num_entries*single_entry_size + $next [+total_entries_size] LESetExtendedScanParametersData[num_entries] data + + +struct LESetExtendedScanEnableCommand: + -- 7.8.65 LE Set Extended Scan Enable command (v5.0) (LE) + -- HCI_LE_Set_Extended_Scan_Enable + + let hdr_size = hci.CommandHeader.$size_in_bytes + + 0 [+hdr_size] hci.CommandHeader header + + $next [+1] hci.GenericEnableParam scanning_enabled + + $next [+1] LEExtendedDuplicateFilteringOption filter_duplicates + -- See enum class LEExtendedDuplicateFilteringOption in this file for possible values + + $next [+2] UInt duration + -- Possible values: + -- 0x0000: Scan continuously until explicitly disabled + -- 0x0001-0xFFFF: Scan duration, where: + -- Time = N * 10 ms + -- Time Range: 10 ms to 655.35 s + + $next [+2] UInt period + -- Possible values: + -- 0x0000: Periodic scanning disabled (scan continuously) + -- 0x0001-0xFFFF: Time interval from when the Controller started its last + -- Scan_Duration until it begins the subsequent Scan_Duration, where: + -- Time = N * 1.28 sec + -- Time Range: 1.28 s to 83,884.8 s + + +struct LEExtendedCreateConnectionV1: + -- 7.8.66 LE Extended Create Connection command version 1 + -- HCI_LE_Extended_Create_Connection v1 + let hdr_size = hci.CommandHeader.$size_in_bytes + 0 [+hdr_size] hci.CommandHeader header + $next [+1] hci.GenericEnableParam initiator_filter_policy + $next [+1] LEOwnAddressType own_address_type + $next [+1] hci.LEPeerAddressType peer_address_type + $next [+hci.BdAddr.$size_in_bytes] hci.BdAddr peer_address + $next [+1] bits: + 0 [+LEInitiatingPHYBits.$size_in_bits] LEInitiatingPHYBits initiating_phys + + let num_entries = (initiating_phys.le_1m ? 1 : 0)+(initiating_phys.le_2m ? 1 : 0)+(initiating_phys.le_coded ? 1 : 0) + $next [+2*num_entries] UInt:16[num_entries] scan_interval + -- Time interval from when the Controller started its last scan until it begins the subsequent + -- scan on the primary advertising physical channel. + -- Time = N × 0.625 ms + -- Time Range: 2.5 ms to 40.959375 s + + $next [+2*num_entries] UInt:16[num_entries] scan_window + -- Duration of the scan on the primary advertising physical channel. + -- Time = N × 0.625 ms + -- Time Range: 2.5 ms to 40.959375 s + + $next [+2*num_entries] UInt:16[num_entries] connection_interval_min + -- Time: N * 1.25 ms + -- Time Range: 7.5 ms to 4 s. + + $next [+2*num_entries] UInt:16[num_entries] connection_interval_max + -- Time: N * 1.25 ms + -- Time Range: 7.5 ms to 4 s. + + $next [+2*num_entries] UInt:16[num_entries] max_latency + -- Maximum Peripheral latency for the connection in number of connection events. + + $next [+2*num_entries] UInt:16[num_entries] supervision_timeout + -- See Core Spec v5.3, Vol 6, Part B, Section 4.5.2. + -- Time: N * 10 ms + -- Time Range: 100 ms to 32 s + + $next [+2*num_entries] UInt:16[num_entries] min_connection_event_length + -- Time: N * 0.625 ms + + $next [+2*num_entries] UInt:16[num_entries] max_connection_event_length + -- Time: N * 0.625 ms + +# 7.8.66 LE Extended Create Connection command version 2 +# HCI_LE_Extended_Create_Connection v2 +# TODO: b/265052417 - Definition needs to be added + + +struct LEPeriodicAdvertisingCreateSyncCommand: + -- 7.8.67 LE Periodic Advertising Create Sync command (v5.0) (LE) + -- HCI_LE_Periodic_Advertising_Create_Sync + + let hdr_size = hci.CommandHeader.$size_in_bytes + + 0 [+hdr_size] hci.CommandHeader header + + $next [+1] bits: + + 0 [+LEPeriodicAdvertisingCreateSyncOptions.$size_in_bits] LEPeriodicAdvertisingCreateSyncOptions options + + $next [+1] UInt advertising_sid + -- Advertising SID subfield in the ADI field used to identify the Periodic Advertising + [requires: 0x00 <= this <= 0x0F] + + $next [+1] hci.LEPeerAddressTypeNoAnon advertiser_address_type + + $next [+hci.BdAddr.$size_in_bytes] hci.BdAddr advertiser_address + -- Public Device Address, Random Device Address, Public Identity Address, or Random (static) + -- Identity Address of the advertiser + + $next [+2] UInt skip + -- The maximum number of periodic advertising events that can be skipped after a successful + -- receive + [requires: 0x0000 <= this <= 0x01F3] + + $next [+2] UInt sync_timeout + -- Synchronization timeout for the periodic advertising. + -- Time = N * 10 ms + -- Time Range: 100 ms to 163.84 s + [requires: 0x000A <= this <= 0x4000] + + $next [+1] bits: + + 0 [+LEPeriodicAdvertisingSyncCTEType.$size_in_bits] LEPeriodicAdvertisingSyncCTEType sync_cte_type + -- Constant Tone Extension sync options + + +struct LEPeriodicAdvertisingCreateSyncCancel: + -- 7.8.68 LE Periodic Advertising Create Sync Cancel command (v5.0) (LE) + -- HCI_LE_Periodic_Advertising_Create_Sync_Cancel + -- Note that this command has no arguments + let hdr_size = hci.CommandHeader.$size_in_bytes + 0 [+hdr_size] hci.CommandHeader header + + +struct LEPeriodicAdvertisingTerminateSyncCommand: + -- 7.8.69 LE Periodic Advertising Terminate Sync command (v5.0) (LE) + -- HCI_LE_Periodic_Advertising_Terminate_Sync + let hdr_size = hci.CommandHeader.$size_in_bytes + 0 [+hdr_size] hci.CommandHeader header + $next [+2] UInt sync_handle + -- Identifies the periodic advertising train + [requires: 0x0000 <= this <= 0x0EFF] + + +struct LEAddDeviceToPeriodicAdvertiserListCommand: + -- 7.8.70 LE Add Device To Periodic Advertiser List command (v5.0) (LE) + -- HCI_LE_Add_Device_To_Periodic_Advertiser_List + let hdr_size = hci.CommandHeader.$size_in_bytes + 0 [+hdr_size] hci.CommandHeader header + $next [+1] hci.LEAddressType advertiser_address_type + -- Address type of the advertiser. The LEAddressType::kPublicIdentity and + -- LEAddressType::kRandomIdentity values are excluded for this command. + + $next [+hci.BdAddr.$size_in_bytes] hci.BdAddr advertiser_address + -- Public Device Address, Random Device Address, Public Identity Address, or + -- Random (static) Identity Address of the advertiser. + + $next [+1] UInt advertising_sid + -- Advertising SID subfield in the ADI field used to identify the Periodic + -- Advertising. + + +struct LERemoveDeviceFromPeriodicAdvertiserListCommand: + -- 7.8.71 LE Remove Device From Periodic Advertiser List command (v5.0) (LE) + -- HCI_LE_Remove_Device_From_Periodic_Advertiser_List + let hdr_size = hci.CommandHeader.$size_in_bytes + 0 [+hdr_size] hci.CommandHeader header + $next [+1] UInt advertiser_address_type + -- Address type of the advertiser. The LEAddressType::kPublicIdentity and + -- LEAddressType::kRandomIdentity values are excluded for this command. + + $next [+hci.BdAddr.$size_in_bytes] hci.BdAddr advertiser_address + -- Public Device Address, Random Device Address, Public Identity Address, or + -- Random (static) Identity Address of the advertiser. + + $next [+1] UInt advertising_sid + -- Advertising SID subfield in the ADI field used to identify the Periodic + -- Advertising. + + +struct LEClearPeriodicAdvertiserListCommand: + -- 7.8.72 LE Clear Periodic Advertiser List command (v5.0) (LE) + -- HCI_LE_Clear_Periodic_Advertiser_List + -- Note that this command has no arguments + let hdr_size = hci.CommandHeader.$size_in_bytes + 0 [+hdr_size] hci.CommandHeader header + + +struct LEReadPeriodicAdvertiserListSizeCommand: + -- 7.8.73 LE Read Periodic Advertiser List Size command (v5.0) (LE) + -- HCI_LE_Read_Periodic_Advertiser_List_Size + -- Note that this command has no arguments + let hdr_size = hci.CommandHeader.$size_in_bytes + 0 [+hdr_size] hci.CommandHeader header + + +struct LEReadTransmitPowerCommand: + -- 7.8.74 LE Read Transmit Power command (v5.0) (LE) + -- HCI_LE_Read_Transmit_Power + -- Note that this command has no arguments + let hdr_size = hci.CommandHeader.$size_in_bytes + 0 [+hdr_size] hci.CommandHeader header + + +struct LEReadRFPathCompensationCommand: + -- 7.8.75 LE Read RF Path Compensation command (v5.0) (LE) + -- HCI_LE_Read_RF_Path_Compensation + -- Note that this command has no arguments + let hdr_size = hci.CommandHeader.$size_in_bytes + 0 [+hdr_size] hci.CommandHeader header + + +struct LEWriteRFPathCompensationCommand: + -- 7.8.76 LE Write RF Path Compensation command (v5.0) (LE) + -- HCI_LE_Write_RF_Path_Compensation + -- Values provided are used in the Tx Power Level and RSSI calculation. + -- Range: -128.0 dB (0xFB00) ≤ N ≤ 128.0 dB (0x0500) + -- Units: 0.1 dB + let hdr_size = hci.CommandHeader.$size_in_bytes + 0 [+hdr_size] hci.CommandHeader header + $next [+2] Int rf_tx_path_compensation_value + [requires: -1280 <= this <= 1280] + + $next [+2] Int rf_rx_path_compensation_value + [requires: -1280 <= this <= 1280] + + +struct LESetPrivacyModeCommand: + -- 7.8.77 LE Set Privacy Mode command (v5.0) (LE) + -- HCI_LE_Set_Privacy_Mode + let hdr_size = hci.CommandHeader.$size_in_bytes + 0 [+hdr_size] hci.CommandHeader header + $next [+1] hci.LEPeerAddressTypeNoAnon peer_identity_address_type + -- The peer identity address type (either Public Identity or Private + -- Identity). + + $next [+hci.BdAddr.$size_in_bytes] hci.BdAddr peer_identity_address + -- Public Identity Address or Random (static) Identity Address of the + -- advertiser. + + $next [+1] LEPrivacyMode privacy_mode + -- The privacy mode to be used for the given entry on the resolving list. + +# 7.8.93 [No longer used] +# 7.8.94 LE Modify Sleep Clock Accuracy command +# 7.8.95 [No longer used] + + +struct LEReadISOTXSyncCommand: + -- 7.8.96 LE Read ISO TX Sync command (v5.2) (LE) + -- HCI_LE_Read_ISO_TX_Sync + let hdr_size = hci.CommandHeader.$size_in_bytes + 0 [+hdr_size] hci.CommandHeader header + $next [+2] UInt connection_handle + -- Connection handle of the CIS or BIS + [requires: 0x0000 <= this <= 0x0EFF] + + +struct LESetCIGParametersCommand: + -- 7.8.97 LE Set CIG Parameters command (v5.2) (LE) + -- HCI_LE_Set_CIG_Parameters + + let hdr_size = hci.CommandHeader.$size_in_bytes + + 0 [+hdr_size] hci.CommandHeader header + + $next [+1] UInt cig_id + -- Used to identify the CIG + [requires: 0x00 <= this <= 0xEF] + + $next [+3] UInt sdu_interval_c_to_p + -- The interval, in microseconds, of periodic SDUs (Central => Peripheral) + [requires: 0x0000FF <= this <= 0x0FFFFF] + + $next [+3] UInt sdu_interval_p_to_c + -- The interval, in microseconds, of periodic SDUs (Peripheral => Central) + [requires: 0x0000FF <= this <= 0x0FFFFF] + + $next [+1] LESleepClockAccuracyRange worst_case_sca + -- Worst-case sleep clock accuracy of all Peripherals that will participate in the CIG + + $next [+1] LECISPacking packing + -- Preferred method of arranging subevents of multiple CISes + + $next [+1] LECISFraming framing + -- Format of the CIS Data PDUs + + $next [+2] UInt max_transport_latency_c_to_p + -- Maximum transport latency, in milliseconds, from the Central's Controller to the + -- Peripheral's Controller + [requires: 0x0005 <= this <= 0x0FA0] + + $next [+2] UInt max_transport_latency_p_to_c + -- Maximum transport latency, in milliseconds, from the Peripheral's Controller to the + -- Central's Controller + [requires: 0x0005 <= this <= 0x0FA0] + + $next [+1] UInt cis_count + -- Total number of CIS configurations in the CIG being added or modified + [requires: 0x00 <= this <= 0x1F] + + let single_cis_options_size = LESetCIGParametersCISOptions.$size_in_bytes + + let total_cis_options_size = cis_count*single_cis_options_size + + $next [+total_cis_options_size] LESetCIGParametersCISOptions[cis_count] cis_options + -- Array of parameters, one for each of the CISes in this CIG + +# 7.8.98 LE Set CIG Parameters Test command + + +struct LECreateCISCommand: + -- 7.8.99 LE Create CIS command (v5.2) (LE) + -- HCI_LE_Create_CIS + struct ConnectionInfo: + -- Handles for each stream being created + + 0 [+2] UInt cis_connection_handle + -- Connection handle of a CIS + [requires: 0x0000 <= this <= 0xEFFF] + + $next [+2] UInt acl_connection_handle + -- Connection handle of an ACL connection + [requires: 0x0000 <= this <= 0xEFFF] + + let hdr_size = hci.CommandHeader.$size_in_bytes + 0 [+hdr_size] hci.CommandHeader header + $next [+1] UInt cis_count + -- Total number of CISes to be created + [requires: 0x01 <= this <= 0x1F] + + let single_cis_params_size = ConnectionInfo.$size_in_bytes + let total_cis_params_size = cis_count*single_cis_params_size + $next [+total_cis_params_size] ConnectionInfo[cis_count] cis_connection_info + -- Connection handle information for the CIS(es) being created + + +struct LERemoveCIGCommand: + -- 7.8.100 LE Remove CIG command (v5.2) (LE) + -- HCI_LE_Remove_CIG + let hdr_size = hci.CommandHeader.$size_in_bytes + 0 [+hdr_size] hci.CommandHeader header + $next [+1] UInt cig_id + -- Identifier of a CIG + [requires: 0x00 <= this <= 0xEF] + + +struct LEAcceptCISRequestCommand: + -- 7.8.101 LE Accept CIS Request command (v5.2) (LE) + -- HCI_LE_Accept_CIS_Request + let hdr_size = hci.CommandHeader.$size_in_bytes + 0 [+hdr_size] hci.CommandHeader header + $next [+2] UInt connection_handle + -- Connection handle of the CIS + [requires: 0x0000 <= this <= 0x0EFF] + + +struct LERejectCISRequestCommand: + -- 7.8.102 LE Reject CIS Request command (v5.2) (LE) + -- HCI_LE_Reject_CIS_Request + let hdr_size = hci.CommandHeader.$size_in_bytes + 0 [+hdr_size] hci.CommandHeader header + $next [+2] UInt connection_handle + -- Connection handle of the CIS + [requires: 0x0000 <= this <= 0x0EFF] + + $next [+1] hci.StatusCode reason + -- Reason the CIS request was rejected + +# 7.8.103 LE Create BIG command +# 7.8.104 LE Create BIG Test command +# 7.8.105 LE Terminate BIG command +# 7.8.106 LE BIG Create Sync command +# 7.8.107 LE BIG Terminate Sync command + + +struct LERequestPeerSCACommand: + -- 7.8.108 LE Request Peer SCA command + -- HCI_LE_Request_Peer_SCA + let hdr_size = hci.CommandHeader.$size_in_bytes + 0 [+hdr_size] hci.CommandHeader header + $next [+2] UInt connection_handle + -- Connection handle of the ACL + [requires: 0x0000 <= this <= 0xEFF] + + +struct LESetupISODataPathCommand: + -- 7.8.109 LE Setup ISO Data Path command + -- HCI_LE_Setup_ISO_Data_Path + let hdr_size = hci.CommandHeader.$size_in_bytes + 0 [+hdr_size] hci.CommandHeader header + $next [+2] UInt connection_handle + -- Connection handle of the CIS or BIS + [requires: 0x0000 <= this <= 0x0EFF] + + $next [+1] DataPathDirection data_path_direction + -- Specifies the direction for which the data path is being configured + + $next [+1] UInt data_path_id + -- Data transport path used (0x00 for HCI). + [requires: 0x00 <= this <= 0xFE] + + let vcf_size = CodecId.$size_in_bytes + $next [+vcf_size] CodecId codec_id + -- Codec to be used + + $next [+3] UInt controller_delay + -- Controller delay in microseconds (0s to 4s) + [requires: 0x000000 <= this <= 0x3D0900] + + $next [+1] UInt codec_configuration_length + -- Length of codec configuration + + $next [+codec_configuration_length] UInt:8[codec_configuration_length] codec_configuration + -- Codec-specific configuration data + + +struct LERemoveISODataPathCommand: + -- 7.8.110 LE Remove ISO Data Path command + -- HCI_LE_Remove_ISO_Data_Path + let hdr_size = hci.CommandHeader.$size_in_bytes + 0 [+hdr_size] hci.CommandHeader header + $next [+2] UInt connection_handle + -- Connection handle of the CIS or BIS + [requires: 0x0000 <= this <= 0x0EFFF] + + $next [+1] bits: + 0 [+1] Flag remove_input_data_path + 1 [+1] Flag remove_output_data_path + +# 7.8.111 LE ISO Transmit Test command +# 7.8.112 LE ISO Receive Test command +# 7.8.113 LE ISO Read Test Counters command +# 7.8.114 LE ISO Test End command |