11 using namespace swift::config;
13 using namespace swift::misc::aviation;
14 using namespace swift::misc::network;
16 namespace swift::core::fsd
23 static QStringList s_invalidAtcRatings;
24 static QStringList s_invalidPilotRatings;
25 static QStringList s_invalidSimType;
26 static QStringList s_invalidFacilityType;
27 static QStringList s_invalidQueryType;
30 void logUnknownType(
const QString &message)
35 const QByteArray msg = message.toLatin1();
39 CLogMessage(CLogCategories::fsd()).
info(u
"%1. Please report this to the DEVELOPERS!") << message;
44 QString toQString(
const AtcRating &value)
48 case AtcRating::Unknown:
return "0";
49 case AtcRating::Observer:
return "1";
50 case AtcRating::Student:
return "2";
51 case AtcRating::Student2:
return "3";
52 case AtcRating::Student3:
return "4";
53 case AtcRating::Controller1:
return "5";
54 case AtcRating::Controller2:
return "6";
55 case AtcRating::Controller3:
return "7";
56 case AtcRating::Instructor1:
return "8";
57 case AtcRating::Instructor2:
return "9";
58 case AtcRating::Instructor3:
return "10";
59 case AtcRating::Supervisor:
return "11";
60 case AtcRating::Administrator:
return "12";
71 if (str.isEmpty())
return AtcRating::Unknown;
75 return AtcRating::Observer;
77 return AtcRating::Student;
79 return AtcRating::Student2;
81 return AtcRating::Student3;
83 return AtcRating::Controller1;
85 return AtcRating::Controller2;
87 return AtcRating::Controller3;
89 return AtcRating::Instructor1;
91 return AtcRating::Instructor2;
93 return AtcRating::Instructor3;
95 return AtcRating::Supervisor;
97 return AtcRating::Administrator;
100 if (!Private::s_invalidAtcRatings.contains(str))
102 Private::s_invalidAtcRatings.push_back(str);
103 const QString msg = QStringLiteral(
"FSD unknown ATC rating '%1'").arg(str);
104 Private::logUnknownType(msg);
106 return AtcRating::Unknown;
110 QString toQString(
const PilotRating &value)
114 case PilotRating::Unknown:
return "0";
115 case PilotRating::Student:
return "1";
116 case PilotRating::VFR:
return "2";
117 case PilotRating::IFR:
return "3";
118 case PilotRating::Instructor:
return "4";
119 case PilotRating::Supervisor:
return "5";
130 if (str.isEmpty())
return PilotRating::Unknown;
134 return PilotRating::Unknown;
136 return PilotRating::Student;
138 return PilotRating::VFR;
140 return PilotRating::IFR;
142 return PilotRating::Instructor;
144 return PilotRating::Supervisor;
147 if (!Private::s_invalidPilotRatings.contains(str))
149 Private::s_invalidPilotRatings.push_back(str);
150 const QString msg = QStringLiteral(
"FSD Unknown Pilot rating '%1'").arg(str);
151 Private::logUnknownType(msg);
153 return PilotRating::Unknown;
157 QString toQString(
const SimType &value)
161 case SimType::Unknown:
return "0";
162 case SimType::MSFS95:
return "1";
163 case SimType::MSFS98:
return "2";
164 case SimType::MSCFS:
return "3";
165 case SimType::MSFS2000:
return "4";
166 case SimType::MSCFS2:
return "5";
167 case SimType::MSFS2002:
return "6";
168 case SimType::MSCFS3:
return "7";
169 case SimType::MSFS2004:
return "8";
170 case SimType::MSFSX:
return "9";
171 case SimType::MSFS:
return "10";
172 case SimType::MSFS2024:
return "11";
173 case SimType::XPLANE8:
return "12";
174 case SimType::XPLANE9:
return "13";
175 case SimType::XPLANE10:
return "14";
176 case SimType::XPLANE11:
return "16";
177 case SimType::FlightGear:
return "25";
178 case SimType::P3Dv1:
return "30";
179 case SimType::P3Dv2:
return "30";
180 case SimType::P3Dv3:
return "30";
181 case SimType::P3Dv4:
return "30";
185 case SimType::XPLANE12:
186 case SimType::P3Dv5:
return "0";
194 SimType fromQString(
const QString &str)
197 if (str.isEmpty())
return SimType::Unknown;
201 return SimType::Unknown;
203 return SimType::MSFS95;
205 return SimType::MSFS98;
207 return SimType::MSCFS;
209 return SimType::MSFS2000;
211 return SimType::MSCFS2;
213 return SimType::MSFS2002;
215 return SimType::MSCFS3;
217 return SimType::MSFS2004;
219 return SimType::MSFSX;
220 else if (str ==
"10")
221 return SimType::MSFS;
222 else if (str ==
"11")
223 return SimType::MSFS2024;
224 else if (str ==
"12")
225 return SimType::XPLANE8;
226 else if (str ==
"13")
227 return SimType::XPLANE9;
228 else if (str ==
"14")
229 return SimType::XPLANE10;
230 else if (str ==
"16")
231 return SimType::XPLANE11;
232 else if (str ==
"25")
233 return SimType::FlightGear;
235 else if (str ==
"30")
236 return SimType::P3Dv4;
239 if (!Private::s_invalidSimType.contains(str))
241 Private::s_invalidSimType.push_back(str);
242 const QString msg = QStringLiteral(
"FSD unknown SimType '%1'").arg(str);
243 Private::logUnknownType(msg);
245 return SimType::Unknown;
253 case CFacilityType::OBS:
return "0";
254 case CFacilityType::FSS:
return "1";
255 case CFacilityType::DEL:
return "2";
256 case CFacilityType::GND:
return "3";
257 case CFacilityType::TWR:
return "4";
258 case CFacilityType::APP:
return "5";
259 case CFacilityType::CTR:
return "6";
260 case CFacilityType::Unknown:
return {};
271 if (str.isEmpty())
return CFacilityType::Unknown;
273 if (str ==
"0")
return CFacilityType::OBS;
275 return CFacilityType::FSS;
277 return CFacilityType::DEL;
279 return CFacilityType::GND;
281 return CFacilityType::TWR;
283 return CFacilityType::APP;
285 return CFacilityType::CTR;
288 if (!Private::s_invalidFacilityType.contains(str))
290 Private::s_invalidFacilityType.push_back(str);
291 const QString msg = QStringLiteral(
"FSD unknown CFacilityType '%1'");
292 Private::logUnknownType(msg);
295 return CFacilityType::Unknown;
299 QString toQString(
const ClientQueryType &value)
303 case ClientQueryType::IsValidATC:
return "ATC";
304 case ClientQueryType::Capabilities:
return "CAPS";
305 case ClientQueryType::Com1Freq:
return "C?";
306 case ClientQueryType::RealName:
return "RN";
307 case ClientQueryType::Server:
return "SV";
308 case ClientQueryType::ATIS:
return "ATIS";
309 case ClientQueryType::PublicIP:
return "IP";
310 case ClientQueryType::INF:
return "INF";
311 case ClientQueryType::FP:
return "FP";
312 case ClientQueryType::AircraftConfig:
return "ACC";
313 case ClientQueryType::EuroscopeSimData:
return "SIMDATA";
314 case ClientQueryType::Unknown:
return "Unknown query type";
318 return "Unknown query type";
325 if (str.isEmpty())
return ClientQueryType::Unknown;
329 if (str ==
"ATC")
return ClientQueryType::IsValidATC;
330 if (str ==
"CAPS")
return ClientQueryType::Capabilities;
331 if (str ==
"C?")
return ClientQueryType::Com1Freq;
332 if (str ==
"RN")
return ClientQueryType::RealName;
333 if (str ==
"SV")
return ClientQueryType::Server;
334 if (str ==
"ATIS")
return ClientQueryType::ATIS;
335 if (str ==
"IP")
return ClientQueryType::PublicIP;
336 if (str ==
"INF")
return ClientQueryType::INF;
337 if (str ==
"FP")
return ClientQueryType::FP;
338 if (str ==
"ACC")
return ClientQueryType::AircraftConfig;
342 if (str ==
"BC")
return ClientQueryType::Unknown;
343 if (str ==
"BY")
return ClientQueryType::Unknown;
344 if (str ==
"DI")
return ClientQueryType::Unknown;
345 if (str ==
"DP")
return ClientQueryType::Unknown;
346 if (str ==
"DR")
return ClientQueryType::Unknown;
347 if (str ==
"FA")
return ClientQueryType::Unknown;
348 if (str ==
"HC")
return ClientQueryType::Unknown;
349 if (str ==
"HI")
return ClientQueryType::Unknown;
350 if (str ==
"HT")
return ClientQueryType::Unknown;
351 if (str ==
"ID")
return ClientQueryType::Unknown;
352 if (str ==
"IH")
return ClientQueryType::Unknown;
353 if (str ==
"IT")
return ClientQueryType::Unknown;
354 if (str ==
"PT")
return ClientQueryType::Unknown;
355 if (str ==
"SC")
return ClientQueryType::Unknown;
356 if (str ==
"ST")
return ClientQueryType::Unknown;
357 if (str ==
"TA")
return ClientQueryType::Unknown;
358 if (str ==
"VT")
return ClientQueryType::Unknown;
359 if (str ==
"VER")
return ClientQueryType::Unknown;
360 if (str ==
"WH")
return ClientQueryType::Unknown;
362 if (str ==
"HLP")
return ClientQueryType::Unknown;
363 if (str ==
"NOHLP")
return ClientQueryType::Unknown;
366 if (str ==
"NEWATIS")
return ClientQueryType::Unknown;
367 if (str ==
"NEWINFO")
return ClientQueryType::Unknown;
370 if (!Private::s_invalidQueryType.contains(str))
372 Private::s_invalidQueryType.push_back(str);
373 const QString msg = QStringLiteral(
"FSD unknown ClientQueryType '%1'").arg(str);
374 Private::logUnknownType(msg);
377 return ClientQueryType::Unknown;
381 QString toQString(
const FlightType &value)
385 case FlightType::IFR:
return "I";
386 case FlightType::VFR:
return "V";
387 case FlightType::SVFR:
return "S";
388 case FlightType::DVFR:
return "D";
398 if (str == QLatin1String(
"I"))
399 return FlightType::IFR;
400 else if (str == QLatin1String(
"V"))
401 return FlightType::VFR;
402 else if (str == QLatin1String(
"S"))
403 return FlightType::SVFR;
404 else if (str == QLatin1String(
"D"))
405 return FlightType::DVFR;
407 return FlightType::IFR;
415 case CTransponder::StateStandby:
return QStringLiteral(
"S");
416 case CTransponder::ModeMil1:
417 case CTransponder::ModeMil2:
418 case CTransponder::ModeMil3:
419 case CTransponder::ModeMil4:
420 case CTransponder::ModeMil5:
421 case CTransponder::ModeA:
422 case CTransponder::ModeC:
423 case CTransponder::ModeS:
return QStringLiteral(
"N");
424 case CTransponder::StateIdent:
return QStringLiteral(
"Y");
428 return QStringLiteral(
"S");
435 return CTransponder::StateStandby;
437 return CTransponder::ModeC;
439 return CTransponder::StateIdent;
441 return CTransponder::StateStandby;
445 QString toQString(
const Capabilities &value)
449 case Capabilities::None:
return {};
450 case Capabilities::AtcInfo:
return "ATCINFO";
451 case Capabilities::SecondaryPos:
return "SECPOS";
452 case Capabilities::AircraftInfo:
return "MODELDESC";
453 case Capabilities::OngoingCoord:
return "ONGOINGCOORD";
454 case Capabilities::InterminPos:
return "INTERIMPOS";
455 case Capabilities::VisPos:
return "VISUPDATE";
456 case Capabilities::FastPos:
return "FASTPOS";
457 case Capabilities::Stealth:
return "STEALTH";
458 case Capabilities::AircraftConfig:
return "ACCONFIG";
459 case Capabilities::IcaoEquipment:
return "ICAOEQ";
468 if (str ==
"ATCINFO")
469 return Capabilities::AtcInfo;
470 else if (str ==
"SECPOS")
471 return Capabilities::SecondaryPos;
472 else if (str ==
"MODELDESC")
473 return Capabilities::AircraftInfo;
474 else if (str ==
"ONGOINGCOORD")
475 return Capabilities::OngoingCoord;
476 else if (str ==
"INTERIMPOS")
477 return Capabilities::InterminPos;
478 else if (str ==
"FASTPOS")
479 return Capabilities::FastPos;
480 else if (str ==
"VISUPDATE")
481 return Capabilities::VisPos;
482 else if (str ==
"STEALTH")
483 return Capabilities::Stealth;
484 else if (str ==
"ACCONFIG")
485 return Capabilities::AircraftConfig;
486 else if (str ==
"ICAOEQ")
487 return Capabilities::IcaoEquipment;
489 return Capabilities::None;
496 return AtisLineType::VoiceRoom;
498 return AtisLineType::ZuluLogoff;
500 return AtisLineType::TextMessage;
502 return AtisLineType::LineCount;
504 return AtisLineType::Unknown;
static bool isLocalDeveloperDebugBuild()
Local build for developers.
Class for emitting a log message.
Derived & info(const char16_t(&format)[N])
Set the severity to info, providing a format string.
TransponderMode
Transponder codes.
Value object encapsulating the ATC facility type, e.g. TWR, DEP, APP.
FacilityType getFacilityType() const
Get type.
AtisLineType
ATIS line type.
SimType
Flight simulator type.
PilotRating
Pilot ratings.
ClientQueryType
Client query types.
Capabilities
Client capability flags */.
Free functions in swift::misc.
#define SWIFT_VERIFY_X(COND, WHERE, WHAT)
A weaker kind of assert.