swift
Loading...
Searching...
No Matches
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
13using namespace swift::misc;
14using namespace swift::misc::aviation;
15
16namespace swift::misc::simulation::fsx
17{
18 QString CSimConnectUtilities::resolveEnumToString(const DWORD id, const char *enumName)
19 {
20 const int i = CSimConnectUtilities::staticMetaObject.indexOfEnumerator(enumName);
21 if (i < 0)
22 {
23 return QStringLiteral("No enumerator for %1").arg(enumName);
24 }
25 const QMetaEnum m = CSimConnectUtilities::staticMetaObject.enumerator(i);
26 const char *k = m.valueToKey(static_cast<int>(id));
27 return (k) ? QLatin1String(k) : QStringLiteral("Id '%1' not found for %2").arg(id).arg(enumName);
28 }
29
31 {
32 return CSimConnectUtilities::resolveEnumToString(id, "SIMCONNECT_EXCEPTION");
33 }
34
36 {
37 QString sf = CSimConnectUtilities::resolveEnumToString(type, "SIMCONNECT_SURFACE");
38 return beautify ? sf.replace('_', ' ') : sf;
39 }
40
42 {
43 const QString ri = CSimConnectUtilities::resolveEnumToString(type, "SIMCONNECT_RECV_ID");
44 return ri;
45 }
46
48 {
49 int lightMask = 0;
50 if (lights.isBeaconOn())
51 {
52 lightMask |= Beacon;
53 }
54 if (lights.isLandingOn())
55 {
56 lightMask |= Landing;
57 }
58 if (lights.isLogoOn())
59 {
60 lightMask |= Logo;
61 }
62 if (lights.isNavOn())
63 {
64 lightMask |= Nav;
65 }
66 if (lights.isStrobeOn())
67 {
68 lightMask |= Strobe;
69 }
70 if (lights.isTaxiOn())
71 {
72 lightMask |= Taxi;
73 }
74 return lightMask;
75 }
76
78 {
79 qRegisterMetaType<CSimConnectUtilities::SIMCONNECT_EXCEPTION>();
80 qRegisterMetaType<CSimConnectUtilities::SIMCONNECT_SURFACE>();
81 }
82
84 {
85 const QList<CWinDllUtils::ProcessModule> modules = CWinDllUtils::getModules(-1, "simconnect");
86 if (modules.isEmpty())
87 {
89 info.errorMsg = "No SimConnect.dll loaded";
90 return info;
91 }
92 return CWinDllUtils::getDllInfo(modules.first().executable);
93 }
94} // 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?
static int lightsToLightStates(const aviation::CAircraftLights &lights)
Lights to states.
static swift::misc::CWinDllUtils::DLLInfo simConnectDllInfo()
Get info about SimConnect DLL.
static QString simConnectReceiveIdToString(DWORD type)
Receive id to string.
static QString simConnectSurfaceTypeToString(const DWORD type, bool beautify=true)
Resolve SimConnect surface (based on Qt metadata).
static QString simConnectExceptionToString(const DWORD id)
Resolve SimConnect exception (based on Qt metadata).
Free functions in swift::misc.
T & first()
bool isEmpty() const const
const char * valueToKey(quint64 value) const const
QString & replace(QChar before, QChar after, Qt::CaseSensitivity cs)
unsigned long DWORD
Fake Windows DWORD.
QString errorMsg
error message if any
Definition windllutils.h:27