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_model_battery.hpp
Go to the documentation of this file.
1/**
2 * @file meshx_model_battery.hpp
3 * @brief Implementation of Generic Battery Model for MeshX
4 *
5 * This file contains the implementation of the Generic Battery model,
6 * which provides standard Battery model functionality in the MeshX BLE mesh framework.
7 *
8 * Key Features:
9 * - Implements Bluetooth SIG-defined Generic Battery model
10 * - Inherits from meshXClientModel and meshXServerModel templates
11 * - Provides standard Battery status operations
12 * - Integrates with MeshX transmission control
13 *
14 * @author Pranjal Chanda
15 * @date 2024-2025
16 * @copyright Copyright 2024 - 2025 MeshX
17 */
18#ifndef _MESHX_MODEL_BATTERY_HPP_
19#define _MESHX_MODEL_BATTERY_HPP_
20
21#include <meshx_model_class.hpp>
23
24#define MESHX_GEN_BATTERY_CLIENT_MODEL_TEMPLATE_PROTO
25#define MESHX_GEN_BATTERY_CLIENT_MODEL_TEMPLATE_PARAMS
26
27#define MESHX_GEN_BATTERY_SERVER_MODEL_TEMPLATE_PROTO
28#define MESHX_GEN_BATTERY_SERVER_MODEL_TEMPLATE_PARAMS
29
30/**
31 * @brief Structure to hold the Battery model state.
32 */
34{
35 uint8_t battery_level; /**< The battery level (0-100%). */
36 uint32_t time_to_discharge; /**< Time to discharge in minutes. */
37 uint32_t time_to_charge; /**< Time to charge in minutes. */
38 uint8_t presence; /**< Presence of battery. */
39 uint8_t charge_level; /**< Charge level indicators. */
40 uint8_t charge_type; /**< Charge type indicators. */
41};
42
44
45/**
46 * @brief Structure to hold the parameters for sending a Generic Battery message.
47 */
49{
50 meshx_model_t *model; /**< Pointer to the Battery client model. */
51 meshx_ctx_t *ctx; /**< The context of the message. */
52 meshx_gen_battery_model_state_t state; /**< The state of the message. */
53};
54
56
57#if CONFIG_ENABLE_GEN_BATTERY_CLIENT
58/**
59 * @brief Structure to hold the Battery Server to parent element message.
60 * The structure is used by the on_model_cb function to send the Battery state
61 * change notification to the parent element.
62 */
64{
65 meshx_cli_model_send_param_header_t header; /**< Client model send param header */
66 meshx_gen_battery_model_state_t state; /**< The state of the message. */
67};
68
70/**
71 * @class meshXGenericBatteryClientModel
72 * @brief A template class for creating Generic Battery Client models.
73 *
74 * This class is derived from meshXClientModel and provides a convenient interface for
75 * creating Generic Battery Client models. It handles the Generic Battery state change
76 * notifications from the MeshX stack and publishes the state change event to the
77 * element layer.
78 */
80class meshXGenericBatteryClientModel : public meshXClientModel<meshXBaseGenericClientModel, meshx_gen_battery_send_params_t>
81{
82private:
83 /* New or updated model state from BLE layer */
85
86 /* Message to be sent to parent element */
88
91
92public:
95 meshx_err_t prepare_element_msg (meshx_ptr_t *msg_ptr, size_t *msg_size) override;
96
99 meshx_ptr_t parent_element_state = nullptr,
100 uint16_t model_func_id = 0
101 );
103};
104
105#endif /* CONFIG_ENABLE_GEN_BATTERY_CLIENT */
106
107#if CONFIG_ENABLE_GEN_BATTERY_SERVER
108
109using meshx_battery_srv_el_msg_t = struct meshx_battery_srv_el_msg
110{
111 meshx_srv_model_send_param_header_t header; /**< Server model send param header */
112 meshx_gen_battery_model_state_t state; /**< The state of the message. */
113};
114
115/**
116 * @class meshXGenericBatteryServerModel
117 * @brief A template class for creating Generic Battery Server models.
118 *
119 * This class is derived from meshXServerModel and provides a convenient interface for
120 * creating Generic Battery Server models. It handles the Generic Battery state change
121 * notifications from the MeshX stack and publishes the state change event to the
122 * element layer.
123 */
125class meshXGenericBatteryServerModel : public meshXServerModel<meshXBaseGenericServerModel, meshx_gen_battery_send_params_t>
126{
127private:
128 /* New or updated model state from BLE layer */
130
131 /* Message to be sent to parent element */
133
134 /* Flag to indicate if element message has been prepared */
136
137 meshx_err_t plat_model_create (MESHX_MODEL* p_plat_model_ptr = nullptr) override;
138 meshx_err_t plat_model_delete (void) override;
139
140public:
143 meshx_err_t prepare_element_msg (meshx_ptr_t *msg_ptr, size_t *msg_size) override;
144
145 // Virtual method implementation from meshXModelIF
147
150 meshx_ptr_t parent_element_state = nullptr,
151 uint16_t model_func_id = 0
152 );
154};
155#endif /* CONFIG_ENABLE_GEN_BATTERY_SERVER */
156
157#endif /* _MESHX_MODEL_BATTERY_HPP_ */
Interface class for MeshX elements.
Definition meshx_fwd_decl.hpp:82
meshx_gen_battery_model_state_t model_state
Definition meshx_model_battery.hpp:84
meshx_battery_cli_el_msg_t element_msg
Definition meshx_model_battery.hpp:87
meshx_err_t meshx_state_change_notify(const meshx_gen_cli_cb_param_t *param, uint8_t status)
Handle Generic Battery state change notifications from the MeshX stack.
Definition meshx_model_battery.cpp:38
meshx_err_t model_send(meshx_gen_battery_send_params_t *params) override
Send a packet to the MeshX stack based on the given parameters.
Definition meshx_model_battery.cpp:173
meshx_err_t prepare_element_msg(meshx_ptr_t *msg_ptr, size_t *msg_size) override
Prepare message for element notification.
Definition meshx_model_battery.cpp:75
meshXGenericBatteryClientModel(meshXElementIF *parent_element=nullptr, meshx_ptr_t parent_element_state=nullptr, uint16_t model_func_id=0)
A template class for creating Generic Battery Client models.
Definition meshx_model_battery.cpp:221
meshx_err_t element_state_change_handle(void) override
Handle state change request from element.
Definition meshx_model_battery.cpp:102
meshx_err_t model_from_ble_cb(dev_struct_t *, control_task_msg_evt_t, meshx_ptr_t) override
Creates a meshXGenericBatteryClientModel instance based on a BLE device.
Definition meshx_model_battery.cpp:139
meshx_err_t plat_model_delete(void) override
Deletes the Generic Battery Server model and its associated resources.
Definition meshx_model_battery.cpp:463
meshx_gen_battery_model_state_t model_state
Definition meshx_model_battery.hpp:129
meshx_err_t prepare_element_msg(meshx_ptr_t *msg_ptr, size_t *msg_size) override
Prepare message for element notification.
Definition meshx_model_battery.cpp:320
bool element_msg_prepared
Definition meshx_model_battery.hpp:135
meshx_battery_srv_el_msg_t element_msg
Definition meshx_model_battery.hpp:132
meshx_err_t element_state_change_handle(void) override
Handle state change request from element.
Definition meshx_model_battery.cpp:352
meshx_err_t model_from_ble_cb(dev_struct_t *, control_task_msg_evt_t, meshx_ptr_t) override
Callback function for handling BLE mesh events for the Generic Battery Server Model.
Definition meshx_model_battery.cpp:272
meshx_err_t plat_model_create(MESHX_MODEL *p_plat_model_ptr=nullptr) override
Creates and initializes a server model instance for the Generic Battery Server.
Definition meshx_model_battery.cpp:413
meshXGenericBatteryServerModel(meshXElementIF *parent_element=nullptr, meshx_ptr_t parent_element_state=nullptr, uint16_t model_func_id=0)
Constructor for the Generic Battery Server Model.
Definition meshx_model_battery.cpp:386
meshx_err_t model_send(meshx_gen_battery_send_params_t *params) override
Send a packet to the MeshX stack based on the given parameters.
Definition meshx_model_battery.cpp:244
meshXElementIF * parent_element
Definition meshx_model_class.hpp:42
meshXClientModel(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:216
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
Header file for MeshX Generic Client and Server model declarations.
struct meshx_model meshx_model_t
struct meshx_ctx meshx_ctx_t
Structure to hold context information for BLE Mesh operations.
void * meshx_ptr_t
Definition meshx_ble_mesh_cmn_def.h:636
struct meshx_gen_cli_cb_param meshx_gen_cli_cb_param_t
Callback parameters for Generic Client Model events. This structure is used to pass information about...
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_err_t
MeshX Error Codes.
Definition meshx_err.h:43
struct meshx_gen_battery_send_params meshx_gen_battery_send_params_t
Definition meshx_model_battery.hpp:55
struct meshx_gen_battery_model_state meshx_gen_battery_model_state_t
Definition meshx_model_battery.hpp:43
#define MESHX_GEN_BATTERY_SERVER_MODEL_TEMPLATE_PROTO
Definition meshx_model_battery.hpp:27
struct meshx_battery_srv_el_msg { meshx_srv_model_send_param_header_t header; meshx_gen_battery_model_state_t state; } meshx_battery_srv_el_msg_t
Definition meshx_model_battery.hpp:109
#define MESHX_GEN_BATTERY_CLIENT_MODEL_TEMPLATE_PROTO
Definition meshx_model_battery.hpp:24
struct meshx_battery_cli_el_msg meshx_battery_cli_el_msg_t
Definition meshx_model_battery.hpp:69
Template declarations for MeshX model wrapper classes.
struct meshx_cli_model_send_param_header meshx_cli_model_send_param_header_t
Definition meshx_model_class.hpp:417
struct meshx_srv_model_send_param_header meshx_srv_model_send_param_header_t
Definition meshx_model_class.hpp:354
uint8_t state
Definition meshx_serial.c:39
Structure to hold the Battery Server to parent element message. The structure is used by the on_model...
Definition meshx_model_battery.hpp:64
meshx_gen_battery_model_state_t state
Definition meshx_model_battery.hpp:66
meshx_cli_model_send_param_header_t header
Definition meshx_model_battery.hpp:65
Structure to hold the Battery model state.
Definition meshx_model_battery.hpp:34
uint32_t time_to_discharge
Definition meshx_model_battery.hpp:36
uint8_t charge_type
Definition meshx_model_battery.hpp:40
uint8_t presence
Definition meshx_model_battery.hpp:38
uint32_t time_to_charge
Definition meshx_model_battery.hpp:37
uint8_t charge_level
Definition meshx_model_battery.hpp:39
uint8_t battery_level
Definition meshx_model_battery.hpp:35
Structure to hold the parameters for sending a Generic Battery message.
Definition meshx_model_battery.hpp:49
meshx_gen_battery_model_state_t state
Definition meshx_model_battery.hpp:52
meshx_ctx_t * ctx
Definition meshx_model_battery.hpp:51
meshx_model_t * model
Definition meshx_model_battery.hpp:50