Zephyr API Documentation  3.7.0
A Scalable Open Source RTOS
Loading...
Searching...
No Matches
bluetooth.h
Go to the documentation of this file.
1
8#ifndef ZEPHYR_INCLUDE_DRIVERS_BLUETOOTH_H_
9#define ZEPHYR_INCLUDE_DRIVERS_BLUETOOTH_H_
10
22#include <stdbool.h>
23#include <stdint.h>
24#include <zephyr/net/buf.h>
28#include <zephyr/device.h>
29
30#ifdef __cplusplus
31extern "C" {
32#endif
33
40};
41
42enum {
43 /* The host should never send HCI_Reset */
45 /* The controller does not auto-initiate a DLE procedure when the
46 * initial connection data length parameters are not equal to the
47 * default data length parameters. Therefore the host should initiate
48 * the DLE procedure after connection establishment.
49 */
51};
52
65};
66
67#define BT_DT_HCI_QUIRK_OR(node_id, prop, idx) DT_STRING_TOKEN_BY_IDX(node_id, prop, idx)
68#define BT_DT_HCI_QUIRKS_GET(node_id) COND_CODE_1(DT_NODE_HAS_PROP(node_id, bt_hci_quirks), \
69 (DT_FOREACH_PROP_ELEM_SEP(node_id, \
70 bt_hci_quirks, \
71 BT_DT_HCI_QUIRK_OR, \
72 (|))), \
73 (0))
74#define BT_DT_HCI_QUIRKS_INST_GET(inst) BT_DT_HCI_QUIRKS_GET(DT_DRV_INST(inst))
75
76#define BT_DT_HCI_NAME_GET(node_id) DT_PROP_OR(node_id, bt_hci_name, "HCI")
77#define BT_DT_HCI_NAME_INST_GET(inst) BT_DT_HCI_NAME_GET(DT_DRV_INST(inst))
78
79#define BT_DT_HCI_BUS_GET(node_id) DT_STRING_TOKEN_OR(node_id, bt_hci_bus, BT_HCI_BUS_VIRTUAL)
80#define BT_DT_HCI_BUS_INST_GET(inst) BT_DT_HCI_BUS_GET(DT_DRV_INST(inst))
81
82typedef int (*bt_hci_recv_t)(const struct device *dev, struct net_buf *buf);
83
84__subsystem struct bt_hci_driver_api {
85 int (*open)(const struct device *dev, bt_hci_recv_t recv);
86 int (*close)(const struct device *dev);
87 int (*send)(const struct device *dev, struct net_buf *buf);
88#if defined(CONFIG_BT_HCI_SETUP)
89 int (*setup)(const struct device *dev,
90 const struct bt_hci_setup_params *param);
91#endif /* defined(CONFIG_BT_HCI_SETUP) */
92};
93
109static inline int bt_hci_open(const struct device *dev, bt_hci_recv_t recv)
110{
111 const struct bt_hci_driver_api *api = (const struct bt_hci_driver_api *)dev->api;
112
113 return api->open(dev, recv);
114}
115
126static inline int bt_hci_close(const struct device *dev)
127{
128 const struct bt_hci_driver_api *api = (const struct bt_hci_driver_api *)dev->api;
129
130 if (api->close == NULL) {
131 return -ENOSYS;
132 }
133
134 return api->close(dev);
135}
136
150static inline int bt_hci_send(const struct device *dev, struct net_buf *buf)
151{
152 const struct bt_hci_driver_api *api = (const struct bt_hci_driver_api *)dev->api;
153
154 return api->send(dev, buf);
155}
156
157#if defined(CONFIG_BT_HCI_SETUP) || defined(__DOXYGEN__)
170static inline int bt_hci_setup(const struct device *dev, struct bt_hci_setup_params *params)
171{
172 const struct bt_hci_driver_api *api = (const struct bt_hci_driver_api *)dev->api;
173
174 if (api->setup == NULL) {
175 return -ENOSYS;
176 }
177
178 return api->setup(dev, params);
179}
180#endif
181
186/* The following functions are not strictly part of the HCI driver API, in that
187 * they do not take as input a struct device which implements the HCI driver API.
188 */
189
201int bt_hci_transport_setup(const struct device *dev);
202
214int bt_hci_transport_teardown(const struct device *dev);
215
228
242
256
257#ifdef __cplusplus
258}
259#endif
260
261#endif /* ZEPHYR_INCLUDE_DRIVERS_BLUETOOTH_H_ */
Bluetooth device address definitions and utilities.
Bluetooth data buffer API.
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.
static ssize_t recv(int sock, void *buf, size_t max_len, int flags)
POSIX wrapper for zsock_recv.
Definition: socket.h:922
static int bt_hci_setup(const struct device *dev, struct bt_hci_setup_params *params)
HCI vendor-specific setup.
Definition: bluetooth.h:170
static int bt_hci_send(const struct device *dev, struct net_buf *buf)
Send HCI buffer to controller.
Definition: bluetooth.h:150
int(* bt_hci_recv_t)(const struct device *dev, struct net_buf *buf)
Definition: bluetooth.h:82
bt_hci_bus
Possible values for the 'bus' member of the bt_hci_driver struct.
Definition: bluetooth.h:54
static int bt_hci_open(const struct device *dev, bt_hci_recv_t recv)
Open the HCI transport.
Definition: bluetooth.h:109
static int bt_hci_close(const struct device *dev)
Close the HCI transport.
Definition: bluetooth.h:126
@ BT_HCI_QUIRK_NO_AUTO_DLE
Definition: bluetooth.h:50
@ BT_HCI_QUIRK_NO_RESET
Definition: bluetooth.h:44
@ BT_HCI_BUS_VIRTUAL
Definition: bluetooth.h:55
@ BT_HCI_BUS_USB
Definition: bluetooth.h:56
@ BT_HCI_BUS_IPM
Definition: bluetooth.h:64
@ BT_HCI_BUS_PCCARD
Definition: bluetooth.h:57
@ BT_HCI_BUS_SPI
Definition: bluetooth.h:62
@ BT_HCI_BUS_UART
Definition: bluetooth.h:58
@ BT_HCI_BUS_PCI
Definition: bluetooth.h:60
@ BT_HCI_BUS_RS232
Definition: bluetooth.h:59
@ BT_HCI_BUS_SDIO
Definition: bluetooth.h:61
@ BT_HCI_BUS_I2C
Definition: bluetooth.h:63
#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:82
Buffer management.
__UINT8_TYPE__ uint8_t
Definition: stdint.h:88
__UINT16_TYPE__ uint16_t
Definition: stdint.h:89
Bluetooth Device Address.
Definition: addr.h:40
Definition: bluetooth.h:84
int(* open)(const struct device *dev, bt_hci_recv_t recv)
Definition: bluetooth.h:85
int(* close)(const struct device *dev)
Definition: bluetooth.h:86
int(* send)(const struct device *dev, struct net_buf *buf)
Definition: bluetooth.h:87
Definition: bluetooth.h:34
bt_addr_t public_addr
The public identity address to give to the controller.
Definition: bluetooth.h:39
Runtime device structure (in ROM) per driver instance.
Definition: device.h:403
const void * api
Address of the API structure exposed by the device instance.
Definition: device.h:409
Network buffer representation.
Definition: buf.h:1004
uint16_t len
Length of the data behind the data pointer.
Definition: buf.h:1033