HCI Drivers¶
API Reference¶
-
group
bt_hci_driver
HCI drivers.
Enums
-
enum
bt_hci_driver_bus
¶ Possible values for the ‘bus’ member of the bt_hci_driver struct
Values:
-
enumerator
BT_HCI_DRIVER_BUS_VIRTUAL
¶
-
enumerator
BT_HCI_DRIVER_BUS_USB
¶
-
enumerator
BT_HCI_DRIVER_BUS_PCCARD
¶
-
enumerator
BT_HCI_DRIVER_BUS_UART
¶
-
enumerator
BT_HCI_DRIVER_BUS_RS232
¶
-
enumerator
BT_HCI_DRIVER_BUS_PCI
¶
-
enumerator
BT_HCI_DRIVER_BUS_SDIO
¶
-
enumerator
BT_HCI_DRIVER_BUS_SPI
¶
-
enumerator
BT_HCI_DRIVER_BUS_I2C
¶
-
enumerator
BT_HCI_DRIVER_BUS_IPM
¶
-
enumerator
Functions
-
static inline uint8_t
bt_hci_evt_get_flags
(uint8_t evt)¶ Get HCI event flags.
Helper for the HCI driver to get HCI event flags that describes rules that. must be followed.
When CONFIG_BT_RECV_IS_RX_THREAD is enabled the flags BT_HCI_EVT_FLAG_RECV and BT_HCI_EVT_FLAG_RECV_PRIO indicates if the event should be given to bt_recv or bt_recv_prio.
- Return
HCI event flags for the specified event.
- Parameters
evt
: HCI event code.
-
int
bt_recv
(struct net_buf *buf)¶ Receive data from the controller/HCI driver.
This is the main function through which the HCI driver provides the host with data from the controller. The buffer needs to have its type set with the help of bt_buf_set_type() before calling this API.
When CONFIG_BT_RECV_IS_RX_THREAD is defined then this API should not be used for so-called high priority HCI events, which should instead be delivered to the host stack through bt_recv_prio().
- Return
0 on success or negative error number on failure.
- Parameters
buf
: Network buffer containing data from the controller.
-
int
bt_recv_prio
(struct net_buf *buf)¶ Receive high priority data from the controller/HCI driver.
This is the same as bt_recv(), except that it should be used for so-called high priority HCI events. There’s a separate bt_hci_evt_get_flags() helper that can be used to identify which events have the BT_HCI_EVT_FLAG_RECV_PRIO flag set.
As with bt_recv(), the buffer needs to have its type set with the help of bt_buf_set_type() before calling this API. The only exception is so called high priority HCI events which should be delivered to the host stack through bt_recv_prio() instead.
- Return
0 on success or negative error number on failure.
- Parameters
buf
: Network buffer containing data from the controller.
-
uint8_t
bt_read_static_addr
(struct bt_hci_vs_static_addr addrs[], uint8_t size)¶ Read static addresses from the controller.
- Return
Number of addresses read.
- Parameters
addrs
: Random static address and Identity Root (IR) array.size
: Size of array.
-
int
bt_hci_driver_register
(const struct bt_hci_driver *drv)¶ Register a new HCI driver to the Bluetooth stack.
This needs to be called before any application code runs. The bt_enable() API will fail if there is no driver registered.
- Return
0 on success or negative error number on failure.
- Parameters
drv
: A bt_hci_driver struct representing the driver.
-
int
bt_hci_transport_setup
(const struct device *dev)¶ Setup the HCI transport, which usually means to reset the Bluetooth IC.
- Note
A weak version of this function is included in the H4 driver, so defining it is optional per board.
- Return
0 on success, negative error value on failure
- Parameters
dev
: The device structure for the bus connecting to the IC
-
struct net_buf *
bt_hci_evt_create
(uint8_t evt, uint8_t len)¶ Allocate an HCI event buffer.
This function allocates a new buffer for an HCI event. It is given the avent code and the total length of the parameters. Upon successful return the buffer is ready to have the parameters encoded into it.
- Return
Newly allocated buffer.
- Parameters
evt
: Event OpCode.len
: Length of event parameters.
-
struct net_buf *
bt_hci_cmd_complete_create
(uint16_t op, uint8_t plen)¶ Allocate an HCI Command Complete event buffer.
This function allocates a new buffer for HCI Command Complete event. It is given the OpCode (encoded e.g. using the BT_OP macro) and the total length of the parameters. Upon successful return the buffer is ready to have the parameters encoded into it.
- Return
Newly allocated buffer.
- Parameters
op
: Command OpCode.plen
: Length of command parameters.
-
struct net_buf *
bt_hci_cmd_status_create
(uint16_t op, uint8_t status)¶ Allocate an HCI Command Status event buffer.
This function allocates a new buffer for HCI Command Status event. It is given the OpCode (encoded e.g. using the BT_OP macro) and the status code. Upon successful return the buffer is ready to have the parameters encoded into it.
- Return
Newly allocated buffer.
- Parameters
op
: Command OpCode.status
: Status code.
-
struct
bt_hci_driver
¶ - #include <hci_driver.h>
Abstraction which represents the HCI transport to the controller.
This struct is used to represent the HCI transport to the Bluetooth controller.
Public Members
-
const char *
name
¶ Name of the driver
-
enum bt_hci_driver_bus
bus
¶ Bus of the transport (BT_HCI_DRIVER_BUS_*)
-
uint32_t
quirks
¶ Specific controller quirks. These are set by the HCI driver and acted upon by the host. They can either be statically set at buildtime, or set at runtime before the HCI driver’s open() callback returns.
-
int (*
open
)(void)¶ Open the HCI transport.
Opens the HCI transport for operation. This function must not return until the transport is ready for operation, meaning it is safe to start calling the send() handler.
If the driver uses its own RX thread, i.e. CONFIG_BT_RECV_IS_RX_THREAD is set, then this function is expected to start that thread.
- Return
0 on success or negative error number on failure.
-
int (*
send
)(struct net_buf *buf)¶ Send HCI buffer to controller.
Send an HCI command or ACL data to the controller. The exact type of the data can be checked with the help of bt_buf_get_type().
- Note
This function must only be called from a cooperative thread.
- Return
0 on success or negative error number on failure.
- Parameters
buf
: Buffer containing data to be sent to the controller.
-
const char *
-
enum