Add check(), addChecksum(), tokenOnList(), and supporting variables. Modify parse() to use check() and test only on sentence name, e.g. GGA rather than $GPGGA. Uses strcmp() to eliminate the custom strStartsWith().
Detect time first character of NMEA sentence received and treat that as corresponding to GPS timestamp in the sentence. Still some latency, but less than using the end of the receipt.
Improve the time information by tracking from when a sentence is received, rather than when it is parsed. Track last valid Date, Time, and Fix separately.
Split out separate functions to parse fragments of sentences for time, lat, lon, fix. No functional changes. Reduces repetition and makes parsing process more readable. Will make adding new sentences less cumbersome. The difference tracking gets a little wonky stretching across function boundaries.
Added timeSinceFix() to return seconds since a valid fix was received. Modified $GPGGA parsing to also set fix = true/false based on quality.
Added more output sentences to Adafruit_GPS.h to facilittate testing with different sentences.
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.
Parse start of checksum as character after first $.
Don't include '\n' or '\r' in GPS lines read. Previous code was putting '\r' at the end of each line and '\n' at the start before the $, thus having to start the checksum calculation at the third character. This may break the spacing on some code that prints out the NMEA lines.
RMC and GGA sentences were no properly parsed when there was no fix.
They were assuming numeric values between commas, but you just get a
string of commas when there’s no fix. This was causing the RMC ate to
be parsed incorrectly.
Pull #13 added scaling of minute values by 50 / 3, but this seems to cause problems like minute values going over 60. Removing this calculation to take the exact minute value given by the module.