diff --git a/include/net/lwm2m.h b/include/net/lwm2m.h index 6a636d6b5b0..9f21b16ef09 100644 --- a/include/net/lwm2m.h +++ b/include/net/lwm2m.h @@ -378,19 +378,6 @@ typedef struct float32_value { int32_t val2; } float32_value_t; -/** - * @brief Maximum precision value for 64-bit LwM2M float val2 - */ -#define LWM2M_FLOAT64_DEC_MAX 1000000000LL - -/** - * @brief 32-bit variant of the LwM2M float structure - */ -typedef struct float64_value { - int64_t val1; - int64_t val2; -} float64_value_t; - /** * @brief Maximum value for ObjLnk resource fields */ @@ -579,16 +566,6 @@ int lwm2m_engine_set_bool(char *pathstr, bool value); */ int lwm2m_engine_set_float32(char *pathstr, float32_value_t *value); -/** - * @brief Set resource (instance) value (64-bit float structure) - * - * @param[in] pathstr LwM2M path string "obj/obj-inst/res(/res-inst)" - * @param[in] value 64-bit float value - * - * @return 0 for success or negative in case of error. - */ -int lwm2m_engine_set_float64(char *pathstr, float64_value_t *value); - /** * @brief Set resource (instance) value (ObjLnk) * @@ -721,16 +698,6 @@ int lwm2m_engine_get_bool(char *pathstr, bool *value); */ int lwm2m_engine_get_float32(char *pathstr, float32_value_t *buf); -/** - * @brief Get resource (instance) value (64-bit float structure) - * - * @param[in] pathstr LwM2M path string "obj/obj-inst/res(/res-inst)" - * @param[out] buf 64-bit float buffer to copy data into - * - * @return 0 for success or negative in case of error. - */ -int lwm2m_engine_get_float64(char *pathstr, float64_value_t *buf); - /** * @brief Get resource (instance) value (ObjLnk) * diff --git a/subsys/net/lib/lwm2m/ipso_accelerometer.c b/subsys/net/lib/lwm2m/ipso_accelerometer.c index 3e8c1281cb9..bd509cdf4d0 100644 --- a/subsys/net/lib/lwm2m/ipso_accelerometer.c +++ b/subsys/net/lib/lwm2m/ipso_accelerometer.c @@ -53,16 +53,16 @@ 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(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(X_VALUE_RID, R, FLOAT), + OBJ_FIELD_DATA(Y_VALUE_RID, R_OPT, FLOAT), + OBJ_FIELD_DATA(Z_VALUE_RID, R_OPT, FLOAT), 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), + OBJ_FIELD_DATA(MIN_RANGE_VALUE_RID, R_OPT, FLOAT), + OBJ_FIELD_DATA(MAX_RANGE_VALUE_RID, R_OPT, FLOAT), #if defined(CONFIG_LWM2M_IPSO_ACCELEROMETER_VERSION_1_1) OBJ_FIELD_DATA(APPLICATION_TYPE_RID, RW_OPT, STRING), OBJ_FIELD_DATA(TIMESTAMP_RID, R_OPT, TIME), - OBJ_FIELD_DATA(FRACTIONAL_TIMESTAMP_RID, R_OPT, FLOAT32), + OBJ_FIELD_DATA(FRACTIONAL_TIMESTAMP_RID, R_OPT, FLOAT), OBJ_FIELD_DATA(MEASUREMENT_QUALITY_INDICATOR_RID, R_OPT, U8), OBJ_FIELD_DATA(MEASUREMENT_QUALITY_LEVEL_RID, R_OPT, U8), #endif diff --git a/subsys/net/lib/lwm2m/ipso_buzzer.c b/subsys/net/lib/lwm2m/ipso_buzzer.c index 6c6b337f4ba..21026bb3df7 100644 --- a/subsys/net/lib/lwm2m/ipso_buzzer.c +++ b/subsys/net/lib/lwm2m/ipso_buzzer.c @@ -44,8 +44,8 @@ LOG_MODULE_REGISTER(LOG_MODULE_NAME); /* resource state */ struct ipso_buzzer_data { float32_value_t level; - float64_value_t delay_duration; - float64_value_t min_off_time; + float32_value_t delay_duration; + float32_value_t min_off_time; uint64_t trigger_offset; @@ -61,9 +61,9 @@ 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(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(LEVEL_RID, RW_OPT, FLOAT), + OBJ_FIELD_DATA(DELAY_DURATION_RID, RW_OPT, FLOAT), + OBJ_FIELD_DATA(MINIMUM_OFF_TIME_RID, RW, FLOAT), 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 @@ -72,7 +72,7 @@ static struct lwm2m_engine_obj_field fields[] = { OBJ_FIELD_DATA(DIGITAL_INPUT_STATE_RID, R, BOOL), #if defined(CONFIG_LWM2M_IPSO_BUZZER_VERSION_1_1) OBJ_FIELD_DATA(TIMESTAMP_RID, R_OPT, TIME), - OBJ_FIELD_DATA(FRACTIONAL_TIMESTAMP_RID, R_OPT, FLOAT32), + OBJ_FIELD_DATA(FRACTIONAL_TIMESTAMP_RID, R_OPT, FLOAT), #endif }; @@ -81,10 +81,10 @@ static struct lwm2m_engine_res res[MAX_INSTANCE_COUNT][BUZZER_MAX_ID]; static struct lwm2m_engine_res_inst res_inst[MAX_INSTANCE_COUNT][RESOURCE_INSTANCE_COUNT]; -static int float2ms(float64_value_t *f, uint32_t *ms) +static int float2ms(float32_value_t *f, uint32_t *ms) { *ms = f->val1 * MSEC_PER_SEC; - *ms += f->val2 / (LWM2M_FLOAT64_DEC_MAX / MSEC_PER_SEC); + *ms += f->val2 / (LWM2M_FLOAT32_DEC_MAX / MSEC_PER_SEC); return 0; } diff --git a/subsys/net/lib/lwm2m/ipso_generic_sensor.c b/subsys/net/lib/lwm2m/ipso_generic_sensor.c index 86fb7da3877..96cd6fae30c 100644 --- a/subsys/net/lib/lwm2m/ipso_generic_sensor.c +++ b/subsys/net/lib/lwm2m/ipso_generic_sensor.c @@ -67,18 +67,18 @@ static char sensor_type[MAX_INSTANCE_COUNT][SENSOR_TYPE_STR_MAX_SIZE]; static struct lwm2m_engine_obj sensor; static struct lwm2m_engine_obj_field fields[] = { - OBJ_FIELD_DATA(SENSOR_VALUE_RID, R, FLOAT32), + OBJ_FIELD_DATA(SENSOR_VALUE_RID, R, FLOAT), 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_DATA(MIN_MEASURED_VALUE_RID, R_OPT, FLOAT), + OBJ_FIELD_DATA(MAX_MEASURED_VALUE_RID, R_OPT, FLOAT), + OBJ_FIELD_DATA(MIN_RANGE_VALUE_RID, R_OPT, FLOAT), + OBJ_FIELD_DATA(MAX_RANGE_VALUE_RID, R_OPT, FLOAT), OBJ_FIELD_EXECUTE_OPT(RESET_MIN_MAX_MEASURED_VALUES_RID), OBJ_FIELD_DATA(APPLICATION_TYPE_RID, RW_OPT, STRING), OBJ_FIELD_DATA(SENSOR_TYPE_RID, R_OPT, STRING), #if defined(CONFIG_LWM2M_IPSO_GENERIC_SENSOR_VERSION_1_1) OBJ_FIELD_DATA(TIMESTAMP_RID, R_OPT, TIME), - OBJ_FIELD_DATA(FRACTIONAL_TIMESTAMP_RID, R_OPT, FLOAT32), + OBJ_FIELD_DATA(FRACTIONAL_TIMESTAMP_RID, R_OPT, FLOAT), OBJ_FIELD_DATA(MEASUREMENT_QUALITY_INDICATOR_RID, R_OPT, U8), OBJ_FIELD_DATA(MEASUREMENT_QUALITY_LEVEL_RID, R_OPT, U8), #endif diff --git a/subsys/net/lib/lwm2m/ipso_humidity_sensor.c b/subsys/net/lib/lwm2m/ipso_humidity_sensor.c index 2ab0c6c0243..91a81500735 100644 --- a/subsys/net/lib/lwm2m/ipso_humidity_sensor.c +++ b/subsys/net/lib/lwm2m/ipso_humidity_sensor.c @@ -54,17 +54,17 @@ static float32_value_t max_range_value[MAX_INSTANCE_COUNT]; static struct lwm2m_engine_obj sensor; static struct lwm2m_engine_obj_field fields[] = { - OBJ_FIELD_DATA(SENSOR_VALUE_RID, R, FLOAT32), + OBJ_FIELD_DATA(SENSOR_VALUE_RID, R, FLOAT), 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_DATA(MIN_MEASURED_VALUE_RID, R_OPT, FLOAT), + OBJ_FIELD_DATA(MAX_MEASURED_VALUE_RID, R_OPT, FLOAT), + OBJ_FIELD_DATA(MIN_RANGE_VALUE_RID, R_OPT, FLOAT), + OBJ_FIELD_DATA(MAX_RANGE_VALUE_RID, R_OPT, FLOAT), OBJ_FIELD_EXECUTE_OPT(RESET_MIN_MAX_MEASURED_VALUES_RID), #if defined(CONFIG_LWM2M_IPSO_HUMIDITY_SENSOR_VERSION_1_1) OBJ_FIELD_DATA(APPLICATION_TYPE_RID, RW_OPT, STRING), OBJ_FIELD_DATA(TIMESTAMP_RID, R_OPT, TIME), - OBJ_FIELD_DATA(FRACTIONAL_TIMESTAMP_RID, R_OPT, FLOAT32), + OBJ_FIELD_DATA(FRACTIONAL_TIMESTAMP_RID, R_OPT, FLOAT), OBJ_FIELD_DATA(MEASUREMENT_QUALITY_INDICATOR_RID, R_OPT, U8), OBJ_FIELD_DATA(MEASUREMENT_QUALITY_LEVEL_RID, R_OPT, U8), #endif diff --git a/subsys/net/lib/lwm2m/ipso_light_control.c b/subsys/net/lib/lwm2m/ipso_light_control.c index 9ef21e74b75..3a76b425a97 100644 --- a/subsys/net/lib/lwm2m/ipso_light_control.c +++ b/subsys/net/lib/lwm2m/ipso_light_control.c @@ -55,8 +55,8 @@ static struct lwm2m_engine_obj_field fields[] = { 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(CUMULATIVE_ACTIVE_POWER_RID, R_OPT, FLOAT), + OBJ_FIELD_DATA(POWER_FACTOR_RID, R_OPT, FLOAT), 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), diff --git a/subsys/net/lib/lwm2m/ipso_onoff_switch.c b/subsys/net/lib/lwm2m/ipso_onoff_switch.c index 89737422e79..1e23ef60cd4 100644 --- a/subsys/net/lib/lwm2m/ipso_onoff_switch.c +++ b/subsys/net/lib/lwm2m/ipso_onoff_switch.c @@ -62,7 +62,7 @@ static struct lwm2m_engine_obj_field fields[] = { 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), - OBJ_FIELD_DATA(FRACTIONAL_TIMESTAMP_RID, R_OPT, FLOAT32), + OBJ_FIELD_DATA(FRACTIONAL_TIMESTAMP_RID, R_OPT, FLOAT), #endif }; diff --git a/subsys/net/lib/lwm2m/ipso_pressure_sensor.c b/subsys/net/lib/lwm2m/ipso_pressure_sensor.c index b71667202bc..72b115b0b8a 100644 --- a/subsys/net/lib/lwm2m/ipso_pressure_sensor.c +++ b/subsys/net/lib/lwm2m/ipso_pressure_sensor.c @@ -54,18 +54,18 @@ static float32_value_t max_range_value[MAX_INSTANCE_COUNT]; static struct lwm2m_engine_obj sensor; static struct lwm2m_engine_obj_field fields[] = { - OBJ_FIELD_DATA(SENSOR_VALUE_RID, R, FLOAT32), + OBJ_FIELD_DATA(SENSOR_VALUE_RID, R, FLOAT), 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_DATA(MIN_MEASURED_VALUE_RID, R_OPT, FLOAT), + OBJ_FIELD_DATA(MAX_MEASURED_VALUE_RID, R_OPT, FLOAT), + OBJ_FIELD_DATA(MIN_RANGE_VALUE_RID, R_OPT, FLOAT), + OBJ_FIELD_DATA(MAX_RANGE_VALUE_RID, R_OPT, FLOAT), OBJ_FIELD_EXECUTE_OPT(RESET_MIN_MAX_MEASURED_VALUES_RID), - OBJ_FIELD_DATA(CURRENT_CALIBRATION_RID, R_OPT, FLOAT32), + OBJ_FIELD_DATA(CURRENT_CALIBRATION_RID, R_OPT, FLOAT), OBJ_FIELD_DATA(APPLICATION_TYPE_RID, RW_OPT, STRING), #if defined(CONFIG_LWM2M_IPSO_PRESSURE_SENSOR_VERSION_1_1) OBJ_FIELD_DATA(TIMESTAMP_RID, R_OPT, TIME), - OBJ_FIELD_DATA(FRACTIONAL_TIMESTAMP_RID, R_OPT, FLOAT32), + OBJ_FIELD_DATA(FRACTIONAL_TIMESTAMP_RID, R_OPT, FLOAT), OBJ_FIELD_DATA(MEASUREMENT_QUALITY_INDICATOR_RID, R_OPT, U8), OBJ_FIELD_DATA(MEASUREMENT_QUALITY_LEVEL_RID, R_OPT, U8), #endif diff --git a/subsys/net/lib/lwm2m/ipso_push_button.c b/subsys/net/lib/lwm2m/ipso_push_button.c index c0092f44476..c1224c7ab0b 100644 --- a/subsys/net/lib/lwm2m/ipso_push_button.c +++ b/subsys/net/lib/lwm2m/ipso_push_button.c @@ -57,7 +57,7 @@ static struct lwm2m_engine_obj_field fields[] = { 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), - OBJ_FIELD_DATA(FRACTIONAL_TIMESTAMP_RID, R_OPT, FLOAT32), + OBJ_FIELD_DATA(FRACTIONAL_TIMESTAMP_RID, R_OPT, FLOAT), #endif }; diff --git a/subsys/net/lib/lwm2m/ipso_temp_sensor.c b/subsys/net/lib/lwm2m/ipso_temp_sensor.c index 0577482e068..7bcb65e91bf 100644 --- a/subsys/net/lib/lwm2m/ipso_temp_sensor.c +++ b/subsys/net/lib/lwm2m/ipso_temp_sensor.c @@ -55,17 +55,17 @@ 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(SENSOR_VALUE_RID, R, FLOAT32), + OBJ_FIELD_DATA(SENSOR_VALUE_RID, R, FLOAT), 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_DATA(MIN_MEASURED_VALUE_RID, R_OPT, FLOAT), + OBJ_FIELD_DATA(MAX_MEASURED_VALUE_RID, R_OPT, FLOAT), + OBJ_FIELD_DATA(MIN_RANGE_VALUE_RID, R_OPT, FLOAT), + OBJ_FIELD_DATA(MAX_RANGE_VALUE_RID, R_OPT, FLOAT), OBJ_FIELD_EXECUTE_OPT(RESET_MIN_MAX_MEASURED_VALUES_RID), #if defined(CONFIG_LWM2M_IPSO_TEMP_SENSOR_VERSION_1_1) OBJ_FIELD_DATA(APPLICATION_TYPE_RID, RW_OPT, STRING), OBJ_FIELD_DATA(TIMESTAMP_RID, R_OPT, TIME), - OBJ_FIELD_DATA(FRACTIONAL_TIMESTAMP_RID, R_OPT, FLOAT32), + OBJ_FIELD_DATA(FRACTIONAL_TIMESTAMP_RID, R_OPT, FLOAT), OBJ_FIELD_DATA(MEASUREMENT_QUALITY_INDICATOR_RID, R_OPT, U8), OBJ_FIELD_DATA(MEASUREMENT_QUALITY_LEVEL_RID, R_OPT, U8), #endif diff --git a/subsys/net/lib/lwm2m/ipso_timer.c b/subsys/net/lib/lwm2m/ipso_timer.c index 50d26deb048..d62f2707340 100644 --- a/subsys/net/lib/lwm2m/ipso_timer.c +++ b/subsys/net/lib/lwm2m/ipso_timer.c @@ -46,10 +46,10 @@ enum ipso_timer_mode { /* resource state */ struct ipso_timer_data { - float64_value_t delay_duration; - float64_value_t remaining_time; - float64_value_t min_off_time; - float64_value_t cumulative_time; + float32_value_t delay_duration; + float32_value_t remaining_time; + float32_value_t min_off_time; + float32_value_t cumulative_time; uint64_t trigger_offset; uint32_t trigger_counter; @@ -67,13 +67,13 @@ 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(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_DATA(DELAY_DURATION_RID, RW, FLOAT), + OBJ_FIELD_DATA(REMAINING_TIME_RID, R_OPT, FLOAT), + OBJ_FIELD_DATA(MINIMUM_OFF_TIME_RID, RW_OPT, FLOAT), 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(CUMULATIVE_TIME_RID, RW_OPT, FLOAT), 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), @@ -85,18 +85,18 @@ static struct lwm2m_engine_res res[MAX_INSTANCE_COUNT][TIMER_MAX_ID]; static struct lwm2m_engine_res_inst res_inst[MAX_INSTANCE_COUNT][RESOURCE_INSTANCE_COUNT]; -static int ms2float(uint32_t ms, float64_value_t *f) +static int ms2float(uint32_t ms, float32_value_t *f) { f->val1 = ms / MSEC_PER_SEC; - f->val2 = (ms % MSEC_PER_SEC) * (LWM2M_FLOAT64_DEC_MAX / MSEC_PER_SEC); + f->val2 = (ms % MSEC_PER_SEC) * (LWM2M_FLOAT32_DEC_MAX / MSEC_PER_SEC); return 0; } -static int float2ms(float64_value_t *f, uint32_t *ms) +static int float2ms(float32_value_t *f, uint32_t *ms) { *ms = f->val1 * MSEC_PER_SEC; - *ms += f->val2 / (LWM2M_FLOAT64_DEC_MAX / MSEC_PER_SEC); + *ms += f->val2 / (LWM2M_FLOAT32_DEC_MAX / MSEC_PER_SEC); return 0; } diff --git a/subsys/net/lib/lwm2m/lwm2m_engine.c b/subsys/net/lib/lwm2m/lwm2m_engine.c index 7640c681ced..3de2aca8a77 100644 --- a/subsys/net/lib/lwm2m/lwm2m_engine.c +++ b/subsys/net/lib/lwm2m/lwm2m_engine.c @@ -1638,20 +1638,13 @@ static int lwm2m_engine_set(char *pathstr, void *value, uint16_t len) *((bool *)data_ptr) = *(bool *)value; break; - case LWM2M_RES_TYPE_FLOAT32: + case LWM2M_RES_TYPE_FLOAT: ((float32_value_t *)data_ptr)->val1 = ((float32_value_t *)value)->val1; ((float32_value_t *)data_ptr)->val2 = ((float32_value_t *)value)->val2; break; - case LWM2M_RES_TYPE_FLOAT64: - ((float64_value_t *)data_ptr)->val1 = - ((float64_value_t *)value)->val1; - ((float64_value_t *)data_ptr)->val2 = - ((float64_value_t *)value)->val2; - break; - case LWM2M_RES_TYPE_OBJLNK: *((struct lwm2m_objlnk *)data_ptr) = *(struct lwm2m_objlnk *)value; @@ -1740,11 +1733,6 @@ int lwm2m_engine_set_float32(char *pathstr, float32_value_t *value) return lwm2m_engine_set(pathstr, value, sizeof(float32_value_t)); } -int lwm2m_engine_set_float64(char *pathstr, float64_value_t *value) -{ - return lwm2m_engine_set(pathstr, value, sizeof(float64_value_t)); -} - int lwm2m_engine_set_objlnk(char *pathstr, struct lwm2m_objlnk *value) { return lwm2m_engine_set(pathstr, value, sizeof(struct lwm2m_objlnk)); @@ -1884,20 +1872,13 @@ static int lwm2m_engine_get(char *pathstr, void *buf, uint16_t buflen) *(bool *)buf = *(bool *)data_ptr; break; - case LWM2M_RES_TYPE_FLOAT32: + case LWM2M_RES_TYPE_FLOAT: ((float32_value_t *)buf)->val1 = ((float32_value_t *)data_ptr)->val1; ((float32_value_t *)buf)->val2 = ((float32_value_t *)data_ptr)->val2; break; - case LWM2M_RES_TYPE_FLOAT64: - ((float64_value_t *)buf)->val1 = - ((float64_value_t *)data_ptr)->val1; - ((float64_value_t *)buf)->val2 = - ((float64_value_t *)data_ptr)->val2; - break; - case LWM2M_RES_TYPE_OBJLNK: *(struct lwm2m_objlnk *)buf = *(struct lwm2m_objlnk *)data_ptr; @@ -1982,11 +1963,6 @@ int lwm2m_engine_get_float32(char *pathstr, float32_value_t *buf) return lwm2m_engine_get(pathstr, buf, sizeof(float32_value_t)); } -int lwm2m_engine_get_float64(char *pathstr, float64_value_t *buf) -{ - return lwm2m_engine_get(pathstr, buf, sizeof(float64_value_t)); -} - int lwm2m_engine_get_objlnk(char *pathstr, struct lwm2m_objlnk *buf) { return lwm2m_engine_get(pathstr, buf, sizeof(struct lwm2m_objlnk)); @@ -2391,16 +2367,11 @@ static int lwm2m_read_handler(struct lwm2m_engine_obj_inst *obj_inst, *(bool *)data_ptr); break; - case LWM2M_RES_TYPE_FLOAT32: + case LWM2M_RES_TYPE_FLOAT: engine_put_float32fix(&msg->out, &msg->path, (float32_value_t *)data_ptr); break; - case LWM2M_RES_TYPE_FLOAT64: - engine_put_float64fix(&msg->out, &msg->path, - (float64_value_t *)data_ptr); - break; - case LWM2M_RES_TYPE_OBJLNK: engine_put_objlnk(&msg->out, &msg->path, (struct lwm2m_objlnk *)data_ptr); @@ -2665,18 +2636,12 @@ int lwm2m_write_handler(struct lwm2m_engine_obj_inst *obj_inst, len = 1; break; - case LWM2M_RES_TYPE_FLOAT32: + case LWM2M_RES_TYPE_FLOAT: engine_get_float32fix(&msg->in, (float32_value_t *)write_buf); len = sizeof(float32_value_t); break; - case LWM2M_RES_TYPE_FLOAT64: - engine_get_float64fix(&msg->in, - (float64_value_t *)write_buf); - len = sizeof(float64_value_t); - break; - case LWM2M_RES_TYPE_OBJLNK: engine_get_objlnk(&msg->in, (struct lwm2m_objlnk *)write_buf); diff --git a/subsys/net/lib/lwm2m/lwm2m_obj_location.c b/subsys/net/lib/lwm2m/lwm2m_obj_location.c index 848a94b5cc3..c682f28386e 100644 --- a/subsys/net/lib/lwm2m/lwm2m_obj_location.c +++ b/subsys/net/lib/lwm2m/lwm2m_obj_location.c @@ -46,13 +46,13 @@ static int32_t timestamp; static struct lwm2m_engine_obj location; static struct lwm2m_engine_obj_field fields[] = { - OBJ_FIELD_DATA(LOCATION_LATITUDE_ID, R, FLOAT32), - OBJ_FIELD_DATA(LOCATION_LONGITUDE_ID, R, FLOAT32), - OBJ_FIELD_DATA(LOCATION_ALTITUDE_ID, R_OPT, FLOAT32), - OBJ_FIELD_DATA(LOCATION_RADIUS_ID, R_OPT, FLOAT32), + OBJ_FIELD_DATA(LOCATION_LATITUDE_ID, R, FLOAT), + OBJ_FIELD_DATA(LOCATION_LONGITUDE_ID, R, FLOAT), + OBJ_FIELD_DATA(LOCATION_ALTITUDE_ID, R_OPT, FLOAT), + OBJ_FIELD_DATA(LOCATION_RADIUS_ID, R_OPT, FLOAT), OBJ_FIELD_DATA(LOCATION_VELOCITY_ID, R_OPT, OPAQUE), OBJ_FIELD_DATA(LOCATION_TIMESTAMP_ID, R, TIME), - OBJ_FIELD_DATA(LOCATION_SPEED_ID, R_OPT, FLOAT32), + OBJ_FIELD_DATA(LOCATION_SPEED_ID, R_OPT, FLOAT), }; static struct lwm2m_engine_obj_inst inst; diff --git a/subsys/net/lib/lwm2m/lwm2m_object.h b/subsys/net/lib/lwm2m/lwm2m_object.h index b8db79c51cc..67eb5b62da6 100644 --- a/subsys/net/lib/lwm2m/lwm2m_object.h +++ b/subsys/net/lib/lwm2m/lwm2m_object.h @@ -121,9 +121,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 +#define LWM2M_RES_TYPE_FLOAT 12 +#define LWM2M_RES_TYPE_OBJLNK 13 /* remember that we have already output a value - can be between two block's */ #define WRITER_OUTPUT_VALUE 1 @@ -516,9 +515,6 @@ struct lwm2m_writer { size_t (*put_float32fix)(struct lwm2m_output_context *out, struct lwm2m_obj_path *path, float32_value_t *value); - size_t (*put_float64fix)(struct lwm2m_output_context *out, - struct lwm2m_obj_path *path, - float64_value_t *value); size_t (*put_bool)(struct lwm2m_output_context *out, struct lwm2m_obj_path *path, bool value); @@ -541,8 +537,6 @@ struct lwm2m_reader { uint8_t *buf, size_t buflen); size_t (*get_float32fix)(struct lwm2m_input_context *in, float32_value_t *value); - size_t (*get_float64fix)(struct lwm2m_input_context *in, - float64_value_t *value); size_t (*get_bool)(struct lwm2m_input_context *in, bool *value); size_t (*get_opaque)(struct lwm2m_input_context *in, @@ -713,13 +707,6 @@ static inline size_t engine_put_float32fix(struct lwm2m_output_context *out, return out->writer->put_float32fix(out, path, value); } -static inline size_t engine_put_float64fix(struct lwm2m_output_context *out, - struct lwm2m_obj_path *path, - float64_value_t *value) -{ - return out->writer->put_float64fix(out, path, value); -} - static inline size_t engine_put_bool(struct lwm2m_output_context *out, struct lwm2m_obj_path *path, bool value) @@ -779,12 +766,6 @@ static inline size_t engine_get_float32fix(struct lwm2m_input_context *in, return in->reader->get_float32fix(in, value); } -static inline size_t engine_get_float64fix(struct lwm2m_input_context *in, - float64_value_t *value) -{ - return in->reader->get_float64fix(in, value); -} - static inline size_t engine_get_bool(struct lwm2m_input_context *in, bool *value) { diff --git a/subsys/net/lib/lwm2m/lwm2m_rw_json.c b/subsys/net/lib/lwm2m/lwm2m_rw_json.c index 4ea9c625af7..5b56b5f6b25 100644 --- a/subsys/net/lib/lwm2m/lwm2m_rw_json.c +++ b/subsys/net/lib/lwm2m/lwm2m_rw_json.c @@ -502,18 +502,6 @@ static size_t put_float32fix(struct lwm2m_output_context *out, return len; } -static size_t put_float64fix(struct lwm2m_output_context *out, - struct lwm2m_obj_path *path, - float64_value_t *value) -{ - size_t len; - - len = put_json_prefix(out, path, "\"v\""); - len += plain_text_put_float64fix(out, path, value); - len += put_json_postfix(out); - return len; -} - static size_t put_bool(struct lwm2m_output_context *out, struct lwm2m_obj_path *path, bool value) @@ -648,21 +636,6 @@ static size_t get_float32fix(struct lwm2m_input_context *in, return len; } -static size_t get_float64fix(struct lwm2m_input_context *in, - float64_value_t *value) -{ - int64_t tmp1, tmp2; - size_t len; - - len = read_number(in, &tmp1, &tmp2, true, true); - if (len > 0) { - value->val1 = tmp1; - value->val2 = tmp2; - } - - return len; -} - static size_t get_bool(struct lwm2m_input_context *in, bool *value) { struct json_in_formatter_data *fd; @@ -734,7 +707,6 @@ const struct lwm2m_writer json_writer = { .put_s64 = put_s64, .put_string = put_string, .put_float32fix = put_float32fix, - .put_float64fix = put_float64fix, .put_bool = put_bool, .put_objlnk = put_objlnk, }; @@ -744,7 +716,6 @@ const struct lwm2m_reader json_reader = { .get_s64 = get_s64, .get_string = get_string, .get_float32fix = get_float32fix, - .get_float64fix = get_float64fix, .get_bool = get_bool, .get_opaque = get_opaque, .get_objlnk = get_objlnk, diff --git a/subsys/net/lib/lwm2m/lwm2m_rw_oma_tlv.c b/subsys/net/lib/lwm2m/lwm2m_rw_oma_tlv.c index 3326c3266d2..2639dddc7cb 100644 --- a/subsys/net/lib/lwm2m/lwm2m_rw_oma_tlv.c +++ b/subsys/net/lib/lwm2m/lwm2m_rw_oma_tlv.c @@ -537,33 +537,6 @@ static size_t put_float32fix(struct lwm2m_output_context *out, return len; } -static size_t put_float64fix(struct lwm2m_output_context *out, - struct lwm2m_obj_path *path, - float64_value_t *value) -{ - struct tlv_out_formatter_data *fd; - size_t len; - struct oma_tlv tlv; - uint8_t b64[8]; - int ret; - - fd = engine_get_out_user_data(out); - if (!fd) { - return 0; - } - - ret = lwm2m_f64_to_b64(value, b64, sizeof(b64)); - if (ret < 0) { - LOG_ERR("float64 conversion error: %d", ret); - return 0; - } - - tlv_setup(&tlv, tlv_calc_type(fd->writer_flags), - tlv_calc_id(fd->writer_flags, path), sizeof(b64)); - len = oma_tlv_put(&tlv, out, b64, false); - return len; -} - static size_t put_bool(struct lwm2m_output_context *out, struct lwm2m_obj_path *path, bool value) { @@ -679,16 +652,16 @@ static size_t get_float32fix(struct lwm2m_input_context *in, { struct oma_tlv tlv; size_t size = oma_tlv_get(&tlv, in, false); - uint8_t b32[4]; + uint8_t buf[8]; int ret; if (size > 0) { - if (tlv.length != 4U) { - LOG_ERR("Invalid float32 length: %d", tlv.length); + if (tlv.length != 4U && tlv.length != 8U) { + LOG_ERR("Invalid float length: %d", tlv.length); /* dummy read */ while (tlv.length--) { - if (buf_read_u8(b32, + if (buf_read_u8(buf, CPKT_BUF_READ(in->in_cpkt), &in->offset) < 0) { break; @@ -699,56 +672,21 @@ static size_t get_float32fix(struct lwm2m_input_context *in, } /* read b32 in network byte order */ - if (buf_read(b32, tlv.length, CPKT_BUF_READ(in->in_cpkt), + if (buf_read(buf, tlv.length, CPKT_BUF_READ(in->in_cpkt), &in->offset) < 0) { /* TODO: Generate error? */ return 0; } - ret = lwm2m_b32_to_f32(b32, sizeof(b32), value); + if (tlv.length == 4U) { + ret = lwm2m_b32_to_f32(buf, 4, value); + } else { + ret = lwm2m_b64_to_f32(buf, 8, value); + } + if (ret < 0) { - LOG_ERR("binary32 conversion error: %d", ret); - return 0; - } - } - - return size; -} - -static size_t get_float64fix(struct lwm2m_input_context *in, - float64_value_t *value) -{ - struct oma_tlv tlv; - size_t size = oma_tlv_get(&tlv, in, false); - uint8_t b64[8]; - int ret; - - if (size > 0) { - if (tlv.length != 8U) { - LOG_ERR("invalid float64 length: %d", tlv.length); - - /* dummy read */ - while (tlv.length--) { - if (buf_read_u8(b64, - CPKT_BUF_READ(in->in_cpkt), - &in->offset) < 0) { - break; - } - } - - return 0; - } - - /* read b64 in network byte order */ - if (buf_read(b64, tlv.length, CPKT_BUF_READ(in->in_cpkt), - &in->offset) < 0) { - /* TODO: Generate error? */ - return 0; - } - - ret = lwm2m_b64_to_f64(b64, sizeof(b64), value); - if (ret < 0) { - LOG_ERR("binary64 conversion error: %d", ret); + LOG_ERR("binary%s conversion error: %d", + tlv.length == 4U ? "32" : "64", ret); return 0; } } @@ -815,7 +753,6 @@ const struct lwm2m_writer oma_tlv_writer = { .put_s64 = put_s64, .put_string = put_string, .put_float32fix = put_float32fix, - .put_float64fix = put_float64fix, .put_bool = put_bool, .put_opaque = put_opaque, .put_objlnk = put_objlnk, @@ -826,7 +763,6 @@ const struct lwm2m_reader oma_tlv_reader = { .get_s64 = get_s64, .get_string = get_string, .get_float32fix = get_float32fix, - .get_float64fix = get_float64fix, .get_bool = get_bool, .get_opaque = get_opaque, .get_objlnk = get_objlnk, diff --git a/subsys/net/lib/lwm2m/lwm2m_rw_plain_text.c b/subsys/net/lib/lwm2m/lwm2m_rw_plain_text.c index 23aeff14712..af19e16c3af 100644 --- a/subsys/net/lib/lwm2m/lwm2m_rw_plain_text.c +++ b/subsys/net/lib/lwm2m/lwm2m_rw_plain_text.c @@ -146,32 +146,6 @@ size_t plain_text_put_float32fix(struct lwm2m_output_context *out, value->val1, buf); } -size_t plain_text_put_float64fix(struct lwm2m_output_context *out, - struct lwm2m_obj_path *path, - float64_value_t *value) -{ - size_t len; - char buf[sizeof("000000000")]; - - /* value of 123 -> "000000123" -- ignore sign */ - len = snprintf(buf, sizeof(buf), "%09lld", - (long long int)abs(value->val2)); - if (len != 9U) { - strcpy(buf, "0"); - } else { - /* clear ending zeroes, but leave 1 if needed */ - while (len > 1U && buf[len - 1] == '0') { - buf[--len] = '\0'; - } - } - - return plain_text_put_format(out, "%s%lld.%s", - /* handle negative val2 when val1 is 0 */ - (value->val1 == 0 && value->val2 < 0) ? - "-" : "", - value->val1, buf); -} - static size_t put_string(struct lwm2m_output_context *out, struct lwm2m_obj_path *path, char *buf, size_t buflen) @@ -304,13 +278,6 @@ static size_t get_float32fix(struct lwm2m_input_context *in, return len; } -static size_t get_float64fix(struct lwm2m_input_context *in, - float64_value_t *value) -{ - return plain_text_read_number(in, &value->val1, &value->val2, - true, true); -} - static size_t get_bool(struct lwm2m_input_context *in, bool *value) { @@ -395,7 +362,6 @@ const struct lwm2m_writer plain_text_writer = { .put_s64 = put_s64, .put_string = put_string, .put_float32fix = plain_text_put_float32fix, - .put_float64fix = plain_text_put_float64fix, .put_bool = put_bool, .put_objlnk = put_objlnk, }; @@ -405,7 +371,6 @@ const struct lwm2m_reader plain_text_reader = { .get_s64 = get_s64, .get_string = get_string, .get_float32fix = get_float32fix, - .get_float64fix = get_float64fix, .get_bool = get_bool, .get_opaque = get_opaque, .get_objlnk = get_objlnk, diff --git a/subsys/net/lib/lwm2m/lwm2m_rw_plain_text.h b/subsys/net/lib/lwm2m/lwm2m_rw_plain_text.h index 6e80be9d978..6f1ec53886c 100644 --- a/subsys/net/lib/lwm2m/lwm2m_rw_plain_text.h +++ b/subsys/net/lib/lwm2m/lwm2m_rw_plain_text.h @@ -55,9 +55,6 @@ size_t plain_text_put_format(struct lwm2m_output_context *out, size_t plain_text_put_float32fix(struct lwm2m_output_context *out, struct lwm2m_obj_path *path, float32_value_t *value); -size_t plain_text_put_float64fix(struct lwm2m_output_context *out, - struct lwm2m_obj_path *path, - float64_value_t *value); int do_read_op_plain_text(struct lwm2m_message *msg, int content_format); diff --git a/subsys/net/lib/lwm2m/lwm2m_util.c b/subsys/net/lib/lwm2m/lwm2m_util.c index 87e783d28a5..a5be1f5448b 100644 --- a/subsys/net/lib/lwm2m/lwm2m_util.c +++ b/subsys/net/lib/lwm2m/lwm2m_util.c @@ -90,8 +90,8 @@ int lwm2m_f32_to_b32(float32_value_t *f32, uint8_t *b32, size_t len) return 0; } -/* convert from float64 to binary64 */ -int lwm2m_f64_to_b64(float64_value_t *f64, uint8_t *b64, size_t len) +/* convert from float32 to binary64 */ +int lwm2m_f32_to_b64(float32_value_t *f32, uint8_t *b64, size_t len) { int64_t v, f = 0; int32_t e = -1; @@ -102,13 +102,13 @@ int lwm2m_f64_to_b64(float64_value_t *f64, uint8_t *b64, size_t len) } /* handle zero value special case */ - if (f64->val1 == 0LL && f64->val2 == 0LL) { + if (f32->val1 == 0 && f32->val2 == 0) { memset(b64, 0, len); return 0; } /* sign handled later */ - v = abs(f64->val1); + v = abs(f32->val1); /* add whole value to fraction */ while (v > 0) { @@ -123,18 +123,18 @@ int lwm2m_f64_to_b64(float64_value_t *f64, uint8_t *b64, size_t len) } /* sign handled later */ - v = abs(f64->val2); + v = abs(f32->val2); /* add decimal to fraction */ i = e; while (v > 0 && i < 52) { v *= 2; - if (!f && e < 0 && v < LWM2M_FLOAT64_DEC_MAX) { + if (!f && e < 0 && v < LWM2M_FLOAT32_DEC_MAX) { /* handle -e */ e--; continue; - } else if (v >= LWM2M_FLOAT64_DEC_MAX) { - v -= LWM2M_FLOAT64_DEC_MAX; + } else if (v >= LWM2M_FLOAT32_DEC_MAX) { + v -= LWM2M_FLOAT32_DEC_MAX; f |= (int64_t)1 << (51 - i); } @@ -151,10 +151,10 @@ int lwm2m_f64_to_b64(float64_value_t *f64, uint8_t *b64, size_t len) memset(b64, 0, len); /* sign: bit 63 */ - if (f64->val1 == 0) { - b64[0] = f64->val2 < 0 ? 0x80 : 0; + if (f32->val1 == 0) { + b64[0] = f32->val2 < 0 ? 0x80 : 0; } else { - b64[0] = f64->val1 < 0 ? 0x80 : 0; + b64[0] = f32->val1 < 0 ? 0x80 : 0; } /* exponent: bits 62-52 */ @@ -233,8 +233,8 @@ int lwm2m_b32_to_f32(uint8_t *b32, size_t len, float32_value_t *f32) return 0; } -/* convert from binary64 to float64 */ -int lwm2m_b64_to_f64(uint8_t *b64, size_t len, float64_value_t *f64) +/* convert from binary64 to float32 */ +int lwm2m_b64_to_f32(uint8_t *b64, size_t len, float32_value_t *f32) { int64_t f, k; int i, e; @@ -244,8 +244,8 @@ int lwm2m_b64_to_f64(uint8_t *b64, size_t len, float64_value_t *f64) return -EINVAL; } - f64->val1 = 0LL; - f64->val2 = 0LL; + f32->val1 = 0LL; + f32->val2 = 0LL; /* calc sign: bit 63 */ sign = SHIFT_RIGHT(b64[0], 7, 0x1); @@ -274,11 +274,11 @@ int lwm2m_b64_to_f64(uint8_t *b64, size_t len, float64_value_t *f64) e = 52; } - f64->val1 = (f >> (52 - e)) * (sign ? -1 : 1); + f32->val1 = (f >> (52 - e)) * (sign ? -1 : 1); } /* calculate the rest of the decimal */ - k = LWM2M_FLOAT64_DEC_MAX; + k = LWM2M_FLOAT32_DEC_MAX; /* account for -e */ while (e < -1) { @@ -289,7 +289,7 @@ int lwm2m_b64_to_f64(uint8_t *b64, size_t len, float64_value_t *f64) for (i = 51 - e; i >= 0; i--) { k /= 2; if (f & ((int64_t)1 << i)) { - f64->val2 += k; + f32->val2 += k; } } diff --git a/subsys/net/lib/lwm2m/lwm2m_util.h b/subsys/net/lib/lwm2m/lwm2m_util.h index 9fbaada91a1..068597b7f40 100644 --- a/subsys/net/lib/lwm2m/lwm2m_util.h +++ b/subsys/net/lib/lwm2m/lwm2m_util.h @@ -11,10 +11,10 @@ /* convert float struct to binary format */ int lwm2m_f32_to_b32(float32_value_t *f32, uint8_t *b32, size_t len); -int lwm2m_f64_to_b64(float64_value_t *f64, uint8_t *b64, size_t len); +int lwm2m_f32_to_b64(float32_value_t *f32, uint8_t *b64, size_t len); /* convert binary format to float struct */ int lwm2m_b32_to_f32(uint8_t *b32, size_t len, float32_value_t *f32); -int lwm2m_b64_to_f64(uint8_t *b64, size_t len, float64_value_t *f64); +int lwm2m_b64_to_f32(uint8_t *b64, size_t len, float32_value_t *f32); #endif /* LWM2M_UTIL_H_ */