@@ -310,6 +310,8 @@ ArduinoCloudThing::MapParserState ArduinoCloudThing::handle_BaseTime(CborValue *
310
310
}
311
311
}
312
312
313
+ /* TODO: Check for half float / float */
314
+
313
315
if (cbor_value_advance (value_iter) == CborNoError) {
314
316
next_state = MapParserState::MapKey;
315
317
}
@@ -339,25 +341,25 @@ ArduinoCloudThing::MapParserState ArduinoCloudThing::handle_Value(CborValue * va
339
341
if (value_iter->type == CborIntegerType) {
340
342
int val = 0 ;
341
343
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) );
343
345
}
344
346
}
345
347
else if (value_iter->type == CborDoubleType) {
346
348
double val = 0.0 ;
347
349
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));
349
351
}
350
352
}
351
353
else if (value_iter->type == CborFloatType) {
352
354
float val = 0 .0f ;
353
355
if (cbor_value_get_float (value_iter, &val) == CborNoError) {
354
- map_data->float_val .set (val);
356
+ map_data->val .set (val);
355
357
}
356
358
}
357
359
else if (value_iter->type == CborHalfFloatType) {
358
360
uint16_t val = 0 ;
359
361
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)));
361
363
}
362
364
}
363
365
@@ -405,12 +407,22 @@ ArduinoCloudThing::MapParserState ArduinoCloudThing::handle_Time(CborValue * val
405
407
double val = 0.0 ;
406
408
if (cbor_value_get_double (value_iter, &val) == CborNoError) {
407
409
map_data->time .set (val);
408
- if (cbor_value_advance (value_iter) == CborNoError) {
409
- next_state = MapParserState::MapKey;
410
- }
411
410
}
412
411
}
413
412
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
+
414
426
return next_state;
415
427
}
416
428
@@ -421,20 +433,18 @@ ArduinoCloudThing::MapParserState ArduinoCloudThing::handle_LeaveMap(CborValue *
421
433
422
434
if (map_data->name .isSet ())
423
435
{
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
+
427
441
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 */
429
443
int_property->execCallbackOnChange ();
430
444
}
431
- }
432
445
433
- /* Value (float) */
434
- if (map_data->float_val .isSet ()) {
435
- ArduinoCloudProperty<float >* float_property = _property_cont.getPropertyFloat (map_data->name .get ());
436
446
if (float_property && float_property->isWriteableByCloud ()) {
437
- float_property->writeByCloud (map_data->float_val .get ());
447
+ float_property->writeByCloud (map_data->val .get ());
438
448
float_property->execCallbackOnChange ();
439
449
}
440
450
}
@@ -477,8 +487,7 @@ void ArduinoCloudThing::resetMapData(MapData * map_data) {
477
487
map_data->base_name .reset ();
478
488
map_data->base_time .reset ();
479
489
map_data->name .reset ();
480
- map_data->int_val .reset ();
481
- map_data->float_val .reset ();
490
+ map_data->val .reset ();
482
491
map_data->str_val .reset ();
483
492
map_data->bool_val .reset ();
484
493
map_data->time .reset ();
0 commit comments