15#ifndef ZEPHYR_INCLUDE_DRIVERS_BLUETOOTH_H_
16#define ZEPHYR_INCLUDE_DRIVERS_BLUETOOTH_H_
73#define BT_DT_HCI_QUIRK_OR(node_id, prop, idx) \
74 UTIL_CAT(BT_HCI_QUIRK_, DT_STRING_UPPER_TOKEN_BY_IDX(node_id, prop, idx))
75#define BT_DT_HCI_QUIRKS_GET(node_id) COND_CODE_1(DT_NODE_HAS_PROP(node_id, bt_hci_quirks), \
76 (DT_FOREACH_PROP_ELEM_SEP(node_id, \
81#define BT_DT_HCI_QUIRKS_INST_GET(inst) BT_DT_HCI_QUIRKS_GET(DT_DRV_INST(inst))
83#define BT_DT_HCI_NAME_GET(node_id) DT_PROP_OR(node_id, bt_hci_name, "HCI")
84#define BT_DT_HCI_NAME_INST_GET(inst) BT_DT_HCI_NAME_GET(DT_DRV_INST(inst))
87#define BT_PRIV_HCI_BUS_DEFAULT (0)
88#define BT_DT_HCI_BUS_GET(node_id) DT_ENUM_IDX_OR(node_id, bt_hci_bus, BT_PRIV_HCI_BUS_DEFAULT)
90#define BT_DT_HCI_BUS_INST_GET(inst) BT_DT_HCI_BUS_GET(DT_DRV_INST(inst))
109#define BT_DT_HCI_DRIVER_CONFIG_GET(node_id) \
111 .quirks = (uint32_t)BT_DT_HCI_QUIRKS_GET(node_id), \
122#define BT_DT_HCI_DRIVER_CONFIG_INST_GET(inst) \
123 BT_DT_HCI_DRIVER_CONFIG_GET(DT_DRV_INST(inst))
189#if defined(CONFIG_BT_HCI_SETUP) || defined(__DOXYGEN__)
223 if (data->
recv == NULL) {
228 return data->
recv(dev, buf);
271 if (data->
recv != NULL) {
301 if (api->
close == NULL) {
305 err = api->
close(dev);
337#if defined(CONFIG_BT_HCI_SETUP) || defined(__DOXYGEN__)
354 if (api->
setup == NULL) {
358 return api->
setup(dev, params);
Bluetooth device address definitions and utilities.
Bluetooth data buffer API.
#define DEVICE_API_GET(_class, _dev)
Expands to the pointer of a device's API for a given class.
Definition device.h:1449
struct net_buf * bt_hci_evt_create(uint8_t evt, uint8_t len)
Allocate an HCI event buffer.
struct net_buf * bt_hci_cmd_complete_create(uint16_t op, uint8_t plen)
Allocate an HCI Command Complete event buffer.
struct net_buf * bt_hci_cmd_status_create(uint16_t op, uint8_t status)
Allocate an HCI Command Status event buffer.
int bt_hci_transport_setup(const struct device *dev)
Setup the HCI transport, which usually means to reset the Bluetooth IC.
int bt_hci_transport_teardown(const struct device *dev)
Teardown the HCI transport.
int(* bt_hci_api_send_t)(const struct device *dev, struct net_buf *buf)
Callback API to send an HCI buffer to the controller.
Definition bluetooth.h:164
int(* bt_hci_recv_t)(const struct device *dev, struct net_buf *buf)
Deliver HCI data from the controller to the host.
Definition bluetooth.h:135
int(* bt_hci_api_close_t)(const struct device *dev)
Callback API to close the HCI transport.
Definition bluetooth.h:158
int(* bt_hci_api_setup_t)(const struct device *dev, const struct bt_hci_setup_params *param)
Callback API for HCI vendor-specific setup.
Definition bluetooth.h:170
int(* bt_hci_api_open_t)(const struct device *dev)
Callback API to open the HCI transport.
Definition bluetooth.h:152
static void bt_hci_recv(const struct device *dev, struct net_buf *buf)
Deliver an HCI packet from the driver.
Definition bluetooth.h:240
static int bt_hci_setup(const struct device *dev, struct bt_hci_setup_params *params)
HCI vendor-specific setup.
Definition bluetooth.h:350
static int bt_hci_send(const struct device *dev, struct net_buf *buf)
Send HCI buffer to controller.
Definition bluetooth.h:332
static int bt_hci_recv_err(const struct device *dev, struct net_buf *buf)
Deliver an HCI packet from the driver.
Definition bluetooth.h:219
static int bt_hci_open(const struct device *dev, bt_hci_recv_t recv)
Open the HCI transport.
Definition bluetooth.h:266
static int bt_hci_close(const struct device *dev)
Close the HCI transport.
Definition bluetooth.h:295
@ BT_HCI_QUIRK_NO_FLOW_CONTROL
The controller advertises the controller to host flow control commands as supported but does not acce...
Definition bluetooth.h:70
@ BT_HCI_QUIRK_NO_AUTO_DLE
Definition bluetooth.h:65
@ BT_HCI_QUIRK_NO_RESET
Definition bluetooth.h:51
void net_buf_unref(struct net_buf *buf)
Decrements the reference count of a buffer.
#define BIT(n)
Unsigned integer with bit position n set (signed in assembly language).
Definition util_macro.h:44
#define ENOSYS
Function not implemented.
Definition errno.h:83
#define EALREADY
Operation already in progress.
Definition errno.h:105
#define ENOTCONN
Socket is not connected.
Definition errno.h:113
ssize_t recv(int sock, void *buf, size_t max_len, int flags)
__UINT32_TYPE__ uint32_t
Definition stdint.h:90
__UINT8_TYPE__ uint8_t
Definition stdint.h:88
__UINT16_TYPE__ uint16_t
Definition stdint.h:89
Bluetooth Device Address.
Definition addr.h:42
<span class="mlabel">Driver Operations</span> Bluetooth HCI driver operations
Definition bluetooth.h:176
bt_hci_api_close_t close
<span class="op-badge op-opt" title="This operation MAY optionally be implemented by the driver....
Definition bluetooth.h:184
bt_hci_api_send_t send
<span class="op-badge op-req" title="This operation MUST be implemented by the driver....
Definition bluetooth.h:188
bt_hci_api_open_t open
<span class="op-badge op-req" title="This operation MUST be implemented by the driver....
Definition bluetooth.h:180
bt_hci_api_setup_t setup
<span class="op-badge op-opt" title="This operation MAY optionally be implemented by the driver....
Definition bluetooth.h:194
Common Bluetooth HCI driver configuration.
Definition bluetooth.h:99
uint32_t quirks
Quirks for this HCI device instance.
Definition bluetooth.h:101
Common Bluetooth HCI driver data.
Definition bluetooth.h:143
bt_hci_recv_t recv
Callback for the driver to deliver data received from the controller to the host.
Definition bluetooth.h:145
Definition bluetooth.h:41
bt_addr_t public_addr
The public identity address to give to the controller.
Definition bluetooth.h:46
Runtime device structure (in ROM) per driver instance.
Definition device.h:513
void * data
Address of the device instance private data.
Definition device.h:523
Network buffer representation.
Definition net_buf.h:1048
uint16_t len
Length of the data behind the data pointer.
Definition net_buf.h:1140