]> git.ipfire.org Git - thirdparty/ntp.git/commitdiff
ChangeLog, refclock_nmea.c:
authorHarlan Stenn <stenn@ntp.org>
Wed, 16 Feb 2000 01:13:48 +0000 (01:13 -0000)
committerHarlan Stenn <stenn@ntp.org>
Wed, 16 Feb 2000 01:13:48 +0000 (01:13 -0000)
  * ntpd/refclock_nmea.c: Correctly interpret the quality indicator.
  Deal with the time suppliedin centiseconds.  GPGCA/GPGGA cleanup.
  From: Andrew Hood <ajhood@fl.net.au>

bk: 38a9f9ccJYMLyIhRntVhkNN5P5hTXA

ChangeLog
ntpd/refclock_nmea.c

index 210abee923f3bee43529684700188a54f52fc4e4..10c2c2ca587563ac00d94849d30a79784116cc44 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,9 @@
 2000-02-15  Harlan Stenn  <stenn@whimsy.udel.edu>
 
+       * ntpd/refclock_nmea.c: Correctly interpret the quality indicator.
+       Deal with the time suppliedin centiseconds.  GPGCA/GPGGA cleanup.
+       From: Andrew Hood <ajhood@fl.net.au>
+
        * libparse/Makefile.am (K_CFLAGS): Use instead.  Add NEED_NTP_BOPS.
 
 2000-02-10  Harlan Stenn  <stenn@whimsy.udel.edu>
index d90f71c3950cbe4f3b6a2a5f8c8a6c741c9c197a..119d0417c7c168b8905397ef650918a9c4f0fcaa 100644 (file)
@@ -208,14 +208,14 @@ nmea_receive(
         */
 #define GPRMC  0
 #define GPXXX  1
-#define GPGCA  2
+#define GPGGA  2
        cp = pp->a_lastcode;
        cmdtype=0;
        if(strncmp(cp,"$GPRMC",6)==0) {
                cmdtype=GPRMC;
        }
        else if(strncmp(cp,"$GPGGA",6)==0) {
-               cmdtype=GPGCA;
+               cmdtype=GPGGA;
        }
        else if(strncmp(cp,"$GPXXX",6)==0) {
                cmdtype=GPXXX;
@@ -225,7 +225,7 @@ nmea_receive(
 
        switch( cmdtype ) {
            case GPRMC:
-           case GPGCA:
+           case GPGGA:
                /*
                 *      Check time code format of NMEA
                 */
@@ -245,10 +245,21 @@ nmea_receive(
                /*
                 * Test for synchronization.  Check for quality byte.
                 */
-               dp = field_parse(cp,2);
-               if( dp[0] != 'A')  {
-                       refclock_report(peer, CEVNT_BADREPLY);
-                       return;
+               switch( cmdtype ) {
+                   case GPRMC:
+                       dp = field_parse(cp,2);
+                       if( dp[0] != 'A')  {
+                           refclock_report(peer, CEVNT_BADREPLY);
+                           return;
+                       }
+                       break;
+                   case GPGGA:
+                       dp = field_parse(cp,6);
+                       if( dp[0] == '0')  {
+                           refclock_report(peer, CEVNT_BADREPLY);
+                           return;
+                       }
+                       break;
                }
                break;
            case GPXXX:
@@ -258,7 +269,7 @@ nmea_receive(
 
        }
 
-       if (cmdtype ==GPGCA) {
+       if (cmdtype ==GPGGA) {
                /* only time */
                time_t tt = time(NULL);
                struct tm * t = gmtime(&tt);
@@ -308,8 +319,20 @@ nmea_receive(
        pp->minute = ((dp[2] - '0') * 10) + dp[3] -  '0';
        pp->second = ((dp[4] - '0') * 10) + dp[5] - '0';
        pp->msec = 0; 
+       if (dp[6] == '.') {
+               if (isdigit((int)dp[7])) {
+                       pp->msec += (dp[7] - '0') * 100;
+                       if (isdigit((int)dp[8])) {
+                               pp->msec += (dp[8] - '0') * 10;
+                               if (isdigit((int)dp[9])) {
+                                       pp->msec += (dp[9] - '0');
+                               }
+                       }
+               }
+       }
 
-       if (pp->hour > 23 || pp->minute > 59 || pp->second > 59) {
+       if (pp->hour > 23 || pp->minute > 59 || pp->second > 59 
+        || pp->msec > 1000) {
                refclock_report(peer, CEVNT_BADTIME);
                return;
        }