Colin Stearns
/
qcControl
QC Control software
Fork of dgps by
Revision 36:53b69e471b5a, committed 2014-04-23
- 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
--- 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; } }