Part E. Host Controller Interface Functional Specification
vAtlanta r00
This Part describes the functional specification for the Host Controller interface (HCI). The HCI provides a uniform command interface to a Controller.
1. Introduction
This Part of the specification describes the functional specifications for the Host Controller interface (HCI). The HCI provides a uniform command method for the Host to access Controller capabilities and to control connections to other Controllers. For the BR/EDR or LE Controller, these commands typically involve the Link Manager (LM) to exchange LMP commands or the Link Layer (LL) to exchange LL Control packets with remote Bluetooth devices. For details, see [Vol 2] Part C, Link Manager Protocol Specification and [Vol 6] Part B, Link Layer Specification.
The rest of this section provides a brief overview of the lower layers of the Bluetooth software stack and of the Bluetooth hardware. Section 2 provides an overview of the Lower HCI Device Driver Interface on the Host device. Section 3 lists the HCI commands and events and specifies the support requirements on different types of implementation. Section 4 describes the flow control used between the Host and the Controller. Section 5 describes the various data formats used by HCI. Section 6 further describes certain parameters that are common to several commands. Section 7 describes each of the HCI commands in detail, identifies parameters for each of the commands, and lists events associated with each command.
The specification is applicable to the following types of Controllers:
BR/EDR Controller
BR/EDR/LE Controller
LE Controller
A Controller shall support one of the following sets of functionality:
BR/EDR only
LE only
BR/EDR/LE
In the following sections, the term “BR/EDR Controller” is used to describe the BR/EDR functionality of a Controller which may be either a BR/EDR only Controller or a BR/EDR/LE Controller. Similarly, the term “LE Controller” is used to describe the LE functionality of a Controller which may be either an LE only Controller or a BR/EDR/LE Controller.
A BR/EDR Controller supports BR/EDR functionality only. A BR/EDR/LE Controller supports BR/EDR functionality and LE functionality. An LE Controller supports LE functionality only.
1.1. Lower Layers of the Bluetooth software stack

Figure 1.1 provides an overview of the lower software layers.
Several layers may exist between the HCI driver on the Host system and the HCI layer in the Controller(s). These intermediate layers, the Host Controller Transport Layer, provide the ability to transfer data without intimate knowledge of the data.

