Browse Source

GPS: fixed a race condition in the ublox driver

the status update comes as a separate message from the lat/lon
mission-4.1.18
Andrew Tridgell 13 years ago
parent
commit
0f0cbce22f
  1. 11
      libraries/AP_GPS/AP_GPS_UBLOX.cpp
  2. 3
      libraries/AP_GPS/AP_GPS_UBLOX.h

11
libraries/AP_GPS/AP_GPS_UBLOX.cpp

@ -173,12 +173,19 @@ AP_GPS_UBLOX::_parse_gps(void) @@ -173,12 +173,19 @@ AP_GPS_UBLOX::_parse_gps(void)
longitude = _buffer.posllh.longitude;
latitude = _buffer.posllh.latitude;
altitude = _buffer.posllh.altitude_msl / 10;
fix = next_fix;
break;
case MSG_STATUS:
fix = (_buffer.status.fix_status & NAV_STATUS_FIX_VALID) && (_buffer.status.fix_type == FIX_3D);
next_fix = (_buffer.status.fix_status & NAV_STATUS_FIX_VALID) && (_buffer.status.fix_type == FIX_3D);
if (!next_fix) {
fix = false;
}
break;
case MSG_SOL:
fix = (_buffer.solution.fix_status & NAV_STATUS_FIX_VALID) && (_buffer.solution.fix_type == FIX_3D);
next_fix = (_buffer.solution.fix_status & NAV_STATUS_FIX_VALID) && (_buffer.solution.fix_type == FIX_3D);
if (!next_fix) {
fix = false;
}
num_sats = _buffer.solution.satellites;
hdop = _buffer.solution.position_DOP;
break;

3
libraries/AP_GPS/AP_GPS_UBLOX.h

@ -119,6 +119,9 @@ private: @@ -119,6 +119,9 @@ private:
// Buffer parse & GPS state update
bool _parse_gps();
// used to update fix between status and position packets
bool next_fix;
};
#endif

Loading…
Cancel
Save