@@ -165,17 +165,17 @@ void ArduinoCloudThing::decode(uint8_t const * const payload, size_t const lengt
165165 while (current_state != MapParserState::Complete) {
166166
167167 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 ;
179179 case MapParserState::LeaveMap : next_state = handle_LeaveMap (&map_iter, &value_iter, &map_data); break ;
180180 case MapParserState::Complete : /* Nothing to do */ break ;
181181 case MapParserState::Error : return ; break ;
@@ -189,11 +189,12 @@ void ArduinoCloudThing::decode(uint8_t const * const payload, size_t const lengt
189189 * PRIVATE MEMBER FUNCTIONS
190190 ******************************************************************************/
191191
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 ) {
193193 MapParserState next_state = MapParserState::Error;
194194
195195 if (cbor_value_get_type (map_iter) == CborMapType) {
196196 if (cbor_value_enter_container (map_iter, value_iter) == CborNoError) {
197+ resetMapData (map_data);
197198 next_state = MapParserState::MapKey;
198199 }
199200 }
@@ -463,6 +464,18 @@ ArduinoCloudThing::MapParserState ArduinoCloudThing::handle_LeaveMap(CborValue *
463464 return next_state;
464465}
465466
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+
466479/* Source Idea from https://tools.ietf.org/html/rfc7049 : Page: 50 */
467480double ArduinoCloudThing::convertCborHalfFloatToDouble (uint16_t const half_val) {
468481 int exp = (half_val >> 10 ) & 0x1f ;
0 commit comments