1 /*
2  * Copyright (c) 2022 Nordic Semiconductor ASA
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  */
6 
7 #ifndef BT_MESH_SOL_PDU_RPL_CLI_H__
8 #define BT_MESH_SOL_PDU_RPL_CLI_H__
9 
10 #include <zephyr/bluetooth/mesh.h>
11 
12 #ifdef __cplusplus
13 extern "C" {
14 #endif
15 
16 /**
17  * @defgroup bt_mesh_sol_pdu_rpl_cli Bluetooth Mesh Solicitation PDU RPL Client
18  * @ingroup bt_mesh
19  * @{
20  */
21 
22 /** Solicitation PDU RPL Client Model Context */
23 struct bt_mesh_sol_pdu_rpl_cli {
24 	/** Solicitation PDU RPL model entry pointer. */
25 	const struct bt_mesh_model *model;
26 
27 	/* Internal parameters for tracking message responses. */
28 	struct bt_mesh_msg_ack_ctx ack_ctx;
29 
30 	/** @brief Optional callback for Solicitation PDU RPL Status messages.
31 	 *
32 	 *  Handles received Solicitation PDU RPL Status messages from a Solicitation
33 	 *  PDU RPL server.The @c start param represents the start of range that server
34 	 *  has cleared. The @c length param represents length of range cleared by server.
35 	 *
36 	 *  @param cli         Solicitation PDU RPL client that received the status message.
37 	 *  @param addr        Address of the sender.
38 	 *  @param range_start       Range start value.
39 	 *  @param range_length      Range length value.
40 	 */
41 	void (*srpl_status)(struct bt_mesh_sol_pdu_rpl_cli *cli, uint16_t addr,
42 			    uint16_t range_start, uint8_t range_length);
43 };
44 
45 /**
46  *  @brief Solicitation PDU RPL Client model composition data entry.
47  */
48 #define BT_MESH_MODEL_SOL_PDU_RPL_CLI(cli_data)                             \
49 	BT_MESH_MODEL_CB(BT_MESH_MODEL_ID_SOL_PDU_RPL_CLI,                  \
50 			 _bt_mesh_sol_pdu_rpl_cli_op, NULL, cli_data,       \
51 			 &_bt_mesh_sol_pdu_rpl_cli_cb)
52 
53 /** @brief Remove entries from Solicitation PDU RPL of addresses in given range.
54  *
55  *  This method can be used asynchronously by setting @p start_rsp or
56  *  @p len_rsp as NULL. This way the method will not wait for response and will
57  *  return immediately after sending the command.
58  *
59  *  To process the response arguments of an async method, register
60  *  the @c srpl_status callback in @c bt_mesh_sol_pdu_rpl_cli struct.
61  *
62  *  @param ctx           Message context for the message.
63  *  @param range_start   Start of Unicast address range.
64  *  @param range_len     Length of Unicast address range. Valid values are 0x00 and 0x02
65  *                       to 0xff.
66  *  @param start_rsp     Range start response buffer.
67  *  @param len_rsp       Range length response buffer.
68  *
69  *  @return 0 on success, or (negative) error code otherwise.
70  */
71 int bt_mesh_sol_pdu_rpl_clear(struct bt_mesh_msg_ctx *ctx, uint16_t range_start,
72 			      uint8_t range_len, uint16_t *start_rsp, uint8_t *len_rsp);
73 
74 
75 /** @brief Remove entries from Solicitation PDU RPL of addresses in given range (unacked).
76  *
77  *  @param ctx           Message context for the message.
78  *  @param range_start   Start of Unicast address range.
79  *  @param range_len     Length of Unicast address range. Valid values are 0x00 and 0x02
80  *                       to 0xff.
81  *
82  *  @return 0 on success, or (negative) error code otherwise.
83  */
84 int bt_mesh_sol_pdu_rpl_clear_unack(struct bt_mesh_msg_ctx *ctx, uint16_t range_start,
85 				    uint8_t range_len);
86 
87 /** @brief Set the transmission timeout value.
88  *
89  *  @param timeout The new transmission timeout in milliseconds.
90  */
91 void bt_mesh_sol_pdu_rpl_cli_timeout_set(int32_t timeout);
92 
93 /** @cond INTERNAL_HIDDEN */
94 extern const struct bt_mesh_model_op _bt_mesh_sol_pdu_rpl_cli_op[];
95 extern const struct bt_mesh_model_cb _bt_mesh_sol_pdu_rpl_cli_cb;
96 /** @endcond */
97 
98 /** @} */
99 
100 #ifdef __cplusplus
101 }
102 #endif
103 
104 #endif /* BT_MESH_SOL_PDU_RPL_CLI_H__ */
105