fix ms->deg conversion
[project/ugps.git] / nmea.c
diff --git a/nmea.c b/nmea.c
index 3646a3628aa914065b7e72890bc3ed7173d6fe52..31e016829f1bb4987c551391d0d8d534b910f316 100644 (file)
--- a/nmea.c
+++ b/nmea.c
@@ -30,6 +30,7 @@
 #include <stdlib.h>
 #include <stdio.h>
 #include <unistd.h>
+#include <errno.h>
 
 #include <string.h>
 #include <termios.h>
@@ -107,8 +108,9 @@ nmea_rmc_cb(void)
                }
        }
 
-       if (strlen(nmea_params[3].str) != 9 || strlen(nmea_params[5].str) != 10) {
-               ERROR("lat/lng have invalid string length\n");
+       if (strlen(nmea_params[3].str) < 9 || strlen(nmea_params[5].str) < 10) {
+               ERROR("lat/lng have invalid string length %d<9, %d<10\n",
+                      strlen(nmea_params[3].str), strlen(nmea_params[5].str));
        } else {
                int latd, latm, lats;
                int lngd, lngm, lngs;
@@ -137,7 +139,7 @@ nmea_rmc_cb(void)
                flngs *= 60;
                flngs /= 10000;
 
-#define ms_to_deg(x, y) (((x * 10000) + y) / 60)
+#define ms_to_deg(x, y) (((x * 1000000) + y) / 60)
 
                DEBUG(4, "position: %d°%d.%04d, %d°%d.%04d\n",
                        latd, latm, lats, lngd, lngm, lngs);
@@ -166,7 +168,7 @@ nmea_vtg_cb(void)
        if (!gps_valid)
                return;
        strncpy(course, nmea_params[1].str, sizeof(course));
-       strncpy(speed, nmea_params[6].str, sizeof(speed));
+       strncpy(speed, nmea_params[7].str, sizeof(speed));
        DEBUG(4, "course: %s\n", course);
        DEBUG(4, "speed: %s\n", speed);
 }
@@ -248,7 +250,7 @@ nmea_process(char *a)
                return;
 
        if (nmea_verify_checksum(a)) {
-               ERROR("nmea message has invlid checksum\n");
+               ERROR("nmea message has invalid checksum\n");
                return;
        }
 
@@ -314,7 +316,7 @@ nmea_open(char *dev, struct ustream_fd *s, speed_t speed)
 
        tty = open(dev, O_RDWR | O_NOCTTY | O_NONBLOCK);
        if (tty < 0) {
-               ERROR("%s: device open failed\n", dev);
+               ERROR("%s: device open failed: %s\n", dev, strerror(errno));
                return -1;
        }