QC Control software

Dependencies:   mbed

Fork of dgps by Colin Stearns

Files at this revision

API Documentation at this revision

Comitter:
krobertson
Date:
Wed Apr 23 03:31:16 2014 +0000
Parent:
32:9cb7bc3fc9e0
Child:
37:417d6403a708
Commit message:
made gps not interrupt driven because the interrupts were causing timing problems with the ground communication

Changed in this revision

handle/handleGPS.cpp Show annotated file Show diff for this revision Revisions of this file
handle/handleGPS.h Show annotated file Show diff for this revision Revisions of this file
packet.h Show annotated file Show diff for this revision Revisions of this file
--- a/handle/handleGPS.cpp	Wed Apr 23 01:43:17 2014 +0000
+++ b/handle/handleGPS.cpp	Wed Apr 23 03:31:16 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;
 }
 
--- a/handle/handleGPS.h	Wed Apr 23 01:43:17 2014 +0000
+++ b/handle/handleGPS.h	Wed Apr 23 03:31:16 2014 +0000
@@ -4,12 +4,14 @@
 #include "adapt/usb.h"
 #include "adapt/gps.h"
 
+#include <mbed.h>
 #include <string>
 #include <sstream>
+
+#include "packet.h"
 #include "dataLocation.h"
-#include <mbed.h>
 #include "gps.h"
-#include "packet.h"
+
 #define MAXREADIN 256
 
 typedef struct _Point{
--- a/packet.h	Wed Apr 23 01:43:17 2014 +0000
+++ b/packet.h	Wed Apr 23 03:31:16 2014 +0000
@@ -96,15 +96,18 @@
         }
     }
     
-    char rx_ready_with_timeout(){
-        if(outputDevice.readable()){
+    char rx_ready_with_timeout(Serial* serialDevice = NULL){
+        if(serialDevice == NULL){
+            serialDevice = &outputDevice;
+        }
+        if(serialDevice->readable()){
             return 1;
         }else{
             EvTimer t;
             t.set_s_period(3.0);
             t.start_timer();
             while(t.get_num_trips() == 0){
-                if(outputDevice.readable()){
+                if(serialDevice->readable()){
                     return 1;
                 }
             }