-
Notifications
You must be signed in to change notification settings - Fork 2k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
4039f65
commit c1713e5
Showing
4 changed files
with
245 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,70 @@ | ||
/* | ||
* Copyright (C) 2024 HAW Hamburg | ||
* | ||
* This file is subject to the terms and conditions of the GNU Lesser | ||
* General Public License v2.1. See the file LICENSE in the top level | ||
* directory for more details. | ||
*/ | ||
/** | ||
* @{ | ||
* @ingroup lwm2m_objects_voltage | ||
* | ||
* @file | ||
* @brief Voltmeter object implementation for LwM2M client using Wakaama | ||
* | ||
* @author Leandro Lanzieri <leandro.lanzieri@haw-hamburg.de> | ||
* @} | ||
*/ | ||
|
||
#include "mutex.h" | ||
#include "liblwm2m.h" | ||
#include "lwm2m_client.h" | ||
#include "objects/voltage.h" | ||
#include "objects/ipso_sensor_base.h" | ||
|
||
#define ENABLE_DEBUG 0 | ||
#include "debug.h" | ||
|
||
/** | ||
* @brief Voltage Sensor object implementation descriptor. | ||
*/ | ||
static lwm2m_obj_ipso_sensor_base_t _voltage_object; | ||
|
||
/** | ||
* @brief Pool of object instances. | ||
*/ | ||
static lwm2m_obj_ipso_sensor_base_inst_t _instances[CONFIG_LWM2M_VOLTAGE_INSTANCES_MAX]; | ||
|
||
lwm2m_object_t *lwm2m_object_voltage_init(lwm2m_client_data_t *client_data) | ||
{ | ||
assert(client_data); | ||
int res = lwm2m_object_ipso_sensor_base_init_derived(client_data, &_voltage_object, | ||
LWM2M_VOLTAGE_OBJECT_ID, | ||
_instances, | ||
CONFIG_LWM2M_VOLTAGE_INSTANCES_MAX); | ||
|
||
if (res) { | ||
DEBUG("[lwm2m:voltage]: failed to create object\n"); | ||
return NULL; | ||
} | ||
|
||
return &_voltage_object.object; | ||
} | ||
|
||
|
||
int32_t lwm2m_object_voltage_instance_create(const lwm2m_obj_voltage_args_t *args) | ||
{ | ||
int32_t result = lwm2m_object_ipso_sensor_base_instance_create(&_voltage_object, args); | ||
|
||
if (result) { | ||
DEBUG("[lwm2m:voltage]: failed to create instance\n"); | ||
} | ||
|
||
return result; | ||
} | ||
|
||
void lwm2m_object_voltage_update_value(const lwm2m_client_data_t *client_data, uint16_t instance_id, | ||
int16_t value) | ||
{ | ||
lwm2m_object_ipso_sensor_base_update_value(client_data, &_voltage_object, instance_id, value); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,162 @@ | ||
/* | ||
* Copyright (C) 2024 HAW Hamburg | ||
* | ||
* This file is subject to the terms and conditions of the GNU Lesser | ||
* General Public License v2.1. See the file LICENSE in the top level | ||
* directory for more details. | ||
*/ | ||
|
||
/** | ||
* @ingroup lwm2m_objects | ||
* @defgroup lwm2m_objects_voltage Voltage | ||
* @brief Voltmeter object implementation for LwM2M client using Wakaama | ||
* | ||
* @experimental | ||
* | ||
* This implements the LwM2M Voltage Sensor object (ID 3316) as specified in the LwM2M registry. | ||
* This IPSO object should be used with voltmeter sensor to report measured voltage between two | ||
* points. It also provides resources for minimum and maximum measured values, as well as the | ||
* minimum and maximum range that can be measured by the sensor. An example measurement unit is | ||
* volts. | ||
* | ||
* The sensor value can be updated by the application using the | ||
* @ref lwm2m_object_voltage_update_value function, or polled when required if a callback is | ||
* registered upon object instantiation via @ref lwm2m_obj_voltage_args_t::read_cb. | ||
* | ||
* To use this object add `USEMODULE += wakaama_objects_voltage` to the application Makefile. | ||
* | ||
* ## Resources | ||
* | ||
* For an XML description of the object see | ||
* https://raw.githubusercontent.com/OpenMobileAlliance/lwm2m-registry/prod/version_history/3316-1_0.xml | ||
* | ||
* This object is based on the @ref lwm2m_objects_ipso_sensor_base, therefore it shares the same | ||
* resources. Note that the optional resources "Current Calibration" (ID 5821) and | ||
* "Application Type" (ID 5750) are not implemented. | ||
* | ||
* ## Usage | ||
* | ||
* 1. Initialize the LwM2M object with an initialized client pointer. | ||
* | ||
* ~~~~~~~~~~~~~~~{.c} | ||
* lwm2m_object_t *obj = lwm2m_object_voltage_init(&client_data); | ||
* ~~~~~~~~~~~~~~~ | ||
* | ||
* 2. Create a new instance of the object with a given configuration (@ref lwm2m_obj_voltage_args_t). | ||
* Here, you can decide the way of updating the sensor values: polling or pushing. In this case, | ||
* we register a callback function that is called whenever the sensor value is read. | ||
* | ||
* ~~~~~~~~~~~~~~~{.c} | ||
* | ||
* // callback function to read the sensor value | ||
* int _read_cb(void *arg, int16_t *value) | ||
* { | ||
* (void)arg; | ||
* | ||
* // generate new value | ||
* *value = 100; | ||
* | ||
* return 0; | ||
* } | ||
* | ||
* // initialize an instance of voltage sensor object | ||
* const lwm2m_obj_voltage_args_t voltage_args = { | ||
* .min_range_value = -50.0, | ||
* .max_range_value = 200.0, | ||
* .units = "V", | ||
* .units_len = sizeof("V") - 1, | ||
* .instance_id = 0, | ||
* .read_cb = _read_cb, | ||
* .read_cb_arg = NULL | ||
* }; | ||
* | ||
* int res = lwm2m_object_voltage_instance_create(&voltage_args); | ||
* | ||
* if (res < 0) { | ||
* puts("Could not create voltage object instance"); | ||
* } | ||
* ~~~~~~~~~~~~~~~ | ||
* | ||
* 3. You can now update the sensor values using the @ref lwm2m_object_voltage_update_value function. | ||
* | ||
* ~~~~~~~~~~~~~~~{.c} | ||
* lwm2m_object_voltage_update_value(&client_data, 0, new_value); | ||
* ~~~~~~~~~~~~~~~ | ||
* @{ | ||
* | ||
* @file | ||
* | ||
* @author Leandro Lanzieri <leandro.lanzieri@haw-hamburg.de> | ||
*/ | ||
|
||
#ifndef OBJECTS_VOLTAGE_H | ||
#define OBJECTS_VOLTAGE_H | ||
|
||
#ifdef __cplusplus | ||
extern "C" { | ||
#endif | ||
|
||
#include "liblwm2m.h" | ||
#include "lwm2m_client.h" | ||
#include "objects/ipso_sensor_base.h" | ||
|
||
/** | ||
* @defgroup lwm2m_objects_voltage_config LwM2M Voltage Sensor object compile configurations | ||
* @ingroup lwm2m_client_config | ||
* @{ | ||
*/ | ||
/** | ||
* @brief Maximum number of instances of the object | ||
*/ | ||
#ifndef CONFIG_LWM2M_VOLTAGE_INSTANCES_MAX | ||
#define CONFIG_LWM2M_VOLTAGE_INSTANCES_MAX (1U) | ||
#endif | ||
/** @} */ | ||
|
||
/** | ||
* @brief LwM2M Voltage Sensor object ID | ||
*/ | ||
#define LWM2M_VOLTAGE_OBJECT_ID 3316 | ||
|
||
/** | ||
* @brief Arguments for the creation of a Voltage Sensor object instance. | ||
*/ | ||
typedef lwm2m_obj_ipso_base_sensor_args_t lwm2m_obj_voltage_args_t; | ||
|
||
/** | ||
* @brief Initialize the Voltage Sensor object handle | ||
* | ||
* @param[in] client_data Pointer to the LwM2M client data. | ||
* | ||
* @return Pointer to the global handle of the Voltage Sensor object. | ||
*/ | ||
lwm2m_object_t *lwm2m_object_voltage_init(lwm2m_client_data_t *client_data); | ||
|
||
/** | ||
* @brief Create a new Voltage Sensor instance. | ||
* | ||
* @param[in] args Initialize structure with the parameter for the instance. May | ||
* not be NULL. | ||
* | ||
* @return > 0 value representing the instance ID if the instance was created successfully. | ||
* @return <0 otherwise | ||
*/ | ||
int32_t lwm2m_object_voltage_instance_create(const lwm2m_obj_voltage_args_t *args); | ||
|
||
/** | ||
* @brief Update the value of the voltage sensor and trigger a notification | ||
* to the observing servers, if any. | ||
* | ||
* @param[in] client_data Pointer to the LwM2M client. | ||
* @param[in] instance_id ID of the instance to update. | ||
* @param[in] value New value for the sensor. | ||
*/ | ||
void lwm2m_object_voltage_update_value(const lwm2m_client_data_t *client_data, | ||
uint16_t instance_id, int16_t value); | ||
|
||
#ifdef __cplusplus | ||
} | ||
#endif | ||
|
||
#endif /* OBJECTS_VOLTAGE_H */ | ||
/** @} */ |