diff --git a/src/blackcore/airspacemonitor.cpp b/src/blackcore/airspacemonitor.cpp index 0262123fe..44fe10a15 100644 --- a/src/blackcore/airspacemonitor.cpp +++ b/src/blackcore/airspacemonitor.cpp @@ -443,6 +443,9 @@ namespace BlackCore this->removeAllOnlineAtcStations(); this->removeAllAircraft(); this->clearClients(); + + m_foundInNonMovingAircraft = 0; + m_foundInElevationsOnGnd = 0; } void CAirspaceMonitor::gracefulShutdown() @@ -470,10 +473,10 @@ namespace BlackCore return; } - const int rInt = range.valueInteger(CLengthUnit::NM()); - CLogMessage(this).info(u"Set airspace max. range to %1NM") << rInt; - m_maxDistanceNM = rInt; - m_maxDistanceNMHysteresis = qRound(rInt * 1.1); + const int rIntNM = range.valueInteger(CLengthUnit::NM()); + CLogMessage(this).info(u"Set airspace max. range to %1NM") << rIntNM; + m_maxDistanceNM = rIntNM; + m_maxDistanceNMHysteresis = qRound(rIntNM * 1.1); } void CAirspaceMonitor::onRealNameReplyReceived(const CCallsign &callsign, const QString &realname) @@ -1419,17 +1422,18 @@ namespace BlackCore bool fromNonMoving = false; bool triedExtrapolation = false; bool couldNotExtrapolate = false; - CElevationPlane averagePlane = this->averageElevationOfOnGroundAircraft(situation, CElevationPlane::majorAirportRadius(), 2, 3); if (averagePlane.isNull()) { averagePlane = this->averageElevationOfNonMovingAircraft(situation, CElevationPlane::majorAirportRadius(), 2); + fromNonMoving = true; } // do we have a elevation yet? if (!averagePlane.isNull()) { correctedSituation.setGroundElevation(averagePlane, CAircraftSituation::Average); + if (fromNonMoving) { m_foundInNonMovingAircraft++; } else { m_foundInElevationsOnGnd++; } } else { diff --git a/src/blackcore/airspacemonitor.h b/src/blackcore/airspacemonitor.h index 73e1db565..84680223c 100644 --- a/src/blackcore/airspacemonitor.h +++ b/src/blackcore/airspacemonitor.h @@ -293,6 +293,8 @@ namespace BlackCore bool m_bookingsRequested = false; //!< bookings have been requested, it can happen we receive an BlackCore::Vatsim::CVatsimBookingReader::atcBookingsReadUnchanged signal int m_maxDistanceNM = 125; //!< position range / FSD range int m_maxDistanceNMHysteresis = qRound(1.1 * m_maxDistanceNM); + int m_foundInNonMovingAircraft = 0; + int m_foundInElevationsOnGnd = 0; // Processing for queries etc. (fast) static constexpr int FastProcessIntervalMs = 50; //!< interval in ms diff --git a/src/blackgui/components/interpolationlogdisplay.cpp b/src/blackgui/components/interpolationlogdisplay.cpp index 0a5b39b3c..3d9d096d3 100644 --- a/src/blackgui/components/interpolationlogdisplay.cpp +++ b/src/blackgui/components/interpolationlogdisplay.cpp @@ -371,7 +371,6 @@ namespace BlackGui void CInterpolationLogDisplay::onElevationReceived(const CElevationPlane &elevationPlane, const CCallsign &callsign) { m_elvReceived++; - if (m_elvHistoryCount > 0) { const QString history = callsign.asString() % @@ -388,6 +387,7 @@ namespace BlackGui } } + // not for a real plane, but to get elevation at any position for testing if (callsign == CInterpolationLogDisplay::pseudoCallsignElevation()) { this->displayArbitraryElevation(elevationPlane); @@ -395,6 +395,9 @@ namespace BlackGui } if (!this->logCallsign(callsign)) { return; } + + // for logged callsign + m_elvReceivedLoggedCs++; ui->le_Elevation->setText(elevationPlane.toQString()); this->displayElevationRequestReceive(); ui->led_Elevation->blink(); @@ -402,8 +405,11 @@ namespace BlackGui void CInterpolationLogDisplay::onElevationRequested(const CCallsign &callsign) { - if (!this->logCallsign(callsign)) { return; } m_elvRequested++; + if (!this->logCallsign(callsign)) { return; } + + // for logged callsign + m_elvRequestedLoggedCs++; this->displayElevationRequestReceive(); ui->led_Elevation->blink(); } @@ -456,10 +462,12 @@ namespace BlackGui ui->le_CG->clear(); ui->le_Elevation->clear(); ui->le_ElevationReqRec->clear(); + ui->le_ElevationReqRec->setToolTip("elevation requested"); ui->le_Parts->clear(); ui->le_UpdateTimes->clear(); ui->le_UpdateTimes->clear(); ui->le_Limited->clear(); + m_elvReceivedLoggedCs = m_elvRequestedLoggedCs = 0; m_elvReceived = m_elvRequested = 0; m_lastInterpolations.clear(); @@ -551,10 +559,14 @@ namespace BlackGui void CInterpolationLogDisplay::displayElevationRequestReceive() { if (!m_airspaceMonitor) { return; } - static const QString info("%1/%2 hits %3 times: %4"); + static const QString info("req. %1, %2/rec. %3, %4 | found/missed: '%5' | times: %6"); const QString foundMissed = m_airspaceMonitor->getElevationsFoundMissedInfo(); const QString reqTimes = m_airspaceMonitor->getElevationRequestTimesInfo(); - ui->le_ElevationReqRec->setText(info.arg(m_elvRequested).arg(m_elvReceived).arg(foundMissed, reqTimes)); + const QString reqRec = info.arg(m_elvRequestedLoggedCs).arg(m_elvRequested).arg(m_elvReceivedLoggedCs).arg(m_elvReceived).arg(foundMissed, reqTimes); + + ui->le_ElevationReqRec->setText(reqRec); + ui->le_ElevationReqRec->setToolTip(reqRec); + ui->le_ElevationReqRec->home(false); } void CInterpolationLogDisplay::displayArbitraryElevation(const CElevationPlane &elevation) diff --git a/src/blackgui/components/interpolationlogdisplay.h b/src/blackgui/components/interpolationlogdisplay.h index a618866b2..fce0cdb06 100644 --- a/src/blackgui/components/interpolationlogdisplay.h +++ b/src/blackgui/components/interpolationlogdisplay.h @@ -182,13 +182,17 @@ namespace BlackGui QScopedPointer ui; QTimer m_updateTimer; - QPointer m_simulator; //!< related simulator - QPointer m_airspaceMonitor; //!< related airspace monitor + QPointer m_simulator; //!< related simulator + QPointer m_airspaceMonitor; //!< related airspace monitor BlackMisc::Aviation::CAircraftSituationList m_lastInterpolations; //!< list of last interpolations BlackMisc::Aviation::CCallsign m_callsign; //!< current callsign - int m_elvRequested = 0; //!< counted via signal - int m_elvReceived = 0; //!< counted via signal - int m_elvHistoryCount = -1; //!< how many in history + + int m_elvRequested = 0; //!< counted via signal + int m_elvReceived = 0; //!< counted via signal + int m_elvRequestedLoggedCs = 0; //!< counted via signal + int m_elvReceivedLoggedCs = 0; //!< counted via signal + + int m_elvHistoryCount = -1; //!< how many in history QStringListModel *m_elvHistoryModel = nullptr; static const QString &startText(); diff --git a/src/blackmisc/simulation/simulationenvironmentprovider.cpp b/src/blackmisc/simulation/simulationenvironmentprovider.cpp index 716705109..e2efb353c 100644 --- a/src/blackmisc/simulation/simulationenvironmentprovider.cpp +++ b/src/blackmisc/simulation/simulationenvironmentprovider.cpp @@ -261,12 +261,20 @@ namespace BlackMisc QString ISimulationEnvironmentProvider::getElevationsFoundMissedInfo() const { - static const QString info("%1/%2 %3%"); + static const QString info("%1/%2 %3% in %4 (all)/%5 (gnd)"); const QPair foundMissed = this->getElevationsFoundMissed(); const int f = foundMissed.first; const int m = foundMissed.second; const double hitRatioPercent = 100.0 * static_cast(f) / static_cast(f + m); - return info.arg(f).arg(m).arg(QString::number(hitRatioPercent, 'f', 1)); + + int elvGnd; + int elv; + { + QReadLocker l(&m_lockElvCoordinates); + elvGnd = m_elvCoordinatesGnd.sizeInt(); + elv = m_elvCoordinates.sizeInt(); + } + return info.arg(f).arg(m).arg(QString::number(hitRatioPercent, 'f', 1)).arg(elv).arg(elvGnd); } QPair ISimulationEnvironmentProvider::getElevationRequestTimes() const