Figure 1.2 illustrates the path of a data transfer from one device to another. The HCI driver on the Host exchanges data and commands with the HCI firmware on the Bluetooth hardware. The Host Control Transport Layer (i.e. physical bus) driver provides both HCI layers with the ability to exchange information with each other.
The Host will receive asynchronous notifications of HCI events independent of which Host Controller Transport Layer is used. HCI events are used for notifying the Host when something occurs. When the Host discovers that an event has occurred it will then parse the received event packet to determine which event occurred.
A BR/EDR/LE Controller uses one shared command buffer and flow control for BR/EDR and LE. Data buffers can be either shared between BR/EDR and LE or there may be separate data buffers for BR/EDR and LE. The configuration of a Controller is determined through HCI.
LE Controllers use a reduced set of HCI commands and events. Some commands and events are re-used for multiple Controller types.
1.2. Cross-version issues
The Host and Controller communicating through HCI are not required to support the same version of this specification (see [Vol 1] Part D, Section 1).
If the Controller conforms to a newer version of the specification than the Host, events (including HCI_Command_Status and HCI_Command_Complete) may include values that are reserved for future use in the version supported by the Host. In the case of the Status parameter of the HCI_Command_Status and HCI_Command_Complete events, a value that is reserved for future use must be treated as if it were the error code Unspecified Error (0x1F) (see [Vol 1] Part F, Section 1.3). In all other circumstances the Host must obey the requirements for devices receiving reserved values (see [Vol 1] Part E, Section 2.4).
Note
Note: If the Host conforms to a newer version of the specification than the Controller and uses a command feature that is not part of the older specification version, then the Controller will report an error. Failure to handle such errors could result in unexpected behavior.
2. Overview of Host Controller transport layer
The Host driver stack has a transport layer between the Host Controller Interface driver and the Host.
The main goal of this transport layer is transparency. The Host Controller Interface driver (which interfaces to the Controller) should be independent of the underlying transport technology. In addition, the transport should not require any understanding of the data that the Host Controller Interface driver passes to the Controller. This allows the logical interface (HCI) or the Controller to be upgraded without affecting the transport layer.
The specified Host Controller Transport Layers are described in the other parts of Volume 4.
2.1. [This section is no longer used]
3. Overview of commands and events
The commands and events are sent between the Host and the Controller.
Table 3.1 lists each HCI command and event together with specification version information, a summary description, and the support requirements.
A command or event may have more than one version. All versions of a command or event implement the same basic functionality but with detail differences, such as additional parameters relating to newer features. The different versions are indicated by "[v1]", etc. where necessary; if no version number is given, a reference to the command or event applies to all versions.
The specification version information gives the version number of the specification which first specified this command or event or, where more than one specification version number is shown, each version of this command or event.
Table 3.1 lists the requirements for a Controller to support each command or event or version thereof. Subject to Section 3.2, a Controller shall support the command or event if it is shown as mandatory for at least one of the transports (i.e., BR/EDR or LE) that the Controller supports, otherwise the Controller may support the command or event if it is shown as optional for at least one of the transports that the Controller supports, otherwise it shall not support the command or event. If the command or event has more than one version, then this determination is made for each version separately using the requirements listed in the table for that version. The LMP features mentioned in the conditions are defined in [Vol 2] Part C, Section 3.2 and the Link Layer features in [Vol 6] Part B, Section 4.6.
Name | Vers. | Summary Description | BR/EDR | LE |
---|---|---|---|---|
1.1 | The HCI_Accept_Connection_Request command is used to accept a new incoming BR/EDR connection request. | M | E | |
1.2 | The HCI_Accept_Synchronous_Connection_Request command is used to accept an incoming request for a synchronous connection and to inform the local Link Manager about the acceptable parameter values for the synchronous connection. | C.134 | E | |
4.1 | The HCI_Authenticated_Payload_Timeout_Expired event is used to indicate that a packet containing a valid MIC on the Handle was not received within the authenticatedPayloadTO. | C.155 | C.155 | |
1.1 | The HCI_Authentication_Complete event occurs when authentication has been completed for the specified connection. | C.101 | E | |
1.1 | The HCI_Authentication_Requested command is used to establish authentication between the two devices associated with the specified Connection_Handle. | O | E | |
1.1 | The HCI_Change_Connection_Link_Key command is used to force both devices of a connection associated to the Connection_Handle, to generate a new link key. | O | E | |
1.1 | The HCI_Change_Connection_Link_Key_Complete event is used to indicate that the change in the Link Key for the Connection_Handle specified by the Connection_Handle event parameter had been completed. | C.102 | E | |
1.1 | The HCI_Change_Connection_Packet_Type command is used to change which packet types can be used for a connection that is currently established. | C.133 | E | |
1.1 | The HCI_Command_Complete event is used by the Controller to pass the return status of a command and the other event parameters for each HCI command. | M | M | |
1.1 | The HCI_Command_Status event is used to indicate that the command described by the Command_Opcode parameter has been received and the Controller is currently performing the task for this command. | M | M | |
5.2 | The HCI_Configure_Data_Path command is used by a Host to configure a data path to enable codec operation in the Controller. | C.156 | C.156 | |
1.1 | The HCI_Connection_Complete event indicates to both of the Hosts forming the connection that a new BR/EDR connection has been established. | M | E | |
1.1 | The HCI_Connection_Packet_Type_Changed event is used to indicate the completion of the process of the Link Manager changing the packet type mask used for the specified Connection_Handle. | C.133 | E | |
1.1 | The HCI_Connection_Request event is used to indicate that a new incoming BR/EDR connection is trying to be established. | M | E | |
Connectionless Peripheral Broadcast Channel Map Change event | CSA4 | The HCI_Connectionless_Peripheral_Broadcast_Channel_Map_Change event indicates to the Host that the BR/EDR Controller has moved to a new AFH channel map for the PBD logical link. | C.201 | E |
CSA4 | The HCI_Connectionless_Peripheral_Broadcast_Receive event provides the Host with the data received from a Connectionless Peripheral Broadcast packet. | C.202 | E | |
CSA4 | On the Connectionless Peripheral Broadcast Receiver, the HCI_Connectionless_Peripheral_Broadcast_Timeout event indicates to the Host that the BR/EDR Controller has lost synchronization with the Connectionless Peripheral Broadcast Transmitter. On the Connectionless Peripheral Broadcast Transmitter, the HCI_Connectionless_Peripheral_Broadcast_Timeout event indicates to the Host that the BR/EDR Controller has been unable to transmit a Connectionless Peripheral Broadcast packet for the timeout interval specified in the HCI_Set_Connectionless_Peripheral_Broadcast command. | C.202 | E | |
1.2 | The HCI_Create_Connection_Cancel command is used to cancel an ongoing Create Connection. | M | E | |
1.1 | The HCI_Create_Connection command will cause the BR/EDR Link Manager to create an ACL connection to the BR/EDR Controller with the BD_ADDR specified by the command parameters. | M | E | |
1.1 | The HCI_Data_Buffer_Overflow event is used to indicate that the Controller's data buffers have overflowed, because the Host has sent more packets than allowed. | O | O | |
CSA4 | The HCI_Delete_Reserved_LT_ADDR command requests that the BR/EDR Controller cancel the reservation of a specific LT_ADDR reserved for the purposes of Connectionless Peripheral Broadcast. | C.201 | E | |
1.1 | The HCI_Delete_Stored_Link_Key command provides the ability to remove one or more of the link keys stored in the Controller. | C.121 | E | |
1.1 | The HCI_Disconnect command is used to terminate an existing BR/EDR or LE connection. | M | C.3 | |
1.1 | The HCI_Disconnection_Complete event occurs when a connection has been terminated. | M | C.3 | |
1.1 | The HCI_Enable_Device_Under_Test_Mode command will allow the local Controller to enter test mode via LMP test commands. The Host issues this command when it wants the local device to be the DUT for the Testing scenarios as described in the Bluetooth Test Mode document. | C.123 | E | |
1.1 5.3 | The HCI_Encryption_Change event is used to indicate that the change in encryption has been completed for the specified Connection_Handle. | [v1] M [v2] C.158 | [v1] C.4 [v2] C.56 | |
2.1 + EDR | The HCI_Encryption_Key_Refresh_Complete event is used to indicate to the Host that the encryption key was refreshed on the given Connection_Handle any time encryption is paused and then resumed. | M | C.4 | |
CSA2 | The HCI_Enhanced_Accept_Synchronous_Connection_Request command is used to accept an incoming request for a synchronous connection and to inform the local Link Manager about the acceptable parameter values for the synchronous connection. | C.135 | E | |
2.1 + EDR | The HCI_Enhanced_Flush command is used to discard specific packets currently pending for transmission in the Controller for the specified Handle. This command takes a parameter specifying the type of packets to be flushed. | M | E | |
2.1 + EDR | The HCI_Enhanced_Flush_Complete event is used to indicate that an Enhanced Flush is complete. | M | E | |
CSA2 | The HCI_Enhanced_Setup_Synchronous_Connection command adds a new or modifies an existing synchronous logical transport (SCO or eSCO) on a physical link depending on the Connection_Handle parameter specified. | C.135 | E | |
1.1 | The HCI_Exit_Periodic_Inquiry_Mode command is used to end the Periodic Inquiry mode when the local device is in Periodic Inquiry Mode. | C.103 | E | |
1.1 | The HCI_Exit_Sniff_Mode command is used to end Sniff mode for a Connection_Handle which is currently in Sniff mode. | C.214 | E | |
2.1 + EDR | The HCI_Extended_Inquiry_Result event indicates that a BR/EDR Controller has responded with an extended inquiry response during the current Inquiry process. | C.147 | E | |
1.2 | The HCI_Flow_Specification command is used to specify the flow parameters for the traffic carried over the ACL connection identified by the Connection_Handle. | M | E | |
1.2 | The HCI_Flow_Specification_Complete event is used to inform the Host about the Quality of Service for the ACL connection the Controller is able to support. | M | E | |
1.1 | The HCI_Flush command is used to discard all data that is currently pending for transmission in the Controller for the specified Connection_Handle. | M | E | |
1.1 | The HCI_Flush_Occurred event is used to indicate that, for the specified Handle, the data to be transmitted has been discarded. | M | E | |
CSA3 | The HCI_Get_MWS_Transport_Layer_Configuration command reads the supported baud rates from the Controller. | C.109 | C.109 | |
1.1 | The HCI_Hardware_Error event is used to indicate some type of hardware failure for the Controller. | O | O | |
1.1 | The HCI_Hold_Mode command is used to initiate Hold mode. | C.213 | E | |
1.1 | The HCI_Host_Buffer_Size command is used by the Host to notify the Controller about its buffer sizes for ACL and synchronous data. The Controller will segment the data to be transmitted from the Controller to the Host, so that data contained in HCI Data packets will not exceed these sizes. | C.107 | C.107 | |
1.1 | The HCI_Host_Number_Of_Completed_Packets command is used by the Host to indicate to the Controller when the Host is ready to receive more HCI packets for any Connection_Handle. | C.107 | C.107 | |
1.1 | The HCI_Inquiry_Cancel command will cause the BR/EDR Controller to stop the current Inquiry if the BR/EDR Controller is in Inquiry Mode. | C.127 | E | |
1.1 | The HCI_Inquiry command will cause the BR/EDR Controller to enter Inquiry Mode. Inquiry Mode is used to discovery other nearby BR/EDR Controllers. | C.127 | E | |
1.1 | The HCI_Inquiry_Complete event indicates that the Inquiry is finished. | C.127 | E | |
CSA4 | The HCI_Inquiry_Response_Notification event indicates to the Host that the BR/EDR Controller responded to an inquiry message. | C.126 | E | |
1.1 | The HCI_Inquiry_Result event indicates that a BR/EDR Controller or multiple BR/EDR Controllers have responded so far during the current Inquiry process. | C.127 | E | |
1.2 | The HCI_Inquiry_Result_with_RSSI event indicates that a BR/EDR Controller or multiple BR/EDR Controllers have responded so far during the current Inquiry process. | C.128 | E | |
2.1 + EDR | The HCI_IO_Capability_Request event is used to indicate that the IO capabilities of the Host are required for a Secure Simple Pairing process. | M | E | |
2.1 + EDR | The HCI_IO_Capability_Request_Negative_Reply command is used to reject a pairing attempt after an HCI_IO_Capability_Request event has been received by the Host. | M | E | |
2.1 + EDR | The HCI_IO_Capability_Request_Reply command is used to reply to an HCI_IO_Capability_Request event from the Controller, and specifies the current I/O capabilities of the Host. | M | E | |
2.1 + EDR | The HCI_IO_Capability_Response event is used to indicate to the Host that IO capabilities from a remote device specified by BD_ADDR have been received during a Secure Simple Pairing process. | M | E | |
2.1 + EDR | The HCI_Keypress_Notification event is sent to the Host after a passkey notification has been received by the Link Manager on the given BD_ADDR. | M | E | |
5.2 | The HCI_LE_Accept_CIS_Request command is used by the Peripheral’s Host to inform the Controller to accept the request for creating the CIS. | E | C.40 | |
4.0 | The HCI_LE_Add_Device_To_Filter_Accept_List command will add a device to the Filter Accept List. | E | M | |
5.0 | The HCI_LE_Add_Device_To_Periodic_Advertiser_List command will add a device to the Periodic Advertiser List. | E | C.21 | |
4.2 | The HCI_LE_Add_Device_To_Resolving_List command is used to add one device to the resolving list used to resolve Resolvable Private Addresses in the Controller. | E | C.9 | |
4.0 | The HCI_LE_Advertising_Report event indicates that an advertising or scan response packet has been received. | E | C.98 | |
5.0 | The HCI_LE_Advertising_Set_Terminated event indicates that advertising in a given advertising set has stopped. | E | C.17 | |
5.2 | The HCI_LE_BIG_Create_Sync synchronizes and receives PDUs from one or more BISes. | E | C.42 | |
5.2 | The HCI_LE_BIG_Sync_Established event indicates that the Controller has completed an attempt to synchronize with the requested BISes. | E | C.42 | |
5.2 | The HCI_LE_BIG_Sync_Lost event indicates that the Controller stopped synchronizing with a BIG. | E | C.42 | |
5.2 | The HCI_LE_BIG_Terminate_Sync command stops or cancels synchronizing with a BIG. | E | C.42 | |
5.2 | The HCI_LE_BIGInfo_Advertising_Report event indicates that the Controller has received an Advertising PDU that contained a BIGInfo field. | E | C.54 | |
5.0 | The HCI_LE_Channel_Selection_Algorithm event indicates the channel selection algorithm used on a connection. | E | C.23 | |
5.2 | The HCI_LE_CIS_Established event indicates that the Controller established a CIS. | E | C.38 | |
5.2 | The HCI_LE_CIS_Request event indicates that the Peripheral’s Controller received a request from the Central to create a CIS. | E | C.40 | |
5.0 | The HCI_LE_Clear_Advertising_Sets command will remove all existing advertising sets from the Controller. | E | C.17 | |
4.0 | The HCI_LE_Clear_Filter_Accept_List command will clear the Filter Accept List. | E | M | |
5.0 | The HCI_LE_Clear_Periodic_Advertiser_List command will clear the Periodic Advertiser List. | E | C.21 | |
4.2 | The HCI_LE_Clear_Resolving_List command is used to remove all devices from the resolving list used to resolve Resolvable Private Addresses in the Controller. | E | C.9 | |
4.0 | The HCI_LE_Connection_Complete event indicates to the Host that a new connection has been created. | E | C.3 | |
5.1 | The HCI_LE_Connection_CTE_Request_Enable command will request the Controller to start or stop sending of LL_CTE_REQ PDUs on a connection. | E | C.25 | |
5.1 | The HCI_LE_Connection_CTE_Response_Enable command will command the Controller to respond to LL_CTE_REQ PDUs with LL_CTE_RSP PDUs. | E | C.26 | |
5.1 | The HCI_LE_Connection_IQ_Report event is used to report IQ samples from the Constant Tone Extension field of a received packet containing an LL_CTE_RSP PDU. | E | C.25 | |
4.0 | The HCI_LE_Connection_Update command will be used to change the connection parameters of an existing connection. | E | C.62 | |
4.0 | The HCI_LE_Connection_Update_Complete event indicates the completion of the process to change the connection parameters. | E | C.3 | |
5.1 | The HCI_LE_Connectionless_IQ_Report event reports IQ information from the Constant Tone Extension of a received advertising packet. | E | C.28 | |
5.2 | The HCI_LE_Create_BIG command creates one or more BISes of a BIG. | E | C.41 | |
5.2 | The HCI_LE_Create_BIG_Complete event indicates that the Controller completed an attempt to create the BISes that were requested by the Host. | E | C.41 | |
5.2 | The HCI_LE_Create_BIG_Test command is used to create one or more BISes of a BIG for testing purposes. | E | C.41 | |
5.2 | The HCI_LE_Create_CIS command is used by the Central’s Host to create one or more CISes. | E | C.39 | |
4.0 | The HCI_LE_Create_Connection_Cancel command is used to cancel an ongoing HCI_LE_Create_Connection command. | E | C.94 | |
4.0 | The HCI_LE_Create_Connection command is used to create a new connection. | E | C.59 | |
5.1 | The HCI_LE_CTE_Request_Failed event indicates a problem with a request generated by an HCI_LE_Connection_CTE_Request_Enable command for a peer device to send Constant Tone Extensions. | E | C.25 | |
4.2 | The HCI_LE_Data_Length_Change event is used to indicate a change in the maximum packet sizes by the Link Layer. | E | C.8 | |
4.2 | The HCI_LE_Directed_Advertising_Report event indicates that directed advertisements have been received where the advertiser is using a resolvable private address for the TargetA field in the ADV_DIRECT_IND PDU and the scanning filter policy is set to send this event to the Host. | E | C.63 | |
4.0 | The HCI_LE_Enable_Encryption command is used to enable link level encryption. | E | C.60 | |
4.0 | The HCI_LE_Encrypt command will encrypt a block of unencrypted data against a key and generate a block of encrypted data. | E | C.4 | |
4.2 5.4 | The HCI_LE_Enhanced_Connection_Complete event indicates to the Host that a new connection has been created. This event contains the additional parameters of the local and peer resolvable private addresses. | E | [v1] C.24 [v2] C.69 | |
5.2 | The HCI_LE_Enhanced_Read_Transmit_Power_Level command is used to read the current and maximum transmit power levels used by the local Controller on a specified PHY on an ACL connection. | E | C.51 | |
5.0 | The HCI_LE_Extended_Advertising_Report event indicates that an advertising packet has been received. | E | C.19 | |
5.0 5.4 | The LE Extended Create Connection Command is used to create a new connection supporting different initiating PHYs and to initiate a connection with a synchronized device. | E | [v1] C.20 [v2] C.67 | |
4.2 5.1 | The HCI_LE_Generate_DHKey command is used to initiate generation of a Diffie-Hellman key in the Controller for use over the LE transport. | E | [v1] C.99 [v2] O | |
4.2 | The HCI_LE_Generate_DHKey_Complete event indicates that LE Diffie-Hellman key generation has been completed by the Controller. | E | O | |
5.2 | The HCI_LE_ISO_Read_Test_Counters command reads the test counters in the Controller which is configured in ISO Receive Test mode. | E | C.46 | |
5.2 | The HCI_LE_ISO_Receive_Test command configures a Link Layer to receive test payloads from an established CIS or a synchronized BIS. | E | C.46 | |
5.2 | The HCI_LE_ISO_Test_End command terminates the ISO Transmit and/or Receive Test mode. | E | C.47 | |
5.2 | The HCI_LE_ISO_Transmit_Test command configures an established CIS or BIS to transmit test payloads that are generated by the Controller. | E | C.45 | |
4.0 | The HCI_LE_Long_Term_Key_Request event indicates that a Long Term Key is required for a connection. | E | C.61 | |
4.0 | The HCI_LE_Long_Term_Key_Request_Negative_Reply command is used to reply to an HCI_LE_Long_Term_Key_Request event and indicates that the Host does not have a Long Term Key for that connection. | E | C.61 | |
4.0 | The HCI_LE_Long_Term_Key_Request_Reply command is used to reply to an HCI_LE_Long_Term_Key_Request event and includes the Long Term Key stored in the Host for that connection. | E | C.61 | |
5.1 | The HCI_LE_Modify_Sleep_Clock_Accuracy command requests the Controller changes its sleep clock accuracy for testing purposes. | E | C.37 | |
5.2 | The HCI_LE_Path_Loss_Threshold event is used to report a path loss threshold crossing on an ACL connection. | E | C.52 | |
5.0 | The HCI_LE_Periodic_Advertising_Create_Sync_Cancel command is used to cancel a pending HCI_LE_Periodic_Advertising_Create_Sync command. | E | C.16 | |
5.0 | The HCI_LE_Periodic_Advertising_Create_Sync command is used to start receiving periodic advertising packets from an advertiser. | E | C.16 | |
5.0 5.4 | The HCI_LE_Periodic_Advertising_Report event indicates that a periodic advertising packet has been received. | E | [v1] C.21 [v2] C.68 | |
5.1 | The HCI_LE_Periodic_Advertising_Set_Info_Transfer command is used to send periodic advertising synchronization information, describing periodic advertising events that the Controller is transmitting, to a connected Controller. | E | C.34 | |
5.4 | The HCI_LE_Periodic_Advertising_Response_Report event is used to report response data to a Host. | E | C.67 | |
5.4 | The HCI_LE_Periodic_Advertising_Subevent_Data_Request event is used to request subevent data from a Host. | E | C.67 | |
5.0 5.4 | The HCI_LE_Periodic_Advertising_Sync_Established event indicates that the Controller has started receiving periodic advertising packets from an advertiser. | E | [v1] C.16 [v2] C.68 | |
5.0 | The HCI_LE_Periodic_Advertising_Sync_Lost event indicates the Controller has ended receiving a periodic advertising train. | E | C.21 | |
5.1 | The HCI_LE_Periodic_Advertising_Sync_Transfer command is used to send periodic advertising synchronization information to a connected Controller. | E | C.33 | |
5.1 5.4 | The HCI_LE_Periodic_Advertising_Sync_Transfer_Received event reports reception of periodic advertising synchronization information from a connected Controller. | E | [v1] C.35 [v2] C.68 | |
5.0 | The HCI_LE_Periodic_Advertising_Terminate_Sync command is used to end receiving of a periodic advertising train. | E | C.21 | |
5.0 | The HCI_LE_PHY_Update_Complete event is used to inform the Host of the current PHY. | E | C.11 | |
4.0 | The HCI_LE_Rand command will generate a random number. | E | C.4 | |
4.0 | The HCI_LE_Read_Advertising_Physical_Channel_Tx_Power command will read the transmit power level that will be used for advertising. | E | C.97 | |
5.1 | The HCI_LE_Read_Antenna_Information command allows the Host to read the switching rates, the sampling rates, the number of antennae, and the maximum length of the Constant Tone Extension supported by the Controller. | E | C.31 | |
4.0 | The HCI_LE_Read_Buffer_Size command returns the size of the HCI buffers. These buffers are used by the LE Controller to buffer data that is to be transmitted. | E | [v1] C.3 [v2] C.55 | |
4.0 | The HCI_LE_Read_Channel_Map command will read the current state of the channel map for a connection. | E | C.3 | |
4.0 | The HCI_LE_Read_Filter_Accept_List_Size command will read the maximum number of Filter Accept List entries that this Controller supports. | E | M | |
5.2 | The HCI_LE_Read_ISO_Link_Quality command returns the value of various counters related to link quality on an isochronous stream. | E | C.50 | |
5.2 | The HCI_LE_Read_ISO_TX_Sync command is used to read the Time_Stamp and Time_Offset of a transmitted SDU. | E | C.45 | |
4.2 | The HCI_LE_Read_Local_P-256_Public_Key command is used to return the local P-256 public key from the Controller. | E | O | |
4.2 | The HCI_LE_Read_Local_P-256_Public_Key_Complete event is generated when local P-256 key generation is complete. | E | O | |
4.2 | The HCI_LE_Read_Local_Resolvable_Address command is used to get the current local Resolvable Private Address being used for the corresponding peer Identity Address. | E | C.10 | |
4.0 | The HCI_LE_Read_Local_Supported_Features command will read the version information for the local LE Controller. | E | M | |
5.0 | The HCI_LE_Read_Maximum_Advertising_Data_Length command will read the maximum length of advertising data that the advertising Controller supports in a given advertising set. | E | C.17 | |
4.2 | The HCI_LE_Read_Maximum_Data_Length command allows the Host to read the Controller’s supportedMaxTxOctets, supportedMaxTxTime, supportedMaxRxOctets, and supportedMaxRxTime parameters. | E | C.8 | |
5.0 | The HCI_LE_Read_Number_of_Supported_Advertising_Sets command will read the maximum number of advertising sets supported by the advertising Controller at the same time. | E | C.17 | |
4.2 | The HCI_LE_Read_Peer_Resolvable_Address command is used to get the current peer Resolvable Private Address being used for the corresponding peer Public and Random (static) Identity Address. | E | C.10 | |
5.0 | The HCI_LE_Read_Periodic_Advertiser_List_Size command will read the maximum number of Periodic Advertiser List entries that the Controller supports. | E | C.21 | |
5.0 | The HCI_LE_Read_PHY command will read the current PHY. | E | C.11 | |
4.0 | The HCI_LE_Read_Remote_Features command is used to read the features used on a connection and the features supported by a remote LE device. | E | C.3 | |
4.0 | The HCI_LE_Read_Remote_Features_Complete event indicates the completion of the process to read the features used on a connection and the features supported by a remote LE device. | E | C.3 | |
5.2 | The HCI_LE_Read_Remote_Transmit_Power_Level command is used to read the transmit power level used by the remote Controller on a specified PHY on an ACL connection. | E | C.51 | |
4.2 | The HCI_LE_Read_Resolving_List_Size command is used to read the total number of entries in the resolving list that can be stored in the Controller. | E | C.9 | |
5.0 | The HCI_LE_Read_RF_Path_Compensation command is used to read the RF Path Compensation Value. | E | C.22 | |
4.2 | The HCI_LE_Read_Suggested_Default_Data_Length command allows the Host to read the initial MaxTxOctets and MaxTxTime values for new connections it suggested to the Controller. | E | C.8 | |
4.0 | The HCI_LE_Read_Supported_States command will read the current supported state and role combinations for the local LE Controllers. | E | M | |
5.0 | The HCI_LE_Read_Transmit_Power command will read the minimum and maximum transmit powers supported by the Controller. | E | C.64 | |
4.0 5.0 5.1 | The HCI_LE_Receiver_Test command will run the LE receiver test. | E | [v1] C.2 [v2] C.13 [v3] C.30 | |
5.2 | The HCI_LE_Reject_CIS_Request command is used by the Peripheral’s Host to inform the Controller to reject the request for creating the CIS. | E | C.40 | |
4.1 | The LE Remote Connection Parameter Request event is used to indicate to the Host that the remote device is requesting a change in the connection parameters. | E | C.6 | |
LE Remote Connection Parameter Request Negative Reply command | 4.1 | The HCI_LE_Remote_Connection_Parameter_Request_Negative_Reply command is used to reject the remote device’s request to change the connection parameters of the LE connection. | E | C.6 |
4.1 | The HCI_LE_Remote_Connection_Parameter_Request_Reply command is used to accept the remote device’s request to change the connection parameters of the LE connection. | E | C.6 | |
5.0 | The HCI_LE_Remove_Advertising_Set command will remove an advertising set from the Controller. | E | C.17 | |
5.2 | The HCI_LE_Remove_CIG command is used by the Central’s Host to remove a CIG from the Controller. | E | C.39 | |
4.0 | The HCI_LE_Remove_Device_From_Filter_Accept_List command will remove a single device from the Filter Accept List. | E | M | |
5.0 | The HCI_LE_Remove_Device_From_Periodic_Advertiser_List command will remove a single device from the Periodic Advertiser List. | E | C.21 | |
4.2 | The HCI_LE_Remove_Device_From_Resolving_List command is used to remove one device from the resolving list used to resolve Resolvable Private Addresses in the Controller. | E | C.9 | |
5.2 | The HCI_LE_Remove_ISO_Data_Path command removes an isochronous data path between the Host and the Controller. | E | C.47 | |
5.2 | The HCI_LE_Request_Peer_SCA command requests the Sleep Clock Accuracy of the peer device. | E | C.44 | |
5.2 | The HCI_LE_Request_Peer_SCA_Complete event indicates that the Controller completed the attempt to read the Sleep Clock Accuracy (SCA) of the peer device. | E | C.95 | |
5.0 | The HCI_LE_Scan_Request_Received event indicates that a scan request has been received. | E | C.17 | |
5.0 | The HCI_LE_Scan_Timeout event indicates that scanning has finished. | E | C.19 | |
4.2 | The HCI_LE_Set_Address_Resolution_Enable command is used to enable resolution of Resolvable Private Addresses in the Controller. | E | C.9 | |
4.0 | The HCI_LE_Set_Advertising_Data command will set the data transmitted when advertising. | E | C.97 | |
4.0 | The HCI_LE_Set_Advertising_Enable command will enable or disable advertising. | E | C.97 | |
4.0 | The HCI_LE_Set_Advertising_Parameters command will set the parameters used for advertising. | E | C.97 | |
5.0 | The HCI_LE_Set_Advertising_Set_Random_Address command will set the random address used in advertising. | E | C.17 | |
5.2 | The HCI_LE_Set_CIG_Parameters command is used by a Central’s Host to set the parameters of one or more Connected Isochronous Streams (CISes) that are associated with a CIG in the Controller. | E | C.39 | |
5.2 | The HCI_LE_Set_CIG_Parameters_Test command is used by a Central’s Host to set the parameters of one or more CISes that are associated with a CIG in the Controller for testing purposes. | E | C.39 | |
5.1 | The HCI_LE_Set_Connection_CTE_Receive_Parameters command will set the antenna-switching pattern, switching and sampling slot durations for receiving the Constant Tone Extension on a connection. | E | C.25 | |
5.1 | The HCI_LE_Set_Connection_CTE_Transmit_Parameters command will set the antenna-switching pattern, switching and sampling slot durations for transmitting the Constant Tone Extension on a connection. | E | C.26 | |
5.1 | The HCI_LE_Set_Connectionless_CTE_Transmit_Enable command will request the Controller to enable or disable sending packets containing a Constant Tone Extension. | E | C.27 | |
5.1 | The HCI_LE_Set_Connectionless_CTE_Transmit_Parameters command will set the antenna-switching pattern and switching and sampling slot durations for the transmission of Constant Tone Extensions. | E | C.27 | |
5.1 | The HCI_LE_Set_Connectionless_IQ_Sampling_Enable command will request the Controller to enable or disable taking IQ samples from the Constant Tone Extension of advertising packets. | E | C.28 | |
4.2 | The HCI_LE_Set_Data_Length command is used to suggest maximum packet sizes to the Controller. | E | C.8 | |
5.3 | The HCI_LE_Set_Data_Related_Address_Changes command specifies circumstances when the Controller shall refresh any Resolvable Private Address used by an advertising set, whether or not the address timeout period has been reached. | E | C.10 | |
LE Set Default Periodic Advertising Sync Transfer Parameters command | 5.1 | The HCI_LE_Set_Default_Periodic_Advertising_Sync_Transfer_Parameters command is used to specify the default behavior of the Controller when periodic advertising synchronization information is received from a connected Controller. | E | C.35 |
5.0 | The HCI_LE_Set_Default_PHY command is used to configure preferred PHYs for new connections for the local device. | E | C.11 | |
5.3 | The HCI_LE_Set_Default_Subrate command sets the range of the min and max subrates and other subrate parameters on a Central that may be requested by a Peripheral. | E | C.57 | |
4.0 | The HCI_LE_Set_Event_Mask command is used to control which events are generated by the HCI for the Host. | E | M | |
5.0 | The HCI_LE_Set_Extended_Advertising_Data command will set the advertising data transmitted when advertising. | E | C.17 | |
5.0 | The HCI_LE_Set_Extended_Advertising_Enable command will enable or disable advertising. | E | C.17 | |
5.0 5.4 | The HCI_LE_Set_Extended_Advertising_Parameters command will set the parameters used for advertising. | E | [v1] C.65 [v2] C.66 | |
5.0 | The HCI_LE_Set_Extended_Scan_Enable command will enable or disable scanning on the primary advertising physical channels. | E | C.19 | |
5.0 | The HCI_LE_Set_Extended_Scan_Parameters command will set the parameters used for scanning on the primary advertising physical channel. | E | C.19 | |
5.0 | The HCI_LE_Set_Extended_Scan_Response_Data command will set the data transmitted in a scan response. | E | C.17 | |
4.0 | The HCI_LE_Set_Host_Channel_Classification command allows the Host to specify a channel classification based on its “local information”. | E | C.36 | |
5.2 | The HCI_LE_Set_Host_Feature command is used to set or clear a bit controlled by the Host in the Link Layer FeatureSet stored in the Controller. | E | C.49 | |
5.2 | The HCI_LE_Set_Path_Loss_Reporting_Enable command is used to enable or disable path loss reporting events for an ACL connection. | E | C.52 | |
5.2 | The HCI_LE_Set_Path_Loss_Reporting_Parameters command is used to set the path loss threshold and related parameters used to trigger reports for an ACL connection. | E | C.52 | |
5.0 | The HCI_LE_Set_Periodic_Advertising_Data command will set the periodic advertising data transmitted when advertising. | E | C.18 | |
5.0 | The HCI_LE_Set_Periodic_Advertising_Enable command will enable or disable periodic advertising. | E | C.18 | |
5.0 5.4 | The HCI_LE_Set_Periodic_Advertising_Parameters command will set the parameters used for periodic advertising. | E | [v1] C.18 [v2] C.67 | |
5.1 | The HCI_LE_Set_Periodic_Advertising_Receive_Enable command will enable or disable periodic advertising reports once synchronized. | E | C.32 | |
5.4 | The HCI_LE_Set_Periodic_Advertising_Response_Data command is used to set the data for a response slot. | E | C.68 | |
5.4 | The HCI_LE_Set_Periodic_Advertising_Subevent_Data command is used to send subevent data for one or more subevents. | E | C.67 | |
5.4 | The HCI_LE_Set_Periodic_Sync_Subevent command is used to configure the subset of subevents a device will synchronize with. | E | C.68 | |
LE Set Periodic Advertising Sync Transfer Parameters command | 5.1 | The HCI_LE_Set_Periodic_Advertising_Sync_Transfer_Parameters command is used to allow the Host to specify the behavior of the Controller when periodic advertising synchronization information is received from a connected Controller. | E | C.35 |
5.0 | The HCI_LE_Set_PHY command is used to request a change of the PHY for a Connection_Handle. | E | C.11 | |
5.0 | The HCI_LE_Set_Privacy_Mode command is used to allow the Host to specify the privacy mode for an entry on the resolving list. | E | C.9 | |
4.0 | The HCI_LE_Set_Random_Address command will set the Random Device Address that may be used in a packet sent on the advertising physical channel. | E | C.1 | |
4.2 | The HCI_LE_Set_Resolvable_Private_Address_Timeout sets the length of time the Controller uses a random private address before a new random private address is generated and starts being used. | E | C.9 | |
4.0 | The HCI_LE_Set_Scan_Enable command will enable or disable scanning. | E | C.98 | |
4.0 | The HCI_LE_Set_Scan_Parameters command will set the parameters used for scanning. | E | C.98 | |
4.0 | The HCI_LE_Set_Scan_Response_Data command will set the data transmitted in a scan response. | E | C.15 | |
5.2 | The HCI_LE_Set_Transmit_Power_Reporting_Enable command is used to enable or disable reporting to the local Host of transmit power level changes on an ACL connection. | E | C.51 | |
5.2 | The HCI_LE_Setup_ISO_Data_Path command identifies and creates the isochronous data path between the Host and the Controller and optionally configures the codec in the Controller. | E | C.47 | |
5.3 | The HCI_LE_Subrate_Change event indicates that a new subrate factor has been applied to an existing ACL connection. | E | C.57 | |
5.3 | The HCI_LE_Subrate_Request command modifies an existing ACL connection by applying a subrate factor. | E | C.57 | |
5.2 | The HCI_LE_Terminate_BIG command terminates the transmission of all BISes of a BIG or cancels the process of creating a BIG. | E | C.41 | |
5.2 | The HCI_LE_Terminate_BIG_Complete event indicates that the transmission of all the BISes in the BIG have been terminated. | E | C.41 | |
4.0 | The HCI_LE_Test_End command will end the current the receiver or transmitter test. | E | M | |
5.2 | The HCI_LE_Transmit_Power_Reporting event is used to report the transmit power level on the ACL connection. | E | C.51 | |
4.0 5.0 5.1 5.2 | The HCI_LE_Transmitter_Test command will run the LE transmitter test. | E | [v1] C.1 [v2] C.12 [v3] C.29 [v4] C.53 | |
5.0 | The HCI_LE_Write_RF_Path_Compensation command is used to indicate the RF path gain or loss from the RF transceiver output to the antenna output contributed by intermediate components. | E | C.22 | |
4.2 | The HCI_LE_Write_Suggested_Default_Data_Length command allows the Host to suggest initial MaxTxOctets and MaxTxTime values for new connections. | E | C.8 | |
1.1 | The HCI_Link_Key_Notification event is used to indicate to the Host that a new Link Key has been created for the connection with the BR/EDR Controller specified in BD_ADDR. | M | E | |
1.1 | The HCI_Link_Key_Request event is used to indicate that a Link Key is required for the connection with the device specified in BD_ADDR. | M | E | |
1.1 | The HCI_Link_Key_Request_Negative_Reply command is used to reply to an HCI_Link_Key_Request event from the BR/EDR Controller if the Host does not have a stored Link Key for the connection with the other BR/EDR Controller specified by BD_ADDR. | M | E | |
1.1 | The HCI_Link_Key_Request_Reply command is used to reply to an HCI_Link_Key_Request event from the BR/EDR Controller, and specifies the Link Key stored on the Host to be used as the link key for the connection with the other BR/EDR Controller specified by BD_ADDR. | M | E | |
1.1 | The HCI_Link_Key_Selection command is used to force both BR/EDR Controllers of a connection associated to the Connection_Handle to use the temporary link key of the Central or the regular link keys. | C.215 | E | |
1.1 | The HCI_Link_Key_Type_Changed event is used to indicate that the change in the temporary Link Key or in the semi-permanent link keys on the Bluetooth Central side has been completed. | C.215 | E | |
2.1 + EDR | The HCI_Link_Supervision_Timeout_Changed event indicates that the remote device changed the Link Supervision Timeout. | M | E | |
1.1 | The HCI_Loopback_Command event is used to loop back all commands that the Host sends to the BR/EDR Controller with some exceptions. | C.123 | E | |
1.1 | The HCI_Max_Slots_Change event is used to indicate a change in the max slots by the LM. | C.132 | E | |
1.1 | The HCI_Mode_Change event is used to indicate that the current mode has changed. | C.144 | E | |
3.0 + HS | The HCI_Number_Of_Completed_Data_Blocks event is used by the Controller to indicate to the Host how many HCI ACL Data packets have been completed and how many data block buffers have been freed for each Handle since the previous HCI_Number_Of_Completed_Data_Blocks event was sent. | C.124 | E | |
1.1 | The HCI_Number_Of_Completed_Packets event is used by the Controller to indicate to the Host how many HCI Data packets have been completed for each Connection_Handle since the previous HCI_Number_Of_Completed_Packets event was sent. | M | C.3 | |
1.1 | The HCI_Page_Scan_Repetition_Mode_Change event indicates that the connected remote BR/EDR Controller with the specified Connection_Handle has successfully changed the Page Scan Repetition Mode (SR). | O | E | |
1.1 | The HCI_Periodic_Inquiry_Mode command is used to configure the BR/EDR Controller to perform an automatic Inquiry based on a specified period range. | C.128 | E | |
CSA4 | The HCI_Peripheral_Page_Response_Timeout event indicates to the Host that the pagerespTO has been exceeded on the BR/EDR Controller after the Controller responded to an ID packet. | O | E | |
1.1 | The HCI_PIN_Code_Request event is used to indicate that a PIN code is required to create a new link key for a connection. | M | E | |
1.1 | The HCI_PIN_Code_Request_Negative_Reply command is used to reply to an HCI_PIN_Code_Request event from the Controller when the Host cannot specify a PIN code to use for a connection. | M | E | |
1.1 | The HCI_PIN_Code_Request_Reply command is used to reply to an HCI_PIN_Code_Request event from the Controller and specifies the PIN code to use for a connection. | M | E | |
1.1 | The HCI_QoS_Setup command is used to specify Quality of Service parameters for a Connection_Handle. | M | E | |
1.1 | The HCI_QoS_Setup_Complete event is used to indicate that QoS is set up. | M | E | |
1.1 | The HCI_QoS_Violation event is used to indicate the Controller’s Link Manager is unable to provide the current QoS requirement for the Handle. | M | E | |
1.2 | The HCI_Read_AFH_Channel_Assessment_Mode command will read the value for the AFH Channel Classification Mode parameter. This value is used to enable or disable the Controller’s channel assessment scheme. | C.140 | C.58 | |
1.2 | The HCI_Read_AFH_Channel_Map command will read the current state of the channel map for a connection. | C.139 | E | |
4.1 | The HCI_Read_Authenticated_Payload_Timeout command is used to read the Authenticated Payload Timeout parameter, which is used to set the maximum time between packets being received from the remote device without a valid MIC. | C.155 | C.155 | |
1.1 | The HCI_Read_Authentication_Enable command will read the value for the Authentication Enable parameter, which controls whether the Bluetooth device will require authentication for each connection with other Bluetooth devices. | C.111 | E | |
1.1 | The HCI_Read_Automatic_Flush_Timeout command will read the value for the Flush Timeout configuration parameter for the specified Connection_Handle. The Flush Timeout parameter is only used for ACL connections. | M | E | |
1.1 | The HCI_Read_BD_ADDR command will read the value for the BD_ADDR parameter. | M | M | |
1.1 | The HCI_Read_Buffer_Size command returns the size of the HCI buffers. These buffers are used by the Controller to buffer data that is to be transmitted. | M | E | |
1.1 | The HCI_Read_Class_of_Device command will read the value for the Class of Device configuration parameter, which is used to indicate its capabilities to other devices. | M | E | |
1.2 | The HCI_Read_Clock command will read an estimate of a piconet or the local Bluetooth Clock. | O | E | |
1.1 | The HCI_Read_Clock_Offset command allows the Host to read the clock offset of remote BR/EDR Controllers. | O | E | |
1.1 | The HCI_Read_Clock_Offset_Complete event is used to indicate the completion of the process of the LM obtaining the Clock offset information. | C.104 | E | |
1.1 | The HCI_Read_Connection_Accept_Timeout command will read the value for the Connection Accept Timeout configuration parameter, which allows the Controller to automatically deny a connection request after a specified period has occurred, and to refuse a new connection. | M | C.40 | |
1.1 | The HCI_Read_Current_IAC_LAP command will read the LAP(s) used to create the Inquiry Access Codes (IAC) that the local BR/EDR Controller is simultaneously scanning for during Inquiry Scans. | C.125 | E | |
3.0 + HS | The HCI_Read_Data_Block_Size command returns the maximum size of the HCI buffers. These buffers are used by the Controller to buffer data that is to be transmitted. | C.124 | E | |
2.1 + EDR | The HCI_Read_Default_Erroneous_Data_Reporting command will read the value for the Erroneous Data Reporting configuration parameter, which controls whether the BR/EDR Controller will provide data for every (e)SCO interval, with the Packet_Status_Flag in HCI Synchronous Data packets set according to HCI Synchronous Data packets. | C.112 | E | |
1.2 | The HCI_Read_Default_Link_Policy_Settings command will read the Default Link Policy configuration parameter for all new connections. | C.141 | E | |
3.0 + HS | The HCI_Read_Encryption_Key_Size command is used to read the encryption key size on a given Connection_Handle. | M | E | |
3.0 + HS | The HCI_Read_Enhanced_Transmit_Power_Level command will read the values for the GFSK, π/4-DQPSK and 8DPSK Transmit Power Level parameters for the specified Connection_Handle. | C.217 | E | |
4.1 | The HCI_Read_Extended_Inquiry_Length command is used to read the Extended Inquiry Length parameter from the Controller. | C.113 | E | |
2.1 + EDR | The HCI_Read_Extended_Inquiry_Response command will read the data that the BR/EDR Controller sends in the extended inquiry response packet during inquiry response. | C.205 | E | |
4.1 | The HCI_Read_Extended_Page_Timeout command is used to read the Extended Page Timeout parameter from the Controller. | C.114 | E | |
1.1 | The HCI_Read_Failed_Contact_Counter command will read the value for the Failed Contact Counter configuration parameter for a particular connection to another device. | M | E | |
3.0 + HS | The HCI_Read_Flow_Control_Mode command returns the value of the Flow_Control_Mode configuration parameter supported by this Controller. | C.124 | E | |
1.1 | The HCI_Read_Hold_Mode_ Activity command is used to read which activities should be suspended when the BR/EDR Controller is in Hold mode. | C.213 | E | |
1.2 | The HCI_Read_Inquiry_Mode command is used to read the Inquiry Mode configuration parameter of the local BR/EDR Controller. | C.115 | E | |
2.1 + EDR | The HCI_Read_Inquiry_Response_Transmit_Power_Level command will read the inquiry response Transmit Power level used to transmit the FHS and EIR data packets. This can be used directly in the Tx Power Level EIR data type. | C.125 | E | |
1.1 | The HCI_Read_Inquiry_Scan_Activity command will read the value for Inquiry Scan Interval and Inquiry Scan Window configuration parameters. Inquiry Scan Interval defines the amount of time between consecutive inquiry scans. Inquiry Scan Window defines the amount of time for the duration of the inquiry scan. | C.125 | E | |
1.2 | The HCI_Read_Inquiry_Scan_Type command is used to read the Inquiry Scan Type configuration parameter of the local BR/EDR Controller. The Inquiry Scan Type configuration parameter can set the inquiry scan to either normal or interlaced scan. | C.125 | E | |
4.0 | The HCI_Read_LE_Host_Support command reads the LE Supported Host setting from the BR/EDR Controller. | C.116 | E | |
1.1 | The HCI_Read_Link_Policy_Settings command will read the Link Policy configuration parameter for the specified Connection_Handle. The Link Policy settings allow the Host to specify which Link Modes the Link Manager can use for the specified Connection_Handle. | C.141 | E | |
1.1 | The HCI_Read_Link_Quality command will read the value for the Link Quality for the specified Connection_Handle. | O | E | |
1.1 | The HCI_Read_Link_Supervision_Timeout command will read the value for the Link Supervision Timeout configuration parameter for the device. This parameter is used by the Controller to determine link loss. | C.117 | E | |
1.2 | The HCI_Read_LMP_Handle command will read the current LMP Handle associated with the Connection_Handle. | C.134 | E | |
1.2 | The HCI_Read_Local_Extended_Features command requests a list of the supported extended features for the local device. | C.220 | E | |
1.1 | The HCI_Read_Local_Name command provides the ability to read the stored user-friendly name for the BR/EDR Controller. | M | E | |
2.1 + EDR | The HCI_Read_Local_OOB_Data command is used to obtain a Secure Simple Pairing Hash C and Randomizer R which are intended to be transferred to a remote device using an OOB mechanism. | M | E | |
4.1 | The HCI_Read_Local_OOB_Extended_Data command is used to obtain a Secure Simple Pairing Hash C and Randomizer R associated with both P-192 and P-256 public keys, which are intended to be transferred to a remote device using an OOB mechanism. | C.142 | E | |
Erratum 10734 | The HCI_Read_Local_Simple_Pairing_Options command is used to read the Secure Simple Pairing options and the maximum encryption key size supported. | O | E | |
5.2 | The HCI_Read_Local_Supported_Codec_Capabilities command is used by a Host to query codec capabilities. | C.156 | C.156 | |
CSA2 5.2 | The HCI_Read_Local_Supported_Codecs command is used by a Host to query a Controller’s supported codecs. | [v1] C.157 [v2] O | [v1] E [v2] O | |
1.2 | The HCI_Read_Local_Supported_Commands command requests a list of the supported HCI commands for the local device. | M | M | |
5.2 | The HCI_Read_Local_Supported_Controller_Delay command is used by a Host to query a range of supported Controller delays for a given codec configuration. | C.156 | C.156 | |
1.1 | The HCI_Read_Local_Supported_Features command requests a list of the supported features for the local device. | M | M | |
1.1 | The HCI_Read_Local_Version_Information command will read the version information for the local Controller. | M | M | |
1.1 | The HCI_Read_Loopback_Mode command will read the value for the setting of the BR/EDR Controller’s Loopback Mode. The setting of the Loopback Mode will determine the path of information. | C.123 | E | |
1.1 | The HCI_Read_Num_Broadcast_Retransmissions command will read the parameter value for the Number of Broadcast Retransmissions for the BR/EDR Controller. | C.118 | E | |
1.1 | The HCI_Read_Number_Of_Supported_IAC command will read the value for the number of Inquiry Access Codes (IAC) that the local BR/EDR Controller can simultaneously listen for during an Inquiry Scan. | C.125 | E | |
1.1 | The HCI_Read_Page_Scan_Activity command will read the values for the Page Scan Interval and Page Scan Window configuration parameters. Page Scan Interval defines the amount of time between consecutive page scans. Page Scan Window defines the duration of the page scan. | M | E | |
1.2 | The HCI_Read_Page_Scan_Type command is used to read the page scan type of the local BR/EDR Controller. The Page Scan Type configuration parameter can set the page scan to either normal or interlaced scan. | C.119 | E | |
1.1 | The HCI_Read_Page_Timeout command will read the value for the Page Reply Timeout configuration parameter, which determines the time the BR/EDR Controller will wait for the remote device to respond to a connection request before the local device returns a connection failure. | M | E | |
1.1 | The HCI_Read_PIN_Type command is used for the Host to read the value that is specified to indicate whether the Host supports variable PINs or only fixed PINs. | C.120 | E | |
1.2 | The HCI_Read_Remote_Extended_Features command requests a list of the supported extended features of a remote device. | C.220 | E | |
1.2 | The HCI_Read_Remote_Extended_Features_Complete event is used to indicate the completion of the process of the Link Manager obtaining the supported Extended features of the remote BR/EDR Controller specified by the Connection_Handle event parameter. | C.220 | E | |
1.1 | The HCI_Read_Remote_Supported_Features command requests a list of the supported features of a remote device. | M | E | |
1.1 | The HCI_Read_Remote_Supported_Features_Complete event is used to indicate the completion of the process of the Link Manager obtaining the supported features of the remote BR/EDR Controller specified by the Connection_Handle event parameter. | M | E | |
1.1 | The HCI_Read_Remote_Version_Information command will read the values for the version information for the remote device associated with the Connection_Handle. | O | C.3 | |
1.1 | The HCI_Read_Remote_Version_Information_Complete event is used to indicate the completion of the process of the Link Manager obtaining the version information of the remote device associated with the Connection_Handle event parameter. | C.105 | C.3 | |
1.1 | The HCI_Read_RSSI command will read the value for the Received Signal Strength Indication (RSSI) for a Connection_Handle to another Controller. | O | C.3 | |
1.1 | The HCI_Read_Scan_Enable command will read the value for the Scan Enable configuration parameter, which controls whether or not the BR/EDR Controller will periodically scan for page attempts and/or inquiry requests from other BR/EDR Controllers. | M | E | |
4.1 | The HCI_Read_Secure_Connections_Host_Support command is used to read the Secure Connections Host Supports parameter from the Controller. | C.218 | E | |
2.1 + EDR | The HCI_Read_Simple_Pairing_Mode command reads the Secure Simple Pairing mode setting in the BR/EDR Controller. | M | E | |
1.1 | The HCI_Read_Stored_Link_Key command provides the ability to read whether one or more link keys are stored in the Controller. | C.121 | E | |
CSA4 | The HCI_Read_Synchronization_Train_Parameters command returns the currently configured values for the Synchronization Train functionality in the BR/EDR Controller. | C.201 | E | |
1.1 | The HCI_Read_Synchronous_Flow_Control_Enable command provides the ability to read the Synchronous Flow Control Enable setting. By using this setting, the Host can decide if the Controller will send HCI_Number_Of_Completed_Packets events for synchronous Connection_Handles. | C.122 | E | |
1.1 | The HCI_Read_Transmit_Power_Level command will read the values for the Transmit Power Level parameter for the specified Connection_Handle. | C.152 | C.3 | |
1.1 | The HCI_Read_Voice_Setting command will read the values for the Voice Setting configuration parameter, which controls all the various settings for the voice connections. | C.134 | E | |
CSA4 | The HCI_Receive_Synchronization_Train command requests synchronization with the specified Connectionless Peripheral Broadcast transmitter. | C.202 | E | |
2.1 + EDR | The HCI_Refresh_Encryption_Key command is used by the Host to cause the Controller to refresh the encryption key by pausing and resuming encryption | M | E | |
1.1 | The HCI_Reject_Connection_Request command is used to decline a new incoming BR/EDR connection request. | M | E | |
1.2 | The HCI_Reject_Synchronous_Connection_Request command is used to decline an incoming request for a synchronous link. | C.134 | E | |
2.1 + EDR | The HCI_Remote_Host_Supported_Features_Notification event is used to return the LMP extended features page containing the Host features. | C.106 | E | |
1.2 | The HCI_Remote_Name_Request_Cancel command is used to cancel an ongoing Remote Name Request. | C.106 | E | |
1.1 | The HCI_Remote_Name_Request command is used to obtain the user-friendly name of another BR/EDR Controller. | O | E | |
1.1 | The HCI_Remote_Name_Request_Complete event is used to indicate a remote name request has been completed. | C.106 | E | |
2.1 + EDR | The HCI_Remote_OOB_Data_Request event is used to indicate that the Secure Simple Pairing Hash C and Randomizer R is required for the Secure Simple Pairing process involving the device identified by BD_ADDR. | M | E | |
2.1 + EDR | The HCI_Remote_OOB_Data_Request_Negative_Reply command is used to reply to an HCI_Remote_OOB_Data_Request event that the Host does not have the C and R | M | E | |
2.1 + EDR | The HCI_Remote_OOB_Data_Request_Reply command is used to reply to an HCI_Remote_OOB_Data_Request event with the C and R values received via an OOB transfer from a remote BR/EDR Controller identified by BD_ADDR. | M | E | |
4.1 | The HCI_Remote_OOB_Extended_Data_Request_Reply command is used to reply to an HCI_Remote_OOB_Data_Request event with the C and R values received via an OOB transfer from a remote BR/EDR Controller identified by the BD_ADDR. | C.142 | E | |
1.1 | For a BR/EDR Controller, the HCI_Reset command resets HCI, the Link Manager, and the Bluetooth radio. For an LE Controller, the HCI_Reset command resets HCI, the Link Layer, and LE PHY. | M | M | |
1.1 | The HCI_Reset_Failed_Contact_Counter command will reset the value for the Failed Contact Counter configuration parameter for a particular connection to another device. | M | E | |
1.1 | The HCI_Return_Link_Keys event is used to return stored link keys after an HCI_Read_Stored_Link_Key command is used. | C.121 | E | |
1.1 | The HCI_Role_Change event is used to indicate that the current BR/EDR Controller role related to the particular connection has been changed. | C.212 | E | |
1.1 | The HCI_Role_Discovery command is used for a BR/EDR Controller to determine which role the device is performing for a particular Connection_Handle. | O | E | |
5.0 | The HCI_SAM_Status_Change event is used to indicate that either the local or remote SAM slot map on a particular connection has been changed. | C.219 | E | |
2.1 + EDR | The HCI_Send_Keypress_Notification command is used during the Passkey Entry protocol by a device with KeyboardOnly IO capabilities. It is used by a Host to inform the remote device when keys have been entered or erased. | M | E | |
1.2 | The HCI_Set_AFH_Host_Channel_Classification command allows the Host to specify a channel classification based on its “local information”. | C.140 | E | |
1.1 | The HCI_Set_Connection_Encryption command is used to enable and disable the link level encryption. | M | E | |
CSA4 | The HCI_Set_Connectionless_Peripheral_Broadcast command controls Connectionless Peripheral Broadcast functionality (for transmission) in the BR/EDR Controller including enabling and disabling the broadcast. | C.201 | E | |
CSA4 | The HCI_Set_Connectionless_Peripheral_Broadcast_Data command is used by the Host to set Connectionless Peripheral Broadcast data in the BR/EDR Controller. | C.201 | E | |
CSA4 | The HCI_Set_Connectionless_Peripheral_Broadcast_Receive command enables and disables Connectionless Peripheral Broadcast reception in the BR/EDR Controller. | C.202 | E | |
1.1 | The HCI_Set_Controller_To_Host_Flow_Control command is used by the Host to turn flow control on or off in the direction from the Controller to the Host. | O | C.96 | |
5.2 | The HCI_Set_Ecosystem_Base_Interval command indicates to the Controller the base interval of the ecosystem. | O | O | |
1.1 | The HCI_Set_Event_Filter command is used by the Host to specify different event filters. The Host may issue this command multiple times to request various conditions for the same type of event filter and for different types of event filters. | C.148 | E | |
1.1 | The HCI_Set_Event_Mask command is used to control which events are generated by the HCI for the Host. | M | M | |
3.0 + HS | The HCI_Set_Event_Mask_Page 2 command is used to control which events are generated by the HCI for the Host. | C.145 | C.145 | |
CSA3 | The HCI_Set_External_Frame_Configuration command enables an external device to describe a frame structure to the Controller. | C.108 | O | |
5.3 | The HCI_Set_Min_Encryption_Key_Size command is used to modify the minimum encryption key size that may be negotiated by the Controller. | O | E | |
CSA3 | The HCI_Set_MWS_Channel_Parameters command enables an MWS device to inform the Controller about the MWS channel configuration. | O | O | |
CSA3 | The HCI_Set_MWS_Scan_Frequency_Table command specifies the frequencies represented by the frequency index supplied by the MWS_SCAN_FREQUENCY signal. | O | O | |
CSA3 | The HCI_Set_MWS_Signaling command enables an MWS device to inform the Controller about the timing parameters for the MWS coexistence interface. | O | O | |
CSA3 | The HCI_Set_MWS_Transport_Layer command selects the MWS coexistence signaling transport layer in the Controller. | C.109 | C.109 | |
CSA3 | The HCI_Set_MWS_PATTERN_Configuration command specifies the configuration of the pattern indicated over the MWS Coexistence Transport Layer. | C.136 | E | |
CSA4 | The HCI_Set_Reserved_LT_ADDR command requests that the BR/EDR Controller reserve a specific LT_ADDR for the purposes of Connectionless Peripheral Broadcast. | C.201 | E | |
CSA4 | The HCI_Set_Triggered_Clock_Capture command is used to configure the Controller to return events containing an estimate of a piconet or the local Bluetooth clock. | O | E | |
1.2 | The HCI_Setup_Synchronous_Connection command adds a new or modifies an existing synchronous logical transport (SCO or eSCO) on a physical link depending on the Connection_Handle parameter specified. | C.134 | E | |
2.1 + EDR | The HCI_Simple_Pairing_Complete event is used to indicate that the Secure Simple Pairing process has completed. | M | E | |
1.1 | The HCI_Sniff_Mode command is used to alter the behavior of the LM and have the LM place the local or remote device into Sniff mode. | C.214 | E | |
2.1 + EDR | The HCI_Sniff_Subrating command is used to configure the sniff subrating parameters in the local device. | C.221 | E | |
2.1 + EDR | The HCI_Sniff_Subrating event is used to inform the Host of the local and remote transmit and receive latencies. | C.221 | E | |
CSA4 | The HCI_Start_Synchronization_Train command enables the Synchronization Train on the BR/EDR Controller using the currently configured Synchronization Train parameters. | C.201 | E | |
1.1 | The HCI_Switch_Role command is used to switch Central and Peripheral roles of the devices on either side of a connection. | C.212 | E | |
CSA4 | The HCI_Synchronization_Train_Complete event indicates that the Synchronization Train has completed. | C.201 | E | |
CSA4 | The HCI_Synchronization_Train_Received event provides the status of Synchronization Train packets received from the device with the given BD_ADDR. | C.202 | E | |
1.2 | The HCI_Synchronous_Connection_Changed event indicates to the Host that an existing synchronous connection has been reconfigured. | C.134 | E | |
1.2 | The HCI_Synchronous_Connection_Complete event indicates to both the Hosts that a new synchronous connection has been established. | C.134 | E | |
CSA4 | The HCI_Triggered_Clock_Capture event reports the Bluetooth clock when an external trigger occurred. | C.110 | E | |
CSA4 | The HCI_Truncated_Page_Cancel command is used to cancel an ongoing Truncated Page. | C.129 | E | |
CSA4 | The HCI_Truncated_Page command will cause the BR/EDR Controller to page the BR/EDR Controller with the BD_ADDR specified by the command parameters and abort the page sequence after receiving the ID response packet. | C.129 | E | |
CSA4 | The HCI_Truncated_Page_Complete event indicates to the Host that a Truncated Page has completed. | C.129 | E | |
2.1 + EDR | The HCI_User_Confirmation_Request event is used to indicate that user confirmation of a numeric value is required. | M | E | |
2.1 + EDR | The HCI_User_Confirmation_Request_Negative_Reply command is used to reply to an HCI_User_Confirmation_Request event and indicates that the user selected “no”. This command will terminate Secure Simple Pairing. | M | E | |
2.1 + EDR | The HCI_User_Confirmation_Request_Reply command is used to reply to an HCI_User_Confirmation_Request event and indicates that the user selected “yes”. It is also used when the Host has no input and no output capabilities. | M | E | |
2.1 + EDR | The HCI_User_Passkey_Notification event is used to provide a passkey for the Host to display to the user as required as part of a Secure Simple Pairing process. | M | E | |
2.1 + EDR | The HCI_User_Passkey_Request event is used to indicate that a passkey is required as part of a Secure Simple Pairing process. | M | E | |
2.1 + EDR | The HCI_User_Passkey_Request_Negative_Reply command is used to reply to an HCI_User_Passkey_Request event and indicates the Host could not provide a passkey. This command will terminate Secure Simple Pairing. | M | E | |
2.1 + EDR | The HCI_User_Passkey_Request_Reply command is used to reply to an HCI_User_Passkey_Request event and specifies the Numeric_Value (passkey) entered by the user to be used in the Secure Simple Pairing process. | M | E | |
1.2 | The HCI_Write_AFH_Channel_Assessment_Mode command will write the value for the Channel Classification Mode configuration parameter. This value is used to enable or disable the Controller’s channel assessment scheme. | C.140 | C.58 | |
4.1 | The HCI_Write_Authenticated_Payload_Timeout command is used to write the Authenticated Payload Timeout parameter, which is used to set the maximum time between packets being received from the remote device without a valid MIC. | C.151 | C.7 | |
1.1 | The HCI_Write_Authentication_Enable command will write the value for the Authentication Enable parameter, which controls whether the Bluetooth device will require authentication for each connection with other Bluetooth devices. | O | E | |
1.1 | The HCI_Write_Automatic_Flush_Timeout command will write the value for the Flush Timeout configuration parameter for the specified Connection_Handle. The Flush Timeout parameter is only used for ACL connections. | M | E | |
1.1 | The HCI_Write_Class_of_Device command will write the value for the Class_of_Device configuration parameter, which is used to indicate its capabilities to other devices. | M | E | |
1.1 | The HCI_Write_Connection_Accept_Timeout command will write the value for the Connection Accept Timeout configuration parameter, which allows the Controller to automatically deny a connection request after a specified period has occurred, and to refuse a new connection. | M | C.40 | |
1.1 | The HCI_Write_Current_IAC_LAP command will write the LAP(s) used to create the Inquiry Access Codes (IAC) that the local BR/EDR Controller is simultaneously scanning for during Inquiry Scans. | C.125 | E | |
2.1 + EDR | The HCI_Write_Default_Erroneous_Data_Reporting command will write the value for the Erroneous Data Reporting configuration parameter, which controls whether the Bluetooth Controller will provide data for every (e)SCO interval, with the Packet_Status_Flag in HCI Synchronous Data packets set according to HCI Synchronous Data packets. | C.135 | E | |
1.2 | The HCI_Write_Default_Link_Policy_Settings command will write the Default Link Policy configuration parameter for all new connections. | C.141 | E | |
4.1 | The HCI_Write_Extended_Inquiry_Length command is used to write the Extended Inquiry Length parameter to the Controller. | C.128 | E | |
2.1 + EDR | The HCI_Write_Extended_Inquiry_Response command will write the data that the BR/EDR Controller sends in the extended inquiry response packet during inquiry response. | C.205 | E | |
4.1 | The HCI_Write_Extended_Page_Timeout command is used to write the Extended Page Timeout parameter to the Controller. | O | E | |
3.0 + HS | The HCI_Write_Flow_Control_Mode command sets the value of the Flow_Control_Mode configuration parameter for this Controller. | C.124 | E | |
1.1 | The HCI_Write_Hold_Mode_Activity command is used to write which activities should be suspended when the BR/EDR Controller is in Hold mode. | C.213 | E | |
1.2 | The HCI_Write_Inquiry_Mode command is used to write the Inquiry Mode configuration parameter of the local BR/EDR Controller. | C.146 | E | |
1.1 | The HCI_Write_Inquiry_Scan_Activity command will write the value for Inquiry Scan Interval and Inquiry Scan Window configuration parameters. Inquiry Scan Interval defines the amount of time between consecutive inquiry scans. Inquiry Scan Window defines the amount of time for the duration of the inquiry scan. | C.125 | E | |
1.2 | The HCI_Write_Inquiry_Scan_Type command is used to write the Inquiry Scan Type configuration parameter of the local BR/EDR Controller. The Inquiry Scan Type configuration parameter can set the inquiry scan to either normal or interlaced scan. | C.125 | E | |
2.1 + EDR | The HCI_Write_Inquiry_Transmit_Power_Level command is used to write the transmit power level used to transmit the inquiry (ID) data packets. | C.127 | E | |
4.0 | The HCI_Write_LE_Host_Support command writes the LE Supported Host setting to the BR/EDR Controller. | C.153 | E | |
1.1 | The HCI_Write_Link_Policy_Settings command will write the Link Policy configuration parameter for the specified Connection_Handle. The Link Policy settings allow the Host to specify which Link Modes the Link Manager can use for the specified Connection_Handle. | C.141 | E | |
1.1 | The HCI_Write_Link_Supervision_Timeout command will write the value for the Link Supervision Timeout configuration parameter for the device. This parameter is used by the Controller to determine link loss. | O | E | |
1.1 | The HCI_Write_Local_Name command provides the ability to modify the user-friendly name for the BR/EDR Controller. | M | E | |
1.1 | The HCI_Write_Loopback_Mode command will write the value for the setting of the BR/EDR Controllers Loopback Mode. The setting of the Loopback Mode will determine the path of information. | C.123 | E | |
1.1 | The HCI_Write_Num_Broadcast_Retransmissions command will write the parameter value for the Number of Broadcast Retransmissions for the BR/EDR Controller. | O | E | |
1.1 | The HCI_Write_Page_Scan_Activity command will write the value for Page Scan Interval and Page Scan Window configuration parameters. Page Scan Interval defines the amount of time between consecutive page scans. Page Scan Window defines the duration of the page scan. | M | E | |
1.2 | The HCI_Write_Page_Scan_Type command is used to write the page scan type of the local BR/EDR Controller. The Page Scan Type configuration parameter can set the page scan to either normal or interlaced scan. | C.154 | E | |
1.1 | The HCI_Write_Page_Timeout command will write the value for the Page Reply Timeout configuration parameter, which allows the BR/EDR Controller to define the amount of time a connection request will wait for the remote device to respond before the local device returns a connection failure. | M | E | |
1.1 | The HCI_Write_PIN_Type command is used for the Host to specify whether the Host supports variable PIN or only fixed PINs. | O | E | |
1.1 | The HCI_Write_Scan_Enable command will write the value for the Scan Enable configuration parameter, which controls whether or not the BR/EDR Controller will periodically scan for page attempts and/or inquiry requests from other BR/EDR Controllers. | M | E | |
4.1 | The HCI_Write_Secure_Connections_Host_Support command is used to write the Secure Connections Host Supports parameter to the Controller. | C.218 | E | |
4.1 | The HCI_Write_Secure_Connections_Test_Mode command is used to put the Controller in a test mode where DM1 packets are not allowed to be used for ACL-U traffic and/or the contents of eSCO payloads can be looped back. | C.138 | E | |
2.1 + EDR | The HCI_Write_Simple_Pairing_Debug_Mode command configures the BR/EDR Controller to use a predefined Diffie Hellman private key for Secure Simple Pairing to enable debug equipment to monitor the encrypted connection. | M | E | |
2.1 + EDR | The HCI_Write_Simple_Pairing_Mode command writes the Secure Simple Pairing mode setting in the BR/EDR Controller. | M | E | |
1.1 | The HCI_Write_Stored_Link_Key command provides the ability to write one or more link keys to be stored in the Controller. | O | E | |
CSA4 | The HCI_Write_Synchronization_Train_Parameters command configures the Synchronization Train functionality in the BR/EDR Controller. | C.201 | E | |
1.1 | The HCI_Write_Synchronous_Flow_Control_Enable command provides the ability to write the Synchronous Flow Control Enable setting. By using this setting, the Host can decide if the Controller will send HCI_Number_Of_Completed_Packets events for synchronous Connection_Handles. | C.135 | E | |
1.1 | The HCI_Write_Voice_Setting command will write the values for the Voice Setting configuration parameter, which controls all the various settings for the voice connections. | C.134 | E |
- C.1:
Mandatory if the LE Controller supports transmitting packets, otherwise excluded.
- C.2:
Mandatory if the LE Controller supports receiving packets, otherwise excluded.
- C.3:
Mandatory if the LE Controller supports Connection State, otherwise excluded.
- C.4:
Mandatory if LE Feature (LE Encryption) is supported, otherwise excluded.
- C.6:
Mandatory if LE Feature (Connection Parameters Request procedure) is supported, otherwise excluded.
- C.7:
Mandatory if LE Feature (LE Encryption) and LE Feature (LE Ping) are supported, otherwise excluded.
- C.8:
Mandatory if LE Feature (LE Data Packet Length Extension) is supported, otherwise optional.
- C.9:
Mandatory if LE Feature (LL Privacy) is supported, otherwise excluded.
- C.10:
Optional if LE Feature (LL Privacy) is supported, otherwise excluded.
- C.11:
Mandatory if LE Feature (LE 2M PHY) or LE Feature (LE Coded PHY) is supported, otherwise optional.
- C.12:
Mandatory if LE Feature (LE 2M PHY) or LE Feature (LE Coded PHY) or LE Feature (Stable Modulation Index - Transmitter) is supported, otherwise optional if the LE Controller supports transmitting packets, otherwise excluded.
- C.13:
Mandatory if LE Feature (LE 2M PHY) or LE Feature (LE Coded PHY) or LE Feature (Stable Modulation Index - Receiver) is supported, otherwise optional if the LE Controller supports receiving packets, otherwise excluded.
- C.15:
Mandatory if LE Controller supports transmitting scannable advertisements, otherwise excluded.
- C.16:
Mandatory if LE Feature (Periodic Advertising) is supported and the LE Controller supports both Scanning State and Synchronization State, otherwise excluded.
- C.17:
Mandatory if LE Feature (Extended Advertising) is supported and the LE Controller supports Advertising State, otherwise excluded.
- C.18:
Mandatory if LE Feature (Periodic Advertising) is supported and the LE Controller supports Advertising State, otherwise excluded.
- C.19:
Mandatory if LE Feature (Extended Advertising) is supported and the LE Controller supports Scanning State, otherwise excluded.
- C.20:
Mandatory if LE Feature (Extended Advertising) is supported and the LE Controller supports Initiating State, otherwise excluded.
- C.21:
Mandatory if LE Feature (Periodic Advertising) is supported and the LE Controller supports Synchronization State, otherwise excluded.
- C.22:
Mandatory if the LE Controller supports sending Transmit Power in advertisements or if LE Feature (LE Power Control Request) is supported, otherwise optional.
- C.23:
Mandatory if LE Feature (LE Channel Selection Algorithm #2) is supported, otherwise excluded.
- C.24:
Mandatory if the LE Controller supports Connection State and either LE Feature (LL Privacy) or LE Feature (Extended Advertising) is supported, otherwise optional if the LE Controller supports Connection State, otherwise excluded.
- C.25:
Mandatory if LE Feature (Connection CTE Request) is supported, otherwise excluded.
- C.26:
Mandatory if LE Feature (Connection CTE Response) is supported, otherwise excluded.
- C.27:
Mandatory if LE Feature (Connectionless CTE Transmitter) is supported, otherwise excluded.
- C.28:
Mandatory if LE Feature (Connectionless CTE Receiver) is supported, otherwise excluded.
- C.29:
Mandatory if LE Feature (Connection CTE Response) or LE Feature (Connectionless CTE Transmitter) is supported, otherwise optional if the LE Controller supports transmitting packets, otherwise excluded.
- C.30:
Mandatory if LE Feature (Connection CTE Request) or LE Feature (Connectionless CTE Receiver) is supported, otherwise optional if the LE Controller supports receiving packets, otherwise excluded.
- C.31:
Mandatory if LE Feature (Connection CTE Request) or LE Feature (Connection CTE Response) or LE Feature (Connectionless CTE Transmitter) or LE Feature (Connectionless CTE Receiver) is supported, otherwise excluded.
- C.32:
Mandatory if LE Feature (Periodic Advertising Sync Transfer – Recipient) is supported, otherwise optional if LE Feature (Periodic Advertising) is supported and the LE Controller supports Synchronization State, otherwise excluded.
- C.33:
Mandatory if LE Feature (Periodic Advertising Sync Transfer – Sender) is supported and the LE Controller supports Scanning State, otherwise excluded.
- C.34:
Mandatory if LE Feature (Periodic Advertising Sync Transfer – Sender) is supported and the LE Controller supports Advertising State, otherwise excluded.
- C.35:
Mandatory if LE Feature (Periodic Advertising Sync Transfer – Recipient) is supported, otherwise excluded.
- C.36:
Mandatory if the LE Controller supports Central role or supports both Peripheral role and LE Feature (Channel Classification), otherwise optional if LE Feature (Extended Advertising) is supported and the LE Controller supports Advertising State or if LE Feature (Isochronous Broadcaster) is supported, otherwise excluded.
- C.37:
Mandatory if the LE Controller can change its sleep clock accuracy, otherwise excluded.
- C.38:
Mandatory if LE Feature (Connected Isochronous Stream - Central) or LE Feature (Connected Isochronous Stream - Peripheral) is supported, otherwise excluded.
- C.39:
Mandatory if LE Feature (Connected Isochronous Stream - Central) is supported, otherwise excluded.
- C.40:
Mandatory if LE Feature (Connected Isochronous Stream - Peripheral) is supported, otherwise excluded.
- C.41:
Mandatory if LE Feature (Isochronous Broadcaster) is supported, otherwise excluded.
- C.42:
Mandatory if LE Feature (Synchronized Receiver role) is supported, otherwise excluded.
- C.44:
Mandatory if LE Feature (Sleep Clock Accuracy Updates) and either LE Feature (Connected Isochronous Stream - Central) or LE Feature (Connected Isochronous Stream - Peripheral) are supported, otherwise optional if LE Feature (Sleep Clock Accuracy Updates) is supported, otherwise excluded.
- C.45:
Mandatory if LE Feature (Connected Isochronous Stream - Central), or LE Feature (Connected Isochronous Stream - Peripheral), or LE Feature (Isochronous Broadcaster) is supported, otherwise excluded.
- C.46:
Mandatory if LE Feature (Connected Isochronous Stream - Central), or LE Feature (Connected Isochronous Stream - Peripheral), or LE Feature (Synchronized Receiver role) is supported, otherwise excluded.
- C.47:
Mandatory if LE Feature (Connected Isochronous Stream - Central), or LE Feature (Connected Isochronous Stream - Peripheral), or LE Feature (Isochronous Broadcaster), or LE Feature (Synchronized Receiver role) is supported, otherwise excluded.
- C.49:
Mandatory if LE Feature (Connected Isochronous Stream - Central) or LE Feature (Connected Isochronous Stream - Peripheral) or LE Feature (Connection Subrating) is supported, otherwise optional.
- C.50:
Optional if LE Feature (Connected Isochronous Stream - Central), or LE Feature (Connected Isochronous Stream - Peripheral), or LE Feature (Synchronized Receiver role) is supported, otherwise excluded.
- C.51:
Mandatory if LE Feature (LE Power Control Request) is supported, otherwise excluded.
- C.52:
Mandatory if LE Feature (LE Path Loss Monitoring) is supported, otherwise excluded.
- C.53:
Mandatory if LE Feature (LE Power Control Request) is supported, otherwise optional if the LE Controller supports transmitting packets, otherwise excluded.
- C.54:
Mandatory if LE Feature (Synchronized Receiver) is supported, otherwise optional.
- C.55:
Mandatory if LE Feature (Connected Isochronous Stream - Central), or LE Feature (Connected Isochronous Stream - Peripheral), or LE Feature (Isochronous Broadcaster) is supported, otherwise optional if the LE Controller supports Connection State, otherwise excluded.
- C.56:
Optional if LE Feature (LE Encryption) is supported, otherwise excluded.
- C.57:
Mandatory if LE Feature (Connection Subrating) is supported, otherwise excluded.
- C.58:
Mandatory if LE Feature (Channel Classification) is supported, otherwise excluded.
- C.59:
Mandatory if the LE Controller supports Central role, otherwise excluded.
- C.60:
Mandatory if the LE Controller supports Central role and LE Feature (LE Encryption), otherwise excluded.
- C.61:
Mandatory if the LE Controller supports Peripheral role and LE Feature (LE Encryption), otherwise excluded.
- C.62:
Mandatory if the LE Controller supports Central role or supports both Peripheral role and LE Feature (Connection Parameters Request Procedure), otherwise excluded.
- C.63:
Mandatory if the LE Controller supports Scanning state and LE Feature (LL Privacy), otherwise excluded.
- C.64:
Optional if the Controller supports transmitting packets, otherwise excluded.
- C.65:
Mandatory if LE Set Extended Advertising Parameters command [v2] is supported, otherwise mandatory if LE Feature (Extended Advertising) is supported and the LE Controller supports Advertising State, otherwise excluded.
- C.66:
Mandatory if LE Feature (Advertising Coding Selection) is supported, otherwise optional if LE Feature (Extended Advertising) is supported and the LE Controller supports Advertising state, otherwise excluded.
- C.67:
Mandatory if LE Feature (Periodic Advertising with Responses - Advertiser) is supported, otherwise excluded.
- C.68:
Mandatory if LE Feature (Periodic Advertising with Responses - Scanner) is supported, otherwise excluded.
- C.69:
Mandatory if LE Feature (Periodic Advertising with Responses - Advertiser) or LE Feature (Periodic Advertising with Responses - Scanner) is supported, otherwise excluded.
- C.94:
Mandatory if the LE Create Connection or LE Extended Create Connection command is supported, otherwise excluded.
- C.95:
Mandatory if the LE Request Peer SCA command is supported, otherwise excluded.
- C.96:
Optional if the LE Controller supports Connection State, otherwise excluded.
- C.97:
Mandatory if Advertising State is supported, otherwise excluded.
- C.98:
Mandatory if Scanning State is supported, otherwise excluded.
- C.99:
Mandatory if LE Generate DHKey command [v2] is supported, otherwise optional.
- C.101:
Mandatory if the Authentication Requested command is supported, otherwise excluded.
- C.102:
Mandatory if the Change Connection Link Key command is supported, otherwise excluded.
- C.103:
Mandatory if the Periodic Inquiry Mode command is supported, otherwise excluded.
- C.104:
Mandatory if the Read Clock Offset command is supported, otherwise excluded.
- C.105:
Mandatory if the Read Remote Version Information command is supported, otherwise excluded.
- C.106:
Mandatory if the Remote Name Request command is supported, otherwise excluded.
- C.107:
Mandatory if the Set Controller To Host Flow Control command is supported, otherwise excluded.
- C.108:
Mandatory if the Set MWS_PATTERN Configuration command is supported, otherwise optional.
- C.109:
Mandatory if the Set MWS Signaling command is supported, otherwise excluded.
- C.110:
Mandatory if the Set Triggered Clock Capture command is supported, otherwise excluded.
- C.111:
Mandatory if the Write Authentication Enable command is supported, otherwise excluded.
- C.112:
Mandatory if the Write Default Erroneous Data Reporting command is supported, otherwise excluded.
- C.113:
Mandatory if the Write Extended Inquiry Length command is supported, otherwise excluded.
- C.114:
Mandatory if the Write Extended Page Timeout command is supported, otherwise excluded.
- C.115:
Mandatory if the Write Inquiry Mode command is supported, otherwise excluded.
- C.116:
Mandatory if the Write LE Host Support command is supported, otherwise excluded.
- C.117:
Mandatory if the Write Link Supervision Timeout command is supported, otherwise excluded.
- C.118:
Mandatory if the Write Num Broadcast Retransmissions command is supported, otherwise excluded.
- C.119:
Mandatory if the Write Page Scan Type command is supported, otherwise excluded.
- C.120:
Mandatory if the Write PIN Type command is supported, otherwise excluded.
- C.121:
Mandatory if the Write Stored Link Key command is supported, otherwise excluded.
- C.122:
Mandatory if the Write Synchronous Flow Control Enable command is supported, otherwise excluded.
- C.123:
Mandatory if BR/EDR test mode is supported, otherwise excluded.
- C.124:
Mandatory if Data block based flow control is supported, otherwise excluded.
- C.125:
Mandatory if Inquiry Scan is supported, otherwise excluded.
- C.126:
Optional if Inquiry Scan is supported, otherwise excluded.
- C.127:
Mandatory if Inquiry is supported, otherwise excluded.
- C.128:
Optional if Inquiry is supported, otherwise excluded.
- C.129:
Mandatory if Truncated page state is supported, otherwise excluded.
- C.130:
Previously used
- C.131:
Previously used
- C.132:
Mandatory if multi-slot ACL packets are is supported, otherwise excluded.
- C.133:
Mandatory if HV2, HV3, or multi-slot or EDR ACL packets are is supported, otherwise excluded.
- C.134:
Mandatory if SCO or eSCO is supported, otherwise excluded.
- C.135:
Optional if SCO or eSCO is supported, otherwise excluded.
- C.136:
Optional if Slot Availability Mask is supported, otherwise excluded.
- C.138:
Mandatory if Secure Connections (Controller) is supported, otherwise optional if eSCO is supported, otherwise excluded.
- C.139:
Mandatory if the Controller is AFH capable in either role, otherwise excluded.
- C.140:
Mandatory if the Controller supports AFH classification in either role or is an AFH capable Central, otherwise excluded.
- C.141:
Mandatory if Role Switch, Hold mode, or Sniff mode is supported, otherwise excluded.
- C.142:
Mandatory if Secure Connections (Host) is supported, otherwise excluded.
- C.143:
Previously used
- C.144:
Mandatory if Hold Mode or Sniff Mode is supported, otherwise excluded.
- C.145:
Mandatory if any event in event mask page 2 is supported, otherwise optional.
- C.146:
Mandatory if the Extended Inquiry Result event or the IO Capability Request event is supported, otherwise optional if Inquiry is supported, otherwise excluded.
- C.147:
Optional if the Inquiry Result with RSSI event is supported, otherwise excluded.
- C.148:
Optional if any of the Connection Complete, Connection Request, Extended Inquiry Result, Inquiry Result with RSSI, IO Capability Request, or Synchronous Connection Complete events is supported, otherwise excluded.
- C.149:
Previously used
- C.150:
Previously used
- C.151:
Mandatory if Secure Connections (Controller) and Ping are supported, otherwise excluded.
- C.152:
Mandatory if Power Control is supported, otherwise optional.
- C.153:
Mandatory if LE supported in the Controller, otherwise optional.
- C.154:
Mandatory if Interlaced Page Scan is supported, otherwise optional.
- C.155:
Mandatory if the Write Authenticated Payload Timeout command is supported, otherwise excluded.
- C.156:
Mandatory if the Read Local Supported Codecs command [v2] is supported, otherwise excluded.
- C.157:
Mandatory if the Read Local Supported Codecs command [v2] is supported, otherwise optional.
- C.158:
Mandatory if the Set Min Encryption Key Size command is supported, otherwise optional.
- C.201:
Mandatory if Connectionless Peripheral Broadcast - Transmitter is supported, otherwise excluded.
- C.202:
Mandatory if Connectionless Peripheral Broadcast - Receiver is supported, otherwise excluded.
- C.203:
Previously used
- C.204:
Previously used
- C.205:
Mandatory if Extended Inquiry Response is supported, otherwise excluded.
- C.212:
Mandatory if Role Switch is supported, otherwise excluded.
- C.213:
Mandatory if Hold mode is supported, otherwise excluded.
- C.214:
Mandatory if Sniff mode is supported, otherwise excluded.
- C.215:
Mandatory if Broadcast Encryption is supported, otherwise excluded.
- C.217:
Mandatory if BR/EDR Enhanced Power Control is supported, otherwise excluded.
- C.218:
Mandatory if Secure Connections (Controller) is supported, otherwise excluded.
- C.219:
Mandatory if Slot Availability Mask is supported, otherwise excluded.
- C.220:
Mandatory if LMP Extended Features mask is supported, otherwise excluded.
- C.221:
Mandatory if Sniff subrating is supported, otherwise excluded.
3.1. LE Controller requirements
3.1.1. Legacy and extended advertising
Table 3.2 lists the legacy and extended advertising commands and events.
If a Controller supports any legacy advertising command or event listed in the table and also supports the LE Feature (Extended Advertising), it shall support the corresponding extended advertising command or event in the same row of the table.
If, since the last power-on or reset, the Host has ever issued a legacy advertising command and then issues an extended advertising command, or has ever issued an extended advertising command and then issues a legacy advertising command, the Controller shall return the error code Command Disallowed (0x0C).
A Host should not issue legacy commands to a Controller that supports the LE Feature (Extended Advertising).
Legacy advertising command or event | Extended advertising command or event |
---|---|
HCI_LE_Advertising_Report event | HCI_LE_Extended_Advertising_Report event |
HCI_LE_Directed_Advertising_Report event | HCI_LE_Extended_Advertising_Report event |
HCI_LE_Set_Advertising_Parameters command | HCI_LE_Set_Extended_Advertising_Parameters command |
HCI_LE_Read_Advertising_Physical_Channel_Tx_Power command | none |
HCI_LE_Set_Advertising_Data command | HCI_LE_Set_Extended_Advertising_Data command |
HCI_LE_Set_Scan_Response_Data command | HCI_LE_Set_Extended_Scan_Response_Data command |
HCI_LE_Set_Advertising_Enable command | HCI_LE_Set_Extended_Advertising_Enable command |
none | HCI_LE_Read_Maximum_Advertising_Data_Length command |
none | HCI_LE_Read_Number_of_Supported_Advertising_Sets command |
none | HCI_LE_Remove_Advertising_Set command |
none | HCI_LE_Clear_Advertising_Sets command |
none | HCI_LE_Set_Periodic_Advertising_Parameters command |
none | HCI_LE_Set_Periodic_Advertising_Data command |
none | HCI_LE_Set_Periodic_Advertising_Enable command |
HCI_LE_Set_Scan_Parameters command | HCI_LE_Set_Extended_Scan_Parameters command |
HCI_LE_Set_Scan_Enable command | HCI_LE_Set_Extended_Scan_Enable command |
HCI_LE_Create_Connection command | HCI_LE_Extended_Create_Connection command |
none | HCI_LE_Periodic_Advertising_Create_Sync command |
none | HCI_LE_Periodic_Advertising_Create_Sync_Cancel command |
none | HCI_LE_Periodic_Advertising_Terminate_Sync command |
none | HCI_LE_Add_Device_To_Periodic_Advertiser_List command |
none | HCI_LE_Remove_Device_From_Periodic_Advertiser_List command |
none | HCI_LE_Clear_Periodic_Advertiser_List command |
none | HCI_LE_Read_Periodic_Advertiser_List_Size command |
none | HCI_LE_Set_Periodic_Advertising_Sync_Transfer_Parameters command |
none | HCI_LE_Set_Default_Periodic_Advertising_Sync_Transfer_Parameters command |
none | HCI_LE_Periodic_Advertising_Sync_Transfer_Received event |
3.2. Underlying Support
Except as stated in this section, if a command or event is supported by a Controller then the feature underlying the command or event shall also be fully supported. If the feature applies to more than one transport, it shall be supported on all supported transports.
If the Controller supports ACL connections on BR/EDR but does not support Connection State on LE then, for each command or event that it supports that has a handle parameter, it shall only support the underlying functionality on BR/EDR (such Controllers will not support the commands or events that create LE connections and therefore all valid handles will represent BR/EDR connections).
For each of the commands and events in Table 3.3, the requirements in Table 3.1 shall be evaluated separately for each supported transport. If the requirement for a given supported transport evaluates to Mandatory, or evaluates to Optional and the Controller supports the command or event on that transport, then the underlying feature shall be fully supported on that transport. Otherwise the Controller shall not support the underlying feature on that transport and:
For a command, if the Host issues the command with the Handle or Connection_Handle parameter referring to a connection on that transport, the Controller shall return the error code Unsupported Feature or Parameter Value (0x11).
For an event, the Controller shall not generate that event with the Connection_Handle parameter referring to a connection on that transport.
HCI_Authenticated_Payload_Timeout_Expired event |
HCI_Encryption_Change event |
HCI_Encryption_Key_Refresh_Complete event |
HCI_Read_Authenticated_Payload_Timeout command |
HCI_Read_Remote_Version_Information command |
HCI_Read_Remote_Version_Information_Complete event |
HCI_Read_RSSI command |
HCI_Read_Transmit_Power_Level command |
HCI_Write_Authenticated_Payload_Timeout command |
3.3. Feature Exchange
If a command has a Connection_Handle parameter, returns an HCI_Command_Status event followed by a completion event (see Section 4.4), and the specification of that command does not refer to feature exchange, then the command may perform feature exchange on the specified connection before any other procedure in order to determine whether the peer device supports a necessary feature.
4. HCI flow control
Flow control for data shall be used in the direction from the Host to the Controller to avoid overflowing the Controller data buffers with data destined for a remote device (using a Connection_Handle) that is not responding. The Host manages the data buffers of the Controller. Packet based flow control is the default for BR/EDR traffic and the only option for LE traffic. Flow control for data moving from the Controller to the Host may be in accordance with Section 4.2.
Command flow control is covered in Section 4.4 and Section 4.5.
4.1. Host to Controller data flow control
Two methods of data flow control are defined: 'packet-based' flow control and 'data-block-based' flow control, known as buffer management. Selection of the data flow control mechanism is performed with the HCI_Write_Flow_Control_Mode command (see Section 7.3.73).
If a BR/EDR/LE Controller implements separate buffers for ACL Data:
The Host shall use the HCI_LE_Read_Buffer_Size command to determine the buffers that are used for ACL Data on an LE-U logical link.
The Host shall use separate packet based flow control for each set of buffers.
The Connection_Handle contained in the ACL Data packet shall be used by the Controller to determine which set of buffers to use and the logical link (ACL-U, APB-U, or LE-U) over which the data is to be sent.
If a BR/EDR/LE Controller does not implement separate buffers, then all ACL Data shall use the BR/EDR buffer management as described below, and only the logical link (ACL-U, APB-U, or LE-U) shall be determined by the Connection_Handle.
A packet is said to have completed when the Controller no longer needs the buffer space to store the data from the packet and has freed the corresponding buffer for re-use. This nominally happens when the data is transmitted or flushed, but can be delayed for implementation reasons or can happen early if the implementation transfers the data to other storage.
For each individual Connection_Handle, the data shall be sent to the Controller in HCI Data packets in the order in which it was provided by the Host and shall arrive at the Controller in that order.
4.1.1. Packet-based data flow control
When the packet based flow control mechanism is enabled, on initialization, a Host that supports LE shall issue the HCI_LE_Read_Buffer_Size command (see Section 7.8.2). Two of the return parameters of this command determine the maximum size of HCI ACL (excluding header) Data packets that can be used to transmit ACL data for an LE transport sent from the Host to the Controller. There is an additional return parameter that specifies the total number of HCI ACL Data packets that the Controller may have waiting for transmission in those buffers. A Controller that supports BR/EDR and LE may return zero for the total number of HCI ACL packets used to transmit ACL data for an LE transport. In this case the Host shall then send all BR/EDR and LE data using the HCI ACL Data packets into the buffers identified using the HCI_Read_Buffer_Size command. A Controller that does not support BR/EDR shall not return zero for the total number of HCI ACL packets used to transmit ACL data for an LE transport.
When the packet-based flow control mechanism is enabled, on initialization, a Host that supports isochronous data over HCI in either the Connected Isochronous Stream Central role, Connected Isochronous Stream Peripheral role, or Isochronous Broadcaster role shall issue the HCI_LE_Read_Buffer_Size command.
An HCI ISO Data packet is used to transfer isochronous data between the Host and Controller for transmission of isochronous data on an isochronous transport. The ISO_Data_Packet_Length parameter of this command specifies the maximum buffer size for each HCI ISO Data packet (excluding the header but including optional fields such as ISO_SDU_Length). The return parameter Total_Num_ISO_Data_Packets of this command specifies the maximum number of HCI ISO Data packets that the Controller can have waiting for transmission in its buffers.
Note
Note: The ISO_Data_Packet_Length and Total_Num_ISO_Data_Packets return parameters are only available when using v2 or above of the HCI_LE_Read_Buffer_Size command (see Section 7.8.2).
In a BR/EDR Controller, when the packet based flow control mechanism is enabled, on initialization, the Host shall issue the HCI_Read_Buffer_Size command. Two of the return parameters of this command determine the maximum size of HCI ACL and Synchronous Data packets (excluding header) sent from the Host to the Controller. There are also two additional return parameters that specify the total number of HCI ACL and Synchronous Data packets that the Controller may have waiting for transmission in its buffers. A Controller that supports BR/EDR shall not return zero for the total number of HCI ACL Data packets or their maximum size. A Controller that supports SCO or eSCO over HCI shall not return zero for the total number of HCI Synchronous Data packets or their maximum size.
When there is at least one connection to another device, or when in local loopback mode on a BR/EDR Controller, the Controller shall use the HCI_Number_Of_Completed_Packets event to control the flow of data from the Host. This event contains a list of Connection_Handles and a corresponding number of HCI Data packets and/or HCI ISO Data packets that have been completed since the previous time the event was returned (or since the connection was established, if the event has not been returned before for a particular Connection_Handle).
The Host chooses the Connection_Handles for the following HCI Data packets and/or HCI ISO Data packets based on the information returned in this event, and/or the HCI_LE_Read_Buffer_Size commands.
Every time it has sent an HCI Data packet, the Host shall assume that the free buffer space for the corresponding link type (ACL, SCO, or eSCO) in the Controller has decreased by one HCI Data packet.
Every time the Host sends an HCI ISO Data packet, the Host shall assume that the free buffer space for the corresponding logical link type (LE-S or LE-F) in the Controller has decreased by one HCI ISO Data packet.
Each HCI_Number_Of_Completed_Packets event received by the Host provides information about how many HCI Data packets and/or HCI ISO Data packets have been completed for each Connection_Handle since the previous HCI_Number_Of_Completed_Packets event was sent to the Host. It can then calculate the actual current buffer usage.
When the Controller has completed one or more HCI Data packet(s) and/or HCI ISO Data packet(s) it shall send an HCI_Number_Of_Completed_Packets event to the Host, until it finally reports that all the pending HCI Data packets have been completed. The frequency at which this event is sent is manufacturer specific.
Note
Note: The HCI_Number_Of_Completed_Packets events will not report on synchronous Connection_Handles if Synchronous Flow Control is disabled. (See Read Synchronous Flow Control Enable command, and Write Synchronous Flow Control Enable command.)
4.1.2. Data-block-based data flow control
When the data-block-based flow control mechanism is enabled, on initialization the Host shall issue the Read Data Block Size command. Two of the return parameters of this command determine the maximum size of HCI ACL Data packets (excluding header) sent from the Host to the Controller. A further return parameter specifies the total number of HCI ACL Data packets that the Controller may have waiting for transmission in its buffers.
The Controller shall use the HCI_Number_Of_Completed_Data_Blocks event to control the flow of data from the Host. This event contains a list of Handles and a corresponding number of HCI Data packets that have been completed since the previous time the event was returned (or since the link was established, if the event has not been returned before for a particular Handle).
Based on the information returned in this event, and the return parameters of the HCI_Read_Data_Block_Size command that specify the total number of HCI ACL Data packets that can be stored in the Controller, the Host decides for which Handles the following HCI Data packets should be sent.
Every time it has sent an HCI Data packet, the Host shall assume that the free buffer space for the corresponding ACL link type in the Controller has decreased by one HCI Data packet.
Each HCI_Number_Of_Completed_Data_Blocks event received by the Host provides information about how many HCI Data packets have been completed for each Handle since the previous HCI_Number_Of_Completed_Data_Blocks event was sent to the Host. It can then calculate the actual current buffer usage.
When the Controller has completed one or more HCI Data packet(s) it shall send an HCI_Number_Of_Completed_Data_Blocks event to the Host until it finally reports that all the pending HCI Data packets have been completed. The frequency at which this event is sent is manufacturer specific.
4.2. Controller to Host data flow control
In some implementations, flow control may also be necessary in the direction from the Controller to the Host. The HCI_Set_Controller_To_Host_Flow_Control command can be used to turn flow control on or off in that direction.
On initialization, the Host uses the HCI_Host_Buffer_Size command to notify the Controller about the maximum size of HCI ACL and Synchronous Data packets sent from the Controller to the Host. The command also contains two additional command parameters to notify the Controller about the total number of ACL and Synchronous Data packets that can be stored in the data buffers of the Host.
The Host uses the HCI_Host_Number_Of_Completed_Packets command in exactly the same way as the Controller uses the HCI_Number_Of_Completed_Packets event as was previously described in this section, but a packet is completed when the Host is ready to free the corresponding buffer.
The HCI_Host_Number_Of_Completed_Packets command is a special command for which no command flow control is used, and which can be sent anytime there is a connection or when in local loopback mode. The command also has no event after the command has completed. This makes it possible for the flow control to work in exactly the same way in both directions, and the flow of normal commands will not be disturbed.
For each individual Connection_Handle, the data shall be sent to the Host in HCI Data packets in the order in which it was provided by the Controller and shall arrive at the Host in that order.
4.3. Disconnection behavior
When the Host receives an HCI_Disconnection_Complete event, the Host shall assume that all unacknowledged HCI Data packets that have been sent to the Controller for the returned Handle have been flushed, and that the corresponding data buffers have been freed. A Controller does not have to notify the Host about this in an HCI_Number_Of_Completed_Packets or an HCI_Number_Of_Completed_Data_Blocks event before the disconnection event.
If flow control is also enabled in the direction from the Controller to the Host, the Controller may, after it has sent an HCI_Disconnection_Complete event, assume that the Host will flush its data buffers for the sent Handle when it receives the HCI_Disconnection_Complete event. The Host does not have to notify the Controller about this in an HCI_Host_Number_Of_Completed_Packets command.
4.4. Command flow control
On initial power-on, and after a reset, the Host shall send a maximum of one outstanding HCI Command packet until an HCI_Command_Complete or HCI_Command_Status event has been received.
The HCI_Command_Complete and HCI_Command_Status events contain a parameter called Num_HCI_Command_Packets, which indicates the number of HCI Command packets the Host is currently allowed to send to the Controller. The Controller may buffer one or more HCI Command packets, but the Controller shall start performing the commands in the order in which they are received. The Controller can start performing a command before it completes previous commands. Therefore, the commands do not always complete in the order they are started.
To indicate to the Host that the Controller is ready to receive HCI command packets, the Controller may generate an HCI_Command_Complete or HCI_Command_Status event with the Command Opcode set to 0x0000 and the Num_HCI_Command_Packets event parameter set to 1 or more. Command Opcode 0x0000 is a special value indicating that this event is not associated with a command sent by the Host. The Controller can send an HCI_Command_Complete or HCI_Command_Status event with Command Opcode 0x0000 at any time to change the number of outstanding HCI Command packets that the Host can send before waiting. If the Controller generates an HCI_Command_Complete or HCI_Command_Status event with the Num_HCI_Command_Packets event parameter set to zero, the Host shall stop sending commands.
HCI commands may take different amounts of time to be completed. Therefore, the results of commands will be reported back to the Host in the form of an event. For example, for most HCI commands the Controller will generate the HCI_Command_Complete event when a command is completed. This event contains the return parameters for the completed HCI command. For enabling the Host to detect errors on the HCI-Transport Layer, there needs to be a timeout between the transmission of the Host’s command and the reception of the Controller’s response (e.g. an HCI_Command_Complete or HCI_Command_Status event). Since the maximum response timeout is strongly dependent on the HCI-Transport Layer used, it is recommended to use a default value of one second for this timer. This amount of time is also dependent on the number of commands unprocessed in the command queue.
There are two separate patterns of command execution. For the first type (used by those commands which are expected to complete quickly and are carried out entirely in the local Controller), the Controller shall send the Host an HCI_Command_Complete event when it has completed the command. For the second type (used by those commands that are expected to take a significant length of time, usually because they involve interaction with a peer device), the Controller shall send the Host an HCI_Command_Status event when it has received the command and checked the parameters. When the actions associated with the command have finished, a separate event that is associated with the command (the "completion event") shall be sent by the Controller to the Host. Between the times that these two events are generated (even if they have not yet been received by the Host), this type of command is described as "pending".
If a command of the second type does not begin to execute (for example, if there was a parameter error or the command is currently not allowed), the HCI_Command_Status event shall be returned with the appropriate error code in the Status parameter and no completion event is generated.
When a Connection_Handle is deleted and there are pending commands relating to that Connection_Handle, the Controller may return the completion event for each command to the Host. Each such event shall have a non-zero status and shall precede the event indicating the deletion of the Connection_Handle. No events for that Connection_Handle shall be sent after the event indicating the deletion of the Connection_Handle.
4.5. Command error handling
Unless explicitly stated otherwise in the description of a command, any error in any parameter means that the command will not begin to execute; it will only return an error code. If more than one error code is applicable, the implementation shall choose one of them.
If an error occurs for a command for which an HCI_Command_Complete event is returned, the error shall be reported in the Status parameter.
If an error occurs for a command for which an HCI_Command_Status event and a completion event are returned, there are two possibilities; which happens will depend on the specific error. If the error is one which means the command will not begin to execute (including any errors in parameters), the error shall be returned as a non-zero Status parameter in the HCI_Command_Status event and no completion event will be returned. If the error is not detected until after the HCI_Command_Status event has been generated, the HCI_Command_Status event shall have the Status parameter set to zero and the error shall be returned in the Status parameter of the completion event.
If the Controller does not support an issued command, it shall return the error code Unknown HCI command (0x01) in the Status parameter of either an HCI_Command_Complete event or an HCI_Command_Status event; which event is used is vendor-specific.
If an error occurs for a command for which an HCI_Command_Complete event is returned, the Return Parameters field may only contain some of the return parameters specified for the command. The Status parameter, which explains the error reason and which is the first return parameter, shall always be returned. If there is a Handle parameter or a BD_ADDR parameter right after the Status parameter, this parameter shall also be returned so that the Host can identify to which instance of a command the HCI_Command_Complete event belongs. In this case, the Handle or BD_ADDR parameter shall have exactly the same value as that in the corresponding command parameter. It is implementation specific whether more parameters will be returned in case of an error; if they are not, the event will be shorter than if they were.
The above also applies to commands that have associated command specific completion events with a Status parameter in their completion event, with the exceptions shown in Table 4.1, which indicates the only parameters (other than Status) that are valid. The validity of other parameters is likewise implementation specific for failed commands in this group, but they shall be sent in any case.
Event | Valid parameters |
---|---|
Connection_Complete | BD_ADDR |
Synchronous_Connection_Complete | BD_ADDR |
LE_Connection_Complete | none |
LE_Enhanced_Connection_Complete | none |
LE_Periodic_Advertising_Sync_Established | none |
LE_CIS_Established | Connection_Handle |
LE_CIS_Request | none |
LE_Create_BIG_Complete | BIG_Handle |
LE_Terminate_BIG_Complete | BIG_Handle |
LE_BIG_Sync_Established | BIG_Handle |
LE_Request_Peer_SCA_Complete | Connection_Handle |
For the purposes of this section, the Subevent_Code parameter of the HCI_LE_Meta event (see Section 7.7.65) is not treated as a parameter and is always valid.
Note
Note: The BD_ADDR return parameter of the command HCI_Read_BD_ADDR is not used to identify to which instance of the HCI_Read_BD_ADDR command the HCI_Command_Complete event belongs. It is optional for the Controller to return this parameter in case of an error.
4.6. LMP transaction and LL procedure collisions
If the Host issues a command that returns a successful HCI_Command_Status event but