Пример #1
0
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);
}
Пример #2
0
//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;
		}