Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions _test/driver/gps/cases/NMEA_inputs.txt
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,11 @@
"$GPVTG,90.16,T,,M,1.75,N,3.2,K,A*31",
"$GPGGA,134733.000,5540.3231,N,01231.2938,E,1,10,0.8,24.9,M,41.5,M,,0000*6D",
"$GPRMC,134733.000,A,5540.3231,N,01231.2938,E,1.83,113.00,041112,,,A*67",
"$GPRMC,134733.000,V,0000.0000,N,00000.0000,E,1.83,000.00,041112,,,A*67",
"$GPGGA,134734.000,5540.3233,S,01231.2941,W,1,10,0.8,23.7,M,41.5,M,,0000*6F",
"$GPRMC,134734.000,A,5540.3233,N,01231.2941,E,1.23,107.22,041112,,,A*63",
"$GPGSA,A,3,03,22,06,19,11,14,32,01,28,18,,,1.8,0.8,1.6*3F",
"$GPGLL,3953.88008971,N,10506.75318910,W,034138.00,A,D*7A",
"$GPGLL,5109.0262317,N,11401.8407304,W,202725.00,A,D*79",
"$GPGLL,,,,,,,",


"$GPGLL,0000.0000000,N,00000.0000000,W,000000.00,V,D*79",
"$GPGLL,,,,,,,",
2 changes: 2 additions & 0 deletions _test/driver/gps/cases/gps_parse_expected.txt
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,11 @@
"0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0,0,0,0,0.000000,0.000000,0,0,1.750000,0.000000,0,0,90.160004,T,0.000000,M,N,3.200000,K",
"55.672054,12.521564,0.000000,1231.293823,5540.323242,134733.000000,N,E,1,10,0.800000,24.900000,M,0,0.000000,0.000000,0,0,0.000000,0,0.000000,0,0,0.000000,0",
"55.672054,12.521564,0.000000,1231.293823,5540.323242,134733.000000,N,E,0,0,0.000000,0.000000,0,A,1.830000,113.000000,41112,0,0.000000,0,0.000000,0,0,0.000000,0",
"55.672054,12.521564,0.000000,1231.293823,5540.323242,134733.000000,N,E,0,0,0.000000,0.000000,0,V,1.830000,113.000000,41112,0,0.000000,0,0.000000,0,0,0.000000,0",
"-55.672054,-12.521567,0.000000,1231.294067,5540.323242,134734.000000,S,W,1,10,0.800000,23.700001,M,0,0.000000,0.000000,0,0,0.000000,0,0.000000,0,0,0.000000,0",
"55.672054,12.521567,0.000000,1231.294067,5540.323242,134734.000000,N,E,0,0,0.000000,0.000000,0,A,1.230000,107.220001,41112,0,0.000000,0,0.000000,0,0,0.000000,0",
"0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0,0,0,0,0.000000,0.000000,0,0,0.000000,0.000000,0,0,0.000000,0,0.000000,0,0,0.000000,0",
"39.898003,-105.112549,0.000000,10506.752930,3953.880127,34138.000000,N,W,0,0,0.000000,0.000000,0,0,0.000000,0.000000,0,A,0.000000,0,0.000000,0,0,0.000000,0",
"51.150440,-114.030678,0.000000,11401.840820,5109.026367,202725.000000,N,W,0,0,0.000000,0.000000,0,0,0.000000,0.000000,0,A,0.000000,0,0.000000,0,0,0.000000,0",
"51.150440,-114.030678,0.000000,11401.840820,5109.026367,202725.000000,N,W,0,0,0.000000,0.000000,0,0,0.000000,0.000000,0,V,0.000000,0,0.000000,0,0,0.000000,0",
"0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0,0,0,0,0.000000,0.000000,0,0,0.000000,0.000000,0,0,0.000000,0,0.000000,0,0,0.000000,0"
2 changes: 1 addition & 1 deletion _test/driver/gps/test_gps.c
Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,7 @@ void test_GPS_parse
/*------------------------------------------------------------------------------
Initializations
------------------------------------------------------------------------------*/
int num_cases = 15;
int num_cases = 17;
char buffer[200] = ""; // An NMEA message is 82 characters, but the way we parse may end up with more in order to represent the struct

