Browse Source

AP_ADSB: treat invalid vehicle same as out-of-range: ignore and/or delete it

- aircraft that travel out of range will now get dropped instantly instead of linger and go stale then timeout
master
Tom Pittenger 9 years ago
parent
commit
dce734d196
  1. 18
      libraries/AP_ADSB/AP_ADSB.cpp

18
libraries/AP_ADSB/AP_ADSB.cpp

@ -387,20 +387,18 @@ void AP_ADSB::update_vehicle(const mavlink_message_t* packet) @@ -387,20 +387,18 @@ void AP_ADSB::update_vehicle(const mavlink_message_t* packet)
Location_Class vehicle_loc = Location_Class(AP_ADSB::get_location(vehicle));
bool my_loc_is_zero = _my_loc.is_zero();
float my_loc_distance_to_vehicle = _my_loc.get_distance(vehicle_loc);
bool out_of_range = in_state.list_radius > 0 && !my_loc_is_zero && my_loc_distance_to_vehicle > in_state.list_radius;
bool is_tracked_in_list = find_index(vehicle, &index);
if (vehicle_loc.is_zero()) {
if (vehicle_loc.is_zero() || out_of_range) {
// invalid vehicle lat/lng. Ignore it.
return;
} else if (in_state.list_radius > 0 &&
!my_loc_is_zero &&
my_loc_distance_to_vehicle > in_state.list_radius) {
// vehicle is out of range. Ignore it.
// vehicle is out of range or invalid lat/lng. If we're tracking it, delete from list. Otherwise ignore it.
if (is_tracked_in_list) {
delete_vehicle(index);
}
return;
} else if (find_index(vehicle, &index)) {
} else if (is_tracked_in_list) {
// found, update it
set_vehicle(index, vehicle);

Loading…
Cancel
Save