Regularly request remote aircraft data from X-Plane

This includes
* ground elevation
* model offset (to be implemented)

ref T259
This commit is contained in:
Roland Winklmeier
2018-02-22 21:50:28 +01:00
committed by Klaus Basan
parent 2ab6a96d57
commit 72497fdefc
6 changed files with 61 additions and 0 deletions

View File

@@ -223,6 +223,8 @@ namespace BlackSimPlugin
m_xplaneData.speedBrakeRatio > 0.5, engines, m_xplaneData.onGroundAll
};
updateOwnParts(parts);
requestRemoteAircraftDataFromXPlane();
}
}
@@ -247,6 +249,7 @@ namespace BlackSimPlugin
connect(m_service, &CXSwiftBusServiceProxy::airportsInRangeUpdated, this, &CSimulatorXPlane::ps_setAirportsInRange);
m_service->updateAirportsInRange();
connect(m_traffic, &CXSwiftBusTrafficProxy::simFrame, this, &CSimulatorXPlane::updateRemoteAircraft);
connect(m_traffic, &CXSwiftBusTrafficProxy::remoteAircraftData, this, &CSimulatorXPlane::updateRemoteAircraftFromSimulator);
if (m_watcher) { m_watcher->setConnection(m_conn); }
loadCslPackages();
emitSimulatorCombinedStatus();
@@ -1005,6 +1008,28 @@ namespace BlackSimPlugin
return true;
}
void CSimulatorXPlane::requestRemoteAircraftDataFromXPlane()
{
if (!isConnected()) { return; }
m_traffic->requestRemoteAircraftData();
}
void CSimulatorXPlane::updateRemoteAircraftFromSimulator(const QString &callsign_, double latitude, double longitude, double groundElevation, double modelVerticalOffset)
{
CCallsign callsign(callsign_);
if (!m_xplaneAircrafts.contains(callsign)) { return; }
CElevationPlane elevation(CLatitude(latitude, CAngleUnit::deg()), CLongitude(longitude, CAngleUnit::deg()), CAltitude(groundElevation, CLengthUnit::m()));
elevation.setSinglePointRadius();
CInterpolationHints &hints = m_hints[callsign];
hints.setElevationPlane(elevation); // update elevation
hints.setCGAboveGround({ modelVerticalOffset, CLengthUnit::ft() }); // normally never changing, but if user changes ModelMatching update possible
// set it in the remote aircraft provider
this->updateAircraftGroundElevation(callsign, elevation);
}
BlackCore::ISimulator *CSimulatorXPlaneFactory::create(const CSimulatorPluginInfo &info,
IOwnAircraftProvider *ownAircraftProvider,
IRemoteAircraftProvider *remoteAircraftProvider,

View File

@@ -159,6 +159,9 @@ namespace BlackSimPlugin
//! Send parts to simulator
bool sendRemoteAircraftPartsToSimulator(const CXPlaneMPAircraft &xplaneAircraft, const BlackMisc::Aviation::CAircraftParts &parts);
void requestRemoteAircraftDataFromXPlane();
void updateRemoteAircraftFromSimulator(const QString &callsign, double latitude, double longitude, double elevation, double modelVerticalOffset);
static constexpr bool c_driverInterpolation = true;
static constexpr int GuessRemoteAircraftPartsCycle = 20; //!< guess every n-th cycle

View File

@@ -115,5 +115,10 @@ namespace BlackSimPlugin
m_dbusInterface->callDBus(QLatin1String("setInterpolatorMode"), callsign, spline);
}
void CXSwiftBusTrafficProxy::requestRemoteAircraftData()
{
m_dbusInterface->callDBus(QLatin1String("requestRemoteAircraftData"));
}
}
}

View File

@@ -65,6 +65,9 @@ namespace BlackSimPlugin
//! \copydoc XSwiftBus::CTraffic::simFrame
void simFrame();
//! \copydoc XSwiftBus::CTraffic::remoteAircraftData
void remoteAircraftData(const QString &callsign, double latitude, double longitude, double elevation, double modelVerticalOffset);
public slots:
//! \copydoc XSwiftBus::CTraffic::initialize
bool initialize();
@@ -118,6 +121,9 @@ namespace BlackSimPlugin
//! \copydoc XSwiftBus::CTraffic::setInterpolatorMode
void setInterpolatorMode(const QString &callsign, bool spline);
//! \copydoc XSwiftBus::CTraffic::requestRemoteAircraftData
void requestRemoteAircraftData();
};
}