Add height AGL and nose gear angle in VisualPilotDataUpdate

This commit is contained in:
Mat Sutcliffe
2022-01-13 17:37:52 +00:00
parent bb70bcc79d
commit 6d66066d6a
4 changed files with 27 additions and 14 deletions

View File

@@ -412,6 +412,7 @@ namespace BlackCore::Fsd
myAircraft.latitude().value(CAngleUnit::deg()), myAircraft.latitude().value(CAngleUnit::deg()),
myAircraft.longitude().value(CAngleUnit::deg()), myAircraft.longitude().value(CAngleUnit::deg()),
myAircraft.getAltitude().value(CLengthUnit::ft()), myAircraft.getAltitude().value(CLengthUnit::ft()),
myAircraft.getAltitude().value(CLengthUnit::ft()) - myAircraft.getGroundElevation().value(CLengthUnit::ft()),
myAircraft.getPitch().value(CAngleUnit::deg()), myAircraft.getPitch().value(CAngleUnit::deg()),
myAircraft.getBank().value(CAngleUnit::deg()), myAircraft.getBank().value(CAngleUnit::deg()),
myAircraft.getHeading().normalizedTo360Degrees().value(CAngleUnit::deg()), myAircraft.getHeading().normalizedTo360Degrees().value(CAngleUnit::deg()),

View File

