swift
comnavequipment.cpp
1 // SPDX-FileCopyrightText: Copyright (C) swift Project Community / Contributors
2 // SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-swift-pilot-client-1
3 
4 #include "comnavequipment.h"
5 
6 SWIFT_DEFINE_VALUEOBJECT_MIXINS(swift::misc::aviation, CComNavEquipment)
7 
8 namespace swift::misc::aviation
9 {
10  CComNavEquipment::CComNavEquipment(ComNavEquipment comNavEquipment, CpdlcSatcomEquipment cpdlcSatcomEquipment)
11  : m_equipment(comNavEquipment), m_cpdlcSatcomEquipment(cpdlcSatcomEquipment)
12  {
13  if (m_equipment == ComNavEquipment()) { m_equipment = NoEquip; }
14  }
15 
17  {
18  if (equipment.isEmpty()) { return; }
19 
20  m_equipment = {}; // Clear default flag
21 
22  auto append_equipment_flag_if_exist = [&equipment, this](ComNavEquipmentOption flag) {
23  QString str = flagToString(flag);
24  if (equipment.contains(str))
25  {
26  equipment = equipment.remove(str);
27  m_equipment |= flag;
28  }
29  };
30 
31  auto append_satcom_flag_if_exist = [&equipment, this](CpdlcSatcomEquipmentOption flag) {
32  QString str = flagToString(flag);
33  if (equipment.contains(str))
34  {
35  equipment = equipment.remove(str);
36  m_cpdlcSatcomEquipment |= flag;
37  }
38  };
39 
40  append_equipment_flag_if_exist(Standard);
41  append_equipment_flag_if_exist(Gbas);
42  append_equipment_flag_if_exist(Lpv);
43  append_equipment_flag_if_exist(LoranC);
44  append_equipment_flag_if_exist(Dme);
45  append_equipment_flag_if_exist(FmcAcars);
46  append_equipment_flag_if_exist(DFisAcars);
47  append_equipment_flag_if_exist(PdcAcars);
48  append_equipment_flag_if_exist(Adf);
49  append_equipment_flag_if_exist(Gnss);
50  append_equipment_flag_if_exist(HfRtf);
51  append_equipment_flag_if_exist(InertiaNavigation);
52  append_equipment_flag_if_exist(Mls);
53  append_equipment_flag_if_exist(Ils);
54  append_equipment_flag_if_exist(NoEquip);
55  append_equipment_flag_if_exist(Vor);
56  append_equipment_flag_if_exist(Pbn);
57  append_equipment_flag_if_exist(Tacan);
58  append_equipment_flag_if_exist(UhfRtf);
59  append_equipment_flag_if_exist(VhfRtf);
60  append_equipment_flag_if_exist(Rvsm);
61  append_equipment_flag_if_exist(Mnps);
62  append_equipment_flag_if_exist(Vhf833);
63  append_equipment_flag_if_exist(Other);
64  append_satcom_flag_if_exist(CpdlcAtn);
65  append_satcom_flag_if_exist(CpdlcFansHfdl);
66  append_satcom_flag_if_exist(CpdlcFansVdlA);
67  append_satcom_flag_if_exist(CpdlcFansVdl2);
68  append_satcom_flag_if_exist(CpdlcFansSatcomInmarsat);
69  append_satcom_flag_if_exist(CpdlcFansSatcomMtsat);
70  append_satcom_flag_if_exist(CpdlcFansSatcomIridium);
71  append_satcom_flag_if_exist(AtcSatvoiceInmarsat);
72  append_satcom_flag_if_exist(AtcSatvoiceMtsat);
73  append_satcom_flag_if_exist(AtcSatvoiceIridium);
74  append_satcom_flag_if_exist(CpdlcRcp400);
75  append_satcom_flag_if_exist(CpdlcRcp240);
76  append_satcom_flag_if_exist(SatvoiceRcp400);
77 
78  if (!equipment.isEmpty() && m_equipment == ComNavEquipment())
79  {
80  // Default if nothing correct is provided
81  m_equipment = NoEquip;
82  m_cpdlcSatcomEquipment = {};
83  }
84  }
85 
87  {
88  QStringList list;
89 
90  auto append_equipment_flag_if_exist = [&list, this](ComNavEquipmentOption flag) {
91  if (m_equipment.testFlag(flag)) list << flagToString(flag);
92  };
93 
94  auto append_satcom_flag_if_exist = [&list, this](CpdlcSatcomEquipmentOption flag) {
95  if (m_cpdlcSatcomEquipment.testFlag(flag)) list << flagToString(flag);
96  };
97 
98  append_equipment_flag_if_exist(Standard);
99  append_equipment_flag_if_exist(Gbas);
100  append_equipment_flag_if_exist(Lpv);
101  append_equipment_flag_if_exist(LoranC);
102  append_equipment_flag_if_exist(Dme);
103  append_equipment_flag_if_exist(FmcAcars);
104  append_equipment_flag_if_exist(DFisAcars);
105  append_equipment_flag_if_exist(PdcAcars);
106  append_equipment_flag_if_exist(Adf);
107  append_equipment_flag_if_exist(Gnss);
108  append_equipment_flag_if_exist(HfRtf);
109  append_equipment_flag_if_exist(InertiaNavigation);
110  append_satcom_flag_if_exist(CpdlcAtn);
111  append_satcom_flag_if_exist(CpdlcFansHfdl);
112  append_satcom_flag_if_exist(CpdlcFansVdlA);
113  append_satcom_flag_if_exist(CpdlcFansVdl2);
114  append_satcom_flag_if_exist(CpdlcFansSatcomInmarsat);
115  append_satcom_flag_if_exist(CpdlcFansSatcomMtsat);
116  append_satcom_flag_if_exist(CpdlcFansSatcomIridium);
117  append_equipment_flag_if_exist(Mls);
118  append_equipment_flag_if_exist(Ils);
119  append_satcom_flag_if_exist(AtcSatvoiceInmarsat);
120  append_satcom_flag_if_exist(AtcSatvoiceMtsat);
121  append_satcom_flag_if_exist(AtcSatvoiceIridium);
122  append_equipment_flag_if_exist(NoEquip);
123  append_equipment_flag_if_exist(Vor);
124  append_satcom_flag_if_exist(CpdlcRcp400);
125  append_satcom_flag_if_exist(CpdlcRcp240);
126  append_satcom_flag_if_exist(SatvoiceRcp400);
127  append_equipment_flag_if_exist(Pbn);
128  append_equipment_flag_if_exist(Tacan);
129  append_equipment_flag_if_exist(UhfRtf);
130  append_equipment_flag_if_exist(VhfRtf);
131  append_equipment_flag_if_exist(Rvsm);
132  append_equipment_flag_if_exist(Mnps);
133  append_equipment_flag_if_exist(Vhf833);
134  append_equipment_flag_if_exist(Other);
135 
136  return list;
137  }
138 
140  {
141  const QString equipmentString = enabledOptions().join("");
142  Q_ASSERT_X(!equipmentString.isEmpty(), Q_FUNC_INFO, "Equipment string should not be empty");
143  return equipmentString;
144  }
145 
146  QString CComNavEquipment::flagToString(CpdlcSatcomEquipmentOption flag)
147  {
148  switch (flag)
149  {
150  case CpdlcAtn: return QStringLiteral("J1");
151  case CpdlcFansHfdl: return QStringLiteral("J2");
152  case CpdlcFansVdlA: return QStringLiteral("J3");
153  case CpdlcFansVdl2: return QStringLiteral("J4");
154  case CpdlcFansSatcomInmarsat: return QStringLiteral("J5");
155  case CpdlcFansSatcomMtsat: return QStringLiteral("J6");
156  case CpdlcFansSatcomIridium: return QStringLiteral("J7");
157  case AtcSatvoiceInmarsat: return QStringLiteral("M1");
158  case AtcSatvoiceMtsat: return QStringLiteral("M2");
159  case AtcSatvoiceIridium: return QStringLiteral("M3");
160  case CpdlcRcp400: return QStringLiteral("P1");
161  case CpdlcRcp240: return QStringLiteral("P2");
162  case SatvoiceRcp400: return QStringLiteral("P3");
163  default: return {};
164  }
165  }
166 
167  QString CComNavEquipment::flagToString(ComNavEquipmentOption flag)
168  {
169  switch (flag)
170  {
171  case Standard: return QStringLiteral("S");
172  case Gbas: return QStringLiteral("A");
173  case Lpv: return QStringLiteral("B");
174  case LoranC: return QStringLiteral("C");
175  case Dme: return QStringLiteral("D");
176  case FmcAcars: return QStringLiteral("E1");
177  case DFisAcars: return QStringLiteral("E2");
178  case PdcAcars: return QStringLiteral("E3");
179  case Adf: return QStringLiteral("F");
180  case Gnss: return QStringLiteral("G");
181  case HfRtf: return QStringLiteral("H");
182  case InertiaNavigation: return QStringLiteral("I");
183  case Mls: return QStringLiteral("K");
184  case Ils: return QStringLiteral("L");
185  case NoEquip: return QStringLiteral("N");
186  case Vor: return QStringLiteral("O");
187  case Pbn: return QStringLiteral("R");
188  case Tacan: return QStringLiteral("T");
189  case UhfRtf: return QStringLiteral("U");
190  case VhfRtf: return QStringLiteral("V");
191  case Rvsm: return QStringLiteral("W");
192  case Mnps: return QStringLiteral("X");
193  case Vhf833: return QStringLiteral("Y");
194  case Other: return QStringLiteral("Z");
195  default: return {};
196  }
197  }
198 
200  {
201  // In order as they appear in the final string
202  static const QStringList r({ "S", "A", "B", "C", "D", "E1", "E2", "E3", "F", "G", "H", "I", "J1",
203  "J2", "J3", "J4", "J5", "J6", "J7", "K", "L", "M1", "M2", "M3", "N", "O",
204  "P1", "P2", "P3", "R", "T", "U", "V", "W", "X", "Y", "Z" });
205  return r;
206  }
207 
208 } // namespace swift::misc::aviation
QString convertToQString(bool i18n=false) const
Get the equipment string of this object (for example "SDE2E3FGHIJ1RWXY")
CComNavEquipment()=default
Create default equipment with Standard COM/NAV.
CpdlcSatcomEquipmentOption
CPLDC and SATCOM equipment options.
QStringList enabledOptions() const
Get all enabled equipment codes of this object as a list.
ComNavEquipmentOption
COM/NAV equipment options.
static QStringList allEquipmentLetters()
Get all possible equipment code letters.
#define SWIFT_DEFINE_VALUEOBJECT_MIXINS(Namespace, Class)
Explicit template definition of mixins for a CValueObject subclass.
Definition: valueobject.h:67