From ea561cf72331a51a213a0f039b7cac5525feced0 Mon Sep 17 00:00:00 2001 From: Roland Winklmeier Date: Fri, 4 Nov 2016 01:41:03 +0100 Subject: [PATCH] Warn in case pitch value from simulator is out of limits refs #790 --- src/plugins/simulator/fs9/simulatorfs9.cpp | 1 + src/plugins/simulator/fscommon/fsuipc.cpp | 13 +++++++++---- src/plugins/simulator/fsx/simulatorfsx.cpp | 4 ++++ 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/plugins/simulator/fs9/simulatorfs9.cpp b/src/plugins/simulator/fs9/simulatorfs9.cpp index 11ac8fe76..7e6e0f76f 100644 --- a/src/plugins/simulator/fs9/simulatorfs9.cpp +++ b/src/plugins/simulator/fs9/simulatorfs9.cpp @@ -79,6 +79,7 @@ namespace BlackSimPlugin FS_PBH pbhstrct; pbhstrct.pbh = positionVelocity.pbh; int pitch = pbhstrct.pitch / CFs9Sdk::pitchMultiplier(); + if (pitch < -90 || pitch > 89) { CLogMessage(nullptr).warning("FS9: Pitch value out of limits: %1") << pitch; } int bank = pbhstrct.bank / CFs9Sdk::bankMultiplier(); // MSFS has inverted pitch and bank angles diff --git a/src/plugins/simulator/fscommon/fsuipc.cpp b/src/plugins/simulator/fscommon/fsuipc.cpp index e3ec0ddef..48e9c7da1 100644 --- a/src/plugins/simulator/fscommon/fsuipc.cpp +++ b/src/plugins/simulator/fscommon/fsuipc.cpp @@ -357,13 +357,18 @@ namespace BlackSimPlugin position.setGeodeticHeight(groundAltitude); situation.setPosition(position); - // speeds, situation + const double angleCorrectionFactor = 360.0 / 65536.0 / 65536.0; // see FSUIPC docu + pitchRaw *= angleCorrectionFactor; + bankRaw *= angleCorrectionFactor; + // MSFS has inverted pitch and bank angles pitchRaw = ~pitchRaw; bankRaw = ~bankRaw; - const double angleCorrectionFactor = 360.0 / 65536.0 / 65536.0; // see FSUIPC docu - CAngle pitch = CAngle(pitchRaw * angleCorrectionFactor, CAngleUnit::deg()); - CAngle bank = CAngle(bankRaw * angleCorrectionFactor, CAngleUnit::deg()); + if (pitchRaw < -90 || pitchRaw > 89) { CLogMessage(this).warning("FSUIPC: Pitch value out of limits: %1") << pitchRaw; } + + // speeds, situation + CAngle pitch = CAngle(pitchRaw, CAngleUnit::deg()); + CAngle bank = CAngle(bankRaw, CAngleUnit::deg()); CHeading heading = CHeading(headingRaw * angleCorrectionFactor, CHeading::True, CAngleUnit::deg()); CSpeed groundspeed(groundspeedRaw / 65536.0, CSpeedUnit::m_s()); CAltitude altitude(altitudeRaw / (65536.0 * 65536.0), CAltitude::MeanSeaLevel, CLengthUnit::m()); diff --git a/src/plugins/simulator/fsx/simulatorfsx.cpp b/src/plugins/simulator/fsx/simulatorfsx.cpp index 4c3944a82..534b47c1c 100644 --- a/src/plugins/simulator/fsx/simulatorfsx.cpp +++ b/src/plugins/simulator/fsx/simulatorfsx.cpp @@ -381,6 +381,10 @@ namespace BlackSimPlugin position.setLatitude(CLatitude(simulatorOwnAircraft.latitude, CAngleUnit::deg())); position.setLongitude(CLongitude(simulatorOwnAircraft.longitude, CAngleUnit::deg())); + if (simulatorOwnAircraft.pitch < -90.0 || simulatorOwnAircraft.pitch >= 90.0) + { + CLogMessage(this).warning("FSX: Pitch value out of limits: %1") << simulatorOwnAircraft.pitch; + } BlackMisc::Aviation::CAircraftSituation aircraftSituation; aircraftSituation.setPosition(position); // MSFS has inverted pitch and bank angles