diff --git a/Adafruit_GPS.cpp b/Adafruit_GPS.cpp index c53aea4..4f84a8a 100755 --- a/Adafruit_GPS.cpp +++ b/Adafruit_GPS.cpp @@ -57,18 +57,21 @@ boolean Adafruit_GPS::parse(char *nmea) { // do checksum check // first look if we even have one - size_t len = strlen(nmea); - if (nmea[len-5] == '*') { - uint16_t sum = parseHex(nmea[len-4]) * 16; - sum += parseHex(nmea[len-3]); - + char *ast = strchr(nmea,'*'); + if (ast != NULL) { + uint16_t sum = parseHex(*(ast+1)) * 16; + sum += parseHex(*(ast+2)); // check checksum - for (uint8_t i=1; i < (len-5); i++) { - sum ^= nmea[i]; - } - if (sum != 0) { - // bad checksum :( - return false; + char *p = strchr(nmea,'$'); + if(p == NULL) return false; + else{ + for (char *p1 = p+1; p1 < ast; p1++) { + sum ^= *p1; + } + if (sum != 0) { + // bad checksum :( + return false; + } } } else { return false;