Browse Source

AP_WindVane_NMEA: decode each sentence once

c415-sdk
Iampete1 5 years ago committed by Andrew Tridgell
parent
commit
89217a3804
  1. 6
      libraries/AP_WindVane/AP_WindVane_NMEA.cpp
  2. 1
      libraries/AP_WindVane/AP_WindVane_NMEA.h

6
libraries/AP_WindVane/AP_WindVane_NMEA.cpp

@ -86,6 +86,10 @@ bool AP_WindVane_NMEA::decode(char c) @@ -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) @@ -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() @@ -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);
}

1
libraries/AP_WindVane/AP_WindVane_NMEA.h

@ -55,4 +55,5 @@ private: @@ -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
};

Loading…
Cancel
Save