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(const QString &sender, const QString &receiver, double latitude,
12  double longitude, int altitudeTrue, int groundSpeed, double pitch,
13  double bank, double heading, bool onGround)
14  : MessageBase(sender, receiver), m_latitude(latitude), m_longitude(longitude), m_altitudeTrue(altitudeTrue),
15  m_groundSpeed(groundSpeed), m_pitch(pitch), m_bank(bank), m_heading(heading), m_onGround(onGround)
16  {}
17 
19  {
20  std::uint32_t pbh {};
22 
23  auto tokens = QStringList {};
24  tokens.push_back(m_sender);
25  tokens.push_back(m_receiver);
26 
27  // SquawkBox used "I", but since we are using a different message format,
28  // we also need to use a different subtype.
29  // VI = vatlib interim
30  tokens.push_back("VI");
31  tokens.push_back(QString::number(m_latitude, 'f', 5));
32  tokens.push_back(QString::number(m_longitude, 'f', 5));
33  tokens.push_back(QString::number(m_altitudeTrue));
34  tokens.push_back(QString::number(m_groundSpeed));
35  tokens.push_back(QString::number(pbh));
36  return tokens;
37  }
38 
40  {
41  if (tokens.size() < 8)
42  {
43  swift::misc::CLogMessage(static_cast<InterimPilotDataUpdate *>(nullptr))
44  .debug(u"Wrong number of arguments.");
45  return {};
46  };
47 
48  double pitch = 0.0;
49  double bank = 0.0;
50  double heading = 0.0;
51  bool onGround = false;
52  unpackPBH(tokens[7].toUInt(), pitch, bank, heading, onGround);
53 
54  return { tokens[0],
55  tokens[1],
56  tokens[3].toDouble(),
57  tokens[4].toDouble(),
58  tokens[5].toInt(),
59  tokens[6].toInt(),
60  pitch,
61  bank,
62  heading,
63  onGround };
64  }
65 } // 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
void push_back(QList< T >::parameter_type value)
qsizetype size() const const
QString number(double n, char format, int precision)