Colin Stearns / Mbed 2 deprecated qcControl

Dependencies:   mbed

Fork of dgps by Colin Stearns

Committer:
dylanembed123
Date:
Thu Apr 03 17:15:29 2014 +0000
Revision:
9:da906eeac51e
Parent:
8:28b866df62cf
Child:
14:6be57da62283
Fix compile errors

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dylanembed123 9:da906eeac51e 1 #include "handleGPS.h"
stearnsc 8:28b866df62cf 2
dylanembed123 9:da906eeac51e 3 //Serial gps(p28,p27);
stearnsc 8:28b866df62cf 4
dylanembed123 7:c75d5e5e6bfc 5 void GPSHandle::setup(){
dylanembed123 9:da906eeac51e 6 gps.getSerial().baud(57600);
stearnsc 8:28b866df62cf 7 sendGpsCommand("PMTK301,1");
dylanembed123 9:da906eeac51e 8 //gps.getSerial().attach(this, handleUpdate, Serial::RxIrq);
stearnsc 8:28b866df62cf 9 //cs: Send other standard init commands? Not strictly speaking necessary,
stearnsc 8:28b866df62cf 10 // but forces "up to date documentation" in the form of always knowing
stearnsc 8:28b866df62cf 11 // gps config.
dylanembed123 7:c75d5e5e6bfc 12 }
dylanembed123 7:c75d5e5e6bfc 13
stearnsc 8:28b866df62cf 14 void GPSHandle::handleUpdate(){
stearnsc 8:28b866df62cf 15 static bool reading = false;
dylanembed123 9:da906eeac51e 16 static std::stringstream line;
stearnsc 8:28b866df62cf 17
dylanembed123 9:da906eeac51e 18 char c = gps.getSerial().getc();
stearnsc 8:28b866df62cf 19
stearnsc 8:28b866df62cf 20 if (reading) {
stearnsc 8:28b866df62cf 21 if (c == '*') { //sentence buffer complete; we're ignoring the checksum
dylanembed123 9:da906eeac51e 22 std::string field;
stearnsc 8:28b866df62cf 23 std::getline(line, field, ','); //GPGGA
stearnsc 8:28b866df62cf 24 std::getline(line, field, ','); //time
dylanembed123 9:da906eeac51e 25 double time = atof(field.c_str());
stearnsc 8:28b866df62cf 26 std::getline(line, field, ','); //latitude
dylanembed123 9:da906eeac51e 27 double latitude = atof(field.c_str());
stearnsc 8:28b866df62cf 28 std::getline(line, field, ','); //N or S
stearnsc 8:28b866df62cf 29 std::getline(line, field, ','); //longitude
dylanembed123 9:da906eeac51e 30 double longitude = atof(field.c_str());
stearnsc 8:28b866df62cf 31 std::getline(line, field, ','); //E or W
stearnsc 8:28b866df62cf 32 std::getline(line, field, ','); //skip
stearnsc 8:28b866df62cf 33 std::getline(line, field, ','); //skip
stearnsc 8:28b866df62cf 34 std::getline(line, field, ','); //skip
stearnsc 8:28b866df62cf 35 std::getline(line, field, ','); //altitude
dylanembed123 9:da906eeac51e 36 double altitude = atof(field.c_str());
stearnsc 8:28b866df62cf 37
stearnsc 8:28b866df62cf 38 //update whatever needs updating when gps updates
stearnsc 8:28b866df62cf 39 // pc.printf("My GPS data: Lat: %d, Lon: %d, Alt: %d, Time:%d\r\n",
stearnsc 8:28b866df62cf 40 // gpsData.latitude, gpsData.longitude, gpsData.altitude, gpsData.time
stearnsc 8:28b866df62cf 41 // );
stearnsc 8:28b866df62cf 42
stearnsc 8:28b866df62cf 43 line.str(string(""));
stearnsc 8:28b866df62cf 44 reading = false;
stearnsc 8:28b866df62cf 45
stearnsc 8:28b866df62cf 46 } else {
stearnsc 8:28b866df62cf 47 line.put(c);
stearnsc 8:28b866df62cf 48 }
stearnsc 8:28b866df62cf 49
stearnsc 8:28b866df62cf 50 } else if (c == '$') {
stearnsc 8:28b866df62cf 51 reading = true;
stearnsc 8:28b866df62cf 52 }
stearnsc 8:28b866df62cf 53 }
stearnsc 8:28b866df62cf 54
stearnsc 8:28b866df62cf 55 //sends: "$<command>*<checksum>\r\l"
dylanembed123 9:da906eeac51e 56 void GPSHandle::sendGpsCommand(std::string command){
stearnsc 8:28b866df62cf 57 uint8_t checksum = 0;
dylanembed123 9:da906eeac51e 58 //pc.printf("Sending command to gps: ");
dylanembed123 9:da906eeac51e 59 gps.getSerial().putc('$');
dylanembed123 9:da906eeac51e 60 //pc.putc('$');
stearnsc 8:28b866df62cf 61 char c;
stearnsc 8:28b866df62cf 62 for (int i = 0; i < command.length(); i++) {
stearnsc 8:28b866df62cf 63 c = command[i];
stearnsc 8:28b866df62cf 64 checksum ^= c;
dylanembed123 9:da906eeac51e 65 gps.getSerial().putc(c);
dylanembed123 9:da906eeac51e 66 //pc.putc(c);
stearnsc 8:28b866df62cf 67 }
dylanembed123 9:da906eeac51e 68 gps.getSerial().putc('*');
dylanembed123 9:da906eeac51e 69 //pc.putc('*');
stearnsc 8:28b866df62cf 70 string checkSumString;
stearnsc 8:28b866df62cf 71 while (checksum > 0) {
stearnsc 8:28b866df62cf 72 uint8_t checksumChar = checksum & 0x0F;
stearnsc 8:28b866df62cf 73 if (checksumChar >= 10) {
stearnsc 8:28b866df62cf 74 checksumChar -= 10;
stearnsc 8:28b866df62cf 75 checksumChar += 'A';
stearnsc 8:28b866df62cf 76 } else {
stearnsc 8:28b866df62cf 77 checksumChar += '0';
stearnsc 8:28b866df62cf 78 }
stearnsc 8:28b866df62cf 79 checkSumString.push_back((char) checksumChar);
stearnsc 8:28b866df62cf 80 checksum = checksum >> 4;
stearnsc 8:28b866df62cf 81 }
stearnsc 8:28b866df62cf 82
stearnsc 8:28b866df62cf 83 for (int i = checkSumString.length() - 1; i >= 0; i--) {
dylanembed123 9:da906eeac51e 84 gps.getSerial().putc(checkSumString[i]);
dylanembed123 9:da906eeac51e 85 //pc.putc(checkSumString[i]);
stearnsc 8:28b866df62cf 86 }
dylanembed123 9:da906eeac51e 87 gps.getSerial().putc('\r');
dylanembed123 9:da906eeac51e 88 //pc.putc('\r');
dylanembed123 9:da906eeac51e 89 gps.getSerial().putc('\n');
dylanembed123 9:da906eeac51e 90 //pc.putc('\n');
stearnsc 8:28b866df62cf 91 }
stearnsc 8:28b866df62cf 92
stearnsc 8:28b866df62cf 93 int stringToDecimal(string s)
stearnsc 8:28b866df62cf 94 {
stearnsc 8:28b866df62cf 95 int mult = 1;
stearnsc 8:28b866df62cf 96 int result = 0;
stearnsc 8:28b866df62cf 97 for (int i = s.length() - 1; i >=0; i--) {
stearnsc 8:28b866df62cf 98 if (s[i] != '.') {
stearnsc 8:28b866df62cf 99 result += (s[i] - '0') * mult;
stearnsc 8:28b866df62cf 100 mult *= 10;
dylanembed123 7:c75d5e5e6bfc 101 }
dylanembed123 7:c75d5e5e6bfc 102 }
stearnsc 8:28b866df62cf 103 return result;
dylanembed123 7:c75d5e5e6bfc 104 }
dylanembed123 7:c75d5e5e6bfc 105
dylanembed123 7:c75d5e5e6bfc 106 bool GPSHandle::check(){
dylanembed123 7:c75d5e5e6bfc 107 return true;
dylanembed123 7:c75d5e5e6bfc 108 }