/* Copyright (C) 2013 * swift Project Community / Contributors * * This file is part of swift project. It is subject to the license terms in the LICENSE file found in the top-level * directory of this distribution. No part of swift project, including this file, may be copied, modified, propagated, * or distributed except according to the terms contained in the LICENSE file. */ //! \file #ifndef BLACKSIMPLUGIN_XSWIFTBUS_TRAFFIC_PROXY_H #define BLACKSIMPLUGIN_XSWIFTBUS_TRAFFIC_PROXY_H #include "blackmisc/genericdbusinterface.h" #include "blackmisc/aviation/callsign.h" #include "blackmisc/geo/elevationplane.h" #include #include #include // clazy:excludeall=const-signal-or-slot class QDBusConnection; //! \cond PRIVATE #define XSWIFTBUS_TRAFFIC_INTERFACENAME "org.swift_project.xswiftbus.traffic" #define XSWIFTBUS_TRAFFIC_OBJECTPATH "/xswiftbus/traffic" //! \endcond namespace BlackSimPlugin { namespace XPlane { //! List of doubles using QDoubleList = QList; //! Planes positions struct PlanesPositions { //! Is empty? bool isEmpty() const { return callsigns.isEmpty(); } //! Check function bool hasSameSizes() const { const int s = callsigns.size(); if (s != latitudesDeg.size()) { return false; } if (s != longitudesDeg.size()) { return false; } if (s != altitudesFt.size()) { return false; } if (s != pitchesDeg.size()) { return false; } if (s != rollsDeg.size()) { return false; } if (s != headingsDeg.size()) { return false; } return true; } QStringList callsigns; //!< List of callsigns QList latitudesDeg; //!< List of latitudes QList longitudesDeg; //!< List of longitudes QList altitudesFt; //!< List of altitudes QList pitchesDeg; //!< List of pitches QList rollsDeg; //!< List of rolls QList headingsDeg; //!< List of headings QList onGrounds; //!< List of onGrounds }; //! Planes surfaces struct PlanesSurfaces { //! Is empty? bool isEmpty() const { return callsigns.isEmpty(); } QStringList callsigns; //!< List of callsigns QList gears; //!< List of gears QList flaps; //!< List of flaps QList spoilers; //!< List of spoilers QList speedBrakes; //!< List of speedBrakes QList slats; //!< List of slats QList wingSweeps; //!< List of wingSweeps QList thrusts; //!< List of thrusts QList elevators; //!< List of elevators QList rudders; //!< List of rudders QList ailerons; //!< List of ailerons QList landLights; //!< List of landLights QList beaconLights; //!< List of beaconLights QList strobeLights; //!< List of strobeLights QList navLights; //!< List of navLights QList lightPatterns; //!< List of lightPatterns }; //! Plane Transponders struct PlanesTransponders { //! Is empty? bool isEmpty() const { return callsigns.isEmpty(); } QStringList callsigns; //!< List of callsigns QList codes; //!< List of transponder codes QList modeCs; //!< List of active mode C's QList idents; //!< List of active idents }; //! Multiplayer Acquire Info struct MultiplayerAcquireInfo { bool hasAcquired; //!< Has XSwiftBus acquired multiplayer planes? QString owner; //!< Name of the plugin having multiplayer planes acquired }; /*! * Proxy object connected to a real XSwiftBus::CTraffic object via DBus */ class CXSwiftBusTrafficProxy : public QObject { Q_OBJECT public: //! Elevation callback using ElevationCallback = std::function; //! Remote aircrafts data callback using RemoteAircraftDataCallback = std::function; //! Service name static const QString &InterfaceName() { static QString s(XSWIFTBUS_TRAFFIC_INTERFACENAME); return s; } //! Service path static const QString &ObjectPath() { static QString s(XSWIFTBUS_TRAFFIC_OBJECTPATH); return s; } //! Constructor CXSwiftBusTrafficProxy(QDBusConnection &connection, QObject *parent = nullptr, bool dummy = false); //! Does the remote object exist? bool isValid() const { return m_dbusInterface->isValid(); } signals: //! Simulator frame //! \remark from simulator to driver void simFrame(); //! Remote aircraft successfully added void remoteAircraftAdded(const QString &callsign); //! Remote aircraft adding failed void remoteAircraftAddingFailed(const QString &callsign); public slots: //! \copydoc XSwiftBus::CTraffic::acquireMultiplayerPlanes MultiplayerAcquireInfo acquireMultiplayerPlanes(); //! \copydoc XSwiftBus::CTraffic::initialize bool initialize(); //! \copydoc XSwiftBus::CTraffic::cleanup void cleanup(); //! \copydoc XSwiftBus::CTraffic::loadPlanesPackage QString loadPlanesPackage(const QString &path); //! \copydoc XSwiftBus::CTraffic::setDefaultIcao void setDefaultIcao(const QString &defaultIcao); //! \copydoc XSwiftBus::CTraffic::setDrawingLabels void setDrawingLabels(bool drawing); //! \copydoc XSwiftBus::CTraffic::isDrawingLabels bool isDrawingLabels() const; //! \copydoc XSwiftBus::CTraffic::setMaxPlanes void setMaxPlanes(int planes); //! \copydoc XSwiftBus::CTraffic::setMaxDrawDistance void setMaxDrawDistance(double nauticalMiles); //! \copydoc XSwiftBus::CTraffic::addPlane void addPlane(const QString &callsign, const QString &modelName, const QString &aircraftIcao, const QString &airlineIcao, const QString &livery); //! \copydoc XSwiftBus::CTraffic::removePlane void removePlane(const QString &callsign); //! \copydoc XSwiftBus::CTraffic::removeAllPlanes void removeAllPlanes(); //! \copydoc XSwiftBus::CTraffic::setPlanesPositions void setPlanesPositions(const BlackSimPlugin::XPlane::PlanesPositions &planesPositions); //! \copydoc XSwiftBus::CTraffic::setPlanesSurfaces void setPlanesSurfaces(const BlackSimPlugin::XPlane::PlanesSurfaces &planesSurfaces); //! \copydoc XSwiftBus::CTraffic::setPlanesTransponders void setPlanesTransponders(const BlackSimPlugin::XPlane::PlanesTransponders &planesTransponders); //! \deprecated XSwiftBus::CTraffic::setInterpolatorMode void setInterpolatorMode(const QString &callsign, bool spline); //! \copydoc XSwiftBus::CTraffic::getRemoteAircraftData void getRemoteAircraftData(const QStringList &callsigns, const RemoteAircraftDataCallback &setter) const; //! \copydoc XSwiftBus::CTraffic::getElevationAtPosition void getElevationAtPosition(const BlackMisc::Aviation::CCallsign &callsign, double latitudeDeg, double longitudeDeg, double altitudeMeters, const ElevationCallback &setter) const; //! \copydoc XSwiftBus::CTraffic::setFollowedAircraft void setFollowedAircraft(const QString &callsign); private: BlackMisc::CGenericDBusInterface *m_dbusInterface = nullptr; }; } // ns } // ns #endif // guard