Commit 083f3065 authored by Robert Lubos's avatar Robert Lubos Committed by Carles Cufi
Browse files

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: default avatarRobert Lubos <robert.lubos@nordicsemi.no>
parent b474e0a8
Loading
Loading
Loading
Loading
+13 −10
Original line number Diff line number Diff line
@@ -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);
+5 −2
Original line number Diff line number Diff line
@@ -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;
+0 −19
Original line number Diff line number Diff line
@@ -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);
+15 −17
Original line number Diff line number Diff line
@@ -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