From e5261c3e991c4e28fa7d8ee642dd0b65a903c9f5 Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Fri, 3 Nov 2017 20:47:42 +0100 Subject: [PATCH] Ref T180, added utility function getInterpolatorInfo() allowing to log some info about interpolator --- src/blackmisc/simulation/interpolator.cpp | 13 +++++++++++++ src/blackmisc/simulation/interpolator.h | 3 +++ src/blackmisc/simulation/interpolatordummy.h | 7 +++++-- src/blackmisc/simulation/interpolatormulti.cpp | 11 +++++++++++ src/blackmisc/simulation/interpolatormulti.h | 4 ++++ .../simulator/fsxcommon/simconnectobject.cpp | 8 +++++++- src/plugins/simulator/fsxcommon/simconnectobject.h | 3 +++ .../simulator/fsxcommon/simulatorfsxcommon.cpp | 12 +++++++----- 8 files changed, 53 insertions(+), 8 deletions(-) diff --git a/src/blackmisc/simulation/interpolator.cpp b/src/blackmisc/simulation/interpolator.cpp index f2fb460ab..60ecdab94 100644 --- a/src/blackmisc/simulation/interpolator.cpp +++ b/src/blackmisc/simulation/interpolator.cpp @@ -275,6 +275,19 @@ namespace BlackMisc m_aircraftParts.front().setTimeOffsetMs(offset); } + template + QString CInterpolator::getInterpolatorInfo() const + { + return QStringLiteral("Callsign: ") % + m_callsign.asString() % + QStringLiteral(" situations: ") % + QString::number(m_aircraftSituations.size()) % + QStringLiteral(" parts: ") % + QString::number(m_aircraftParts.size()) % + QStringLiteral(" 1st interpolation: ") % + boolToYesNo(m_isFirstInterpolation); + } + template void CInterpolator::setGroundElevationFromHint(const CInterpolationHints &hints, CAircraftSituation &situation, bool override) { diff --git a/src/blackmisc/simulation/interpolator.h b/src/blackmisc/simulation/interpolator.h index 98b6fb168..ed18e510f 100644 --- a/src/blackmisc/simulation/interpolator.h +++ b/src/blackmisc/simulation/interpolator.h @@ -78,6 +78,9 @@ namespace BlackMisc //! \remark parts logging has a \c bool \c log flag void attachLogger(CInterpolationLogger *logger) { m_logger = logger; } + //! Get an interpolator info string (for debug info) + QString getInterpolatorInfo() const; + protected: BlackMisc::Aviation::CAircraftSituationList m_aircraftSituations; //!< recent situations for one aircraft BlackMisc::Aviation::CAircraftPartsList m_aircraftParts; //!< recent parts for one aircraft diff --git a/src/blackmisc/simulation/interpolatordummy.h b/src/blackmisc/simulation/interpolatordummy.h index 25344dc73..e44fc8945 100644 --- a/src/blackmisc/simulation/interpolatordummy.h +++ b/src/blackmisc/simulation/interpolatordummy.h @@ -56,10 +56,13 @@ namespace BlackMisc //! \copydoc CInterpolator::hasAircraftParts bool hasAircraftParts() const { return false; } + //! \copydoc CInterpolator::getInterpolatorInfo + QString getInterpolatorInfo() const { return this->objectName(); } + //! \copydoc CInterpolator::attachLogger void attachLogger(CInterpolationLogger *) {} }; - } -} + } // ns +} // ns #endif diff --git a/src/blackmisc/simulation/interpolatormulti.cpp b/src/blackmisc/simulation/interpolatormulti.cpp index 3a436b74d..2326c812e 100644 --- a/src/blackmisc/simulation/interpolatormulti.cpp +++ b/src/blackmisc/simulation/interpolatormulti.cpp @@ -120,6 +120,17 @@ namespace BlackMisc } } + QString CInterpolatorMulti::getInterpolatorInfo() const + { + switch (m_mode) + { + case ModeSpline: return m_spline.getInterpolatorInfo(); + case ModeLinear: return m_linear.getInterpolatorInfo(); + default: break; + } + return ("Illegal mode"); + } + CInterpolatorMulti::Mode CInterpolatorMulti::modeFromString(const QString &mode) { if (mode.contains("spli"), Qt::CaseInsensitive) { return ModeSpline; } diff --git a/src/blackmisc/simulation/interpolatormulti.h b/src/blackmisc/simulation/interpolatormulti.h index 2b9a5bc01..6c1d58fd8 100644 --- a/src/blackmisc/simulation/interpolatormulti.h +++ b/src/blackmisc/simulation/interpolatormulti.h @@ -77,6 +77,9 @@ namespace BlackMisc //! Toogle interpolator Mode void toggleMode(); + //! Info string + QString getInterpolatorInfo() const; + //! Mode from string static Mode modeFromString(const QString &mode); @@ -96,6 +99,7 @@ namespace BlackMisc /** * CInterpolatorMulti which can be used with QMap/QHash + * \remark Use case is emulated driver */ class BLACKMISC_EXPORT CInterpolatorMultiWrapper { diff --git a/src/plugins/simulator/fsxcommon/simconnectobject.cpp b/src/plugins/simulator/fsxcommon/simconnectobject.cpp index 6409e1557..7296618f0 100644 --- a/src/plugins/simulator/fsxcommon/simconnectobject.cpp +++ b/src/plugins/simulator/fsxcommon/simconnectobject.cpp @@ -20,7 +20,7 @@ namespace BlackSimPlugin CSimConnectObject::CSimConnectObject() { } - CSimConnectObject::CSimConnectObject(const BlackMisc::Simulation::CSimulatedAircraft &aircraft, + CSimConnectObject::CSimConnectObject(const CSimulatedAircraft &aircraft, DWORD requestId, CInterpolationLogger *logger) : m_aircraft(aircraft), m_requestId(requestId), m_validRequestId(true), @@ -92,6 +92,12 @@ namespace BlackSimPlugin return m_interpolator->setMode(mode); } + QString CSimConnectObject::getInterpolatorInfo() const + { + Q_ASSERT(m_interpolator); + return m_interpolator->getInterpolatorInfo(); + } + bool CSimConnectObjects::setSimConnectObjectIdForRequestId(DWORD requestId, DWORD objectId, bool resetSentParts) { // First check, if this request id belongs to us diff --git a/src/plugins/simulator/fsxcommon/simconnectobject.h b/src/plugins/simulator/fsxcommon/simconnectobject.h index bcc0cb9e7..d3969cceb 100644 --- a/src/plugins/simulator/fsxcommon/simconnectobject.h +++ b/src/plugins/simulator/fsxcommon/simconnectobject.h @@ -129,6 +129,9 @@ namespace BlackSimPlugin //! Set interpolator mode bool setInterpolatorMode(BlackMisc::Simulation::CInterpolatorMulti::Mode mode); + //! Interpolator info + QString getInterpolatorInfo() const; + private: BlackMisc::Simulation::CSimulatedAircraft m_aircraft; //!< corresponding aircraft DWORD m_requestId = 0; diff --git a/src/plugins/simulator/fsxcommon/simulatorfsxcommon.cpp b/src/plugins/simulator/fsxcommon/simulatorfsxcommon.cpp index 9abfb4df2..e1692b636 100644 --- a/src/plugins/simulator/fsxcommon/simulatorfsxcommon.cpp +++ b/src/plugins/simulator/fsxcommon/simulatorfsxcommon.cpp @@ -680,17 +680,19 @@ namespace BlackSimPlugin if (!simObject.getAircraftModelString().isEmpty()) { m_addPendingAircraft.push_back(simObject.getAircraft()); - CLogMessage(this).warning("Aircraft removed, '%1' '%2' object id '%3' out of reality bubble or other reason") << callsign.toQString() << simObject.getAircraftModelString() << objectID; + CLogMessage(this).warning("Aircraft removed, '%1' '%2' object id '%3' out of reality bubble or other reason. Interpolator: %4") + << callsign.toQString() << simObject.getAircraftModelString() + << objectID << simObject.getInterpolatorInfo(); } else { - CLogMessage(this).warning("Removed %1 from simulator, but was not initiated by us: %1 '%2' object id %3") << callsign.toQString() << simObject.getAircraftModelString() << objectID; + CLogMessage(this).warning("Removed '%1' from simulator, but was not initiated by us: %1 '%2' object id %3") << callsign.toQString() << simObject.getAircraftModelString() << objectID; } } // in all cases we remove const int c = m_simConnectObjects.remove(callsign); - const bool removed = (c > 0); + const bool removedAny = (c > 0); const bool updated = this->updateAircraftRendered(simObject.getCallsign(), false); if (updated) { @@ -702,12 +704,12 @@ namespace BlackSimPlugin { const CSimulatedAircraft aircraftAddAgain = m_aircraftToAddAgainWhenRemoved.findFirstByCallsign(callsign); m_aircraftToAddAgainWhenRemoved.removeByCallsign(callsign); - QTimer::singleShot(1000, this, [ = ] + QTimer::singleShot(2500, this, [ = ] { this->physicallyAddRemoteAircraftImpl(aircraftAddAgain, AddedAfterRemoved); }); } - return removed; + return removedAny; } bool CSimulatorFsxCommon::setSimConnectObjectId(DWORD requestId, DWORD objectId)