summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--usr.sbin/xntpd/xntpd/refclock_nmea.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/usr.sbin/xntpd/xntpd/refclock_nmea.c b/usr.sbin/xntpd/xntpd/refclock_nmea.c
index f8ae4bc72130..b7be01dc4162 100644
--- a/usr.sbin/xntpd/xntpd/refclock_nmea.c
+++ b/usr.sbin/xntpd/xntpd/refclock_nmea.c
@@ -210,15 +210,20 @@ nmea_receive(rbufp)
* we only care about a few of them. The most important being
* the $GPRMC format
* $GPRMC,hhmmss,a,fddmm.xx,n,dddmmm.xx,w,zz.z,yyy.,ddmmyy,dd,v*CC
+ * $GPGGA,162617.0,4548.339,N,00837.719,E,1,07,0.97,00262,M,048,M,,*5D
*/
#define GPRMC 0
#define GPXXX 1
+#define GPGCA 2
cp = pp->lastcode;
pp->leap = 0;
cmdtype=0;
if(strncmp(cp,"$GPRMC",6)==0) {
cmdtype=GPRMC;
}
+ else if(strncmp(cp,"$GPGGA",6)==0) {
+ cmdtype=GPGCA;
+ }
else if(strncmp(cp,"$GPXXX",6)==0) {
cmdtype=GPXXX;
}
@@ -227,6 +232,7 @@ nmea_receive(rbufp)
switch( cmdtype ) {
case GPRMC:
+ case GPGCA:
/*
* Check time code format of NMEA
*/
@@ -250,6 +256,14 @@ nmea_receive(rbufp)
}
+ if (cmdtype ==GPGCA) {
+ /* only time */
+ time_t tt = time(NULL);
+ struct tm * t = gmtime(&tt);
+ day = t->tm_mday;
+ month = t->tm_mon + 1;
+ pp->year= t->tm_year;
+ } else {
dp = field_parse(cp,9);
/*
* Convert date and check values.
@@ -260,6 +274,7 @@ nmea_receive(rbufp)
month = (month * 10) + dp[3] - '0';
pp->year = dp[4] - '0';
pp->year = (pp->year * 10) + dp[5] - '0';
+ }
if (month < 1 || month > 12 || day < 1) {
refclock_report(peer, CEVNT_BADTIME);