1 /* 2 * Copyright (c) 2021 Nordic Semiconductor ASA 3 * 4 * SPDX-License-Identifier: Apache-2.0 5 */ 6 7 #ifndef BT_MESH_LARGE_COMP_DATA_CLI_H__ 8 #define BT_MESH_LARGE_COMP_DATA_CLI_H__ 9 10 #include <zephyr/bluetooth/mesh.h> 11 12 #ifdef __cplusplus 13 extern "C" { 14 #endif 15 16 /** 17 * @defgroup bt_mesh_large_comp_data_cli Large Composition Data Client model 18 * @ingroup bt_mesh 19 * @{ 20 */ 21 22 struct bt_mesh_large_comp_data_cli; 23 24 /** Large Composition Data response. */ 25 struct bt_mesh_large_comp_data_rsp { 26 /** Page number. */ 27 uint8_t page; 28 /** Offset within the page. */ 29 uint16_t offset; 30 /** Total size of the page. */ 31 uint16_t total_size; 32 /** Pointer to allocated buffer for storing received data. */ 33 struct net_buf_simple *data; 34 }; 35 36 /** Large Composition Data Status messages callbacks */ 37 struct bt_mesh_large_comp_data_cli_cb { 38 /** @brief Optional callback for Large Composition Data Status message. 39 * 40 * Handles received Large Composition Data Status messages from a Large Composition Data 41 * Server. 42 * 43 * If the content of @c rsp is needed after exiting this callback, a user should 44 * deep copy it. 45 * 46 * @param cli Large Composition Data Client context. 47 * @param addr Address of the sender. 48 * @param rsp Response received from the server. 49 */ 50 void (*large_comp_data_status)(struct bt_mesh_large_comp_data_cli *cli, uint16_t addr, 51 struct bt_mesh_large_comp_data_rsp *rsp); 52 53 /** @brief Optional callback for Models Metadata Status message. 54 * 55 * Handles received Models Metadata Status messages from a Large Composition Data 56 * Server. 57 * 58 * If the content of @c rsp is needed after exiting this callback, a user should 59 * deep copy it. 60 * 61 * @param cli Large Composition Data Client context. 62 * @param addr Address of the sender. 63 * @param rsp Response received from the server. 64 */ 65 void (*models_metadata_status)(struct bt_mesh_large_comp_data_cli *cli, uint16_t addr, 66 struct bt_mesh_large_comp_data_rsp *rsp); 67 }; 68 69 /** Large Composition Data Client model context */ 70 struct bt_mesh_large_comp_data_cli { 71 /** Model entry pointer. */ 72 const struct bt_mesh_model *model; 73 74 /** Internal parameters for tracking message responses. */ 75 struct bt_mesh_msg_ack_ctx ack_ctx; 76 77 /** Optional callback for Large Composition Data Status messages. */ 78 const struct bt_mesh_large_comp_data_cli_cb *cb; 79 }; 80 81 /** 82 * 83 * @brief Large Composition Data Client model Composition Data entry. 84 * 85 * @param cli_data Pointer to a @ref bt_mesh_large_comp_data_cli instance. 86 */ 87 #define BT_MESH_MODEL_LARGE_COMP_DATA_CLI(cli_data) \ 88 BT_MESH_MODEL_CB(BT_MESH_MODEL_ID_LARGE_COMP_DATA_CLI, \ 89 _bt_mesh_large_comp_data_cli_op, NULL, cli_data, \ 90 &_bt_mesh_large_comp_data_cli_cb) 91 92 /** @brief Send Large Composition Data Get message. 93 * 94 * This API is used to read a portion of a Composition Data Page. 95 * 96 * This API can be used asynchronously by setting @p rsp as NULL. This way, the 97 * method will not wait for a response and will return immediately after sending 98 * the command. 99 * 100 * When @c rsp is set, the user is responsible for providing a buffer for the 101 * Composition Data in @ref bt_mesh_large_comp_data_rsp::data. If a buffer is 102 * not provided, the metadata won't be copied. 103 * 104 * @param net_idx Network index to encrypt with. 105 * @param addr Target node element address. 106 * @param page Composition Data Page to read. 107 * @param offset Offset within the Composition Data Page. 108 * @param rsp Pointer to a struct storing the received response from 109 * the server, or NULL to not wait for a response. 110 * 111 * @return 0 on success, or (negative) error code on failure. 112 */ 113 int bt_mesh_large_comp_data_get(uint16_t net_idx, uint16_t addr, uint8_t page, 114 size_t offset, struct bt_mesh_large_comp_data_rsp *rsp); 115 116 /** @brief Send Models Metadata Get message. 117 * 118 * This API is used to read a portion of a Models Metadata Page. 119 * 120 * This API can be used asynchronously by setting @p rsp as NULL. This way, the 121 * method will not wait for a response and will return immediately after sending 122 * the command. 123 * 124 * When @c rsp is set, a user is responsible for providing a buffer for 125 * metadata in @ref bt_mesh_large_comp_data_rsp::data. If a buffer is not 126 * provided, the metadata won't be copied. 127 * 128 * @param net_idx Network index to encrypt with. 129 * @param addr Target node element address. 130 * @param page Models Metadata Page to read. 131 * @param offset Offset within the Models Metadata Page. 132 * @param rsp Pointer to a struct storing the received response from 133 * the server, or NULL to not wait for a response. 134 * 135 * @return 0 on success, or (negative) error code on failure. 136 */ 137 int bt_mesh_models_metadata_get(uint16_t net_idx, uint16_t addr, uint8_t page, 138 size_t offset, struct bt_mesh_large_comp_data_rsp *rsp); 139 140 /** @cond INTERNAL_HIDDEN */ 141 extern const struct bt_mesh_model_op _bt_mesh_large_comp_data_cli_op[]; 142 extern const struct bt_mesh_model_cb _bt_mesh_large_comp_data_cli_cb; 143 /** @endcond */ 144 145 /** 146 * @} 147 */ 148 149 #ifdef __cplusplus 150 } 151 #endif 152 153 #endif /* BT_MESH_LARGE_COMP_DATA_CLI_H__ */ 154