From 616cc241f4037abb83d416f3ed7307ece47806af Mon Sep 17 00:00:00 2001 From: Roland Winklmeier Date: Tue, 25 Sep 2018 22:36:18 +0200 Subject: [PATCH] [XSwiftBus] Convert setPlanesTransponders to list setter ref T374 --- .../xplane/xswiftbustrafficproxy.cpp | 6 ++- .../simulator/xplane/xswiftbustrafficproxy.h | 16 ++++++- .../org.swift_project.xswiftbus.traffic.xml | 10 ++--- src/xswiftbus/traffic.cpp | 44 ++++++++++--------- src/xswiftbus/traffic.h | 4 +- 5 files changed, 49 insertions(+), 31 deletions(-) diff --git a/src/plugins/simulator/xplane/xswiftbustrafficproxy.cpp b/src/plugins/simulator/xplane/xswiftbustrafficproxy.cpp index c2ddaea1d..0e30d956f 100644 --- a/src/plugins/simulator/xplane/xswiftbustrafficproxy.cpp +++ b/src/plugins/simulator/xplane/xswiftbustrafficproxy.cpp @@ -115,9 +115,11 @@ namespace BlackSimPlugin planesSurfaces.navLights, planesSurfaces.lightPatterns); } - void CXSwiftBusTrafficProxy::setPlaneTransponder(const QString &callsign, int code, bool modeC, bool ident) + void CXSwiftBusTrafficProxy::setPlanesTransponders(const PlanesTransponders &planesTransponders) { - m_dbusInterface->callDBus(QLatin1String("setPlaneTransponder"), callsign, code, modeC, ident); + m_dbusInterface->callDBus(QLatin1String("setPlanesTransponders"), + planesTransponders.callsigns, planesTransponders.codes, + planesTransponders.modeCs, planesTransponders.idents); } void CXSwiftBusTrafficProxy::setInterpolatorMode(const QString &callsign, bool spline) diff --git a/src/plugins/simulator/xplane/xswiftbustrafficproxy.h b/src/plugins/simulator/xplane/xswiftbustrafficproxy.h index 94108c1d3..50377e8a6 100644 --- a/src/plugins/simulator/xplane/xswiftbustrafficproxy.h +++ b/src/plugins/simulator/xplane/xswiftbustrafficproxy.h @@ -87,6 +87,18 @@ namespace BlackSimPlugin QList lightPatterns; //!< List of lightPatterns }; + //! Plane Transponders + struct PlanesTransponders + { + //! Is empty? + bool isEmpty() const { return callsigns.isEmpty(); } + + QStringList callsigns; + QList codes; + QList modeCs; + QList idents; + }; + /*! * Proxy object connected to a real XSwiftBus::CTraffic object via DBus */ @@ -172,8 +184,8 @@ namespace BlackSimPlugin //! \copydoc XSwiftBus::CTraffic::setPlanesSurfaces void setPlanesSurfaces(const PlanesSurfaces &planesSurfaces); - //! \copydoc XSwiftBus::CTraffic::setPlaneTransponder - void setPlaneTransponder(const QString &callsign, int code, bool modeC, bool ident); + //! \copydoc XSwiftBus::CTraffic::setPlanesTransponders + void setPlanesTransponders(const PlanesTransponders &planesTransponders); //! \deprecated XSwiftBus::CTraffic::setInterpolatorMode void setInterpolatorMode(const QString &callsign, bool spline); diff --git a/src/xswiftbus/org.swift_project.xswiftbus.traffic.xml b/src/xswiftbus/org.swift_project.xswiftbus.traffic.xml index 3f0aa9449..af4fdaec2 100644 --- a/src/xswiftbus/org.swift_project.xswiftbus.traffic.xml +++ b/src/xswiftbus/org.swift_project.xswiftbus.traffic.xml @@ -64,11 +64,11 @@ R"( - - - - - + + + + + diff --git a/src/xswiftbus/traffic.cpp b/src/xswiftbus/traffic.cpp index fdf4967ae..34be18474 100644 --- a/src/xswiftbus/traffic.cpp +++ b/src/xswiftbus/traffic.cpp @@ -370,18 +370,22 @@ namespace XSwiftBus } } - void CTraffic::setPlaneTransponder(const std::string &callsign, int code, bool modeC, bool ident) + void CTraffic::setPlanesTransponders(const std::vector &callsigns, const std::vector &codes, const std::vector &modeCs, const std::vector &idents) { - auto planeIt = m_planesByCallsign.find(callsign); - if (planeIt == m_planesByCallsign.end()) { return; } + for (size_t i = 0; i < callsigns.size(); i++) + { + auto planeIt = m_planesByCallsign.find(callsigns.at(i)); + if (planeIt == m_planesByCallsign.end()) { return; } - Plane *plane = planeIt->second; - if (!plane) { return; } - plane->hasXpdr = true; - plane->xpdr.code = code; - if (ident) { plane->xpdr.mode = xpmpTransponderMode_ModeC_Ident; } - else if (modeC) { plane->xpdr.mode = xpmpTransponderMode_ModeC; } - else { plane->xpdr.mode = xpmpTransponderMode_Standby; } + Plane *plane = planeIt->second; + if (!plane) { return; } + + plane->hasXpdr = true; + plane->xpdr.code = codes.at(i); + if (idents.at(i)) { plane->xpdr.mode = xpmpTransponderMode_ModeC_Ident; } + else if (modeCs.at(i)) { plane->xpdr.mode = xpmpTransponderMode_ModeC; } + else { plane->xpdr.mode = xpmpTransponderMode_Standby; } + } } void CTraffic::getRemoteAircraftData(std::vector &callsigns, std::vector &latitudesDeg, std::vector &longitudesDeg, @@ -642,21 +646,21 @@ namespace XSwiftBus rudders, ailerons, landLights, beaconLights, strobeLights, navLights, lightPatterns); }); } - else if (message.getMethodName() == "setPlaneTransponder") + else if (message.getMethodName() == "setPlanesTransponders") { maybeSendEmptyDBusReply(wantsReply, sender, serial); - std::string callsign; - int code = 0; - bool modeC = false; - bool ident = false; + std::vector callsigns; + std::vector codes; + std::vector modeCs; + std::vector idents; message.beginArgumentRead(); - message.getArgument(callsign); - message.getArgument(code); - message.getArgument(modeC); - message.getArgument(ident); + message.getArgument(callsigns); + message.getArgument(codes); + message.getArgument(modeCs); + message.getArgument(idents); queueDBusCall([ = ]() { - setPlaneTransponder(callsign, code, modeC, ident); + setPlanesTransponders(callsigns, codes, modeCs, idents); }); } else if (message.getMethodName() == "getRemoteAircraftData") diff --git a/src/xswiftbus/traffic.h b/src/xswiftbus/traffic.h index 0abf62cec..42def0f3d 100644 --- a/src/xswiftbus/traffic.h +++ b/src/xswiftbus/traffic.h @@ -105,8 +105,8 @@ namespace XSwiftBus const std::vector &elevators, const std::vector &rudders, const std::vector &ailerons, const std::vector &landLights, const std::vector &beaconLights, const std::vector &strobeLights, const std::vector &navLights, const std::vector &lightPatterns); - //! Set the transponder of a traffic aircraft - void setPlaneTransponder(const std::string &callsign, int code, bool modeC, bool ident); + //! Set the transponder of multiple traffic aircraft + void setPlanesTransponders(const std::vector &callsigns, const std::vector &codes, const std::vector &modeCs, const std::vector &idents); //! Get remote aircrafts data (lat, lon, elevation and CG) void getRemoteAircraftData(std::vector &callsigns, std::vector &latitudesDeg, std::vector &longitudesDeg,