Colin Stearns
/
qcControl
QC Control software
Fork of dgps by
Diff: handle/handleGPS.cpp
- 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; }