Add $GPGLL sentence to parsing
$GPGLL has fewer arguments in a different order. The $GPRMC code was directly copied and the order rearranged.
This commit is contained in:
parent
77176c2afd
commit
8e17fcc9a9
|
|
@ -280,6 +280,89 @@ boolean Adafruit_GPS::parse(char *nmea) {
|
|||
// we dont parse the remaining, yet!
|
||||
return true;
|
||||
}
|
||||
if (strstr(nmea, "$GPGLL")) {
|
||||
// found GLL
|
||||
char *p = nmea;
|
||||
|
||||
// parse out latitude
|
||||
p = strchr(p, ',')+1;
|
||||
if (',' != *p)
|
||||
{
|
||||
strncpy(degreebuff, p, 2);
|
||||
p += 2;
|
||||
degreebuff[2] = '\0';
|
||||
long degree = atol(degreebuff) * 10000000;
|
||||
strncpy(degreebuff, p, 2); // minutes
|
||||
p += 3; // skip decimal point
|
||||
strncpy(degreebuff + 2, p, 4);
|
||||
degreebuff[6] = '\0';
|
||||
long minutes = 50 * atol(degreebuff) / 3;
|
||||
latitude_fixed = degree + minutes;
|
||||
latitude = degree / 100000 + minutes * 0.000006F;
|
||||
latitudeDegrees = (latitude-100*int(latitude/100))/60.0;
|
||||
latitudeDegrees += int(latitude/100);
|
||||
}
|
||||
|
||||
p = strchr(p, ',')+1;
|
||||
if (',' != *p)
|
||||
{
|
||||
if (p[0] == 'S') latitudeDegrees *= -1.0;
|
||||
if (p[0] == 'N') lat = 'N';
|
||||
else if (p[0] == 'S') lat = 'S';
|
||||
else if (p[0] == ',') lat = 0;
|
||||
else return false;
|
||||
}
|
||||
|
||||
// parse out longitude
|
||||
p = strchr(p, ',')+1;
|
||||
if (',' != *p)
|
||||
{
|
||||
strncpy(degreebuff, p, 3);
|
||||
p += 3;
|
||||
degreebuff[3] = '\0';
|
||||
degree = atol(degreebuff) * 10000000;
|
||||
strncpy(degreebuff, p, 2); // minutes
|
||||
p += 3; // skip decimal point
|
||||
strncpy(degreebuff + 2, p, 4);
|
||||
degreebuff[6] = '\0';
|
||||
minutes = 50 * atol(degreebuff) / 3;
|
||||
longitude_fixed = degree + minutes;
|
||||
longitude = degree / 100000 + minutes * 0.000006F;
|
||||
longitudeDegrees = (longitude-100*int(longitude/100))/60.0;
|
||||
longitudeDegrees += int(longitude/100);
|
||||
}
|
||||
|
||||
p = strchr(p, ',')+1;
|
||||
if (',' != *p)
|
||||
{
|
||||
if (p[0] == 'W') longitudeDegrees *= -1.0;
|
||||
if (p[0] == 'W') lon = 'W';
|
||||
else if (p[0] == 'E') lon = 'E';
|
||||
else if (p[0] == ',') lon = 0;
|
||||
else return false;
|
||||
}
|
||||
|
||||
// get time
|
||||
p = strchr(p, ',')+1;
|
||||
float timef = atof(p);
|
||||
uint32_t time = timef;
|
||||
hour = time / 10000;
|
||||
minute = (time % 10000) / 100;
|
||||
seconds = (time % 100);
|
||||
|
||||
milliseconds = fmod(timef, 1.0) * 1000;
|
||||
|
||||
p = strchr(p, ',')+1;
|
||||
// Serial.println(p);
|
||||
if (p[0] == 'A')
|
||||
fix = true;
|
||||
else if (p[0] == 'V')
|
||||
fix = false;
|
||||
else
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue