pw_bluetooth: Update comments in HCI command defs
Update HCI command definitions (from 7.8 "LE Controller Commands")
to include:
- A core spec section reference
- The HCI command name itself (e.g., "HCI_LE_Set_PHY")
- Some commands we haven't implemented (as TODOs)
Bug: b/265052417
Test: No pigweed regressions, all Sapphire bt-host tests pass.
Change-Id: Ie6287fc3eb4c9db9a29014efa0f56997b2f0e0ba
Reviewed-on: https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/149110
Reviewed-by: Faraaz Sareshwala <fsareshwala@google.com>
Presubmit-Verified: CQ Bot Account <pigweed-scoped@luci-project-accounts.iam.gserviceaccount.com>
Commit-Queue: Josh Conner <joshconner@google.com>
diff --git a/pw_bluetooth/public/pw_bluetooth/hci.emb b/pw_bluetooth/public/pw_bluetooth/hci.emb
index 24f4fb1..cdcc161 100644
--- a/pw_bluetooth/public/pw_bluetooth/hci.emb
+++ b/pw_bluetooth/public/pw_bluetooth/hci.emb
@@ -2299,7 +2299,8 @@
# ========== 7.5 Status Parameters ==========
struct ReadEncryptionKeySizeCommand:
- -- Read Encryption Key Size (v1.1) (BR/EDR)
+ -- 7.5.6 Read Encryption Key Size (v1.1) (BR/EDR)
+ -- HCI_Read_Encryption_Key_Size
let hdr_size = CommandHeader.$size_in_bytes
0 [+hdr_size] CommandHeader header
$next [+2] UInt connection_handle
@@ -2309,309 +2310,9 @@
# ========== 7.8 LE Controller Commands ==========
-struct LESetAdvertisingEnableCommand:
- -- LE Set Advertising Enable command (v4.0) (LE)
- let hdr_size = CommandHeader.$size_in_bytes
- 0 [+hdr_size] CommandHeader header
- $next [+1] GenericEnableParam advertising_enable
-
-
-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 LESetExtendedAdvertisingDataCommand:
- -- LE Set Extended Advertising Data command (v5.0) (LE)
-
- let hdr_size = CommandHeader.$size_in_bytes
-
- 0 [+hdr_size] 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:
- -- LE Set Extended Scan Response Data command (v5.0) (LE)
- let hdr_size = CommandHeader.$size_in_bytes
- 0 [+hdr_size] 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 LESetExtendedAdvertisingEnableCommand:
- -- LE Set Extended Advertising Enable command (v5.0) (LE)
- let hdr_size = CommandHeader.$size_in_bytes
- 0 [+hdr_size] CommandHeader header
- $next [+1] 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:
- -- LE Read Maximum Advertising Data Length command (v5.0) (LE)
- -- This command has no parameters
- let hdr_size = CommandHeader.$size_in_bytes
- 0 [+hdr_size] CommandHeader header
-
-
-struct LEReadNumSupportedAdvertisingSetsCommand:
- -- LE Read Number of Supported Advertising Sets command (v5.0) (LE)
- -- This command has no parameters
- let hdr_size = CommandHeader.$size_in_bytes
- 0 [+hdr_size] CommandHeader header
-
-
-struct LERemoveAdvertisingSetCommand:
- -- LE Remove Advertising Set command (v5.0) (LE)
- let hdr_size = CommandHeader.$size_in_bytes
- 0 [+hdr_size] CommandHeader header
- $next [+1] UInt advertising_handle
-
-
-struct LEClearAdvertisingSetsCommand:
- -- LE Clear Advertising Sets command (v5.0) (LE)
- -- This command has no parameters
- let hdr_size = CommandHeader.$size_in_bytes
- 0 [+hdr_size] CommandHeader header
-
-
-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(num_entries: UInt:8):
- -- LE Set Extended Scan Parameters command (v5.0) (LE)
- -- num_entries corresponds to the number of bits set in the |scanning_phys| field
- let hdr_size = CommandHeader.$size_in_bytes
- 0 [+hdr_size] CommandHeader header
- $next [+1] LEOwnAddressType own_address_type
- $next [+1] LEScanFilterPolicy scanning_filter_policy
- $next [+1] LEScanPHYBits scanning_phys
- let single_entry_size = LESetExtendedScanParametersData.$size_in_bytes
- let total_entries_size = num_entries*single_entry_size
- $next [+total_entries_size] LESetExtendedScanParametersData[num_entries] data
- -- Indicates the type of address being used in the scan request packets (for active scanning).
-
-
-struct LESetExtendedScanEnableCommand:
- -- LE Set Extended Scan Enable command (v5.0) (LE)
-
- let hdr_size = CommandHeader.$size_in_bytes
-
- 0 [+hdr_size] CommandHeader header
-
- $next [+1] 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 LEPeriodicAdvertisingCreateSyncCommand:
- -- LE Periodic Advertising Create Sync command (v5.0) (LE)
-
- let hdr_size = CommandHeader.$size_in_bytes
-
- 0 [+hdr_size] CommandHeader header
-
- $next [+1] 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] LEPeriodicAdvertisingAddressType advertiser_address_type
-
- $next [+BdAddr.$size_in_bytes] 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] LEPeriodicAdvertisingSyncCTEType sync_cte_type
- -- Constant Tone Extension sync options
-
-
-struct LEPeriodicAdvertisingCreateSyncCancel:
- -- LE Periodic Advertising Create Sync Cancel command (v5.0) (LE)
- -- Note that this command has no arguments
- let hdr_size = CommandHeader.$size_in_bytes
- 0 [+hdr_size] CommandHeader header
-
-
-struct LEPeriodicAdvertisingTerminateSyncCommand:
- -- LE Periodic Advertising Terminate Sync command (v5.0) (LE)
- let hdr_size = CommandHeader.$size_in_bytes
- 0 [+hdr_size] CommandHeader header
- $next [+2] UInt sync_handle
- -- Identifies the periodic advertising train
- [requires: 0x0000 <= this <= 0x0EFF]
-
-
-struct LEAddDeviceToPeriodicAdvertiserListCommand:
- -- LE Add Device To Periodic Advertiser List command (v5.0) (LE)
- let hdr_size = CommandHeader.$size_in_bytes
- 0 [+hdr_size] CommandHeader header
- $next [+1] LEAddressType advertiser_address_type
- -- Address type of the advertiser. The LEAddressType::kPublicIdentity and
- -- LEAddressType::kRandomIdentity values are excluded for this command.
-
- $next [+BdAddr.$size_in_bytes] 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:
- -- LE Remove Device From Periodic Advertiser List command (v5.0) (LE)
- let hdr_size = CommandHeader.$size_in_bytes
- 0 [+hdr_size] 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 [+BdAddr.$size_in_bytes] 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:
- -- LE Clear Periodic Advertiser List command (v5.0) (LE)
- -- Note that this command has no arguments
- let hdr_size = CommandHeader.$size_in_bytes
- 0 [+hdr_size] CommandHeader header
-
-
-struct LEReadPeriodicAdvertiserListSizeCommand:
- -- LE Read Periodic Advertiser List Size command (v5.0) (LE)
- -- Note that this command has no arguments
- let hdr_size = CommandHeader.$size_in_bytes
- 0 [+hdr_size] CommandHeader header
-
-
-struct LEReadTransmitPowerCommand:
- -- LE Read Transmit Power command (v5.0) (LE)
- -- Note that this command has no arguments
- let hdr_size = CommandHeader.$size_in_bytes
- 0 [+hdr_size] CommandHeader header
-
-
-struct LEReadRFPathCompensationCommand:
- -- LE Read RF Path Compensation command (v5.0) (LE)
- -- Note that this command has no arguments
- let hdr_size = CommandHeader.$size_in_bytes
- 0 [+hdr_size] CommandHeader header
-
-
-struct LEWriteRFPathCompensationCommand:
- -- LE Write RF Path Compensation command (v5.0) (LE)
- -- 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 = CommandHeader.$size_in_bytes
- 0 [+hdr_size] 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:
- -- LE Set Privacy Mode command (v5.0) (LE)
- let hdr_size = CommandHeader.$size_in_bytes
- 0 [+hdr_size] CommandHeader header
- $next [+1] LEPeerAddressTypeNoAnon peer_identity_address_type
- -- The peer identity address type (either Public Identity or Private
- -- Identity).
-
- $next [+BdAddr.$size_in_bytes] 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.
-
-
struct LESetEventMaskCommand:
- -- LE Set Event Mask command (v4.0) (LE)
+ -- 7.8.1 LE Set Event Mask command (v4.0) (LE)
+ -- HCI_LE_Set_Event_Mask
let hdr_size = CommandHeader.$size_in_bytes
0 [+hdr_size] CommandHeader header
$next [+8] bits:
@@ -2620,13 +2321,15 @@
struct LEReadBufferSizeCommandV1:
- -- LE Read Buffer Size command (v4.0) (LE)
+ -- 7.8.2 LE Read Buffer Size command [v1] (v4.0) (LE)
+ -- HCI_LE_Read_Buffer_Size [v1]
let hdr_size = CommandHeader.$size_in_bytes
0 [+hdr_size] CommandHeader header
struct LEReadBufferSizeCommandV2:
- -- LE Read Buffer Size command (v5.2) (LE)
+ -- 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 = CommandHeader.$size_in_bytes
@@ -2634,20 +2337,23 @@
struct LEReadLocalSupportedFeaturesCommand:
- -- LE Read Local Supported Features command (v4.0) (LE)
+ -- 7.8.3 LE Read Local Supported Features command (v4.0) (LE)
+ -- HCI_LE_Read_Local_Supported_Features
let hdr_size = CommandHeader.$size_in_bytes
0 [+hdr_size] CommandHeader header
struct LESetRandomAddressCommand:
- -- LE Set Random Address command (v4.0) (LE)
+ -- 7.8.4 LE Set Random Address command (v4.0) (LE)
+ -- HCI_LE_Set_Random_Address
let hdr_size = CommandHeader.$size_in_bytes
0 [+hdr_size] CommandHeader header
$next [+BdAddr.$size_in_bytes] BdAddr random_address
struct LESetAdvertisingParametersCommand:
- -- LE Set Advertising Parameters command (v4.0) (LE)
+ -- 7.8.5 LE Set Advertising Parameters command (v4.0) (LE)
+ -- HCI_LE_Set_Advertising_Parameters
[requires: advertising_interval_min <= advertising_interval_max]
@@ -2692,13 +2398,15 @@
struct LEReadAdvertisingChannelTxPowerCommand:
- -- LE Read Advertising Channel Tx Power command (v4.0) (LE)
+ -- 7.8.6 LE Read Advertising Channel Tx Power command (v4.0) (LE)
+ -- HCI_LE_Read_Advertising_Channel_Tx_Power
let hdr_size = CommandHeader.$size_in_bytes
0 [+hdr_size] CommandHeader header
struct LESetAdvertisingDataCommand:
- -- LE Set Advertising Data command (v4.0) (LE)
+ -- 7.8.7 LE Set Advertising Data command (v4.0) (LE)
+ -- HCI_LE_Set_Advertising_Data
let hdr_size = CommandHeader.$size_in_bytes
0 [+hdr_size] CommandHeader header
$next [+1] UInt advertising_data_length
@@ -2712,7 +2420,8 @@
struct LESetScanResponseDataCommand:
- -- LE Set Scan Response Data command (v4.0) (LE)
+ -- 7.8.8 LE Set Scan Response Data command (v4.0) (LE)
+ -- HCI_LE_Set_Scan_Response_Data
let hdr_size = CommandHeader.$size_in_bytes
0 [+hdr_size] CommandHeader header
$next [+1] UInt scan_response_data_length
@@ -2725,8 +2434,17 @@
-- 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 = CommandHeader.$size_in_bytes
+ 0 [+hdr_size] CommandHeader header
+ $next [+1] GenericEnableParam advertising_enable
+
+
struct LESetScanParametersCommand:
- -- LE Set Scan Parameters command (v4.0) (LE)
+ -- 7.8.10 LE Set Scan Parameters command (v4.0) (LE)
+ -- HCI_LE_Set_Scan_Parameters
[requires: le_scan_window <= le_scan_interval]
@@ -2756,7 +2474,8 @@
struct LESetScanEnableCommand:
- -- LE Set Scan Enable command (v4.0) (LE)
+ -- 7.8.11 LE Set Scan Enable command (v4.0) (LE)
+ -- HCI_LE_Set_Scan_Enable
let hdr_size = CommandHeader.$size_in_bytes
0 [+hdr_size] CommandHeader header
$next [+1] GenericEnableParam le_scan_enable
@@ -2769,7 +2488,8 @@
struct LECreateConnectionCommand:
- -- LE Create Connection command (v4.0) (LE)
+ -- 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]
@@ -2827,19 +2547,27 @@
struct LECreateConnectionCancelCommand:
- -- LE Create Connection Cancel command (v4.0) (LE)
+ -- 7.8.13 LE Create Connection Cancel command (v4.0) (LE)
+ -- HCI_LE_Create_Connection_Cancel
let hdr_size = CommandHeader.$size_in_bytes
0 [+hdr_size] 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:
- -- LE Clear Filter Accept List command (v4.0) (LE)
+ -- 7.8.15 LE Clear Filter Accept List command (v4.0) (LE)
+ -- HCI_LE_Clear_Filter_Accept_List
let hdr_size = CommandHeader.$size_in_bytes
0 [+hdr_size] CommandHeader header
struct LEAddDeviceToFilterAcceptListCommand:
- -- LE Add Device To Filter Accept List command (v4.0) (LE)
+ -- 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 = CommandHeader.$size_in_bytes
0 [+hdr_size] CommandHeader header
$next [+1] LEPeerAddressType address_type
@@ -2851,7 +2579,8 @@
struct LERemoveDeviceFromFilterAcceptListCommand:
- -- LE Remove Device From Filter Accept List command (v4.0) (LE)
+ -- 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 = CommandHeader.$size_in_bytes
0 [+hdr_size] CommandHeader header
$next [+1] LEPeerAddressType address_type
@@ -2863,7 +2592,8 @@
struct LEConnectionUpdateCommand:
- -- LE Connection Update command (v4.0) (LE)
+ -- 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]
@@ -2902,16 +2632,38 @@
-- 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:
- -- LE Read Remote Features command (v4.0) (LE)
+ -- 7.8.21 LE Read Remote Features command (v4.0) (LE)
+ -- HCI_LE_Read_Remote_Features
let hdr_size = CommandHeader.$size_in_bytes
0 [+hdr_size] 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:
- -- LE Enable Encryption command (v4.0) (LE)
+ -- 7.8.24 LE Enable Encryption command (v4.0) (LE)
+ -- HCI_LE_Enable_Encryption
let hdr_size = CommandHeader.$size_in_bytes
0 [+hdr_size] CommandHeader header
$next [+2] UInt connection_handle
@@ -2923,6 +2675,8 @@
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 = CommandHeader.$size_in_bytes
0 [+hdr_size] CommandHeader header
$next [+2] UInt connection_handle
@@ -2932,7 +2686,8 @@
struct LELongTermKeyRequestNegativeReplyCommand:
- -- LE Long Term Key Request Negative Reply command (v4.0) (LE)
+ -- 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 = CommandHeader.$size_in_bytes
0 [+hdr_size] CommandHeader header
$next [+2] UInt connection_handle
@@ -2940,26 +2695,130 @@
struct LEReadSupportedStatesCommand:
- -- LE Read Supported States command (v4.0) (LE)
+ -- 7.8.27 LE Read Supported States command (v4.0) (LE)
+ -- HCI_LE_Read_Supported_States
let hdr_size = CommandHeader.$size_in_bytes
0 [+hdr_size] 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:
- -- LE Clear Resolving List command (v4.2) (LE)
+ -- 7.8.40 LE Clear Resolving List command (v4.2) (LE)
+ -- HCI_LE_Clear_Resolving_List
let hdr_size = CommandHeader.$size_in_bytes
0 [+hdr_size] 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:
- -- LE Set Address Resolution Enable command (v4.2) (LE)
+ -- 7.8.44 LE Set Address Resolution Enable command (v4.2) (LE)
+ -- HCI_LE_Set_Address_Resolution_Enable
let hdr_size = CommandHeader.$size_in_bytes
0 [+hdr_size] CommandHeader header
$next [+1] 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:
- -- LE Set Advertising Set Random Address command (v5.0) (LE)
+ -- 7.8.52 LE Set Advertising Set Random Address command (v5.0) (LE)
+ -- HCI_LE_Set_Advertising_Set_Random_Address
let hdr_size = CommandHeader.$size_in_bytes
0 [+hdr_size] CommandHeader header
$next [+1] UInt advertising_handle
@@ -2970,7 +2829,8 @@
struct LESetExtendedAdvertisingParametersV1Command:
- -- LE Set Extended Advertising Parameters command (v5.0) (LE)
+ -- 7.8.53 LE Set Extended Advertising Parameters [v1] command (v5.0) (LE)
+ -- HCI_LE_Set_Extended_Advertising_Parameters [v1]
let hdr_size = CommandHeader.$size_in_bytes
@@ -3029,6 +2889,342 @@
$next [+1] 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 = CommandHeader.$size_in_bytes
+
+ 0 [+hdr_size] 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 = CommandHeader.$size_in_bytes
+ 0 [+hdr_size] 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 = CommandHeader.$size_in_bytes
+ 0 [+hdr_size] CommandHeader header
+ $next [+1] 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 = CommandHeader.$size_in_bytes
+ 0 [+hdr_size] 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 = CommandHeader.$size_in_bytes
+ 0 [+hdr_size] CommandHeader header
+
+
+struct LERemoveAdvertisingSetCommand:
+ -- 7.8.59 LE Remove Advertising Set command (v5.0) (LE)
+ -- HCI_LE_Remove_Advertising_Set
+ let hdr_size = CommandHeader.$size_in_bytes
+ 0 [+hdr_size] 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 = CommandHeader.$size_in_bytes
+ 0 [+hdr_size] 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(num_entries: UInt:8):
+ -- 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 = CommandHeader.$size_in_bytes
+ 0 [+hdr_size] CommandHeader header
+ $next [+1] LEOwnAddressType own_address_type
+ $next [+1] LEScanFilterPolicy scanning_filter_policy
+ $next [+1] LEScanPHYBits scanning_phys
+ let single_entry_size = LESetExtendedScanParametersData.$size_in_bytes
+ let total_entries_size = num_entries*single_entry_size
+ $next [+total_entries_size] LESetExtendedScanParametersData[num_entries] data
+ -- Indicates the type of address being used in the scan request packets (for active scanning).
+
+
+struct LESetExtendedScanEnableCommand:
+ -- 7.8.65 LE Set Extended Scan Enable command (v5.0) (LE)
+ -- HCI_LE_Set_Extended_Scan_Enable
+
+ let hdr_size = CommandHeader.$size_in_bytes
+
+ 0 [+hdr_size] CommandHeader header
+
+ $next [+1] 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
+
+
+# 7.8.66 LE Extended Create Connection command
+# HCI_LE_Extended_Create_Connection [v1] [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 = CommandHeader.$size_in_bytes
+
+ 0 [+hdr_size] CommandHeader header
+
+ $next [+1] 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] LEPeriodicAdvertisingAddressType advertiser_address_type
+
+ $next [+BdAddr.$size_in_bytes] 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] 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 = CommandHeader.$size_in_bytes
+ 0 [+hdr_size] 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 = CommandHeader.$size_in_bytes
+ 0 [+hdr_size] 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 = CommandHeader.$size_in_bytes
+ 0 [+hdr_size] CommandHeader header
+ $next [+1] LEAddressType advertiser_address_type
+ -- Address type of the advertiser. The LEAddressType::kPublicIdentity and
+ -- LEAddressType::kRandomIdentity values are excluded for this command.
+
+ $next [+BdAddr.$size_in_bytes] 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 = CommandHeader.$size_in_bytes
+ 0 [+hdr_size] 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 [+BdAddr.$size_in_bytes] 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 = CommandHeader.$size_in_bytes
+ 0 [+hdr_size] 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 = CommandHeader.$size_in_bytes
+ 0 [+hdr_size] 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 = CommandHeader.$size_in_bytes
+ 0 [+hdr_size] 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 = CommandHeader.$size_in_bytes
+ 0 [+hdr_size] 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 = CommandHeader.$size_in_bytes
+ 0 [+hdr_size] 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 = CommandHeader.$size_in_bytes
+ 0 [+hdr_size] CommandHeader header
+ $next [+1] LEPeerAddressTypeNoAnon peer_identity_address_type
+ -- The peer identity address type (either Public Identity or Private
+ -- Identity).
+
+ $next [+BdAddr.$size_in_bytes] 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.
+
# ========================= HCI Event packets ===========================
# Core Spec v5.3 Vol 4, Part E, Section 7.7