swift
simconnectutilities.cpp
1 // SPDX-FileCopyrightText: Copyright (C) 2013 swift Project Community / Contributors
2 // SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-swift-pilot-client-1
3 
5 
6 #include <QFlags>
7 #include <QLatin1String>
8 #include <QMetaEnum>
9 #include <QMetaObject>
10 
11 #include "misc/stringutils.h"
12 
13 using namespace swift::misc;
14 using namespace swift::misc::aviation;
15 
16 namespace swift::misc::simulation::fsx
17 {
18  CSimConnectUtilities::CSimConnectUtilities() {}
19 
20  QString CSimConnectUtilities::resolveEnumToString(const DWORD id, const char *enumName)
21  {
22  const int i = CSimConnectUtilities::staticMetaObject.indexOfEnumerator(enumName);
23  if (i < 0) { return QStringLiteral("No enumerator for %1").arg(enumName); }
24  const QMetaEnum m = CSimConnectUtilities::staticMetaObject.enumerator(i);
25  const char *k = m.valueToKey(static_cast<int>(id));
26  return (k) ? QLatin1String(k) : QStringLiteral("Id '%1' not found for %2").arg(id).arg(enumName);
27  }
28 
29  QString CSimConnectUtilities::simConnectExceptionToString(const DWORD id)
30  {
31  return CSimConnectUtilities::resolveEnumToString(id, "SIMCONNECT_EXCEPTION");
32  }
33 
34  QString CSimConnectUtilities::simConnectSurfaceTypeToString(const DWORD type, bool beautify)
35  {
36  QString sf = CSimConnectUtilities::resolveEnumToString(type, "SIMCONNECT_SURFACE");
37  return beautify ? sf.replace('_', ' ') : sf;
38  }
39 
40  QString CSimConnectUtilities::simConnectReceiveIdToString(DWORD type)
41  {
42  const QString ri = CSimConnectUtilities::resolveEnumToString(type, "SIMCONNECT_RECV_ID");
43  return ri;
44  }
45 
46  int CSimConnectUtilities::lightsToLightStates(const CAircraftLights &lights)
47  {
48  int lightMask = 0;
49  if (lights.isBeaconOn()) { lightMask |= Beacon; }
50  if (lights.isLandingOn()) { lightMask |= Landing; }
51  if (lights.isLogoOn()) { lightMask |= Logo; }
52  if (lights.isNavOn()) { lightMask |= Nav; }
53  if (lights.isStrobeOn()) { lightMask |= Strobe; }
54  if (lights.isTaxiOn()) { lightMask |= Taxi; }
55  return lightMask;
56  }
57 
58  void CSimConnectUtilities::registerMetadata()
59  {
60  qRegisterMetaType<CSimConnectUtilities::SIMCONNECT_EXCEPTION>();
61  qRegisterMetaType<CSimConnectUtilities::SIMCONNECT_SURFACE>();
62  }
63 
64  CWinDllUtils::DLLInfo CSimConnectUtilities::simConnectDllInfo()
65  {
66  const QList<CWinDllUtils::ProcessModule> modules = CWinDllUtils::getModules(-1, "simconnect");
67  if (modules.isEmpty())
68  {
70  info.errorMsg = "No SimConnect.dll loaded";
71  return info;
72  }
73  return CWinDllUtils::getDllInfo(modules.first().executable);
74  }
75 } // namespace swift::misc::simulation::fsx
static DLLInfo getDllInfo(const QString &dllFile)
Get DDL.
static QList< ProcessModule > getModules(qint64 processId=-1, const QString &nameFilter={})
Process modules per id.
Value object encapsulating information about aircraft's lights.
bool isLandingOn() const
Landing lights on?
bool isBeaconOn() const
Beacon lights on?
bool isNavOn() const
Nac lights on?
bool isLogoOn() const
Logo lights on?
bool isTaxiOn() const
Taxi lights on?
bool isStrobeOn() const
Strobes lights on?
Free functions in swift::misc.
unsigned long DWORD
Fake Windows DWORD.
QString errorMsg
error message if any
Definition: windllutils.h:27