swift
visualpilotdataupdate.cpp
1 // SPDX-FileCopyrightText: Copyright (C) 2019 swift Project Community / Contributors
2 // SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-swift-pilot-client-1
3 
5 
6 #include "pbh.h"
7 #include "serializer.h"
10 
11 #include "misc/logmessage.h"
12 
13 using namespace swift::misc;
14 using namespace swift::misc::aviation;
15 
16 namespace swift::core::fsd
17 {
18  VisualPilotDataUpdate::VisualPilotDataUpdate() : MessageBase() {}
19 
20  VisualPilotDataUpdate::VisualPilotDataUpdate(const QString &sender, double latitude, double longitude,
21  double altitudeTrue, double heightAgl, double pitch, double bank,
22  double heading, double xVelocity, double yVelocity, double zVelocity,
23  double pitchRadPerSec, double bankRadPerSec, double headingRadPerSec,
24  double noseGearAngle)
25  : MessageBase(sender, {}), m_latitude(latitude), m_longitude(longitude), m_altitudeTrue(altitudeTrue),
26  m_heightAgl(heightAgl), m_pitch(pitch), m_bank(bank), m_heading(heading), m_xVelocity(xVelocity),
27  m_yVelocity(yVelocity), m_zVelocity(zVelocity), m_pitchRadPerSec(pitchRadPerSec),
28  m_bankRadPerSec(bankRadPerSec), m_headingRadPerSec(headingRadPerSec), m_noseGearAngle(noseGearAngle)
29  {}
30 
31  QStringList VisualPilotDataUpdate::toTokens() const
32  {
33  std::uint32_t pbh;
34  packPBH(m_pitch, m_bank, m_heading, false , pbh);
35 
36  QStringList tokens;
37  tokens.push_back(m_sender);
38  tokens.push_back(QString::number(m_latitude, 'f', 7));
39  tokens.push_back(QString::number(m_longitude, 'f', 7));
40  tokens.push_back(QString::number(m_altitudeTrue, 'f', 2));
41  tokens.push_back(QString::number(m_heightAgl, 'f', 2));
42  tokens.push_back(QString::number(pbh));
43  tokens.push_back(QString::number(m_xVelocity, 'f', 4));
44  tokens.push_back(QString::number(m_yVelocity, 'f', 4));
45  tokens.push_back(QString::number(m_zVelocity, 'f', 4));
46  tokens.push_back(QString::number(m_pitchRadPerSec, 'f', 4));
47  tokens.push_back(QString::number(m_headingRadPerSec, 'f', 4));
48  tokens.push_back(QString::number(m_bankRadPerSec, 'f', 4));
49  tokens.push_back(QString::number(m_noseGearAngle, 'f', 2));
50  return tokens;
51  }
52 
54  {
55  if (tokens.size() < 12)
56  {
57  CLogMessage(static_cast<VisualPilotDataUpdate *>(nullptr)).debug(u"Wrong number of arguments.");
58  return {};
59  }
60 
61  double pitch = 0.0;
62  double bank = 0.0;
63  double heading = 0.0;
64  bool unused = false;
65  unpackPBH(tokens[5].toUInt(), pitch, bank, heading, unused);
66 
67  return VisualPilotDataUpdate(
68  tokens[0], tokens[1].toDouble(), tokens[2].toDouble(), tokens[3].toDouble(), tokens[4].toDouble(), pitch,
69  bank, heading, tokens[6].toDouble(), tokens[7].toDouble(), tokens[8].toDouble(), tokens[9].toDouble(),
70  tokens[11].toDouble(), tokens[10].toDouble(), tokens.value(12, QStringLiteral("0")).toDouble());
71  }
72 
74  {
78  }
79 
81  {
84  }
85 } // namespace swift::core::fsd
FSD message base class.
Definition: messagebase.h:58
QString m_sender
message sender
Definition: messagebase.h:88
Every 25th VisualPilotDataUpdate is actually one of these ("slowfast").
VisualPilotDataUpdate with velocity assumed to be zero.
Pilot data update broadcasted to pilots in range every 0.2 seconds.
VisualPilotDataStopped toStopped() const
Return a stopped update with the same values.
static VisualPilotDataUpdate fromTokens(const QStringList &tokens)
Construct from tokens.
VisualPilotDataPeriodic toPeriodic() const
Return a periodic update with the same values.
QStringList toTokens() const
Message converted to tokens.
Class for emitting a log message.
Definition: logmessage.h:27
Derived & debug()
Set the severity to debug.
Free functions in swift::misc.
void unpackPBH(quint32 pbh, double &pitch, double &bank, double &heading, bool &onGround)
Unpack pitch, bank, heading and onGround from 32 bit integer.
Definition: pbh.h:57
void packPBH(double pitch, double bank, double heading, bool onGround, quint32 &pbh)
Pack pitch, bank, heading and onGround into 32 bit integer.
Definition: pbh.h:38