From 083f3065b44af834f3cdd6d527507b9927f46b62 Mon Sep 17 00:00:00 2001 From: Robert Lubos Date: Tue, 7 Sep 2021 11:27:11 +0200 Subject: [PATCH] net: lwm2m: Remove LWM2M_RES_TYPE_U64 type Since it's not possible to encode full range of 64-bit unsigned integer, remove this type from the LwM2M implementation, and replace its uses with 64-bit signed integer. Signed-off-by: Robert Lubos --- subsys/net/lib/lwm2m/ipso_onoff_switch.c | 23 +++++++++-------- subsys/net/lib/lwm2m/ipso_push_button.c | 7 ++++-- subsys/net/lib/lwm2m/lwm2m_engine.c | 19 -------------- subsys/net/lib/lwm2m/lwm2m_object.h | 32 +++++++++++------------- 4 files changed, 33 insertions(+), 48 deletions(-) diff --git a/subsys/net/lib/lwm2m/ipso_onoff_switch.c b/subsys/net/lib/lwm2m/ipso_onoff_switch.c index 1c1ebc95581..89737422e79 100644 --- a/subsys/net/lib/lwm2m/ipso_onoff_switch.c +++ b/subsys/net/lib/lwm2m/ipso_onoff_switch.c @@ -43,9 +43,9 @@ LOG_MODULE_REGISTER(LOG_MODULE_NAME); /* resource state */ struct ipso_switch_data { uint64_t trigger_offset; - uint64_t on_time_sec; - uint64_t off_time_sec; - uint64_t counter; + int64_t on_time_sec; + int64_t off_time_sec; + int64_t counter; uint16_t obj_inst_id; bool last_state; bool state; @@ -56,9 +56,9 @@ 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(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(DIGITAL_INPUT_COUNTER_RID, R_OPT, S64), + OBJ_FIELD_DATA(ON_TIME_RID, RW_OPT, S64), + OBJ_FIELD_DATA(OFF_TIME_RID, RW_OPT, S64), OBJ_FIELD_DATA(APPLICATION_TYPE_RID, RW_OPT, STRING), #if defined(CONFIG_LWM2M_IPSO_ONOFF_SWITCH_VERSION_1_1) OBJ_FIELD_DATA(TIMESTAMP_RID, R_OPT, TIME), @@ -101,14 +101,17 @@ static int state_post_write_cb(uint16_t obj_inst_id, if (switch_data[i].state) { /* reset off time */ - switch_data[i].off_time_sec = 0U; + switch_data[i].off_time_sec = 0; if (!switch_data[i].last_state) { /* off to on transition */ switch_data[i].counter++; + if (switch_data[i].counter < 0) { + switch_data[i].counter = 0; + } } } else { /* reset on time */ - switch_data[i].on_time_sec = 0U; + switch_data[i].on_time_sec = 0; } switch_data[i].last_state = switch_data[i].state; @@ -128,7 +131,7 @@ static void *on_time_read_cb(uint16_t obj_inst_id, if (switch_data[i].state) { switch_data[i].on_time_sec = - (k_uptime_get() - switch_data[i].trigger_offset) / 1000; + (int64_t)((k_uptime_get() - switch_data[i].trigger_offset) / 1000); } *data_len = sizeof(switch_data[i].on_time_sec); @@ -147,7 +150,7 @@ static void *off_time_read_cb(uint16_t obj_inst_id, if (!switch_data[i].state) { switch_data[i].off_time_sec = - (k_uptime_get() - switch_data[i].trigger_offset) / 1000; + (int64_t)((k_uptime_get() - switch_data[i].trigger_offset) / 1000); } *data_len = sizeof(switch_data[i].off_time_sec); diff --git a/subsys/net/lib/lwm2m/ipso_push_button.c b/subsys/net/lib/lwm2m/ipso_push_button.c index e464a2c1f2b..c0092f44476 100644 --- a/subsys/net/lib/lwm2m/ipso_push_button.c +++ b/subsys/net/lib/lwm2m/ipso_push_button.c @@ -42,7 +42,7 @@ LOG_MODULE_REGISTER(LOG_MODULE_NAME); /* resource state */ struct ipso_button_data { - uint64_t counter; + int64_t counter; uint16_t obj_inst_id; bool last_state; bool state; @@ -53,7 +53,7 @@ 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(DIGITAL_INPUT_STATE_RID, R, BOOL), - OBJ_FIELD_DATA(DIGITAL_INPUT_COUNTER_RID, R_OPT, U64), + OBJ_FIELD_DATA(DIGITAL_INPUT_COUNTER_RID, R_OPT, S64), OBJ_FIELD_DATA(APPLICATION_TYPE_RID, RW_OPT, STRING), #if defined(CONFIG_LWM2M_IPSO_PUSH_BUTTON_VERSION_1_1) OBJ_FIELD_DATA(TIMESTAMP_RID, R_OPT, TIME), @@ -97,6 +97,9 @@ static int state_post_write_cb(uint16_t obj_inst_id, if (button_data[i].state && !button_data[i].last_state) { /* off to on transition */ button_data[i].counter++; + if (button_data[i].counter < 0) { + button_data[i].counter = 0; + } } button_data[i].last_state = button_data[i].state; diff --git a/subsys/net/lib/lwm2m/lwm2m_engine.c b/subsys/net/lib/lwm2m/lwm2m_engine.c index 3e899948f97..7640c681ced 100644 --- a/subsys/net/lib/lwm2m/lwm2m_engine.c +++ b/subsys/net/lib/lwm2m/lwm2m_engine.c @@ -1605,10 +1605,6 @@ static int lwm2m_engine_set(char *pathstr, void *value, uint16_t len) ((uint8_t *)data_ptr)[len] = '\0'; break; - case LWM2M_RES_TYPE_U64: - *((uint64_t *)data_ptr) = *(uint64_t *)value; - break; - case LWM2M_RES_TYPE_U32: case LWM2M_RES_TYPE_TIME: *((uint32_t *)data_ptr) = *(uint32_t *)value; @@ -1855,10 +1851,6 @@ static int lwm2m_engine_get(char *pathstr, void *buf, uint16_t buflen) strncpy((uint8_t *)buf, (uint8_t *)data_ptr, buflen); break; - case LWM2M_RES_TYPE_U64: - *(uint64_t *)buf = *(uint64_t *)data_ptr; - break; - case LWM2M_RES_TYPE_U32: case LWM2M_RES_TYPE_TIME: *(uint32_t *)buf = *(uint32_t *)data_ptr; @@ -2358,11 +2350,6 @@ static int lwm2m_read_handler(struct lwm2m_engine_obj_inst *obj_inst, strlen((uint8_t *)data_ptr)); break; - case LWM2M_RES_TYPE_U64: - engine_put_s64(&msg->out, &msg->path, - (int64_t)*(uint64_t *)data_ptr); - break; - case LWM2M_RES_TYPE_U32: case LWM2M_RES_TYPE_TIME: engine_put_s64(&msg->out, &msg->path, @@ -2632,12 +2619,6 @@ int lwm2m_write_handler(struct lwm2m_engine_obj_inst *obj_inst, len = strlen((char *)write_buf); break; - case LWM2M_RES_TYPE_U64: - engine_get_s64(&msg->in, &temp64); - *(uint64_t *)write_buf = temp64; - len = 8; - break; - case LWM2M_RES_TYPE_U32: case LWM2M_RES_TYPE_TIME: engine_get_s64(&msg->in, &temp64); diff --git a/subsys/net/lib/lwm2m/lwm2m_object.h b/subsys/net/lib/lwm2m/lwm2m_object.h index eb94b68932e..b8db79c51cc 100644 --- a/subsys/net/lib/lwm2m/lwm2m_object.h +++ b/subsys/net/lib/lwm2m/lwm2m_object.h @@ -109,23 +109,21 @@ #define LWM2M_RES_TYPE_NONE 0 #define LWM2M_RES_TYPE_OPAQUE 1 #define LWM2M_RES_TYPE_STRING 2 -#define LWM2M_RES_TYPE_UINT64 3 -#define LWM2M_RES_TYPE_U64 3 -#define LWM2M_RES_TYPE_UINT 4 -#define LWM2M_RES_TYPE_U32 4 -#define LWM2M_RES_TYPE_U16 5 -#define LWM2M_RES_TYPE_U8 6 -#define LWM2M_RES_TYPE_INT64 7 -#define LWM2M_RES_TYPE_S64 7 -#define LWM2M_RES_TYPE_INT 8 -#define LWM2M_RES_TYPE_S32 8 -#define LWM2M_RES_TYPE_S16 9 -#define LWM2M_RES_TYPE_S8 10 -#define LWM2M_RES_TYPE_BOOL 11 -#define LWM2M_RES_TYPE_TIME 12 -#define LWM2M_RES_TYPE_FLOAT32 13 -#define LWM2M_RES_TYPE_FLOAT64 14 -#define LWM2M_RES_TYPE_OBJLNK 15 +#define LWM2M_RES_TYPE_UINT 3 +#define LWM2M_RES_TYPE_U32 3 +#define LWM2M_RES_TYPE_U16 4 +#define LWM2M_RES_TYPE_U8 5 +#define LWM2M_RES_TYPE_INT64 6 +#define LWM2M_RES_TYPE_S64 6 +#define LWM2M_RES_TYPE_INT 7 +#define LWM2M_RES_TYPE_S32 7 +#define LWM2M_RES_TYPE_S16 8 +#define LWM2M_RES_TYPE_S8 9 +#define LWM2M_RES_TYPE_BOOL 10 +#define LWM2M_RES_TYPE_TIME 11 +#define LWM2M_RES_TYPE_FLOAT32 12 +#define LWM2M_RES_TYPE_FLOAT64 13 +#define LWM2M_RES_TYPE_OBJLNK 14 /* remember that we have already output a value - can be between two block's */ #define WRITER_OUTPUT_VALUE 1