Line data Source code
1 0 : /*
2 : * Copyright (c) 2024 Croxel, Inc.
3 : *
4 : * SPDX-License-Identifier: Apache-2.0
5 : */
6 :
7 : #ifndef ZEPHYR_INCLUDE_BLUETOOTH_SERVICES_NUS_INST_H_
8 : #define ZEPHYR_INCLUDE_BLUETOOTH_SERVICES_NUS_INST_H_
9 :
10 : #include <zephyr/bluetooth/gatt.h>
11 : #include <zephyr/sys/iterable_sections.h>
12 : #include <zephyr/sys/slist.h>
13 :
14 : #ifdef __cplusplus
15 : extern "C" {
16 : #endif
17 :
18 0 : struct bt_nus_inst {
19 : /** Pointer to the NUS Service Instance */
20 1 : const struct bt_gatt_service_static *svc;
21 :
22 : /** List of subscribers to invoke callbacks on asynchronous events */
23 1 : sys_slist_t *cbs;
24 : };
25 :
26 0 : #define BT_UUID_NUS_SERVICE BT_UUID_DECLARE_128(BT_UUID_NUS_SRV_VAL)
27 0 : #define BT_UUID_NUS_TX_CHAR BT_UUID_DECLARE_128(BT_UUID_NUS_TX_CHAR_VAL)
28 0 : #define BT_UUID_NUS_RX_CHAR BT_UUID_DECLARE_128(BT_UUID_NUS_RX_CHAR_VAL)
29 :
30 : /** Required as the service may be instantiated outside of the module */
31 1 : ssize_t nus_bt_chr_write(struct bt_conn *conn, const struct bt_gatt_attr *attr,
32 : const void *buf, uint16_t len, uint16_t offset, uint8_t flags);
33 0 : void nus_ccc_cfg_changed(const struct bt_gatt_attr *attr, uint16_t value);
34 :
35 : #define Z_INTERNAL_BT_NUS_INST_DEFINE(_name) \
36 : \
37 : BT_GATT_SERVICE_DEFINE(_name##_svc, \
38 : BT_GATT_PRIMARY_SERVICE(BT_UUID_NUS_SERVICE), \
39 : BT_GATT_CHARACTERISTIC(BT_UUID_NUS_TX_CHAR, \
40 : BT_GATT_CHRC_NOTIFY, \
41 : BT_GATT_PERM_NONE, \
42 : NULL, NULL, NULL), \
43 : BT_GATT_CCC(nus_ccc_cfg_changed, \
44 : BT_GATT_PERM_READ | BT_GATT_PERM_WRITE), \
45 : BT_GATT_CHARACTERISTIC(BT_UUID_NUS_RX_CHAR, \
46 : BT_GATT_CHRC_WRITE | \
47 : BT_GATT_CHRC_WRITE_WITHOUT_RESP, \
48 : BT_GATT_PERM_WRITE, \
49 : NULL, nus_bt_chr_write, NULL), \
50 : ); \
51 : \
52 : sys_slist_t _name##_cbs = SYS_SLIST_STATIC_INIT(&_name##_cbs); \
53 : \
54 : STRUCT_SECTION_ITERABLE(bt_nus_inst, _name) = { \
55 : .svc = &_name##_svc, \
56 : .cbs = &_name##_cbs, \
57 : }
58 :
59 : #ifdef __cplusplus
60 : }
61 : #endif
62 :
63 : #endif /* ZEPHYR_INCLUDE_BLUETOOTH_SERVICES_NUS_INST_H_ */
|