Zephyr API Documentation 4.1.99
A Scalable Open Source RTOS
 4.1.99
All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
gatt.h
Go to the documentation of this file.
1
5/*
6 * Copyright (c) 2015-2016 Intel Corporation
7 *
8 * SPDX-License-Identifier: Apache-2.0
9 */
10#ifndef ZEPHYR_INCLUDE_BLUETOOTH_GATT_H_
11#define ZEPHYR_INCLUDE_BLUETOOTH_GATT_H_
12
23#include <stdint.h>
24#include <stddef.h>
25#include <string.h>
26
27#include <sys/types.h>
28
29#include <zephyr/autoconf.h>
34#include <zephyr/sys/atomic.h>
36#include <zephyr/sys/slist.h>
37#include <zephyr/sys/util.h>
39#include <zephyr/toolchain.h>
40
41#ifdef __cplusplus
42extern "C" {
43#endif
44
101
109#define BT_GATT_ERR(_att_err) (-(_att_err))
110
135
136/* Forward declaration of GATT Attribute structure */
137struct bt_gatt_attr;
138
169typedef ssize_t (*bt_gatt_attr_read_func_t)(struct bt_conn *conn,
170 const struct bt_gatt_attr *attr,
171 void *buf, uint16_t len,
172 uint16_t offset);
173
212typedef ssize_t (*bt_gatt_attr_write_func_t)(struct bt_conn *conn,
213 const struct bt_gatt_attr *attr,
214 const void *buf, uint16_t len,
215 uint16_t offset, uint8_t flags);
216
241 const struct bt_uuid *uuid;
242
255
268
281
291
300
309 bool _auto_assigned_handle: 1;
311};
312
321 const struct bt_gatt_attr *attrs;
324};
325
340 sys_snode_t node;
342};
343
355
370
382 void (*att_mtu_updated)(struct bt_conn *conn, uint16_t tx, uint16_t rx);
383
387 sys_snode_t node;
389};
390
404 bool (*read_authorize)(struct bt_conn *conn,
405 const struct bt_gatt_attr *attr);
406
418 bool (*write_authorize)(struct bt_conn *conn,
419 const struct bt_gatt_attr *attr);
420};
421
430#define BT_GATT_CHRC_BROADCAST 0x01
436#define BT_GATT_CHRC_READ 0x02
442#define BT_GATT_CHRC_WRITE_WITHOUT_RESP 0x04
448#define BT_GATT_CHRC_WRITE 0x08
455#define BT_GATT_CHRC_NOTIFY 0x10
461#define BT_GATT_CHRC_INDICATE 0x20
467#define BT_GATT_CHRC_AUTH 0x40
474#define BT_GATT_CHRC_EXT_PROP 0x80
475
489
491#define BT_GATT_CEP_RELIABLE_WRITE 0x0001
492#define BT_GATT_CEP_WRITABLE_AUX 0x0002
493
505
513#define BT_GATT_CCC_NOTIFY 0x0001
519#define BT_GATT_CCC_INDICATE 0x0002
520
529
538#define BT_GATT_SCC_BROADCAST 0x0001
539
548
588
611static inline const char *bt_gatt_err_to_str(int gatt_err)
612{
613 return bt_att_err_to_str((gatt_err) < 0 ? -(gatt_err) : (gatt_err));
614}
615
624
644
672
680
688
696
707typedef uint8_t (*bt_gatt_attr_func_t)(const struct bt_gatt_attr *attr,
709 void *user_data);
710
724void bt_gatt_foreach_attr_type(uint16_t start_handle, uint16_t end_handle,
725 const struct bt_uuid *uuid,
726 const void *attr_data, uint16_t num_matches,
728 void *user_data);
729
739static inline void bt_gatt_foreach_attr(uint16_t start_handle, uint16_t end_handle,
741 void *user_data)
742{
743 bt_gatt_foreach_attr_type(start_handle, end_handle, NULL, NULL, 0, func,
744 user_data);
745}
746
755struct bt_gatt_attr *bt_gatt_attr_next(const struct bt_gatt_attr *attr);
756
772 uint16_t attr_count,
773 const struct bt_uuid *uuid);
774
784
797
813ssize_t bt_gatt_attr_read(struct bt_conn *conn, const struct bt_gatt_attr *attr,
814 void *buf, uint16_t buf_len, uint16_t offset,
815 const void *value, uint16_t value_len);
816
833 const struct bt_gatt_attr *attr,
834 void *buf, uint16_t len, uint16_t offset);
835
843#define BT_GATT_SERVICE_DEFINE(_name, ...) \
844 const struct bt_gatt_attr attr_##_name[] = { __VA_ARGS__ }; \
845 const STRUCT_SECTION_ITERABLE(bt_gatt_service_static, _name) = \
846 BT_GATT_SERVICE(attr_##_name)
847
848#define _BT_GATT_ATTRS_ARRAY_DEFINE(n, _instances, _attrs_def) \
849 static struct bt_gatt_attr attrs_##n[] = _attrs_def(_instances[n])
850
851#define _BT_GATT_SERVICE_ARRAY_ITEM(_n, _) BT_GATT_SERVICE(attrs_##_n)
852
868#define BT_GATT_SERVICE_INSTANCE_DEFINE( \
869 _name, _instances, _instance_num, _attrs_def) \
870 BUILD_ASSERT(ARRAY_SIZE(_instances) == _instance_num, \
871 "The number of array elements does not match its size"); \
872 LISTIFY(_instance_num, _BT_GATT_ATTRS_ARRAY_DEFINE, (;), \
873 _instances, _attrs_def); \
874 static struct bt_gatt_service _name[] = { \
875 LISTIFY(_instance_num, _BT_GATT_SERVICE_ARRAY_ITEM, (,)) \
876 }
877
885#define BT_GATT_SERVICE(_attrs) \
886{ \
887 .attrs = _attrs, \
888 .attr_count = ARRAY_SIZE(_attrs), \
889}
890
898#define BT_GATT_PRIMARY_SERVICE(_service) \
899 BT_GATT_ATTRIBUTE(BT_UUID_GATT_PRIMARY, BT_GATT_PERM_READ, \
900 bt_gatt_attr_read_service, NULL, (void *)_service)
901
912#define BT_GATT_SECONDARY_SERVICE(_service) \
913 BT_GATT_ATTRIBUTE(BT_UUID_GATT_SECONDARY, BT_GATT_PERM_READ, \
914 bt_gatt_attr_read_service, NULL, (void *)_service)
915
932 const struct bt_gatt_attr *attr,
933 void *buf, uint16_t len, uint16_t offset);
934
942#define BT_GATT_INCLUDE_SERVICE(_service_incl) \
943 BT_GATT_ATTRIBUTE(BT_UUID_GATT_INCLUDE, BT_GATT_PERM_READ, \
944 bt_gatt_attr_read_included, NULL, _service_incl)
945
961ssize_t bt_gatt_attr_read_chrc(struct bt_conn *conn,
962 const struct bt_gatt_attr *attr, void *buf,
963 uint16_t len, uint16_t offset);
964
975#define BT_GATT_CHRC_INIT(_uuid, _handle, _props) \
976{ \
977 .uuid = _uuid, \
978 .value_handle = _handle, \
979 .properties = _props, \
980}
981
999#define BT_GATT_CHARACTERISTIC(_uuid, _props, _perm, _read, _write, _user_data) \
1000 BT_GATT_ATTRIBUTE(BT_UUID_GATT_CHRC, BT_GATT_PERM_READ, \
1001 bt_gatt_attr_read_chrc, NULL, \
1002 ((struct bt_gatt_chrc[]) { \
1003 BT_GATT_CHRC_INIT(_uuid, 0U, _props), \
1004 })), \
1005 BT_GATT_ATTRIBUTE(_uuid, _perm, _read, _write, _user_data)
1006
1018#if defined(CONFIG_BT_SETTINGS_CCC_LAZY_LOADING)
1019 #define BT_GATT_CCC_MAX (CONFIG_BT_MAX_CONN)
1020#elif defined(CONFIG_BT_CONN)
1021 #define BT_GATT_CCC_MAX (CONFIG_BT_MAX_PAIRED + CONFIG_BT_MAX_CONN)
1022#else
1023 #define BT_GATT_CCC_MAX 0
1024#endif
1025
1043
1045#define _bt_gatt_ccc bt_gatt_ccc_managed_user_data __DEPRECATED_MACRO
1046
1054
1057
1063 void (*cfg_changed)(const struct bt_gatt_attr *attr, uint16_t value);
1064
1074 ssize_t (*cfg_write)(struct bt_conn *conn,
1075 const struct bt_gatt_attr *attr, uint16_t value);
1076
1088 bool (*cfg_match)(struct bt_conn *conn,
1089 const struct bt_gatt_attr *attr);
1090};
1091
1111ssize_t bt_gatt_attr_read_ccc(struct bt_conn *conn,
1112 const struct bt_gatt_attr *attr, void *buf,
1113 uint16_t len, uint16_t offset);
1114
1134ssize_t bt_gatt_attr_write_ccc(struct bt_conn *conn,
1135 const struct bt_gatt_attr *attr, const void *buf,
1136 uint16_t len, uint16_t offset, uint8_t flags);
1137
1139#define BT_GATT_CCC_INITIALIZER BT_GATT_CCC_MANAGED_USER_DATA_INIT __DEPRECATED_MACRO
1140
1150#define BT_GATT_CCC_MANAGED_USER_DATA_INIT(_changed, _write, _match) \
1151 { \
1152 .cfg = {}, \
1153 .cfg_changed = _changed, \
1154 .cfg_write = _write, \
1155 .cfg_match = _match, \
1156 }
1157
1170#define BT_GATT_CCC_MANAGED(_ccc, _perm) \
1171 BT_GATT_ATTRIBUTE(BT_UUID_GATT_CCC, _perm, \
1172 bt_gatt_attr_read_ccc, bt_gatt_attr_write_ccc, \
1173 _ccc)
1174
1184#define BT_GATT_CCC(_changed, _perm) \
1185 BT_GATT_CCC_MANAGED(((struct bt_gatt_ccc_managed_user_data[]){ \
1186 BT_GATT_CCC_MANAGED_USER_DATA_INIT(_changed, NULL, NULL)}), \
1187 _perm)
1188
1199#define BT_GATT_CCC_WITH_WRITE_CB(_changed, _write, _perm) \
1200 BT_GATT_CCC_MANAGED(((struct bt_gatt_ccc_managed_user_data[]){ \
1201 BT_GATT_CCC_MANAGED_USER_DATA_INIT(_changed, _write, NULL)}), \
1202 _perm)
1203
1220ssize_t bt_gatt_attr_read_cep(struct bt_conn *conn,
1221 const struct bt_gatt_attr *attr, void *buf,
1222 uint16_t len, uint16_t offset);
1223
1231#define BT_GATT_CEP(_value) \
1232 BT_GATT_DESCRIPTOR(BT_UUID_GATT_CEP, BT_GATT_PERM_READ, \
1233 bt_gatt_attr_read_cep, NULL, (void *)_value)
1234
1252ssize_t bt_gatt_attr_read_cud(struct bt_conn *conn,
1253 const struct bt_gatt_attr *attr, void *buf,
1254 uint16_t len, uint16_t offset);
1255
1265#define BT_GATT_CUD(_value, _perm) \
1266 BT_GATT_DESCRIPTOR(BT_UUID_GATT_CUD, _perm, bt_gatt_attr_read_cud, \
1267 NULL, (void *)_value)
1268
1285ssize_t bt_gatt_attr_read_cpf(struct bt_conn *conn,
1286 const struct bt_gatt_attr *attr, void *buf,
1287 uint16_t len, uint16_t offset);
1288
1296#define BT_GATT_CPF(_value) \
1297 BT_GATT_DESCRIPTOR(BT_UUID_GATT_CPF, BT_GATT_PERM_READ, \
1298 bt_gatt_attr_read_cpf, NULL, (void *)_value)
1299
1314#define BT_GATT_DESCRIPTOR(_uuid, _perm, _read, _write, _user_data) \
1315 BT_GATT_ATTRIBUTE(_uuid, _perm, _read, _write, _user_data)
1316
1329#define BT_GATT_ATTRIBUTE(_uuid, _perm, _read, _write, _user_data) \
1330{ \
1331 .uuid = _uuid, \
1332 .read = _read, \
1333 .write = _write, \
1334 .user_data = _user_data, \
1335 .handle = 0, \
1336 .perm = _perm, \
1337}
1338
1344typedef void (*bt_gatt_complete_func_t) (struct bt_conn *conn, void *user_data);
1345
1356 const struct bt_uuid *uuid;
1362 const struct bt_gatt_attr *attr;
1364 const void *data;
1371#if defined(CONFIG_BT_EATT) || defined(__DOXYGEN__)
1374#endif /* CONFIG_BT_EATT */
1375};
1376
1396int bt_gatt_notify_cb(struct bt_conn *conn,
1397 struct bt_gatt_notify_params *params);
1398
1450int bt_gatt_notify_multiple(struct bt_conn *conn,
1451 uint16_t num_params,
1452 struct bt_gatt_notify_params params[]);
1453
1473static inline int bt_gatt_notify(struct bt_conn *conn,
1474 const struct bt_gatt_attr *attr,
1475 const void *data, uint16_t len)
1476{
1477 struct bt_gatt_notify_params params;
1478
1479 memset(&params, 0, sizeof(params));
1480
1481 params.attr = attr;
1482 params.data = data;
1483 params.len = len;
1484#if defined(CONFIG_BT_EATT)
1486#endif /* CONFIG_BT_EATT */
1487
1488 return bt_gatt_notify_cb(conn, &params);
1489}
1490
1510static inline int bt_gatt_notify_uuid(struct bt_conn *conn,
1511 const struct bt_uuid *uuid,
1512 const struct bt_gatt_attr *attr,
1513 const void *data, uint16_t len)
1514{
1515 struct bt_gatt_notify_params params;
1516
1517 memset(&params, 0, sizeof(params));
1518
1519 params.uuid = uuid;
1520 params.attr = attr;
1521 params.data = data;
1522 params.len = len;
1523#if defined(CONFIG_BT_EATT)
1525#endif /* CONFIG_BT_EATT */
1526
1527 return bt_gatt_notify_cb(conn, &params);
1528}
1529
1530/* Forward declaration of the bt_gatt_indicate_params structure */
1532
1540typedef void (*bt_gatt_indicate_func_t)(struct bt_conn *conn,
1541 struct bt_gatt_indicate_params *params,
1542 uint8_t err);
1543
1553 struct bt_gatt_indicate_params *params);
1554
1566 const struct bt_uuid *uuid;
1572 const struct bt_gatt_attr *attr;
1578 const void *data;
1582 uint8_t _ref;
1583#if defined(CONFIG_BT_EATT) || defined(__DOXYGEN__)
1586#endif /* CONFIG_BT_EATT */
1587};
1588
1614int bt_gatt_indicate(struct bt_conn *conn,
1615 struct bt_gatt_indicate_params *params);
1616
1635bool bt_gatt_is_subscribed(struct bt_conn *conn,
1636 const struct bt_gatt_attr *attr, uint16_t ccc_type);
1637
1647uint16_t bt_gatt_get_mtu(struct bt_conn *conn);
1648
1664uint16_t bt_gatt_get_uatt_mtu(struct bt_conn *conn);
1665
1684 void (*func)(struct bt_conn *conn, uint8_t err,
1685 struct bt_gatt_exchange_params *params);
1686};
1687
1712int bt_gatt_exchange_mtu(struct bt_conn *conn,
1713 struct bt_gatt_exchange_params *params);
1714
1716
1766typedef uint8_t (*bt_gatt_discover_func_t)(struct bt_conn *conn,
1767 const struct bt_gatt_attr *attr,
1768 struct bt_gatt_discover_params *params);
1769
1813
1815#define BT_GATT_AUTO_DISCOVER_CCC_HANDLE 0x0000U
1816
1820 const struct bt_uuid *uuid;
1823 union {
1825 struct {
1832 } _included;
1834 uint16_t start_handle;
1835 };
1845#if defined(CONFIG_BT_GATT_AUTO_DISCOVER_CCC) || defined(__DOXYGEN__)
1848#endif /* defined(CONFIG_BT_GATT_AUTO_DISCOVER_CCC) || defined(__DOXYGEN__) */
1849#if defined(CONFIG_BT_EATT) || defined(__DOXYGEN__)
1852#endif /* CONFIG_BT_EATT */
1853};
1854
1888int bt_gatt_discover(struct bt_conn *conn,
1889 struct bt_gatt_discover_params *params);
1890
1891struct bt_gatt_read_params;
1892
1908typedef uint8_t (*bt_gatt_read_func_t)(struct bt_conn *conn, uint8_t err,
1909 struct bt_gatt_read_params *params,
1910 const void *data, uint16_t length);
1911
1921 union {
1922 struct {
1928 struct {
1945 struct {
1969 const struct bt_uuid *uuid;
1971 };
1972#if defined(CONFIG_BT_EATT) || defined(__DOXYGEN__)
1975#endif /* CONFIG_BT_EATT */
1977 uint16_t _att_mtu;
1978};
1979
2019int bt_gatt_read(struct bt_conn *conn, struct bt_gatt_read_params *params);
2020
2022
2030typedef void (*bt_gatt_write_func_t)(struct bt_conn *conn, uint8_t err,
2031 struct bt_gatt_write_params *params);
2032
2042 const void *data;
2045#if defined(CONFIG_BT_EATT) || defined(__DOXYGEN__)
2048#endif /* CONFIG_BT_EATT */
2049};
2050
2068int bt_gatt_write(struct bt_conn *conn, struct bt_gatt_write_params *params);
2069
2095int bt_gatt_write_without_response_cb(struct bt_conn *conn, uint16_t handle,
2096 const void *data, uint16_t length,
2097 bool sign, bt_gatt_complete_func_t func,
2098 void *user_data);
2099
2118static inline int bt_gatt_write_without_response(struct bt_conn *conn,
2119 uint16_t handle, const void *data,
2120 uint16_t length, bool sign)
2121{
2122 return bt_gatt_write_without_response_cb(conn, handle, data, length,
2123 sign, NULL, NULL);
2124}
2125
2127
2144typedef uint8_t (*bt_gatt_notify_func_t)(struct bt_conn *conn,
2145 struct bt_gatt_subscribe_params *params,
2146 const void *data, uint16_t length);
2147
2155typedef void (*bt_gatt_subscribe_func_t)(struct bt_conn *conn, uint8_t err,
2156 struct bt_gatt_subscribe_params *params);
2157
2208
2217
2222#if defined(CONFIG_BT_GATT_AUTO_DISCOVER_CCC) || defined(__DOXYGEN__)
2227#endif /* defined(CONFIG_BT_GATT_AUTO_DISCOVER_CCC) || defined(__DOXYGEN__) */
2230#if defined(CONFIG_BT_SMP)
2236#endif
2239
2243 sys_snode_t node;
2245#if defined(CONFIG_BT_EATT) || defined(__DOXYGEN__)
2248#endif /* CONFIG_BT_EATT */
2249};
2250
2285int bt_gatt_subscribe(struct bt_conn *conn,
2286 struct bt_gatt_subscribe_params *params);
2287
2305 struct bt_gatt_subscribe_params *params);
2306
2329int bt_gatt_unsubscribe(struct bt_conn *conn,
2330 struct bt_gatt_subscribe_params *params);
2331
2349void bt_gatt_cancel(struct bt_conn *conn, void *params);
2350
2353#ifdef __cplusplus
2354}
2355#endif
2356
2361#endif /* ZEPHYR_INCLUDE_BLUETOOTH_GATT_H_ */
Bluetooth device address definitions and utilities.
Attribute Protocol handling.
Bluetooth UUID handling.
Bluetooth connection handling.
#define ATOMIC_DEFINE(name, num_bits)
Define an array of atomic variables.
Definition atomic.h:111
bt_att_chan_opt
ATT channel option bit field values.
Definition att.h:177
static const char * bt_att_err_to_str(uint8_t att_err)
Converts a ATT error to string.
Definition att.h:127
@ BT_ATT_CHAN_OPT_NONE
Both Enhanced and Unenhanced channels can be used
Definition att.h:179
bt_security_t
Security level.
Definition conn.h:814
int bt_gatt_exchange_mtu(struct bt_conn *conn, struct bt_gatt_exchange_params *params)
Exchange MTU.
int bt_gatt_read(struct bt_conn *conn, struct bt_gatt_read_params *params)
Read Attribute Value by handle.
uint8_t(* bt_gatt_read_func_t)(struct bt_conn *conn, uint8_t err, struct bt_gatt_read_params *params, const void *data, uint16_t length)
Read callback function.
Definition gatt.h:1908
void(* bt_gatt_write_func_t)(struct bt_conn *conn, uint8_t err, struct bt_gatt_write_params *params)
Write callback function.
Definition gatt.h:2030
void(* bt_gatt_subscribe_func_t)(struct bt_conn *conn, uint8_t err, struct bt_gatt_subscribe_params *params)
Subscription callback function.
Definition gatt.h:2155
int bt_gatt_write_without_response_cb(struct bt_conn *conn, uint16_t handle, const void *data, uint16_t length, bool sign, bt_gatt_complete_func_t func, void *user_data)
Write Attribute Value by handle without response with callback.
void bt_gatt_cancel(struct bt_conn *conn, void *params)
Try to cancel the first pending request identified by params.
int bt_gatt_unsubscribe(struct bt_conn *conn, struct bt_gatt_subscribe_params *params)
Unsubscribe Attribute Value Notification.
int bt_gatt_resubscribe(uint8_t id, const bt_addr_le_t *peer, struct bt_gatt_subscribe_params *params)
Resubscribe Attribute Value Notification subscription.
int bt_gatt_subscribe(struct bt_conn *conn, struct bt_gatt_subscribe_params *params)
Subscribe Attribute Value Notification.
int bt_gatt_write(struct bt_conn *conn, struct bt_gatt_write_params *params)
Write Attribute Value by handle.
static int bt_gatt_write_without_response(struct bt_conn *conn, uint16_t handle, const void *data, uint16_t length, bool sign)
Write Attribute Value by handle without response.
Definition gatt.h:2118
bt_gatt_sub_flag
Subscription flags.
Definition gatt.h:2159
uint8_t(* bt_gatt_notify_func_t)(struct bt_conn *conn, struct bt_gatt_subscribe_params *params, const void *data, uint16_t length)
Notification callback function.
Definition gatt.h:2144
uint8_t(* bt_gatt_discover_func_t)(struct bt_conn *conn, const struct bt_gatt_attr *attr, struct bt_gatt_discover_params *params)
Discover attribute callback function.
Definition gatt.h:1766
int bt_gatt_discover(struct bt_conn *conn, struct bt_gatt_discover_params *params)
GATT Discover function.
bt_gatt_discover_type
GATT Discover types.
Definition gatt.h:1771
@ BT_GATT_SUBSCRIBE_FLAG_NO_RESUB
No resubscribe flag.
Definition gatt.h:2183
@ BT_GATT_SUBSCRIBE_NUM_FLAGS
Definition gatt.h:2206
@ BT_GATT_SUBSCRIBE_FLAG_SENT
Sent flag.
Definition gatt.h:2204
@ BT_GATT_SUBSCRIBE_FLAG_VOLATILE
Persistence flag.
Definition gatt.h:2169
@ BT_GATT_SUBSCRIBE_FLAG_WRITE_PENDING
Write pending flag.
Definition gatt.h:2192
@ BT_GATT_DISCOVER_DESCRIPTOR
Discover Descriptors.
Definition gatt.h:1791
@ BT_GATT_DISCOVER_SECONDARY
Discover Secondary Services.
Definition gatt.h:1775
@ BT_GATT_DISCOVER_CHARACTERISTIC
Discover Characteristic Values.
Definition gatt.h:1782
@ BT_GATT_DISCOVER_INCLUDE
Discover Included Services.
Definition gatt.h:1777
@ BT_GATT_DISCOVER_STD_CHAR_DESC
Discover standard characteristic descriptor values.
Definition gatt.h:1811
@ BT_GATT_DISCOVER_PRIMARY
Discover Primary Services.
Definition gatt.h:1773
@ BT_GATT_DISCOVER_ATTRIBUTE
Discover Attributes.
Definition gatt.h:1800
void(* bt_gatt_indicate_func_t)(struct bt_conn *conn, struct bt_gatt_indicate_params *params, uint8_t err)
Indication complete result callback.
Definition gatt.h:1540
static int bt_gatt_notify_uuid(struct bt_conn *conn, const struct bt_uuid *uuid, const struct bt_gatt_attr *attr, const void *data, uint16_t len)
Notify attribute value change by UUID.
Definition gatt.h:1510
void bt_gatt_cb_register(struct bt_gatt_cb *cb)
Register GATT callbacks.
ssize_t bt_gatt_attr_read_cud(struct bt_conn *conn, const struct bt_gatt_attr *attr, void *buf, uint16_t len, uint16_t offset)
Read Characteristic User Description Descriptor Attribute helper.
uint16_t bt_gatt_attr_get_handle(const struct bt_gatt_attr *attr)
Get Attribute handle.
ssize_t bt_gatt_attr_read_ccc(struct bt_conn *conn, const struct bt_gatt_attr *attr, void *buf, uint16_t len, uint16_t offset)
Read Client Characteristic Configuration Attribute helper.
uint16_t bt_gatt_get_mtu(struct bt_conn *conn)
Get ATT MTU for a connection.
struct bt_gatt_attr * bt_gatt_attr_next(const struct bt_gatt_attr *attr)
Iterate to the next attribute.
ssize_t bt_gatt_attr_read_included(struct bt_conn *conn, const struct bt_gatt_attr *attr, void *buf, uint16_t len, uint16_t offset)
Read Include Attribute helper.
int bt_gatt_indicate(struct bt_conn *conn, struct bt_gatt_indicate_params *params)
Indicate attribute value change.
int bt_gatt_notify_cb(struct bt_conn *conn, struct bt_gatt_notify_params *params)
Notify attribute value change.
ssize_t bt_gatt_attr_read_cep(struct bt_conn *conn, const struct bt_gatt_attr *attr, void *buf, uint16_t len, uint16_t offset)
Read Characteristic Extended Properties Attribute helper.
ssize_t bt_gatt_attr_read_cpf(struct bt_conn *conn, const struct bt_gatt_attr *attr, void *buf, uint16_t len, uint16_t offset)
Read Characteristic Presentation format Descriptor Attribute helper.
void(* bt_gatt_indicate_params_destroy_t)(struct bt_gatt_indicate_params *params)
Callback to destroy or clean up the GATT Indicate Value parameters.
Definition gatt.h:1552
int bt_gatt_authorization_cb_register(const struct bt_gatt_authorization_cb *cb)
Register GATT authorization callbacks.
uint8_t(* bt_gatt_attr_func_t)(const struct bt_gatt_attr *attr, uint16_t handle, void *user_data)
Attribute iterator callback.
Definition gatt.h:707
uint16_t bt_gatt_get_uatt_mtu(struct bt_conn *conn)
Get Unenhanced ATT (UATT) MTU for a connection.
static int bt_gatt_notify(struct bt_conn *conn, const struct bt_gatt_attr *attr, const void *data, uint16_t len)
Notify attribute value change.
Definition gatt.h:1473
int bt_gatt_notify_multiple(struct bt_conn *conn, uint16_t num_params, struct bt_gatt_notify_params params[])
Send multiple notifications in a single PDU.
uint16_t bt_gatt_attr_value_handle(const struct bt_gatt_attr *attr)
Get the handle of the characteristic value descriptor.
static void bt_gatt_foreach_attr(uint16_t start_handle, uint16_t end_handle, bt_gatt_attr_func_t func, void *user_data)
Attribute iterator.
Definition gatt.h:739
bt_gatt_iter
to be used as return values for bt_gatt_attr_func_t and bt_gatt_read_func_t type callbacks.
Definition gatt.h:692
int bt_gatt_service_register(struct bt_gatt_service *svc)
Register GATT service.
ssize_t bt_gatt_attr_write_ccc(struct bt_conn *conn, const struct bt_gatt_attr *attr, const void *buf, uint16_t len, uint16_t offset, uint8_t flags)
Write Client Characteristic Configuration Attribute helper.
bool bt_gatt_is_subscribed(struct bt_conn *conn, const struct bt_gatt_attr *attr, uint16_t ccc_type)
Check if connection have subscribed to attribute.
#define BT_GATT_CCC_MAX
BT_GATT_CCC_MAX is defined depending on whether CONFIG_BT_SETTINGS_CCC_LAZY_LOADING or CONFIG_BT_CONN...
Definition gatt.h:1023
void(* bt_gatt_complete_func_t)(struct bt_conn *conn, void *user_data)
Notification complete result callback.
Definition gatt.h:1344
ssize_t bt_gatt_attr_read_service(struct bt_conn *conn, const struct bt_gatt_attr *attr, void *buf, uint16_t len, uint16_t offset)
Read Service Attribute helper.
struct bt_gatt_attr * bt_gatt_find_by_uuid(const struct bt_gatt_attr *attr, uint16_t attr_count, const struct bt_uuid *uuid)
Find Attribute by UUID.
ssize_t bt_gatt_attr_read_chrc(struct bt_conn *conn, const struct bt_gatt_attr *attr, void *buf, uint16_t len, uint16_t offset)
Read Characteristic Attribute helper.
void bt_gatt_foreach_attr_type(uint16_t start_handle, uint16_t end_handle, const struct bt_uuid *uuid, const void *attr_data, uint16_t num_matches, bt_gatt_attr_func_t func, void *user_data)
Attribute iterator by type.
bool bt_gatt_service_is_registered(const struct bt_gatt_service *svc)
Check if GATT service is registered.
int bt_gatt_service_unregister(struct bt_gatt_service *svc)
Unregister GATT service.
ssize_t bt_gatt_attr_read(struct bt_conn *conn, const struct bt_gatt_attr *attr, void *buf, uint16_t buf_len, uint16_t offset, const void *value, uint16_t value_len)
Generic Read Attribute value helper.
static const char * bt_gatt_err_to_str(int gatt_err)
Converts a GATT error to string.
Definition gatt.h:611
@ BT_GATT_ITER_STOP
Definition gatt.h:693
@ BT_GATT_ITER_CONTINUE
Definition gatt.h:694
ssize_t(* bt_gatt_attr_write_func_t)(struct bt_conn *conn, const struct bt_gatt_attr *attr, const void *buf, uint16_t len, uint16_t offset, uint8_t flags)
Attribute Value write implementation.
Definition gatt.h:212
ssize_t(* bt_gatt_attr_read_func_t)(struct bt_conn *conn, const struct bt_gatt_attr *attr, void *buf, uint16_t len, uint16_t offset)
Attribute read callback.
Definition gatt.h:169
bt_gatt_attr_write_flag
GATT attribute write flags.
Definition gatt.h:112
bt_gatt_perm
GATT attribute permission bit field values.
Definition gatt.h:46
@ BT_GATT_WRITE_FLAG_PREPARE
Attribute prepare write flag.
Definition gatt.h:118
@ BT_GATT_WRITE_FLAG_CMD
Attribute write command flag.
Definition gatt.h:125
@ BT_GATT_WRITE_FLAG_EXECUTE
Attribute write execute flag.
Definition gatt.h:133
@ BT_GATT_PERM_READ_ENCRYPT
Attribute read permission with encryption.
Definition gatt.h:60
@ BT_GATT_PERM_WRITE
Attribute write permission.
Definition gatt.h:54
@ BT_GATT_PERM_WRITE_ENCRYPT
Attribute write permission with encryption.
Definition gatt.h:66
@ BT_GATT_PERM_NONE
No operations supported, e.g.
Definition gatt.h:48
@ BT_GATT_PERM_READ
Attribute read permission.
Definition gatt.h:51
@ BT_GATT_PERM_PREPARE_WRITE
Attribute prepare write permission.
Definition gatt.h:87
@ BT_GATT_PERM_WRITE_LESC
Attribute write permission with LE Secure Connection encryption.
Definition gatt.h:99
@ BT_GATT_PERM_READ_AUTHEN
Attribute read permission with authentication.
Definition gatt.h:73
@ BT_GATT_PERM_WRITE_AUTHEN
Attribute write permission with authentication.
Definition gatt.h:80
@ BT_GATT_PERM_READ_LESC
Attribute read permission with LE Secure Connection encryption.
Definition gatt.h:93
struct _snode sys_snode_t
Single-linked list node structure.
Definition slist.h:39
#define BIT(n)
Unsigned integer with bit position n set (signed in assembly language).
Definition util_macro.h:44
#define NULL
Definition iar_missing_defs.h:20
__SIZE_TYPE__ ssize_t
Definition types.h:28
flags
Definition parser.h:97
#define bool
Definition stdbool.h:13
__UINT8_TYPE__ uint8_t
Definition stdint.h:88
__UINT16_TYPE__ uint16_t
Definition stdint.h:89
__INT8_TYPE__ int8_t
Definition stdint.h:72
void * memset(void *buf, int c, size_t n)
Bluetooth LE Device Address.
Definition addr.h:49
GATT Attribute.
Definition gatt.h:227
bt_gatt_attr_read_func_t read
Attribute Value read method.
Definition gatt.h:254
uint16_t perm
Attribute Permissions.
Definition gatt.h:299
bt_gatt_attr_write_func_t write
Attribute Value write method.
Definition gatt.h:267
const struct bt_uuid * uuid
Attribute Type.
Definition gatt.h:241
void * user_data
Private data for read() and write() implementation.
Definition gatt.h:280
uint16_t handle
Attribute Handle.
Definition gatt.h:290
GATT authorization callback structure.
Definition gatt.h:392
bool(* read_authorize)(struct bt_conn *conn, const struct bt_gatt_attr *attr)
Authorize the GATT read operation.
Definition gatt.h:404
bool(* write_authorize)(struct bt_conn *conn, const struct bt_gatt_attr *attr)
Authorize the GATT write operation.
Definition gatt.h:418
GATT callback structure.
Definition gatt.h:372
void(* att_mtu_updated)(struct bt_conn *conn, uint16_t tx, uint16_t rx)
The maximum ATT MTU on a connection has changed.
Definition gatt.h:382
GATT CCC configuration entry.
Definition gatt.h:1032
uint16_t value
Configuration value Value used to enable or disable notifications or indications for a specific chara...
Definition gatt.h:1041
bt_addr_le_t peer
Remote peer address.
Definition gatt.h:1036
uint8_t id
Local identity, BT_ID_DEFAULT in most cases.
Definition gatt.h:1034
Internal representation of CCC value.
Definition gatt.h:1051
void(* cfg_changed)(const struct bt_gatt_attr *attr, uint16_t value)
CCC attribute changed callback.
Definition gatt.h:1063
struct bt_gatt_ccc_cfg cfg[0]
Configuration for each connection.
Definition gatt.h:1053
ssize_t(* cfg_write)(struct bt_conn *conn, const struct bt_gatt_attr *attr, uint16_t value)
CCC attribute write validation callback.
Definition gatt.h:1074
uint16_t value
Highest value of all connected peer's subscriptions.
Definition gatt.h:1056
bool(* cfg_match)(struct bt_conn *conn, const struct bt_gatt_attr *attr)
CCC attribute match handler.
Definition gatt.h:1088
Client Characteristic Configuration Attribute Value.
Definition gatt.h:525
uint16_t flags
Client Characteristic Configuration flags, a bitmap of BT_GATT_CCC_* macros.
Definition gatt.h:527
Characteristic Extended Properties Attribute Value.
Definition gatt.h:501
uint16_t properties
Characteristic Extended properties, a bitmap of BT_GATT_CEP_* macros.
Definition gatt.h:503
Attribute Value of a Characteristic Declaration.
Definition gatt.h:481
uint16_t value_handle
Characteristic Value handle.
Definition gatt.h:485
uint8_t properties
Characteristic properties, a bitmap of BT_GATT_CHRC_* macros.
Definition gatt.h:487
const struct bt_uuid * uuid
Characteristic UUID.
Definition gatt.h:483
GATT Characteristic Presentation Format Attribute Value.
Definition gatt.h:554
uint8_t name_space
Name space of the description.
Definition gatt.h:579
uint16_t unit
UUID of the unit of the characteristic.
Definition gatt.h:572
int8_t exponent
Exponent field for value formatting.
Definition gatt.h:566
uint16_t description
Description of the characteristic as defined in a higher layer profile.
Definition gatt.h:586
uint8_t format
Format of the value of the characteristic.
Definition gatt.h:560
GATT Discover Attributes parameters.
Definition gatt.h:1818
uint16_t start_handle
Starting attribute handle for included service.
Definition gatt.h:1829
uint16_t end_handle
Ending attribute handle for included service.
Definition gatt.h:1831
bt_gatt_discover_func_t func
Discover attribute callback.
Definition gatt.h:1822
uint16_t attr_handle
Include service attribute declaration handle.
Definition gatt.h:1827
const struct bt_uuid * uuid
Discover UUID type.
Definition gatt.h:1820
struct bt_gatt_subscribe_params * sub_params
Only for stack-internal use, used for automatic discovery.
Definition gatt.h:1847
uint8_t type
Discover type.
Definition gatt.h:1844
enum bt_att_chan_opt chan_opt
Att channel options.
Definition gatt.h:1851
GATT Exchange MTU parameters.
Definition gatt.h:1682
void(* func)(struct bt_conn *conn, uint8_t err, struct bt_gatt_exchange_params *params)
Callback for MTU exchange response.
Definition gatt.h:1684
Include Attribute Value.
Definition gatt.h:362
uint16_t end_handle
Handle of the last attribute within the included service.
Definition gatt.h:368
uint16_t start_handle
Handle of the first attribute within the included service.
Definition gatt.h:366
const struct bt_uuid * uuid
Service UUID.
Definition gatt.h:364
GATT Indicate Value parameters.
Definition gatt.h:1560
enum bt_att_chan_opt chan_opt
Att channel options.
Definition gatt.h:1585
uint16_t len
Indicate Value length.
Definition gatt.h:1580
const struct bt_gatt_attr * attr
Indicate Attribute object.
Definition gatt.h:1572
const void * data
Indicate Value data.
Definition gatt.h:1578
bt_gatt_indicate_params_destroy_t destroy
Indicate operation complete callback.
Definition gatt.h:1576
bt_gatt_indicate_func_t func
Indicate Value callback.
Definition gatt.h:1574
const struct bt_uuid * uuid
Indicate Attribute UUID type.
Definition gatt.h:1566
GATT notification parameters.
Definition gatt.h:1350
const struct bt_uuid * uuid
Notification Attribute UUID type.
Definition gatt.h:1356
uint16_t len
Notification Value length.
Definition gatt.h:1366
const struct bt_gatt_attr * attr
Notification Attribute object.
Definition gatt.h:1362
enum bt_att_chan_opt chan_opt
Att channel options.
Definition gatt.h:1373
bt_gatt_complete_func_t func
Notification Value callback.
Definition gatt.h:1368
void * user_data
Notification Value callback user data.
Definition gatt.h:1370
const void * data
Notification Value data.
Definition gatt.h:1364
GATT Read parameters.
Definition gatt.h:1913
size_t handle_count
If equals to 1 single.handle and single.offset are used.
Definition gatt.h:1920
enum bt_att_chan_opt chan_opt
Att channel options.
Definition gatt.h:1974
uint16_t * handles
Attribute handles to read with Read Multiple Characteristic Values.
Definition gatt.h:1932
uint16_t offset
Attribute data offset.
Definition gatt.h:1926
bt_gatt_read_func_t func
Read attribute callback.
Definition gatt.h:1915
struct bt_gatt_read_params::@117::@121 by_uuid
bool variable
If true use Read Multiple Variable Length Characteristic Values procedure.
Definition gatt.h:1943
uint16_t end_handle
Requested end attribute handle number.
Definition gatt.h:1967
struct bt_gatt_read_params::@117::@120 multiple
uint16_t start_handle
Requested start attribute handle number.
Definition gatt.h:1957
struct bt_gatt_read_params::@117::@119 single
const struct bt_uuid * uuid
2 or 16 octet UUID.
Definition gatt.h:1969
uint16_t handle
Attribute handle.
Definition gatt.h:1924
Server Characteristic Configuration Attribute Value.
Definition gatt.h:544
uint16_t flags
Server Characteristic Configuration flags, a bitmap of BT_GATT_SCC_* macros.
Definition gatt.h:546
Static GATT Service structure.
Definition gatt.h:319
const struct bt_gatt_attr * attrs
Service Attributes.
Definition gatt.h:321
size_t attr_count
Service Attribute count.
Definition gatt.h:323
Service Attribute Value.
Definition gatt.h:349
const struct bt_uuid * uuid
Service UUID.
Definition gatt.h:351
uint16_t end_handle
Handle of the last Attribute within the Service.
Definition gatt.h:353
GATT Service structure.
Definition gatt.h:332
struct bt_gatt_attr * attrs
Service Attributes.
Definition gatt.h:334
size_t attr_count
Service Attribute count.
Definition gatt.h:336
GATT Subscribe parameters.
Definition gatt.h:2210
uint16_t value
Subscribe value.
Definition gatt.h:2229
bt_security_t min_security
Minimum required security for received notification.
Definition gatt.h:2235
uint16_t ccc_handle
Subscribe CCC handle.
Definition gatt.h:2221
bt_gatt_subscribe_func_t subscribe
Subscribe CCC write request response callback If given, called with the subscription parameters given...
Definition gatt.h:2216
uint16_t value_handle
Subscribe value handle.
Definition gatt.h:2219
bt_gatt_notify_func_t notify
Notification value callback.
Definition gatt.h:2212
struct bt_gatt_discover_params * disc_params
Discover parameters used when ccc_handle = BT_GATT_AUTO_DISCOVER_CCC_HANDLE.
Definition gatt.h:2226
enum bt_att_chan_opt chan_opt
Att channel options.
Definition gatt.h:2247
uint16_t end_handle
Subscribe End handle (for automatic discovery)
Definition gatt.h:2224
GATT Write parameters.
Definition gatt.h:2034
bt_gatt_write_func_t func
Response callback.
Definition gatt.h:2036
uint16_t handle
Attribute handle.
Definition gatt.h:2038
const void * data
Data to be written.
Definition gatt.h:2042
enum bt_att_chan_opt chan_opt
Att channel options.
Definition gatt.h:2047
uint16_t offset
Attribute data offset.
Definition gatt.h:2040
uint16_t length
Length of the data.
Definition gatt.h:2044
This is a 'tentative' type and should be used as a pointer only.
Definition uuid.h:50
Binary representation of a UUID.
Definition uuid.h:48
Misc utilities.
Macros to abstract toolchain specific capabilities.
Macro utilities.