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_relay_element.hpp
Go to the documentation of this file.
1/**
2 * @file meshx_relay_element.hpp
3 * @brief MeshX Relay Element class definition
4 * This file contains the meshXRelayServerElement class which represents a relay element
5 * in the MeshX BLE mesh network.
6 *
7 * @author Pranjal Chanda
8 * @date 2024-2025
9 * @copyright Copyright 2024 - 2025 MeshX
10 */
11
12#ifndef __MESHX_RELAY_ELEMENT_HPP__
13#define __MESHX_RELAY_ELEMENT_HPP__
14
17
18#define MESHX_RELAY_SERVER_ELEMENT_TEMPLATE_PROTO
19#define MESHX_RELAY_SERVER_ELEMENT_TEMPLATE_PARAMS
20
21#define MESHX_RELAY_CLIENT_ELEMENT_TEMPLATE_PROTO
22#define MESHX_RELAY_CLIENT_ELEMENT_TEMPLATE_PARAMS
23
24/**
25 * @brief Relay server element context structure
26 * @details This structure contains the state context for the relay server element,
27 * including the OnOff state and publication/app binding information.
28 * This matches the C implementation pattern where state is maintained
29 * in the element layer for NVS persistence.
30 */
32{
33 uint16_t app_id; /**< Application key ID for publication */
34 uint16_t pub_addr; /**< Publication address */
35 meshx_gen_onoff_model_state_t gen_on_off_state; /**< Current OnOff state (0=OFF, 1=ON) */
36};
37
39
40/*********************************************************************************
41 * meshXRelayServerElement
42 *********************************************************************************/
43
49
52{
53private:
55
56 uint8_t list_sig_models (void) override;
57 uint8_t list_ven_models (void) override;
58 const char* get_element_name(void) const override;
59
60 /**
61 * @brief Notify element of state change from child model.
62 * @details Overrides base class stub. Updates element_ctx, saves to NVS,
63 * and dispatches app notification via meshx_send_msg_to_app().
64 */
65 meshx_err_t element_state_change_notify(meshx_ptr_t param, size_t param_size) override;
66
67 /**
68 * @brief Synchronize element state (Status broadcast)
69 */
70 void sync(control_task_msg_evt_t evt) override;
71
72 /**
73 * @brief Handle configuration server events
74 */
76
78 const dev_struct_t *pdev,
80 const void *params);
81
82public:
83 /**
84 * @brief Constructs a new meshXRelayServerElement instance.
85 * The meshXRelayServerElement represents a relay element in the MeshX BLE mesh network.
86 * It automatically initializes and configures all required SIG models for the relay element.
87 *
88 * @param element_idx The index of the element within the node.
89 */
90 explicit meshXRelayServerElement (uint16_t element_idx);
91
92 meshXRelayServerElement (void) = delete;
93
94 /**
95 * @brief Get the current OnOff state of the relay server.
96 * @return uint8_t 0 for OFF, 1 for ON.
97 */
98 uint8_t get_state() const { return element_ctx.gen_on_off_state.on_off; }
99};
100
101/*********************************************************************************
102 * meshXRelayClientElement
103 *********************************************************************************/
109
110/**
111 * @brief Relay client element context structure
112 * @details This structure contains state context for relay client element,
113 * including OnOff state and publication/app binding information.
114 * This matches to C implementation pattern where state is maintained
115 * in element layer for NVS persistence.
116 */
118{
119 uint16_t app_id; /**< Application key ID for publication */
120 uint16_t pub_addr; /**< Publication address */
121 meshx_gen_onoff_model_state_t gen_on_off_state; /**< Current OnOff state (0=OFF, 1=ON) */
122};
123
125
126
129{
130private:
132
133 uint8_t list_sig_models (void) override;
134 uint8_t list_ven_models (void) override;
135
136 const char* get_element_name(void) const override;
137
138 /**
139 * @brief Notify element of state change from child model.
140 * @details Overrides base class stub. Updates element_ctx, saves to NVS,
141 * and dispatches app notification via meshx_send_msg_to_app().
142 */
143 meshx_err_t element_state_change_notify(meshx_ptr_t param, size_t param_size) override;
144
145 /**
146 * @brief Synchronize element state (GET request)
147 */
148 void sync(control_task_msg_evt_t evt) override;
149
150 /**
151 * @brief Handle configuration server events
152 */
153 void handle_config(control_task_msg_evt_t evt, const meshx_config_srv_cb_param_t *params) override;
154
156 const dev_struct_t *pdev,
158 const void *params);
159
160public:
161 /**
162 * @brief Constructs a new meshXRelayClientElement instance.
163 * The meshXRelayClientElement represents a relay client element in the MeshX BLE mesh network.
164 * It automatically initializes and configures all required SIG models for the relay client element.
165 *
166 * @param element_idx The index of the element within the node.
167 */
168 explicit meshXRelayClientElement (uint16_t element_idx);
169
170 meshXRelayClientElement (void) = delete;
171
172 /**
173 * @brief Get the current OnOff state of the relay client.
174 * @return uint8_t 0 for OFF, 1 for ON.
175 */
176 uint8_t get_state() const { return element_ctx.gen_on_off_state.on_off; }
177
178 /**
179 * @brief Set the target OnOff state for the next publication.
180 * @param on_off 0 for OFF, 1 for ON.
181 */
182 void set_target_onoff(uint8_t on_off) { element_ctx.gen_on_off_state.next_on_off = on_off; }
183
184 /**
185 * @brief Get the element context (Internal use).
186 */
188};
189
190#endif /* __MESHX_RELAY_ELEMENT_HPP__ */
meshXElementClient()=default
uint16_t element_idx
Definition meshx_fwd_decl.hpp:84
meshXElementServer()=default
const char * get_element_name(void) const override
Get the name of the element.
Definition meshx_relay_element.cpp:279
meshx_relay_cli_el_ctx_t element_ctx
Definition meshx_relay_element.hpp:131
void sync(control_task_msg_evt_t evt) override
Synchronize element state (GET request).
Definition meshx_relay_element.cpp:199
uint8_t list_ven_models(void) override
Lists Vendor models for Relay Client Element (none required).
Definition meshx_relay_element.cpp:273
meshXRelayClientElement(void)=delete
static meshx_err_t s_to_ble_cb(const dev_struct_t *pdev, control_task_msg_evt_t evt, const void *params)
Definition meshx_relay_element.cpp:312
meshx_err_t element_state_change_notify(meshx_ptr_t param, size_t param_size) override
Notify element of state change from child model.
Definition meshx_relay_element.cpp:286
meshx_relay_cli_el_ctx_t & get_ctx()
Get the element context (Internal use).
Definition meshx_relay_element.hpp:187
uint8_t get_state() const
Get the current OnOff state of the relay client.
Definition meshx_relay_element.hpp:176
meshXRelayClientElement(uint16_t element_idx)
Constructs a new meshXRelayClientElement instance. The meshXRelayClientElement represents a relay cli...
Definition meshx_relay_element.cpp:229
void handle_config(control_task_msg_evt_t evt, const meshx_config_srv_cb_param_t *params) override
Handle configuration server events.
Definition meshx_relay_element.cpp:220
uint8_t list_sig_models(void) override
Lists and initializes SIG models for Relay Client Element.
Definition meshx_relay_element.cpp:257
void set_target_onoff(uint8_t on_off)
Set the target OnOff state for the next publication.
Definition meshx_relay_element.hpp:182
meshx_err_t element_state_change_notify(meshx_ptr_t param, size_t param_size) override
Notify element of state change from child model.
Definition meshx_relay_element.cpp:121
meshXRelayServerElement(void)=delete
meshXRelayServerElement(uint16_t element_idx)
Constructs a new meshXRelayServerElement instance. The meshXRelayServerElement represents a relay ele...
Definition meshx_relay_element.cpp:64
uint8_t list_sig_models(void) override
Lists and initializes SIG models for Relay Server Element.
Definition meshx_relay_element.cpp:92
static meshx_err_t s_to_ble_cb(const dev_struct_t *pdev, control_task_msg_evt_t evt, const void *params)
Definition meshx_relay_element.cpp:175
void sync(control_task_msg_evt_t evt) override
Synchronize element state (Status broadcast).
Definition meshx_relay_element.cpp:159
uint8_t list_ven_models(void) override
Lists Vendor models for Relay Server Element (none required).
Definition meshx_relay_element.cpp:108
const char * get_element_name(void) const override
Get the name of the element.
Definition meshx_relay_element.cpp:114
meshx_relay_srv_el_ctx_t element_ctx
Definition meshx_relay_element.hpp:54
void handle_config(control_task_msg_evt_t evt, const meshx_config_srv_cb_param_t *params) override
Handle configuration server events.
Definition meshx_relay_element.cpp:154
uint8_t get_state() const
Get the current OnOff state of the relay server.
Definition meshx_relay_element.hpp:98
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
MeshX Element class and interface declaration This file contains the meshXElement class and its inter...
meshx_err_t
MeshX Error Codes.
Definition meshx_err.h:43
Implementation of Generic OnOff Client Model for MeshX.
struct meshx_gen_onoff_model_state meshx_gen_onoff_model_state_t
Definition meshx_model_onoff.hpp:38
#define MESHX_RELAY_CLIENT_ELEMENT_TEMPLATE_PROTO
Definition meshx_relay_element.hpp:21
#define MESHX_RELAY_CLIENT_ELEMENT_TEMPLATE_PARAMS
Definition meshx_relay_element.hpp:22
meshxRelayServerElementComposition
Definition meshx_relay_element.hpp:45
@ MESHX_RELAY_SERVER_ELEMENT_COMP_MAX
Definition meshx_relay_element.hpp:47
@ MESHX_RELAY_SERVER_ELEMENT_COMP_GENERIC_ONOFF_SERVER
Definition meshx_relay_element.hpp:46
#define MESHX_RELAY_SERVER_ELEMENT_TEMPLATE_PARAMS
Definition meshx_relay_element.hpp:19
meshxRelayClientElementComposition
Definition meshx_relay_element.hpp:105
@ MESHX_RELAY_CLIENT_ELEMENT_COMP_GENERIC_ONOFF_CLIENT
Definition meshx_relay_element.hpp:106
@ MESHX_RELAY_CLIENT_ELEMENT_COMP_MAX
Definition meshx_relay_element.hpp:107
#define MESHX_RELAY_SERVER_ELEMENT_TEMPLATE_PROTO
Definition meshx_relay_element.hpp:18
Relay client element context structure.
Definition meshx_relay_element.hpp:118
uint16_t pub_addr
Definition meshx_relay_element.hpp:120
meshx_gen_onoff_model_state_t gen_on_off_state
Definition meshx_relay_element.hpp:121
uint16_t app_id
Definition meshx_relay_element.hpp:119
Relay server element context structure.
Definition meshx_relay_element.hpp:32
uint16_t pub_addr
Definition meshx_relay_element.hpp:34
uint16_t app_id
Definition meshx_relay_element.hpp:33
meshx_gen_onoff_model_state_t gen_on_off_state
Definition meshx_relay_element.hpp:35