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