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
meshXSensorServerModel Class Reference

A template class for creating Sensor Server models. More...

#include <meshx_model_sensor.hpp>

Inheritance diagram for meshXSensorServerModel:
meshXServerModel< meshXBaseSensorServerModel, meshx_sensor_server_send_params_t > meshXModel< meshXBaseSensorServerModel, meshx_sensor_server_send_params_t > meshXModelIF

Public Member Functions

meshx_err_t model_send (meshx_sensor_server_send_params_t *params) override
 Send a packet to the MeshX stack based on the given parameters.
meshx_err_t model_from_ble_cb (dev_struct_t *, control_task_msg_evt_t, meshx_ptr_t) override
 Callback for the Sensor Server model.
meshx_err_t request_status (void)
 meshXSensorServerModel (meshXElementIF *parent_element=nullptr, meshx_ptr_t parent_element_state=nullptr, uint16_t model_func_id=0)
 Constructor for Sensor Server Model.
 ~meshXSensorServerModel () override=default
meshx_sensor_server_state_change_tget_state_ptr ()
Public Member Functions inherited from meshXServerModel< meshXBaseSensorServerModel, meshx_sensor_server_send_params_t >
 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)
 Construct a new Server Model.
Public Member Functions inherited from meshXModel< meshXBaseSensorServerModel, meshx_sensor_server_send_params_t >
void set_plat_model (MESHX_MODEL *p_model) override
 Set the platform-specific model instance.
meshx_err_t model_handle_from_ble_cb (dev_struct_t *p_dev, evt_model_id_t evt_model_id, meshx_ptr_t params)
 Handle upstream BLE Mesh events.
void on_baked (void) override
 Called when the model's parent element is baked.
virtual ~meshXModel ()
 Destructor for meshXModel.
meshx_err_t send_to_parent_element (meshx_ptr_t msg_ptr, size_t msg_size)
 Send message to parent element.
uint16_t get_model_func_id (void) const
 Get the model function identifier.
void set_model_func_id (uint16_t func_id)
 Set the model function identifier.
uint16_t get_model_id (void) const override
 Get the model identifier.
bool is_initialized (void) const override
 Check if the model is successfully initialized.
void set_model_id (uint16_t id)
 Set the model identifier.
meshx_err_t get_init_status (void) const
 Get the model initialization status.
meshXBaseSensorServerModelget_base_model (void) const
 Get the base model instance.
 meshXModel (MESHX_MODEL *p_plat_model, uint32_t model_id, meshXElementIF *parent_element=nullptr, uint16_t model_func_id=0)
 Constructs a new meshXModel instance.
Public Member Functions inherited from meshXModelIF
 meshXModelIF ()
 meshXModelIF (MESHX_MODEL *p_plat_model)
virtual ~meshXModelIF ()=default
MESHX_MODEL * get_plat_model (void) const
 Get the platform-specific model instance.
meshx_ptr_t get_pub_struct (void) const
 Get the publication structures.
meshx_ptr_t get_gen_struct (void) const
 Get the generic structures.
void set_pub_struct (meshx_ptr_t pub)
 Set the publication structures.
void set_gen_struct (meshx_ptr_t gen)
 Set the generic structures.
void set_parent_element (meshXElementIF *parent)
 Set the parent element for this model.
meshXElementIFget_parent_element (void) const
 Get the parent element of this model.
void set_parent_element_state (meshx_ptr_t state)
 Set the parent element state pointer.
meshx_ptr_t get_parent_element_state (void) const
 Get the parent element state pointer.

Private Member Functions

meshx_err_t plat_model_create (MESHX_MODEL *p_plat_model_ptr=nullptr) override
 Create platform-specific sensor model instance.CONFIG_ENABLE_SENSOR_SERVER.
meshx_err_t plat_model_delete (void) override
 Delete platform-specific sensor model instance.
meshx_err_t element_state_change_handle (void) override
 Handle state change request from element.
meshx_err_t prepare_element_msg (meshx_ptr_t *msg_ptr, size_t *msg_size) override
 Prepare element message for sensor server.

Private Attributes

meshx_sensor_server_state_change_t model_state
meshx_sensor_srv_el_msg_t element_msg

Additional Inherited Members

Protected Member Functions inherited from meshXServerModel< meshXBaseSensorServerModel, meshx_sensor_server_send_params_t >
void update_element_state_change_header (meshx_err_t element_state_change, meshx_ptr_t msg_ptr) override
 Update element_state_change field in server message header.

Detailed Description

A template class for creating Sensor Server models.

Constructor & Destructor Documentation

◆ meshXSensorServerModel()

meshXSensorServerModel::meshXSensorServerModel ( meshXElementIF * parent_element = nullptr,
meshx_ptr_t parent_element_state = nullptr,
uint16_t model_func_id = 0 )

Constructor for Sensor Server Model.

