MeshX 0.3
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_onoff_server.c
Go to the documentation of this file.
1
12#include "meshx_onoff_server.h"
13
14#if CONFIG_ENABLE_GEN_ONOFF_SERVER
28{
29 if (!param)
30 return MESHX_INVALID_ARG;
31
32 meshx_on_off_srv_el_msg_t srv_onoff_param = {
33 .model = param->model,
34 .on_off_state = param->state_change.onoff_set.onoff};
35
37 {
41 &srv_onoff_param,
42 sizeof(meshx_on_off_srv_el_msg_t));
43 return err ? err : MESHX_SUCCESS;
44 }
46}
47
65{
66 MESHX_UNUSED(pdev);
67 MESHX_LOGD(MODULE_ID_MODEL_SERVER, "op|src|dst:%04" PRIx32 "|%04x|%04x",
68 param->ctx.opcode, param->ctx.src_addr, param->ctx.dst_addr);
69 if (model_id != MESHX_MODEL_ID_GEN_ONOFF_SRV)
70 return MESHX_INVALID_ARG;
71
72 bool send_reply = (param->ctx.opcode != MESHX_MODEL_OP_GEN_ONOFF_SET_UNACK);
73 switch (param->ctx.opcode)
74 {
76 break;
80 break;
81 default:
82 break;
83 }
84 if (send_reply
85 /* This is meant to notify the respective publish client */
86 || param->ctx.src_addr != param->model.pub_addr)
87 {
88 /* Here the message was received from unregistered source and mention the state to the respective client */
89 MESHX_LOGD(MODULE_ID_MODEL_SERVER, "PUB: src|pub %x|%x", param->ctx.src_addr, param->model.pub_addr);
91 param->ctx.dst_addr = param->model.pub_addr;
92
95 param);
96 }
97 return MESHX_SUCCESS;
98}
99
116meshx_err_t meshx_gen_on_off_srv_status_send(
117 meshx_model_t *model,
118 meshx_ctx_t *ctx,
119 uint8_t on_off_state
120)
121{
122 if (!model || !ctx)
123 {
124 return MESHX_INVALID_ARG;
125 }
127 meshx_gen_srv_state_change_t state_change = {
128 .onoff_set = {
129 .onoff = on_off_state
130 }
131 };
133 model,
134 ctx,
135 state_change,
137 );
138}
148meshx_err_t meshx_on_off_server_init(void)
149{
151#if CONFIG_ENABLE_SERVER_COMMON
152 err = meshx_gen_srv_init();
153 if (err)
154 {
155 MESHX_LOGE(MODULE_ID_MODEL_SERVER, "Failed to initialize meshx server");
156 }
157#endif /* CONFIG_ENABLE_SERVER_COMMON */
161 );
162 if (err)
163 {
164 MESHX_LOGE(MODULE_ID_MODEL_SERVER, "Failed to initialize meshx_gen_srv_reg_cb (Err: %d)", err);
165 }
166
167 return err;
168}
169
186meshx_err_t meshx_on_off_server_create(meshx_onoff_server_model_t **p_model, void *p_sig_model)
187{
188 if (!p_model || !p_sig_model)
189 {
190 return MESHX_INVALID_ARG;
191 }
192
193 *p_model = (meshx_onoff_server_model_t *)MESHX_CALOC(1, sizeof(meshx_onoff_server_model_t));
194 if (!*p_model)
195 {
196 return MESHX_NO_MEM;
197 }
198
200 p_sig_model,
201 &((*p_model)->meshx_pub),
202 &((*p_model)->meshx_gen));
203}
204
217meshx_err_t meshx_on_off_server_delete(meshx_onoff_server_model_t **p_model)
218{
219 if (p_model == NULL || *p_model == NULL)
220 {
221 return MESHX_INVALID_ARG;
222 }
223
225 &((*p_model)->meshx_pub),
226 &((*p_model)->meshx_gen)
227 );
228
229 MESHX_FREE(*p_model);
230 *p_model = NULL;
231
232 return MESHX_SUCCESS;
233}
234
249meshx_err_t meshx_gen_on_off_srv_state_restore(meshx_ptr_t p_model, meshx_on_off_srv_el_state_t onoff_state)
250{
251 if(!p_model)
252 return MESHX_INVALID_STATE;
253
254 return meshx_plat_gen_on_off_srv_restore(p_model, onoff_state.on_off);
255}
256
276meshx_err_t meshx_gen_on_off_srv_send_pack_create(
277 meshx_ptr_t p_model,
278 uint16_t element_id,
279 uint8_t key_id,
280 uint8_t app_id,
281 uint16_t addr,
282 uint8_t state,
283 meshx_gen_srv_cb_param_t *p_send_pack
284)
285{
286 if (!p_model || !p_send_pack)
287 {
288 return MESHX_INVALID_ARG;
289 }
290
291 memset(p_send_pack, 0, sizeof(meshx_gen_srv_cb_param_t));
292
293 p_send_pack->ctx.net_idx = key_id;
294 p_send_pack->ctx.app_idx = app_id;
295 p_send_pack->ctx.dst_addr = addr;
297 p_send_pack->model.el_id = element_id;
298 p_send_pack->model.p_model = p_model;
299
300 p_send_pack->state_change.onoff_set.onoff = state;
301
302 return MESHX_SUCCESS;
303}
304
305#endif /* CONFIG_ENABLE_GEN_ONOFF_SERVER */
meshx_err_t meshx_is_group_subscribed(meshx_model_t *p_model, uint16_t addr)
Checks if a model is subscribed to a specific group address.
struct meshx_model meshx_model_t
struct meshx_ctx meshx_ctx_t
Structure to hold context information for BLE Mesh operations.
#define MESHX_ADDR_IS_GROUP(_addr)
void * meshx_ptr_t
#define MESHX_MODEL_OP_GEN_ONOFF_STATUS
#define MESHX_MODEL_OP_GEN_ONOFF_SET_UNACK
#define MESHX_MODEL_OP_GEN_ONOFF_GET
#define MESHX_MODEL_OP_GEN_ONOFF_SET
#define MESHX_MODEL_ID_GEN_ONOFF_SRV
#define MESHX_ADDR_IS_UNICAST(_addr)
#define MESHX_ADDR_BROADCAST(_addr)
meshx_err_t meshx_plat_gen_srv_delete(void **p_pub, void **p_srv)
Deletes the Generic OnOff Server model and its associated resources.
meshx_err_t meshx_plat_on_off_gen_srv_create(void *p_model, void **p_pub, void **p_onoff_srv)
Creates a Generic OnOff Server model and its publication context.
control_task_msg_handle_t meshx_server_cb
meshx_err_t meshx_plat_gen_on_off_srv_restore(void *p_model, uint8_t state)
Restores the state of the Generic OnOff Server model.
struct meshx_gen_srv_cb_param meshx_gen_srv_cb_param_t
struct dev_struct dev_struct_t
Structure representing the device composition and elements.
CONTROL_TASK_MSG_EVT_TO_BLE_SET_ON_OFF_SRV
uint32_t control_task_msg_evt_t
Type definition for control task message event.
CONTROL_TASK_MSG_EVT_EL_STATE_CH_SET_ON_OFF
@ CONTROL_TASK_MSG_CODE_EL_STATE_CH
meshx_err_t control_task_msg_publish(control_task_msg_code_t msg_code, control_task_msg_evt_t msg_evt, const void *msg_evt_params, size_t sizeof_msg_evt_params)
Publish a control task message.
#define MESHX_CALOC
Definition meshx_err.h:28
#define MESHX_UNUSED(x)
Definition meshx_err.h:15
meshx_err_t
MeshX Error Codes.
Definition meshx_err.h:39
@ MESHX_SUCCESS
Definition meshx_err.h:40
@ MESHX_INVALID_ARG
Definition meshx_err.h:42
@ MESHX_NOT_SUPPORTED
Definition meshx_err.h:47
@ MESHX_INVALID_STATE
Definition meshx_err.h:45
@ MESHX_NO_MEM
Definition meshx_err.h:44
#define MESHX_FREE
Definition meshx_err.h:32
static meshx_err_t meshx_handle_gen_onoff_msg(dev_struct_t *pdev, control_task_msg_evt_t model_id, meshx_gen_cli_cb_param_t *param)
Handle the Generic OnOff Client messages.
meshx_err_t meshx_gen_srv_send_msg_to_ble(control_task_msg_evt_to_ble_t evt, const meshx_gen_srv_cb_param_t *params)
Sends a message to the BLE subsystem via the control task.
meshx_err_t meshx_gen_srv_reg_cb(uint32_t model_id, meshx_server_cb cb)
Registers a callback function for a specific generic server model.
meshx_err_t meshx_gen_srv_init(void)
Initialize the meshxuction generic server.
meshx_err_t meshx_gen_srv_status_send(meshx_model_t *p_model, meshx_ctx_t *p_ctx, meshx_gen_srv_state_change_t state_change, size_t data_len)
Sends a status message for the Generic Server model.
static meshx_err_t meshx_state_change_notify(meshx_lighting_server_cb_param_t *param)
Perform hardware change for the light control server model.
#define MESHX_LOGE(module_id, format,...)
Definition meshx_log.h:73
#define MESHX_LOGD(module_id, format,...)
Definition meshx_log.h:113
Header file for the On/Off Server model in the BLE Mesh Node application.
@ MODULE_ID_MODEL_SERVER
Definition module_id.h:30
uint16_t src_addr
uint16_t dst_addr
meshx_gen_srv_state_change_t state_change
meshx_ptr_t p_model
meshx_state_change_gen_onoff_set_t onoff_set