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(CTransponder::TransponderMode transponderMode, const QString &sender,
16  int transponderCode, PilotRating rating, double latitude, double longitude,
17  int altitudeTrue, int altitudePressure, int groundSpeed, double pitch, double bank,
18  double heading, bool onGround)
19  : MessageBase(sender, {}), m_transponderMode(transponderMode), m_transponderCode(transponderCode),
20  m_rating(rating), m_latitude(latitude), m_longitude(longitude), m_altitudeTrue(altitudeTrue),
21  m_altitudePressure(altitudePressure), m_groundSpeed(groundSpeed), m_pitch(pitch), m_bank(bank),
22  m_heading(heading), m_onGround(onGround)
23  {}
24 
26  {
27  std::uint32_t pbh {};
29 
30  QStringList tokens;
31  tokens.push_back(toQString(m_transponderMode));
32  tokens.push_back(m_sender);
34  tokens.push_back(toQString(m_rating));
35  tokens.push_back(QString::number(m_latitude, 'f', 5));
36  tokens.push_back(QString::number(m_longitude, 'f', 5));
39  tokens.push_back(QString::number(pbh));
41  return tokens;
42  }
43 
45  {
46  if (tokens.size() < 10)
47  {
48  CLogMessage(static_cast<PilotDataUpdate *>(nullptr)).debug(u"Wrong number of arguments.");
49  return {};
50  }
51 
52  double pitch = 0.0;
53  double bank = 0.0;
54  double heading = 0.0;
55  bool onGround = false;
56  unpackPBH(tokens[8].toUInt(), pitch, bank, heading, onGround);
57 
58  return { fromQString<CTransponder::TransponderMode>(tokens[0]),
59  tokens[1],
60  tokens[2].toInt(),
61  fromQString<PilotRating>(tokens[3]),
62  tokens[4].toDouble(),
63  tokens[5].toDouble(),
64  tokens[6].toInt(),
65  tokens[6].toInt() + tokens[9].toInt(),
66  tokens[7].toInt(),
67  pitch,
68  bank,
69  heading,
70  onGround };
71  }
72 } // 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
void push_back(QList< T >::parameter_type value)
qsizetype size() const const
QString number(double n, char format, int precision)