From b423a62626def0b5fda3591dbe95f93d857906b9 Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Wed, 26 Jul 2017 14:19:31 +0200 Subject: [PATCH] Ref T111, access to own aircraft`s situation --- .../context/contextownaircraftimpl.cpp | 6 +++++ .../context/contextownaircraftimpl.h | 7 ++++- .../simulation/ownaircraftprovider.cpp | 8 +++++- .../simulation/ownaircraftprovider.h | 11 +++++--- .../simulation/ownaircraftproviderdummy.cpp | 26 ++++++++++++++++--- .../simulation/ownaircraftproviderdummy.h | 10 ++++--- 6 files changed, 57 insertions(+), 11 deletions(-) diff --git a/src/blackcore/context/contextownaircraftimpl.cpp b/src/blackcore/context/contextownaircraftimpl.cpp index 7bc098a46..b65d6280c 100644 --- a/src/blackcore/context/contextownaircraftimpl.cpp +++ b/src/blackcore/context/contextownaircraftimpl.cpp @@ -91,6 +91,12 @@ namespace BlackCore return this->m_ownAircraft.getPosition(); } + CAircraftSituation CContextOwnAircraft::getOwnAircraftSituation() const + { + QReadLocker l(&m_lockAircraft); + return this->m_ownAircraft.getSituation(); + } + CAircraftParts CContextOwnAircraft::getOwnAircraftParts() const { QReadLocker l(&m_lockAircraft); diff --git a/src/blackcore/context/contextownaircraftimpl.h b/src/blackcore/context/contextownaircraftimpl.h index cf105984c..5a8c860e8 100644 --- a/src/blackcore/context/contextownaircraftimpl.h +++ b/src/blackcore/context/contextownaircraftimpl.h @@ -72,10 +72,15 @@ namespace BlackCore virtual ~CContextOwnAircraft(); // IOwnAircraftProvider overrides + //! \copydoc BlackMisc::Simulation::IOwnAircraftProvider::getOwnAircraftParts //! \ingroup ownaircraftprovider - //! @{ virtual BlackMisc::Geo::CCoordinateGeodetic getOwnAircraftPosition() const override; + //! Own aircraft's situation + //! \copydoc BlackMisc::Simulation::IOwnAircraftProvider::getOwnAircraftParts + //! \ingroup ownaircraftprovider + virtual BlackMisc::Aviation::CAircraftSituation getOwnAircraftSituation() const override; + //! \copydoc BlackMisc::Simulation::IOwnAircraftProvider::getOwnAircraftParts //! \ingroup ownaircraftprovider virtual BlackMisc::Aviation::CAircraftParts getOwnAircraftParts() const override; diff --git a/src/blackmisc/simulation/ownaircraftprovider.cpp b/src/blackmisc/simulation/ownaircraftprovider.cpp index 68697eb8f..5a90a7b76 100644 --- a/src/blackmisc/simulation/ownaircraftprovider.cpp +++ b/src/blackmisc/simulation/ownaircraftprovider.cpp @@ -17,7 +17,7 @@ namespace BlackMisc { namespace Simulation { - const CSimulatedAircraft COwnAircraftAware::getOwnAircraft() const + CSimulatedAircraft COwnAircraftAware::getOwnAircraft() const { Q_ASSERT_X(this->m_ownAircraftProvider, Q_FUNC_INFO, "No object available"); return this->m_ownAircraftProvider->getOwnAircraft(); @@ -29,6 +29,12 @@ namespace BlackMisc return this->m_ownAircraftProvider->getOwnAircraftPosition(); } + CAircraftSituation COwnAircraftAware::getOwnAircraftSituation() const + { + Q_ASSERT_X(this->m_ownAircraftProvider, Q_FUNC_INFO, "No object available"); + return this->m_ownAircraftProvider->getOwnAircraftSituation(); + } + CAircraftParts COwnAircraftAware::getOwnAircraftParts() const { Q_ASSERT_X(this->m_ownAircraftProvider, Q_FUNC_INFO, "No object available"); diff --git a/src/blackmisc/simulation/ownaircraftprovider.h b/src/blackmisc/simulation/ownaircraftprovider.h index 5c5b75c82..3ee1a292f 100644 --- a/src/blackmisc/simulation/ownaircraftprovider.h +++ b/src/blackmisc/simulation/ownaircraftprovider.h @@ -52,6 +52,10 @@ namespace BlackMisc //! \threadsafe virtual BlackMisc::Geo::CCoordinateGeodetic getOwnAircraftPosition() const = 0; + //! Own aircraft's situation + //! \threadsafe + virtual BlackMisc::Aviation::CAircraftSituation getOwnAircraftSituation() const = 0; + //! Own aircraft's parts //! \threadsafe virtual BlackMisc::Aviation::CAircraftParts getOwnAircraftParts() const = 0; @@ -98,7 +102,6 @@ namespace BlackMisc //! Update cockpit, but send signals when applicable //! \threadsafe virtual bool updateSelcal(const BlackMisc::Aviation::CSelcal &selcal, const BlackMisc::CIdentifier &originator) = 0; - }; //! Delegating class which can be directly used to access an \sa IOwnAircraftProvider instance @@ -106,11 +109,14 @@ namespace BlackMisc { public: //! \copydoc IOwnAircraftProvider::getOwnAircraft - virtual const CSimulatedAircraft getOwnAircraft() const; + virtual CSimulatedAircraft getOwnAircraft() const; //! \copydoc IOwnAircraftProvider::getOwnAircraftPosition virtual BlackMisc::Geo::CCoordinateGeodetic getOwnAircraftPosition() const; + //! \copydoc IOwnAircraftProvider::getOwnAircraftPosition + virtual BlackMisc::Aviation::CAircraftSituation getOwnAircraftSituation() const; + //! \copydoc IOwnAircraftProvider::getOwnAircraftParts virtual BlackMisc::Aviation::CAircraftParts getOwnAircraftParts() const; @@ -149,7 +155,6 @@ namespace BlackMisc COwnAircraftAware(IOwnAircraftProvider *ownAircraftProvider) : m_ownAircraftProvider(ownAircraftProvider) { Q_ASSERT(ownAircraftProvider); } IOwnAircraftProvider *m_ownAircraftProvider = nullptr; //!< access to object }; - } // namespace } // namespace diff --git a/src/blackmisc/simulation/ownaircraftproviderdummy.cpp b/src/blackmisc/simulation/ownaircraftproviderdummy.cpp index 0cafb025b..657314cf3 100644 --- a/src/blackmisc/simulation/ownaircraftproviderdummy.cpp +++ b/src/blackmisc/simulation/ownaircraftproviderdummy.cpp @@ -8,7 +8,6 @@ */ #include "blackmisc/simulation/ownaircraftproviderdummy.h" - #include using namespace BlackMisc::Aviation; @@ -18,29 +17,44 @@ namespace BlackMisc { namespace Simulation { + CSimulatedAircraft COwnAircraftProviderDummy::getOwnAircraft() const + { + QReadLocker l(&m_lock); + return this->m_ownAircraft; + } Geo::CCoordinateGeodetic COwnAircraftProviderDummy::getOwnAircraftPosition() const { + QReadLocker l(&m_lock); return m_ownAircraft.getPosition(); } + CAircraftSituation COwnAircraftProviderDummy::getOwnAircraftSituation() const + { + QReadLocker l(&m_lock); + return m_ownAircraft.getSituation(); + } + CAircraftParts COwnAircraftProviderDummy::getOwnAircraftParts() const { + QReadLocker l(&m_lock); return m_ownAircraft.getParts(); } CAircraftModel COwnAircraftProviderDummy::getOwnAircraftModel() const { + QReadLocker l(&m_lock); return m_ownAircraft.getModel(); } CLength COwnAircraftProviderDummy::getDistanceToOwnAircraft(const Geo::ICoordinateGeodetic &position) const { - return m_ownAircraft.calculateGreatCircleDistance(position); + return getOwnAircraft().calculateGreatCircleDistance(position); } bool COwnAircraftProviderDummy::updateCockpit(const Aviation::CComSystem &com1, const Aviation::CComSystem &com2, const Aviation::CTransponder &transponder, const CIdentifier &originator) { + QWriteLocker l(&m_lock); m_ownAircraft.setCom1System(com1); m_ownAircraft.setCom2System(com2); m_ownAircraft.setTransponder(transponder); @@ -51,6 +65,7 @@ namespace BlackMisc bool COwnAircraftProviderDummy::updateActiveComFrequency(const PhysicalQuantities::CFrequency &frequency, CComSystem::ComUnit comUnit, const BlackMisc::CIdentifier &originator) { if (!CComSystem::isValidComFrequency(frequency)) { return false; } + QWriteLocker l(&m_lock); CComSystem com = m_ownAircraft.getComSystem(comUnit); com.setFrequencyActive(frequency); m_ownAircraft.setComSystem(com, comUnit); @@ -60,6 +75,7 @@ namespace BlackMisc bool COwnAircraftProviderDummy::updateSelcal(const CSelcal &selcal, const BlackMisc::CIdentifier &originator) { + QWriteLocker l(&m_lock); m_ownAircraft.setSelcal(selcal); Q_UNUSED(originator); return true; @@ -67,30 +83,35 @@ namespace BlackMisc bool COwnAircraftProviderDummy::updateOwnModel(const CAircraftModel &model) { + QWriteLocker l(&m_lock); m_ownAircraft.setModel(model); return true; } bool COwnAircraftProviderDummy::updateOwnSituation(const CAircraftSituation &situation) { + QWriteLocker l(&m_lock); m_ownAircraft.setSituation(situation); return true; } bool COwnAircraftProviderDummy::updateOwnParts(const CAircraftParts &parts) { + QWriteLocker l(&m_lock); m_ownAircraft.setParts(parts); return true; } bool COwnAircraftProviderDummy::updateOwnCallsign(const CCallsign &callsign) { + QWriteLocker l(&m_lock); m_ownAircraft.setCallsign(callsign); return true; } bool COwnAircraftProviderDummy::updateOwnIcaoCodes(const CAircraftIcaoCode &aircraftIcaoCode, const CAirlineIcaoCode &airlineIcaoCode) { + QWriteLocker l(&m_lock); m_ownAircraft.setIcaoCodes(aircraftIcaoCode, airlineIcaoCode); return true; } @@ -100,6 +121,5 @@ namespace BlackMisc static COwnAircraftProviderDummy *dummy = new COwnAircraftProviderDummy(); return dummy; } - } // namespace } // namespace diff --git a/src/blackmisc/simulation/ownaircraftproviderdummy.h b/src/blackmisc/simulation/ownaircraftproviderdummy.h index 13778c918..0be1bc85e 100644 --- a/src/blackmisc/simulation/ownaircraftproviderdummy.h +++ b/src/blackmisc/simulation/ownaircraftproviderdummy.h @@ -26,6 +26,7 @@ #include "blackmisc/simulation/simulatedaircraft.h" #include +#include namespace BlackMisc { @@ -39,7 +40,7 @@ namespace BlackMisc namespace Simulation { - //! For testing, thread safety not implemented in this class + //! For testing class BLACKMISC_EXPORT COwnAircraftProviderDummy : public QObject, public IOwnAircraftProvider @@ -54,11 +55,14 @@ namespace BlackMisc static COwnAircraftProviderDummy *instance(); //! \copydoc IOwnAircraftProvider::getOwnAircraft - virtual CSimulatedAircraft getOwnAircraft() const override { return this->m_ownAircraft; } + virtual CSimulatedAircraft getOwnAircraft() const override; //! \copydoc IOwnAircraftProvider::getOwnAircraftPosition virtual BlackMisc::Geo::CCoordinateGeodetic getOwnAircraftPosition() const override; + //! \copydoc IOwnAircraftProvider::getOwnAircraftSituation + virtual BlackMisc::Aviation::CAircraftSituation getOwnAircraftSituation() const override; + //! \copydoc IOwnAircraftProvider::getOwnAircraftParts virtual BlackMisc::Aviation::CAircraftParts getOwnAircraftParts() const override; @@ -95,8 +99,8 @@ namespace BlackMisc private: BlackMisc::Simulation::CSimulatedAircraft m_ownAircraft; + mutable QReadWriteLock m_lock; //!< lock for m_ownAircraft }; - } // namespace } // namespace