From b0f341d63c501a4d2832be90a42450c86a0628bf Mon Sep 17 00:00:00 2001 From: DonLakeFlyer Date: Fri, 21 Jul 2017 09:11:22 -0700 Subject: [PATCH] 10 sec timeout on vehicle --- src/Vehicle/Vehicle.cc | 12 +++++++++++- src/comm/MockLink.cc | 4 ++-- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/Vehicle/Vehicle.cc b/src/Vehicle/Vehicle.cc index 5581d4438..cbc821104 100644 --- a/src/Vehicle/Vehicle.cc +++ b/src/Vehicle/Vehicle.cc @@ -2631,11 +2631,21 @@ bool Vehicle::autoDisarm(void) void Vehicle::_handleADSBVehicle(const mavlink_message_t& message) { mavlink_adsb_vehicle_t adsbVehicle; + static const int maxTimeSinceLastSeen = 10; mavlink_msg_adsb_vehicle_decode(&message, &adsbVehicle); if (adsbVehicle.flags | ADSB_FLAGS_VALID_COORDS) { if (_adsbICAOMap.contains(adsbVehicle.ICAO_address)) { - _adsbICAOMap[adsbVehicle.ICAO_address]->update(adsbVehicle); + if (adsbVehicle.tslc > maxTimeSinceLastSeen) { + ADSBVehicle* vehicle = _adsbICAOMap[adsbVehicle.ICAO_address]; + _adsbVehicles.removeOne(vehicle); + _adsbICAOMap.remove(adsbVehicle.ICAO_address); + vehicle->deleteLater(); + } else { + if (adsbVehicle.tslc <= maxTimeSinceLastSeen) { + _adsbICAOMap[adsbVehicle.ICAO_address]->update(adsbVehicle); + } + } } else { ADSBVehicle* vehicle = new ADSBVehicle(adsbVehicle, this); _adsbICAOMap[adsbVehicle.ICAO_address] = vehicle; diff --git a/src/comm/MockLink.cc b/src/comm/MockLink.cc index c9628beee..1e0092aa6 100644 --- a/src/comm/MockLink.cc +++ b/src/comm/MockLink.cc @@ -1278,8 +1278,8 @@ void MockLink::_sendADSBVehicles(void) _mavlinkChannel, &responseMsg, 12345, // ICAO address - (_vehicleLatitude + 0.001) * qPow(10.0, 7.0), - (_vehicleLongitude + 0.001) * qPow(10.0, 7.0), + (_vehicleLatitude + 0.001) * 1e7, + (_vehicleLongitude + 0.001) * 1e7, ADSB_ALTITUDE_TYPE_GEOMETRIC, 100 * 1000, // Altitude in millimeters 10 * 100, // Heading in centidegress -- 2.22.0