QC Control software

Dependencies:   mbed

Fork of dgps by Colin Stearns

Revision:
37:417d6403a708
Parent:
34:c0b13ce5408c
Parent:
36:53b69e471b5a
Child:
38:6f814050895d
--- a/handle/handleGPS.cpp	Wed Apr 23 01:54:11 2014 +0000
+++ b/handle/handleGPS.cpp	Wed Apr 23 03:34:39 2014 +0000
@@ -92,54 +92,47 @@
 void GPSHandle::handleUpdate(){
     char c;
     reading = false;
-    if(GPS::getSerial().readable()<=0){return;}
-    while(GPS::getSerial().readable()){
+    while(getPS().rx_ready_with_timeout(&GPS::getSerial())){
         c = GPS::getSerial().getc();
-        if(c == '$'){
+        USB::getSerial().printf("%c",c);
+        if (reading) {
+            if(line_i>=MAXREADIN){reading=false;return;}
+            if (c == '*') { //sentence buffer complete; we're ignoring the checksum
+                char* field=line;
+                char* op;
+                op=getNext(field);delete op; //GPGGA
+                if(op[0]=='G'||op[1]=='P'||op[2]=='G'||op[3]=='G'||op[4]=='A'){
+                    op=getNext(field);double timeS = atof(op);delete op; //time
+                    op=getNext(field);double latitude = atof(op);delete op; //latitude
+                    op=getNext(field);delete op; //N or S
+                    op=getNext(field);double longitude = atof(op);delete op; //longitude
+                    op=getNext(field);delete op; //E or W
+                    op=getNext(field);delete op; //skip
+                    op=getNext(field);delete op; //skip
+                    op=getNext(field);delete op; //skip
+                    op=getNext(field);delete op; //altitude
+                    double altitude = atof(op);
+                    if(timeS>0.5f){
+                        USB::getSerial().printf("\nMy GPS data: Lat: %f, Lon: %f, Alt: %f, Time:%f\r\n",latitude,longitude,altitude,timeS);
+                        DH::Locs().add(LHType_locs,DataLocation(latitude,longitude,altitude,timeS));
+                        USB::getSerial().printf("Current Time:%f\r\n",DH::Locs().getC().getTime());
+                        return;
+                    }
+                }
+                //update whatever needs updating when gps updates
+                //pc.printf("My GPS data: Lat: %d, Lon: %d, Alt: %d, Time:%d\r\n",
+                //gpsData.latitude, gpsData.longitude, gpsData.altitude, gpsData.time
+                //);
+                reading = false;
+            } else {
+                line[line_i]=c;
+                line_i=(line_i+1)%MAXREADIN;
+            }
+        }else if (c == '$') {
             reading = true;
             line_i=0;
-            break;
         }
-        USB::getSerial().printf("%c",c);
     }
-    if (reading) {
-        if(line_i>=MAXREADIN){reading=false;return;}
-        if (c == '*') { //sentence buffer complete; we're ignoring the checksum
-            char* field=line;
-            char* op;
-            op=getNext(field);delete op; //GPGGA
-            if(op[0]=='G'||op[1]=='P'||op[2]=='G'||op[3]=='G'||op[4]=='A'){
-            op=getNext(field);double timeS = atof(op);delete op; //time
-            op=getNext(field);double latitude = atof(op);delete op; //latitude
-            op=getNext(field);delete op; //N or S
-            op=getNext(field);double longitude = atof(op);delete op; //longitude
-            op=getNext(field);delete op; //E or W
-            op=getNext(field);delete op; //skip
-            op=getNext(field);delete op; //skip
-            op=getNext(field);delete op; //skip
-            op=getNext(field);delete op; //altitude
-            double altitude = atof(op);
-            if(timeS>0.5f){
-            USB::getSerial().printf("\nMy GPS data: Lat: %f, Lon: %f, Alt: %f, Time:%f\r\n",latitude,longitude,altitude,timeS);
-            DH::Locs().add(LHType_locs,DataLocation(latitude,longitude,altitude,timeS));
-            USB::getSerial().printf("Current Time:%f\r\n",DH::Locs().getC().getTime());
-            }
-            }
-            //update whatever needs updating when gps updates
-//            pc.printf("My GPS data: Lat: %d, Lon: %d, Alt: %d, Time:%d\r\n",
-//                      gpsData.latitude, gpsData.longitude, gpsData.altitude, gpsData.time
-//                     );
-
-            reading = false;
-        } else {
-            line[line_i]=c;
-            line_i=(line_i+1)%MAXREADIN;
-        }
-
-    } //else if (c == '$') {
-//        reading = true;
-//        line_i=0;
-//    }
     return;
 }