Parameters
[in]parent_elementPointer to the parent element (meshXElementIF)
[in]parent_element_statePointer to the parent element's state structure.
[in]model_func_idFunctional ID for the model instance.
159{
160}
meshXElementIF * parent_element
Definition meshx_model_class.hpp:42
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
#define MESHX_MODEL_ID_SENSOR_SRV
Definition meshx_ble_mesh_cmn_def.h:92

◆ ~meshXSensorServerModel()

meshXSensorServerModel::~meshXSensorServerModel ( )
overridedefault

Member Function Documentation

◆ element_state_change_handle()

meshx_err_t meshXSensorServerModel::element_state_change_handle ( void )
overrideprivatevirtual

Handle state change request from element.

Implements meshXModelIF.

139{
140 // For sensor server, state change from element might mean "new data available to publish"
141 return MESHX_SUCCESS;
142}
**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

◆ get_state_ptr()

meshx_sensor_server_state_change_t * meshXSensorServerModel::get_state_ptr ( )
inline
64{ return &model_state; }
meshx_sensor_server_state_change_t model_state
Definition meshx_model_sensor.hpp:45

◆ model_from_ble_cb()

meshx_err_t meshXSensorServerModel::model_from_ble_cb ( dev_struct_t * p_dev,
control_task_msg_evt_t evt,
meshx_ptr_t p_params )
overridevirtual

Callback for the Sensor Server model.

Implements meshXModel< meshXBaseSensorServerModel, meshx_sensor_server_send_params_t >.

83{
84 if(!p_params || !p_dev)
85 {
86 MESHX_LOGE(MODULE_ID_MODEL_SERVER, "Invalid parameters");
87 return MESHX_INVALID_ARG;
88 }
91 {
92 /* Callback triggered not for this model */
93 return MESHX_SUCCESS;
94 }
95
96 auto *param = static_cast<meshx_sensor_server_cb_param_t *>(p_params);
97
98 MESHX_LOGD(MODULE_ID_MODEL_SERVER, "op|src|dst:%04" PRIx32 "|%04x|%04x",
99 param->ctx.opcode, param->ctx.src_addr, param->ctx.dst_addr);
100
101 /* Update element message */
102 element_msg = {
103 .header = {
104 .model = param->model,
105 .element_state_change = MESHX_SUCCESS,
106 },
107 .state = param->state
108 };
109
110 if (this->get_parent_element())
111 {
112 return this->get_parent_element()->on_model_cb(&element_msg, sizeof(element_msg));
113 }
114
115 return MESHX_SUCCESS;
116}
virtual meshx_err_t on_model_cb(meshx_ptr_t param, size_t param_size)=0
Handle model callback from child models.
meshXElementIF * get_parent_element(void) const
Get the parent element of this model.
Definition meshx_model_class.hpp:143
meshx_sensor_srv_el_msg_t element_msg
Definition meshx_model_sensor.hpp:67
CONTROL_TASK_MSG_EVT_TO_BLE_SENSOR_SRV
Definition meshx_control_task.h:116
@ MESHX_INVALID_ARG
Definition meshx_err.h:46
#define MESHX_LOGE(module_id, format,...)
Definition meshx_log.h:114
#define MESHX_LOGD(module_id, format,...)
Definition meshx_log.h:132
@ MODULE_ID_MODEL_SERVER
Definition module_id.h:34

◆ model_send()

meshx_err_t meshXSensorServerModel::model_send ( meshx_sensor_server_send_params_t * params)
overridevirtual

Send a packet to the MeshX stack based on the given parameters.

Implements meshXModel< meshXBaseSensorServerModel, meshx_sensor_server_send_params_t >.

67{
68 if (!params || !params->model || !params->ctx)
69 {
70 return MESHX_INVALID_ARG;
71 }
72 params->ctx->opcode = MESHX_MODEL_OP_SENSOR_STATUS;
73
74 return this->get_base_model()->plat_send_msg(params);
75}
meshx_err_t plat_send_msg(meshx_sensor_server_send_params_t *params) override
Sends a status message for the Sensor Server model.
Definition meshx_base_model_sensor.cpp:37
meshXBaseSensorServerModel * get_base_model(void) const
Definition meshx_model_class.hpp:315
#define MESHX_MODEL_OP_SENSOR_STATUS
Definition meshx_ble_mesh_cmn_def.h:336

◆ plat_model_create()

meshx_err_t meshXSensorServerModel::plat_model_create ( MESHX_MODEL * p_plat_model_ptr = nullptr)
overrideprivatevirtual

Create platform-specific sensor model instance.CONFIG_ENABLE_SENSOR_SERVER.

Implements meshXModelIF.

