From 596089b8582097c1f934a5d25035353f00118965 Mon Sep 17 00:00:00 2001 From: Mykyta Dorokhin Date: Tue, 28 Dec 2021 15:56:07 +0200 Subject: [PATCH] add GLL and VTG to 'gpspipe -r' output in binary mode --- gpsd/pseudonmea.c | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/gpsd/pseudonmea.c b/gpsd/pseudonmea.c index 2d63d0f..feb9867 100644 --- a/gpsd/pseudonmea.c +++ b/gpsd/pseudonmea.c @@ -171,6 +171,21 @@ void gpsd_position_fix_dump(struct gps_device_t *session, * Differential base station ID */ (void)strlcat(bufp, ",", len); nmea_add_checksum(bufp); + + //$GNGGA,103527.00,4957.22994,N,03618.97862,E,1,12,0.89,180.3,M,17.0,M,,*4B + //$GNGLL,4957.22997,N,03618.97858,E,103526.00,A,A*7B + //we use the same values as in GGA sentence + char *bufgll = &bufp[strlen(bufp)]; + (void)snprintf(bufgll, len, + "$GPGLL,%s,%c,%s,%c,%s,%c,A,", + lat_str, + ((session->gpsdata.fix.latitude > 0) ? 'N' : 'S'), + lon_str, + ((session->gpsdata.fix.longitude > 0) ? 'E' : 'W'), + time_str, + ((fixquality != FIX_QUALITY_INVALID) ? 'A' : 'V') + ); + nmea_add_checksum(bufgll); } } @@ -183,6 +198,7 @@ static void gpsd_transit_fix_dump(struct gps_device_t *session, char lat_str[BUF_SZ]; char lon_str[BUF_SZ]; char speed_str[BUF_SZ]; + char kspeed_str[BUF_SZ]; char track_str[BUF_SZ]; char var_str[BUF_SZ]; char *var_dir = ""; @@ -231,6 +247,27 @@ static void gpsd_transit_fix_dump(struct gps_device_t *session, time2_str, var_str, var_dir); nmea_add_checksum(bufp); + + //$GNRMC,114740.00,A,4957.22826,N,03618.97015,E,0.054,,091220,,,A*65 + //$GNVTG,,T,,M,0.054,N,0.100,K,A*3D + //1 = Track made good + //2 = Fixed text 'T' indicates that track made good is relative to true north + //3 = Track made good, degrees Magnetic + //4 = Magnetic track indicator - 'M' + //5 = Speed over ground in knots + //6 = Fixed text 'N' indicates that speed over ground in in knots + //7 = Speed over ground in kilometers/hour + //8 = Fixed text 'K' indicates that speed over ground is in kilometers/hour + //we use the same values as in RMC sentence + char *bufvtg = &bufp[strlen(bufp)]; + (void)snprintf(bufvtg, len, + "$GPVTG,%s,T,%s,M,%s,N,%s,K,A,", + track_str, + track_str,//it is not Magnetic track, but may be it is enough + speed_str, + f_str(session->gpsdata.fix.speed, "%.4f", kspeed_str) + ); + nmea_add_checksum(bufvtg); } static void gpsd_binary_satellite_dump(struct gps_device_t *session, -- 2.25.1