From 44af8c908664f4e7c274a6fd0dabc422def2dd68 Mon Sep 17 00:00:00 2001 From: sellensr Date: Tue, 16 Apr 2019 19:49:01 -0400 Subject: [PATCH 1/4] Index checksum explicitly on $ and * parse() Improves slightly on https://github.com/adafruit/Adafruit_GPS/pull/86 by indexing on the position of the $ and the * in the string instead of the beginning and the end of the string. Does not require sentence string have a particular termination, e.g. CRLF. --- Adafruit_GPS.cpp | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/Adafruit_GPS.cpp b/Adafruit_GPS.cpp index c53aea4..4f0214a 100755 --- a/Adafruit_GPS.cpp +++ b/Adafruit_GPS.cpp @@ -57,14 +57,13 @@ 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]; + for (char *p = strchr(nmea,'$')+1; p < ast; p++) { + sum ^= *p; } if (sum != 0) { // bad checksum :( From 653b565d2a35aaed2f382d1a611065d7bfa91fb8 Mon Sep 17 00:00:00 2001 From: Rick Sellens Date: Wed, 17 Apr 2019 12:13:17 -0400 Subject: [PATCH 2/4] Create .gitignore --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9bea433 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ + +.DS_Store From 4d064cb7963907920bc324e85e246677df590cca Mon Sep 17 00:00:00 2001 From: Rick Sellens Date: Wed, 17 Apr 2019 12:23:58 -0400 Subject: [PATCH 3/4] test parse string for $ --- Adafruit_GPS.cpp | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/Adafruit_GPS.cpp b/Adafruit_GPS.cpp index 4f0214a..4f84a8a 100755 --- a/Adafruit_GPS.cpp +++ b/Adafruit_GPS.cpp @@ -62,12 +62,16 @@ boolean Adafruit_GPS::parse(char *nmea) { uint16_t sum = parseHex(*(ast+1)) * 16; sum += parseHex(*(ast+2)); // check checksum - for (char *p = strchr(nmea,'$')+1; p < ast; p++) { - sum ^= *p; - } - 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; From 2b06a9d0ef57207ad09fed24b6e06abc0ee1e264 Mon Sep 17 00:00:00 2001 From: Rick Sellens Date: Wed, 17 Apr 2019 12:31:59 -0400 Subject: [PATCH 4/4] Delete .gitignore --- .gitignore | 2 -- 1 file changed, 2 deletions(-) delete mode 100644 .gitignore diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 9bea433..0000000 --- a/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ - -.DS_Store