@@ -310,6 +310,8 @@ ArduinoCloudThing::MapParserState ArduinoCloudThing::handle_BaseTime(CborValue *
310310 }
311311 }
312312
313+ /* TODO: Check for half float / float */
314+
313315 if (cbor_value_advance (value_iter) == CborNoError) {
314316 next_state = MapParserState::MapKey;
315317 }
@@ -339,25 +341,25 @@ ArduinoCloudThing::MapParserState ArduinoCloudThing::handle_Value(CborValue * va
339341 if (value_iter->type == CborIntegerType) {
340342 int val = 0 ;
341343 if (cbor_value_get_int (value_iter, &val) == CborNoError) {
342- map_data->int_val .set (val);
344+ map_data->val .set (static_cast < float >( val) );
343345 }
344346 }
345347 else if (value_iter->type == CborDoubleType) {
346348 double val = 0.0 ;
347349 if (cbor_value_get_double (value_iter, &val) == CborNoError) {
348- map_data->float_val .set (static_cast <float >(val));
350+ map_data->val .set (static_cast <float >(val));
349351 }
350352 }
351353 else if (value_iter->type == CborFloatType) {
352354 float val = 0 .0f ;
353355 if (cbor_value_get_float (value_iter, &val) == CborNoError) {
354- map_data->float_val .set (val);
356+ map_data->val .set (val);
355357 }
356358 }
357359 else if (value_iter->type == CborHalfFloatType) {
358360 uint16_t val = 0 ;
359361 if (cbor_value_get_half_float (value_iter, &val) == CborNoError) {
360- map_data->float_val .set (static_cast <float >(convertCborHalfFloatToDouble (val)));
362+ map_data->val .set (static_cast <float >(convertCborHalfFloatToDouble (val)));
361363 }
362364 }
363365
@@ -405,12 +407,22 @@ ArduinoCloudThing::MapParserState ArduinoCloudThing::handle_Time(CborValue * val
405407 double val = 0.0 ;
406408 if (cbor_value_get_double (value_iter, &val) == CborNoError) {
407409 map_data->time .set (val);
408- if (cbor_value_advance (value_iter) == CborNoError) {
409- next_state = MapParserState::MapKey;
410- }
411410 }
412411 }
413412
413+ if (cbor_value_is_integer (value_iter)) {
414+ int val = 0 ;
415+ if (cbor_value_get_int (value_iter, &val) == CborNoError) {
416+ map_data->time .set (static_cast <double >(val));
417+ }
418+ }
419+
420+ /* TODO: Check for half float / float */
421+
422+ if (cbor_value_advance (value_iter) == CborNoError) {
423+ next_state = MapParserState::MapKey;
424+ }
425+
414426 return next_state;
415427}
416428
@@ -421,20 +433,18 @@ ArduinoCloudThing::MapParserState ArduinoCloudThing::handle_LeaveMap(CborValue *
421433
422434 if (map_data->name .isSet ())
423435 {
424- /* Value (Integer) */
425- if (map_data->int_val .isSet ()) {
426- ArduinoCloudProperty<int >* int_property = _property_cont.getPropertyInt (map_data->name .get ());
436+ /* Value (Integer/Float/Double/Half-Float) */
437+ if (map_data->val .isSet ()) {
438+ ArduinoCloudProperty<int > * int_property = _property_cont.getPropertyInt (map_data->name .get ());
439+ ArduinoCloudProperty<float > * float_property = _property_cont.getPropertyFloat (map_data->name .get ());
440+
427441 if (int_property && int_property->isWriteableByCloud ()) {
428- int_property->writeByCloud (map_data->int_val .get ());
442+ int_property->writeByCloud (static_cast < int >( map_data->val .get ())); /* Val is internally stored as float */
429443 int_property->execCallbackOnChange ();
430444 }
431- }
432445
433- /* Value (float) */
434- if (map_data->float_val .isSet ()) {
435- ArduinoCloudProperty<float >* float_property = _property_cont.getPropertyFloat (map_data->name .get ());
436446 if (float_property && float_property->isWriteableByCloud ()) {
437- float_property->writeByCloud (map_data->float_val .get ());
447+ float_property->writeByCloud (map_data->val .get ());
438448 float_property->execCallbackOnChange ();
439449 }
440450 }
@@ -477,8 +487,7 @@ void ArduinoCloudThing::resetMapData(MapData * map_data) {
477487 map_data->base_name .reset ();
478488 map_data->base_time .reset ();
479489 map_data->name .reset ();
480- map_data->int_val .reset ();
481- map_data->float_val .reset ();
490+ map_data->val .reset ();
482491 map_data->str_val .reset ();
483492 map_data->bool_val .reset ();
484493 map_data->time .reset ();
0 commit comments