@@ -20,13 +20,14 @@ namespace BlackCore::Fsd
VisualPilotDataUpdate::VisualPilotDataUpdate() : MessageBase() 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 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, {}), : MessageBase(sender, {}),
m_latitude(latitude), m_latitude(latitude),
m_longitude(longitude), m_longitude(longitude),
m_altitudeTrue(altitudeTrue), m_altitudeTrue(altitudeTrue),
m_heightAgl(heightAgl),
m_pitch(pitch), m_pitch(pitch),
m_bank(bank), m_bank(bank),
m_heading(heading), m_heading(heading),
@@ -35,7 +36,8 @@ namespace BlackCore::Fsd
m_zVelocity(zVelocity), m_zVelocity(zVelocity),
m_pitchRadPerSec(pitchRadPerSec), m_pitchRadPerSec(pitchRadPerSec),
m_bankRadPerSec(bankRadPerSec), m_bankRadPerSec(bankRadPerSec),
m_headingRadPerSec(headingRadPerSec) m_headingRadPerSec(headingRadPerSec),
m_noseGearAngle(noseGearAngle)
{ } { }
QStringList VisualPilotDataUpdate::toTokens() const 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_latitude, 'f', 7));
tokens.push_back(QString::number(m_longitude, '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_altitudeTrue, 'f', 2));
tokens.push_back(QString::number(m_heightAgl, 'f', 2));
tokens.push_back(QString::number(pbh)); tokens.push_back(QString::number(pbh));
tokens.push_back(QString::number(m_xVelocity, 'f', 4)); tokens.push_back(QString::number(m_xVelocity, 'f', 4));
tokens.push_back(QString::number(m_yVelocity, '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_pitchRadPerSec, 'f', 4));
tokens.push_back(QString::number(m_headingRadPerSec, '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_bankRadPerSec, 'f', 4));
tokens.push_back(QString::number(m_noseGearAngle, 'f', 2));
return tokens; return tokens;
} }
VisualPilotDataUpdate VisualPilotDataUpdate::fromTokens(const QStringList &tokens) VisualPilotDataUpdate VisualPilotDataUpdate::fromTokens(const QStringList &tokens)
{ {
if (tokens.size() < 11) if (tokens.size() < 12)
{ {
CLogMessage(static_cast<VisualPilotDataUpdate *>(nullptr)).debug(u"Wrong number of arguments."); CLogMessage(static_cast<VisualPilotDataUpdate *>(nullptr)).debug(u"Wrong number of arguments.");
return {}; return {};
@@ -70,10 +74,10 @@ namespace BlackCore::Fsd
double bank = 0.0; double bank = 0.0;
double heading = 0.0; double heading = 0.0;
bool unused = false; //! \todo check if needed? 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(), return VisualPilotDataUpdate(tokens[0], tokens[1].toDouble(), tokens[2].toDouble(), tokens[3].toDouble(), tokens[4].toDouble(),
pitch, bank, heading, tokens[5].toDouble(), tokens[6].toDouble(), tokens[7].toDouble(), pitch, bank, heading, tokens[6].toDouble(), tokens[7].toDouble(), tokens[8].toDouble(), tokens[9].toDouble(),
tokens[8].toDouble(), tokens[10].toDouble(), tokens[9].toDouble()); tokens[11].toDouble(), tokens[10].toDouble(), tokens.value(12, QStringLiteral("0")).toDouble());
} }
} }

View File

@@ -21,9 +21,9 @@ namespace BlackCore::Fsd
{ {
public: public:
//! Constructor //! 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 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 //! Message converted to tokens
QStringList toTokens() const; QStringList toTokens() const;
@@ -39,6 +39,7 @@ namespace BlackCore::Fsd
double m_latitude = 0.0; double m_latitude = 0.0;
double m_longitude = 0.0; double m_longitude = 0.0;
double m_altitudeTrue = 0.0; double m_altitudeTrue = 0.0;
double m_heightAgl = 0.0;
double m_pitch = 0.0; double m_pitch = 0.0;
double m_bank = 0.0; double m_bank = 0.0;
double m_heading = 0.0; double m_heading = 0.0;
@@ -48,6 +49,7 @@ namespace BlackCore::Fsd
double m_pitchRadPerSec = 0.0; double m_pitchRadPerSec = 0.0;
double m_bankRadPerSec = 0.0; double m_bankRadPerSec = 0.0;
double m_headingRadPerSec = 0.0; double m_headingRadPerSec = 0.0;
double m_noseGearAngle = 0.0;
//! @} //! @}
private: private:
@@ -60,6 +62,7 @@ namespace BlackCore::Fsd
return qFuzzyCompare(lhs.m_latitude, rhs.m_latitude) && return qFuzzyCompare(lhs.m_latitude, rhs.m_latitude) &&
qFuzzyCompare(lhs.m_longitude, rhs.m_longitude) && qFuzzyCompare(lhs.m_longitude, rhs.m_longitude) &&
qFuzzyCompare(lhs.m_altitudeTrue, rhs.m_altitudeTrue) && qFuzzyCompare(lhs.m_altitudeTrue, rhs.m_altitudeTrue) &&
qFuzzyCompare(lhs.m_heightAgl, rhs.m_heightAgl) &&
qFuzzyCompare(lhs.m_pitch, rhs.m_pitch) && qFuzzyCompare(lhs.m_pitch, rhs.m_pitch) &&
qFuzzyCompare(lhs.m_bank, rhs.m_bank) && qFuzzyCompare(lhs.m_bank, rhs.m_bank) &&
qFuzzyCompare(lhs.m_heading, rhs.m_heading) && qFuzzyCompare(lhs.m_heading, rhs.m_heading) &&
@@ -68,7 +71,8 @@ namespace BlackCore::Fsd
qFuzzyCompare(lhs.m_zVelocity, rhs.m_zVelocity) && qFuzzyCompare(lhs.m_zVelocity, rhs.m_zVelocity) &&
qFuzzyCompare(lhs.m_pitchRadPerSec, rhs.m_pitchRadPerSec) && qFuzzyCompare(lhs.m_pitchRadPerSec, rhs.m_pitchRadPerSec) &&
qFuzzyCompare(lhs.m_bankRadPerSec, rhs.m_bankRadPerSec) && 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 //! Not equal to operator

View File

@@ -502,12 +502,13 @@ namespace BlackMiscTest
void CTestFsdMessages::testVisualPilotDataUpdate() 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(QString("ABCD"), message.sender());
QCOMPARE(43.1257891, message.m_latitude); QCOMPARE(43.1257891, message.m_latitude);
QCOMPARE(-72.1584142, message.m_longitude); QCOMPARE(-72.1584142, message.m_longitude);
QCOMPARE(12000.12, message.m_altitudeTrue); QCOMPARE(12000.12, message.m_altitudeTrue);
QCOMPARE(1404.00, message.m_heightAgl);
QCOMPARE(-2, message.m_pitch); QCOMPARE(-2, message.m_pitch);
QCOMPARE(3, message.m_bank); QCOMPARE(3, message.m_bank);
QCOMPARE(280, message.m_heading); QCOMPARE(280, message.m_heading);
@@ -517,17 +518,19 @@ namespace BlackMiscTest
QCOMPARE(-0.0349, message.m_pitchRadPerSec); QCOMPARE(-0.0349, message.m_pitchRadPerSec);
QCOMPARE(0.0524, message.m_bankRadPerSec); QCOMPARE(0.0524, message.m_bankRadPerSec);
QCOMPARE(0.0175, message.m_headingRadPerSec); 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(":"); QString str = message.toTokens().join(":");
QCOMPARE(str, stringRef); 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); auto messageFromTokens = VisualPilotDataUpdate::fromTokens(tokens);
QCOMPARE(QString("ABCD"), messageFromTokens.sender()); QCOMPARE(QString("ABCD"), messageFromTokens.sender());
QCOMPARE(43.1257891, messageFromTokens.m_latitude); QCOMPARE(43.1257891, messageFromTokens.m_latitude);
QCOMPARE(-72.1584142, messageFromTokens.m_longitude); QCOMPARE(-72.1584142, messageFromTokens.m_longitude);
QCOMPARE(12000.12, messageFromTokens.m_altitudeTrue); QCOMPARE(12000.12, messageFromTokens.m_altitudeTrue);
QCOMPARE(1404.00, messageFromTokens.m_heightAgl);
QVERIFY(message.m_pitch - messageFromTokens.m_pitch < 1.0); QVERIFY(message.m_pitch - messageFromTokens.m_pitch < 1.0);
QVERIFY(message.m_bank - messageFromTokens.m_bank < 1.0); QVERIFY(message.m_bank - messageFromTokens.m_bank < 1.0);
QVERIFY(message.m_heading - messageFromTokens.m_heading < 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.0349, messageFromTokens.m_pitchRadPerSec);
QCOMPARE(0.0524, messageFromTokens.m_bankRadPerSec); QCOMPARE(0.0524, messageFromTokens.m_bankRadPerSec);
QCOMPARE(0.0175, messageFromTokens.m_headingRadPerSec); QCOMPARE(0.0175, messageFromTokens.m_headingRadPerSec);
QCOMPARE(0.0, messageFromTokens.m_noseGearAngle);
} }
void CTestFsdMessages::testPing() void CTestFsdMessages::testPing()