mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-04-30 05:20:02 +08:00
Ref T268, allow to log loopback situations
* those are situations reported back from simulator * and can be logged
This commit is contained in:
@@ -196,9 +196,32 @@ namespace BlackCore
|
|||||||
m_lastSentParts.remove(callsign);
|
m_lastSentParts.remove(callsign);
|
||||||
m_lastSentSituations.remove(callsign);
|
m_lastSentSituations.remove(callsign);
|
||||||
m_clampedLogMsg.remove(callsign);
|
m_clampedLogMsg.remove(callsign);
|
||||||
|
m_loopbackSituations.clear();
|
||||||
this->removeInterpolationSetupPerCallsign(callsign);
|
this->removeInterpolationSetupPerCallsign(callsign);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool ISimulator::addLoopbackSituation(const CAircraftSituation &situation)
|
||||||
|
{
|
||||||
|
const CCallsign cs = situation.getCallsign();
|
||||||
|
if (!this->isLogCallsign(cs)) { return false; }
|
||||||
|
CAircraftSituationList &situations = m_loopbackSituations[cs];
|
||||||
|
situations.push_frontKeepLatestAdjustedFirst(situation, true, 10);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ISimulator::addLoopbackSituation(const CCallsign &callsign, const CElevationPlane &elevationPlane, const CLength &cg)
|
||||||
|
{
|
||||||
|
if (!this->isLogCallsign(callsign)) { return false; }
|
||||||
|
CAircraftSituation situation(callsign, elevationPlane);
|
||||||
|
situation.setGroundElevation(elevationPlane, CAircraftSituation::FromProvider);
|
||||||
|
situation.setCG(cg);
|
||||||
|
situation.setCurrentUtcTime();
|
||||||
|
situation.setTimeOffsetMs(0);
|
||||||
|
CAircraftSituationList &situations = m_loopbackSituations[callsign];
|
||||||
|
situations.push_frontKeepLatestAdjustedFirst(situation, true, 10);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
void ISimulator::reset()
|
void ISimulator::reset()
|
||||||
{
|
{
|
||||||
this->clearAllRemoteAircraftData();
|
this->clearAllRemoteAircraftData();
|
||||||
@@ -749,6 +772,11 @@ namespace BlackCore
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CAircraftSituationList ISimulator::getLoopbackSituations(const CCallsign &callsign) const
|
||||||
|
{
|
||||||
|
return m_loopbackSituations.value(callsign);
|
||||||
|
}
|
||||||
|
|
||||||
CAirportList ISimulator::getAirportsInRange() const
|
CAirportList ISimulator::getAirportsInRange() const
|
||||||
{
|
{
|
||||||
// default implementation
|
// default implementation
|
||||||
|
|||||||
@@ -29,6 +29,7 @@
|
|||||||
#include "blackmisc/aviation/callsignset.h"
|
#include "blackmisc/aviation/callsignset.h"
|
||||||
#include "blackmisc/network/clientprovider.h"
|
#include "blackmisc/network/clientprovider.h"
|
||||||
#include "blackmisc/weather/weathergridprovider.h"
|
#include "blackmisc/weather/weathergridprovider.h"
|
||||||
|
#include "blackmisc/geo/elevationplane.h"
|
||||||
#include "blackmisc/pq/length.h"
|
#include "blackmisc/pq/length.h"
|
||||||
#include "blackmisc/pq/time.h"
|
#include "blackmisc/pq/time.h"
|
||||||
#include "blackmisc/statusmessage.h"
|
#include "blackmisc/statusmessage.h"
|
||||||
@@ -267,6 +268,9 @@ namespace BlackCore
|
|||||||
//! Time between two update requests
|
//! Time between two update requests
|
||||||
qint64 getStatisticsAircraftUpdatedRequestedDeltaMs() const { return m_statsUpdateAircraftRequestedDeltaMs; }
|
qint64 getStatisticsAircraftUpdatedRequestedDeltaMs() const { return m_statsUpdateAircraftRequestedDeltaMs; }
|
||||||
|
|
||||||
|
//! The traced loopback situations
|
||||||
|
BlackMisc::Aviation::CAircraftSituationList getLoopbackSituations(const BlackMisc::Aviation::CCallsign &callsign) const;
|
||||||
|
|
||||||
//! Access to logger
|
//! Access to logger
|
||||||
const BlackMisc::Simulation::CInterpolationLogger &interpolationLogger() const { return m_interpolationLogger; }
|
const BlackMisc::Simulation::CInterpolationLogger &interpolationLogger() const { return m_interpolationLogger; }
|
||||||
|
|
||||||
@@ -401,6 +405,12 @@ namespace BlackCore
|
|||||||
//! Clear the related data as statistics etc.
|
//! Clear the related data as statistics etc.
|
||||||
virtual void clearData(const BlackMisc::Aviation::CCallsign &callsign);
|
virtual void clearData(const BlackMisc::Aviation::CCallsign &callsign);
|
||||||
|
|
||||||
|
//! Add a loopback situation if logging is enabled
|
||||||
|
bool addLoopbackSituation(const BlackMisc::Aviation::CAircraftSituation &situation);
|
||||||
|
|
||||||
|
//! Add a loopback situation if logging is enabled
|
||||||
|
bool addLoopbackSituation(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Geo::CElevationPlane &elevationPlane, const BlackMisc::PhysicalQuantities::CLength &cg);
|
||||||
|
|
||||||
//! Full reset of state
|
//! Full reset of state
|
||||||
//! \remark reset as it was unloaded without unloading
|
//! \remark reset as it was unloaded without unloading
|
||||||
//! \sa ISimulator::clearAllRemoteAircraftData
|
//! \sa ISimulator::clearAllRemoteAircraftData
|
||||||
@@ -495,6 +505,9 @@ namespace BlackCore
|
|||||||
// some optional functionality which can be used by the simulators as needed
|
// some optional functionality which can be used by the simulators as needed
|
||||||
BlackMisc::Simulation::CSimulatedAircraftList m_addAgainAircraftWhenRemoved; //!< add this model again when removed, normally used to change model
|
BlackMisc::Simulation::CSimulatedAircraftList m_addAgainAircraftWhenRemoved; //!< add this model again when removed, normally used to change model
|
||||||
|
|
||||||
|
// loopback situations, situations which are received from simulator for remote aircraft
|
||||||
|
BlackMisc::Aviation::CAircraftSituationListPerCallsign m_loopbackSituations; //!< traced loopback situations
|
||||||
|
|
||||||
// limit the update aircraft to a maximum per second
|
// limit the update aircraft to a maximum per second
|
||||||
BlackMisc::CTokenBucket m_limitUpdateAircraftBucket { 5, 100, 5 }; //!< means 50 per second
|
BlackMisc::CTokenBucket m_limitUpdateAircraftBucket { 5, 100, 5 }; //!< means 50 per second
|
||||||
bool m_limitUpdateAircraft = false; //!< limit the update frequency by using BlackMisc::CTokenBucket
|
bool m_limitUpdateAircraft = false; //!< limit the update frequency by using BlackMisc::CTokenBucket
|
||||||
|
|||||||
@@ -296,7 +296,7 @@ namespace BlackSimPlugin
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
this->triggerAutoTraceSendId();
|
this->triggerAutoTraceSendId();
|
||||||
const CStatusMessage msg = CStatusMessage(this).error("Can not request AI position: '%1'") << callsign.asString();
|
const CStatusMessage msg = CStatusMessage(this).error("Cannot request AI position: '%1'") << callsign.asString();
|
||||||
CLogMessage::preformatted(msg);
|
CLogMessage::preformatted(msg);
|
||||||
}
|
}
|
||||||
return hr == S_OK;
|
return hr == S_OK;
|
||||||
@@ -659,9 +659,10 @@ namespace BlackSimPlugin
|
|||||||
// we only remember near ground
|
// we only remember near ground
|
||||||
if (remoteAircraftData.aboveGroundFt() < 250)
|
if (remoteAircraftData.aboveGroundFt() < 250)
|
||||||
{
|
{
|
||||||
CElevationPlane elevation(remoteAircraftData.latitudeDeg, remoteAircraftData.longitudeDeg, remoteAircraftData.elevationFt);
|
const CElevationPlane elevation(remoteAircraftData.latitudeDeg, remoteAircraftData.longitudeDeg, remoteAircraftData.elevationFt, CElevationPlane::singlePointRadius());
|
||||||
elevation.setSinglePointRadius();
|
const CLength cg(remoteAircraftData.cgToGroundFt, CLengthUnit::ft());
|
||||||
this->rememberElevationAndCG(cs, simObject.getAircraftModelString(), elevation, CLength(remoteAircraftData.cgToGroundFt, CLengthUnit::ft()));
|
this->rememberElevationAndCG(cs, simObject.getAircraftModelString(), elevation, cg);
|
||||||
|
this->addLoopbackSituation(cs, elevation, cg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -860,16 +860,23 @@ namespace BlackSimPlugin
|
|||||||
Q_ASSERT_X(verticalOffsetsMeters.size() == size, Q_FUNC_INFO, "Wrong CG");
|
Q_ASSERT_X(verticalOffsetsMeters.size() == size, Q_FUNC_INFO, "Wrong CG");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const CCallsignSet logCallsigns = this->getLogCallsigns();
|
||||||
for (int i = 0; i < size; i++)
|
for (int i = 0; i < size; i++)
|
||||||
{
|
{
|
||||||
const CCallsign cs(callsigns[i]);
|
const CCallsign cs(callsigns[i]);
|
||||||
if (!m_xplaneAircraftObjects.contains(cs)) { continue; }
|
if (!m_xplaneAircraftObjects.contains(cs)) { continue; }
|
||||||
|
|
||||||
const CXPlaneMPAircraft xpAircraft = m_xplaneAircraftObjects[cs];
|
const CXPlaneMPAircraft xpAircraft = m_xplaneAircraftObjects[cs];
|
||||||
|
|
||||||
const CAltitude elevationAlt(elevationsMeters[i], CLengthUnit::m(), CLengthUnit::ft());
|
const CAltitude elevationAlt(elevationsMeters[i], CLengthUnit::m(), CLengthUnit::ft());
|
||||||
const CElevationPlane elevation(CLatitude(latitudesDeg[i], CAngleUnit::deg()), CLongitude(longitudesDeg[i], CAngleUnit::deg()), elevationAlt, CElevationPlane::singlePointRadius());
|
const CElevationPlane elevation(CLatitude(latitudesDeg[i], CAngleUnit::deg()), CLongitude(longitudesDeg[i], CAngleUnit::deg()), elevationAlt, CElevationPlane::singlePointRadius());
|
||||||
const CLength cg(verticalOffsetsMeters[i], CLengthUnit::m(), CLengthUnit::ft());
|
const CLength cg(verticalOffsetsMeters[i], CLengthUnit::m(), CLengthUnit::ft());
|
||||||
this->rememberElevationAndCG(cs, xpAircraft.getAircraftModelString(), elevation, cg);
|
this->rememberElevationAndCG(cs, xpAircraft.getAircraftModelString(), elevation, cg);
|
||||||
|
|
||||||
|
// loopback
|
||||||
|
if (logCallsigns.contains(cs))
|
||||||
|
{
|
||||||
|
this->addLoopbackSituation(cs, elevation, cg);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user