# HCI

The role of the HCI is to provide a uniform interface method of accessing a Bluetooth Low Energy controller’s capabilities from the host. The HCI layer is part of the Bluetooth Low Energy protocol stack, as shown in the "Bluetooth Low Energy Protocol Stack" figure.

Figure: Bluetooth Low Energy Protocol Stack

The Bluetooth stack optionally provides an HCI layer, which provides direct access to the stack at an interface between the host and controller layers. The role of the HCI is to convey the information from one layer to the other by following the rules defined in the HCI portion of the Bluetooth standard. As shown in the sample code, the RSL15 HCI layer implementation can be used to interface with a transport layer that manages the reception and transmission of messages over a UART physical interface.

As shown in the "HCI" figure, the two main configurations are supported by the HCI software.

Figure: HCI Working Modes

RSL15 has both a full stack system, and compatibility providing an external system with aaccess to the Bluetooth Controller.

## HCI Software Architecture

The HCI software is an interface communication block (depicted in the "HCI Software Interfaces" figure) that can be used for three main purposes:

1. Communication between internal controller and external host
   - In this case, RSL15 can be used only as a controller and can communicate to an external host for verification and certification purposes or as a standalone Bluetooth Low Energy controller device (for example, connecting to a PC where an open host stack is running). It is demonstrated using the hci sample application from the RSL15 SDK.

2. Communication between internal controller and internal host
   - In this case, a fully embedded host and application is used. HCI cannot be used with an external UART interface.

3. Communication between internal host and external application
   - In this case, an external application communicates to the RSL15 host over UART. This interface is not based on the HCI standard (because there is no such use case or standard defined in the Bluetooth core specification). However, an external application can use the same hci sample application and use the same kernel messaging and format specified in GAP, GATT, L2CAP, and profile API documentation. The only difference is that the first byte of any message sent or received over UART needs to be 0x05 (AHI_KE_MSG_TYPE definition of the RSL15 Bluetooth Low Energy stack).

Figure: HCI Software Interfaces