pud: include nmealib v1.0.3
authorFerry Huberts <ferry.huberts@pelagic.nl>
Mon, 27 Aug 2012 08:24:57 +0000 (10:24 +0200)
committerFerry Huberts <ferry.huberts@pelagic.nl>
Mon, 27 Aug 2012 08:25:06 +0000 (10:25 +0200)
Signed-off-by: Ferry Huberts <ferry.huberts@pelagic.nl>
lib/pud/nmealib/Makefile.inc
lib/pud/nmealib/include/nmea/info.h
lib/pud/nmealib/src/parse.c

index c5b4dc3..0bdfbe0 100644 (file)
@@ -22,7 +22,7 @@ endif
 
 # we expect the version to be like 'v0.5.3-27-g0c2727a' and then strip the 'v',
 # and the '-27-g0c2727a' parts
-VERSION=1.0.2
+VERSION=1.0.3
 
 # protect against no version number
 ifeq ($(strip $(VERSION)),)
index 3f1579a..a2ff998 100644 (file)
@@ -54,6 +54,7 @@
  </pre>
  */
 
+#define NMEA_SIG_FIRST (NMEA_SIG_BAD)
 #define NMEA_SIG_BAD   (0)
 #define NMEA_SIG_LOW   (1)
 #define NMEA_SIG_MID   (2)
 #define NMEA_SIG_ESTIM (6)
 #define NMEA_SIG_MAN   (7)
 #define NMEA_SIG_SIM   (8)
+#define NMEA_SIG_LAST  (NMEA_SIG_SIM)
 
+#define NMEA_FIX_FIRST (NMEA_FIX_BAD)
 #define NMEA_FIX_BAD   (1)
 #define NMEA_FIX_2D    (2)
 #define NMEA_FIX_3D    (3)
+#define NMEA_FIX_LAST  (NMEA_FIX_3D)
 
 #define NMEA_MAXSAT    (64)
 #define NMEA_SATINPACK (4)
index 76f2065..66500b5 100644 (file)
@@ -162,10 +162,22 @@ static bool validateNSEW(char * c, const bool ns) {
 }
 
 /**
- * Validate mode and uppercase it.
+ * Uppercase mode and validate it.
  * Expects:
  * <pre>
- *   c in { a, A, d, D, e, E, n, N, s, S }
+ *   c in { A, D, E, F, M, N, P, R, S }
+ *
+ *   A = Autonomous. Satellite system used in non-differential mode in position fix
+ *   D = Differential. Satellite system used in differential mode in position fix
+ *   E = Estimated (dead reckoning) mode
+ *   F = Float RTK. Satellite system used in real time kinematic mode with floating integers
+ *   M = Manual input mode
+ *   N = No fix. Satellite system not used in position fix, or fix not valid
+ *   P = Precise. Satellite system used in precision mode. Precision mode is defined
+ *       as no deliberate degradation (such as Selective Availability) and higher
+ *       resolution code (P-code) is used to compute position fix.
+ *   R = Real Time Kinematic. Satellite system used in RTK mode with fixed integers
+ *   S = Simulator mode
  * </pre>
  *
  * @param c a pointer to the character. The character will be converted to uppercase.
@@ -178,7 +190,8 @@ static bool validateMode(char * c) {
 
        *c = toupper(*c);
 
-       if (!((*c == 'A') || (*c == 'D') || (*c == 'E') || (*c == 'N') || (*c == 'S'))) {
+       if (!((*c == 'A') || (*c == 'D') || (*c == 'E') || (*c == 'F') || (*c == 'M') || (*c == 'N') || (*c == 'P')
+                       || (*c == 'R') || (*c == 'S'))) {
                nmea_error("Parse error: invalid mode (%c)", *c);
                return false;
        }
@@ -408,8 +421,8 @@ int nmea_parse_GPGGA(const char *s, const int len, nmeaGPGGA *pack) {
                nmea_INFO_set_present(&pack->present, LON);
        }
        if (pack->sig != -1) {
-               if (!((pack->sig >= 0) && (pack->sig <= 8))) {
-                       nmea_error("GPGGA parse error: invalid signal %d, expected [0, 8]", pack->sig);
+               if (!((pack->sig >= NMEA_SIG_FIRST) && (pack->sig <= NMEA_SIG_LAST))) {
+                       nmea_error("GPGGA parse error: invalid signal %d, expected [%d, %d]", pack->sig, NMEA_SIG_FIRST, NMEA_SIG_LAST);
                        return 0;
                }
 
@@ -485,8 +498,8 @@ int nmea_parse_GPGSA(const char *s, const int len, nmeaGPGSA *pack) {
                return 0;
        }
        if (pack->fix_type != -1) {
-               if (!((pack->fix_type >= 1) && (pack->fix_type <= 3))) {
-                       nmea_error("GPGSA parse error: invalid fix type %d, expected [1, 3]", pack->fix_type);
+               if (!((pack->fix_type >= NMEA_FIX_FIRST) && (pack->fix_type <= NMEA_FIX_LAST))) {
+                       nmea_error("GPGSA parse error: invalid fix type %d, expected [%d, %d]", pack->fix_type, NMEA_FIX_FIRST, NMEA_FIX_LAST);
                        return 0;
                }
 
@@ -561,7 +574,7 @@ int nmea_parse_GPGSV(const char *s, const int len, nmeaGPGSV *pack) {
                                nmea_error("GPGSV parse error: invalid sat %d id (%d)", sat_count + 1, pack->sat_data[sat_count].id);
                                return 0;
                        }
-                       if ((pack->sat_data[sat_count].elv < 0) || (pack->sat_data[sat_count].elv > 90)) {
+                       if ((pack->sat_data[sat_count].elv < -90) || (pack->sat_data[sat_count].elv > 90)) {
                                nmea_error("GPGSV parse error: invalid sat %d elevation (%d)", sat_count + 1, pack->sat_data[sat_count].elv);
                                return 0;
                        }