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 <robert.lubos@nordicsemi.no>
This commit is contained in:
Robert Lubos 2021-09-07 11:27:11 +02:00 committed by Carles Cufí
commit 083f3065b4
4 changed files with 33 additions and 48 deletions

View file

@ -43,9 +43,9 @@ LOG_MODULE_REGISTER(LOG_MODULE_NAME);
/* resource state */ /* resource state */
struct ipso_switch_data { struct ipso_switch_data {
uint64_t trigger_offset; uint64_t trigger_offset;
uint64_t on_time_sec; int64_t on_time_sec;
uint64_t off_time_sec; int64_t off_time_sec;
uint64_t counter; int64_t counter;
uint16_t obj_inst_id; uint16_t obj_inst_id;
bool last_state; bool last_state;
bool 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 onoff_switch;
static struct lwm2m_engine_obj_field fields[] = { static struct lwm2m_engine_obj_field fields[] = {
OBJ_FIELD_DATA(DIGITAL_INPUT_STATE_RID, R, BOOL), 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(ON_TIME_RID, RW_OPT, U64), OBJ_FIELD_DATA(ON_TIME_RID, RW_OPT, S64),
OBJ_FIELD_DATA(OFF_TIME_RID, RW_OPT, U64), OBJ_FIELD_DATA(OFF_TIME_RID, RW_OPT, S64),
OBJ_FIELD_DATA(APPLICATION_TYPE_RID, RW_OPT, STRING), OBJ_FIELD_DATA(APPLICATION_TYPE_RID, RW_OPT, STRING),
#if defined(CONFIG_LWM2M_IPSO_ONOFF_SWITCH_VERSION_1_1) #if defined(CONFIG_LWM2M_IPSO_ONOFF_SWITCH_VERSION_1_1)
OBJ_FIELD_DATA(TIMESTAMP_RID, R_OPT, TIME), 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) { if (switch_data[i].state) {
/* reset off time */ /* reset off time */
switch_data[i].off_time_sec = 0U; switch_data[i].off_time_sec = 0;
if (!switch_data[i].last_state) { if (!switch_data[i].last_state) {
/* off to on transition */ /* off to on transition */
switch_data[i].counter++; switch_data[i].counter++;
if (switch_data[i].counter < 0) {
switch_data[i].counter = 0;
}
} }
} else { } else {
/* reset on time */ /* 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; 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) { if (switch_data[i].state) {
switch_data[i].on_time_sec = 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); *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) { if (!switch_data[i].state) {
switch_data[i].off_time_sec = 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); *data_len = sizeof(switch_data[i].off_time_sec);

View file

@ -42,7 +42,7 @@ LOG_MODULE_REGISTER(LOG_MODULE_NAME);
/* resource state */ /* resource state */
struct ipso_button_data { struct ipso_button_data {
uint64_t counter; int64_t counter;
uint16_t obj_inst_id; uint16_t obj_inst_id;
bool last_state; bool last_state;
bool 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 onoff_switch;
static struct lwm2m_engine_obj_field fields[] = { static struct lwm2m_engine_obj_field fields[] = {
OBJ_FIELD_DATA(DIGITAL_INPUT_STATE_RID, R, BOOL), 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), OBJ_FIELD_DATA(APPLICATION_TYPE_RID, RW_OPT, STRING),
#if defined(CONFIG_LWM2M_IPSO_PUSH_BUTTON_VERSION_1_1) #if defined(CONFIG_LWM2M_IPSO_PUSH_BUTTON_VERSION_1_1)
OBJ_FIELD_DATA(TIMESTAMP_RID, R_OPT, TIME), 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) { if (button_data[i].state && !button_data[i].last_state) {
/* off to on transition */ /* off to on transition */
button_data[i].counter++; button_data[i].counter++;
if (button_data[i].counter < 0) {
button_data[i].counter = 0;
}
} }
button_data[i].last_state = button_data[i].state; button_data[i].last_state = button_data[i].state;

View file

@ -1605,10 +1605,6 @@ static int lwm2m_engine_set(char *pathstr, void *value, uint16_t len)
((uint8_t *)data_ptr)[len] = '\0'; ((uint8_t *)data_ptr)[len] = '\0';
break; break;
case LWM2M_RES_TYPE_U64:
*((uint64_t *)data_ptr) = *(uint64_t *)value;
break;
case LWM2M_RES_TYPE_U32: case LWM2M_RES_TYPE_U32:
case LWM2M_RES_TYPE_TIME: case LWM2M_RES_TYPE_TIME:
*((uint32_t *)data_ptr) = *(uint32_t *)value; *((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); strncpy((uint8_t *)buf, (uint8_t *)data_ptr, buflen);
break; break;
case LWM2M_RES_TYPE_U64:
*(uint64_t *)buf = *(uint64_t *)data_ptr;
break;
case LWM2M_RES_TYPE_U32: case LWM2M_RES_TYPE_U32:
case LWM2M_RES_TYPE_TIME: case LWM2M_RES_TYPE_TIME:
*(uint32_t *)buf = *(uint32_t *)data_ptr; *(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)); strlen((uint8_t *)data_ptr));
break; 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_U32:
case LWM2M_RES_TYPE_TIME: case LWM2M_RES_TYPE_TIME:
engine_put_s64(&msg->out, &msg->path, 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); len = strlen((char *)write_buf);
break; 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_U32:
case LWM2M_RES_TYPE_TIME: case LWM2M_RES_TYPE_TIME:
engine_get_s64(&msg->in, &temp64); engine_get_s64(&msg->in, &temp64);

View file

@ -109,23 +109,21 @@
#define LWM2M_RES_TYPE_NONE 0 #define LWM2M_RES_TYPE_NONE 0
#define LWM2M_RES_TYPE_OPAQUE 1 #define LWM2M_RES_TYPE_OPAQUE 1
#define LWM2M_RES_TYPE_STRING 2 #define LWM2M_RES_TYPE_STRING 2
#define LWM2M_RES_TYPE_UINT64 3 #define LWM2M_RES_TYPE_UINT 3
#define LWM2M_RES_TYPE_U64 3 #define LWM2M_RES_TYPE_U32 3
#define LWM2M_RES_TYPE_UINT 4 #define LWM2M_RES_TYPE_U16 4
#define LWM2M_RES_TYPE_U32 4 #define LWM2M_RES_TYPE_U8 5
#define LWM2M_RES_TYPE_U16 5 #define LWM2M_RES_TYPE_INT64 6
#define LWM2M_RES_TYPE_U8 6 #define LWM2M_RES_TYPE_S64 6
#define LWM2M_RES_TYPE_INT64 7 #define LWM2M_RES_TYPE_INT 7
#define LWM2M_RES_TYPE_S64 7 #define LWM2M_RES_TYPE_S32 7
#define LWM2M_RES_TYPE_INT 8 #define LWM2M_RES_TYPE_S16 8
#define LWM2M_RES_TYPE_S32 8 #define LWM2M_RES_TYPE_S8 9
#define LWM2M_RES_TYPE_S16 9 #define LWM2M_RES_TYPE_BOOL 10
#define LWM2M_RES_TYPE_S8 10 #define LWM2M_RES_TYPE_TIME 11
#define LWM2M_RES_TYPE_BOOL 11 #define LWM2M_RES_TYPE_FLOAT32 12
#define LWM2M_RES_TYPE_TIME 12 #define LWM2M_RES_TYPE_FLOAT64 13
#define LWM2M_RES_TYPE_FLOAT32 13 #define LWM2M_RES_TYPE_OBJLNK 14
#define LWM2M_RES_TYPE_FLOAT64 14
#define LWM2M_RES_TYPE_OBJLNK 15
/* remember that we have already output a value - can be between two block's */ /* remember that we have already output a value - can be between two block's */
#define WRITER_OUTPUT_VALUE 1 #define WRITER_OUTPUT_VALUE 1