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_cwww_server.c
Go to the documentation of this file.
1
12
14#include <meshx_nvs.h>
15#include <meshx_api.h>
16
17#if CONFIG_LIGHT_CWWW_SRV_COUNT > 0
18
19#if CONFIG_ENABLE_CONFIG_SERVER
20#include "meshx_config_server.h"
21
25#define CONFIG_SERVER_CB_MASK \
26 CONTROL_TASK_MSG_EVT_PUB_ADD \
27 | CONTROL_TASK_MSG_EVT_SUB_ADD | CONTROL_TASK_MSG_EVT_APP_KEY_BIND
28#endif /* CONFIG_ENABLE_CONFIG_SERVER */
29
30#define CONTROL_TASK_EVT_MASK \
31 CONTROL_TASK_MSG_EVT_EL_STATE_CH_SET_ON_OFF \
32 | CONTROL_TASK_MSG_EVT_EL_STATE_CH_SET_CTL
33
34#define CONTROL_TASK_MSG_EVT_TO_BLE_GEN_SRV_MASK \
35 CONTROL_TASK_MSG_EVT_TO_BLE_SET_ON_OFF_SRV \
36 | CONTROL_TASK_MSG_EVT_TO_BLE_SET_CTL_SRV
37
38#define GET_RELATIVE_EL_IDX(_element_id) _element_id - cwww_element_init_ctrl.element_id_start
39#define IS_EL_IN_RANGE(_element_id) (_element_id >= cwww_element_init_ctrl.element_id_start && _element_id < cwww_element_init_ctrl.element_id_end)
40#define CWWW_SRV_EL(_el_id) cwww_element_init_ctrl.el_list[_el_id]
41
42#define CWWW_TEMP_MIN 2700
43#define CWWW_TEMP_MAX 6500
44
46
47#if CONFIG_ENABLE_CONFIG_SERVER
59 const dev_struct_t *pdev,
61 const meshx_config_srv_cb_param_t *params)
62{
63 MESHX_UNUSED(pdev);
64 meshx_cwww_server_ctx_t *el_ctx = NULL;
65 size_t rel_el_id = 0;
66 uint16_t element_id = 0;
67 bool nvs_save = false;
68 uint16_t base_el_id = 0;
69 meshx_get_base_element_id(&base_el_id);
70
71 switch (evt)
72 {
74 element_id = params->state_change.mod_app_bind.element_addr - base_el_id;
75 if (!IS_EL_IN_RANGE(element_id))
76 break;
77 rel_el_id = GET_RELATIVE_EL_IDX(element_id);
78 el_ctx = CWWW_SRV_EL(rel_el_id).srv_ctx;
79 el_ctx->app_id = params->state_change.appkey_add.app_idx;
80 nvs_save = true;
81
82 break;
85 element_id = params->state_change.mod_pub_set.element_addr - base_el_id;
86 if (!IS_EL_IN_RANGE(element_id))
87 break;
88 rel_el_id = GET_RELATIVE_EL_IDX(element_id);
89 el_ctx = CWWW_SRV_EL(rel_el_id).srv_ctx;
92 el_ctx->app_id = params->state_change.mod_pub_set.app_idx;
93 nvs_save = true;
94 MESHX_LOGI(MODULE_ID_ELEMENT_SWITCH_RELAY_SERVER, "PUB_ADD: %d, %d, 0x%X, 0x%X", element_id, rel_el_id, el_ctx->pub_addr, el_ctx->app_id);
95 break;
96 default:
97 break;
98 }
99 if (nvs_save)
100 {
101 meshx_err_t err = meshx_nvs_element_ctx_set(element_id, el_ctx, sizeof(meshx_cwww_server_ctx_t));
102 if (err != MESHX_SUCCESS)
103 {
104 MESHX_LOGE(MODULE_ID_ELEMENT_SWITCH_RELAY_SERVER, "Failed to set cwww server element context: (%d)", err);
105 }
106 }
107 return MESHX_SUCCESS;
108}
109#endif /* CONFIG_ENABLE_CONFIG_SERVER */
110
127{
128 if (!n_max)
129 return MESHX_INVALID_ARG;
130
131 if (cwww_element_init_ctrl.el_list)
132 {
133 MESHX_LOGW(MODULE_ID_MODEL_SERVER, "CWWW element list already initialized");
134 return MESHX_INVALID_STATE;
135 }
137
138 cwww_element_init_ctrl.element_cnt = n_max;
139 cwww_element_init_ctrl.element_id_end = 0;
140 cwww_element_init_ctrl.element_id_start = 0;
141
142 cwww_element_init_ctrl.el_list =
144
145 if (!cwww_element_init_ctrl.el_list)
146 return MESHX_NO_MEM;
147
148 for (size_t i = 0; i < cwww_element_init_ctrl.element_cnt; i++)
149 {
150 CWWW_SRV_EL(i).srv_ctx =
152
153 if (!CWWW_SRV_EL(i).srv_ctx)
154 return MESHX_NO_MEM;
155
156 err = meshx_on_off_server_create(&CWWW_SRV_EL(i).onoff_srv_model,
157 &CWWW_SRV_EL(i).cwww_srv_model_list[CWWW_SIG_ONOFF_MODEL_ID]);
158 if (err)
159 {
160 MESHX_LOGE(MODULE_ID_ELEMENT_SWITCH_RELAY_SERVER, "Meshx On Off Server create failed (Err : 0x%x)", err);
161 return err;
162 }
163 err = meshx_light_ctl_server_create(&CWWW_SRV_EL(i).ctl_srv_model,
164 &CWWW_SRV_EL(i).cwww_srv_model_list[CWWW_SIG_L_CTL_MODEL_ID]);
165 if (err)
166 {
167 MESHX_LOGE(MODULE_ID_ELEMENT_SWITCH_RELAY_SERVER, "Meshx CTL Server create failed (Err : 0x%x)", err);
168 return err;
169 }
170 CWWW_SRV_EL(i).onoff_srv_model->meshx_sig = &CWWW_SRV_EL(i).cwww_srv_model_list[CWWW_SIG_ONOFF_MODEL_ID];
171 CWWW_SRV_EL(i).ctl_srv_model->meshx_sig = &CWWW_SRV_EL(i).cwww_srv_model_list[CWWW_SIG_L_CTL_MODEL_ID];
172 }
173 return MESHX_SUCCESS;
174}
175
188
190{
191 if (!cwww_element_init_ctrl.element_cnt || !cwww_element_init_ctrl.el_list)
192 return MESHX_INVALID_STATE;
193
195
196 for (size_t i = 0; i < cwww_element_init_ctrl.element_cnt; i++)
197 {
198 if (CWWW_SRV_EL(i).srv_ctx)
199 {
200 MESHX_FREE(CWWW_SRV_EL(i).srv_ctx);
201 CWWW_SRV_EL(i).srv_ctx = NULL;
202 }
203
204 err = meshx_on_off_server_delete(&CWWW_SRV_EL(i).onoff_srv_model);
205 if (err)
206 {
207 MESHX_LOGE(MODULE_ID_ELEMENT_SWITCH_RELAY_SERVER, "Meshx On Off Server create failed (Err : 0x%x)", err);
208 return err;
209 }
210
211 err = meshx_light_ctl_server_delete(&CWWW_SRV_EL(i).ctl_srv_model);
212 if (err)
213 {
214 MESHX_LOGE(MODULE_ID_ELEMENT_SWITCH_RELAY_SERVER, "Meshx CTL Server create failed (Err : 0x%x)", err);
215 return err;
216 }
217 }
218
220 cwww_element_init_ctrl.el_list = NULL;
221
222 return MESHX_SUCCESS;
223}
224
233{
235 if (err)
236 {
237 MESHX_LOGE(MODULE_ID_ELEMENT_SWITCH_RELAY_SERVER, "Failed to initialize cwww element structures: (%d)", err);
239 return err;
240 }
241 return err;
242}
243
252static meshx_err_t meshx_restore_model_states(uint16_t element_id)
253{
255 meshx_cwww_server_ctx_t const *el_ctx = CWWW_SRV_EL(element_id).srv_ctx;
256
257 for (size_t i = 0; i < CWWW_SRV_MODEL_SIG_CNT; i++)
258 {
260 {
261 err = meshx_gen_on_off_srv_state_restore(CWWW_SRV_EL(element_id).onoff_srv_model->meshx_sig,
262 el_ctx->prev_state);
263 if (err)
264 {
265 MESHX_LOGE(MODULE_ID_MODEL_SERVER, "Failed to restore on-off server state (err: 0x%x)", err);
266 return err;
267 }
268 }
269 else if (i == CWWW_SIG_L_CTL_MODEL_ID)
270 {
271 err = meshx_light_ctl_srv_state_restore(CWWW_SRV_EL(element_id).ctl_srv_model,
272 el_ctx->prev_ctl_state);
273 if (err)
274 {
275 MESHX_LOGE(MODULE_ID_MODEL_SERVER, "Failed to restore on-off server state (err: 0x%x)", err);
276 return err;
277 }
278 }
279 else
280 {
282 }
283 }
284 return err;
285}
286
296static meshx_err_t meshx_add_cwww_srv_model_to_element_list(dev_struct_t *pdev, uint16_t *start_idx, uint16_t n_max)
297{
298 if (!pdev)
299 return MESHX_INVALID_STATE;
300
301 if (!start_idx || (n_max + *start_idx) > CONFIG_MAX_ELEMENT_COUNT)
302 {
303 MESHX_LOGE(MODULE_ID_ELEMENT_SWITCH_RELAY_SERVER, "No of elements limit reached");
304 return MESHX_NO_MEM;
305 }
307 cwww_element_init_ctrl.element_id_start = *start_idx;
308
309 for (uint16_t i = *start_idx; i < (n_max + *start_idx); i++)
310 {
311 if (i == 0)
312 continue;
313
315 i,
316 pdev->elements,
317 CWWW_SRV_EL(i - *start_idx).cwww_srv_model_list,
318 NULL,
321 if (err)
322 {
323 MESHX_LOGE(MODULE_ID_MODEL_SERVER, "Failed to add element to composition: (%d)", err);
324 return err;
325 }
326
328 i,
329 CWWW_SRV_EL(i - *start_idx).srv_ctx,
331 if (err != MESHX_SUCCESS)
332 {
333 MESHX_LOGW(MODULE_ID_ELEMENT_SWITCH_RELAY_SERVER, "Failed to get cwww element context: (0x%x)", err);
334 }
335 else
336 {
337 err = meshx_restore_model_states(i - *start_idx);
338 if (err != MESHX_SUCCESS)
339 {
340 MESHX_LOGW(MODULE_ID_ELEMENT_SWITCH_RELAY_SERVER, "Failed to restore cwww model states: (0x%x)", err);
341 }
342 }
343 }
344 /* Increment the index for further registrations */
345 cwww_element_init_ctrl.element_id_end = *start_idx += n_max;
346 return MESHX_SUCCESS;
347}
348
369static meshx_err_t meshx_api_control_task_handler(const dev_struct_t *pdev, const control_task_msg_evt_t evt, const void *params)
370{
371 MESHX_UNUSED(pdev);
373 uint16_t element_id = 0;
374 size_t rel_el_id;
375 meshx_cwww_server_ctx_t *el_ctx = NULL;
378
379 switch (evt)
380 {
382 {
383 const meshx_on_off_srv_el_msg_t *p_onoff_srv = (const meshx_on_off_srv_el_msg_t *)params;
384 element_id = p_onoff_srv->model.el_id;
385 if (!IS_EL_IN_RANGE(element_id))
386 goto el_ctrl_task_hndlr_exit;
387
388 rel_el_id = GET_RELATIVE_EL_IDX(element_id);
389 el_ctx = CWWW_SRV_EL(rel_el_id).srv_ctx;
390 if (el_ctx->prev_state.on_off == p_onoff_srv->on_off_state)
391 goto el_ctrl_task_hndlr_exit;
392
393 sig_func = CWWW_SIG_ONOFF_MODEL_ID;
394 el_ctx->prev_state.on_off = p_onoff_srv->on_off_state;
395 app_msg.state_change.on_off.state = el_ctx->prev_state.on_off;
396 break;
397 }
398
400 {
401 const meshx_light_ctl_srv_t *p_ctl_srv = (const meshx_light_ctl_srv_t *)params;
402 element_id = p_ctl_srv->model.el_id;
403 if (!IS_EL_IN_RANGE(element_id))
404 goto el_ctrl_task_hndlr_exit;
405
406 rel_el_id = GET_RELATIVE_EL_IDX(element_id);
407 el_ctx = CWWW_SRV_EL(rel_el_id).srv_ctx;
408
409 if (memcmp(&el_ctx->prev_ctl_state, &p_ctl_srv->state, sizeof(meshx_light_ctl_srv_state_t)) == 0)
410 goto el_ctrl_task_hndlr_exit;
411
412 el_ctx->prev_ctl_state.delta_uv = p_ctl_srv->state.delta_uv;
413 el_ctx->prev_ctl_state.lightness = p_ctl_srv->state.lightness;
414 el_ctx->prev_ctl_state.temperature = p_ctl_srv->state.temperature;
417
418 sig_func = CWWW_SIG_L_CTL_MODEL_ID;
424 break;
425 }
426 default:
427 break;
428 }
429
430 err = meshx_nvs_element_ctx_set(element_id, el_ctx, sizeof(meshx_cwww_server_ctx_t));
431 if (err != MESHX_SUCCESS)
432 MESHX_LOGE(MODULE_ID_ELEMENT_SWITCH_RELAY_SERVER, "Failed to set relay element context: (%d)", err);
433
434 err = meshx_send_msg_to_app(element_id,
436 (uint16_t)sig_func,
438 &app_msg);
439
440 if (err != MESHX_SUCCESS)
441 MESHX_LOGE(MODULE_ID_ELEMENT_SWITCH_RELAY_SERVER, "Failed to send relay state change message: (%d)", err);
442
443el_ctrl_task_hndlr_exit:
444 return MESHX_SUCCESS;
445}
446
456{
457 MESHX_UNUSED(params);
458
459 size_t rel_el_id = 0;
461 meshx_gen_srv_cb_param_t gen_srv_send;
463
464 switch(evt)
465 {
467 for (size_t el_id = cwww_element_init_ctrl.element_id_start; el_id < cwww_element_init_ctrl.element_id_end; el_id++)
468 {
469 rel_el_id = GET_RELATIVE_EL_IDX(el_id);
470
471 err = meshx_gen_on_off_srv_send_pack_create(
472 CWWW_SRV_EL(rel_el_id).onoff_srv_model->meshx_sig,
473 (uint16_t)el_id,
475 CWWW_SRV_EL(rel_el_id).srv_ctx->app_id,
476 CWWW_SRV_EL(rel_el_id).srv_ctx->pub_addr,
477 CWWW_SRV_EL(rel_el_id).srv_ctx->prev_state.on_off,
478 &gen_srv_send
479 );
480
481 if ((err != MESHX_SUCCESS)
482 || (gen_srv_send.ctx.dst_addr == MESHX_ADDR_UNASSIGNED)
483 || (gen_srv_send.ctx.app_idx == MESHX_KEY_UNUSED))
484 continue;
485
488 &gen_srv_send
489 );
490
491 if (err)
492 {
493 MESHX_LOGE(MODULE_ID_ELEMENT_SWITCH_RELAY_SERVER, "Failed to send ONOFF status message (Err: %x)", err);
494 return err;
495 }
496
498 CWWW_SRV_EL(rel_el_id).ctl_srv_model->meshx_sig,
499 (uint16_t)el_id,
501 CWWW_SRV_EL(rel_el_id).srv_ctx->app_id,
502 CWWW_SRV_EL(rel_el_id).srv_ctx->pub_addr,
503 CWWW_SRV_EL(rel_el_id).srv_ctx->prev_ctl_state,
504 &light_srv_send
505 );
506
507 if ((err != MESHX_SUCCESS)
508 || (light_srv_send.ctx.dst_addr == MESHX_ADDR_UNASSIGNED)
509 || (light_srv_send.ctx.app_idx == MESHX_KEY_UNUSED))
510 continue;
511
514 &light_srv_send
515 );
516 if (err)
517 {
518 MESHX_LOGE(MODULE_ID_ELEMENT_SWITCH_RELAY_SERVER, "Failed to send CTL status message (Err: %x)", err);
519 return err;
520 }
521 }
522 break;
523 default:
524 MESHX_LOGW(MODULE_ID_ELEMENT_SWITCH_RELAY_SERVER, "Unhandled event: %d", evt);
526 break;
527 }
528
529 return err;
530}
531
544 const dev_struct_t *pdev,
546 void *params)
547{
548 MESHX_UNUSED(pdev);
550 return MESHX_SUCCESS;
551 uint16_t element_id = 0;
553 static meshx_gen_srv_cb_param_t *gen_srv_send = NULL;
554 static meshx_lighting_server_cb_param_t *light_srv_send = NULL;
555 switch (evt)
556 {
558 {
559 gen_srv_send = (meshx_gen_srv_cb_param_t *)params;
560 element_id = gen_srv_send->model.el_id;
561 if (!IS_EL_IN_RANGE(element_id))
562 goto cwww_srv_msg_handler_exit;
563 err = meshx_gen_on_off_srv_status_send(
564 &gen_srv_send->model,
565 &gen_srv_send->ctx,
566 gen_srv_send->state_change.onoff_set.onoff
567 );
568 if (err)
569 {
570 MESHX_LOGE(MODULE_ID_ELEMENT_SWITCH_RELAY_SERVER, "Failed to send ONOFF status message (Err: %x)", err);
571 return err;
572 }
573 }
574 break;
576 {
577 light_srv_send = (meshx_lighting_server_cb_param_t *)params;
578 element_id = light_srv_send->model.el_id;
579 if (!IS_EL_IN_RANGE(element_id))
580 goto cwww_srv_msg_handler_exit;
582 &light_srv_send->model,
583 &light_srv_send->ctx,
584 light_srv_send->state_change.ctl_set.delta_uv,
585 light_srv_send->state_change.ctl_set.lightness,
586 light_srv_send->state_change.ctl_set.temperature
587 );
588 if (err)
589 {
590 MESHX_LOGE(MODULE_ID_ELEMENT_SWITCH_RELAY_SERVER, "Failed to send CTL status message (Err: %x)", err);
591 return err;
592 }
593 }
594 break;
595 default:
596 MESHX_LOGW(MODULE_ID_ELEMENT_SWITCH_RELAY_SERVER, "Unhandled event: %d", evt);
598 }
599cwww_srv_msg_handler_exit:
600 return err;
601}
602
614{
615 meshx_err_t err;
616 err = meshx_dev_create_cwww_model_space(element_cnt);
617 if (err)
618 {
619 MESHX_LOGE(MODULE_ID_ELEMENT_SWITCH_RELAY_SERVER, "CWWW Model create failed: (%d)", err);
620 return err;
621 }
622 err = meshx_add_cwww_srv_model_to_element_list(pdev, (uint16_t *)&pdev->element_idx, element_cnt);
623 if (err)
624 {
625 MESHX_LOGE(MODULE_ID_ELEMENT_SWITCH_RELAY_SERVER, "CWWW Model create failed: (%d)", err);
626 return err;
627 }
628#if CONFIG_ENABLE_CONFIG_SERVER
631 if (err)
632 {
633 MESHX_LOGE(MODULE_ID_ELEMENT_SWITCH_RELAY_SERVER, "Relay Model configserver callback reg failed: (%d)", err);
634 return err;
635 }
636#endif /* CONFIG_ENABLE_CONFIG_SERVER */
641 if (err)
642 {
643 MESHX_LOGE(MODULE_ID_ELEMENT_SWITCH_RELAY_SERVER, "Failed to register control task callback: (%d)", err);
644 return err;
645 }
646
648 if (err)
649 {
650 MESHX_LOGE(MODULE_ID_ELEMENT_SWITCH_RELAY_SERVER, "Failed to register control task callback: (%d)", err);
651 return err;
652 }
657 if (err)
658 {
659 MESHX_LOGE(MODULE_ID_ELEMENT_SWITCH_RELAY_SERVER, "Failed to register control task callback: (%d)", err);
660 return err;
661 }
662 err = meshx_on_off_server_init();
663 if (err)
664 {
665 MESHX_LOGE(MODULE_ID_ELEMENT_SWITCH_RELAY_SERVER, "meshx_on_off_server_init failed: (%d)", err);
666 return err;
667 }
669 if (err)
670 {
671 MESHX_LOGE(MODULE_ID_ELEMENT_SWITCH_RELAY_SERVER, "meshx_light_ctl_server_init failed: (%d)", err);
672 return err;
673 }
674 return MESHX_SUCCESS;
675}
676
678
679#endif /* CONFIG_LIGHT_CWWW_SRV_COUNT > 0*/
This file contains the API definitions for the MeshX application.
meshx_err_t meshx_send_msg_to_app(uint16_t element_id, uint16_t element_type, uint16_t func_id, uint16_t msg_len, const void *msg)
Sends a message to the BLE Mesh application.
Definition meshx_api.c:96
@ MESHX_ELEMENT_TYPE_LIGHT_CWWW_SERVER
Definition meshx_api.h:46
struct meshx_api_light_cwww_server_evt meshx_api_light_cwww_server_evt_t
Structure defines the payload for MESHX_ELEMENT_TYPE_LIGHT_CWWW_SERVER.
meshx_err_t meshx_plat_add_element_to_composition(uint16_t index, meshx_ptr_t p_element_list, meshx_ptr_t p_sig_models, meshx_ptr_t p_ven_models, uint8_t sig_cnt, uint8_t ven_cnt)
Adds an element to the BLE Mesh composition.
meshx_err_t meshx_get_base_element_id(uint16_t *base_el_id)
Retrieves the base element ID for the BLE Mesh platform.
#define MESHX_KEY_UNUSED
#define MESHX_ADDR_UNASSIGNED
struct meshx_config_srv_cb_param meshx_config_srv_cb_param_t
control_task_msg_handle_t config_srv_cb_t
struct meshx_gen_srv_cb_param meshx_gen_srv_cb_param_t
struct meshx_light_ctl_srv_state meshx_light_ctl_srv_state_t
struct meshx_light_ctl_srv meshx_light_ctl_srv_t
Structure representing the Light CTL Server model.
struct meshx_lighting_server_cb_param meshx_lighting_server_cb_param_t
control_task_msg_handle_t prov_srv_cb_t
#define REG_MESHX_ELEMENT_FN(_name, _type, _fn)
Register an element composition function.
struct dev_struct dev_struct_t
Structure representing the device composition and elements.
#define CONFIG_MAX_ELEMENT_COUNT
Total Element Count in the Composition.
Header file for the meshxuction configuration server model.
meshx_err_t meshx_config_server_cb_reg(config_srv_cb_t cb, uint32_t config_evt_bmap)
Registers a configuration server callback for specific events.
CONTROL_TASK_MSG_EVT_TO_BLE_SET_CTL_SRV
CONTROL_TASK_MSG_EVT_TO_BLE_SET_ON_OFF_SRV
enum __packed control_task_msg_evt_to_ble control_task_msg_evt_to_ble_t
Enumeration for control task message events to BLE.
uint32_t control_task_msg_evt_t
Type definition for control task message event.
meshx_err_t(* control_task_msg_handle_t)(dev_struct_t *pdev, control_task_msg_evt_t evt, void *params)
Function pointer type for control task message handler.
CONTROL_TASK_MSG_EVT_EL_STATE_CH_SET_ON_OFF
@ CONTROL_TASK_MSG_CODE_EL_STATE_CH
@ CONTROL_TASK_MSG_CODE_TO_BLE
CONTROL_TASK_MSG_EVT_EL_STATE_CH_SET_CTL
CONTROL_TASK_MSG_EVT_PUB_ADD
CONTROL_TASK_MSG_EVT_EN_NODE_PROV
CONTROL_TASK_MSG_EVT_APP_KEY_BIND
CONTROL_TASK_MSG_EVT_PUB_DEL
meshx_err_t control_task_msg_subscribe(control_task_msg_code_t msg_code, control_task_msg_evt_t evt_bmap, control_task_msg_handle_t callback)
Subscribe to a control task message.
static meshx_err_t meshx_cwww_srv_msg_send_handler(const dev_struct_t *pdev, control_task_msg_evt_to_ble_t evt, void *params)
Handler for sending messages from the CW-WW server model to BLE.
#define CWWW_SRV_EL(_el_id)
static meshx_cwww_elements_ctrl_t cwww_element_init_ctrl
#define CONTROL_TASK_EVT_MASK
#define GET_RELATIVE_EL_IDX(_element_id)
static meshx_err_t meshx_restore_model_states(uint16_t element_id)
Restore saved CW-WW model states.
#define CONTROL_TASK_MSG_EVT_TO_BLE_GEN_SRV_MASK
static meshx_err_t meshx_dev_create_cwww_model_space(uint16_t n_max)
Create space for CW-WW models.
static meshx_err_t meshx_api_control_task_handler(const dev_struct_t *pdev, const control_task_msg_evt_t evt, const void *params)
CW-WW server model event handler.
static meshx_err_t cwww_server_config_srv_cb(const dev_struct_t *pdev, control_task_msg_evt_t evt, const meshx_config_srv_cb_param_t *params)
Callback function for configuration server events.
meshx_err_t meshx_create_cwww_elements(dev_struct_t *pdev, uint16_t element_cnt)
Create Dynamic CWWW Server Model Elements.
static meshx_err_t meshx_element_struct_init(uint16_t n_max)
Initializes the mesh element structure by freeing allocated memory.
#define IS_EL_IN_RANGE(_element_id)
static meshx_err_t meshx_add_cwww_srv_model_to_element_list(dev_struct_t *pdev, uint16_t *start_idx, uint16_t n_max)
Add CW-WW server models to the element list.
static meshx_err_t meshx_element_struct_deinit()
Deinitializes the mesh element structure by freeing allocated memory.
static meshx_err_t cwww_prov_control_task_handler(dev_struct_t const *pdev, control_task_msg_evt_t evt, void const *params)
Callback function for relay server model events for Provisioning events.
Header file for CWWW Server Model.
#define CWWW_SRV_MODEL_VEN_CNT
struct meshx_cwww_elements_ctrl meshx_cwww_elements_ctrl_t
Structure representing a CW-WW element in the BLE mesh network.
#define CWWW_SRV_MODEL_SIG_CNT
cwww_sig_id_t
Enumeration of CW-WW SIG model IDs.
@ CWWW_SIG_ONOFF_MODEL_ID
@ CWWW_SIG_L_CTL_MODEL_ID
meshx_err_t meshx_create_cwww_elements(dev_struct_t *pdev, uint16_t element_cnt)
Create Dynamic CWWW Server Model Elements.
struct cwww_srv_ctx meshx_cwww_server_ctx_t
Structure to hold the context of the cwww client.
struct meshx_cwww_element meshx_cwww_element_t
Structure to manage CWWW element initialization.
#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_INVALID_STATE
Definition meshx_err.h:45
@ MESHX_NO_MEM
Definition meshx_err.h:44
#define MESHX_DO_NOTHING
Definition meshx_err.h:17
#define MESHX_FREE
Definition meshx_err.h:32
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_light_ctl_server_create(meshx_ctl_server_model_t **p_model, meshx_ptr_t p_sig_model)
Create and initialize a new CTL server model instance.
meshx_err_t meshx_light_ctl_srv_state_restore(meshx_ctl_server_model_t *p_model, meshx_light_ctl_srv_state_t ctl_state)
Restore the CTL state for the generic server model.
meshx_err_t meshx_light_ctl_srv_status_send(meshx_model_t *p_model, meshx_ctx_t *ctx, int16_t delta_uv, uint16_t lightness, uint16_t temperature)
Send the Light CTL status message.
meshx_err_t meshx_light_ctl_srv_send_pack_create(meshx_ptr_t p_model, uint16_t element_id, uint16_t net_idx, uint16_t app_idx, uint16_t pub_addr, meshx_light_ctl_srv_state_t ctl_state, meshx_lighting_server_cb_param_t *light_srv_send)
Create a Light CTL Server send message packet.
meshx_err_t meshx_light_ctl_server_init(void)
Initialize the CTL server model.
meshx_err_t meshx_light_ctl_server_delete(meshx_ctl_server_model_t **p_model)
Delete the CTL server model instance.
#define CONFIG_SERVER_CB_MASK
Configuration server callback event mask for cwww server.
meshx_err_t meshx_gen_light_srv_send_msg_to_ble(control_task_msg_evt_to_ble_t evt, const meshx_lighting_server_cb_param_t *params)
Sends a message to the BLE subsystem via the control task.
#define MESHX_LOGW(module_id, format,...)
Definition meshx_log.h:87
#define MESHX_LOGI(module_id, format,...)
Definition meshx_log.h:100
#define MESHX_LOGE(module_id, format,...)
Definition meshx_log.h:73
Header file for MeshX Non-Volatile Storage (NVS) operations.
meshx_err_t meshx_nvs_element_ctx_set(uint16_t element_id, const void *blob, size_t blob_size)
Store the context of a specific element to NVS.
Definition meshx_nvs.c:444
meshx_err_t meshx_nvs_element_ctx_get(uint16_t element_id, void *blob, size_t blob_size)
Retrieve the context of a specific element from NVS.
Definition meshx_nvs.c:424
meshx_err_t meshx_prov_srv_reg_el_server_cb(prov_srv_cb_t cb)
Register a callback function for provisioning events.
@ MODULE_ID_ELEMENT_SWITCH_RELAY_SERVER
Definition module_id.h:28
@ MODULE_ID_MODEL_SERVER
Definition module_id.h:30
meshx_light_ctl_srv_state_t prev_ctl_state
meshx_on_off_srv_el_state_t prev_state
meshx_app_store_t meshx_store
size_t element_idx
MESHX_ELEMENT elements[MAX_ELE_CNT]
union meshx_api_light_cwww_server_evt::@257165005032013366004013204037032016036030275264 state_change
struct meshx_api_light_cwww_server_evt::@257165005032013366004013204037032016036030275264::@375004001161356005102054253202024137247030164222 on_off
struct meshx_api_light_cwww_server_evt::@257165005032013366004013204037032016036030275264::@245341060156102221224175046143367317210200103050 ctl
uint16_t net_key_id
meshx_cfg_srv_state_change_t state_change
uint16_t dst_addr
meshx_gen_srv_state_change_t state_change
meshx_light_ctl_srv_state_t state
meshx_lighting_server_state_change_t state_change
meshx_state_change_cfg_model_app_bind_t mod_app_bind
meshx_state_change_cfg_mod_pub_set_t mod_pub_set
meshx_state_change_cfg_appkey_add_t appkey_add
meshx_state_change_gen_onoff_set_t onoff_set
meshx_state_change_light_ctl_set_t ctl_set