GPS GNSS

Dependencies:   Vector3

Revision:
3:b0d594e5d9e2
Parent:
2:abd509e1f4d1
Child:
4:708e05b10257
--- a/GPS_HAPS.cpp	Tue Sep 07 06:58:56 2021 +0000
+++ b/GPS_HAPS.cpp	Tue Sep 07 08:24:31 2021 +0000
@@ -75,15 +75,35 @@
     if(strstr(cmd,"GGA") != NULL)
     {
         sscanf(cmd, "%[^,],%f,%f,%c,%f,%c,%d,%d,%f", s, &timefix, &latitude, &ns, &longitude, &ew, &fq, &nst, &altitude);
-        float lat = (int)latitude/100;
-        Latitude = lat + (latitude-lat*100)/60.0f;
-        float lon = (int)longitude/100;
-        Longitude = lon + (longitude-lon*100)/60.0f;
+        if (abs(latitude) < ERROR_F)
+        {
+            Latitude = -1.0f;
+        }
+        else
+        {
+            float lat = (int)latitude/100;
+            Latitude = lat + (latitude-lat*100)/60.0f;
+        }
+        if (abs(longitude) < ERROR_F)
+        {
+            Longitude = -1.0f;
+        }
+        else
+        {
+            float lon = (int)longitude/100;
+            Longitude = lon + (longitude-lon*100)/60.0f;
+        }
         N_S = ns;
         E_W = ew;
         Quality = fq;
         Satellites = nst;
-        Altitude = altitude;
+        if (abs(altitude) < ERROR_F)
+        {
+            Altitude = -1.0f;
+        }
+        {
+            Altitude = altitude;
+        }
 //        pc.printf("%s\n", cmd);
 //        pc.printf("##GPGGA Fix taken at: %f, Latitude: %f %c, Longitude: %f %c, Fix quality: %d, Number of sat: %d, Altitude: %f M\r\n", timefix, latitude, ns, longitude, ew, fq, nst, altitude);
     }
@@ -108,18 +128,28 @@
     {
         sscanf(cmd, "%[^,],%f,%c,%f,%c,%f,%c,%f,,%d", s, &timefix, &status, &latitude, &ns, &longitude, &ew, &speed, &date);
 //        pc.printf("%s,%f,%c,%f,%c,%f,%c,%f,,%d", s, timefix, status, latitude, ns, longitude, ew, speed, date);
-        float time = timefix + 90000.00f;
-        Hours = int(time) / 10000;
-        Minutes = (int(time) % 10000) / 100;
-        Seconds = int(time) % 100;
-        Milliseconds = (int)(((time - (Hours*10000+Minutes*100+Seconds)))/0.001f);
-        Time = Hours*3600000+Minutes*60000+Seconds*1000+Milliseconds;
-        Speed = speed * 0.514444f;
-        Year = date % 100;
-        date /= 100;
-        Month = date % 100;
-        date /= 100;
-        Day = date;
+        if (abs(timefix) > ERROR_F)
+        {
+            float time = timefix + 90000.00f;
+            Hours = int(time) / 10000;
+            Minutes = (int(time) % 10000) / 100;
+            Seconds = int(time) % 100;
+            Milliseconds = (int)(((time - (Hours*10000+Minutes*100+Seconds)))/0.001f);
+            Time = Hours*3600000+Minutes*60000+Seconds*1000+Milliseconds;
+            if (abs(speed) < ERROR_F)
+            {
+                Speed = -1.0f;
+            }
+            else
+            {
+                Speed = speed * 0.514444f;
+            }
+            Year = date % 100;
+            date /= 100;
+            Month = date % 100;
+            date /= 100;
+            Day = date;
+        }
 //        pc.printf("%s\n", cmd);
 //        pc.printf("##GPRMC Fix taken at: %f, Status: %c, Latitude: %f %c, Longitude: %f %c, Speed: %f, Date: %d\r\n", timefix, status, latitude, ns, longitude, ew, speed, date);
     }