net: lwm2m: Unify reusable resources creation

Some of the objects redefined reusable resources IDs, while others used
a common header which defines resource IDs. Unify the approach and use
the header in every object.

Signed-off-by: Robert Lubos <robert.lubos@nordicsemi.no>
This commit is contained in:
Robert Lubos 2021-02-11 16:01:23 +01:00 committed by Anas Nashif
commit 49b0e2cc76
8 changed files with 157 additions and 209 deletions

View file

@ -20,6 +20,7 @@ LOG_MODULE_REGISTER(LOG_MODULE_NAME);
#include "lwm2m_object.h"
#include "lwm2m_engine.h"
#include "lwm2m_resource_ids.h"
#define ACCEL_VERSION_MAJOR 1
#define ACCEL_VERSION_MINOR 0
@ -29,16 +30,8 @@ LOG_MODULE_REGISTER(LOG_MODULE_NAME);
#else
#define ADD_TIMESTAMPS 0
#endif
/* Server resource IDs */
#define ACCEL_X_VALUE_ID 5702
#define ACCEL_Y_VALUE_ID 5703
#define ACCEL_Z_VALUE_ID 5704
#define ACCEL_SENSOR_UNITS_ID 5701
#define ACCEL_MIN_RANGE_VALUE_ID 5603
#define ACCEL_MAX_RANGE_VALUE_ID 5604
#if ADD_TIMESTAMPS
#define ACCEL_TIMESTAMP_ID 5518
#if ADD_TIMESTAMPS
#define ACCEL_MAX_ID 7
#else
#define ACCEL_MAX_ID 6
@ -65,14 +58,14 @@ static struct ipso_accel_data accel_data[MAX_INSTANCE_COUNT];
static struct lwm2m_engine_obj accel;
static struct lwm2m_engine_obj_field fields[] = {
OBJ_FIELD_DATA(ACCEL_X_VALUE_ID, R, FLOAT32),
OBJ_FIELD_DATA(ACCEL_Y_VALUE_ID, R_OPT, FLOAT32),
OBJ_FIELD_DATA(ACCEL_Z_VALUE_ID, R_OPT, FLOAT32),
OBJ_FIELD_DATA(ACCEL_SENSOR_UNITS_ID, R_OPT, STRING),
OBJ_FIELD_DATA(ACCEL_MIN_RANGE_VALUE_ID, R_OPT, FLOAT32),
OBJ_FIELD_DATA(ACCEL_MAX_RANGE_VALUE_ID, R_OPT, FLOAT32),
OBJ_FIELD_DATA(X_VALUE_RID, R, FLOAT32),
OBJ_FIELD_DATA(Y_VALUE_RID, R_OPT, FLOAT32),
OBJ_FIELD_DATA(Z_VALUE_RID, R_OPT, FLOAT32),
OBJ_FIELD_DATA(SENSOR_UNITS_RID, R_OPT, STRING),
OBJ_FIELD_DATA(MIN_RANGE_VALUE_RID, R_OPT, FLOAT32),
OBJ_FIELD_DATA(MAX_RANGE_VALUE_RID, R_OPT, FLOAT32),
#if ADD_TIMESTAMPS
OBJ_FIELD_DATA(ACCEL_TIMESTAMP_ID, RW_OPT, TIME),
OBJ_FIELD_DATA(TIMESTAMP_RID, RW_OPT, TIME),
#endif
};
@ -113,27 +106,25 @@ static struct lwm2m_engine_obj_inst *accel_create(uint16_t obj_inst_id)
init_res_instance(res_inst[avail], ARRAY_SIZE(res_inst[avail]));
/* initialize instance resource data */
INIT_OBJ_RES_DATA(ACCEL_X_VALUE_ID, res[avail], i, res_inst[avail], j,
INIT_OBJ_RES_DATA(X_VALUE_RID, res[avail], i, res_inst[avail], j,
&accel_data[avail].x_value,
sizeof(accel_data[avail].x_value));
INIT_OBJ_RES_DATA(ACCEL_Y_VALUE_ID, res[avail], i, res_inst[avail], j,
INIT_OBJ_RES_DATA(Y_VALUE_RID, res[avail], i, res_inst[avail], j,
&accel_data[avail].y_value,
sizeof(accel_data[avail].y_value));
INIT_OBJ_RES_DATA(ACCEL_Z_VALUE_ID, res[avail], i, res_inst[avail], j,
INIT_OBJ_RES_DATA(Z_VALUE_RID, res[avail], i, res_inst[avail], j,
&accel_data[avail].z_value,
sizeof(accel_data[avail].z_value));
INIT_OBJ_RES_OPTDATA(ACCEL_SENSOR_UNITS_ID, res[avail], i,
INIT_OBJ_RES_OPTDATA(SENSOR_UNITS_RID, res[avail], i,
res_inst[avail], j);
INIT_OBJ_RES_DATA(ACCEL_MIN_RANGE_VALUE_ID, res[avail], i,
res_inst[avail], j,
&accel_data[avail].min_range,
INIT_OBJ_RES_DATA(MIN_RANGE_VALUE_RID, res[avail], i, res_inst[avail],
j, &accel_data[avail].min_range,
sizeof(accel_data[avail].min_range));
INIT_OBJ_RES_DATA(ACCEL_MAX_RANGE_VALUE_ID, res[avail], i,
res_inst[avail], j,
&accel_data[avail].max_range,
INIT_OBJ_RES_DATA(MAX_RANGE_VALUE_RID, res[avail], i, res_inst[avail],
j, &accel_data[avail].max_range,
sizeof(accel_data[avail].max_range));
#if ADD_TIMESTAMPS
INIT_OBJ_RES_OPTDATA(ACCEL_TIMESTAMP_ID, res[avail], i,
INIT_OBJ_RES_OPTDATA(TIMESTAMP_RID, res[avail], i,
res_inst[avail], j);
#endif

View file

@ -20,21 +20,11 @@ LOG_MODULE_REGISTER(LOG_MODULE_NAME);
#include "lwm2m_object.h"
#include "lwm2m_engine.h"
#include "lwm2m_resource_ids.h"
#define BUZZER_VERSION_MAJOR 1
#define BUZZER_VERSION_MINOR 0
/* resource IDs */
#define BUZZER_ON_OFF_ID 5850
#define BUZZER_LEVEL_ID 5548
#define BUZZER_DELAY_DURATION_ID 5521
#define BUZZER_MINIMUM_OFF_TIME_ID 5525
#define BUZZER_APPLICATION_TYPE_ID 5750
/* This field is actually not in the spec, so nothing sets it except here
* users can listen for post_write events to it for buzzer on/off events
*/
#define BUZZER_DIGITAL_STATE_ID 5500
#define BUZZER_MAX_ID 6
#define MAX_INSTANCE_COUNT CONFIG_LWM2M_IPSO_BUZZER_INSTANCE_COUNT
@ -64,12 +54,16 @@ static struct ipso_buzzer_data buzzer_data[MAX_INSTANCE_COUNT];
static struct lwm2m_engine_obj buzzer;
static struct lwm2m_engine_obj_field fields[] = {
OBJ_FIELD_DATA(BUZZER_ON_OFF_ID, RW, BOOL),
OBJ_FIELD_DATA(BUZZER_LEVEL_ID, RW_OPT, FLOAT32),
OBJ_FIELD_DATA(BUZZER_DELAY_DURATION_ID, RW_OPT, FLOAT64),
OBJ_FIELD_DATA(BUZZER_MINIMUM_OFF_TIME_ID, RW, FLOAT64),
OBJ_FIELD_DATA(BUZZER_APPLICATION_TYPE_ID, RW_OPT, STRING),
OBJ_FIELD_DATA(BUZZER_DIGITAL_STATE_ID, R, BOOL),
OBJ_FIELD_DATA(ON_OFF_RID, RW, BOOL),
OBJ_FIELD_DATA(LEVEL_RID, RW_OPT, FLOAT32),
OBJ_FIELD_DATA(DELAY_DURATION_RID, RW_OPT, FLOAT64),
OBJ_FIELD_DATA(MINIMUM_OFF_TIME_RID, RW, FLOAT64),
OBJ_FIELD_DATA(APPLICATION_TYPE_RID, RW_OPT, STRING),
/* This field is actually not in the spec, so nothing sets it except
* here users can listen for post_write events to it for buzzer on/off
* events
*/
OBJ_FIELD_DATA(DIGITAL_INPUT_STATE_RID, R, BOOL),
};
static struct lwm2m_engine_obj_inst inst[MAX_INSTANCE_COUNT];
@ -121,7 +115,7 @@ static int start_buzzer(struct ipso_buzzer_data *buzzer)
buzzer->trigger_offset = k_uptime_get();
snprintk(path, MAX_RESOURCE_LEN, "%d/%u/%d", IPSO_OBJECT_BUZZER_ID,
buzzer->obj_inst_id, BUZZER_DIGITAL_STATE_ID);
buzzer->obj_inst_id, DIGITAL_INPUT_STATE_RID);
lwm2m_engine_set_bool(path, true);
float2ms(&buzzer->delay_duration, &temp);
@ -140,7 +134,7 @@ static int stop_buzzer(struct ipso_buzzer_data *buzzer, bool cancel)
}
snprintk(path, MAX_RESOURCE_LEN, "%d/%u/%d", IPSO_OBJECT_BUZZER_ID,
buzzer->obj_inst_id, BUZZER_DIGITAL_STATE_ID);
buzzer->obj_inst_id, DIGITAL_INPUT_STATE_RID);
lwm2m_engine_set_bool(path, false);
if (cancel) {
@ -215,27 +209,23 @@ static struct lwm2m_engine_obj_inst *buzzer_create(uint16_t obj_inst_id)
init_res_instance(res_inst[avail], ARRAY_SIZE(res_inst[avail]));
/* initialize instance resource data */
INIT_OBJ_RES(BUZZER_ON_OFF_ID, res[avail], i,
res_inst[avail], j, 1, false, true,
&buzzer_data[avail].onoff,
INIT_OBJ_RES(ON_OFF_RID, res[avail], i, res_inst[avail], j, 1, false,
true, &buzzer_data[avail].onoff,
sizeof(buzzer_data[avail].onoff),
NULL, NULL, NULL, onoff_post_write_cb, NULL);
INIT_OBJ_RES_DATA(BUZZER_LEVEL_ID, res[avail], i, res_inst[avail], j,
INIT_OBJ_RES_DATA(LEVEL_RID, res[avail], i, res_inst[avail], j,
&buzzer_data[avail].level,
sizeof(buzzer_data[avail].level));
INIT_OBJ_RES_DATA(BUZZER_DELAY_DURATION_ID, res[avail], i,
res_inst[avail], j,
INIT_OBJ_RES_DATA(DELAY_DURATION_RID, res[avail], i, res_inst[avail], j,
&buzzer_data[avail].delay_duration,
sizeof(buzzer_data[avail].delay_duration));
INIT_OBJ_RES_DATA(BUZZER_MINIMUM_OFF_TIME_ID, res[avail], i,
res_inst[avail], j,
&buzzer_data[avail].min_off_time,
INIT_OBJ_RES_DATA(MINIMUM_OFF_TIME_RID, res[avail], i, res_inst[avail],
j, &buzzer_data[avail].min_off_time,
sizeof(buzzer_data[avail].min_off_time));
INIT_OBJ_RES_OPTDATA(BUZZER_APPLICATION_TYPE_ID, res[avail], i,
INIT_OBJ_RES_OPTDATA(APPLICATION_TYPE_RID, res[avail], i,
res_inst[avail], j);
INIT_OBJ_RES_DATA(BUZZER_DIGITAL_STATE_ID, res[avail], i,
res_inst[avail], j,
&buzzer_data[avail].active,
INIT_OBJ_RES_DATA(DIGITAL_INPUT_STATE_RID, res[avail], i,
res_inst[avail], j, &buzzer_data[avail].active,
sizeof(buzzer_data[avail].active));
inst[avail].resources = res[avail];

View file

@ -22,20 +22,11 @@ LOG_MODULE_REGISTER(LOG_MODULE_NAME);
#include "lwm2m_object.h"
#include "lwm2m_engine.h"
#include "lwm2m_resource_ids.h"
#define LIGHT_VERSION_MAJOR 1
#define LIGHT_VERSION_MINOR 0
/* Server resource IDs */
#define LIGHT_ON_OFF_ID 5850
#define LIGHT_DIMMER_ID 5851
#define LIGHT_ON_TIME_ID 5852
#define LIGHT_CUMULATIVE_ACTIVE_POWER_ID 5805
#define LIGHT_POWER_FACTOR_ID 5820
#define LIGHT_COLOUR_ID 5706
#define LIGHT_SENSOR_UNITS_ID 5701
#define LIGHT_APPLICATION_TYPE_ID 5750
#define LIGHT_MAX_ID 8
#define MAX_INSTANCE_COUNT CONFIG_LWM2M_IPSO_LIGHT_CONTROL_INSTANCE_COUNT
@ -61,14 +52,14 @@ static char units[MAX_INSTANCE_COUNT][LIGHT_STRING_SHORT];
static struct lwm2m_engine_obj light_control;
static struct lwm2m_engine_obj_field fields[] = {
OBJ_FIELD_DATA(LIGHT_ON_OFF_ID, RW, BOOL),
OBJ_FIELD_DATA(LIGHT_DIMMER_ID, RW_OPT, U8),
OBJ_FIELD_DATA(LIGHT_ON_TIME_ID, RW_OPT, S32),
OBJ_FIELD_DATA(LIGHT_CUMULATIVE_ACTIVE_POWER_ID, R_OPT, FLOAT32),
OBJ_FIELD_DATA(LIGHT_POWER_FACTOR_ID, R_OPT, FLOAT32),
OBJ_FIELD_DATA(LIGHT_COLOUR_ID, RW_OPT, STRING),
OBJ_FIELD_DATA(LIGHT_SENSOR_UNITS_ID, R_OPT, STRING),
OBJ_FIELD_DATA(LIGHT_APPLICATION_TYPE_ID, RW_OPT, STRING),
OBJ_FIELD_DATA(ON_OFF_RID, RW, BOOL),
OBJ_FIELD_DATA(DIMMER_RID, RW_OPT, U8),
OBJ_FIELD_DATA(ON_TIME_RID, RW_OPT, S32),
OBJ_FIELD_DATA(CUMULATIVE_ACTIVE_POWER_RID, R_OPT, FLOAT32),
OBJ_FIELD_DATA(POWER_FACTOR_RID, R_OPT, FLOAT32),
OBJ_FIELD_DATA(COLOUR_RID, RW_OPT, STRING),
OBJ_FIELD_DATA(SENSOR_UNITS_RID, R_OPT, STRING),
OBJ_FIELD_DATA(APPLICATION_TYPE_RID, RW_OPT, STRING),
};
static struct lwm2m_engine_obj_inst inst[MAX_INSTANCE_COUNT];
@ -169,29 +160,24 @@ static struct lwm2m_engine_obj_inst *light_control_create(uint16_t obj_inst_id)
init_res_instance(res_inst[avail], ARRAY_SIZE(res_inst[avail]));
/* initialize instance resource data */
INIT_OBJ_RES_DATA(LIGHT_ON_OFF_ID, res[avail], i, res_inst[avail], j,
INIT_OBJ_RES_DATA(ON_OFF_RID, res[avail], i, res_inst[avail], j,
&on_off_value[avail], sizeof(*on_off_value));
INIT_OBJ_RES_DATA(LIGHT_DIMMER_ID, res[avail], i, res_inst[avail], j,
INIT_OBJ_RES_DATA(DIMMER_RID, res[avail], i, res_inst[avail], j,
&dimmer_value[avail], sizeof(*dimmer_value));
INIT_OBJ_RES(LIGHT_ON_TIME_ID, res[avail], i,
res_inst[avail], j, 1, false, true,
&on_time_value[avail], sizeof(*on_time_value),
INIT_OBJ_RES(ON_TIME_RID, res[avail], i, res_inst[avail], j, 1, false,
true, &on_time_value[avail], sizeof(*on_time_value),
on_time_read_cb, NULL, NULL, on_time_post_write_cb, NULL);
INIT_OBJ_RES_DATA(LIGHT_CUMULATIVE_ACTIVE_POWER_ID, res[avail], i,
res_inst[avail], j,
&cumulative_active_value[avail],
INIT_OBJ_RES_DATA(CUMULATIVE_ACTIVE_POWER_RID, res[avail], i,
res_inst[avail], j, &cumulative_active_value[avail],
sizeof(*cumulative_active_value));
INIT_OBJ_RES_DATA(LIGHT_POWER_FACTOR_ID, res[avail], i,
res_inst[avail], j,
INIT_OBJ_RES_DATA(POWER_FACTOR_RID, res[avail], i, res_inst[avail], j,
&power_factor_value[avail],
sizeof(*power_factor_value));
INIT_OBJ_RES_DATA(LIGHT_COLOUR_ID, res[avail], i,
res_inst[avail], j,
INIT_OBJ_RES_DATA(COLOUR_RID, res[avail], i, res_inst[avail], j,
colour[avail], LIGHT_STRING_LONG);
INIT_OBJ_RES_DATA(LIGHT_SENSOR_UNITS_ID, res[avail], i,
res_inst[avail], j,
INIT_OBJ_RES_DATA(SENSOR_UNITS_RID, res[avail], i, res_inst[avail], j,
units[avail], LIGHT_STRING_SHORT);
INIT_OBJ_RES_OPTDATA(LIGHT_APPLICATION_TYPE_ID, res[avail], i,
INIT_OBJ_RES_OPTDATA(APPLICATION_TYPE_RID, res[avail], i,
res_inst[avail], j);
inst[avail].resources = res[avail];

View file

@ -20,6 +20,7 @@ LOG_MODULE_REGISTER(LOG_MODULE_NAME);
#include "lwm2m_object.h"
#include "lwm2m_engine.h"
#include "lwm2m_resource_ids.h"
#define SWITCH_VERSION_MAJOR 1
#define SWITCH_VERSION_MINOR 0
@ -30,15 +31,7 @@ LOG_MODULE_REGISTER(LOG_MODULE_NAME);
#define ADD_TIMESTAMPS 0
#endif
/* resource IDs */
#define SWITCH_DIGITAL_STATE_ID 5500
#define SWITCH_DIGITAL_INPUT_COUNTER_ID 5501
#define SWITCH_ON_TIME_ID 5852
#define SWITCH_OFF_TIME_ID 5854
#define SWITCH_APPLICATION_TYPE_ID 5750
#if ADD_TIMESTAMPS
#define SWITCH_TIMESTAMP_ID 5518
#define SWITCH_MAX_ID 6
#else
#define SWITCH_MAX_ID 5
@ -67,13 +60,13 @@ static struct ipso_switch_data switch_data[MAX_INSTANCE_COUNT];
static struct lwm2m_engine_obj onoff_switch;
static struct lwm2m_engine_obj_field fields[] = {
OBJ_FIELD_DATA(SWITCH_DIGITAL_STATE_ID, R, BOOL),
OBJ_FIELD_DATA(SWITCH_DIGITAL_INPUT_COUNTER_ID, R_OPT, U64),
OBJ_FIELD_DATA(SWITCH_ON_TIME_ID, RW_OPT, U64),
OBJ_FIELD_DATA(SWITCH_OFF_TIME_ID, RW_OPT, U64),
OBJ_FIELD_DATA(SWITCH_APPLICATION_TYPE_ID, RW_OPT, STRING),
OBJ_FIELD_DATA(DIGITAL_INPUT_STATE_RID, R, BOOL),
OBJ_FIELD_DATA(DIGITAL_INPUT_COUNTER_RID, R_OPT, U64),
OBJ_FIELD_DATA(ON_TIME_RID, RW_OPT, U64),
OBJ_FIELD_DATA(OFF_TIME_RID, RW_OPT, U64),
OBJ_FIELD_DATA(APPLICATION_TYPE_RID, RW_OPT, STRING),
#if ADD_TIMESTAMPS
OBJ_FIELD_DATA(SWITCH_TIMESTAMP_ID, RW_OPT, TIME),
OBJ_FIELD_DATA(TIMESTAMP_RID, RW_OPT, TIME),
#endif
};
@ -213,26 +206,23 @@ static struct lwm2m_engine_obj_inst *switch_create(uint16_t obj_inst_id)
init_res_instance(res_inst[avail], ARRAY_SIZE(res_inst[avail]));
/* initialize instance resource data */
INIT_OBJ_RES(SWITCH_DIGITAL_STATE_ID, res[avail], i,
res_inst[avail], j, 1, false, true,
&switch_data[avail].state,
INIT_OBJ_RES(DIGITAL_INPUT_STATE_RID, res[avail], i, res_inst[avail],
j, 1, false, true, &switch_data[avail].state,
sizeof(switch_data[avail].state),
NULL, NULL, NULL, state_post_write_cb, NULL);
INIT_OBJ_RES_DATA(SWITCH_DIGITAL_INPUT_COUNTER_ID, res[avail], i,
res_inst[avail], j,
&switch_data[avail].counter,
INIT_OBJ_RES_DATA(DIGITAL_INPUT_COUNTER_RID, res[avail], i,
res_inst[avail], j, &switch_data[avail].counter,
sizeof(switch_data[avail].counter));
INIT_OBJ_RES_OPT(SWITCH_ON_TIME_ID, res[avail], i,
INIT_OBJ_RES_OPT(ON_TIME_RID, res[avail], i,
res_inst[avail], j, 1, false, true,
on_time_read_cb, NULL, NULL, time_post_write_cb, NULL);
INIT_OBJ_RES_OPT(SWITCH_OFF_TIME_ID, res[avail], i,
INIT_OBJ_RES_OPT(OFF_TIME_RID, res[avail], i,
res_inst[avail], j, 1, false, true,
off_time_read_cb, NULL, NULL, time_post_write_cb, NULL);
INIT_OBJ_RES_OPTDATA(SWITCH_APPLICATION_TYPE_ID, res[avail], i,
INIT_OBJ_RES_OPTDATA(APPLICATION_TYPE_RID, res[avail], i,
res_inst[avail], j);
#if ADD_TIMESTAMPS
INIT_OBJ_RES_OPTDATA(SWITCH_TIMESTAMP_ID, res[avail], i,
res_inst[avail], j);
INIT_OBJ_RES_OPTDATA(TIMESTAMP_RID, res[avail], i, res_inst[avail], j);
#endif
inst[avail].resources = res[avail];

View file

@ -20,6 +20,7 @@ LOG_MODULE_REGISTER(LOG_MODULE_NAME);
#include "lwm2m_object.h"
#include "lwm2m_engine.h"
#include "lwm2m_resource_ids.h"
#define BUTTON_VERSION_MAJOR 1
#define BUTTON_VERSION_MINOR 0
@ -30,13 +31,7 @@ LOG_MODULE_REGISTER(LOG_MODULE_NAME);
#define ADD_TIMESTAMPS 0
#endif
/* resource IDs */
#define BUTTON_DIGITAL_STATE_ID 5500
#define BUTTON_DIGITAL_INPUT_COUNTER_ID 5501
#define BUTTON_APPLICATION_TYPE_ID 5750
#if ADD_TIMESTAMPS
#define BUTTON_TIMESTAMP_ID 5518
#define BUTTON_MAX_ID 4
#else
#define BUTTON_MAX_ID 3
@ -62,11 +57,11 @@ static struct ipso_button_data button_data[MAX_INSTANCE_COUNT];
static struct lwm2m_engine_obj onoff_switch;
static struct lwm2m_engine_obj_field fields[] = {
OBJ_FIELD_DATA(BUTTON_DIGITAL_STATE_ID, R, BOOL),
OBJ_FIELD_DATA(BUTTON_DIGITAL_INPUT_COUNTER_ID, R_OPT, U64),
OBJ_FIELD_DATA(BUTTON_APPLICATION_TYPE_ID, RW_OPT, STRING),
OBJ_FIELD_DATA(DIGITAL_INPUT_STATE_RID, R, BOOL),
OBJ_FIELD_DATA(DIGITAL_INPUT_COUNTER_RID, R_OPT, U64),
OBJ_FIELD_DATA(APPLICATION_TYPE_RID, RW_OPT, STRING),
#if ADD_TIMESTAMPS
OBJ_FIELD_DATA(BUTTON_TIMESTAMP_ID, RW_OPT, TIME),
OBJ_FIELD_DATA(TIMESTAMP_RID, RW_OPT, TIME),
#endif
};
@ -145,20 +140,18 @@ static struct lwm2m_engine_obj_inst *button_create(uint16_t obj_inst_id)
init_res_instance(res_inst[avail], ARRAY_SIZE(res_inst[avail]));
/* initialize instance resource data */
INIT_OBJ_RES(BUTTON_DIGITAL_STATE_ID, res[avail], i,
res_inst[avail], j, 1, false, true,
&button_data[avail].state,
INIT_OBJ_RES(DIGITAL_INPUT_STATE_RID, res[avail], i, res_inst[avail],
j, 1, false, true, &button_data[avail].state,
sizeof(button_data[avail].state),
NULL, NULL, NULL, state_post_write_cb, NULL);
INIT_OBJ_RES_DATA(BUTTON_DIGITAL_INPUT_COUNTER_ID, res[avail], i,
INIT_OBJ_RES_DATA(DIGITAL_INPUT_COUNTER_RID, res[avail], i,
res_inst[avail], j,
&button_data[avail].counter,
sizeof(button_data[avail].counter));
INIT_OBJ_RES_OPTDATA(BUTTON_APPLICATION_TYPE_ID, res[avail], i,
INIT_OBJ_RES_OPTDATA(APPLICATION_TYPE_RID, res[avail], i,
res_inst[avail], j);
#if ADD_TIMESTAMPS
INIT_OBJ_RES_OPTDATA(BUTTON_TIMESTAMP_ID, res[avail], i,
res_inst[avail], j);
INIT_OBJ_RES_OPTDATA(TIMESTAMP_RID, res[avail], i, res_inst[avail], j);
#endif
inst[avail].resources = res[avail];

View file

@ -22,6 +22,7 @@ LOG_MODULE_REGISTER(LOG_MODULE_NAME);
#include "lwm2m_object.h"
#include "lwm2m_engine.h"
#include "lwm2m_resource_ids.h"
#define TEMP_VERSION_MAJOR 1
#define TEMP_VERSION_MINOR 0
@ -32,17 +33,7 @@ LOG_MODULE_REGISTER(LOG_MODULE_NAME);
#define ADD_TIMESTAMPS 0
#endif
/* Server resource IDs */
#define TEMP_SENSOR_VALUE_ID 5700
#define TEMP_UNITS_ID 5701
#define TEMP_MIN_MEASURED_VALUE_ID 5601
#define TEMP_MAX_MEASURED_VALUE_ID 5602
#define TEMP_MIN_RANGE_VALUE_ID 5603
#define TEMP_MAX_RANGE_VALUE_ID 5604
#define TEMP_RESET_MIN_MAX_MEASURED_VALUES_ID 5605
#if ADD_TIMESTAMPS
#define TEMP_TIMESTAMP_ID 5518
#define TEMP_MAX_ID 8
#else /* !ADD_TIMESTAMPS */
#define TEMP_MAX_ID 7
@ -69,13 +60,13 @@ static float32_value_t max_range_value[MAX_INSTANCE_COUNT];
static struct lwm2m_engine_obj temp_sensor;
static struct lwm2m_engine_obj_field fields[] = {
OBJ_FIELD_DATA(TEMP_SENSOR_VALUE_ID, R, FLOAT32),
OBJ_FIELD_DATA(TEMP_UNITS_ID, R_OPT, STRING),
OBJ_FIELD_DATA(TEMP_MIN_MEASURED_VALUE_ID, R_OPT, FLOAT32),
OBJ_FIELD_DATA(TEMP_MAX_MEASURED_VALUE_ID, R_OPT, FLOAT32),
OBJ_FIELD_DATA(TEMP_MIN_RANGE_VALUE_ID, R_OPT, FLOAT32),
OBJ_FIELD_DATA(TEMP_MAX_RANGE_VALUE_ID, R_OPT, FLOAT32),
OBJ_FIELD_EXECUTE_OPT(TEMP_RESET_MIN_MAX_MEASURED_VALUES_ID),
OBJ_FIELD_DATA(SENSOR_VALUE_RID, R, FLOAT32),
OBJ_FIELD_DATA(SENSOR_UNITS_RID, R_OPT, STRING),
OBJ_FIELD_DATA(MIN_MEASURED_VALUE_RID, R_OPT, FLOAT32),
OBJ_FIELD_DATA(MAX_MEASURED_VALUE_RID, R_OPT, FLOAT32),
OBJ_FIELD_DATA(MIN_RANGE_VALUE_RID, R_OPT, FLOAT32),
OBJ_FIELD_DATA(MAX_RANGE_VALUE_RID, R_OPT, FLOAT32),
OBJ_FIELD_EXECUTE_OPT(RESET_MIN_MAX_MEASURED_VALUES_RID),
#if ADD_TIMESTAMPS
OBJ_FIELD_DATA(TEMP_TIMESTAMP_ID, RW_OPT, TIME),
#endif
@ -91,7 +82,7 @@ static void update_min_measured(uint16_t obj_inst_id, int index)
min_measured_value[index].val1 = sensor_value[index].val1;
min_measured_value[index].val2 = sensor_value[index].val2;
NOTIFY_OBSERVER(IPSO_OBJECT_TEMP_SENSOR_ID, obj_inst_id,
TEMP_MIN_MEASURED_VALUE_ID);
MIN_MEASURED_VALUE_RID);
}
static void update_max_measured(uint16_t obj_inst_id, int index)
@ -99,7 +90,7 @@ static void update_max_measured(uint16_t obj_inst_id, int index)
max_measured_value[index].val1 = sensor_value[index].val1;
max_measured_value[index].val2 = sensor_value[index].val2;
NOTIFY_OBSERVER(IPSO_OBJECT_TEMP_SENSOR_ID, obj_inst_id,
TEMP_MAX_MEASURED_VALUE_ID);
MAX_MEASURED_VALUE_RID);
}
static int reset_min_max_measured_values_cb(uint16_t obj_inst_id,
@ -205,25 +196,25 @@ static struct lwm2m_engine_obj_inst *temp_sensor_create(uint16_t obj_inst_id)
init_res_instance(res_inst[index], ARRAY_SIZE(res_inst[index]));
/* initialize instance resource data */
INIT_OBJ_RES(TEMP_SENSOR_VALUE_ID, res[index], i,
INIT_OBJ_RES(SENSOR_VALUE_RID, res[index], i,
res_inst[index], j, 1, false, true,
&sensor_value[index], sizeof(*sensor_value),
NULL, NULL, NULL, sensor_value_write_cb, NULL);
INIT_OBJ_RES_DATA(TEMP_UNITS_ID, res[index], i, res_inst[index], j,
INIT_OBJ_RES_DATA(SENSOR_UNITS_RID, res[index], i, res_inst[index], j,
units[index], TEMP_STRING_SHORT);
INIT_OBJ_RES_DATA(TEMP_MIN_MEASURED_VALUE_ID, res[index], i,
INIT_OBJ_RES_DATA(MIN_MEASURED_VALUE_RID, res[index], i,
res_inst[index], j, &min_measured_value[index],
sizeof(*min_measured_value));
INIT_OBJ_RES_DATA(TEMP_MAX_MEASURED_VALUE_ID, res[index], i,
INIT_OBJ_RES_DATA(MAX_MEASURED_VALUE_RID, res[index], i,
res_inst[index], j, &max_measured_value[index],
sizeof(*max_measured_value));
INIT_OBJ_RES_DATA(TEMP_MIN_RANGE_VALUE_ID, res[index], i,
INIT_OBJ_RES_DATA(MIN_RANGE_VALUE_RID, res[index], i,
res_inst[index], j, &min_range_value[index],
sizeof(*min_range_value));
INIT_OBJ_RES_DATA(TEMP_MAX_RANGE_VALUE_ID, res[index], i,
INIT_OBJ_RES_DATA(MAX_RANGE_VALUE_RID, res[index], i,
res_inst[index], j, &max_range_value[index],
sizeof(*max_range_value));
INIT_OBJ_RES_EXECUTE(TEMP_RESET_MIN_MAX_MEASURED_VALUES_ID,
INIT_OBJ_RES_EXECUTE(RESET_MIN_MAX_MEASURED_VALUES_RID,
res[index], i, reset_min_max_measured_values_cb);
#if ADD_TIMESTAMPS
INIT_OBJ_RES_OPTDATA(TEMP_TIMESTAMP_ID, res[index], i,

View file

@ -20,23 +20,11 @@ LOG_MODULE_REGISTER(LOG_MODULE_NAME);
#include "lwm2m_object.h"
#include "lwm2m_engine.h"
#include "lwm2m_resource_ids.h"
#define TIMER_VERSION_MAJOR 1
#define TIMER_VERSION_MINOR 0
/* Server resource IDs */
#define TIMER_DELAY_DURATION_ID 5521
#define TIMER_REMAINING_TIME_ID 5538
#define TIMER_MINIMUM_OFF_TIME_ID 5525
#define TIMER_TRIGGER_ID 5523
#define TIMER_ON_OFF_ID 5850
#define TIMER_DIGITAL_INPUT_COUNTER_ID 5501
#define TIMER_CUMULATIVE_TIME_ID 5544
#define TIMER_DIGITAL_STATE_ID 5543
#define TIMER_COUNTER_ID 5534
#define TIMER_MODE_ID 5526
#define TIMER_APPLICATION_TYPE_ID 5750
#define TIMER_MAX_ID 11
#define MAX_INSTANCE_COUNT CONFIG_LWM2M_IPSO_TIMER_INSTANCE_COUNT
@ -79,17 +67,17 @@ static struct ipso_timer_data timer_data[MAX_INSTANCE_COUNT];
static struct lwm2m_engine_obj timer;
static struct lwm2m_engine_obj_field fields[] = {
OBJ_FIELD_DATA(TIMER_DELAY_DURATION_ID, RW, FLOAT64),
OBJ_FIELD_DATA(TIMER_REMAINING_TIME_ID, R_OPT, FLOAT64),
OBJ_FIELD_DATA(TIMER_MINIMUM_OFF_TIME_ID, RW_OPT, FLOAT64),
OBJ_FIELD_EXECUTE_OPT(TIMER_TRIGGER_ID),
OBJ_FIELD_DATA(TIMER_ON_OFF_ID, RW_OPT, BOOL),
OBJ_FIELD_DATA(TIMER_DIGITAL_INPUT_COUNTER_ID, RW_OPT, U32), /* TODO */
OBJ_FIELD_DATA(TIMER_CUMULATIVE_TIME_ID, RW_OPT, FLOAT64),
OBJ_FIELD_DATA(TIMER_DIGITAL_STATE_ID, R_OPT, BOOL),
OBJ_FIELD_DATA(TIMER_COUNTER_ID, R_OPT, U32),
OBJ_FIELD_DATA(TIMER_MODE_ID, RW_OPT, U8),
OBJ_FIELD_DATA(TIMER_APPLICATION_TYPE_ID, RW_OPT, STRING),
OBJ_FIELD_DATA(DELAY_DURATION_RID, RW, FLOAT64),
OBJ_FIELD_DATA(REMAINING_TIME_RID, R_OPT, FLOAT64),
OBJ_FIELD_DATA(MINIMUM_OFF_TIME_RID, RW_OPT, FLOAT64),
OBJ_FIELD_EXECUTE_OPT(TRIGGER_RID),
OBJ_FIELD_DATA(ON_OFF_RID, RW_OPT, BOOL),
OBJ_FIELD_DATA(DIGITAL_INPUT_COUNTER_RID, RW_OPT, U32), /* TODO */
OBJ_FIELD_DATA(CUMULATIVE_TIME_RID, RW_OPT, FLOAT64),
OBJ_FIELD_DATA(DIGITAL_STATE_RID, R_OPT, BOOL),
OBJ_FIELD_DATA(COUNTER_RID, R_OPT, U32),
OBJ_FIELD_DATA(TIMER_MODE_RID, RW_OPT, U8),
OBJ_FIELD_DATA(APPLICATION_TYPE_RID, RW_OPT, STRING),
};
static struct lwm2m_engine_obj_inst inst[MAX_INSTANCE_COUNT];
@ -152,7 +140,7 @@ static int start_timer(struct ipso_timer_data *timer)
timer->trigger_counter += 1U;
snprintk(path, MAX_RESOURCE_LEN, "%d/%u/%d", IPSO_OBJECT_TIMER_ID,
timer->obj_inst_id, TIMER_DIGITAL_STATE_ID);
timer->obj_inst_id, DIGITAL_STATE_RID);
lwm2m_engine_set_bool(path, true);
float2ms(&timer->delay_duration, &temp);
@ -172,7 +160,7 @@ static int stop_timer(struct ipso_timer_data *timer, bool cancel)
timer->cumulative_time_ms += k_uptime_get() - timer->trigger_offset;
snprintk(path, MAX_RESOURCE_LEN, "%d/%u/%d", IPSO_OBJECT_TIMER_ID,
timer->obj_inst_id, TIMER_DIGITAL_STATE_ID);
timer->obj_inst_id, DIGITAL_STATE_RID);
lwm2m_engine_set_bool(path, false);
if (cancel) {
@ -340,42 +328,37 @@ static struct lwm2m_engine_obj_inst *timer_create(uint16_t obj_inst_id)
init_res_instance(res_inst[avail], ARRAY_SIZE(res_inst[avail]));
/* initialize instance resource data */
INIT_OBJ_RES_DATA(TIMER_DELAY_DURATION_ID, res[avail], i,
INIT_OBJ_RES_DATA(DELAY_DURATION_RID, res[avail], i,
res_inst[avail], j, &timer_data[avail].delay_duration,
sizeof(timer_data[avail].delay_duration));
INIT_OBJ_RES(TIMER_REMAINING_TIME_ID, res[avail], i,
res_inst[avail], j, 1, false, true,
&timer_data[avail].remaining_time,
INIT_OBJ_RES(REMAINING_TIME_RID, res[avail], i, res_inst[avail], j, 1,
false, true, &timer_data[avail].remaining_time,
sizeof(timer_data[avail].remaining_time),
remaining_time_read_cb, NULL, NULL, NULL, NULL);
INIT_OBJ_RES_DATA(TIMER_MINIMUM_OFF_TIME_ID, res[avail], i,
INIT_OBJ_RES_DATA(MINIMUM_OFF_TIME_RID, res[avail], i,
res_inst[avail], j, &timer_data[avail].min_off_time,
sizeof(timer_data[avail].min_off_time));
INIT_OBJ_RES_EXECUTE(TIMER_TRIGGER_ID, res[avail], i,
timer_trigger_cb);
INIT_OBJ_RES(TIMER_ON_OFF_ID, res[avail], i,
res_inst[avail], j, 1, false, true,
&timer_data[avail].enabled,
INIT_OBJ_RES_EXECUTE(TRIGGER_RID, res[avail], i, timer_trigger_cb);
INIT_OBJ_RES(ON_OFF_RID, res[avail], i, res_inst[avail], j, 1, false,
true, &timer_data[avail].enabled,
sizeof(timer_data[avail].enabled),
NULL, NULL, NULL, enabled_post_write_cb, NULL);
INIT_OBJ_RES(TIMER_CUMULATIVE_TIME_ID, res[avail], i,
res_inst[avail], j, 1, false, true,
&timer_data[avail].cumulative_time,
INIT_OBJ_RES(CUMULATIVE_TIME_RID, res[avail], i, res_inst[avail], j, 1,
false, true, &timer_data[avail].cumulative_time,
sizeof(timer_data[avail].cumulative_time),
cumulative_time_read_cb, NULL, NULL,
cumulative_time_post_write_cb, NULL);
INIT_OBJ_RES_DATA(TIMER_DIGITAL_STATE_ID, res[avail], i,
INIT_OBJ_RES_DATA(DIGITAL_STATE_RID, res[avail], i,
res_inst[avail], j, &timer_data[avail].active,
sizeof(timer_data[avail].active));
INIT_OBJ_RES(TIMER_COUNTER_ID, res[avail], i,
res_inst[avail], j, 1, false, true,
&timer_data[avail].trigger_counter,
INIT_OBJ_RES(COUNTER_RID, res[avail], i, res_inst[avail], j, 1, false,
true, &timer_data[avail].trigger_counter,
sizeof(timer_data[avail].trigger_counter),
NULL, NULL, NULL, trigger_counter_post_write_cb, NULL);
INIT_OBJ_RES_DATA(TIMER_MODE_ID, res[avail], i, res_inst[avail], j,
INIT_OBJ_RES_DATA(TIMER_MODE_RID, res[avail], i, res_inst[avail], j,
&timer_data[avail].timer_mode,
sizeof(timer_data[avail].timer_mode));
INIT_OBJ_RES_OPTDATA(TIMER_APPLICATION_TYPE_ID, res[avail], i,
INIT_OBJ_RES_OPTDATA(APPLICATION_TYPE_RID, res[avail], i,
res_inst[avail], j);
inst[avail].resources = res[avail];

View file

@ -10,7 +10,18 @@
#define __LWM2M_RESOURCE_IDS__
/* clang-format off */
#define DIGITAL_INPUT_STATE_RID 5500
#define DIGITAL_INPUT_COUNTER_RID 5501
#define TIMESTAMP_RID 5518
#define DELAY_DURATION_RID 5521
#define TRIGGER_RID 5523
#define MINIMUM_OFF_TIME_RID 5525
#define TIMER_MODE_RID 5526
#define COUNTER_RID 5534
#define REMAINING_TIME_RID 5538
#define DIGITAL_STATE_RID 5543
#define CUMULATIVE_TIME_RID 5544
#define LEVEL_RID 5548
#define MIN_MEASURED_VALUE_RID 5601
#define MAX_MEASURED_VALUE_RID 5602
#define MIN_RANGE_VALUE_RID 5603
@ -18,8 +29,21 @@
#define RESET_MIN_MAX_MEASURED_VALUES_RID 5605
#define SENSOR_VALUE_RID 5700
#define SENSOR_UNITS_RID 5701
#define X_VALUE_RID 5702
#define Y_VALUE_RID 5703
#define Z_VALUE_RID 5704
#define COLOUR_RID 5706
#define APPLICATION_TYPE_RID 5750
#define SENSOR_TYPE_RID 5751
#define CUMULATIVE_ACTIVE_POWER_RID 5805
#define POWER_FACTOR_RID 5820
#define ON_OFF_RID 5850
#define DIMMER_RID 5851
#define ON_TIME_RID 5852
#define OFF_TIME_RID 5854
#define MEASUREMENT_QUALITY_INDICATOR_RID 6042
#define MEASUREMENT_QUALITY_LEVEL_RID 6049
#define FRACTIONAL_TIMESTAMP_RID 6050
/* clang-format on */
#endif /* __LWM2M_RESOURCE_IDS__ */