diff --git a/src/Vehicle/Vehicle.cc b/src/Vehicle/Vehicle.cc index 5581d4438f7cd32c2333905b11f372ebfad44f94..cbc821104f53b21299b0257c7f18a416b8b73314 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 c9628beee1a31ca7b5b476f7316af221530d7544..1e0092aa66ac008cce8b50f5f567062cd9278372 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