From 1a500340f04f694e3aaca44e2b90addfe5a937f9 Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Fri, 16 Dec 2016 22:08:41 +0100 Subject: [PATCH] refs #836, elevation for own FSX/P3D aircraft in driver plus some minor improvements such as const where applicable --- .../simulator/fsx/simconnectdatadefinition.cpp | 5 +++-- .../simulator/fsx/simconnectdatadefinition.h | 15 ++++++++------- src/plugins/simulator/fsx/simulatorfsx.cpp | 13 ++++++------- src/plugins/simulator/fsx/simulatorfsx.h | 4 ++-- .../simulator/fsx/simulatorfsxsimconnectproc.cpp | 9 ++++----- 5 files changed, 23 insertions(+), 23 deletions(-) diff --git a/src/plugins/simulator/fsx/simconnectdatadefinition.cpp b/src/plugins/simulator/fsx/simconnectdatadefinition.cpp index 3a7384040..309e78d63 100644 --- a/src/plugins/simulator/fsx/simconnectdatadefinition.cpp +++ b/src/plugins/simulator/fsx/simconnectdatadefinition.cpp @@ -38,8 +38,9 @@ namespace BlackSimPlugin hr += SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataOwnAircraft, "Plane Heading Degrees True", "Degrees"); hr += SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataOwnAircraft, "Plane Pitch Degrees", "Degrees"); hr += SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataOwnAircraft, "Plane Bank Degrees", "Degrees"); - hr += SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataOwnAircraft, "GROUND VELOCITY", "knots"); - hr += SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataOwnAircraft, "SIM ON GROUND", "bool"); + hr += SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataOwnAircraft, "GROUND VELOCITY", "Knots"); + hr += SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataOwnAircraft, "GROUND ALTITUDE", "Meters"); + hr += SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataOwnAircraft, "SIM ON GROUND", "Bool"); hr += SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataOwnAircraft, "LIGHT STROBE", "Bool"); hr += SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataOwnAircraft, "LIGHT LANDING", "Bool"); hr += SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataOwnAircraft, "LIGHT TAXI", "Bool"); diff --git a/src/plugins/simulator/fsx/simconnectdatadefinition.h b/src/plugins/simulator/fsx/simconnectdatadefinition.h index f47008fc0..2457c3b7d 100644 --- a/src/plugins/simulator/fsx/simconnectdatadefinition.h +++ b/src/plugins/simulator/fsx/simconnectdatadefinition.h @@ -31,13 +31,14 @@ namespace BlackSimPlugin //! \sa SimConnect events http://msdn.microsoft.com/en-us/library/cc526980.aspx struct DataDefinitionOwnAircraft { - double latitude; //!< Latitude - double longitude; //!< Longitude - double altitude; //!< Altitude - double trueHeading; //!< True heading - double pitch; //!< Pitch - double bank; //!< Bank + double latitude; //!< Latitude (deg) + double longitude; //!< Longitude (deg) + double altitude; //!< Altitude (ft) + double trueHeading; //!< True heading (deg) + double pitch; //!< Pitch (deg) + double bank; //!< Bank (deg) double velocity; //!< Ground velocity + double elevation; //!< Elevation (m) double simOnGround; //!< Is aircraft on ground? double lightStrobe; //!< Is strobe light on? @@ -154,7 +155,7 @@ namespace BlackSimPlugin RequestRemoveAircraft, RequestOwnAircraftTitle, RequestSimEnvironment, - RequestSbData, // SB client area / XPDR mode .. + RequestSbData, //!< SB client area / XPDR mode }; //! Constructor diff --git a/src/plugins/simulator/fsx/simulatorfsx.cpp b/src/plugins/simulator/fsx/simulatorfsx.cpp index 0a6354be3..5aec9d7b5 100644 --- a/src/plugins/simulator/fsx/simulatorfsx.cpp +++ b/src/plugins/simulator/fsx/simulatorfsx.cpp @@ -372,7 +372,7 @@ namespace BlackSimPlugin disconnectFrom(); } - void CSimulatorFsx::updateOwnAircraftFromSimulator(DataDefinitionOwnAircraft simulatorOwnAircraft) + void CSimulatorFsx::updateOwnAircraftFromSimulator(const DataDefinitionOwnAircraft &simulatorOwnAircraft) { CSimulatedAircraft myAircraft(getOwnAircraft()); BlackMisc::Geo::CCoordinateGeodetic position; @@ -386,12 +386,11 @@ namespace BlackSimPlugin BlackMisc::Aviation::CAircraftSituation aircraftSituation; aircraftSituation.setPosition(position); // MSFS has inverted pitch and bank angles - simulatorOwnAircraft.pitch = -simulatorOwnAircraft.pitch; - simulatorOwnAircraft.bank = -simulatorOwnAircraft.bank; - aircraftSituation.setPitch(CAngle(simulatorOwnAircraft.pitch, CAngleUnit::deg())); - aircraftSituation.setBank(CAngle(simulatorOwnAircraft.bank, CAngleUnit::deg())); + aircraftSituation.setPitch(CAngle(-simulatorOwnAircraft.pitch, CAngleUnit::deg())); + aircraftSituation.setBank(CAngle(-simulatorOwnAircraft.bank, CAngleUnit::deg())); aircraftSituation.setHeading(CHeading(simulatorOwnAircraft.trueHeading, CHeading::True, CAngleUnit::deg())); aircraftSituation.setGroundSpeed(CSpeed(simulatorOwnAircraft.velocity, CSpeedUnit::kts())); + aircraftSituation.setGroundElevation(CAltitude(simulatorOwnAircraft.elevation, CAltitude::MeanSeaLevel, CLengthUnit::m())); aircraftSituation.setAltitude(CAltitude(simulatorOwnAircraft.altitude, CAltitude::MeanSeaLevel, CLengthUnit::ft())); CAircraftLights lights(simulatorOwnAircraft.lightStrobe, @@ -464,7 +463,7 @@ namespace BlackSimPlugin } } - void CSimulatorFsx::updateOwnAircraftFromSimulator(DataDefinitionClientAreaSb sbDataArea) + void CSimulatorFsx::updateOwnAircraftFromSimulator(const DataDefinitionClientAreaSb &sbDataArea) { CTransponder::TransponderMode newMode; if (sbDataArea.isIdent()) @@ -673,7 +672,7 @@ namespace BlackSimPlugin if (simObject.isPendingAdded()) { // problem: we try to delete an aircraft just requested to be added - return false; //! \fixme improve + return false; //! \fixme improve, since this scenario is not really covered } simObject.setPendingRemoved(true); diff --git a/src/plugins/simulator/fsx/simulatorfsx.h b/src/plugins/simulator/fsx/simulatorfsx.h index 43a1c5cdd..64fdb9887 100644 --- a/src/plugins/simulator/fsx/simulatorfsx.h +++ b/src/plugins/simulator/fsx/simulatorfsx.h @@ -106,10 +106,10 @@ namespace BlackSimPlugin bool stillDisplayReceiveExceptions(); //! Called when data about our own aircraft are received - void updateOwnAircraftFromSimulator(DataDefinitionOwnAircraft simulatorOwnAircraft); + void updateOwnAircraftFromSimulator(const DataDefinitionOwnAircraft &simulatorOwnAircraft); //! Update from SB client area - void updateOwnAircraftFromSimulator(DataDefinitionClientAreaSb sbDataArea); + void updateOwnAircraftFromSimulator(const DataDefinitionClientAreaSb &sbDataArea); //! An AI aircraft was added in the simulator bool simulatorReportedObjectAdded(DWORD objectID); diff --git a/src/plugins/simulator/fsx/simulatorfsxsimconnectproc.cpp b/src/plugins/simulator/fsx/simulatorfsxsimconnectproc.cpp index 03399552c..e4e74c08f 100644 --- a/src/plugins/simulator/fsx/simulatorfsxsimconnectproc.cpp +++ b/src/plugins/simulator/fsx/simulatorfsxsimconnectproc.cpp @@ -173,15 +173,14 @@ namespace BlackSimPlugin { case CSimConnectDefinitions::RequestOwnAircraft: { - static_assert(sizeof(DataDefinitionOwnAircraft) == 27 * sizeof(double), "DataDefinitionOwnAircraft has an incorrect size."); - DataDefinitionOwnAircraft *ownAircaft; - ownAircaft = (DataDefinitionOwnAircraft *)&pObjData->dwData; + static_assert(sizeof(DataDefinitionOwnAircraft) == 28 * sizeof(double), "DataDefinitionOwnAircraft has an incorrect size."); + const DataDefinitionOwnAircraft *ownAircaft = (DataDefinitionOwnAircraft *)&pObjData->dwData; simulatorFsx->updateOwnAircraftFromSimulator(*ownAircaft); break; } case CSimConnectDefinitions::RequestOwnAircraftTitle: { - DataDefinitionOwnAircraftModel *dataDefinitionModel = (DataDefinitionOwnAircraftModel *) &pObjData->dwData; + const DataDefinitionOwnAircraftModel *dataDefinitionModel = (DataDefinitionOwnAircraftModel *) &pObjData->dwData; CAircraftModel model; model.setModelString(dataDefinitionModel->title); model.setModelType(CAircraftModel::TypeOwnSimulatorModel); @@ -190,7 +189,7 @@ namespace BlackSimPlugin } case CSimConnectDefinitions::RequestSimEnvironment: { - DataDefinitionSimEnvironment *simEnv = (DataDefinitionSimEnvironment *) &pObjData->dwData; + const DataDefinitionSimEnvironment *simEnv = (DataDefinitionSimEnvironment *) &pObjData->dwData; if (simulatorFsx->isTimeSynchronized()) { const int zh = simEnv->zuluTimeSeconds / 3600;