Line data Source code
1 1 : /** @file
2 : * @brief Configuration Client Model APIs.
3 : */
4 :
5 : /*
6 : * Copyright (c) 2017 Intel Corporation
7 : *
8 : * SPDX-License-Identifier: Apache-2.0
9 : */
10 : #ifndef ZEPHYR_INCLUDE_BLUETOOTH_MESH_CFG_CLI_H_
11 : #define ZEPHYR_INCLUDE_BLUETOOTH_MESH_CFG_CLI_H_
12 :
13 : /**
14 : * @brief Configuration Client Model
15 : * @defgroup bt_mesh_cfg_cli Configuration Client Model
16 : * @ingroup bt_mesh
17 : * @{
18 : */
19 :
20 : #include <stdint.h>
21 : #include <stdbool.h>
22 :
23 : #ifdef __cplusplus
24 : extern "C" {
25 : #endif
26 :
27 : struct bt_mesh_cfg_cli;
28 : struct bt_mesh_cfg_cli_hb_pub;
29 : struct bt_mesh_cfg_cli_hb_sub;
30 : struct bt_mesh_cfg_cli_mod_pub;
31 :
32 : /** Mesh Configuration Client Status messages callback */
33 1 : struct bt_mesh_cfg_cli_cb {
34 :
35 : /** @brief Optional callback for Composition data messages.
36 : *
37 : * Handles received Composition data messages from a server.
38 : *
39 : * @note For decoding @c buf, please refer to
40 : * @ref bt_mesh_comp_p0_get and
41 : * @ref bt_mesh_comp_p1_elem_pull.
42 : *
43 : * @param cli Client that received the status message.
44 : * @param addr Address of the sender.
45 : * @param page Composition data page.
46 : * @param buf Composition data buffer.
47 : */
48 1 : void (*comp_data)(struct bt_mesh_cfg_cli *cli, uint16_t addr, uint8_t page,
49 : struct net_buf_simple *buf);
50 :
51 : /** @brief Optional callback for Model Pub status messages.
52 : *
53 : * Handles received Model Pub status messages from a server.
54 : *
55 : * @param cli Client that received the status message.
56 : * @param addr Address of the sender.
57 : * @param status Status code for the message.
58 : * @param elem_addr Address of the element.
59 : * @param mod_id Model ID.
60 : * @param cid Company ID.
61 : * @param pub Publication configuration parameters.
62 : */
63 1 : void (*mod_pub_status)(struct bt_mesh_cfg_cli *cli, uint16_t addr, uint8_t status,
64 : uint16_t elem_addr, uint16_t mod_id, uint16_t cid,
65 : struct bt_mesh_cfg_cli_mod_pub *pub);
66 :
67 : /** @brief Optional callback for Model Sub Status messages.
68 : *
69 : * Handles received Model Sub Status messages from a server.
70 : *
71 : * @param cli Client that received the status message.
72 : * @param addr Address of the sender.
73 : * @param status Status Code for requesting message.
74 : * @param elem_addr The unicast address of the element.
75 : * @param sub_addr The sub address.
76 : * @param mod_id The model ID within the element.
77 : */
78 1 : void (*mod_sub_status)(struct bt_mesh_cfg_cli *cli, uint16_t addr,
79 : uint8_t status, uint16_t elem_addr,
80 : uint16_t sub_addr, uint32_t mod_id);
81 :
82 : /** @brief Optional callback for Model Sub list messages.
83 : *
84 : * Handles received Model Sub list messages from a server.
85 : *
86 : * @note The @c buf parameter should be decoded using
87 : * @ref net_buf_simple_pull_le16 in iteration, as long
88 : * as @c buf->len is greater than or equal to 2.
89 : *
90 : * @param cli Client that received the status message.
91 : * @param addr Address of the sender.
92 : * @param status Status code for the message.
93 : * @param elem_addr Address of the element.
94 : * @param mod_id Model ID.
95 : * @param cid Company ID.
96 : * @param buf Message buffer containing subscription addresses.
97 : */
98 1 : void (*mod_sub_list)(struct bt_mesh_cfg_cli *cli, uint16_t addr, uint8_t status,
99 : uint16_t elem_addr, uint16_t mod_id, uint16_t cid,
100 : struct net_buf_simple *buf);
101 :
102 : /** @brief Optional callback for Node Reset Status messages.
103 : *
104 : * Handles received Node Reset Status messages from a server.
105 : *
106 : * @param cli Client that received the status message.
107 : * @param addr Address of the sender.
108 : */
109 1 : void (*node_reset_status)(struct bt_mesh_cfg_cli *cli, uint16_t addr);
110 :
111 : /** @brief Optional callback for Beacon Status messages.
112 : *
113 : * Handles received Beacon Status messages from a server.
114 : *
115 : * @param cli Client that received the status message.
116 : * @param addr Address of the sender.
117 : * @param status Status Code for requesting message.
118 : */
119 1 : void (*beacon_status)(struct bt_mesh_cfg_cli *cli, uint16_t addr,
120 : uint8_t status);
121 :
122 : /** @brief Optional callback for Default TTL Status messages.
123 : *
124 : * Handles received Default TTL Status messages from a server.
125 : *
126 : * @param cli Client that received the status message.
127 : * @param addr Address of the sender.
128 : * @param status Status Code for requesting message.
129 : */
130 1 : void (*ttl_status)(struct bt_mesh_cfg_cli *cli, uint16_t addr,
131 : uint8_t status);
132 :
133 : /** @brief Optional callback for Friend Status messages.
134 : *
135 : * Handles received Friend Status messages from a server.
136 : *
137 : * @param cli Client that received the status message.
138 : * @param addr Address of the sender.
139 : * @param status Status Code for requesting message.
140 : */
141 1 : void (*friend_status)(struct bt_mesh_cfg_cli *cli, uint16_t addr,
142 : uint8_t status);
143 :
144 : /** @brief Optional callback for GATT Proxy Status messages.
145 : *
146 : * Handles received GATT Proxy Status messages from a server.
147 : *
148 : * @param cli Client that received the status message.
149 : * @param addr Address of the sender.
150 : * @param status Status Code for requesting message.
151 : */
152 1 : void (*gatt_proxy_status)(struct bt_mesh_cfg_cli *cli, uint16_t addr,
153 : uint8_t status);
154 :
155 : /** @brief Optional callback for Network Transmit Status messages.
156 : *
157 : * Handles received Network Transmit Status messages from a server.
158 : *
159 : * @param cli Client that received the status message.
160 : * @param addr Address of the sender.
161 : * @param status Status Code for requesting message.
162 : */
163 1 : void (*network_transmit_status)(struct bt_mesh_cfg_cli *cli, uint16_t addr,
164 : uint8_t status);
165 :
166 : /** @brief Optional callback for Relay Status messages.
167 : *
168 : * Handles received Relay Status messages from a server.
169 : *
170 : * @param cli Client that received the status message.
171 : * @param addr Address of the sender.
172 : * @param status Status Code for requesting message.
173 : * @param transmit The relay retransmit count and interval steps.
174 : */
175 1 : void (*relay_status)(struct bt_mesh_cfg_cli *cli, uint16_t addr,
176 : uint8_t status, uint8_t transmit);
177 :
178 : /** @brief Optional callback for NetKey Status messages.
179 : *
180 : * Handles received NetKey Status messages from a server.
181 : *
182 : * @param cli Client that received the status message.
183 : * @param addr Address of the sender.
184 : * @param status Status Code for requesting message.
185 : * @param net_idx The index of the NetKey.
186 : */
187 1 : void (*net_key_status)(struct bt_mesh_cfg_cli *cli, uint16_t addr,
188 : uint8_t status, uint16_t net_idx);
189 :
190 : /** @brief Optional callback for Netkey list messages.
191 : *
192 : * Handles received Netkey list messages from a server.
193 : *
194 : * @note The @c buf parameter should be decoded using the
195 : * @ref bt_mesh_key_idx_unpack_list helper function.
196 : *
197 : * @param cli Client that received the status message.
198 : * @param addr Address of the sender.
199 : * @param buf Message buffer containing key indexes.
200 : */
201 1 : void (*net_key_list)(struct bt_mesh_cfg_cli *cli, uint16_t addr,
202 : struct net_buf_simple *buf);
203 :
204 : /** @brief Optional callback for AppKey Status messages.
205 : *
206 : * Handles received AppKey Status messages from a server.
207 : *
208 : * @param cli Client that received the status message.
209 : * @param addr Address of the sender.
210 : * @param status Status Code for requesting message.
211 : * @param net_idx The index of the NetKey.
212 : * @param app_idx The index of the AppKey.
213 : */
214 1 : void (*app_key_status)(struct bt_mesh_cfg_cli *cli, uint16_t addr,
215 : uint8_t status, uint16_t net_idx,
216 : uint16_t app_idx);
217 :
218 : /** @brief Optional callback for Appkey list messages.
219 : *
220 : * Handles received Appkey list messages from a server.
221 : *
222 : * @note The @c buf parameter should be decoded using the
223 : * @ref bt_mesh_key_idx_unpack_list helper function.
224 : *
225 : * @param cli Client that received the status message.
226 : * @param addr Address of the sender.
227 : * @param status Status code for the message.
228 : * @param net_idx The index of the NetKey.
229 : * @param buf Message buffer containing key indexes.
230 : */
231 1 : void (*app_key_list)(struct bt_mesh_cfg_cli *cli, uint16_t addr, uint8_t status,
232 : uint16_t net_idx, struct net_buf_simple *buf);
233 :
234 : /** @brief Optional callback for Model App Status messages.
235 : *
236 : * Handles received Model App Status messages from a server.
237 : *
238 : * @param cli Client that received the status message.
239 : * @param addr Address of the sender.
240 : * @param status Status Code for requesting message.
241 : * @param elem_addr The unicast address of the element.
242 : * @param app_idx The sub address.
243 : * @param mod_id The model ID within the element.
244 : */
245 1 : void (*mod_app_status)(struct bt_mesh_cfg_cli *cli, uint16_t addr,
246 : uint8_t status, uint16_t elem_addr,
247 : uint16_t app_idx, uint32_t mod_id);
248 :
249 : /** @brief Optional callback for Model App list messages.
250 : *
251 : * Handles received Model App list messages from a server.
252 : *
253 : * @note The @c buf parameter should be decoded using the
254 : * @ref bt_mesh_key_idx_unpack_list helper function.
255 : *
256 : * @param cli Client that received the status message.
257 : * @param addr Address of the sender.
258 : * @param status Status code for the message.
259 : * @param elem_addr Address of the element.
260 : * @param mod_id Model ID.
261 : * @param cid Company ID.
262 : * @param buf Message buffer containing key indexes.
263 : */
264 1 : void (*mod_app_list)(struct bt_mesh_cfg_cli *cli, uint16_t addr, uint8_t status,
265 : uint16_t elem_addr, uint16_t mod_id, uint16_t cid,
266 : struct net_buf_simple *buf);
267 :
268 : /** @brief Optional callback for Node Identity Status messages.
269 : *
270 : * Handles received Node Identity Status messages from a server.
271 : *
272 : * @param cli Client that received the status message.
273 : * @param addr Address of the sender.
274 : * @param status Status Code for requesting message.
275 : * @param net_idx The index of the NetKey.
276 : * @param identity The node identity state.
277 : */
278 1 : void (*node_identity_status)(struct bt_mesh_cfg_cli *cli, uint16_t addr,
279 : uint8_t status, uint16_t net_idx,
280 : uint8_t identity);
281 :
282 : /** @brief Optional callback for LPN PollTimeout Status messages.
283 : *
284 : * Handles received LPN PollTimeout Status messages from a server.
285 : *
286 : * @param cli Client that received the status message.
287 : * @param addr Address of the sender.
288 : * @param elem_addr The unicast address of the LPN.
289 : * @param timeout Current value of PollTimeout timer of the LPN.
290 : */
291 1 : void (*lpn_timeout_status)(struct bt_mesh_cfg_cli *cli, uint16_t addr,
292 : uint16_t elem_addr, uint32_t timeout);
293 :
294 : /** @brief Optional callback for Key Refresh Phase status messages.
295 : *
296 : * Handles received Key Refresh Phase status messages from a server.
297 : *
298 : * @param cli Client that received the status message.
299 : * @param addr Address of the sender.
300 : * @param status Status code for the message.
301 : * @param net_idx The index of the NetKey.
302 : * @param phase Phase of the KRP.
303 : */
304 1 : void (*krp_status)(struct bt_mesh_cfg_cli *cli, uint16_t addr, uint8_t status,
305 : uint16_t net_idx, uint8_t phase);
306 :
307 : /** @brief Optional callback for Heartbeat pub status messages.
308 : *
309 : * Handles received Heartbeat pub status messages from a server.
310 : *
311 : * @param cli Client that received the status message.
312 : * @param addr Address of the sender.
313 : * @param status Status code for the message.
314 : * @param pub HB publication configuration parameters.
315 : */
316 1 : void (*hb_pub_status)(struct bt_mesh_cfg_cli *cli, uint16_t addr, uint8_t status,
317 : struct bt_mesh_cfg_cli_hb_pub *pub);
318 :
319 : /** @brief Optional callback for Heartbeat Sub status messages.
320 : *
321 : * Handles received Heartbeat Sub status messages from a server.
322 : *
323 : * @param cli Client that received the status message.
324 : * @param addr Address of the sender.
325 : * @param status Status code for the message.
326 : * @param sub HB subscription configuration parameters.
327 : */
328 1 : void (*hb_sub_status)(struct bt_mesh_cfg_cli *cli, uint16_t addr, uint8_t status,
329 : struct bt_mesh_cfg_cli_hb_sub *sub);
330 : };
331 :
332 : /** Mesh Configuration Client Model Context */
333 1 : struct bt_mesh_cfg_cli {
334 : /** Composition data model entry pointer. */
335 1 : const struct bt_mesh_model *model;
336 :
337 : /** Optional callback for Mesh Configuration Client Status messages. */
338 1 : const struct bt_mesh_cfg_cli_cb *cb;
339 :
340 : /* Internal parameters for tracking message responses. */
341 0 : struct bt_mesh_msg_ack_ctx ack_ctx;
342 : };
343 :
344 : /**
345 : * @brief Generic Configuration Client model composition data entry.
346 : *
347 : * @param cli_data Pointer to a @ref bt_mesh_cfg_cli instance.
348 : */
349 1 : #define BT_MESH_MODEL_CFG_CLI(cli_data) \
350 : BT_MESH_MODEL_CNT_CB(BT_MESH_MODEL_ID_CFG_CLI, \
351 : bt_mesh_cfg_cli_op, NULL, \
352 : cli_data, 1, 0, &bt_mesh_cfg_cli_cb)
353 :
354 : /**
355 : *
356 : * @brief Helper macro to encode model publication period in units of 100ms
357 : *
358 : * @param steps Number of 100ms steps.
359 : *
360 : * @return Encoded value that can be assigned to bt_mesh_cfg_cli_mod_pub.period
361 : */
362 1 : #define BT_MESH_PUB_PERIOD_100MS(steps) ((steps) & BIT_MASK(6))
363 :
364 : /**
365 : * @brief Helper macro to encode model publication period in units of 1 second
366 : *
367 : * @param steps Number of 1 second steps.
368 : *
369 : * @return Encoded value that can be assigned to bt_mesh_cfg_cli_mod_pub.period
370 : */
371 1 : #define BT_MESH_PUB_PERIOD_SEC(steps) (((steps) & BIT_MASK(6)) | (1 << 6))
372 :
373 : /**
374 : *
375 : * @brief Helper macro to encode model publication period in units of 10
376 : * seconds
377 : *
378 : * @param steps Number of 10 second steps.
379 : *
380 : * @return Encoded value that can be assigned to bt_mesh_cfg_cli_mod_pub.period
381 : */
382 1 : #define BT_MESH_PUB_PERIOD_10SEC(steps) (((steps) & BIT_MASK(6)) | (2 << 6))
383 :
384 : /**
385 : *
386 : * @brief Helper macro to encode model publication period in units of 10
387 : * minutes
388 : *
389 : * @param steps Number of 10 minute steps.
390 : *
391 : * @return Encoded value that can be assigned to bt_mesh_cfg_cli_mod_pub.period
392 : */
393 1 : #define BT_MESH_PUB_PERIOD_10MIN(steps) (((steps) & BIT_MASK(6)) | (3 << 6))
394 :
395 : /** Model publication configuration parameters. */
396 1 : struct bt_mesh_cfg_cli_mod_pub {
397 : /** Publication destination address. */
398 1 : uint16_t addr;
399 : /** Virtual address UUID, or NULL if this is not a virtual address. */
400 1 : const uint8_t *uuid;
401 : /** Application index to publish with. */
402 1 : uint16_t app_idx;
403 : /** Friendship credential flag. */
404 1 : bool cred_flag;
405 : /** Time To Live to publish with. */
406 1 : uint8_t ttl;
407 : /**
408 : * Encoded publish period.
409 : * @see BT_MESH_PUB_PERIOD_100MS, BT_MESH_PUB_PERIOD_SEC,
410 : * BT_MESH_PUB_PERIOD_10SEC,
411 : * BT_MESH_PUB_PERIOD_10MIN
412 : */
413 1 : uint8_t period;
414 : /**
415 : * Encoded transmit parameters.
416 : * @see BT_MESH_TRANSMIT
417 : */
418 1 : uint8_t transmit;
419 : };
420 :
421 : /** Heartbeat subscription configuration parameters. */
422 1 : struct bt_mesh_cfg_cli_hb_sub {
423 : /** Source address to receive Heartbeat messages from. */
424 1 : uint16_t src;
425 : /** Destination address to receive Heartbeat messages on. */
426 1 : uint16_t dst;
427 : /**
428 : * Logarithmic subscription period to keep listening for.
429 : * The decoded subscription period is (1 << (period - 1)) seconds, or 0
430 : * seconds if period is 0.
431 : */
432 1 : uint8_t period;
433 : /**
434 : * Logarithmic Heartbeat subscription receive count.
435 : * The decoded Heartbeat count is (1 << (count - 1)) if count is
436 : * between 1 and 0xfe, 0 if count is 0 and 0xffff if count is 0xff.
437 : *
438 : * Ignored in Heartbeat subscription set.
439 : */
440 1 : uint8_t count;
441 : /**
442 : * Minimum hops in received messages, ie the shortest registered path
443 : * from the publishing node to the subscribing node. A Heartbeat
444 : * received from an immediate neighbor has hop count = 1.
445 : *
446 : * Ignored in Heartbeat subscription set.
447 : */
448 1 : uint8_t min;
449 : /**
450 : * Maximum hops in received messages, ie the longest registered path
451 : * from the publishing node to the subscribing node. A Heartbeat
452 : * received from an immediate neighbor has hop count = 1.
453 : *
454 : * Ignored in Heartbeat subscription set.
455 : */
456 1 : uint8_t max;
457 : };
458 :
459 : /** Heartbeat publication configuration parameters. */
460 1 : struct bt_mesh_cfg_cli_hb_pub {
461 : /** Heartbeat destination address. */
462 1 : uint16_t dst;
463 : /**
464 : * Logarithmic Heartbeat count. Decoded as (1 << (count - 1)) if count
465 : * is between 1 and 0x11, 0 if count is 0, or "indefinitely" if count is
466 : * 0xff.
467 : *
468 : * When used in Heartbeat publication set, this parameter denotes the
469 : * number of Heartbeat messages to send.
470 : *
471 : * When returned from Heartbeat publication get, this parameter denotes
472 : * the number of Heartbeat messages remaining to be sent.
473 : */
474 1 : uint8_t count;
475 : /**
476 : * Logarithmic Heartbeat publication transmit interval in seconds.
477 : * Decoded as (1 << (period - 1)) if period is between 1 and 0x11.
478 : * If period is 0, Heartbeat publication is disabled.
479 : */
480 1 : uint8_t period;
481 : /** Publication message Time To Live value. */
482 1 : uint8_t ttl;
483 : /**
484 : * Bitmap of features that trigger Heartbeat publications.
485 : * Legal values are @ref BT_MESH_FEAT_RELAY,
486 : * @ref BT_MESH_FEAT_PROXY, @ref BT_MESH_FEAT_FRIEND and
487 : * @ref BT_MESH_FEAT_LOW_POWER
488 : */
489 1 : uint16_t feat;
490 : /** Network index to publish with. */
491 1 : uint16_t net_idx;
492 : };
493 :
494 : /** @brief Reset the target node and remove it from the network.
495 : *
496 : * @param net_idx Network index to encrypt with.
497 : * @param addr Target node address.
498 : * @param status Status response parameter
499 : *
500 : * @return 0 on success, or (negative) error code on failure.
501 : */
502 1 : int bt_mesh_cfg_cli_node_reset(uint16_t net_idx, uint16_t addr, bool *status);
503 :
504 : /** @brief Get the target node's composition data.
505 : *
506 : * If the other device does not have the given composition data page, it will
507 : * return the largest page number it supports that is less than the requested
508 : * page index. The actual page the device responds with is returned in @c rsp.
509 : *
510 : * This method can be used asynchronously by setting @p rsp and @p comp
511 : * as NULL. This way the method will not wait for response and will return
512 : * immediately after sending the command.
513 : *
514 : * @param net_idx Network index to encrypt with.
515 : * @param addr Target node address.
516 : * @param page Composition data page, or 0xff to request the first available
517 : * page.
518 : * @param rsp Return parameter for the returned page number, or NULL.
519 : * @param comp Composition data buffer to fill.
520 : *
521 : * @return 0 on success, or (negative) error code on failure.
522 : */
523 1 : int bt_mesh_cfg_cli_comp_data_get(uint16_t net_idx, uint16_t addr, uint8_t page, uint8_t *rsp,
524 : struct net_buf_simple *comp);
525 :
526 : /** @brief Get the target node's network beacon state.
527 : *
528 : * This method can be used asynchronously by setting @p status
529 : * as NULL. This way the method will not wait for response and will
530 : * return immediately after sending the command.
531 : *
532 : * @param net_idx Network index to encrypt with.
533 : * @param addr Target node address.
534 : * @param status Status response parameter, returns one of
535 : * @ref BT_MESH_BEACON_DISABLED or @ref BT_MESH_BEACON_ENABLED
536 : * on success.
537 : *
538 : * @return 0 on success, or (negative) error code on failure.
539 : */
540 1 : int bt_mesh_cfg_cli_beacon_get(uint16_t net_idx, uint16_t addr, uint8_t *status);
541 :
542 : /** @brief Get the target node's network key refresh phase state.
543 : *
544 : * This method can be used asynchronously by setting @p status and @p phase
545 : * as NULL. This way the method will not wait for response and will
546 : * return immediately after sending the command.
547 : *
548 : * @param net_idx Network index to encrypt with.
549 : * @param addr Target node address.
550 : * @param key_net_idx Network key index.
551 : * @param status Status response parameter.
552 : * @param phase Pointer to the Key Refresh variable to fill.
553 : *
554 : * @return 0 on success, or (negative) error code on failure.
555 : */
556 1 : int bt_mesh_cfg_cli_krp_get(uint16_t net_idx, uint16_t addr, uint16_t key_net_idx, uint8_t *status,
557 : uint8_t *phase);
558 :
559 : /** @brief Set the target node's network key refresh phase parameters.
560 : *
561 : * This method can be used asynchronously by setting @p status and @p phase
562 : * as NULL. This way the method will not wait for response and will
563 : * return immediately after sending the command.
564 : *
565 : * @param net_idx Network index to encrypt with.
566 : * @param addr Target node address.
567 : * @param key_net_idx Network key index.
568 : * @param transition Transition parameter.
569 : * @param status Status response parameter.
570 : * @param phase Pointer to the new Key Refresh phase. Will return the actual
571 : * Key Refresh phase after updating.
572 : *
573 : * @return 0 on success, or (negative) error code on failure.
574 : */
575 1 : int bt_mesh_cfg_cli_krp_set(uint16_t net_idx, uint16_t addr, uint16_t key_net_idx,
576 : uint8_t transition, uint8_t *status, uint8_t *phase);
577 :
578 : /** @brief Set the target node's network beacon state.
579 : *
580 : * This method can be used asynchronously by setting @p status
581 : * as NULL. This way the method will not wait for response and will
582 : * return immediately after sending the command.
583 : *
584 : * @param net_idx Network index to encrypt with.
585 : * @param addr Target node address.
586 : * @param val New network beacon state, should be one of
587 : * @ref BT_MESH_BEACON_DISABLED or @ref BT_MESH_BEACON_ENABLED.
588 : * @param status Status response parameter. Returns one of
589 : * @ref BT_MESH_BEACON_DISABLED or @ref BT_MESH_BEACON_ENABLED
590 : * on success.
591 : *
592 : * @return 0 on success, or (negative) error code on failure.
593 : */
594 1 : int bt_mesh_cfg_cli_beacon_set(uint16_t net_idx, uint16_t addr, uint8_t val, uint8_t *status);
595 :
596 : /** @brief Get the target node's Time To Live value.
597 : *
598 : * This method can be used asynchronously by setting @p ttl
599 : * as NULL. This way the method will not wait for response and will
600 : * return immediately after sending the command.
601 : *
602 : * @param net_idx Network index to encrypt with.
603 : * @param addr Target node address.
604 : * @param ttl TTL response buffer.
605 : *
606 : * @return 0 on success, or (negative) error code on failure.
607 : */
608 1 : int bt_mesh_cfg_cli_ttl_get(uint16_t net_idx, uint16_t addr, uint8_t *ttl);
609 :
610 : /** @brief Set the target node's Time To Live value.
611 : *
612 : * This method can be used asynchronously by setting @p ttl
613 : * as NULL. This way the method will not wait for response and will
614 : * return immediately after sending the command.
615 : *
616 : * @param net_idx Network index to encrypt with.
617 : * @param addr Target node address.
618 : * @param val New Time To Live value.
619 : * @param ttl TTL response buffer.
620 : *
621 : * @return 0 on success, or (negative) error code on failure.
622 : */
623 1 : int bt_mesh_cfg_cli_ttl_set(uint16_t net_idx, uint16_t addr, uint8_t val, uint8_t *ttl);
624 :
625 : /** @brief Get the target node's Friend feature status.
626 : *
627 : * This method can be used asynchronously by setting @p status
628 : * as NULL. This way the method will not wait for response and will
629 : * return immediately after sending the command.
630 : *
631 : * @param net_idx Network index to encrypt with.
632 : * @param addr Target node address.
633 : * @param status Status response parameter. Returns one of
634 : * @ref BT_MESH_FRIEND_DISABLED, @ref BT_MESH_FRIEND_ENABLED or
635 : * @ref BT_MESH_FRIEND_NOT_SUPPORTED on success.
636 : *
637 : * @return 0 on success, or (negative) error code on failure.
638 : */
639 1 : int bt_mesh_cfg_cli_friend_get(uint16_t net_idx, uint16_t addr, uint8_t *status);
640 :
641 : /** @brief Set the target node's Friend feature state.
642 : *
643 : * This method can be used asynchronously by setting @p status
644 : * as NULL. This way the method will not wait for response and will
645 : * return immediately after sending the command.
646 : *
647 : * @param net_idx Network index to encrypt with.
648 : * @param addr Target node address.
649 : * @param val New Friend feature state. Should be one of
650 : * @ref BT_MESH_FRIEND_DISABLED or
651 : * @ref BT_MESH_FRIEND_ENABLED.
652 : * @param status Status response parameter. Returns one of
653 : * @ref BT_MESH_FRIEND_DISABLED, @ref BT_MESH_FRIEND_ENABLED or
654 : * @ref BT_MESH_FRIEND_NOT_SUPPORTED on success.
655 : *
656 : * @return 0 on success, or (negative) error code on failure.
657 : */
658 1 : int bt_mesh_cfg_cli_friend_set(uint16_t net_idx, uint16_t addr, uint8_t val, uint8_t *status);
659 :
660 : /** @brief Get the target node's Proxy feature state.
661 : *
662 : * This method can be used asynchronously by setting @p status
663 : * as NULL. This way the method will not wait for response and will
664 : * return immediately after sending the command.
665 : *
666 : * @param net_idx Network index to encrypt with.
667 : * @param addr Target node address.
668 : * @param status Status response parameter. Returns one of
669 : * @ref BT_MESH_GATT_PROXY_DISABLED,
670 : * @ref BT_MESH_GATT_PROXY_ENABLED or
671 : * @ref BT_MESH_GATT_PROXY_NOT_SUPPORTED on success.
672 : *
673 : * @return 0 on success, or (negative) error code on failure.
674 : */
675 1 : int bt_mesh_cfg_cli_gatt_proxy_get(uint16_t net_idx, uint16_t addr, uint8_t *status);
676 :
677 : /** @brief Set the target node's Proxy feature state.
678 : *
679 : * This method can be used asynchronously by setting @p status
680 : * as NULL. This way the method will not wait for response and will
681 : * return immediately after sending the command.
682 : *
683 : * @param net_idx Network index to encrypt with.
684 : * @param addr Target node address.
685 : * @param val New Proxy feature state. Must be one of
686 : * @ref BT_MESH_GATT_PROXY_DISABLED or
687 : * @ref BT_MESH_GATT_PROXY_ENABLED.
688 : * @param status Status response parameter. Returns one of
689 : * @ref BT_MESH_GATT_PROXY_DISABLED,
690 : * @ref BT_MESH_GATT_PROXY_ENABLED or
691 : * @ref BT_MESH_GATT_PROXY_NOT_SUPPORTED on success.
692 : *
693 : * @return 0 on success, or (negative) error code on failure.
694 : */
695 1 : int bt_mesh_cfg_cli_gatt_proxy_set(uint16_t net_idx, uint16_t addr, uint8_t val, uint8_t *status);
696 :
697 : /** @brief Get the target node's network_transmit state.
698 : *
699 : * This method can be used asynchronously by setting @p transmit
700 : * as NULL. This way the method will not wait for response and will
701 : * return immediately after sending the command.
702 : *
703 : * @param net_idx Network index to encrypt with.
704 : * @param addr Target node address.
705 : * @param transmit Network transmit response parameter. Returns the encoded
706 : * network transmission parameters on success. Decoded with
707 : * @ref BT_MESH_TRANSMIT_COUNT and @ref BT_MESH_TRANSMIT_INT.
708 : *
709 : * @return 0 on success, or (negative) error code on failure.
710 : */
711 1 : int bt_mesh_cfg_cli_net_transmit_get(uint16_t net_idx, uint16_t addr, uint8_t *transmit);
712 :
713 : /** @brief Set the target node's network transmit parameters.
714 : *
715 : * This method can be used asynchronously by setting @p transmit
716 : * as NULL. This way the method will not wait for response and will
717 : * return immediately after sending the command.
718 : *
719 : * @param net_idx Network index to encrypt with.
720 : * @param addr Target node address.
721 : * @param val New encoded network transmit parameters.
722 : * @see BT_MESH_TRANSMIT.
723 : * @param transmit Network transmit response parameter. Returns the encoded
724 : * network transmission parameters on success. Decoded with
725 : * @ref BT_MESH_TRANSMIT_COUNT and @ref BT_MESH_TRANSMIT_INT.
726 : * @return 0 on success, or (negative) error code on failure.
727 : */
728 1 : int bt_mesh_cfg_cli_net_transmit_set(uint16_t net_idx, uint16_t addr, uint8_t val,
729 : uint8_t *transmit);
730 :
731 : /** @brief Get the target node's Relay feature state.
732 : *
733 : * This method can be used asynchronously by setting @p status and @p transmit
734 : * as NULL. This way the method will not wait for response and will
735 : * return immediately after sending the command.
736 : *
737 : * @param net_idx Network index to encrypt with.
738 : * @param addr Target node address.
739 : * @param status Status response parameter. Returns one of
740 : * @ref BT_MESH_RELAY_DISABLED, @ref BT_MESH_RELAY_ENABLED or
741 : * @ref BT_MESH_RELAY_NOT_SUPPORTED on success.
742 : * @param transmit Transmit response parameter. Returns the encoded relay
743 : * transmission parameters on success. Decoded with
744 : * @ref BT_MESH_TRANSMIT_COUNT and @ref BT_MESH_TRANSMIT_INT.
745 : *
746 : * @return 0 on success, or (negative) error code on failure.
747 : */
748 1 : int bt_mesh_cfg_cli_relay_get(uint16_t net_idx, uint16_t addr, uint8_t *status, uint8_t *transmit);
749 :
750 : /** @brief Set the target node's Relay parameters.
751 : *
752 : * This method can be used asynchronously by setting @p status
753 : * and @p transmit as NULL. This way the method will not wait for
754 : * response and will return immediately after sending the command.
755 : *
756 : * @param net_idx Network index to encrypt with.
757 : * @param addr Target node address.
758 : * @param new_relay New relay state. Must be one of
759 : * @ref BT_MESH_RELAY_DISABLED or
760 : * @ref BT_MESH_RELAY_ENABLED.
761 : * @param new_transmit New encoded relay transmit parameters.
762 : * @see BT_MESH_TRANSMIT.
763 : * @param status Status response parameter. Returns one of
764 : * @ref BT_MESH_RELAY_DISABLED, @ref BT_MESH_RELAY_ENABLED
765 : * or @ref BT_MESH_RELAY_NOT_SUPPORTED on success.
766 : * @param transmit Transmit response parameter. Returns the encoded relay
767 : * transmission parameters on success. Decoded with
768 : * @ref BT_MESH_TRANSMIT_COUNT and
769 : * @ref BT_MESH_TRANSMIT_INT.
770 : *
771 : * @return 0 on success, or (negative) error code on failure.
772 : */
773 1 : int bt_mesh_cfg_cli_relay_set(uint16_t net_idx, uint16_t addr, uint8_t new_relay,
774 : uint8_t new_transmit, uint8_t *status, uint8_t *transmit);
775 :
776 : /** @brief Add a network key to the target node.
777 : *
778 : * This method can be used asynchronously by setting @p status
779 : * as NULL. This way the method will not wait for response and will
780 : * return immediately after sending the command.
781 : *
782 : * @param net_idx Network index to encrypt with.
783 : * @param addr Target node address.
784 : * @param key_net_idx Network key index.
785 : * @param net_key Network key.
786 : * @param status Status response parameter.
787 : *
788 : * @return 0 on success, or (negative) error code on failure.
789 : */
790 1 : int bt_mesh_cfg_cli_net_key_add(uint16_t net_idx, uint16_t addr, uint16_t key_net_idx,
791 : const uint8_t net_key[16], uint8_t *status);
792 :
793 : /** @brief Get a list of the target node's network key indexes.
794 : *
795 : * This method can be used asynchronously by setting @p keys
796 : * or @p key_cnt as NULL. This way the method will not wait
797 : * for response and will return immediately after sending the command.
798 : *
799 : * @param net_idx Network index to encrypt with.
800 : * @param addr Target node address.
801 : * @param keys Net key index list response parameter. Will be filled with
802 : * all the returned network key indexes it can fill.
803 : * @param key_cnt Net key index list length. Should be set to the
804 : * capacity of the @c keys list when calling. Will return the
805 : * number of returned network key indexes upon success.
806 : *
807 : * @return 0 on success, or (negative) error code on failure.
808 : */
809 1 : int bt_mesh_cfg_cli_net_key_get(uint16_t net_idx, uint16_t addr, uint16_t *keys, size_t *key_cnt);
810 :
811 : /** @brief Delete a network key from the target node.
812 : *
813 : * This method can be used asynchronously by setting @p status
814 : * as NULL. This way the method will not wait for response and will
815 : * return immediately after sending the command.
816 : *
817 : * @param net_idx Network index to encrypt with.
818 : * @param addr Target node address.
819 : * @param key_net_idx Network key index.
820 : * @param status Status response parameter.
821 : *
822 : * @return 0 on success, or (negative) error code on failure.
823 : */
824 1 : int bt_mesh_cfg_cli_net_key_del(uint16_t net_idx, uint16_t addr, uint16_t key_net_idx,
825 : uint8_t *status);
826 :
827 : /** @brief Add an application key to the target node.
828 : *
829 : * This method can be used asynchronously by setting @p status
830 : * as NULL. This way the method will not wait for response and will
831 : * return immediately after sending the command.
832 : *
833 : * @param net_idx Network index to encrypt with.
834 : * @param addr Target node address.
835 : * @param key_net_idx Network key index the application key belongs to.
836 : * @param key_app_idx Application key index.
837 : * @param app_key Application key.
838 : * @param status Status response parameter.
839 : *
840 : * @return 0 on success, or (negative) error code on failure.
841 : */
842 1 : int bt_mesh_cfg_cli_app_key_add(uint16_t net_idx, uint16_t addr, uint16_t key_net_idx,
843 : uint16_t key_app_idx, const uint8_t app_key[16], uint8_t *status);
844 :
845 : /** @brief Get a list of the target node's application key indexes for a
846 : * specific network key.
847 : *
848 : * This method can be used asynchronously by setting @p status and
849 : * ( @p keys or @p key_cnt ) as NULL. This way the method will not wait
850 : * for response and will return immediately after sending the command.
851 : *
852 : * @param net_idx Network index to encrypt with.
853 : * @param addr Target node address.
854 : * @param key_net_idx Network key index to request the app key indexes of.
855 : * @param status Status response parameter.
856 : * @param keys App key index list response parameter. Will be filled
857 : * with all the returned application key indexes it can
858 : * fill.
859 : * @param key_cnt App key index list length. Should be set to the
860 : * capacity of the @c keys list when calling. Will return
861 : * the number of returned application key indexes upon
862 : * success.
863 : *
864 : * @return 0 on success, or (negative) error code on failure.
865 : */
866 1 : int bt_mesh_cfg_cli_app_key_get(uint16_t net_idx, uint16_t addr, uint16_t key_net_idx,
867 : uint8_t *status, uint16_t *keys, size_t *key_cnt);
868 :
869 : /** @brief Delete an application key from the target node.
870 : *
871 : * This method can be used asynchronously by setting @p status
872 : * as NULL. This way the method will not wait for response and will
873 : * return immediately after sending the command.
874 : *
875 : * @param net_idx Network index to encrypt with.
876 : * @param addr Target node address.
877 : * @param key_net_idx Network key index the application key belongs to.
878 : * @param key_app_idx Application key index.
879 : * @param status Status response parameter.
880 : *
881 : * @return 0 on success, or (negative) error code on failure.
882 : */
883 1 : int bt_mesh_cfg_cli_app_key_del(uint16_t net_idx, uint16_t addr, uint16_t key_net_idx,
884 : uint16_t key_app_idx, uint8_t *status);
885 :
886 : /** @brief Bind an application to a SIG model on the target node.
887 : *
888 : * This method can be used asynchronously by setting @p status
889 : * as NULL. This way the method will not wait for response and will
890 : * return immediately after sending the command.
891 : *
892 : * @param net_idx Network index to encrypt with.
893 : * @param addr Target node address.
894 : * @param elem_addr Element address the model is in.
895 : * @param mod_app_idx Application index to bind.
896 : * @param mod_id Model ID.
897 : * @param status Status response parameter.
898 : *
899 : * @return 0 on success, or (negative) error code on failure.
900 : */
901 1 : int bt_mesh_cfg_cli_mod_app_bind(uint16_t net_idx, uint16_t addr, uint16_t elem_addr,
902 : uint16_t mod_app_idx, uint16_t mod_id, uint8_t *status);
903 :
904 : /** @brief Unbind an application from a SIG model on the target node.
905 : *
906 : * This method can be used asynchronously by setting @p status
907 : * as NULL. This way the method will not wait for response and will
908 : * return immediately after sending the command.
909 : *
910 : * @param net_idx Network index to encrypt with.
911 : * @param addr Target node address.
912 : * @param elem_addr Element address the model is in.
913 : * @param mod_app_idx Application index to unbind.
914 : * @param mod_id Model ID.
915 : * @param status Status response parameter.
916 : *
917 : * @return 0 on success, or (negative) error code on failure.
918 : */
919 1 : int bt_mesh_cfg_cli_mod_app_unbind(uint16_t net_idx, uint16_t addr, uint16_t elem_addr,
920 : uint16_t mod_app_idx, uint16_t mod_id, uint8_t *status);
921 :
922 : /** @brief Bind an application to a vendor model on the target node.
923 : *
924 : * This method can be used asynchronously by setting @p status
925 : * as NULL. This way the method will not wait for response and will
926 : * return immediately after sending the command.
927 : *
928 : * @param net_idx Network index to encrypt with.
929 : * @param addr Target node address.
930 : * @param elem_addr Element address the model is in.
931 : * @param mod_app_idx Application index to bind.
932 : * @param mod_id Model ID.
933 : * @param cid Company ID of the model.
934 : * @param status Status response parameter.
935 : *
936 : * @return 0 on success, or (negative) error code on failure.
937 : */
938 1 : int bt_mesh_cfg_cli_mod_app_bind_vnd(uint16_t net_idx, uint16_t addr, uint16_t elem_addr,
939 : uint16_t mod_app_idx, uint16_t mod_id, uint16_t cid,
940 : uint8_t *status);
941 :
942 : /** @brief Unbind an application from a vendor model on the target node.
943 : *
944 : * This method can be used asynchronously by setting @p status
945 : * as NULL. This way the method will not wait for response and will
946 : * return immediately after sending the command.
947 : *
948 : * @param net_idx Network index to encrypt with.
949 : * @param addr Target node address.
950 : * @param elem_addr Element address the model is in.
951 : * @param mod_app_idx Application index to unbind.
952 : * @param mod_id Model ID.
953 : * @param cid Company ID of the model.
954 : * @param status Status response parameter.
955 : *
956 : * @return 0 on success, or (negative) error code on failure.
957 : */
958 1 : int bt_mesh_cfg_cli_mod_app_unbind_vnd(uint16_t net_idx, uint16_t addr, uint16_t elem_addr,
959 : uint16_t mod_app_idx, uint16_t mod_id, uint16_t cid,
960 : uint8_t *status);
961 :
962 : /** @brief Get a list of all applications bound to a SIG model on the target
963 : * node.
964 : *
965 : * This method can be used asynchronously by setting @p status
966 : * and ( @p apps or @p app_cnt ) as NULL. This way the method will
967 : * not wait for response and will return immediately after sending the command.
968 : *
969 : * @param net_idx Network index to encrypt with.
970 : * @param addr Target node address.
971 : * @param elem_addr Element address the model is in.
972 : * @param mod_id Model ID.
973 : * @param status Status response parameter.
974 : * @param apps App index list response parameter. Will be filled with all
975 : * the returned application key indexes it can fill.
976 : * @param app_cnt App index list length. Should be set to the capacity of the
977 : * @c apps list when calling. Will return the number of
978 : * returned application key indexes upon success.
979 : *
980 : * @return 0 on success, or (negative) error code on failure.
981 : */
982 1 : int bt_mesh_cfg_cli_mod_app_get(uint16_t net_idx, uint16_t addr, uint16_t elem_addr,
983 : uint16_t mod_id, uint8_t *status, uint16_t *apps, size_t *app_cnt);
984 :
985 : /** @brief Get a list of all applications bound to a vendor model on the target
986 : * node.
987 : *
988 : * This method can be used asynchronously by setting @p status
989 : * and ( @p apps or @p app_cnt ) as NULL. This way the method will
990 : * not wait for response and will return immediately after sending the command.
991 : *
992 : * @param net_idx Network index to encrypt with.
993 : * @param addr Target node address.
994 : * @param elem_addr Element address the model is in.
995 : * @param mod_id Model ID.
996 : * @param cid Company ID of the model.
997 : * @param status Status response parameter.
998 : * @param apps App index list response parameter. Will be filled with all
999 : * the returned application key indexes it can fill.
1000 : * @param app_cnt App index list length. Should be set to the capacity of the
1001 : * @c apps list when calling. Will return the number of
1002 : * returned application key indexes upon success.
1003 : *
1004 : * @return 0 on success, or (negative) error code on failure.
1005 : */
1006 1 : int bt_mesh_cfg_cli_mod_app_get_vnd(uint16_t net_idx, uint16_t addr, uint16_t elem_addr,
1007 : uint16_t mod_id, uint16_t cid, uint8_t *status, uint16_t *apps,
1008 : size_t *app_cnt);
1009 :
1010 : /** @brief Get publish parameters for a SIG model on the target node.
1011 : *
1012 : * This method can be used asynchronously by setting @p status and
1013 : * @p pub as NULL. This way the method will not wait for response
1014 : * and will return immediately after sending the command.
1015 : *
1016 : * @param net_idx Network index to encrypt with.
1017 : * @param addr Target node address.
1018 : * @param elem_addr Element address the model is in.
1019 : * @param mod_id Model ID.
1020 : * @param pub Publication parameter return buffer.
1021 : * @param status Status response parameter.
1022 : *
1023 : * @return 0 on success, or (negative) error code on failure.
1024 : */
1025 1 : int bt_mesh_cfg_cli_mod_pub_get(uint16_t net_idx, uint16_t addr, uint16_t elem_addr,
1026 : uint16_t mod_id, struct bt_mesh_cfg_cli_mod_pub *pub,
1027 : uint8_t *status);
1028 :
1029 : /** @brief Get publish parameters for a vendor model on the target node.
1030 : *
1031 : * This method can be used asynchronously by setting @p status
1032 : * and @p pub as NULL. This way the method will not wait for response
1033 : * and will return immediately after sending the command.
1034 : *
1035 : * @param net_idx Network index to encrypt with.
1036 : * @param addr Target node address.
1037 : * @param elem_addr Element address the model is in.
1038 : * @param mod_id Model ID.
1039 : * @param cid Company ID of the model.
1040 : * @param pub Publication parameter return buffer.
1041 : * @param status Status response parameter.
1042 : *
1043 : * @return 0 on success, or (negative) error code on failure.
1044 : */
1045 1 : int bt_mesh_cfg_cli_mod_pub_get_vnd(uint16_t net_idx, uint16_t addr, uint16_t elem_addr,
1046 : uint16_t mod_id, uint16_t cid,
1047 : struct bt_mesh_cfg_cli_mod_pub *pub, uint8_t *status);
1048 :
1049 : /** @brief Set publish parameters for a SIG model on the target node.
1050 : *
1051 : * This method can be used asynchronously by setting @p status
1052 : * as NULL. This way the method will not wait for response
1053 : * and will return immediately after sending the command.
1054 : *
1055 : * @p pub shall not be NULL.
1056 : *
1057 : * @param net_idx Network index to encrypt with.
1058 : * @param addr Target node address.
1059 : * @param elem_addr Element address the model is in.
1060 : * @param mod_id Model ID.
1061 : * @param pub Publication parameters.
1062 : * @param status Status response parameter.
1063 : *
1064 : * @return 0 on success, or (negative) error code on failure.
1065 : */
1066 1 : int bt_mesh_cfg_cli_mod_pub_set(uint16_t net_idx, uint16_t addr, uint16_t elem_addr,
1067 : uint16_t mod_id, struct bt_mesh_cfg_cli_mod_pub *pub,
1068 : uint8_t *status);
1069 :
1070 : /** @brief Set publish parameters for a vendor model on the target node.
1071 : *
1072 : * This method can be used asynchronously by setting @p status
1073 : * as NULL. This way the method will not wait for response
1074 : * and will return immediately after sending the command.
1075 : *
1076 : * @p pub shall not be NULL.
1077 : *
1078 : * @param net_idx Network index to encrypt with.
1079 : * @param addr Target node address.
1080 : * @param elem_addr Element address the model is in.
1081 : * @param mod_id Model ID.
1082 : * @param cid Company ID of the model.
1083 : * @param pub Publication parameters.
1084 : * @param status Status response parameter.
1085 : *
1086 : * @return 0 on success, or (negative) error code on failure.
1087 : */
1088 1 : int bt_mesh_cfg_cli_mod_pub_set_vnd(uint16_t net_idx, uint16_t addr, uint16_t elem_addr,
1089 : uint16_t mod_id, uint16_t cid,
1090 : struct bt_mesh_cfg_cli_mod_pub *pub, uint8_t *status);
1091 :
1092 : /** @brief Add a group address to a SIG model's subscription list.
1093 : *
1094 : * This method can be used asynchronously by setting @p status
1095 : * as NULL. This way the method will not wait for response
1096 : * and will return immediately after sending the command.
1097 : *
1098 : * @param net_idx Network index to encrypt with.
1099 : * @param addr Target node address.
1100 : * @param elem_addr Element address the model is in.
1101 : * @param sub_addr Group address to add to the subscription list.
1102 : * @param mod_id Model ID.
1103 : * @param status Status response parameter.
1104 : *
1105 : * @return 0 on success, or (negative) error code on failure.
1106 : */
1107 1 : int bt_mesh_cfg_cli_mod_sub_add(uint16_t net_idx, uint16_t addr, uint16_t elem_addr,
1108 : uint16_t sub_addr, uint16_t mod_id, uint8_t *status);
1109 :
1110 : /** @brief Add a group address to a vendor model's subscription list.
1111 : *
1112 : * This method can be used asynchronously by setting @p status
1113 : * as NULL. This way the method will not wait for response
1114 : * and will return immediately after sending the command.
1115 : *
1116 : * @param net_idx Network index to encrypt with.
1117 : * @param addr Target node address.
1118 : * @param elem_addr Element address the model is in.
1119 : * @param sub_addr Group address to add to the subscription list.
1120 : * @param mod_id Model ID.
1121 : * @param cid Company ID of the model.
1122 : * @param status Status response parameter.
1123 : *
1124 : * @return 0 on success, or (negative) error code on failure.
1125 : */
1126 1 : int bt_mesh_cfg_cli_mod_sub_add_vnd(uint16_t net_idx, uint16_t addr, uint16_t elem_addr,
1127 : uint16_t sub_addr, uint16_t mod_id, uint16_t cid,
1128 : uint8_t *status);
1129 :
1130 : /** @brief Delete a group address in a SIG model's subscription list.
1131 : *
1132 : * This method can be used asynchronously by setting @p status
1133 : * as NULL. This way the method will not wait for response
1134 : * and will return immediately after sending the command.
1135 : *
1136 : * @param net_idx Network index to encrypt with.
1137 : * @param addr Target node address.
1138 : * @param elem_addr Element address the model is in.
1139 : * @param sub_addr Group address to add to the subscription list.
1140 : * @param mod_id Model ID.
1141 : * @param status Status response parameter.
1142 : *
1143 : * @return 0 on success, or (negative) error code on failure.
1144 : */
1145 1 : int bt_mesh_cfg_cli_mod_sub_del(uint16_t net_idx, uint16_t addr, uint16_t elem_addr,
1146 : uint16_t sub_addr, uint16_t mod_id, uint8_t *status);
1147 :
1148 : /** @brief Delete a group address in a vendor model's subscription list.
1149 : *
1150 : * This method can be used asynchronously by setting @p status
1151 : * as NULL. This way the method will not wait for response
1152 : * and will return immediately after sending the command.
1153 : *
1154 : * @param net_idx Network index to encrypt with.
1155 : * @param addr Target node address.
1156 : * @param elem_addr Element address the model is in.
1157 : * @param sub_addr Group address to add to the subscription list.
1158 : * @param mod_id Model ID.
1159 : * @param cid Company ID of the model.
1160 : * @param status Status response parameter.
1161 : *
1162 : * @return 0 on success, or (negative) error code on failure.
1163 : */
1164 1 : int bt_mesh_cfg_cli_mod_sub_del_vnd(uint16_t net_idx, uint16_t addr, uint16_t elem_addr,
1165 : uint16_t sub_addr, uint16_t mod_id, uint16_t cid,
1166 : uint8_t *status);
1167 :
1168 : /** @brief Overwrite all addresses in a SIG model's subscription list with a
1169 : * group address.
1170 : *
1171 : * Deletes all subscriptions in the model's subscription list, and adds a
1172 : * single group address instead.
1173 : *
1174 : * This method can be used asynchronously by setting @p status
1175 : * as NULL. This way the method will not wait for response
1176 : * and will return immediately after sending the command.
1177 : *
1178 : * @param net_idx Network index to encrypt with.
1179 : * @param addr Target node address.
1180 : * @param elem_addr Element address the model is in.
1181 : * @param sub_addr Group address to add to the subscription list.
1182 : * @param mod_id Model ID.
1183 : * @param status Status response parameter.
1184 : *
1185 : * @return 0 on success, or (negative) error code on failure.
1186 : */
1187 1 : int bt_mesh_cfg_cli_mod_sub_overwrite(uint16_t net_idx, uint16_t addr, uint16_t elem_addr,
1188 : uint16_t sub_addr, uint16_t mod_id, uint8_t *status);
1189 :
1190 : /** @brief Overwrite all addresses in a vendor model's subscription list with a
1191 : * group address.
1192 : *
1193 : * Deletes all subscriptions in the model's subscription list, and adds a
1194 : * single group address instead.
1195 : *
1196 : * This method can be used asynchronously by setting @p status
1197 : * as NULL. This way the method will not wait for response
1198 : * and will return immediately after sending the command.
1199 : *
1200 : * @param net_idx Network index to encrypt with.
1201 : * @param addr Target node address.
1202 : * @param elem_addr Element address the model is in.
1203 : * @param sub_addr Group address to add to the subscription list.
1204 : * @param mod_id Model ID.
1205 : * @param cid Company ID of the model.
1206 : * @param status Status response parameter.
1207 : *
1208 : * @return 0 on success, or (negative) error code on failure.
1209 : */
1210 1 : int bt_mesh_cfg_cli_mod_sub_overwrite_vnd(uint16_t net_idx, uint16_t addr, uint16_t elem_addr,
1211 : uint16_t sub_addr, uint16_t mod_id, uint16_t cid,
1212 : uint8_t *status);
1213 :
1214 : /** @brief Add a virtual address to a SIG model's subscription list.
1215 : *
1216 : * This method can be used asynchronously by setting @p status
1217 : * and @p virt_addr as NULL. This way the method will not wait
1218 : * for response and will return immediately after sending the command.
1219 : *
1220 : * @param net_idx Network index to encrypt with.
1221 : * @param addr Target node address.
1222 : * @param elem_addr Element address the model is in.
1223 : * @param label Virtual address label to add to the subscription list.
1224 : * @param mod_id Model ID.
1225 : * @param virt_addr Virtual address response parameter.
1226 : * @param status Status response parameter.
1227 : *
1228 : * @return 0 on success, or (negative) error code on failure.
1229 : */
1230 1 : int bt_mesh_cfg_cli_mod_sub_va_add(uint16_t net_idx, uint16_t addr, uint16_t elem_addr,
1231 : const uint8_t label[16], uint16_t mod_id, uint16_t *virt_addr,
1232 : uint8_t *status);
1233 :
1234 : /** @brief Add a virtual address to a vendor model's subscription list.
1235 : *
1236 : * This method can be used asynchronously by setting @p status
1237 : * and @p virt_addr as NULL. This way the method will not wait
1238 : * for response and will return immediately after sending the command.
1239 : *
1240 : * @param net_idx Network index to encrypt with.
1241 : * @param addr Target node address.
1242 : * @param elem_addr Element address the model is in.
1243 : * @param label Virtual address label to add to the subscription list.
1244 : * @param mod_id Model ID.
1245 : * @param cid Company ID of the model.
1246 : * @param virt_addr Virtual address response parameter.
1247 : * @param status Status response parameter.
1248 : *
1249 : * @return 0 on success, or (negative) error code on failure.
1250 : */
1251 1 : int bt_mesh_cfg_cli_mod_sub_va_add_vnd(uint16_t net_idx, uint16_t addr, uint16_t elem_addr,
1252 : const uint8_t label[16], uint16_t mod_id, uint16_t cid,
1253 : uint16_t *virt_addr, uint8_t *status);
1254 :
1255 : /** @brief Delete a virtual address in a SIG model's subscription list.
1256 : *
1257 : * This method can be used asynchronously by setting @p status
1258 : * and @p virt_addr as NULL. This way the method will not wait
1259 : * for response and will return immediately after sending the command.
1260 : *
1261 : * @param net_idx Network index to encrypt with.
1262 : * @param addr Target node address.
1263 : * @param elem_addr Element address the model is in.
1264 : * @param label Virtual address parameter to add to the subscription list.
1265 : * @param mod_id Model ID.
1266 : * @param virt_addr Virtual address response parameter.
1267 : * @param status Status response parameter.
1268 : *
1269 : * @return 0 on success, or (negative) error code on failure.
1270 : */
1271 1 : int bt_mesh_cfg_cli_mod_sub_va_del(uint16_t net_idx, uint16_t addr, uint16_t elem_addr,
1272 : const uint8_t label[16], uint16_t mod_id, uint16_t *virt_addr,
1273 : uint8_t *status);
1274 :
1275 : /** @brief Delete a virtual address in a vendor model's subscription list.
1276 : *
1277 : * This method can be used asynchronously by setting @p status
1278 : * and @p virt_addr as NULL. This way the method will not wait
1279 : * for response and will return immediately after sending the command.
1280 : *
1281 : * @param net_idx Network index to encrypt with.
1282 : * @param addr Target node address.
1283 : * @param elem_addr Element address the model is in.
1284 : * @param label Virtual address label to add to the subscription list.
1285 : * @param mod_id Model ID.
1286 : * @param cid Company ID of the model.
1287 : * @param virt_addr Virtual address response parameter.
1288 : * @param status Status response parameter.
1289 : *
1290 : * @return 0 on success, or (negative) error code on failure.
1291 : */
1292 1 : int bt_mesh_cfg_cli_mod_sub_va_del_vnd(uint16_t net_idx, uint16_t addr, uint16_t elem_addr,
1293 : const uint8_t label[16], uint16_t mod_id, uint16_t cid,
1294 : uint16_t *virt_addr, uint8_t *status);
1295 :
1296 : /** @brief Overwrite all addresses in a SIG model's subscription list with a
1297 : * virtual address.
1298 : *
1299 : * Deletes all subscriptions in the model's subscription list, and adds a
1300 : * single group address instead.
1301 : *
1302 : * This method can be used asynchronously by setting @p status
1303 : * and @p virt_addr as NULL. This way the method will not wait
1304 : * for response and will return immediately after sending the command.
1305 : *
1306 : * @param net_idx Network index to encrypt with.
1307 : * @param addr Target node address.
1308 : * @param elem_addr Element address the model is in.
1309 : * @param label Virtual address label to add to the subscription list.
1310 : * @param mod_id Model ID.
1311 : * @param virt_addr Virtual address response parameter.
1312 : * @param status Status response parameter.
1313 : *
1314 : * @return 0 on success, or (negative) error code on failure.
1315 : */
1316 1 : int bt_mesh_cfg_cli_mod_sub_va_overwrite(uint16_t net_idx, uint16_t addr, uint16_t elem_addr,
1317 : const uint8_t label[16], uint16_t mod_id,
1318 : uint16_t *virt_addr, uint8_t *status);
1319 :
1320 : /** @brief Overwrite all addresses in a vendor model's subscription list with a
1321 : * virtual address.
1322 : *
1323 : * Deletes all subscriptions in the model's subscription list, and adds a
1324 : * single group address instead.
1325 : *
1326 : * This method can be used asynchronously by setting @p status
1327 : * and @p virt_addr as NULL. This way the method will not wait
1328 : * for response and will return immediately after sending the command.
1329 : *
1330 : * @param net_idx Network index to encrypt with.
1331 : * @param addr Target node address.
1332 : * @param elem_addr Element address the model is in.
1333 : * @param label Virtual address label to add to the subscription list.
1334 : * @param mod_id Model ID.
1335 : * @param cid Company ID of the model.
1336 : * @param virt_addr Virtual address response parameter.
1337 : * @param status Status response parameter.
1338 : *
1339 : * @return 0 on success, or (negative) error code on failure.
1340 : */
1341 1 : int bt_mesh_cfg_cli_mod_sub_va_overwrite_vnd(uint16_t net_idx, uint16_t addr, uint16_t elem_addr,
1342 : const uint8_t label[16], uint16_t mod_id, uint16_t cid,
1343 : uint16_t *virt_addr, uint8_t *status);
1344 :
1345 : /** @brief Get the subscription list of a SIG model on the target node.
1346 : *
1347 : * This method can be used asynchronously by setting @p status and
1348 : * ( @p subs or @p sub_cnt ) as NULL. This way the method will
1349 : * not wait for response and will return immediately after sending the command.
1350 : *
1351 : * @param net_idx Network index to encrypt with.
1352 : * @param addr Target node address.
1353 : * @param elem_addr Element address the model is in.
1354 : * @param mod_id Model ID.
1355 : * @param status Status response parameter.
1356 : * @param subs Subscription list response parameter. Will be filled with
1357 : * all the returned subscriptions it can fill.
1358 : * @param sub_cnt Subscription list element count. Should be set to the
1359 : * capacity of the @c subs list when calling. Will return the
1360 : * number of returned subscriptions upon success.
1361 : *
1362 : * @return 0 on success, or (negative) error code on failure.
1363 : */
1364 1 : int bt_mesh_cfg_cli_mod_sub_get(uint16_t net_idx, uint16_t addr, uint16_t elem_addr,
1365 : uint16_t mod_id, uint8_t *status, uint16_t *subs, size_t *sub_cnt);
1366 :
1367 : /** @brief Get the subscription list of a vendor model on the target node.
1368 : *
1369 : * This method can be used asynchronously by setting @p status and
1370 : * ( @p subs or @p sub_cnt ) as NULL. This way the method will
1371 : * not wait for response and will return immediately after sending the command.
1372 : *
1373 : * @param net_idx Network index to encrypt with.
1374 : * @param addr Target node address.
1375 : * @param elem_addr Element address the model is in.
1376 : * @param mod_id Model ID.
1377 : * @param cid Company ID of the model.
1378 : * @param status Status response parameter.
1379 : * @param subs Subscription list response parameter. Will be filled with
1380 : * all the returned subscriptions it can fill.
1381 : * @param sub_cnt Subscription list element count. Should be set to the
1382 : * capacity of the @c subs list when calling. Will return the
1383 : * number of returned subscriptions upon success.
1384 : *
1385 : * @return 0 on success, or (negative) error code on failure.
1386 : */
1387 1 : int bt_mesh_cfg_cli_mod_sub_get_vnd(uint16_t net_idx, uint16_t addr, uint16_t elem_addr,
1388 : uint16_t mod_id, uint16_t cid, uint8_t *status, uint16_t *subs,
1389 : size_t *sub_cnt);
1390 :
1391 : /** @brief Set the target node's Heartbeat subscription parameters.
1392 : *
1393 : * This method can be used asynchronously by setting @p status
1394 : * as NULL. This way the method will not wait for response
1395 : * and will return immediately after sending the command.
1396 : *
1397 : * @p sub shall not be null.
1398 : *
1399 : * @param net_idx Network index to encrypt with.
1400 : * @param addr Target node address.
1401 : * @param sub New Heartbeat subscription parameters.
1402 : * @param status Status response parameter.
1403 : *
1404 : * @return 0 on success, or (negative) error code on failure.
1405 : */
1406 1 : int bt_mesh_cfg_cli_hb_sub_set(uint16_t net_idx, uint16_t addr, struct bt_mesh_cfg_cli_hb_sub *sub,
1407 : uint8_t *status);
1408 :
1409 : /** @brief Get the target node's Heartbeat subscription parameters.
1410 : *
1411 : * This method can be used asynchronously by setting @p status
1412 : * and @p sub as NULL. This way the method will not wait for response
1413 : * and will return immediately after sending the command.
1414 : *
1415 : * @param net_idx Network index to encrypt with.
1416 : * @param addr Target node address.
1417 : * @param sub Heartbeat subscription parameter return buffer.
1418 : * @param status Status response parameter.
1419 : *
1420 : * @return 0 on success, or (negative) error code on failure.
1421 : */
1422 1 : int bt_mesh_cfg_cli_hb_sub_get(uint16_t net_idx, uint16_t addr, struct bt_mesh_cfg_cli_hb_sub *sub,
1423 : uint8_t *status);
1424 :
1425 : /** @brief Set the target node's Heartbeat publication parameters.
1426 : *
1427 : * @note The target node must already have received the specified network key.
1428 : *
1429 : * This method can be used asynchronously by setting @p status
1430 : * as NULL. This way the method will not wait for response
1431 : * and will return immediately after sending the command.
1432 : *
1433 : * @p pub shall not be NULL;
1434 : *
1435 : * @param net_idx Network index to encrypt with.
1436 : * @param addr Target node address.
1437 : * @param pub New Heartbeat publication parameters.
1438 : * @param status Status response parameter.
1439 : *
1440 : * @return 0 on success, or (negative) error code on failure.
1441 : */
1442 1 : int bt_mesh_cfg_cli_hb_pub_set(uint16_t net_idx, uint16_t addr,
1443 : const struct bt_mesh_cfg_cli_hb_pub *pub, uint8_t *status);
1444 :
1445 : /** @brief Get the target node's Heartbeat publication parameters.
1446 : *
1447 : * This method can be used asynchronously by setting @p status
1448 : * and @p pub as NULL. This way the method will not wait for response
1449 : * and will return immediately after sending the command.
1450 : *
1451 : * @param net_idx Network index to encrypt with.
1452 : * @param addr Target node address.
1453 : * @param pub Heartbeat publication parameter return buffer.
1454 : * @param status Status response parameter.
1455 : *
1456 : * @return 0 on success, or (negative) error code on failure.
1457 : */
1458 1 : int bt_mesh_cfg_cli_hb_pub_get(uint16_t net_idx, uint16_t addr, struct bt_mesh_cfg_cli_hb_pub *pub,
1459 : uint8_t *status);
1460 :
1461 : /** @brief Delete all group addresses in a SIG model's subscription list.
1462 : *
1463 : * This method can be used asynchronously by setting @p status
1464 : * as NULL. This way the method will not wait for response
1465 : * and will return immediately after sending the command.
1466 : *
1467 : * @param net_idx Network index to encrypt with.
1468 : * @param addr Target node address.
1469 : * @param elem_addr Element address the model is in.
1470 : * @param mod_id Model ID.
1471 : * @param status Status response parameter.
1472 : *
1473 : * @return 0 on success, or (negative) error code on failure.
1474 : */
1475 1 : int bt_mesh_cfg_cli_mod_sub_del_all(uint16_t net_idx, uint16_t addr, uint16_t elem_addr,
1476 : uint16_t mod_id, uint8_t *status);
1477 :
1478 : /** @brief Delete all group addresses in a vendor model's subscription list.
1479 : *
1480 : * This method can be used asynchronously by setting @p status
1481 : * as NULL. This way the method will not wait for response
1482 : * and will return immediately after sending the command.
1483 : *
1484 : * @param net_idx Network index to encrypt with.
1485 : * @param addr Target node address.
1486 : * @param elem_addr Element address the model is in.
1487 : * @param mod_id Model ID.
1488 : * @param cid Company ID of the model.
1489 : * @param status Status response parameter.
1490 : *
1491 : * @return 0 on success, or (negative) error code on failure.
1492 : */
1493 1 : int bt_mesh_cfg_cli_mod_sub_del_all_vnd(uint16_t net_idx, uint16_t addr, uint16_t elem_addr,
1494 : uint16_t mod_id, uint16_t cid, uint8_t *status);
1495 :
1496 : /** @brief Update a network key to the target node.
1497 : *
1498 : * This method can be used asynchronously by setting @p status
1499 : * as NULL. This way the method will not wait for response
1500 : * and will return immediately after sending the command.
1501 : *
1502 : * @param net_idx Network index to encrypt with.
1503 : * @param addr Target node address.
1504 : * @param key_net_idx Network key index.
1505 : * @param net_key Network key.
1506 : * @param status Status response parameter.
1507 : *
1508 : * @return 0 on success, or (negative) error code on failure.
1509 : */
1510 1 : int bt_mesh_cfg_cli_net_key_update(uint16_t net_idx, uint16_t addr, uint16_t key_net_idx,
1511 : const uint8_t net_key[16], uint8_t *status);
1512 :
1513 : /** @brief Update an application key to the target node.
1514 : *
1515 : * This method can be used asynchronously by setting @p status
1516 : * as NULL. This way the method will not wait for response
1517 : * and will return immediately after sending the command.
1518 : *
1519 : * @param net_idx Network index to encrypt with.
1520 : * @param addr Target node address.
1521 : * @param key_net_idx Network key index the application key belongs to.
1522 : * @param key_app_idx Application key index.
1523 : * @param app_key Application key.
1524 : * @param status Status response parameter.
1525 : *
1526 : * @return 0 on success, or (negative) error code on failure.
1527 : */
1528 1 : int bt_mesh_cfg_cli_app_key_update(uint16_t net_idx, uint16_t addr, uint16_t key_net_idx,
1529 : uint16_t key_app_idx, const uint8_t app_key[16],
1530 : uint8_t *status);
1531 :
1532 : /** @brief Set the Node Identity parameters.
1533 : *
1534 : * This method can be used asynchronously by setting @p status
1535 : * and @p identity as NULL. This way the method will not wait
1536 : * for response and will return immediately after sending the command.
1537 : *
1538 : * @param net_idx Network index to encrypt with.
1539 : * @param addr Target node address.
1540 : * @param new_identity New identity state. Must be one of
1541 : * @ref BT_MESH_NODE_IDENTITY_STOPPED or
1542 : * @ref BT_MESH_NODE_IDENTITY_RUNNING
1543 : * @param key_net_idx Network key index the application key belongs to.
1544 : * @param status Status response parameter.
1545 : * @param identity Identity response parameter.
1546 : *
1547 : * @return 0 on success, or (negative) error code on failure.
1548 : */
1549 1 : int bt_mesh_cfg_cli_node_identity_set(uint16_t net_idx, uint16_t addr, uint16_t key_net_idx,
1550 : uint8_t new_identity, uint8_t *status, uint8_t *identity);
1551 :
1552 : /** @brief Get the Node Identity parameters.
1553 : *
1554 : * This method can be used asynchronously by setting @p status
1555 : * and @p identity as NULL. This way the method will not wait
1556 : * for response and will return immediately after sending the command.
1557 : *
1558 : * @param net_idx Network index to encrypt with.
1559 : * @param addr Target node address.
1560 : * @param key_net_idx Network key index the application key belongs to.
1561 : * @param status Status response parameter.
1562 : * @param identity Identity response parameter. Must be one of
1563 : * @ref BT_MESH_NODE_IDENTITY_STOPPED or
1564 : * @ref BT_MESH_NODE_IDENTITY_RUNNING
1565 : *
1566 : * @return 0 on success, or (negative) error code on failure.
1567 : */
1568 1 : int bt_mesh_cfg_cli_node_identity_get(uint16_t net_idx, uint16_t addr, uint16_t key_net_idx,
1569 : uint8_t *status, uint8_t *identity);
1570 :
1571 : /** @brief Get the Low Power Node Polltimeout parameters.
1572 : *
1573 : * This method can be used asynchronously by setting @p polltimeout
1574 : * as NULL. This way the method will not wait for response
1575 : * and will return immediately after sending the command.
1576 : *
1577 : * @param net_idx Network index to encrypt with.
1578 : * @param addr Target node address.
1579 : * @param unicast_addr LPN unicast address.
1580 : * @param polltimeout Poll timeout response parameter.
1581 : *
1582 : * @return 0 on success, or (negative) error code on failure.
1583 : */
1584 1 : int bt_mesh_cfg_cli_lpn_timeout_get(uint16_t net_idx, uint16_t addr, uint16_t unicast_addr,
1585 : int32_t *polltimeout);
1586 :
1587 : /** @brief Get the current transmission timeout value.
1588 : *
1589 : * @return The configured transmission timeout in milliseconds.
1590 : */
1591 1 : int32_t bt_mesh_cfg_cli_timeout_get(void);
1592 :
1593 : /** @brief Set the transmission timeout value.
1594 : *
1595 : * @param timeout The new transmission timeout.
1596 : */
1597 1 : void bt_mesh_cfg_cli_timeout_set(int32_t timeout);
1598 :
1599 : /** Parsed Composition data page 0 representation.
1600 : *
1601 : * Should be pulled from the return buffer passed to
1602 : * @ref bt_mesh_cfg_cli_comp_data_get using
1603 : * @ref bt_mesh_comp_p0_get.
1604 : */
1605 1 : struct bt_mesh_comp_p0 {
1606 : /** Company ID */
1607 1 : uint16_t cid;
1608 : /** Product ID */
1609 1 : uint16_t pid;
1610 : /** Version ID */
1611 1 : uint16_t vid;
1612 : /** Replay protection list size */
1613 1 : uint16_t crpl;
1614 : /** Supported features, see @ref BT_MESH_FEAT_SUPPORTED. */
1615 1 : uint16_t feat;
1616 :
1617 : struct net_buf_simple *_buf;
1618 : };
1619 :
1620 : /** Composition data page 0 element representation */
1621 1 : struct bt_mesh_comp_p0_elem {
1622 : /** Element location */
1623 1 : uint16_t loc;
1624 : /** The number of SIG models in this element */
1625 1 : size_t nsig;
1626 : /** The number of vendor models in this element */
1627 1 : size_t nvnd;
1628 :
1629 : uint8_t *_buf;
1630 : };
1631 :
1632 : /** @brief Create a composition data page 0 representation from a buffer.
1633 : *
1634 : * The composition data page object will take ownership over the buffer, which
1635 : * should not be manipulated directly after this call.
1636 : *
1637 : * This function can be used in combination with @ref bt_mesh_cfg_cli_comp_data_get
1638 : * to read out composition data page 0 from other devices:
1639 : *
1640 : * @code
1641 : * NET_BUF_SIMPLE_DEFINE(buf, BT_MESH_RX_SDU_MAX);
1642 : * struct bt_mesh_comp_p0 comp;
1643 : *
1644 : * err = bt_mesh_cfg_cli_comp_data_get(net_idx, addr, 0, &page, &buf);
1645 : * if (!err) {
1646 : * bt_mesh_comp_p0_get(&comp, &buf);
1647 : * }
1648 : * @endcode
1649 : *
1650 : * @param buf Network buffer containing composition data.
1651 : * @param comp Composition data structure to fill.
1652 : *
1653 : * @return 0 on success, or (negative) error code on failure.
1654 : */
1655 1 : int bt_mesh_comp_p0_get(struct bt_mesh_comp_p0 *comp,
1656 : struct net_buf_simple *buf);
1657 :
1658 : /** @brief Pull a composition data page 0 element from a composition data page 0
1659 : * instance.
1660 : *
1661 : * Each call to this function will pull out a new element from the composition
1662 : * data page, until all elements have been pulled.
1663 : *
1664 : * @param comp Composition data page
1665 : * @param elem Element to fill.
1666 : *
1667 : * @return A pointer to @c elem on success, or NULL if no more elements could
1668 : * be pulled.
1669 : */
1670 1 : struct bt_mesh_comp_p0_elem *bt_mesh_comp_p0_elem_pull(const struct bt_mesh_comp_p0 *comp,
1671 : struct bt_mesh_comp_p0_elem *elem);
1672 :
1673 : /** @brief Get a SIG model from the given composition data page 0 element.
1674 : *
1675 : * @param elem Element to read the model from.
1676 : * @param idx Index of the SIG model to read.
1677 : *
1678 : * @return The Model ID of the SIG model at the given index, or 0xffff if the
1679 : * index is out of bounds.
1680 : */
1681 1 : uint16_t bt_mesh_comp_p0_elem_mod(struct bt_mesh_comp_p0_elem *elem, int idx);
1682 :
1683 : /** @brief Get a vendor model from the given composition data page 0 element.
1684 : *
1685 : * @param elem Element to read the model from.
1686 : * @param idx Index of the vendor model to read.
1687 : *
1688 : * @return The model ID of the vendor model at the given index, or
1689 : * {0xffff, 0xffff} if the index is out of bounds.
1690 : */
1691 1 : struct bt_mesh_mod_id_vnd bt_mesh_comp_p0_elem_mod_vnd(struct bt_mesh_comp_p0_elem *elem, int idx);
1692 :
1693 : /** Composition data page 1 element representation */
1694 1 : struct bt_mesh_comp_p1_elem {
1695 : /** The number of SIG models in this element */
1696 1 : size_t nsig;
1697 : /** The number of vendor models in this element */
1698 1 : size_t nvnd;
1699 : /** Buffer containing SIG and Vendor Model Items */
1700 : struct net_buf_simple *_buf;
1701 : };
1702 :
1703 : /** Composition data page 1 model item representation */
1704 1 : struct bt_mesh_comp_p1_model_item {
1705 : /** Corresponding_Group_ID field indicator */
1706 1 : bool cor_present;
1707 : /** Determines the format of Extended Model Item */
1708 1 : bool format;
1709 : /** Number of items in Extended Model Items*/
1710 1 : uint8_t ext_item_cnt : 6;
1711 : /** Buffer containing Extended Model Items.
1712 : * If cor_present is set to 1 it starts with
1713 : * Corresponding_Group_ID
1714 : */
1715 1 : uint8_t cor_id;
1716 : struct net_buf_simple *_buf;
1717 : };
1718 :
1719 : /** Extended Model Item in short representation */
1720 1 : struct bt_mesh_comp_p1_item_short {
1721 : /** Element address modifier */
1722 1 : uint8_t elem_offset : 3;
1723 : /** Model Index */
1724 1 : uint8_t mod_item_idx : 5;
1725 : };
1726 :
1727 : /** Extended Model Item in long representation */
1728 1 : struct bt_mesh_comp_p1_item_long {
1729 : /** Element address modifier */
1730 1 : uint8_t elem_offset;
1731 : /** Model Index */
1732 1 : uint8_t mod_item_idx;
1733 : };
1734 :
1735 : /** Extended Model Item */
1736 1 : struct bt_mesh_comp_p1_ext_item {
1737 0 : enum { SHORT, LONG } type;
1738 :
1739 : union {
1740 : /** Item in short representation */
1741 1 : struct bt_mesh_comp_p1_item_short short_item;
1742 : /** Item in long representation */
1743 1 : struct bt_mesh_comp_p1_item_long long_item;
1744 0 : };
1745 : };
1746 :
1747 : /** @brief Pull a Composition Data Page 1 Element from a composition data page 1
1748 : * instance.
1749 : *
1750 : * Each call to this function will pull out a new element from the composition
1751 : * data page, until all elements have been pulled.
1752 : *
1753 : * @param buf Composition data page 1 buffer
1754 : * @param elem Element to fill.
1755 : *
1756 : * @return A pointer to @c elem on success, or NULL if no more elements could
1757 : * be pulled.
1758 : */
1759 1 : struct bt_mesh_comp_p1_elem *bt_mesh_comp_p1_elem_pull(
1760 : struct net_buf_simple *buf, struct bt_mesh_comp_p1_elem *elem);
1761 :
1762 : /** @brief Pull a Composition Data Page 1 Model Item from a Composition Data
1763 : * Page 1 Element
1764 : *
1765 : * Each call to this function will pull out a new item from the Composition Data
1766 : * Page 1 Element, until all items have been pulled.
1767 : *
1768 : * @param elem Composition data page 1 Element
1769 : * @param item Model Item to fill.
1770 : *
1771 : * @return A pointer to @c item on success, or NULL if no more elements could
1772 : * be pulled.
1773 : */
1774 1 : struct bt_mesh_comp_p1_model_item *bt_mesh_comp_p1_item_pull(
1775 : struct bt_mesh_comp_p1_elem *elem, struct bt_mesh_comp_p1_model_item *item);
1776 :
1777 : /** @brief Pull Extended Model Item contained in Model Item
1778 : *
1779 : * Each call to this function will pull out a new element
1780 : * from the Extended Model Item, until all elements have been pulled.
1781 : *
1782 : * @param item Model Item to pull Extended Model Items from
1783 : * @param ext_item Extended Model Item to fill
1784 : *
1785 : * @return A pointer to @c ext_item on success, or NULL if item could not be pulled
1786 : */
1787 1 : struct bt_mesh_comp_p1_ext_item *bt_mesh_comp_p1_pull_ext_item(
1788 : struct bt_mesh_comp_p1_model_item *item, struct bt_mesh_comp_p1_ext_item *ext_item);
1789 :
1790 : /** Composition data page 2 record parsing structure. */
1791 1 : struct bt_mesh_comp_p2_record {
1792 : /** Mesh profile ID. */
1793 1 : uint16_t id;
1794 : /** Mesh Profile Version. */
1795 : struct {
1796 : /** Major version. */
1797 1 : uint8_t x;
1798 : /** Minor version. */
1799 1 : uint8_t y;
1800 : /** Z version. */
1801 1 : uint8_t z;
1802 1 : } version;
1803 : /** Element offset buffer. */
1804 1 : struct net_buf_simple *elem_buf;
1805 : /** Additional data buffer. */
1806 1 : struct net_buf_simple *data_buf;
1807 : };
1808 :
1809 : /** @brief Pull a Composition Data Page 2 Record from a composition data page 2
1810 : * instance.
1811 : *
1812 : * Each call to this function will pull out a new element from the composition
1813 : * data page, until all elements have been pulled.
1814 : *
1815 : * @param buf Composition data page 2 buffer
1816 : * @param record Record to fill.
1817 : *
1818 : * @return A pointer to @c record on success, or NULL if no more elements could
1819 : * be pulled.
1820 : */
1821 1 : struct bt_mesh_comp_p2_record *bt_mesh_comp_p2_record_pull(struct net_buf_simple *buf,
1822 : struct bt_mesh_comp_p2_record *record);
1823 :
1824 : /** @brief Unpack a list of key index entries from a buffer.
1825 : *
1826 : * On success, @c dst_cnt is set to the amount of unpacked key index entries.
1827 : *
1828 : * @param buf Message buffer containing encoded AppKey or NetKey Indexes.
1829 : * @param dst_arr Destination array for the unpacked list.
1830 : * @param dst_cnt Size of the destination array.
1831 : *
1832 : * @return 0 on success.
1833 : * @return -EMSGSIZE if dst_arr size is to small to parse full message.
1834 : */
1835 1 : int bt_mesh_key_idx_unpack_list(struct net_buf_simple *buf, uint16_t *dst_arr, size_t *dst_cnt);
1836 :
1837 : /** @cond INTERNAL_HIDDEN */
1838 : extern const struct bt_mesh_model_op bt_mesh_cfg_cli_op[];
1839 : extern const struct bt_mesh_model_cb bt_mesh_cfg_cli_cb;
1840 : /** @endcond */
1841 :
1842 : #ifdef __cplusplus
1843 : }
1844 : #endif
1845 : /**
1846 : * @}
1847 : */
1848 :
1849 : #endif /* ZEPHYR_INCLUDE_BLUETOOTH_MESH_CFG_CLI_H_ */
|