20{
21 meshx_ptr_t p_pub = nullptr;
22 meshx_ptr_t p_srv = nullptr;
23
24 if (p_plat_model_ptr) {
25 this->set_plat_model(p_plat_model_ptr);
26 }
27
29 if (err)
30 {
31 MESHX_LOGE(MODULE_ID_MODEL_SERVER, "Failed to create Sensor Server Model");
32 return err;
33 }
34
35 this->set_pub_struct(p_pub);
36 return MESHX_SUCCESS;
37}
MESHX_MODEL * get_plat_model(void) const
Get the platform-specific model instance.
Definition meshx_model_class.hpp:107
void set_pub_struct(meshx_ptr_t pub)
Set the publication structures.
Definition meshx_model_class.hpp:125
void set_plat_model(MESHX_MODEL *p_model) override
Definition meshx_model_class.cpp:92
struct meshx_model meshx_model_t
void * meshx_ptr_t
Definition meshx_ble_mesh_cmn_def.h:636
meshx_err_t meshx_plat_sensor_srv_create(meshx_ptr_t p_model, meshx_ptr_t *p_pub, meshx_ptr_t *p_sensor_srv)
Create a Sensor Server instance.
meshx_err_t
MeshX Error Codes.
Definition meshx_err.h:43

◆ plat_model_delete()

meshx_err_t meshXSensorServerModel::plat_model_delete ( void )
overrideprivatevirtual

Delete platform-specific sensor model instance.

Implements meshXModelIF.

45{
46 meshx_ptr_t p_pub = this->get_pub_struct();
47
49 if (err)
50 {
51 MESHX_LOGE(MODULE_ID_MODEL_SERVER, "Failed to delete Sensor Server Model");
52 }
53 else
54 {
55 this->set_pub_struct(nullptr);
56 }
57
58 return err;
59}
meshx_ptr_t get_pub_struct(void) const
Get the publication structures.
Definition meshx_model_class.hpp:113
meshx_err_t meshx_plat_sensor_srv_delete(meshx_ptr_t *p_pub)
Delete a Sensor Server instance.

◆ prepare_element_msg()

meshx_err_t meshXSensorServerModel::prepare_element_msg ( meshx_ptr_t * msg_ptr,
size_t * msg_size )
overrideprivatevirtual

Prepare element message for sensor server.

Implements meshXModelIF.

124{
125 if (!msg_ptr || !msg_size) return MESHX_INVALID_ARG;
126
127 *msg_ptr = &element_msg;
128 *msg_size = sizeof(element_msg);
129
130 return MESHX_SUCCESS;
131}

◆ request_status()

meshx_err_t meshXSensorServerModel::request_status ( void )
165{
166 auto *el_state = static_cast<meshx_sensor_srv_status_t*>(this->get_parent_element_state());
167 auto *el = this->get_parent_element();
168 if (!el || !el_state) return MESHX_INVALID_STATE;
169
170 auto *common_ctx = static_cast<meshx_element_common_ctx_t*>(el->get_element_ctx());
171 if (!common_ctx) return MESHX_INVALID_STATE;
172
173 meshx_model_t model_ref = {
174 .el_id = el->get_element_idx(),
175 .model_id = (uint16_t)this->get_model_id(),
176 .pub_addr = common_ctx->pub_addr,
177 .p_model = (MESHX_MODEL*)this->get_plat_model()
178 };
179
180 meshx_ctx_t ctx = {
181 .app_idx = common_ctx->app_id,
182 .net_idx = meshx_get_net_key_id(),
184 .src_addr = 0,
185 .dst_addr = common_ctx->pub_addr,
186 .p_ctx = nullptr
187 };
188
190 .model = &model_ref,
191 .ctx = &ctx,
192 .state = {
193 .sensor_status = *el_state
194 }
195 };
196
197 return this->model_send(&sp);
198}
meshx_ptr_t get_parent_element_state(void) const
Get the parent element state pointer.
Definition meshx_model_class.hpp:154
uint16_t get_model_id(void) const override
Definition meshx_model_class.hpp:292
meshx_err_t model_send(meshx_sensor_server_send_params_t *params) override
Send a packet to the MeshX stack based on the given parameters.
Definition meshx_model_sensor.cpp:66
uint16_t meshx_get_net_key_id(void)
Get the network key identifier.
Definition meshx.c:316
struct meshx_sensor_server_send_params { meshx_model_t *model; meshx_ctx_t *ctx; meshx_sensor_server_state_change_t state;} meshx_sensor_server_send_params_t
Definition meshx_base_model_sensor.hpp:24
struct meshx_ctx meshx_ctx_t
Structure to hold context information for BLE Mesh operations.
@ MESHX_INVALID_STATE
Definition meshx_err.h:49

Field Documentation

◆ element_msg

meshx_sensor_srv_el_msg_t meshXSensorServerModel::element_msg
private

◆ model_state

meshx_sensor_server_state_change_t meshXSensorServerModel::model_state
private

The documentation for this class was generated from the following files: