@@ -133,6 +133,7 @@ int nmea_pack_type( const char *buff, int buff_sz )
133
133
"GPGSV" ,
134
134
"GPRMC" ,
135
135
"GPVTG" ,
136
+ "GNRMC" ,
136
137
};
137
138
138
139
NMEA_ASSERT ( buff );
@@ -149,6 +150,8 @@ int nmea_pack_type( const char *buff, int buff_sz )
149
150
return GPRMC ;
150
151
else if ( 0 == memcmp ( buff , pheads [4 ], 5 ) )
151
152
return GPVTG ;
153
+ else if ( 0 == memcmp ( buff , pheads [5 ], 5 ) )
154
+ return GPRMC ;
152
155
153
156
return GPNON ;
154
157
}
@@ -322,6 +325,7 @@ int nmea_parse_GPGSV( const char *buff, int buff_sz, nmeaGPGSV *pack )
322
325
int nmea_parse_GPRMC ( const char * buff , int buff_sz , nmeaGPRMC * pack )
323
326
{
324
327
int nsen ;
328
+ char type ;
325
329
char time_buff [NMEA_TIMEPARSE_BUF ];
326
330
327
331
NMEA_ASSERT ( buff && pack );
@@ -331,19 +335,25 @@ int nmea_parse_GPRMC( const char *buff, int buff_sz, nmeaGPRMC *pack )
331
335
nmea_trace_buff ( buff , buff_sz );
332
336
333
337
nsen = nmea_scanf ( buff , buff_sz ,
334
- "$GPRMC ,%s,%C,%f,%C,%f,%C,%f,%f,%2d%2d%2d,%f,%C,%C*" ,
335
- & ( time_buff [0 ] ),
338
+ "$G%CRMC ,%s,%C,%f,%C,%f,%C,%f,%f,%2d%2d%2d,%f,%C,%C*" ,
339
+ & ( type ), & ( time_buff [0 ] ),
336
340
& ( pack -> status ), & ( pack -> lat ), & ( pack -> ns ), & ( pack -> lon ), & ( pack -> ew ),
337
341
& ( pack -> speed ), & ( pack -> direction ),
338
342
& ( pack -> utc .day ), & ( pack -> utc .mon ), & ( pack -> utc .year ),
339
343
& ( pack -> declination ), & ( pack -> declin_ew ), & ( pack -> mode ) );
340
344
341
- if ( nsen != 13 && nsen != 14 )
345
+ if ( nsen != 14 && nsen != 15 )
342
346
{
343
347
nmea_error ( "GPRMC parse error!" );
344
348
return 0 ;
345
349
}
346
350
351
+ if ( type != 'P' && type != 'N' )
352
+ {
353
+ nmea_error ( "G?RMC invalid type " );
354
+ return 0 ;
355
+ }
356
+
347
357
if ( 0 != _nmea_parse_time ( & time_buff [0 ], ( int )strlen ( & time_buff [0 ] ), & ( pack -> utc ) ) )
348
358
{
349
359
nmea_error ( "GPRMC time parse error!" );
0 commit comments