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_composition_builder.cpp File Reference

Implementation of MeshX Composition Builder and its C-wrapper. More...

Functions

bool meshx_builder_is_active (void)
 C-Wrapper Implementation.
meshx_err_t meshx_builder_bake (dev_struct_t *pdev, uint16_t cid, uint16_t pid, uint16_t vid)
 Bakes the dynamic composition into the device structure.
void meshx_builder_add_element (meshx_element_type_t type, uint16_t count)
 Adds elements of a specific type to the composition.
void meshx_builder_begin (void)
 C-Friendly Builder functions.
void meshx_builder_commit (void)

Detailed Description

Implementation of MeshX Composition Builder and its C-wrapper.

Author
Pranjal Chanda
Date
2024-2025

Function Documentation

◆ meshx_builder_add_element()

void meshx_builder_add_element ( meshx_element_type_t type,
uint16_t count )

Adds elements of a specific type to the composition.

Parameters
typeThe type of element to add.
countThe number of elements of this type to add.
118 {
120 switch(type) {
121#if CONFIG_RELAY_SERVER_COUNT > 0
122 case MESHX_ELEMENT_TYPE_RELAY_SERVER:
123 for(uint16_t i=0; i<count; ++i) builder.add_relay_server();
124 break;
125#endif
126#if CONFIG_RELAY_CLIENT_COUNT > 0
127 case MESHX_ELEMENT_TYPE_RELAY_CLIENT:
128 for(uint16_t i=0; i<count; ++i) builder.add_relay_client();
129 break;
130#endif
131#if CONFIG_LIGHT_CWWW_SRV_COUNT > 0
132 case MESHX_ELEMENT_TYPE_LIGHT_CWWW_SERVER:
133 for(uint16_t i=0; i<count; ++i) builder.add_cwww_server();
134 break;
135#endif
136#if CONFIG_LIGHT_CWWW_CLIENT_COUNT > 0
137 case MESHX_ELEMENT_TYPE_LIGHT_CWWW_CLIENT:
138 for(uint16_t i=0; i<count; ++i) builder.add_cwww_client();
139 break;
140#endif
141#if CONFIG_SENSOR_SERVER_COUNT > 0
142 case MESHX_ELEMENT_TYPE_SENSOR_SERVER:
143 for(uint16_t i=0; i<count; ++i) builder.add_sensor_server();
144 break;
145#endif
146#if CONFIG_RGB_SERVER_COUNT > 0
147 case MESHX_ELEMENT_TYPE_LIGHT_HSL_SERVER:
148 for(uint16_t i=0; i<count; ++i) builder.add_rgb_server();
149 break;
150#endif
151 default:
152 MESHX_LOGW(MODULE_ID_COMMON, "Builder: No implementation for element type %d", type);
153 break;
154 }
155}
Fluent API for building the mesh composition.
Definition meshx_composition_builder.hpp:23
meshXCompositionBuilder & add_rgb_server()
Add an RGB (HSL) Server element.
Definition meshx_composition_builder.cpp:78
meshXCompositionBuilder & add_relay_client()
Add a Relay Client element.
Definition meshx_composition_builder.cpp:42
meshXCompositionBuilder & add_cwww_client()
Add a Light CWWW Client element.
Definition meshx_composition_builder.cpp:60
meshXCompositionBuilder & add_cwww_server()
Add a Light CWWW Server element.
Definition meshx_composition_builder.cpp:51
meshXCompositionBuilder & add_sensor_server()
Add a Sensor Server element.
Definition meshx_composition_builder.cpp:69
meshXCompositionBuilder & add_relay_server()
Add a Relay Server element.
Definition meshx_composition_builder.cpp:33
#define MESHX_LOGW(module_id, format,...)
Definition meshx_log.h:120
@ MODULE_ID_COMMON
Definition module_id.h:36

◆ meshx_builder_bake()

meshx_err_t meshx_builder_bake ( dev_struct_t * pdev,
uint16_t cid,
uint16_t pid,
uint16_t vid )

Bakes the dynamic composition into the device structure.

Parameters
pdevPointer to the device structure.
cidCompany ID.
pidProduct ID.
vidVersion ID.
Returns
MESHX_SUCCESS on success, or error code.
102 {
103 // 1. Initialize the C++ Device wrapper
105
106 // 2. Perform the bake
108 meshx_err_t err = meshXComposition::get_instance().bake(cid, pid, vid);
109
110 // 3. Visualize the result
111 if (err == MESHX_SUCCESS) {
113 }
114
115 return err;
116}
meshx_err_t bake(uint16_t cid, uint16_t pid, uint16_t vid)
"Bake" the dynamic composition into a contiguous C-array
Definition meshx_composition.cpp:34
void set_device_struct(dev_struct_t *pdev)
Set the device structure pointer.
Definition meshx_composition.hpp:67
static meshXComposition & get_instance()
Get the singleton instance.
Definition meshx_composition.cpp:29
void init(dev_struct_t *pdev)
Initialize the device wrapper with a raw C struct.
Definition meshx_device.hpp:31
static meshXDevice & get_instance()
Get the singleton instance.
Definition meshx_device.cpp:14
void visualize_status()
Visualize the current composition and element status.
Definition meshx_device.cpp:19
meshx_err_t
MeshX Error Codes.
Definition meshx_err.h:43
**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

◆ meshx_builder_begin()

void meshx_builder_begin ( void )

C-Friendly Builder functions.

C-friendly builder lifecycle functions.

161 {
163 builder.begin();
164}
meshXCompositionBuilder & begin()
Start building the composition.
Definition meshx_composition_builder.cpp:23

◆ meshx_builder_commit()

void meshx_builder_commit ( void )
166 {
168 builder.commit();
169}
meshXCompositionBuilder & commit()
Commit the composition (Triggers Baking).
Definition meshx_composition_builder.cpp:87

◆ meshx_builder_is_active()

bool meshx_builder_is_active ( void )

C-Wrapper Implementation.

Checks if a dynamic composition has been built.

98 {
100}
bool has_elements() const
Check if there are any elements.
Definition meshx_composition.hpp:50