Frame FrameParser::Parse(std::string input) { for (unsigned int i = 0; i < input.length(); ++i) rolls.push_back(ParseToInt(i, input[i])); return FrameBuilder().Build(rolls); }
//Recommended Minimum Specific GPS/TRANSIT Data bool NMEA::ParseGPRMC(char* sentence) //306 { char buffer[16]; int index = 0; char * token; //timestamp time hh token = strtok (sentence, ",* "); timestamp.hour = ParseToInt( &token[0], 2 ); //timestamp time mm timestamp.minute = ParseToInt( &token[2], 2 ); //timestamp time ss.s timestamp.second = ParseToInt( &token[4], 2 ); //latitude dddmm.mmmmm token = strtok (NULL, ","); timestamp.hour = ParseToInt( &token[0], 11 ); case 2: // Status flag already used. break; case 3: // LAT if( strlen(token) == 11 ) //dddmm.mmmmm { memcpy(buffer, &token[0],3); buffer[3] = '\0'; latitude = atof(buffer); memcpy(buffer, &token[3],8); buffer[8] = '\0'; latitude += atof(buffer)/60; } else if( strlen(token) == 10 ) //ddmm.mmmmm { memcpy(buffer, &token[0],2); buffer[2] = '\0'; latitude = atof(buffer); memcpy(buffer, &token[2],8); buffer[8] = '\0'; latitude += atof(buffer)/60; } break; case 4: // LAT N/S if( token[0] == 'S' ) latitude *= -1; break; case 5: // LONG if( strlen(token) == 11 ) //dddmm.mmmmm { memcpy(buffer, &token[0],3); buffer[3] = '\0'; Longitude = atof(buffer); memcpy(buffer, &token[3],8); buffer[8] = '\0'; Longitude += atof(buffer)/60; } else if( strlen(token) == 10 ) //ddmm.mmmmm { memcpy(buffer, &token[0],2); buffer[2] = '\0'; Longitude = atof(buffer); memcpy(buffer, &token[2],8); buffer[8] = '\0'; Longitude += atof(buffer)/60; } break; case 6: // LONG E/W if( token[0] == 'W' ) Longitude *= -1; break; case 7: // Speed over ground if( strlen(token) == 6 ) { memcpy(buffer, &token[0],6); buffer[6] = '\0'; Speed = atof(buffer) * 1.15077945; } break; case 8: // Course over ground if( strlen(token) == 5 ) { memcpy(buffer, &token[0],5); buffer[5] = '\0'; Heading = atof(buffer); } break; case 9: // Date ddmmyy if( strlen(token) == 6 ) { memcpy(buffer, &token[0],2); buffer[2] = '\0'; timestamp.day = atoi(buffer); memcpy(buffer, &token[2],2); buffer[2] = '\0'; timestamp.month = atoi(buffer); memcpy(buffer, &token[4],2); buffer[2] = '\0'; timestamp.year = atoi(buffer); } break; case 10: // Magnetic Variation if( strlen(token) == 5 ) { memcpy(buffer, &token[0],5); buffer[5] = '\0'; Declination = atof(buffer); } break; case 11: // Magnetic Variation Direction if( token[0] == 'E' ) Declination *= -1; break; }