From 6d66066d6a9532a54f5c6fba8e51eada9971539c Mon Sep 17 00:00:00 2001 From: Mat Sutcliffe Date: Thu, 13 Jan 2022 17:37:52 +0000 Subject: [PATCH] Add height AGL and nose gear angle in VisualPilotDataUpdate --- src/blackcore/fsd/fsdclient.cpp | 1 + src/blackcore/fsd/visualpilotdataupdate.cpp | 20 +++++++++++-------- src/blackcore/fsd/visualpilotdataupdate.h | 10 +++++++--- .../fsd/testfsdmessages/testfsdmessages.cpp | 10 +++++++--- 4 files changed, 27 insertions(+), 14 deletions(-) diff --git a/src/blackcore/fsd/fsdclient.cpp b/src/blackcore/fsd/fsdclient.cpp index 52db5be10..4d7f366f5 100644 --- a/src/blackcore/fsd/fsdclient.cpp +++ b/src/blackcore/fsd/fsdclient.cpp @@ -412,6 +412,7 @@ namespace BlackCore::Fsd myAircraft.latitude().value(CAngleUnit::deg()), myAircraft.longitude().value(CAngleUnit::deg()), myAircraft.getAltitude().value(CLengthUnit::ft()), + myAircraft.getAltitude().value(CLengthUnit::ft()) - myAircraft.getGroundElevation().value(CLengthUnit::ft()), myAircraft.getPitch().value(CAngleUnit::deg()), myAircraft.getBank().value(CAngleUnit::deg()), myAircraft.getHeading().normalizedTo360Degrees().value(CAngleUnit::deg()), diff --git a/src/blackcore/fsd/visualpilotdataupdate.cpp b/src/blackcore/fsd/visualpilotdataupdate.cpp index 1b3ac8731..c17abe3ec 100644 --- a/src/blackcore/fsd/visualpilotdataupdate.cpp +++ b/src/blackcore/fsd/visualpilotdataupdate.cpp @@ -20,13 +20,14 @@ namespace BlackCore::Fsd VisualPilotDataUpdate::VisualPilotDataUpdate() : MessageBase() { } - VisualPilotDataUpdate::VisualPilotDataUpdate(const QString &sender, double latitude, double longitude, double altitudeTrue, + VisualPilotDataUpdate::VisualPilotDataUpdate(const QString &sender, double latitude, double longitude, double altitudeTrue, double heightAgl, double pitch, double bank, double heading, double xVelocity, double yVelocity, double zVelocity, - double pitchRadPerSec, double bankRadPerSec, double headingRadPerSec) + double pitchRadPerSec, double bankRadPerSec, double headingRadPerSec, double noseGearAngle) : MessageBase(sender, {}), m_latitude(latitude), m_longitude(longitude), m_altitudeTrue(altitudeTrue), + m_heightAgl(heightAgl), m_pitch(pitch), m_bank(bank), m_heading(heading), @@ -35,7 +36,8 @@ namespace BlackCore::Fsd m_zVelocity(zVelocity), m_pitchRadPerSec(pitchRadPerSec), m_bankRadPerSec(bankRadPerSec), - m_headingRadPerSec(headingRadPerSec) + m_headingRadPerSec(headingRadPerSec), + m_noseGearAngle(noseGearAngle) { } QStringList VisualPilotDataUpdate::toTokens() const @@ -48,6 +50,7 @@ namespace BlackCore::Fsd tokens.push_back(QString::number(m_latitude, 'f', 7)); tokens.push_back(QString::number(m_longitude, 'f', 7)); tokens.push_back(QString::number(m_altitudeTrue, 'f', 2)); + tokens.push_back(QString::number(m_heightAgl, 'f', 2)); tokens.push_back(QString::number(pbh)); tokens.push_back(QString::number(m_xVelocity, 'f', 4)); tokens.push_back(QString::number(m_yVelocity, 'f', 4)); @@ -55,12 +58,13 @@ namespace BlackCore::Fsd tokens.push_back(QString::number(m_pitchRadPerSec, 'f', 4)); tokens.push_back(QString::number(m_headingRadPerSec, 'f', 4)); tokens.push_back(QString::number(m_bankRadPerSec, 'f', 4)); + tokens.push_back(QString::number(m_noseGearAngle, 'f', 2)); return tokens; } VisualPilotDataUpdate VisualPilotDataUpdate::fromTokens(const QStringList &tokens) { - if (tokens.size() < 11) + if (tokens.size() < 12) { CLogMessage(static_cast(nullptr)).debug(u"Wrong number of arguments."); return {}; @@ -70,10 +74,10 @@ namespace BlackCore::Fsd double bank = 0.0; double heading = 0.0; bool unused = false; //! \todo check if needed? - unpackPBH(tokens[4].toUInt(), pitch, bank, heading, unused); + unpackPBH(tokens[5].toUInt(), pitch, bank, heading, unused); - return VisualPilotDataUpdate(tokens[0], tokens[1].toDouble(), tokens[2].toDouble(), tokens[3].toDouble(), - pitch, bank, heading, tokens[5].toDouble(), tokens[6].toDouble(), tokens[7].toDouble(), - tokens[8].toDouble(), tokens[10].toDouble(), tokens[9].toDouble()); + return VisualPilotDataUpdate(tokens[0], tokens[1].toDouble(), tokens[2].toDouble(), tokens[3].toDouble(), tokens[4].toDouble(), + pitch, bank, heading, tokens[6].toDouble(), tokens[7].toDouble(), tokens[8].toDouble(), tokens[9].toDouble(), + tokens[11].toDouble(), tokens[10].toDouble(), tokens.value(12, QStringLiteral("0")).toDouble()); } } diff --git a/src/blackcore/fsd/visualpilotdataupdate.h b/src/blackcore/fsd/visualpilotdataupdate.h index 5e127b08a..5db738365 100644 --- a/src/blackcore/fsd/visualpilotdataupdate.h +++ b/src/blackcore/fsd/visualpilotdataupdate.h @@ -21,9 +21,9 @@ namespace BlackCore::Fsd { public: //! Constructor - VisualPilotDataUpdate(const QString &sender, double latitude, double longitude, double altitudeTrue, + VisualPilotDataUpdate(const QString &sender, double latitude, double longitude, double altitudeTrue, double heightAgl, double pitch, double bank, double heading, double xVelocity, double yVelocity, double zVelocity, - double pitchRadPerSec, double bankRadPerSec, double headingRadPerSec); + double pitchRadPerSec, double bankRadPerSec, double headingRadPerSec, double noseGearAngle = 0.0); //! Message converted to tokens QStringList toTokens() const; @@ -39,6 +39,7 @@ namespace BlackCore::Fsd double m_latitude = 0.0; double m_longitude = 0.0; double m_altitudeTrue = 0.0; + double m_heightAgl = 0.0; double m_pitch = 0.0; double m_bank = 0.0; double m_heading = 0.0; @@ -48,6 +49,7 @@ namespace BlackCore::Fsd double m_pitchRadPerSec = 0.0; double m_bankRadPerSec = 0.0; double m_headingRadPerSec = 0.0; + double m_noseGearAngle = 0.0; //! @} private: @@ -60,6 +62,7 @@ namespace BlackCore::Fsd return qFuzzyCompare(lhs.m_latitude, rhs.m_latitude) && qFuzzyCompare(lhs.m_longitude, rhs.m_longitude) && qFuzzyCompare(lhs.m_altitudeTrue, rhs.m_altitudeTrue) && + qFuzzyCompare(lhs.m_heightAgl, rhs.m_heightAgl) && qFuzzyCompare(lhs.m_pitch, rhs.m_pitch) && qFuzzyCompare(lhs.m_bank, rhs.m_bank) && qFuzzyCompare(lhs.m_heading, rhs.m_heading) && @@ -68,7 +71,8 @@ namespace BlackCore::Fsd qFuzzyCompare(lhs.m_zVelocity, rhs.m_zVelocity) && qFuzzyCompare(lhs.m_pitchRadPerSec, rhs.m_pitchRadPerSec) && qFuzzyCompare(lhs.m_bankRadPerSec, rhs.m_bankRadPerSec) && - qFuzzyCompare(lhs.m_headingRadPerSec, rhs.m_headingRadPerSec); + qFuzzyCompare(lhs.m_headingRadPerSec, rhs.m_headingRadPerSec) && + qFuzzyCompare(lhs.m_noseGearAngle, rhs.m_noseGearAngle); } //! Not equal to operator diff --git a/tests/blackcore/fsd/testfsdmessages/testfsdmessages.cpp b/tests/blackcore/fsd/testfsdmessages/testfsdmessages.cpp index 356c0e309..ee713a8e9 100644 --- a/tests/blackcore/fsd/testfsdmessages/testfsdmessages.cpp +++ b/tests/blackcore/fsd/testfsdmessages/testfsdmessages.cpp @@ -502,12 +502,13 @@ namespace BlackMiscTest void CTestFsdMessages::testVisualPilotDataUpdate() { - const VisualPilotDataUpdate message("ABCD", 43.1257891, -72.1584142, 12000.12, -2, 3, 280, -1.0001, 2.0001, 3.0001, -0.0349, 0.0524, 0.0175); + const VisualPilotDataUpdate message("ABCD", 43.1257891, -72.1584142, 12000.12, 1404.00, -2, 3, 280, -1.0001, 2.0001, 3.0001, -0.0349, 0.0524, 0.0175); QCOMPARE(QString("ABCD"), message.sender()); QCOMPARE(43.1257891, message.m_latitude); QCOMPARE(-72.1584142, message.m_longitude); QCOMPARE(12000.12, message.m_altitudeTrue); + QCOMPARE(1404.00, message.m_heightAgl); QCOMPARE(-2, message.m_pitch); QCOMPARE(3, message.m_bank); QCOMPARE(280, message.m_heading); @@ -517,17 +518,19 @@ namespace BlackMiscTest QCOMPARE(-0.0349, message.m_pitchRadPerSec); QCOMPARE(0.0524, message.m_bankRadPerSec); QCOMPARE(0.0175, message.m_headingRadPerSec); + QCOMPARE(0.0, message.m_noseGearAngle); - QString stringRef("ABCD:43.1257891:-72.1584142:12000.12:25132144:-1.0001:2.0001:3.0001:-0.0349:0.0175:0.0524"); + QString stringRef("ABCD:43.1257891:-72.1584142:12000.12:1404.00:25132144:-1.0001:2.0001:3.0001:-0.0349:0.0175:0.0524:0.00"); QString str = message.toTokens().join(":"); QCOMPARE(str, stringRef); - QStringList tokens = QString("ABCD:43.1257891:-72.1584142:12000.12:25132144:-1.0001:2.0001:3.0001:-0.0349:0.0175:0.0524").split(':'); + QStringList tokens = QString("ABCD:43.1257891:-72.1584142:12000.12:1404.00:25132144:-1.0001:2.0001:3.0001:-0.0349:0.0175:0.0524:0.00").split(':'); auto messageFromTokens = VisualPilotDataUpdate::fromTokens(tokens); QCOMPARE(QString("ABCD"), messageFromTokens.sender()); QCOMPARE(43.1257891, messageFromTokens.m_latitude); QCOMPARE(-72.1584142, messageFromTokens.m_longitude); QCOMPARE(12000.12, messageFromTokens.m_altitudeTrue); + QCOMPARE(1404.00, messageFromTokens.m_heightAgl); QVERIFY(message.m_pitch - messageFromTokens.m_pitch < 1.0); QVERIFY(message.m_bank - messageFromTokens.m_bank < 1.0); QVERIFY(message.m_heading - messageFromTokens.m_heading < 1.0); @@ -537,6 +540,7 @@ namespace BlackMiscTest QCOMPARE(-0.0349, messageFromTokens.m_pitchRadPerSec); QCOMPARE(0.0524, messageFromTokens.m_bankRadPerSec); QCOMPARE(0.0175, messageFromTokens.m_headingRadPerSec); + QCOMPARE(0.0, messageFromTokens.m_noseGearAngle); } void CTestFsdMessages::testPing()