1 /** @file
2  *  @brief Bluetooth Mesh Configuration Server Model APIs.
3  */
4 
5 /*
6  * SPDX-FileCopyrightText: 2017 Intel Corporation
7  *
8  * SPDX-License-Identifier: Apache-2.0
9  */
10 #ifndef _BLE_MESH_CFG_SRV_H_
11 #define _BLE_MESH_CFG_SRV_H_
12 
13 #include "mesh_access.h"
14 
15 /**
16  * @brief Bluetooth Mesh
17  * @defgroup bt_mesh_cfg_srv Bluetooth Mesh Configuration Server Model
18  * @ingroup bt_mesh
19  * @{
20  */
21 
22 #ifdef __cplusplus
23 extern "C" {
24 #endif
25 
26 /** Mesh Configuration Server Model Context */
27 struct bt_mesh_cfg_srv {
28     struct bt_mesh_model *model;
29 
30     uint8_t net_transmit;      /* Network Transmit state */
31     uint8_t relay;             /* Relay Mode state */
32     uint8_t relay_retransmit;  /* Relay Retransmit state */
33     uint8_t beacon;            /* Secure Network Beacon state */
34     uint8_t gatt_proxy;        /* GATT Proxy state */
35     uint8_t frnd;              /* Friend state */
36     uint8_t default_ttl;       /* Default TTL */
37 
38     /* Heartbeat Publication */
39     struct bt_mesh_hb_pub {
40         struct k_delayed_work timer;
41 
42         uint16_t dst;
43         uint16_t count;
44         uint8_t  period;
45         uint8_t  ttl;
46         uint16_t feat;
47         uint16_t net_idx;
48     } hb_pub;
49 
50     /* Heartbeat Subscription */
51     struct bt_mesh_hb_sub {
52         int64_t  expiry;
53 
54         uint16_t src;
55         uint16_t dst;
56         uint16_t count;
57         uint8_t  min_hops;
58         uint8_t  max_hops;
59 
60         /* Optional subscription tracking function */
61         void (*func)(uint8_t hops, uint16_t feat);
62     } hb_sub;
63 };
64 
65 extern const struct bt_mesh_model_op bt_mesh_cfg_srv_op[];
66 extern const struct bt_mesh_model_cb bt_mesh_cfg_srv_cb;
67 
68 #define BLE_MESH_MODEL_CFG_SRV(srv_data)            \
69         BLE_MESH_MODEL_CB(BLE_MESH_MODEL_ID_CFG_SRV,   \
70             bt_mesh_cfg_srv_op, NULL, srv_data, &bt_mesh_cfg_srv_cb)
71 
72 typedef union {
73     struct {
74         uint8_t beacon;
75     } cfg_beacon_set;
76     struct {
77         uint8_t ttl;
78     } cfg_default_ttl_set;
79     struct {
80         uint8_t gatt_proxy;
81     } cfg_gatt_proxy_set;
82     struct {
83         uint8_t relay;
84         uint8_t retransmit;
85     } cfg_relay_set;
86     struct {
87         uint16_t elem_addr;
88         uint16_t pub_addr;
89         uint16_t app_idx;
90         bool  cred_flag;
91         uint8_t  ttl;
92         uint8_t  period;
93         uint8_t  transmit;
94         uint16_t cid;
95         uint16_t mod_id;
96     } cfg_mod_pub_set;
97     struct {
98         uint16_t elem_addr;
99         uint8_t  pub_addr[16];
100         uint16_t app_idx;
101         bool  cred_flag;
102         uint8_t  ttl;
103         uint8_t  period;
104         uint8_t  transmit;
105         uint16_t cid;
106         uint16_t mod_id;
107     } cfg_mod_pub_va_set;
108     struct {
109         uint16_t elem_addr;
110         uint16_t sub_addr;
111         uint16_t cid;
112         uint16_t mod_id;
113     } cfg_mod_sub_add;
114     struct {
115         uint16_t elem_addr;
116         uint8_t  sub_addr[16];
117         uint16_t cid;
118         uint16_t mod_id;
119     } cfg_mod_sub_va_add;
120     struct {
121         uint16_t elem_addr;
122         uint16_t sub_addr;
123         uint16_t cid;
124         uint16_t mod_id;
125     } cfg_mod_sub_delete;
126     struct {
127         uint16_t elem_addr;
128         uint8_t  sub_addr[16];
129         uint16_t cid;
130         uint16_t mod_id;
131     } cfg_mod_sub_va_delete;
132     struct {
133         uint16_t elem_addr;
134         uint16_t sub_addr;
135         uint16_t cid;
136         uint16_t mod_id;
137     } cfg_mod_sub_overwrite;
138     struct {
139         uint16_t elem_addr;
140         uint8_t  sub_addr[16];
141         uint16_t cid;
142         uint16_t mod_id;
143     } cfg_mod_sub_va_overwrite;
144     struct {
145         uint16_t elem_addr;
146         uint16_t cid;
147         uint16_t mod_id;
148     } cfg_mod_sub_delete_all;
149     struct {
150         uint16_t net_idx;
151         uint8_t  net_key[16];
152     } cfg_netkey_add;
153     struct {
154         uint16_t net_idx;
155         uint8_t  net_key[16];
156     } cfg_netkey_update;
157     struct {
158         uint16_t net_idx;
159     } cfg_netkey_delete;
160     struct {
161         uint16_t net_idx;
162         uint16_t app_idx;
163         uint8_t  app_key[16];
164     } cfg_appkey_add;
165     struct {
166         uint16_t net_idx;
167         uint16_t app_idx;
168         uint8_t  app_key[16];
169     } cfg_appkey_update;
170     struct {
171         uint16_t net_idx;
172         uint16_t app_idx;
173     } cfg_appkey_delete;
174     struct {
175         uint16_t net_idx;
176         uint8_t  identity;
177     } cfg_node_identity_set;
178     struct {
179         uint16_t elem_addr;
180         uint16_t app_idx;
181         uint16_t cid;
182         uint16_t mod_id;
183     } cfg_mod_app_bind;
184     struct {
185         uint16_t elem_addr;
186         uint16_t app_idx;
187         uint16_t cid;
188         uint16_t mod_id;
189     } cfg_mod_app_unbind;
190     struct {
191         uint8_t frnd;
192     } cfg_friend_set;
193     struct {
194         uint16_t net_idx;
195         uint8_t  kr_phase;
196     } cfg_kr_phase_set;
197     struct {
198         uint16_t dst;
199         uint8_t  count;
200         uint8_t  period;
201         uint8_t  ttl;
202         uint16_t feat;
203         uint16_t net_idx;
204     } cfg_hb_pub_set;
205     struct {
206         uint16_t src;
207         uint16_t dst;
208         uint8_t  period;
209     } cfg_hb_sub_set;
210     struct {
211         uint8_t transmit;
212     } cfg_net_transmit_set;
213 } bt_mesh_cfg_server_state_change_t;
214 
215 #ifdef __cplusplus
216 }
217 #endif
218 
219 /**
220  * @}
221  */
222 
223 #endif /* __BLE_MESH_CFG_SRV_H */
224