Browse Source

GPS: Do initial zero value publication to avoid corner cases

sbg
Lorenz Meier 9 years ago
parent
commit
9cccc0ec76
  1. 31
      src/drivers/gps/gps.cpp

31
src/drivers/gps/gps.cpp

@ -363,7 +363,36 @@ GPS::task_main() @@ -363,7 +363,36 @@ GPS::task_main()
/* reset report */
memset(&_report_gps_pos, 0, sizeof(_report_gps_pos));
_Helper->reset_update_rates();
if (_mode == GPS_DRIVER_MODE_UBX) {
/* Publish initial report that we have access to a GPS,
* but set all critical state fields to indicate we have
* no valid position lock
*/
_report_gps_pos.timestamp_time = hrt_absolute_time();
/* reset the timestamps for data, because we have no data yet */
_report_gps_pos.timestamp_position = 0;
_report_gps_pos.timestamp_variance = 0;
_report_gps_pos.timestamp_velocity = 0;
/* set a massive variance */
_report_gps_pos.eph = 10000.0f;
_report_gps_pos.epv = 10000.0f;
_report_gps_pos.fix_type = 0;
if (!(_pub_blocked)) {
if (_report_gps_pos_pub != nullptr) {
orb_publish(ORB_ID(vehicle_gps_position), _report_gps_pos_pub, &_report_gps_pos);
} else {
_report_gps_pos_pub = orb_advertise(ORB_ID(vehicle_gps_position), &_report_gps_pos);
}
}
/* GPS is obviously detected successfully, reset statistics */
_Helper->reset_update_rates();
}
int helper_ret;

Loading…
Cancel
Save