diff --git a/libraries/AP_WindVane/AP_WindVane_NMEA.cpp b/libraries/AP_WindVane/AP_WindVane_NMEA.cpp index 2ab52c5cbd..fed7c40a36 100644 --- a/libraries/AP_WindVane/AP_WindVane_NMEA.cpp +++ b/libraries/AP_WindVane/AP_WindVane_NMEA.cpp @@ -86,6 +86,10 @@ bool AP_WindVane_NMEA::decode(char c) case '\n': case '*': { + if (_sentence_done) { + return false; + } + // null terminate and decode latest term _term[_term_offset] = 0; bool valid_sentence = decode_latest_term(); @@ -105,6 +109,7 @@ bool AP_WindVane_NMEA::decode(char c) _term_is_checksum = false; _wind_dir_deg = -1.0f; _speed_ms = -1.0f; + _sentence_done = false; return false; } @@ -125,6 +130,7 @@ bool AP_WindVane_NMEA::decode_latest_term() { // handle the last term in a message if (_term_is_checksum) { + _sentence_done = true; uint8_t checksum = 16 * char_to_hex(_term[0]) + char_to_hex(_term[1]); return ((checksum == _checksum) && _sentence_valid); } diff --git a/libraries/AP_WindVane/AP_WindVane_NMEA.h b/libraries/AP_WindVane/AP_WindVane_NMEA.h index aedae3eb67..c58d7e6cb2 100644 --- a/libraries/AP_WindVane/AP_WindVane_NMEA.h +++ b/libraries/AP_WindVane/AP_WindVane_NMEA.h @@ -55,4 +55,5 @@ private: uint8_t _checksum; // checksum accumulator bool _term_is_checksum; // current term is the checksum bool _sentence_valid; // is current sentence valid so far + bool _sentence_done; // true if this sentence has already been decoded };