aboutsummaryrefslogtreecommitdiff
path: root/usr.sbin
diff options
context:
space:
mode:
authorNick Hibma <n_hibma@FreeBSD.org>1999-08-23 14:49:22 +0000
committerNick Hibma <n_hibma@FreeBSD.org>1999-08-23 14:49:22 +0000
commit0d68c4b07e421959082e8621ac4cdc6b931df981 (patch)
treec060ce9f051b17ad4202a768c8abedfa1c91fdcb /usr.sbin
parent614926e47a641c18f364b205792bd0fa86adeeda (diff)
Notes
Diffstat (limited to 'usr.sbin')
-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);