From 5193745d1225c1b13cd525837e29a6093ef5eb37 Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Fri, 19 Oct 2018 03:51:33 +0200 Subject: [PATCH] Ref T397, improved handling and check of interpolated situation --- src/blackmisc/simulation/interpolator.cpp | 27 +++++++++++++++-------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/src/blackmisc/simulation/interpolator.cpp b/src/blackmisc/simulation/interpolator.cpp index 7c0994b81..e61a5618f 100644 --- a/src/blackmisc/simulation/interpolator.cpp +++ b/src/blackmisc/simulation/interpolator.cpp @@ -12,6 +12,7 @@ #include "blackmisc/simulation/interpolationlogger.h" #include "blackmisc/simulation/interpolatorlinear.h" #include "blackmisc/simulation/interpolatorspline.h" +#include "blackmisc/network/fsdsetup.h" #include "blackmisc/aviation/callsign.h" #include "blackmisc/aviation/heading.h" #include "blackmisc/pq/angle.h" @@ -28,6 +29,7 @@ using namespace BlackConfig; using namespace BlackMisc::Aviation; using namespace BlackMisc::Geo; using namespace BlackMisc::Math; +using namespace BlackMisc::Network; using namespace BlackMisc::PhysicalQuantities; namespace BlackMisc @@ -120,11 +122,6 @@ namespace BlackMisc if (!oldest.isNull()) { situations.push_back(oldest); } const bool sorted = situations.isSortedAdjustedLatestFirstWithoutNullPositions(); - if (CBuildConfig::isLocalDeveloperDebugBuild()) - { - BLACK_VERIFY_X(sorted, Q_FUNC_INFO, "Wrong adjusted timestamp order"); - } - if (setup.isNull() || !setup.isAircraftPartsEnabled()) { return sorted; } bool details = false; @@ -242,11 +239,24 @@ namespace BlackMisc else { m_invalidSituations++; - // further handling could go here, mainly we continue with last situation - if (m_invalidSituations < 3 || (m_invalidSituations % 10) == 0) + // further handling could go here, mainly we continue with last situation + const bool noSituation = currentSituation.isNull(); + const qint64 diff = noSituation ? -1 : m_currentTimeMsSinceEpoch - currentSituation.getAdjustedMSecsSinceEpoch(); + const qint64 thresholdMs = noSituation ? qRound(CFsdSetup::c_interimPositionTimeOffsetMsec * 0.5) : qRound(currentSituation.getTimeOffsetMs() * 0.5); + const bool threshold = diff > thresholdMs; + if (noSituation || threshold) { - CLogMessage(this).warning("Invalid situation no %1 for interpolation reported for '%2'") << m_invalidSituations << m_callsign.asString(); + // Problem 1, we have no "last situation" + // Problem 2, "it takes too long to recover" + if (noSituation) + { + CLogMessage(this).warning("No situation no %1 for interpolation reported for '%2'") << m_invalidSituations << m_callsign.asString(); + } + else + { + CLogMessage(this).warning("Invalid situation, diff %1ms no %2 for interpolation reported for '%3'") << diff << m_invalidSituations << m_callsign.asString(); + } } }// valid? @@ -254,7 +264,6 @@ namespace BlackMisc Q_ASSERT_X(currentSituation.hasMSLGeodeticHeight(), Q_FUNC_INFO, "No MSL altitude"); m_currentInterpolationStatus.setInterpolatedAndCheckSituation(isValid, currentSituation); m_lastSituation = currentSituation; - Q_ASSERT_X(m_currentInterpolationStatus.hasValidInterpolatedSituation(), Q_FUNC_INFO, "Expect valid situation"); // logging if (this->doLogging())