MeshX 0.4
This repository provides an implementation for Bluetooth Low Energy (BLE) Mesh network nodes. The project allows you to create BLE mesh nodes that can communicate with each other, enabling the development of smart home solutions or other IoT-based applications.
Loading...
Searching...
No Matches
meshx_model_property.hpp
Go to the documentation of this file.
1/**
2 * @file meshx_model_property.hpp
3 * @brief Implementation of Generic Property Models for MeshX
4 *
5 * This file contains the implementation of the Generic Property models,
6 * which provide standard Property model functionality in the MeshX BLE mesh framework.
7 *
8 * Key Features:
9 * - Implements Bluetooth SIG-defined Generic Property models
10 * - Supports Manufacturer, Admin, User, and Client Property servers
11 * - Inherits from meshXClientModel and meshXServerModel templates
12 * - Provides standard Property control operations (GET, SET operations by property ID)
13 * - Integrates with MeshX transmission control
14 *
15 * @author Pranjal Chanda
16 * @date 2024-2025
17 * @copyright Copyright 2024 - 2025 MeshX
18 */
19#ifndef _MESHX_MODEL_PROPERTY_HPP_
20#define _MESHX_MODEL_PROPERTY_HPP_
21
22#include <meshx_model_class.hpp>
24
25#define MESHX_GEN_PROPERTY_CLIENT_MODEL_TEMPLATE_PROTO
26#define MESHX_GEN_PROPERTY_CLIENT_MODEL_TEMPLATE_PARAMS
27
28#define MESHX_GEN_ADMIN_PROPERTY_SERVER_MODEL_TEMPLATE_PROTO
29#define MESHX_GEN_ADMIN_PROPERTY_SERVER_MODEL_TEMPLATE_PARAMS
30
31#define MESHX_GEN_MANUFACTURER_PROPERTY_SERVER_MODEL_TEMPLATE_PROTO
32#define MESHX_GEN_MANUFACTURER_PROPERTY_SERVER_MODEL_TEMPLATE_PARAMS
33
34#define MESHX_GEN_USER_PROPERTY_SERVER_MODEL_TEMPLATE_PROTO
35#define MESHX_GEN_USER_PROPERTY_SERVER_MODEL_TEMPLATE_PARAMS
36
37#define MESHX_GEN_CLIENT_PROPERTY_SERVER_MODEL_TEMPLATE_PROTO
38#define MESHX_GEN_CLIENT_PROPERTY_SERVER_MODEL_TEMPLATE_PARAMS
39
40/**
41 * @brief Structure to hold the Property model state.
42 */
44{
45 uint16_t property_id; /**< Property ID */
46 meshx_ptr_t property_value; /**< Pointer to the property value data */
47 uint8_t access; /**< Access level performed */
48};
49
51
52/**
53 * @brief Structure to hold the parameters for sending a Generic Property message.
54 */
56{
57 meshx_model_t *model; /**< Pointer to the Property client model. */
58 meshx_ctx_t *ctx; /**< The context of the message. */
59 meshx_gen_property_model_state_t state; /**< The state of the message. */
60};
61
63
64#if CONFIG_ENABLE_GEN_PROPERTY_CLIENT
65/**
66 * @brief Structure to hold the Property Server to parent element message.
67 * The structure is used by the on_model_cb function to send the Property state
68 * change notification to the parent element.
69 */
71{
72 meshx_cli_model_send_param_header_t header; /**< Client model send param header */
73 meshx_gen_property_model_state_t state; /**< The state of the message. */
74};
75
77/**
78 * @class meshXGenericPropertyClientModel
79 * @brief A template class for creating Generic Property Client models.
80 *
81 * This class is derived from meshXClientModel and provides a convenient interface for
82 * creating Generic Property Client models. It handles the Generic Property state change
83 * notifications from the MeshX stack and publishes the state change event to the
84 * element layer.
85 */
87class meshXGenericPropertyClientModel : public meshXClientModel<meshXBaseGenericClientModel, meshx_gen_property_send_params_t>
88{
89private:
90 /* New or updated model state from BLE layer */
92
93 /* Message to be sent to parent element */
95
98
99public:
102 meshx_err_t prepare_element_msg (meshx_ptr_t *msg_ptr, size_t *msg_size) override;
103
106 meshx_ptr_t parent_element_state = nullptr,
107 uint16_t model_func_id = 0
108 );
110};
111
112#endif /* CONFIG_ENABLE_GEN_PROPERTY_CLIENT */
113
114#if CONFIG_ENABLE_GEN_ADMIN_PROPERTY_SERVER
115
116/**
117 * @brief Structure to hold the Property Server to parent element message.
118 * The structure is used by the on_model_cb function to send the Property state
119 * change notification to the parent element.
120 */
122{
123 meshx_srv_model_send_param_header_t header; /**< Server model send param header */
124 meshx_gen_property_model_state_t state; /**< The state of the message. */
125};
126
128
129/**
130 * @class meshXGenericAdminPropertyServerModel
131 * @brief A template class for creating Generic Admin Property Server models.
132 *
133 * This class is derived from meshXServerModel and provides a convenient interface for
134 * creating Generic Admin Property Server models. It handles the Generic Admin Property state change
135 * notifications from the MeshX stack and publishes the state change event to the
136 * element layer.
137 */
139class meshXGenericAdminPropertyServerModel : public meshXServerModel<meshXBaseGenericServerModel, meshx_gen_property_send_params_t>
140{
141private:
142 /* New or updated model state from BLE layer */
144
145 /* Message to be sent to parent element */
147
148 /* Flag to indicate if element message has been prepared */
150
151 meshx_err_t plat_model_create (MESHX_MODEL* p_plat_model_ptr = nullptr) override;
152 meshx_err_t plat_model_delete (void) override;
153
154public:
157 meshx_err_t prepare_element_msg (meshx_ptr_t *msg_ptr, size_t *msg_size) override;
158
159 // Virtual method implementation from meshXModelIF
161
164 meshx_ptr_t parent_element_state = nullptr,
165 uint16_t model_func_id = 0
166 );
168};
169#endif /* CONFIG_ENABLE_GEN_ADMIN_PROPERTY_SERVER */
170
171#if CONFIG_ENABLE_GEN_MANU_PROP_SERVER
172/**
173 * @class meshXGenericManufacturerPropertyServerModel
174 * @brief A template class for creating Generic Manufacturer Property Server models.
175 *
176 * This class is derived from meshXServerModel and provides a convenient interface for
177 * creating Generic Manufacturer Property Server models. It handles the Generic Manufacturer Property state change
178 * notifications from the MeshX stack and publishes the state change event to the
179 * element layer.
180 */
182class meshXGenericManufacturerPropertyServerModel : public meshXServerModel<meshXBaseGenericServerModel, meshx_gen_property_send_params_t>
183{
184private:
185 /* New or updated model state from BLE layer */
187
188 /* Message to be sent to parent element */
190
191 /* Flag to indicate if element message has been prepared */
193
194 meshx_err_t plat_model_create (MESHX_MODEL* p_plat_model_ptr = nullptr) override;
195 meshx_err_t plat_model_delete (void) override;
196
197public:
200 meshx_err_t prepare_element_msg (meshx_ptr_t *msg_ptr, size_t *msg_size) override;
201
202 // Virtual method implementation from meshXModelIF
204
207 meshx_ptr_t parent_element_state = nullptr,
208 uint16_t model_func_id = 0
209 );
211};
212#endif /* CONFIG_ENABLE_GEN_MANU_PROP_SERVER */
213
214#if CONFIG_ENABLE_GEN_USER_PROPERTY_SERVER
215/**
216 * @class meshXGenericUserPropertyServerModel
217 * @brief A template class for creating Generic User Property Server models.
218 *
219 * This class is derived from meshXServerModel and provides a convenient interface for
220 * creating Generic User Property Server models. It handles the Generic User Property state change
221 * notifications from the MeshX stack and publishes the state change event to the
222 * element layer.
223 */
225class meshXGenericUserPropertyServerModel : public meshXServerModel<meshXBaseGenericServerModel, meshx_gen_property_send_params_t>
226{
227private:
228 /* New or updated model state from BLE layer */
230
231 /* Message to be sent to parent element */
233
234 /* Flag to indicate if element message has been prepared */
236
237 meshx_err_t plat_model_create (MESHX_MODEL* p_plat_model_ptr = nullptr) override;
238 meshx_err_t plat_model_delete (void) override;
239
240public:
243 meshx_err_t prepare_element_msg (meshx_ptr_t *msg_ptr, size_t *msg_size) override;
244
245 // Virtual method implementation from meshXModelIF
247
250 meshx_ptr_t parent_element_state = nullptr,
251 uint16_t model_func_id = 0
252 );
254};
255#endif /* CONFIG_ENABLE_GEN_USER_PROPERTY_SERVER */
256
257#if CONFIG_ENABLE_GEN_CLIENT_PROPERTY_SERVER
258/**
259 * @class meshXGenericClientPropertyServerModel
260 * @brief A template class for creating Generic Client Property Server models.
261 *
262 * This class is derived from meshXServerModel and provides a convenient interface for
263 * creating Generic Client Property Server models. It handles the Generic Client Property state change
264 * notifications from the MeshX stack and publishes the state change event to the
265 * element layer.
266 */
268class meshXGenericClientPropertyServerModel : public meshXServerModel<meshXBaseGenericServerModel, meshx_gen_property_send_params_t>
269{
270private:
271 /* Message to be sent to parent element */
273
274 /* Flag to indicate if element message has been prepared */
276
277 meshx_err_t plat_model_create (MESHX_MODEL* p_plat_model_ptr = nullptr) override;
278 meshx_err_t plat_model_delete (void) override;
279
280public:
283 meshx_err_t prepare_element_msg (meshx_ptr_t *msg_ptr, size_t *msg_size) override;
284
287 meshx_ptr_t parent_element_state = nullptr,
288 uint16_t model_func_id = 0
289 );
291};
292#endif /* CONFIG_ENABLE_GEN_CLIENT_PROPERTY_SERVER */
293
294#endif /* _MESHX_MODEL_PROPERTY_HPP_ */
Interface class for MeshX elements.
Definition meshx_fwd_decl.hpp:82
meshx_gen_property_model_state_t model_state
Definition meshx_model_property.hpp:143
meshx_err_t plat_model_delete(void) override
Deletes the Generic Admin Property Server model and its associated resources.
Definition meshx_model_property.cpp:505
meshx_err_t plat_model_create(MESHX_MODEL *p_plat_model_ptr=nullptr) override
Creates and initializes a server model instance for Generic Admin Property Server.
Definition meshx_model_property.cpp:472
bool element_msg_prepared
Definition meshx_model_property.hpp:149
meshx_property_srv_el_msg_t element_msg
Definition meshx_model_property.hpp:146
meshx_err_t model_send(meshx_gen_property_send_params_t *params) override
Send a packet to the MeshX stack based on the given parameters.
Definition meshx_model_property.cpp:306
meshXGenericAdminPropertyServerModel(meshXElementIF *parent_element=nullptr, meshx_ptr_t parent_element_state=nullptr, uint16_t model_func_id=0)
Constructor for Generic Admin Property Server Model.
Definition meshx_model_property.cpp:449
meshx_err_t model_from_ble_cb(dev_struct_t *, control_task_msg_evt_t, meshx_ptr_t) override
Callback function for handling BLE mesh events for Generic Admin Property Server Model.
Definition meshx_model_property.cpp:339
meshx_err_t prepare_element_msg(meshx_ptr_t *msg_ptr, size_t *msg_size) override
Prepare message for element notification.
Definition meshx_model_property.cpp:385
meshx_err_t element_state_change_handle(void) override
Handle state change request from element.
Definition meshx_model_property.cpp:417
meshx_err_t prepare_element_msg(meshx_ptr_t *msg_ptr, size_t *msg_size) override
Prepare message for element notification.
Definition meshx_model_property.cpp:1088
bool element_msg_prepared
Definition meshx_model_property.hpp:275
meshx_err_t model_from_ble_cb(dev_struct_t *, control_task_msg_evt_t, meshx_ptr_t) override
Callback function for handling BLE mesh events for Generic Client Property Server Model.
Definition meshx_model_property.cpp:1042
meshx_property_srv_el_msg_t element_msg
Definition meshx_model_property.hpp:272
meshx_err_t plat_model_create(MESHX_MODEL *p_plat_model_ptr=nullptr) override
Creates and initializes a server model instance for Generic Client Property Server.
Definition meshx_model_property.cpp:1111
meshXGenericClientPropertyServerModel(meshXElementIF *parent_element=nullptr, meshx_ptr_t parent_element_state=nullptr, uint16_t model_func_id=0)
Constructor for Generic Client Property Server Model.
Definition meshx_model_property.cpp:1024
meshx_err_t model_send(meshx_gen_property_send_params_t *params) override
Send a packet to the MeshX stack based on the given parameters.
Definition meshx_model_property.cpp:997
meshx_err_t plat_model_delete(void) override
Deletes the Generic Client Property Server model.
Definition meshx_model_property.cpp:1137
meshx_err_t model_from_ble_cb(dev_struct_t *, control_task_msg_evt_t, meshx_ptr_t) override
Callback function for handling BLE mesh events for Generic Manufacturer Property Server Model.
Definition meshx_model_property.cpp:569
bool element_msg_prepared
Definition meshx_model_property.hpp:192
meshx_err_t plat_model_delete(void) override
Deletes the Generic Manufacturer Property Server model and its associated resources.
Definition meshx_model_property.cpp:735
meshx_err_t element_state_change_handle(void) override
Handle state change request from element.
Definition meshx_model_property.cpp:647
meshx_err_t plat_model_create(MESHX_MODEL *p_plat_model_ptr=nullptr) override
Creates and initializes a server model instance for Generic Manufacturer Property Server.
Definition meshx_model_property.cpp:702
meshx_property_srv_el_msg_t element_msg
Definition meshx_model_property.hpp:189
meshXGenericManufacturerPropertyServerModel(meshXElementIF *parent_element=nullptr, meshx_ptr_t parent_element_state=nullptr, uint16_t model_func_id=0)
Constructor for Generic Manufacturer Property Server Model.
Definition meshx_model_property.cpp:679
meshx_err_t prepare_element_msg(meshx_ptr_t *msg_ptr, size_t *msg_size) override
Prepare message for element notification.
Definition meshx_model_property.cpp:615
meshx_err_t model_send(meshx_gen_property_send_params_t *params) override
Send a packet to the MeshX stack based on the given parameters.
Definition meshx_model_property.cpp:537
meshx_gen_property_model_state_t model_state
Definition meshx_model_property.hpp:186
meshx_err_t prepare_element_msg(meshx_ptr_t *msg_ptr, size_t *msg_size) override
Prepare message for element notification.
Definition meshx_model_property.cpp:113
meshx_err_t model_send(meshx_gen_property_send_params_t *params) override
Send a packet to the MeshX stack based on the given parameters.
Definition meshx_model_property.cpp:209
meshx_property_cli_el_msg_t element_msg
Definition meshx_model_property.hpp:94
meshx_err_t model_from_ble_cb(dev_struct_t *, control_task_msg_evt_t, meshx_ptr_t) override
Creates a meshXGenericPropertyClientModel instance based on a BLE device.
Definition meshx_model_property.cpp:175
meshx_err_t element_state_change_handle(void) override
Handle state change request from element.
Definition meshx_model_property.cpp:140
meshXGenericPropertyClientModel(meshXElementIF *parent_element=nullptr, meshx_ptr_t parent_element_state=nullptr, uint16_t model_func_id=0)
A template class for creating Generic Property Client models.
Definition meshx_model_property.cpp:283
meshx_err_t meshx_state_change_notify(const meshx_gen_cli_cb_param_t *param, uint8_t status)
Handle Generic Property state change notifications from the MeshX stack.
Definition meshx_model_property.cpp:39
meshx_gen_property_model_state_t model_state
Definition meshx_model_property.hpp:91
bool element_msg_prepared
Definition meshx_model_property.hpp:235
meshXGenericUserPropertyServerModel(meshXElementIF *parent_element=nullptr, meshx_ptr_t parent_element_state=nullptr, uint16_t model_func_id=0)
Constructor for Generic User Property Server Model.
Definition meshx_model_property.cpp:909
meshx_err_t model_from_ble_cb(dev_struct_t *, control_task_msg_evt_t, meshx_ptr_t) override
Callback function for handling BLE mesh events for Generic User Property Server Model.
Definition meshx_model_property.cpp:799
meshx_err_t plat_model_delete(void) override
Deletes the Generic User Property Server model and its associated resources.
Definition meshx_model_property.cpp:965
meshx_err_t model_send(meshx_gen_property_send_params_t *params) override
Send a packet to the MeshX stack based on the given parameters.
Definition meshx_model_property.cpp:767
meshx_gen_property_model_state_t model_state
Definition meshx_model_property.hpp:229
meshx_property_srv_el_msg_t element_msg
Definition meshx_model_property.hpp:232
meshx_err_t element_state_change_handle(void) override
Handle state change request from element.
Definition meshx_model_property.cpp:877
meshx_err_t plat_model_create(MESHX_MODEL *p_plat_model_ptr=nullptr) override
Creates and initializes a server model instance for Generic User Property Server.
Definition meshx_model_property.cpp:932
meshx_err_t prepare_element_msg(meshx_ptr_t *msg_ptr, size_t *msg_size) override
Prepare message for element notification.
Definition meshx_model_property.cpp:845
meshXElementIF * parent_element
Definition meshx_model_class.hpp:42
meshXClientModel(MESHX_MODEL *p_plat_model, uint32_t model_id, meshXElementIF *parent_element=nullptr, meshx_ptr_t parent_element_state=nullptr, uint16_t model_func_id=0)
Definition meshx_model_class.cpp:216
meshXServerModel(MESHX_MODEL *p_plat_model, uint32_t model_id, meshXElementIF *parent_element=nullptr, meshx_ptr_t parent_element_state=nullptr, uint16_t model_func_id=0)
Definition meshx_model_class.cpp:200
Header file for MeshX Generic Client and Server model declarations.
struct meshx_model meshx_model_t
struct meshx_ctx meshx_ctx_t
Structure to hold context information for BLE Mesh operations.
void * meshx_ptr_t
Definition meshx_ble_mesh_cmn_def.h:636
struct meshx_gen_cli_cb_param meshx_gen_cli_cb_param_t
Callback parameters for Generic Client Model events. This structure is used to pass information about...
struct dev_struct dev_struct_t
Structure representing the device composition and elements.
uint32_t control_task_msg_evt_t
Type definition for control task message event.
Definition meshx_control_task.h:81
meshx_err_t
MeshX Error Codes.
Definition meshx_err.h:43
Template declarations for MeshX model wrapper classes.
struct meshx_cli_model_send_param_header meshx_cli_model_send_param_header_t
Definition meshx_model_class.hpp:417
struct meshx_srv_model_send_param_header meshx_srv_model_send_param_header_t
Definition meshx_model_class.hpp:354
struct meshx_gen_property_model_state meshx_gen_property_model_state_t
Definition meshx_model_property.hpp:50
#define MESHX_GEN_USER_PROPERTY_SERVER_MODEL_TEMPLATE_PROTO
Definition meshx_model_property.hpp:34
struct meshx_property_cli_el_msg meshx_property_cli_el_msg_t
Definition meshx_model_property.hpp:76
#define MESHX_GEN_PROPERTY_CLIENT_MODEL_TEMPLATE_PROTO
Definition meshx_model_property.hpp:25
#define MESHX_GEN_CLIENT_PROPERTY_SERVER_MODEL_TEMPLATE_PROTO
Definition meshx_model_property.hpp:37
struct meshx_property_srv_el_msg meshx_property_srv_el_msg_t
Definition meshx_model_property.hpp:127
struct meshx_gen_property_send_params meshx_gen_property_send_params_t
Definition meshx_model_property.hpp:62
#define MESHX_GEN_MANUFACTURER_PROPERTY_SERVER_MODEL_TEMPLATE_PROTO
Definition meshx_model_property.hpp:31
#define MESHX_GEN_ADMIN_PROPERTY_SERVER_MODEL_TEMPLATE_PROTO
Definition meshx_model_property.hpp:28
Structure to hold the Property model state.
Definition meshx_model_property.hpp:44
uint16_t property_id
Definition meshx_model_property.hpp:45
uint8_t access
Definition meshx_model_property.hpp:47
meshx_ptr_t property_value
Definition meshx_model_property.hpp:46
Structure to hold the parameters for sending a Generic Property message.
Definition meshx_model_property.hpp:56
meshx_gen_property_model_state_t state
Definition meshx_model_property.hpp:59
meshx_ctx_t * ctx
Definition meshx_model_property.hpp:58
meshx_model_t * model
Definition meshx_model_property.hpp:57
Structure to hold the Property Server to parent element message. The structure is used by the on_mode...
Definition meshx_model_property.hpp:71
meshx_gen_property_model_state_t state
Definition meshx_model_property.hpp:73
meshx_cli_model_send_param_header_t header
Definition meshx_model_property.hpp:72
Structure to hold the Property Server to parent element message. The structure is used by the on_mode...
Definition meshx_model_property.hpp:122
meshx_srv_model_send_param_header_t header
Definition meshx_model_property.hpp:123
meshx_gen_property_model_state_t state
Definition meshx_model_property.hpp:124