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";
184 case SimType::XPLANE12:
185 case SimType::P3Dv5:
return "0";
193 SimType fromQString(
const QString &str)
196 if (str.isEmpty())
return SimType::Unknown;
200 return SimType::Unknown;
202 return SimType::MSFS95;
204 return SimType::MSFS98;
206 return SimType::MSCFS;
208 return SimType::MSFS2000;
210 return SimType::MSCFS2;
212 return SimType::MSFS2002;
214 return SimType::MSCFS3;
216 return SimType::MSFS2004;
218 return SimType::MSFSX;
219 else if (str ==
"10")
220 return SimType::MSFS;
221 else if (str ==
"11")
222 return SimType::MSFS2024;
223 else if (str ==
"12")
224 return SimType::XPLANE8;
225 else if (str ==
"13")
226 return SimType::XPLANE9;
227 else if (str ==
"14")
228 return SimType::XPLANE10;
229 else if (str ==
"16")
230 return SimType::XPLANE11;
231 else if (str ==
"25")
232 return SimType::FlightGear;
234 else if (str ==
"30")
235 return SimType::P3Dv4;
238 if (!Private::s_invalidSimType.contains(str))
240 Private::s_invalidSimType.push_back(str);
241 const QString msg = QStringLiteral(
"FSD unknown SimType '%1'").arg(str);
242 Private::logUnknownType(msg);
244 return SimType::Unknown;
252 case CFacilityType::OBS:
return "0";
253 case CFacilityType::FSS:
return "1";
254 case CFacilityType::DEL:
return "2";
255 case CFacilityType::GND:
return "3";
256 case CFacilityType::TWR:
return "4";
257 case CFacilityType::APP:
return "5";
258 case CFacilityType::CTR:
return "6";
259 case CFacilityType::Unknown:
return {};
270 if (str.isEmpty())
return CFacilityType::Unknown;
272 if (str ==
"0")
return CFacilityType::OBS;
274 return CFacilityType::FSS;
276 return CFacilityType::DEL;
278 return CFacilityType::GND;
280 return CFacilityType::TWR;
282 return CFacilityType::APP;
284 return CFacilityType::CTR;
287 if (!Private::s_invalidFacilityType.contains(str))
289 Private::s_invalidFacilityType.push_back(str);
290 const QString msg = QStringLiteral(
"FSD unknown CFacilityType '%1'");
291 Private::logUnknownType(msg);
294 return CFacilityType::Unknown;
298 QString toQString(
const ClientQueryType &value)
302 case ClientQueryType::IsValidATC:
return "ATC";
303 case ClientQueryType::Capabilities:
return "CAPS";
304 case ClientQueryType::Com1Freq:
return "C?";
305 case ClientQueryType::RealName:
return "RN";
306 case ClientQueryType::Server:
return "SV";
307 case ClientQueryType::ATIS:
return "ATIS";
308 case ClientQueryType::PublicIP:
return "IP";
309 case ClientQueryType::INF:
return "INF";
310 case ClientQueryType::FP:
return "FP";
311 case ClientQueryType::AircraftConfig:
return "ACC";
312 case ClientQueryType::EuroscopeSimData:
return "SIMDATA";
313 case ClientQueryType::Unknown:
return "Unknown query type";
317 return "Unknown query type";
324 if (str.isEmpty())
return ClientQueryType::Unknown;
328 if (str ==
"ATC")
return ClientQueryType::IsValidATC;
329 if (str ==
"CAPS")
return ClientQueryType::Capabilities;
330 if (str ==
"C?")
return ClientQueryType::Com1Freq;
331 if (str ==
"RN")
return ClientQueryType::RealName;
332 if (str ==
"SV")
return ClientQueryType::Server;
333 if (str ==
"ATIS")
return ClientQueryType::ATIS;
334 if (str ==
"IP")
return ClientQueryType::PublicIP;
335 if (str ==
"INF")
return ClientQueryType::INF;
336 if (str ==
"FP")
return ClientQueryType::FP;
337 if (str ==
"ACC")
return ClientQueryType::AircraftConfig;
341 if (str ==
"BC")
return ClientQueryType::Unknown;
342 if (str ==
"BY")
return ClientQueryType::Unknown;
343 if (str ==
"DI")
return ClientQueryType::Unknown;
344 if (str ==
"DP")
return ClientQueryType::Unknown;
345 if (str ==
"DR")
return ClientQueryType::Unknown;
346 if (str ==
"FA")
return ClientQueryType::Unknown;
347 if (str ==
"HC")
return ClientQueryType::Unknown;
348 if (str ==
"HI")
return ClientQueryType::Unknown;
349 if (str ==
"HT")
return ClientQueryType::Unknown;
350 if (str ==
"ID")
return ClientQueryType::Unknown;
351 if (str ==
"IH")
return ClientQueryType::Unknown;
352 if (str ==
"IT")
return ClientQueryType::Unknown;
353 if (str ==
"PT")
return ClientQueryType::Unknown;
354 if (str ==
"SC")
return ClientQueryType::Unknown;
355 if (str ==
"ST")
return ClientQueryType::Unknown;
356 if (str ==
"TA")
return ClientQueryType::Unknown;
357 if (str ==
"VT")
return ClientQueryType::Unknown;
358 if (str ==
"VER")
return ClientQueryType::Unknown;
359 if (str ==
"WH")
return ClientQueryType::Unknown;
361 if (str ==
"HLP")
return ClientQueryType::Unknown;
362 if (str ==
"NOHLP")
return ClientQueryType::Unknown;
365 if (str ==
"NEWATIS")
return ClientQueryType::Unknown;
366 if (str ==
"NEWINFO")
return ClientQueryType::Unknown;
369 if (!Private::s_invalidQueryType.contains(str))
371 Private::s_invalidQueryType.push_back(str);
372 const QString msg = QStringLiteral(
"FSD unknown ClientQueryType '%1'").arg(str);
373 Private::logUnknownType(msg);
376 return ClientQueryType::Unknown;
380 QString toQString(
const FlightType &value)
384 case FlightType::IFR:
return "I";
385 case FlightType::VFR:
return "V";
386 case FlightType::SVFR:
return "S";
387 case FlightType::DVFR:
return "D";
397 if (str == QLatin1String(
"I"))
398 return FlightType::IFR;
399 else if (str == QLatin1String(
"V"))
400 return FlightType::VFR;
401 else if (str == QLatin1String(
"S"))
402 return FlightType::SVFR;
403 else if (str == QLatin1String(
"D"))
404 return FlightType::DVFR;
406 return FlightType::IFR;
414 case CTransponder::StateStandby:
return QStringLiteral(
"S");
415 case CTransponder::ModeMil1:
416 case CTransponder::ModeMil2:
417 case CTransponder::ModeMil3:
418 case CTransponder::ModeMil4:
419 case CTransponder::ModeMil5:
420 case CTransponder::ModeA:
421 case CTransponder::ModeC:
422 case CTransponder::ModeS:
return QStringLiteral(
"N");
423 case CTransponder::StateIdent:
return QStringLiteral(
"Y");
427 return QStringLiteral(
"S");
434 return CTransponder::StateStandby;
436 return CTransponder::ModeC;
438 return CTransponder::StateIdent;
440 return CTransponder::StateStandby;
444 QString toQString(
const Capabilities &value)
448 case Capabilities::None:
return {};
449 case Capabilities::AtcInfo:
return "ATCINFO";
450 case Capabilities::SecondaryPos:
return "SECPOS";
451 case Capabilities::AircraftInfo:
return "MODELDESC";
452 case Capabilities::OngoingCoord:
return "ONGOINGCOORD";
453 case Capabilities::InterminPos:
return "INTERIMPOS";
454 case Capabilities::VisPos:
return "VISUPDATE";
455 case Capabilities::FastPos:
return "FASTPOS";
456 case Capabilities::Stealth:
return "STEALTH";
457 case Capabilities::AircraftConfig:
return "ACCONFIG";
458 case Capabilities::IcaoEquipment:
return "ICAOEQ";
467 if (str ==
"ATCINFO")
468 return Capabilities::AtcInfo;
469 else if (str ==
"SECPOS")
470 return Capabilities::SecondaryPos;
471 else if (str ==
"MODELDESC")
472 return Capabilities::AircraftInfo;
473 else if (str ==
"ONGOINGCOORD")
474 return Capabilities::OngoingCoord;
475 else if (str ==
"INTERIMPOS")
476 return Capabilities::InterminPos;
477 else if (str ==
"FASTPOS")
478 return Capabilities::FastPos;
479 else if (str ==
"VISUPDATE")
480 return Capabilities::VisPos;
481 else if (str ==
"STEALTH")
482 return Capabilities::Stealth;
483 else if (str ==
"ACCONFIG")
484 return Capabilities::AircraftConfig;
485 else if (str ==
"ICAOEQ")
486 return Capabilities::IcaoEquipment;
488 return Capabilities::None;
495 return AtisLineType::VoiceRoom;
497 return AtisLineType::ZuluLogoff;
499 return AtisLineType::TextMessage;
501 return AtisLineType::LineCount;
503 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.