@@ -165,17 +165,17 @@ void ArduinoCloudThing::decode(uint8_t const * const payload, size_t const lengt
165
165
while (current_state != MapParserState::Complete) {
166
166
167
167
switch (current_state) {
168
- case MapParserState::EnterMap : next_state = handle_EnterMap (&map_iter, &value_iter ); break ;
169
- case MapParserState::MapKey : next_state = handle_MapKey (&value_iter ); break ;
170
- case MapParserState::UndefinedKey : next_state = handle_UndefinedKey (&value_iter ); break ;
171
- case MapParserState::BaseVersion : next_state = handle_BaseVersion (&value_iter, &map_data ); break ;
172
- case MapParserState::BaseName : next_state = handle_BaseName (&value_iter, &map_data ); break ;
173
- case MapParserState::BaseTime : next_state = handle_BaseTime (&value_iter, &map_data ); break ;
174
- case MapParserState::Time : next_state = handle_Time (&value_iter, &map_data ); break ;
175
- case MapParserState::Name : next_state = handle_Name (&value_iter, &map_data ); break ;
176
- case MapParserState::Value : next_state = handle_Value (&value_iter, &map_data ); break ;
177
- case MapParserState::StringValue : next_state = handle_StringValue (&value_iter, &map_data ); break ;
178
- case MapParserState::BooleanValue : next_state = handle_BooleanValue (&value_iter, &map_data ); break ;
168
+ case MapParserState::EnterMap : next_state = handle_EnterMap (&map_iter, &value_iter, &map_data ); break ;
169
+ case MapParserState::MapKey : next_state = handle_MapKey (&value_iter ); break ;
170
+ case MapParserState::UndefinedKey : next_state = handle_UndefinedKey (&value_iter ); break ;
171
+ case MapParserState::BaseVersion : next_state = handle_BaseVersion (&value_iter, &map_data ); break ;
172
+ case MapParserState::BaseName : next_state = handle_BaseName (&value_iter, &map_data ); break ;
173
+ case MapParserState::BaseTime : next_state = handle_BaseTime (&value_iter, &map_data ); break ;
174
+ case MapParserState::Time : next_state = handle_Time (&value_iter, &map_data ); break ;
175
+ case MapParserState::Name : next_state = handle_Name (&value_iter, &map_data ); break ;
176
+ case MapParserState::Value : next_state = handle_Value (&value_iter, &map_data ); break ;
177
+ case MapParserState::StringValue : next_state = handle_StringValue (&value_iter, &map_data ); break ;
178
+ case MapParserState::BooleanValue : next_state = handle_BooleanValue (&value_iter, &map_data ); break ;
179
179
case MapParserState::LeaveMap : next_state = handle_LeaveMap (&map_iter, &value_iter, &map_data); break ;
180
180
case MapParserState::Complete : /* Nothing to do */ break ;
181
181
case MapParserState::Error : return ; break ;
@@ -189,11 +189,12 @@ void ArduinoCloudThing::decode(uint8_t const * const payload, size_t const lengt
189
189
* PRIVATE MEMBER FUNCTIONS
190
190
******************************************************************************/
191
191
192
- ArduinoCloudThing::MapParserState ArduinoCloudThing::handle_EnterMap (CborValue * map_iter, CborValue * value_iter) {
192
+ ArduinoCloudThing::MapParserState ArduinoCloudThing::handle_EnterMap (CborValue * map_iter, CborValue * value_iter, MapData * map_data ) {
193
193
MapParserState next_state = MapParserState::Error;
194
194
195
195
if (cbor_value_get_type (map_iter) == CborMapType) {
196
196
if (cbor_value_enter_container (map_iter, value_iter) == CborNoError) {
197
+ resetMapData (map_data);
197
198
next_state = MapParserState::MapKey;
198
199
}
199
200
}
@@ -463,6 +464,18 @@ ArduinoCloudThing::MapParserState ArduinoCloudThing::handle_LeaveMap(CborValue *
463
464
return next_state;
464
465
}
465
466
467
+ void ArduinoCloudThing::resetMapData (MapData * map_data) {
468
+ map_data->base_version .reset ();
469
+ map_data->base_name .reset ();
470
+ map_data->base_time .reset ();
471
+ map_data->name .reset ();
472
+ map_data->int_val .reset ();
473
+ map_data->float_val .reset ();
474
+ map_data->str_val .reset ();
475
+ map_data->bool_val .reset ();
476
+ map_data->time .reset ();
477
+ }
478
+
466
479
/* Source Idea from https://tools.ietf.org/html/rfc7049 : Page: 50 */
467
480
double ArduinoCloudThing::convertCborHalfFloatToDouble (uint16_t const half_val) {
468
481
int exp = (half_val >> 10 ) & 0x1f ;
0 commit comments