// Source: https://github.com/esutton/gps-nmea-log-files/blob/master/AMOD_AGL3080_20121104_134730.txt
Expand Down
65 changes: 48 additions & 17 deletions gps/gps.c
Original file line number Diff line number Diff line change
Expand Up @@ -303,26 +303,57 @@ if (!strcmp(token, "$GPGGA"))
}
else if (!strcmp(token, "$GPRMC"))
{
gps_ptr->utc_time = gps_string_to_float(GPSstrParse, &idx);
gps_ptr->rmc_status = gps_string_to_char(GPSstrParse, &idx); /* unused */
gps_ptr->nmea_latitude = gps_string_to_float(GPSstrParse, &idx);
gps_ptr->ns = gps_string_to_char(GPSstrParse, &idx);
gps_ptr->nmea_longitude = gps_string_to_float(GPSstrParse, &idx);
gps_ptr->ew = gps_string_to_char(GPSstrParse, &idx);
gps_ptr->speed_k = gps_string_to_float(GPSstrParse, &idx);
gps_ptr->course_d = gps_string_to_float(GPSstrParse, &idx);
gps_ptr->date = (int)(0.5 + gps_string_to_float(GPSstrParse, &idx));
gps_conv_latitude_longitude( gps_ptr );
/* Parse data */
float utc_time = gps_string_to_float(GPSstrParse, &idx);
char rmc_status = gps_string_to_char(GPSstrParse, &idx);
float nmea_latitude = gps_string_to_float(GPSstrParse, &idx);
char ns = gps_string_to_char(GPSstrParse, &idx);
float nmea_longitude = gps_string_to_float(GPSstrParse, &idx);
char ew = gps_string_to_char(GPSstrParse, &idx);
float speed_k = gps_string_to_float(GPSstrParse, &idx);
float course_d = gps_string_to_float(GPSstrParse, &idx);
int date = (int)(0.5 + gps_string_to_float(GPSstrParse, &idx));

/* Save status */
gps_ptr->rmc_status = rmc_status;

/* Save rest of data only if status is A: Active */
if (rmc_status == 'A')
{
gps_ptr->utc_time = utc_time;
gps_ptr->nmea_latitude = nmea_latitude;
gps_ptr->ns = ns;
gps_ptr->nmea_longitude = nmea_longitude;
gps_ptr->ew = ew;
gps_ptr->speed_k = speed_k;
gps_ptr->course_d = course_d;
gps_ptr->date = date;
gps_conv_latitude_longitude( gps_ptr );
}
}
else if (!strcmp(token, "$GPGLL"))
{
gps_ptr->nmea_latitude = gps_string_to_float(GPSstrParse, &idx);
gps_ptr->ns = gps_string_to_char(GPSstrParse, &idx);
gps_ptr->nmea_longitude = gps_string_to_float(GPSstrParse, &idx);
gps_ptr->ew = gps_string_to_char(GPSstrParse, &idx);
gps_ptr->utc_time = gps_string_to_float(GPSstrParse, &idx);
gps_ptr->gll_status = gps_string_to_char(GPSstrParse, &idx);
gps_conv_latitude_longitude( gps_ptr );
/* Parse data */
float nmea_latitude = gps_string_to_float(GPSstrParse, &idx);
char ns = gps_string_to_char(GPSstrParse, &idx);
float nmea_longitude = gps_string_to_float(GPSstrParse, &idx);
char ew = gps_string_to_char(GPSstrParse, &idx);
float utc_time = gps_string_to_float(GPSstrParse, &idx);
char gll_status = gps_string_to_char(GPSstrParse, &idx);

/* Store status */
gps_ptr->gll_status = gll_status;

/* Save rest of data only if status is A: Data Valid */
if (gll_status == 'A')
{
gps_ptr->nmea_latitude = nmea_latitude;
gps_ptr->ns = ns;
gps_ptr->nmea_longitude = nmea_longitude;
gps_ptr->ew = ew;
gps_ptr->utc_time = utc_time;
gps_conv_latitude_longitude( gps_ptr );
}
}
else if (!strcmp(token, "$GPVTG"))
{
Expand Down