13#ifndef __MESHX_ELEMENT_CLASS__
14#define __MESHX_ELEMENT_CLASS__
21#define MESHX_ELEMENT_ADD_MODEL_TEMPLATE_PROTO template <typename meshXModelT, typename... ConstructorsArgs>
22#define MESHX_ELEMENT_ADD_MODEL_TEMPLATE_PARAMS <meshXModelT, typename... ConstructorsArgs>
316 bool has_model(uint16_t model_id)
const override;
meshXElementClient(uint16_t element_idx, uint8_t no_of_sig_models=0, uint8_t no_of_ven_models=0)
Definition meshx_element_class.hpp:352
meshXElementClient()=default
void set_element_idx(uint16_t idx)
Definition meshx_fwd_decl.hpp:98
uint16_t element_idx
Definition meshx_fwd_decl.hpp:84
meshXElementServer(uint16_t element_idx, uint8_t no_of_sig_models=0, uint8_t no_of_ven_models=0)
Definition meshx_element_class.hpp:339
meshXElementServer()=default
void set_element_type(meshxElementType_t type)
Definition meshx_element_class.hpp:66
meshx_err_t restore_nvs_context(void) override
Restore the element's context from NVS.
Definition meshx_element_class.cpp:365
size_t get_element_ctx_size(void) const override
Get the size of the element context structure.
Definition meshx_element_class.hpp:146
void on_baked(uint16_t index) override
Called when the composition is baked to update the element's index.
Definition meshx_element_class.hpp:318
size_t element_ctx_size
Definition meshx_element_class.hpp:48
MESHX_MODEL * get_ven_plat_model_array(void)
Get the platform model array for Vendor models.
Definition meshx_element_class.cpp:91
bool has_model(uint16_t model_id) const override
Check if the element contains a specific model by ID.
Definition meshx_element_class.cpp:384
static meshx_err_t static_prov_srv_cb(const dev_struct_t *pdev, control_task_msg_evt_t evt, const void *params)
Global static provisioning callback for Server elements.
Definition meshx_element_class.cpp:406
virtual uint8_t list_sig_models(void)
Lists and creates all required SIG models for the element.
Definition meshx_element_class.hpp:94
static meshx_err_t static_config_cb(const dev_struct_t *pdev, control_task_msg_evt_t evt, const meshx_config_srv_cb_param_t *params)
Global static configuration callback.
Definition meshx_element_class.cpp:442
void set_no_of_sig_models(uint8_t cnt)
Definition meshx_element_class.hpp:72
meshxElementType_t get_element_type(void) const final
Get the element type.
Definition meshx_element_class.hpp:67
std::vector< std::unique_ptr< meshXModelIF > > ven_models
Definition meshx_element_class.hpp:43
meshx_err_t on_model_cb(meshx_ptr_t param, size_t param_size) final
Handle model callback from child models.
Definition meshx_element_class.cpp:265
void set_element_variant(meshx_element_type_t variant)
Definition meshx_element_class.hpp:69
static void register_global_callbacks(void)
Register the global callbacks with the provisioning server.
Definition meshx_element_class.cpp:502
virtual uint8_t list_ven_models(void)
Lists and creates all required Vendor models for the element.
Definition meshx_element_class.hpp:106
uint8_t get_no_of_ven_models(void) const final
Get the number of Vendor models supported by the element.
Definition meshx_element_class.hpp:76
uint8_t get_sig_model_count(void) const
Get the number of SIG models currently added to the element.
Definition meshx_element_class.hpp:212
meshx_err_t ven_plat_model_array_allocate(void)
Allocate memory for Vendor model platform array.
Definition meshx_element_class.cpp:72
meshx_ptr_t element_ctx
Definition meshx_element_class.hpp:47
meshx_err_t reset(void) override
Reset the element.
Definition meshx_element_class.cpp:349
meshx_err_t add_ven_models(void)
Add multiple Vendor models to the element.
Definition meshx_element_class.cpp:191
std::vector< uint8_t > ven_model_array
Definition meshx_element_class.hpp:40
uint8_t no_of_sig_models
Definition meshx_element_class.hpp:36
MESHX_MODEL * get_sig_plat_model_array(void)
Get the platform model array for SIG models.
Definition meshx_element_class.cpp:84
std::vector< std::unique_ptr< meshXModelIF > > & get_sig_models(void) final
Get the SIG models vector.
Definition meshx_element_class.hpp:78
void register_element_ctx(meshx_ptr_t ctx, size_t ctx_size)
Register element context structure.
Definition meshx_element_class.hpp:132
virtual meshx_err_t element_state_change_notify(meshx_ptr_t param, size_t param_size)
Notify element about state change.
Definition meshx_element_class.hpp:118
std::vector< uint8_t > & get_sig_model_array(void)
Get the SIG model array.
Definition meshx_element_class.hpp:172
std::vector< uint8_t > sig_model_array
Definition meshx_element_class.hpp:39
bool is_initialized(void) const override
Check if the element is initialized.
Definition meshx_element_class.cpp:357
uint8_t get_ven_model_count(void) const
Get the number of Vendor models currently added to the element.
Definition meshx_element_class.hpp:218
meshXElement(void)
Default constructor for meshXElement.
std::vector< uint8_t > & get_ven_model_array(void)
Get the Vendor model array.
Definition meshx_element_class.hpp:178
std::vector< std::unique_ptr< meshXModelIF > > & get_ven_models(void) final
Get the Vendor models vector.
Definition meshx_element_class.hpp:79
void set_no_of_ven_models(uint8_t cnt)
Definition meshx_element_class.hpp:75
meshx_ptr_t get_element_ctx(void) const override
Get the element context structure.
Definition meshx_element_class.hpp:141
meshx_err_t add_models(void)
Add both SIG and Vendor models to the element.
Definition meshx_element_class.cpp:234
uint8_t no_of_ven_models
Definition meshx_element_class.hpp:37
uint8_t get_no_of_sig_models(void) const final
Get the number of SIG models supported by the element.
Definition meshx_element_class.hpp:73
const char * get_element_name(void) const override
Get the name of the element.
Definition meshx_element_class.cpp:98
meshx_element_type_t element_variant
Definition meshx_element_class.hpp:45
meshxElementType_t element_type
Definition meshx_element_class.hpp:44
~meshXElement() override
Definition meshx_element_class.cpp:377
static meshx_err_t static_prov_cli_cb(const dev_struct_t *pdev, control_task_msg_evt_t evt, const void *params)
Global static provisioning callback for Client elements.
Definition meshx_element_class.cpp:424
meshx_element_type_t get_element_variant(void) const final
Get the element variant.
Definition meshx_element_class.hpp:70
meshx_err_t add_sig_model(ConstructorsArgs &&... args)
Add a SIG model to the element.
Definition meshx_element_class.cpp:109
meshx_err_t add_sig_models(void)
Add multiple SIG models to the element.
Definition meshx_element_class.cpp:128
std::vector< std::unique_ptr< meshXModelIF > > sig_models
Definition meshx_element_class.hpp:42
meshx_err_t add_ven_model(ConstructorsArgs &&... args)
Add a Vendor model to the element.
Definition meshx_element_class.cpp:172
meshx_err_t sig_plat_model_array_allocate(void)
Allocate memory for SIG model platform array.
Definition meshx_element_class.cpp:60
meshx_err_t initialize(void) override
Initialize the element.
Definition meshx_element_class.cpp:314
void * meshx_ptr_t
Definition meshx_ble_mesh_cmn_def.h:636
struct meshx_config_srv_cb_param meshx_config_srv_cb_param_t
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
#define MESHX_ELEMENT_ADD_MODEL_TEMPLATE_PROTO
Definition meshx_element_class.hpp:21
meshx_err_t
MeshX Error Codes.
Definition meshx_err.h:43
Forward declaration of MeshX classes.
#define MESHX_SERVER_ELEMENT_TEMPLATE_PROTO
Definition meshx_fwd_decl.hpp:38
#define MESHX_ELEMENT_TEMPLATE_PROTO
Definition meshx_fwd_decl.hpp:36
@ MESHX_ELEMENT_TYPE_CLIENT
Definition meshx_fwd_decl.hpp:62
@ MESHX_ELEMENT_TYPE_SERVER
Definition meshx_fwd_decl.hpp:61
#define MESHX_CLIENT_ELEMENT_TEMPLATE_PROTO
Definition meshx_fwd_decl.hpp:40
enum meshxElementType meshxElementType_t
Definition meshx_fwd_decl.hpp:71
Template declarations for MeshX model wrapper classes.
**This function is called by the parent element when a state change request *is received It validates the request and returns a result to the element not the model layer **return * MESHX_SUCCESS
Definition meshx_model_level.cpp:385