swift
pilotdataupdate.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 "core/fsd/serializer.h"
8 #include "misc/logmessage.h"
9 
10 using namespace swift::misc;
11 using namespace swift::misc::aviation;
12 
13 namespace swift::core::fsd
14 {
15  PilotDataUpdate::PilotDataUpdate() : MessageBase() {}
16 
17  PilotDataUpdate::PilotDataUpdate(CTransponder::TransponderMode transponderMode, const QString &sender,
18  int transponderCode, PilotRating rating, double latitude, double longitude,
19  int altitudeTrue, int altitudePressure, int groundSpeed, double pitch, double bank,
20  double heading, bool onGround)
21  : MessageBase(sender, {}), m_transponderMode(transponderMode), m_transponderCode(transponderCode),
22  m_rating(rating), m_latitude(latitude), m_longitude(longitude), m_altitudeTrue(altitudeTrue),
23  m_altitudePressure(altitudePressure), m_groundSpeed(groundSpeed), m_pitch(pitch), m_bank(bank),
24  m_heading(heading), m_onGround(onGround)
25  {}
26 
27  QStringList PilotDataUpdate::toTokens() const
28  {
29  std::uint32_t pbh;
31 
32  QStringList tokens;
33  tokens.push_back(toQString(m_transponderMode));
34  tokens.push_back(m_sender);
35  tokens.push_back(QString::number(m_transponderCode));
36  tokens.push_back(toQString(m_rating));
37  tokens.push_back(QString::number(m_latitude, 'f', 5));
38  tokens.push_back(QString::number(m_longitude, 'f', 5));
39  tokens.push_back(QString::number(m_altitudeTrue));
40  tokens.push_back(QString::number(m_groundSpeed));
41  tokens.push_back(QString::number(pbh));
42  tokens.push_back(QString::number(m_altitudePressure - m_altitudeTrue));
43  return tokens;
44  }
45 
46  PilotDataUpdate PilotDataUpdate::fromTokens(const QStringList &tokens)
47  {
48  if (tokens.size() < 10)
49  {
50  CLogMessage(static_cast<PilotDataUpdate *>(nullptr)).debug(u"Wrong number of arguments.");
51  return {};
52  }
53 
54  double pitch = 0.0;
55  double bank = 0.0;
56  double heading = 0.0;
57  bool onGround = false;
58  unpackPBH(tokens[8].toUInt(), pitch, bank, heading, onGround);
59 
60  return PilotDataUpdate(fromQString<CTransponder::TransponderMode>(tokens[0]), tokens[1], tokens[2].toInt(),
61  fromQString<PilotRating>(tokens[3]), tokens[4].toDouble(), tokens[5].toDouble(),
62  tokens[6].toInt(), tokens[6].toInt() + tokens[9].toInt(), tokens[7].toInt(), pitch, bank,
63  heading, onGround);
64  }
65 } // namespace swift::core::fsd
FSD message base class.
Definition: messagebase.h:58
QString m_sender
message sender
Definition: messagebase.h:88
Pilot data update broadcasted to all clients in range every 5 seconds.
swift::misc::aviation::CTransponder::TransponderMode m_transponderMode
Properties.
PilotRating m_rating
Properties.
static PilotDataUpdate fromTokens(const QStringList &tokens)
Construct from tokens.
QStringList toTokens() const
Message converted to tokens.
Class for emitting a log message.
Definition: logmessage.h:27
Derived & debug()
Set the severity to debug.
PilotRating
Pilot ratings.
Definition: enums.h:33
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