From e1de178c2bc00625609357233a86dcb6a4c029d8 Mon Sep 17 00:00:00 2001 From: ckgt Date: Sat, 17 Mar 2018 19:04:02 -0400 Subject: Fixed checksum=0 treated as invalid. Added csv of registered handlers for parser. --- src/NMEAParser.cpp | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) (limited to 'src/NMEAParser.cpp') diff --git a/src/NMEAParser.cpp b/src/NMEAParser.cpp index f646613..4364718 100644 --- a/src/NMEAParser.cpp +++ b/src/NMEAParser.cpp @@ -40,7 +40,7 @@ std::string NMEAParseError::what(){ // --------- NMEA SENTENCE -------------- -NMEASentence::NMEASentence() : isvalid(false), calculatedChecksum(0), parsedChecksum(0) +NMEASentence::NMEASentence() : isvalid(false), checksumIsCalculated(false), calculatedChecksum(0), parsedChecksum(0) {} NMEASentence::~NMEASentence() {} @@ -48,7 +48,7 @@ bool NMEASentence::valid() const { return isvalid; } bool NMEASentence::checksumOK() const { - return (parsedChecksum != 0 && calculatedChecksum != 0) + return (checksumIsCalculated) && (parsedChecksum == calculatedChecksum); } @@ -120,6 +120,26 @@ void NMEAParser::setSentenceHandler(std::string cmdKey, std::functionfirst; + + if( it->second ){ + ss << "(not callable)"; + } + } + string s = ss.str(); + if( ! s.empty() ){ + s.resize(s.size()-1); // chop off comma + } + return s; +} void NMEAParser::readByte(uint8_t b){ uint8_t startbyte = '$'; @@ -434,6 +454,7 @@ void NMEAParser::parseText(NMEASentence& nmea, string txt){ try { nmea.parsedChecksum = (uint8_t)parseInt(nmea.checksum, 16); + nmea.checksumIsCalculated = true; } catch( NumberConversionError& ) { -- cgit v1.2.3