mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-05-05 17:55:45 +08:00
Add height AGL and nose gear angle in VisualPilotDataUpdate
This commit is contained in:
@@ -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()),
|
||||||
|
|||||||
@@ -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());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
Reference in New Issue
Block a user