swift
interimpilotdataupdate.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 "core/fsd/pbh.h"
7 #include "misc/logmessage.h"
8 
9 namespace swift::core::fsd
10 {
11  InterimPilotDataUpdate::InterimPilotDataUpdate() : MessageBase() {}
12 
13  InterimPilotDataUpdate::InterimPilotDataUpdate(const QString &sender, const QString &receiver, double latitude,
14  double longitude, int altitudeTrue, int groundSpeed, double pitch,
15  double bank, double heading, bool onGround)
16  : MessageBase(sender, receiver), m_latitude(latitude), m_longitude(longitude), m_altitudeTrue(altitudeTrue),
17  m_groundSpeed(groundSpeed), m_pitch(pitch), m_bank(bank), m_heading(heading), m_onGround(onGround)
18  {}
19 
21  {
22  std::uint32_t pbh;
24 
25  auto tokens = QStringList {};
26  tokens.push_back(m_sender);
27  tokens.push_back(m_receiver);
28 
29  // SquawkBox used "I", but since we are using a different message format,
30  // we also need to use a different subtype.
31  // VI = vatlib interim
32  tokens.push_back("VI");
33  tokens.push_back(QString::number(m_latitude, 'f', 5));
34  tokens.push_back(QString::number(m_longitude, 'f', 5));
35  tokens.push_back(QString::number(m_altitudeTrue));
36  tokens.push_back(QString::number(m_groundSpeed));
37  tokens.push_back(QString::number(pbh));
38  return tokens;
39  }
40 
42  {
43  if (tokens.size() < 8)
44  {
45  swift::misc::CLogMessage(static_cast<InterimPilotDataUpdate *>(nullptr))
46  .debug(u"Wrong number of arguments.");
47  return {};
48  };
49 
50  double pitch = 0.0;
51  double bank = 0.0;
52  double heading = 0.0;
53  bool onGround = false;
54  unpackPBH(tokens[7].toUInt(), pitch, bank, heading, onGround);
55 
56  return InterimPilotDataUpdate(tokens[0], tokens[1], tokens[3].toDouble(), tokens[4].toDouble(),
57  tokens[5].toInt(), tokens[6].toInt(), pitch, bank, heading, onGround);
58  }
59 } // namespace swift::core::fsd
Interim pilot data update sent to specific receivers faster than the standard broadcast update.
QStringList toTokens() const
Message converted to tokens.
static InterimPilotDataUpdate fromTokens(const QStringList &tokens)
Construct from tokens.
FSD message base class.
Definition: messagebase.h:58
QString m_receiver
message receiver
Definition: messagebase.h:89
QString m_sender
message sender
Definition: messagebase.h:88
Class for emitting a log message.
Definition: logmessage.h:27
Derived & debug()
Set the severity to debug.
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