Library is based on mlee350's library (MBed_Adafruit-GPS-Library) for Adafruit's GPS module (GlobalTop's MTK3339). Includes two CRITIAL bug fixes, as well as minor updates from Adafruit's Arduino library.

Fork of MBed_Adafruit-GPS-Library by Myron Lee

Committer:
hobbyguy77
Date:
Sat Jan 13 14:03:41 2018 +0000
Revision:
2:d8e1e37eea36
Parent:
1:96d7d157b384
Renamed waitForSentence param to be a bit more intuitive.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mlee350 0:a23e3099bb0a 1 /***********************************
mlee350 0:a23e3099bb0a 2 This is our GPS library
mlee350 0:a23e3099bb0a 3
mlee350 0:a23e3099bb0a 4 Adafruit invests time and resources providing this open source code,
mlee350 0:a23e3099bb0a 5 please support Adafruit and open-source hardware by purchasing
mlee350 0:a23e3099bb0a 6 products from Adafruit!
mlee350 0:a23e3099bb0a 7
mlee350 0:a23e3099bb0a 8 Written by Limor Fried/Ladyada for Adafruit Industries.
mlee350 0:a23e3099bb0a 9 BSD license, check license.txt for more information
mlee350 0:a23e3099bb0a 10 All text above must be included in any redistribution
mlee350 0:a23e3099bb0a 11 ****************************************/
mlee350 0:a23e3099bb0a 12
mlee350 0:a23e3099bb0a 13 #include "MBed_Adafruit_GPS.h"
mlee350 0:a23e3099bb0a 14
mlee350 0:a23e3099bb0a 15 // how long are max NMEA lines to parse?
mlee350 0:a23e3099bb0a 16 #define MAXLINELENGTH 120
mlee350 0:a23e3099bb0a 17
mlee350 0:a23e3099bb0a 18 // we double buffer: read one line in and leave one for the main program
mlee350 0:a23e3099bb0a 19 volatile char line1[MAXLINELENGTH];
mlee350 0:a23e3099bb0a 20 volatile char line2[MAXLINELENGTH];
mlee350 0:a23e3099bb0a 21 // our index into filling the current line
mlee350 0:a23e3099bb0a 22 volatile uint16_t lineidx=0;
mlee350 0:a23e3099bb0a 23 // pointers to the double buffers
mlee350 0:a23e3099bb0a 24 volatile char *currentline;
mlee350 0:a23e3099bb0a 25 volatile char *lastline;
mlee350 0:a23e3099bb0a 26 volatile bool recvdflag;
mlee350 0:a23e3099bb0a 27 volatile bool inStandbyMode;
mlee350 0:a23e3099bb0a 28
mlee350 0:a23e3099bb0a 29
hobbyguy77 1:96d7d157b384 30 bool Adafruit_GPS::parse(char *nmea)
hobbyguy77 1:96d7d157b384 31 {
hobbyguy77 1:96d7d157b384 32 // do checksum check
hobbyguy77 1:96d7d157b384 33
hobbyguy77 1:96d7d157b384 34 // first look if we even have one
hobbyguy77 1:96d7d157b384 35 if (nmea[strlen(nmea)-4] == '*') {
hobbyguy77 1:96d7d157b384 36 uint16_t sum = parseHex(nmea[strlen(nmea)-3]) * 16;
hobbyguy77 1:96d7d157b384 37 sum += parseHex(nmea[strlen(nmea)-2]);
mlee350 0:a23e3099bb0a 38
hobbyguy77 1:96d7d157b384 39 // check checksum
hobbyguy77 1:96d7d157b384 40 for (uint8_t i=1; i < (strlen(nmea)-4); i++) {
hobbyguy77 1:96d7d157b384 41 sum ^= nmea[i];
hobbyguy77 1:96d7d157b384 42 }
hobbyguy77 1:96d7d157b384 43 if (sum != 0) {
hobbyguy77 1:96d7d157b384 44 // bad checksum :(
hobbyguy77 1:96d7d157b384 45 //return false;
hobbyguy77 1:96d7d157b384 46 }
mlee350 0:a23e3099bb0a 47 }
mlee350 0:a23e3099bb0a 48
hobbyguy77 1:96d7d157b384 49 // look for a few common sentences
hobbyguy77 1:96d7d157b384 50 if (strstr(nmea, "$GPGGA")) {
hobbyguy77 1:96d7d157b384 51 // found GGA
hobbyguy77 1:96d7d157b384 52 char *p = nmea;
hobbyguy77 1:96d7d157b384 53 // get time
hobbyguy77 1:96d7d157b384 54 p = strchr(p, ',')+1;
hobbyguy77 1:96d7d157b384 55 float timef = atof(p);
hobbyguy77 1:96d7d157b384 56 uint32_t time = timef;
hobbyguy77 1:96d7d157b384 57 hour = time / 10000;
hobbyguy77 1:96d7d157b384 58 minute = (time % 10000) / 100;
hobbyguy77 1:96d7d157b384 59 seconds = (time % 100);
mlee350 0:a23e3099bb0a 60
hobbyguy77 1:96d7d157b384 61 milliseconds = fmod((double) timef, 1.0) * 1000;
mlee350 0:a23e3099bb0a 62
hobbyguy77 1:96d7d157b384 63 // parse out latitude
hobbyguy77 1:96d7d157b384 64 p = strchr(p, ',')+1;
hobbyguy77 1:96d7d157b384 65 latitude = atof(p);
mlee350 0:a23e3099bb0a 66
hobbyguy77 1:96d7d157b384 67 p = strchr(p, ',')+1;
hobbyguy77 1:96d7d157b384 68 if (p[0] == 'N') lat = 'N';
hobbyguy77 1:96d7d157b384 69 else if (p[0] == 'S') lat = 'S';
hobbyguy77 1:96d7d157b384 70 else if (p[0] == ',') lat = 0;
hobbyguy77 1:96d7d157b384 71 else return false;
mlee350 0:a23e3099bb0a 72
hobbyguy77 1:96d7d157b384 73 // parse out longitude
hobbyguy77 1:96d7d157b384 74 p = strchr(p, ',')+1;
hobbyguy77 1:96d7d157b384 75 longitude = atof(p);
mlee350 0:a23e3099bb0a 76
hobbyguy77 1:96d7d157b384 77 p = strchr(p, ',')+1;
hobbyguy77 1:96d7d157b384 78 if (p[0] == 'W') lon = 'W';
hobbyguy77 1:96d7d157b384 79 else if (p[0] == 'E') lon = 'E';
hobbyguy77 1:96d7d157b384 80 else if (p[0] == ',') lon = 0;
hobbyguy77 1:96d7d157b384 81 else return false;
mlee350 0:a23e3099bb0a 82
hobbyguy77 1:96d7d157b384 83 p = strchr(p, ',')+1;
hobbyguy77 1:96d7d157b384 84 fixquality = atoi(p);
mlee350 0:a23e3099bb0a 85
hobbyguy77 1:96d7d157b384 86 p = strchr(p, ',')+1;
hobbyguy77 1:96d7d157b384 87 satellites = atoi(p);
mlee350 0:a23e3099bb0a 88
hobbyguy77 1:96d7d157b384 89 p = strchr(p, ',')+1;
hobbyguy77 1:96d7d157b384 90 HDOP = atof(p);
mlee350 0:a23e3099bb0a 91
hobbyguy77 1:96d7d157b384 92 p = strchr(p, ',')+1;
hobbyguy77 1:96d7d157b384 93 altitude = atof(p);
hobbyguy77 1:96d7d157b384 94 p = strchr(p, ',')+1;
hobbyguy77 1:96d7d157b384 95 p = strchr(p, ',')+1;
hobbyguy77 1:96d7d157b384 96 geoidheight = atof(p);
hobbyguy77 1:96d7d157b384 97 return true;
hobbyguy77 1:96d7d157b384 98 }
hobbyguy77 1:96d7d157b384 99 if (strstr(nmea, "$GPRMC")) {
hobbyguy77 1:96d7d157b384 100 // found RMC
hobbyguy77 1:96d7d157b384 101 char *p = nmea;
mlee350 0:a23e3099bb0a 102
hobbyguy77 1:96d7d157b384 103 // get time
hobbyguy77 1:96d7d157b384 104 p = strchr(p, ',')+1;
hobbyguy77 1:96d7d157b384 105 float timef = atof(p);
hobbyguy77 1:96d7d157b384 106 uint32_t time = timef;
hobbyguy77 1:96d7d157b384 107 hour = time / 10000;
hobbyguy77 1:96d7d157b384 108 minute = (time % 10000) / 100;
hobbyguy77 1:96d7d157b384 109 seconds = (time % 100);
mlee350 0:a23e3099bb0a 110
hobbyguy77 1:96d7d157b384 111 milliseconds = fmod((double) timef, 1.0) * 1000;
mlee350 0:a23e3099bb0a 112
hobbyguy77 1:96d7d157b384 113 p = strchr(p, ',')+1;
hobbyguy77 1:96d7d157b384 114 // Serial.println(p);
hobbyguy77 1:96d7d157b384 115 if (p[0] == 'A')
hobbyguy77 1:96d7d157b384 116 fix = true;
hobbyguy77 1:96d7d157b384 117 else if (p[0] == 'V')
hobbyguy77 1:96d7d157b384 118 fix = false;
hobbyguy77 1:96d7d157b384 119 else
hobbyguy77 1:96d7d157b384 120 return false;
mlee350 0:a23e3099bb0a 121
hobbyguy77 1:96d7d157b384 122 // parse out latitude
hobbyguy77 1:96d7d157b384 123 p = strchr(p, ',')+1;
hobbyguy77 1:96d7d157b384 124 latitude = atof(p);
mlee350 0:a23e3099bb0a 125
hobbyguy77 1:96d7d157b384 126 p = strchr(p, ',')+1;
hobbyguy77 1:96d7d157b384 127 if (p[0] == 'N') lat = 'N';
hobbyguy77 1:96d7d157b384 128 else if (p[0] == 'S') lat = 'S';
hobbyguy77 1:96d7d157b384 129 else if (p[0] == ',') lat = 0;
hobbyguy77 1:96d7d157b384 130 else return false;
mlee350 0:a23e3099bb0a 131
hobbyguy77 1:96d7d157b384 132 // parse out longitude
hobbyguy77 1:96d7d157b384 133 p = strchr(p, ',')+1;
hobbyguy77 1:96d7d157b384 134 longitude = atof(p);
mlee350 0:a23e3099bb0a 135
hobbyguy77 1:96d7d157b384 136 p = strchr(p, ',')+1;
hobbyguy77 1:96d7d157b384 137 if (p[0] == 'W') lon = 'W';
hobbyguy77 1:96d7d157b384 138 else if (p[0] == 'E') lon = 'E';
hobbyguy77 1:96d7d157b384 139 else if (p[0] == ',') lon = 0;
hobbyguy77 1:96d7d157b384 140 else return false;
mlee350 0:a23e3099bb0a 141
hobbyguy77 1:96d7d157b384 142 // speed
hobbyguy77 1:96d7d157b384 143 p = strchr(p, ',')+1;
hobbyguy77 1:96d7d157b384 144 speed = atof(p);
mlee350 0:a23e3099bb0a 145
hobbyguy77 1:96d7d157b384 146 // angle
hobbyguy77 1:96d7d157b384 147 p = strchr(p, ',')+1;
hobbyguy77 1:96d7d157b384 148 angle = atof(p);
mlee350 0:a23e3099bb0a 149
hobbyguy77 1:96d7d157b384 150 p = strchr(p, ',')+1;
hobbyguy77 1:96d7d157b384 151 uint32_t fulldate = atof(p);
hobbyguy77 1:96d7d157b384 152 day = fulldate / 10000;
hobbyguy77 1:96d7d157b384 153 month = (fulldate % 10000) / 100;
hobbyguy77 1:96d7d157b384 154 year = (fulldate % 100);
mlee350 0:a23e3099bb0a 155
hobbyguy77 1:96d7d157b384 156 // we dont parse the remaining, yet!
hobbyguy77 1:96d7d157b384 157 return true;
hobbyguy77 1:96d7d157b384 158 }
mlee350 0:a23e3099bb0a 159
hobbyguy77 1:96d7d157b384 160 return false;
mlee350 0:a23e3099bb0a 161 }
mlee350 0:a23e3099bb0a 162
hobbyguy77 1:96d7d157b384 163 char Adafruit_GPS::read(void)
hobbyguy77 1:96d7d157b384 164 {
hobbyguy77 1:96d7d157b384 165 char c = 0;
hobbyguy77 1:96d7d157b384 166
hobbyguy77 1:96d7d157b384 167 if (paused) return c;
mlee350 0:a23e3099bb0a 168
mlee350 0:a23e3099bb0a 169 if(!gpsSerial->readable()) return c;
mlee350 0:a23e3099bb0a 170 c = gpsSerial->getc();
mlee350 0:a23e3099bb0a 171
hobbyguy77 1:96d7d157b384 172 //Serial.print(c);
hobbyguy77 1:96d7d157b384 173
hobbyguy77 1:96d7d157b384 174 // if (c == '$') { //please don't eat the dollar sign - rdl 9/15/14
hobbyguy77 1:96d7d157b384 175 // currentline[lineidx] = 0;
hobbyguy77 1:96d7d157b384 176 // lineidx = 0;
hobbyguy77 1:96d7d157b384 177 // }
hobbyguy77 1:96d7d157b384 178 if (c == '\n') {
hobbyguy77 1:96d7d157b384 179 currentline[lineidx] = 0;
mlee350 0:a23e3099bb0a 180
hobbyguy77 1:96d7d157b384 181 if (currentline == line1) {
hobbyguy77 1:96d7d157b384 182 currentline = line2;
hobbyguy77 1:96d7d157b384 183 lastline = line1;
hobbyguy77 1:96d7d157b384 184 } else {
hobbyguy77 1:96d7d157b384 185 currentline = line1;
hobbyguy77 1:96d7d157b384 186 lastline = line2;
hobbyguy77 1:96d7d157b384 187 }
mlee350 0:a23e3099bb0a 188
hobbyguy77 1:96d7d157b384 189 lineidx = 0;
hobbyguy77 1:96d7d157b384 190 recvdflag = true;
mlee350 0:a23e3099bb0a 191 }
mlee350 0:a23e3099bb0a 192
hobbyguy77 1:96d7d157b384 193 currentline[lineidx++] = c;
hobbyguy77 1:96d7d157b384 194 if (lineidx >= MAXLINELENGTH)
hobbyguy77 1:96d7d157b384 195 lineidx = MAXLINELENGTH-1;
mlee350 0:a23e3099bb0a 196
hobbyguy77 1:96d7d157b384 197 return c;
mlee350 0:a23e3099bb0a 198 }
mlee350 0:a23e3099bb0a 199
mlee350 0:a23e3099bb0a 200 Adafruit_GPS::Adafruit_GPS (Serial *ser)
mlee350 0:a23e3099bb0a 201 {
hobbyguy77 1:96d7d157b384 202 common_init(); // Set everything to common state, then...
hobbyguy77 1:96d7d157b384 203 gpsSerial = ser; // ...override gpsSwSerial with value passed.
mlee350 0:a23e3099bb0a 204 }
mlee350 0:a23e3099bb0a 205
mlee350 0:a23e3099bb0a 206 // Initialization code used by all constructor types
hobbyguy77 1:96d7d157b384 207 void Adafruit_GPS::common_init(void)
hobbyguy77 1:96d7d157b384 208 {
hobbyguy77 1:96d7d157b384 209 gpsSerial = NULL;
hobbyguy77 1:96d7d157b384 210 recvdflag = false;
hobbyguy77 1:96d7d157b384 211 paused = false;
hobbyguy77 1:96d7d157b384 212 lineidx = 0;
hobbyguy77 1:96d7d157b384 213 currentline = line1;
hobbyguy77 1:96d7d157b384 214 lastline = line2;
mlee350 0:a23e3099bb0a 215
hobbyguy77 1:96d7d157b384 216 hour = minute = seconds = year = month = day =
hobbyguy77 1:96d7d157b384 217 fixquality = satellites = 0; // uint8_t
hobbyguy77 1:96d7d157b384 218 lat = lon = mag = 0; // char
hobbyguy77 1:96d7d157b384 219 fix = false; // bool
hobbyguy77 1:96d7d157b384 220 milliseconds = 0; // uint16_t
hobbyguy77 1:96d7d157b384 221 latitude = longitude = geoidheight = altitude =
hobbyguy77 1:96d7d157b384 222 speed = angle = magvariation = HDOP = 0.0; // float
mlee350 0:a23e3099bb0a 223 }
mlee350 0:a23e3099bb0a 224
mlee350 0:a23e3099bb0a 225 void Adafruit_GPS::begin(int baud)
mlee350 0:a23e3099bb0a 226 {
hobbyguy77 1:96d7d157b384 227 gpsSerial->baud(baud);
hobbyguy77 1:96d7d157b384 228 wait_ms(10);
mlee350 0:a23e3099bb0a 229 }
mlee350 0:a23e3099bb0a 230
hobbyguy77 1:96d7d157b384 231 void Adafruit_GPS::sendCommand(char *str)
hobbyguy77 1:96d7d157b384 232 {
hobbyguy77 1:96d7d157b384 233 gpsSerial->printf("%s\r\n",str);
mlee350 0:a23e3099bb0a 234 }
mlee350 0:a23e3099bb0a 235
hobbyguy77 1:96d7d157b384 236 bool Adafruit_GPS::newNMEAreceived(void)
hobbyguy77 1:96d7d157b384 237 {
hobbyguy77 1:96d7d157b384 238 return recvdflag;
mlee350 0:a23e3099bb0a 239 }
mlee350 0:a23e3099bb0a 240
hobbyguy77 1:96d7d157b384 241 void Adafruit_GPS::pause(bool p)
hobbyguy77 1:96d7d157b384 242 {
hobbyguy77 1:96d7d157b384 243 paused = p;
mlee350 0:a23e3099bb0a 244 }
mlee350 0:a23e3099bb0a 245
hobbyguy77 1:96d7d157b384 246 char *Adafruit_GPS::lastNMEA(void)
hobbyguy77 1:96d7d157b384 247 {
hobbyguy77 1:96d7d157b384 248 recvdflag = false;
hobbyguy77 1:96d7d157b384 249 return (char *)lastline;
mlee350 0:a23e3099bb0a 250 }
mlee350 0:a23e3099bb0a 251
mlee350 0:a23e3099bb0a 252 // read a Hex value and return the decimal equivalent
hobbyguy77 1:96d7d157b384 253 uint8_t Adafruit_GPS::parseHex(char c)
hobbyguy77 1:96d7d157b384 254 {
mlee350 0:a23e3099bb0a 255 if (c < '0')
hobbyguy77 1:96d7d157b384 256 return 0;
mlee350 0:a23e3099bb0a 257 if (c <= '9')
hobbyguy77 1:96d7d157b384 258 return c - '0';
mlee350 0:a23e3099bb0a 259 if (c < 'A')
hobbyguy77 1:96d7d157b384 260 return 0;
mlee350 0:a23e3099bb0a 261 if (c <= 'F')
hobbyguy77 1:96d7d157b384 262 return (c - 'A')+10;
hobbyguy77 1:96d7d157b384 263 // if (c > 'F')
hobbyguy77 1:96d7d157b384 264 return 0;
mlee350 0:a23e3099bb0a 265 }
mlee350 0:a23e3099bb0a 266
hobbyguy77 2:d8e1e37eea36 267 //max = MAXWAITSENTENCE from .h file
hobbyguy77 2:d8e1e37eea36 268 bool Adafruit_GPS::waitForSentence(const char *sentence, uint8_t max)
hobbyguy77 1:96d7d157b384 269 {
hobbyguy77 1:96d7d157b384 270 char str[20];
mlee350 0:a23e3099bb0a 271
hobbyguy77 1:96d7d157b384 272 uint8_t i=0;
hobbyguy77 1:96d7d157b384 273 while (i < max) {
hobbyguy77 1:96d7d157b384 274 read();
hobbyguy77 1:96d7d157b384 275 if (newNMEAreceived()) {
hobbyguy77 1:96d7d157b384 276 char *nmea = lastNMEA();
hobbyguy77 1:96d7d157b384 277 strncpy(str, nmea, 20);
hobbyguy77 1:96d7d157b384 278 str[19] = 0;
hobbyguy77 1:96d7d157b384 279 i++;
mlee350 0:a23e3099bb0a 280
hobbyguy77 2:d8e1e37eea36 281 if (strstr(str, sentence))
hobbyguy77 1:96d7d157b384 282 return true;
hobbyguy77 1:96d7d157b384 283 }
mlee350 0:a23e3099bb0a 284 }
mlee350 0:a23e3099bb0a 285
hobbyguy77 1:96d7d157b384 286 return false;
mlee350 0:a23e3099bb0a 287 }
mlee350 0:a23e3099bb0a 288
hobbyguy77 1:96d7d157b384 289 bool Adafruit_GPS::LOCUS_StartLogger(void)
hobbyguy77 1:96d7d157b384 290 {
hobbyguy77 1:96d7d157b384 291 sendCommand(PMTK_LOCUS_STARTLOG);
hobbyguy77 1:96d7d157b384 292 recvdflag = false;
hobbyguy77 1:96d7d157b384 293 return waitForSentence(PMTK_LOCUS_LOGSTARTED);
mlee350 0:a23e3099bb0a 294 }
mlee350 0:a23e3099bb0a 295
hobbyguy77 1:96d7d157b384 296 bool Adafruit_GPS::LOCUS_ReadStatus(void)
hobbyguy77 1:96d7d157b384 297 {
hobbyguy77 1:96d7d157b384 298 sendCommand(PMTK_LOCUS_QUERY_STATUS);
hobbyguy77 1:96d7d157b384 299
hobbyguy77 1:96d7d157b384 300 if (! waitForSentence("$PMTKLOG"))
hobbyguy77 1:96d7d157b384 301 return false;
hobbyguy77 1:96d7d157b384 302
hobbyguy77 1:96d7d157b384 303 char *response = lastNMEA();
hobbyguy77 1:96d7d157b384 304 uint16_t parsed[10];
hobbyguy77 1:96d7d157b384 305 uint8_t i;
hobbyguy77 1:96d7d157b384 306
hobbyguy77 1:96d7d157b384 307 for (i=0; i<10; i++) parsed[i] = -1;
mlee350 0:a23e3099bb0a 308
hobbyguy77 1:96d7d157b384 309 response = strchr(response, ',');
hobbyguy77 1:96d7d157b384 310 for (i=0; i<10; i++) {
hobbyguy77 1:96d7d157b384 311 if (!response || (response[0] == 0) || (response[0] == '*'))
hobbyguy77 1:96d7d157b384 312 break;
hobbyguy77 1:96d7d157b384 313 response++;
hobbyguy77 1:96d7d157b384 314 parsed[i]=0;
hobbyguy77 1:96d7d157b384 315 while ((response[0] != ',') &&
hobbyguy77 1:96d7d157b384 316 (response[0] != '*') && (response[0] != 0)) {
hobbyguy77 1:96d7d157b384 317 parsed[i] *= 10;
hobbyguy77 1:96d7d157b384 318 char c = response[0];
hobbyguy77 1:96d7d157b384 319 if (isdigit(c))
hobbyguy77 1:96d7d157b384 320 parsed[i] += c - '0';
hobbyguy77 1:96d7d157b384 321 else
hobbyguy77 1:96d7d157b384 322 parsed[i] = c;
hobbyguy77 1:96d7d157b384 323 response++;
hobbyguy77 1:96d7d157b384 324 }
mlee350 0:a23e3099bb0a 325 }
hobbyguy77 1:96d7d157b384 326 LOCUS_serial = parsed[0];
hobbyguy77 1:96d7d157b384 327 LOCUS_type = parsed[1];
hobbyguy77 1:96d7d157b384 328 if (isalpha(parsed[2])) {
hobbyguy77 1:96d7d157b384 329 parsed[2] = parsed[2] - 'a' + 10;
hobbyguy77 1:96d7d157b384 330 }
hobbyguy77 1:96d7d157b384 331 LOCUS_mode = parsed[2];
hobbyguy77 1:96d7d157b384 332 LOCUS_config = parsed[3];
hobbyguy77 1:96d7d157b384 333 LOCUS_interval = parsed[4];
hobbyguy77 1:96d7d157b384 334 LOCUS_distance = parsed[5];
hobbyguy77 1:96d7d157b384 335 LOCUS_speed = parsed[6];
hobbyguy77 1:96d7d157b384 336 LOCUS_status = !parsed[7];
hobbyguy77 1:96d7d157b384 337 LOCUS_records = parsed[8];
hobbyguy77 1:96d7d157b384 338 LOCUS_percent = parsed[9];
mlee350 0:a23e3099bb0a 339
hobbyguy77 1:96d7d157b384 340 return true;
mlee350 0:a23e3099bb0a 341 }
mlee350 0:a23e3099bb0a 342
mlee350 0:a23e3099bb0a 343 // Standby Mode Switches
hobbyguy77 1:96d7d157b384 344 bool Adafruit_GPS::standby(void)
hobbyguy77 1:96d7d157b384 345 {
hobbyguy77 1:96d7d157b384 346 if (inStandbyMode) {
hobbyguy77 1:96d7d157b384 347 return false; // Returns false if already in standby mode, so that you do not wake it up by sending commands to GPS
hobbyguy77 1:96d7d157b384 348 } else {
hobbyguy77 1:96d7d157b384 349 inStandbyMode = true;
hobbyguy77 1:96d7d157b384 350 sendCommand(PMTK_STANDBY);
hobbyguy77 1:96d7d157b384 351 //return waitForSentence(PMTK_STANDBY_SUCCESS); // don't seem to be fast enough to catch the message, or something else just is not working
hobbyguy77 1:96d7d157b384 352 return true;
hobbyguy77 1:96d7d157b384 353 }
mlee350 0:a23e3099bb0a 354 }
mlee350 0:a23e3099bb0a 355
hobbyguy77 1:96d7d157b384 356 bool Adafruit_GPS::wakeup(void)
hobbyguy77 1:96d7d157b384 357 {
hobbyguy77 1:96d7d157b384 358 if (inStandbyMode) {
hobbyguy77 1:96d7d157b384 359 inStandbyMode = false;
hobbyguy77 1:96d7d157b384 360 sendCommand(""); // send byte to wake it up
hobbyguy77 1:96d7d157b384 361 return waitForSentence(PMTK_AWAKE);
hobbyguy77 1:96d7d157b384 362 } else {
hobbyguy77 1:96d7d157b384 363 return false; // Returns false if not in standby mode, nothing to wakeup
hobbyguy77 1:96d7d157b384 364 }
mlee350 0:a23e3099bb0a 365 }