Line data Source code
1 0 : /*
2 : * Copyright (c) 2024 Nordic Semiconductor ASA
3 : *
4 : * SPDX-License-Identifier: Apache-2.0
5 : */
6 :
7 : #ifndef ZEPHYR_INCLUDE_BLUETOOTH_MESH_BRG_CFG_CLI_H__
8 : #define ZEPHYR_INCLUDE_BLUETOOTH_MESH_BRG_CFG_CLI_H__
9 :
10 : #include <zephyr/bluetooth/mesh/brg_cfg.h>
11 :
12 : #ifdef __cplusplus
13 : extern "C" {
14 : #endif
15 :
16 : /**
17 : * @defgroup bt_mesh_brg_cfg_cli Bridge Configuration Client Model
18 : * @ingroup bt_mesh
19 : * @{
20 : * @brief API for the Bluetooth Mesh Bridge Configuration Client model
21 : */
22 :
23 : struct bt_mesh_brg_cfg_cli;
24 :
25 : /**
26 : * @brief Bridge Configuration Client model Composition Data entry.
27 : *
28 : * @param _cli Pointer to a @ref bt_mesh_brg_cfg_cli instance.
29 : */
30 1 : #define BT_MESH_MODEL_BRG_CFG_CLI(_cli) \
31 : BT_MESH_MODEL_CB(BT_MESH_MODEL_ID_BRG_CFG_CLI, _bt_mesh_brg_cfg_cli_op, NULL, _cli, \
32 : &_bt_mesh_brg_cfg_cli_cb)
33 :
34 : /** Mesh Bridge Configuration Client Status messages callback */
35 1 : struct bt_mesh_brg_cfg_cli_cb {
36 : /** @brief Optional callback for Subnet Bridge Status message.
37 : *
38 : * Handles received Subnet Bridge Status messages from a Bridge
39 : * Configuration Server.
40 :
41 : * @param cli Bridge Configuration Client context.
42 : * @param addr Address of the sender.
43 : * @param status Status received from the server.
44 : */
45 1 : void (*bridge_status)(struct bt_mesh_brg_cfg_cli *cli, uint16_t addr,
46 : enum bt_mesh_brg_cfg_state status);
47 :
48 : /** @brief Optional callback for Bridging Table Size Status message.
49 : *
50 : * Handles received Bridging Table Size Status messages from a Bridge
51 : * Configuration Server.
52 : *
53 : * @param cli Bridge Configuration Client context.
54 : * @param addr Address of the sender.
55 : * @param size Size received from the server.
56 : */
57 1 : void (*table_size_status)(struct bt_mesh_brg_cfg_cli *cli, uint16_t addr, uint16_t size);
58 :
59 : /** @brief Optional callback for Bridging Table Status message.
60 : *
61 : * Handles received Bridging Table status messages from a Bridge
62 : * Configuration Server.
63 : *
64 : * @param cli Bridge Configuration Client context.
65 : * @param addr Address of the sender.
66 : * @param rsp Response received from the Bridging Configuration Server.
67 : */
68 1 : void (*table_status)(struct bt_mesh_brg_cfg_cli *cli, uint16_t addr,
69 : struct bt_mesh_brg_cfg_table_status *rsp);
70 :
71 : /** @brief Optional callback for Bridged Subnets List message.
72 : *
73 : * Handles received Bridged Subnets List messages from a Bridge
74 : * Configuration Server.
75 : *
76 : * @param cli Bridge Configuration Client context.
77 : * @param addr Address of the sender.
78 : * @param rsp Response received from the Bridging Configuration Server.
79 : */
80 1 : void (*subnets_list)(struct bt_mesh_brg_cfg_cli *cli, uint16_t addr,
81 : struct bt_mesh_brg_cfg_subnets_list *rsp);
82 :
83 : /** @brief Optional callback for Bridging Table List message.
84 : *
85 : * Handles received Bridging Table List messages from a Bridge
86 : * Configuration Server.
87 : *
88 : * @param cli Bridge Configuration Client context.
89 : * @param addr Address of the sender.
90 : * @param rsp Response received from the Bridging Configuration Server.
91 : */
92 1 : void (*table_list)(struct bt_mesh_brg_cfg_cli *cli, uint16_t addr,
93 : struct bt_mesh_brg_cfg_table_list *rsp);
94 : };
95 :
96 : /** Bridge Configuration Client Model Context */
97 1 : struct bt_mesh_brg_cfg_cli {
98 : /** Bridge Configuration model entry pointer */
99 1 : const struct bt_mesh_model *model;
100 :
101 : /** Event handler callbacks */
102 1 : const struct bt_mesh_brg_cfg_cli_cb *cb;
103 :
104 : /* Internal parameters for tracking message responses. */
105 0 : struct bt_mesh_msg_ack_ctx ack_ctx;
106 : };
107 :
108 : /** @brief Sends a Subnet Bridge Get message to the given destination address
109 : *
110 : * This function sends a Subnet Bridge Get message to the given destination
111 : * address to query the value of the Subnet Bridge state of a subnet. The
112 : * Subnet Bridge state indicates whether the subnet bridged feature is enabled
113 : * or not. The function expects a Subnet Bridge Status message as a response
114 : * from the destination node.
115 : *
116 : * This method can be used asynchronously by setting @p status as NULL. This
117 : * way the method will not wait for response and will return immediately after
118 : * sending the command.
119 : *
120 : * @param net_idx Network index to encrypt the message with.
121 : * @param addr Target node address.
122 : * @param status Status response parameter, returns one of
123 : * @ref BT_MESH_BRG_CFG_DISABLED or
124 : * @ref BT_MESH_BRG_CFG_ENABLED on success.
125 : *
126 : * @return 0 on success, or (negative) error code on failure.
127 : */
128 1 : int bt_mesh_brg_cfg_cli_get(uint16_t net_idx, uint16_t addr, enum bt_mesh_brg_cfg_state *status);
129 :
130 : /** @brief Sends a Subnet Bridge Set message to the given destination address
131 : * with the given parameters
132 : *
133 : * This function sends a Subnet Bridge Set message to the given destination
134 : * address with the given parameters to set the value of the Subnet Bridge
135 : * state of a subnet. The Subnet Bridge state indicates whether the subnet
136 : * bridge feature is enabled or not. The function expects a Subnet Bridge
137 : * Status message as a response from the destination node.
138 : *
139 : * This method can be used asynchronously by setting @p status as NULL. This
140 : * way the method will not wait for response and will return immediately after
141 : * sending the command.
142 : *
143 : * @param net_idx Network index to encrypt the message with.
144 : * @param addr Target node address.
145 : * @param val Value to set the Subnet Bridge state to. Must be one of
146 : * @ref BT_MESH_BRG_CFG_DISABLED or
147 : * @ref BT_MESH_BRG_CFG_ENABLED.
148 : * @param status Status response parameter, returns one of
149 : * @ref BT_MESH_BRG_CFG_DISABLED or
150 : * @ref BT_MESH_BRG_CFG_ENABLED on success.
151 : *
152 : * @return 0 on success, or (negative) error code on failure.
153 : */
154 1 : int bt_mesh_brg_cfg_cli_set(uint16_t net_idx, uint16_t addr, enum bt_mesh_brg_cfg_state val,
155 : enum bt_mesh_brg_cfg_state *status);
156 :
157 : /** @brief Sends a Bridging Table Size Get message to the given destination
158 : * address with the given parameters
159 : *
160 : * This function sends a Bridging Table Size Get message to the given
161 : * destination address with the given parameters to get the size of the Bridging
162 : * Table of the node. The Bridging Table size indicates the maximum number of
163 : * entries that can be stored in the Bridging Table. The function expects a
164 : * Bridging Table Size Status message as a response from the destination node.
165 : *
166 : * This method can be used asynchronously by setting @p size as NULL. This way
167 : * the method will not wait for response and will return immediately after
168 : * sending the command.
169 : *
170 : * @param net_idx Network index to encrypt the message with.
171 : * @param addr Target node address.
172 : * @param size Bridging Table size response parameter.
173 : *
174 : * @return 0 on success, or (negative) error code on failure.
175 : */
176 1 : int bt_mesh_brg_cfg_cli_table_size_get(uint16_t net_idx, uint16_t addr, uint16_t *size);
177 :
178 : /** @brief Sends a Bridging Table Add message to the given destination address
179 : * with the given parameters
180 : *
181 : * This function sends a Bridging Table Add message to the given destination
182 : * address with the given parameters to add an entry to the Bridging Table. The
183 : * Bridging Table contains the net keys and addresses that are authorized to be
184 : * bridged by the node. The function expects a Bridging Table Status message as
185 : * a response from the destination node.
186 : *
187 : * This method can be used asynchronously by setting @p rsp as NULL. This way
188 : * the method will not wait for response and will return immediately after
189 : * sending the command.
190 : *
191 : * @param net_idx Network index to encrypt the message with.
192 : * @param addr Target node address.
193 : * @param entry Pointer to bridging Table entry to add.
194 : * @param rsp Status response parameter
195 : *
196 : * @return 0 on success, or (negative) error code on failure.
197 : */
198 1 : int bt_mesh_brg_cfg_cli_table_add(uint16_t net_idx, uint16_t addr,
199 : struct bt_mesh_brg_cfg_table_entry *entry,
200 : struct bt_mesh_brg_cfg_table_status *rsp);
201 :
202 : /** @brief Sends a Bridging Table Remove message to the given destination
203 : * address with the given parameters
204 : *
205 : * This function sends a Bridging Table Remove message to the given destination
206 : * address with the given parameters to remove an entry from the Bridging
207 : * Table. The Bridging Table contains the net keys and addresses that are
208 : * authorized to be bridged by the node. The function expects a Bridging Table
209 : * Status message as a response from the destination node.
210 : *
211 : * This method can be used asynchronously by setting @p rsp as NULL. This way
212 : * the method will not wait for response and will return immediately after
213 : * sending the command.
214 : *
215 : * @param net_idx Network index to encrypt the message with.
216 : * @param addr Target node address.
217 : * @param net_idx1 NetKey Index of the first subnet
218 : * @param net_idx2 NetKey Index of the second subnet
219 : * @param addr1 Address of the node in the first subnet
220 : * @param addr2 Address of the node in the second subnet
221 : * @param rsp Pointer to a struct storing the received response from the
222 : * server, or NULL to not wait for a response.
223 : *
224 : * @return 0 on success, or (negative) error code on failure.
225 : */
226 1 : int bt_mesh_brg_cfg_cli_table_remove(uint16_t net_idx, uint16_t addr, uint16_t net_idx1,
227 : uint16_t net_idx2, uint16_t addr1, uint16_t addr2,
228 : struct bt_mesh_brg_cfg_table_status *rsp);
229 :
230 : /** @brief Sends a Bridged Subnets Get message to the given destination address
231 : * with the given parameters
232 : *
233 : * This function sends a Bridged Subnets Get message to the given destination
234 : * address with the given parameters to get the list of subnets that are
235 : * bridged by the node. The function expects a Bridged Subnets List message as
236 : * a response from the destination node.
237 : *
238 : * This method can be used asynchronously by setting @p rsp as NULL. This way
239 : * the method will not wait for response and will return immediately after
240 : * sending the command.
241 : *
242 : * When @c rsp is set, the user is responsible for providing a buffer for the
243 : * filtered set of N pairs of NetKey Indexes in
244 : * @ref bt_mesh_brg_cfg_subnets_list::list. If a buffer is not provided, the
245 : * bridged subnets won't be copied.
246 :
247 : * @param net_idx Network index to encrypt the message with.
248 : * @param addr Target node address.
249 : * @param filter_net_idx Filter and NetKey Index used for filtering
250 : * @param start_idx Start offset to read in units of Bridging Table state entries
251 : * @param rsp Pointer to a struct storing the received response
252 : * from the server, or NULL to not wait for a response.
253 : *
254 : * @return 0 on success, or (negative) error code on failure.
255 : */
256 1 : int bt_mesh_brg_cfg_cli_subnets_get(uint16_t net_idx, uint16_t addr,
257 : struct bt_mesh_brg_cfg_filter_netkey filter_net_idx,
258 : uint8_t start_idx, struct bt_mesh_brg_cfg_subnets_list *rsp);
259 :
260 : /** @brief Sends a Bridging Table Get message to the given destination address
261 : * with the given parameters
262 : *
263 : * This function sends a Bridging Table Get message to the given destination
264 : * address with the given parameters to get the contents of the Bridging Table.
265 : * The Bridging Table contains the addresses that are authorized to be bridged
266 : * by the node. The function expects a Bridging Table List message as a
267 : * response from the destination node.
268 : *
269 : * This method can be used asynchronously by setting @p rsp as NULL. This way
270 : * the method will not wait for response and will return immediately after
271 : * sending the command.
272 : *
273 : * When @c rsp is set, the user is responsible for providing a buffer for the
274 : * filtered set of N pairs of NetKey Indexes in
275 : * @ref bt_mesh_brg_cfg_table_list::list. If a buffer is not provided,
276 : * the bridged addresses won't be copied. If a buffer size is shorter than
277 : * received list, only those many entries that fit in the buffer will be copied
278 : * from the list, and rest will be discarded.
279 : *
280 : * @param net_idx Network index to encrypt the message with.
281 : * @param addr Target node address.
282 : * @param net_idx1 NetKey Index of the first subnet.
283 : * @param net_idx2 NetKey Index of the second subnet.
284 : * @param start_idx Start offset to read in units of Bridging Table state entries.
285 : * @param rsp Pointer to a struct storing the received response from the
286 : * server, or NULL to not wait for a response.
287 : *
288 : * @return 0 on success, or (negative) error code on failure.
289 : */
290 1 : int bt_mesh_brg_cfg_cli_table_get(uint16_t net_idx, uint16_t addr, uint16_t net_idx1,
291 : uint16_t net_idx2, uint16_t start_idx,
292 : struct bt_mesh_brg_cfg_table_list *rsp);
293 :
294 : /** @brief Get the current transmission timeout value.
295 : *
296 : * @return The configured transmission timeout in milliseconds.
297 : */
298 1 : int32_t bt_mesh_brg_cfg_cli_timeout_get(void);
299 :
300 : /** @brief Set the transmission timeout value.
301 : *
302 : * @param timeout The new transmission timeout.
303 : */
304 1 : void bt_mesh_brg_cfg_cli_timeout_set(int32_t timeout);
305 :
306 : /** @cond INTERNAL_HIDDEN */
307 : extern const struct bt_mesh_model_op _bt_mesh_brg_cfg_cli_op[];
308 : extern const struct bt_mesh_model_cb _bt_mesh_brg_cfg_cli_cb;
309 : /** @endcond */
310 :
311 : /**
312 : * @}
313 : */
314 :
315 : #ifdef __cplusplus
316 : }
317 : #endif
318 :
319 : #endif /* ZEPHYR_INCLUDE_BLUETOOTH_MESH_BRG_CFG_CLI_H__ */
|