feat: read enginepower from SimConnect

This commit is contained in:
Thomas Zobler
2026-02-05 11:18:43 +01:00
parent 6aa5a00517
commit 6e2397d3cb
11 changed files with 81 additions and 43 deletions

View File

@@ -607,7 +607,7 @@ namespace swift::core
const CCallsign &ISimulator::getTestCallsign() const CCallsign &ISimulator::getTestCallsign()
{ {
static const CCallsign cs("SWIFT"); static const CCallsign cs("SWT2026");
return cs; return cs;
} }

View File

@@ -209,6 +209,22 @@ namespace swift::gui::components
iconRadio); iconRadio);
this->addOrUpdateLiveDataByName(QStringLiteral("Transponder"), ownAircraft.getTransponderCodeFormatted(), this->addOrUpdateLiveDataByName(QStringLiteral("Transponder"), ownAircraft.getTransponderCodeFormatted(),
iconRadio); iconRadio);
// TODO TZ
const int engineCount = sGui->getISimulator()->getOwnAircraftParts().getEngines().getEngineCount();
for (int count = 0; count < engineCount; ++count)
{
const int engNum = count + 1;
const int engof = sGui->getISimulator()->getOwnAircraftParts().getEngines().isEngineOn(engNum);
this->addOrUpdateLiveDataByName(QStringLiteral("ENG%1OnOff").arg(engNum),
engof < 0 ? QStringLiteral("N/A") : QString::number(engof, 'd', 1),
CIcon(CIcons::ApplicationSimulator));
const double engpwr = sGui->getISimulator()->getOwnAircraftParts().getEngines().getEnginePower(engNum);
this->addOrUpdateLiveDataByName(QStringLiteral("ENG%1Pwr").arg(engNum),
engpwr < 0 ? QStringLiteral("N/A") : QString::number(engpwr, 'f', 1),
CIcon(CIcons::ApplicationSimulator));
}
} }
void CSimulatorComponent::onSimulatorStatusChanged(int status) void CSimulatorComponent::onSimulatorStatusChanged(int status)

View File

@@ -53,7 +53,7 @@ namespace swift::misc::aviation
private: private:
int m_number = 1; int m_number = 1;
bool m_on = true; bool m_on = false;
double m_power = 0.0; double m_power = 0.0;
SWIFT_METACLASS( SWIFT_METACLASS(

View File

@@ -63,7 +63,7 @@ namespace swift::misc::aviation
} }
} }
void CAircraftEngineList::initEngines(int engineNumber, bool on, int enginePercentage) void CAircraftEngineList::initEngines(int engineNumber, bool on, double enginePercentage)
{ {
this->clear(); this->clear();
for (int e = 0; e < engineNumber; e++) for (int e = 0; e < engineNumber; e++)
@@ -73,7 +73,7 @@ namespace swift::misc::aviation
} }
} }
void CAircraftEngineList::setEnginePower(int engineNumber, int percentage) void CAircraftEngineList::setEnginePower(int engineNumber, double percentage)
{ {
Q_ASSERT(engineNumber > 0); Q_ASSERT(engineNumber > 0);
for (CAircraftEngine &engine : *this) for (CAircraftEngine &engine : *this)
@@ -86,7 +86,7 @@ namespace swift::misc::aviation
} }
} }
int CAircraftEngineList::getEnginePower(int engineNumber) const double CAircraftEngineList::getEnginePower(int engineNumber) const
{ {
Q_ASSERT(engineNumber > 0); Q_ASSERT(engineNumber > 0);
return this->getEngine(engineNumber).getEnginePower(); return this->getEngine(engineNumber).getEnginePower();

View File

@@ -57,20 +57,23 @@ namespace swift::misc::aviation
void setEngines(const CAircraftEngine &engine, int engineNumber); void setEngines(const CAircraftEngine &engine, int engineNumber);
//! Init some engines //! Init some engines
void initEngines(int engineNumber, bool on, int enginePercentage); void initEngines(int engineNumber, bool on, double enginePercentage);
//! Is any engine on? //! Is any engine on?
bool isAnyEngineOn() const; bool isAnyEngineOn() const;
void setEnginePower(int engineNumber, int percentage); void setEnginePower(int engineNumber, double percentage);
int getEnginePower(int engineNumber) const; double getEnginePower(int engineNumber) const;
//! \copydoc swift::misc::mixin::JsonByMetaClass::toJson //! \copydoc swift::misc::mixin::JsonByMetaClass::toJson
QJsonObject toJson() const; QJsonObject toJson() const;
//! \copydoc swift::misc::mixin::JsonByMetaClass::convertFromJson //! \copydoc swift::misc::mixin::JsonByMetaClass::convertFromJson
void convertFromJson(const QJsonObject &json); void convertFromJson(const QJsonObject &json);
//! Get engine count
int getEngineCount() const { return this->size(); }
}; };
} // namespace swift::misc::aviation } // namespace swift::misc::aviation

View File

@@ -114,6 +114,7 @@ namespace swift::simplugin::fsxcommon
"Feet"); "Feet");
hr += SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataOwnAircraft, "SIM ON GROUND", hr += SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataOwnAircraft, "SIM ON GROUND",
"Bool"); "Bool");
// 12
hr += SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataOwnAircraft, "LIGHT STROBE", hr += SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataOwnAircraft, "LIGHT STROBE",
"Bool"); "Bool");
hr += SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataOwnAircraft, "LIGHT LANDING", hr += SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataOwnAircraft, "LIGHT LANDING",
@@ -131,6 +132,7 @@ namespace swift::simplugin::fsxcommon
SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataOwnAircraft, "LIGHT CABIN", "Bool"); SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataOwnAircraft, "LIGHT CABIN", "Bool");
hr += hr +=
SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataOwnAircraft, "LIGHT WING", "Bool"); SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataOwnAircraft, "LIGHT WING", "Bool");
// 21
hr += SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataOwnAircraft, "TRANSPONDER CODE:1", hr += SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataOwnAircraft, "TRANSPONDER CODE:1",
nullptr); nullptr);
@@ -156,15 +158,17 @@ namespace swift::simplugin::fsxcommon
"Enum"); "Enum");
hr += SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataOwnAircraft, "COM STATUS:2", hr += SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataOwnAircraft, "COM STATUS:2",
"Enum"); "Enum");
// 33
hr += SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataOwnAircraft, hr += SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataOwnAircraft,
"FLAPS HANDLE PERCENT", "Percent Over 100"); "FLAPS HANDLE PERCENT", "Percent Over 100");
hr += SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataOwnAircraft, hr += SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataOwnAircraft,
"SPOILERS HANDLE POSITION", "Percent Over 100"); "SPOILERS HANDLE POSITION", "Percent Over 100");
hr += SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataOwnAircraft, hr += SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataOwnAircraft,
"GEAR HANDLE POSITION", "Bool"); "GEAR HANDLE POSITION", "Bool");
// 36
hr += SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataOwnAircraft, "NUMBER OF ENGINES", hr += SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataOwnAircraft, "NUMBER OF ENGINES",
"Number"); "Number");
// Simconnect supports index 1 - 4
hr += SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataOwnAircraft, hr += SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataOwnAircraft,
"GENERAL ENG COMBUSTION:1", "Bool"); "GENERAL ENG COMBUSTION:1", "Bool");
hr += SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataOwnAircraft, hr += SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataOwnAircraft,
@@ -181,7 +185,7 @@ namespace swift::simplugin::fsxcommon
"GENERAL ENG COMBUSTION:7", "Bool"); "GENERAL ENG COMBUSTION:7", "Bool");
hr += SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataOwnAircraft, hr += SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataOwnAircraft,
"GENERAL ENG COMBUSTION:8", "Bool"); "GENERAL ENG COMBUSTION:8", "Bool");
// 45
hr += SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataOwnAircraft, hr += SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataOwnAircraft,
"GENERAL ENG THROTTLE LEVER POSITION:1", "percent"); "GENERAL ENG THROTTLE LEVER POSITION:1", "percent");
hr += SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataOwnAircraft, hr += SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataOwnAircraft,
@@ -198,7 +202,7 @@ namespace swift::simplugin::fsxcommon
"GENERAL ENG THROTTLE LEVER POSITION:7", "percent"); "GENERAL ENG THROTTLE LEVER POSITION:7", "percent");
hr += SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataOwnAircraft, hr += SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataOwnAircraft,
"GENERAL ENG THROTTLE LEVER POSITION:8", "percent"); "GENERAL ENG THROTTLE LEVER POSITION:8", "percent");
// 53
hr += SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataOwnAircraft, "VELOCITY WORLD X", hr += SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataOwnAircraft, "VELOCITY WORLD X",
"Feet per second"); "Feet per second");
hr += SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataOwnAircraft, "VELOCITY WORLD Y", hr += SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataOwnAircraft, "VELOCITY WORLD Y",
@@ -214,6 +218,7 @@ namespace swift::simplugin::fsxcommon
// FS2020 // FS2020
hr += SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataOwnAircraft, hr += SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataOwnAircraft,
"INDICATED ALTITUDE CALIBRATED", "Feet"); "INDICATED ALTITUDE CALIBRATED", "Feet");
// 60
hr += SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataOwnAircraftTitle, "TITLE", hr += SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataOwnAircraftTitle, "TITLE",
nullptr, SIMCONNECT_DATATYPE_STRING256); nullptr, SIMCONNECT_DATATYPE_STRING256);

View File

@@ -46,7 +46,10 @@ namespace swift::simplugin::fsxcommon
double lightBeacon; //!< Is beacon light on? double lightBeacon; //!< Is beacon light on?
double lightNav; //!< Is nav light on? double lightNav; //!< Is nav light on?
double lightLogo; //!< Is logo light on? double lightLogo; //!< Is logo light on?
// 18 double lightRecognition;
double lightCabin; //!< Is cabin light on?
double lightWing; //!< Is wing light on?
// 21
double transponderCode; //!< Transponder Code double transponderCode; //!< Transponder Code
double com1ActiveMHz; //!< COM1 active frequency double com1ActiveMHz; //!< COM1 active frequency
double com2ActiveMHz; //!< COM2 active frequency double com2ActiveMHz; //!< COM2 active frequency
@@ -59,11 +62,11 @@ namespace swift::simplugin::fsxcommon
double comTest2; //!< COM2 test double comTest2; //!< COM2 test
double comStatus1; //!< COM1 status double comStatus1; //!< COM1 status
double comStatus2; //!< COM2 status double comStatus2; //!< COM2 status
// 30 // 33
double flapsHandlePosition; //!< Flaps handle position in percent double flapsHandlePosition; //!< Flaps handle position in percent
double spoilersHandlePosition; //!< Spoilers out? (flag) double spoilersHandlePosition; //!< Spoilers out? (flag)
double gearHandlePosition; //!< Gear handle position (flag) double gearHandlePosition; //!< Gear handle position (flag)
// 33 // 36
double numberOfEngines; //!< Number of engines double numberOfEngines; //!< Number of engines
double engine1Combustion; //!< Engine 1 combustion flag double engine1Combustion; //!< Engine 1 combustion flag
double engine2Combustion; //!< Engine 2 combustion flag double engine2Combustion; //!< Engine 2 combustion flag
@@ -73,16 +76,7 @@ namespace swift::simplugin::fsxcommon
double engine6Combustion; //!< Engine 6 combustion flag double engine6Combustion; //!< Engine 6 combustion flag
double engine7Combustion; //!< Engine 7 combustion flag double engine7Combustion; //!< Engine 7 combustion flag
double engine8Combustion; //!< Engine 8 combustion flag double engine8Combustion; //!< Engine 8 combustion flag
// 42 // 45
double velocityWorldX; //!< Velocity World X
double velocityWorldY; //!< Velocity World Y
double velocityWorldZ; //!< Velocity World Z
double rotationVelocityBodyX; //!< Rotation Velocity Body X
double rotationVelocityBodyY; //!< Rotation Velocity Body Y
double rotationVelocityBodyZ; //!< Rotation Velocity Body Z
// 48
double altitudeCalibratedFt; //!< Altitude without temperature effect (ft, FS2020)
// 49
double engine1Power; //!< Engine 1 power double engine1Power; //!< Engine 1 power
double engine2Power; //!< Engine 2 power double engine2Power; //!< Engine 2 power
double engine3Power; //!< Engine 3 power double engine3Power; //!< Engine 3 power
@@ -91,7 +85,16 @@ namespace swift::simplugin::fsxcommon
double engine6Power; //!< Engine 6 power double engine6Power; //!< Engine 6 power
double engine7Power; //!< Engine 7 power double engine7Power; //!< Engine 7 power
double engine8Power; //!< Engine 8 power double engine8Power; //!< Engine 8 power
// 57 // 53
double velocityWorldX; //!< Velocity World X
double velocityWorldY; //!< Velocity World Y
double velocityWorldZ; //!< Velocity World Z
double rotationVelocityBodyX; //!< Rotation Velocity Body X
double rotationVelocityBodyY; //!< Rotation Velocity Body Y
double rotationVelocityBodyZ; //!< Rotation Velocity Body Z
// 59
double altitudeCalibratedFt; //!< Altitude without temperature effect (ft, FS2020)
// 60
}; };
//! Data struct of aircraft position //! Data struct of aircraft position

View File

@@ -740,14 +740,20 @@ namespace swift::simplugin::fsxcommon
dtb(simulatorOwnAircraft.lightNav), dtb(simulatorOwnAircraft.lightLogo)); dtb(simulatorOwnAircraft.lightNav), dtb(simulatorOwnAircraft.lightLogo));
CAircraftEngineList engines; CAircraftEngineList engines;
const QList<bool> helperList { dtb(simulatorOwnAircraft.engine1Combustion), const QList<bool> helperList {
dtb(simulatorOwnAircraft.engine2Combustion), dtb(simulatorOwnAircraft.engine1Combustion), dtb(simulatorOwnAircraft.engine2Combustion),
dtb(simulatorOwnAircraft.engine3Combustion), dtb(simulatorOwnAircraft.engine3Combustion), dtb(simulatorOwnAircraft.engine4Combustion),
dtb(simulatorOwnAircraft.engine4Combustion) }; dtb(simulatorOwnAircraft.engine5Combustion), dtb(simulatorOwnAircraft.engine6Combustion),
dtb(simulatorOwnAircraft.engine7Combustion), dtb(simulatorOwnAircraft.engine8Combustion)
};
const QList<double> powerList { simulatorOwnAircraft.engine1Power, simulatorOwnAircraft.engine2Power,
simulatorOwnAircraft.engine3Power, simulatorOwnAircraft.engine4Power,
simulatorOwnAircraft.engine5Power, simulatorOwnAircraft.engine6Power,
simulatorOwnAircraft.engine7Power, simulatorOwnAircraft.engine8Power };
for (int index = 0; index < simulatorOwnAircraft.numberOfEngines; ++index) for (int index = 0; index < simulatorOwnAircraft.numberOfEngines; ++index)
{ {
engines.push_back(CAircraftEngine(index + 1, helperList.value(index, true), 100)); engines.push_back(CAircraftEngine(index + 1, helperList.value(index, false), powerList.value(index, 0)));
} }
const CAircraftParts parts(lights, dtb(simulatorOwnAircraft.gearHandlePosition), const CAircraftParts parts(lights, dtb(simulatorOwnAircraft.gearHandlePosition),

View File

@@ -245,7 +245,7 @@ namespace swift::simplugin::fsxcommon
{ {
case CSimConnectDefinitions::RequestOwnAircraft: case CSimConnectDefinitions::RequestOwnAircraft:
{ {
static_assert(sizeof(DataDefinitionOwnAircraft) == 57 * sizeof(double), static_assert(sizeof(DataDefinitionOwnAircraft) == 60 * sizeof(double),
"DataDefinitionOwnAircraft has an incorrect size."); "DataDefinitionOwnAircraft has an incorrect size.");
const DataDefinitionOwnAircraft *ownAircaft = const DataDefinitionOwnAircraft *ownAircaft =
reinterpret_cast<const DataDefinitionOwnAircraft *>(&pObjData->dwData); reinterpret_cast<const DataDefinitionOwnAircraft *>(&pObjData->dwData);

View File

@@ -77,16 +77,7 @@ namespace swift::simplugin::msfs2024common
double engine6Combustion; //!< Engine 6 combustion flag double engine6Combustion; //!< Engine 6 combustion flag
double engine7Combustion; //!< Engine 7 combustion flag double engine7Combustion; //!< Engine 7 combustion flag
double engine8Combustion; //!< Engine 8 combustion flag double engine8Combustion; //!< Engine 8 combustion flag
// 46 // 45
double velocityWorldX; //!< Velocity World X
double velocityWorldY; //!< Velocity World Y
double velocityWorldZ; //!< Velocity World Z
double rotationVelocityBodyX; //!< Rotation Velocity Body X
double rotationVelocityBodyY; //!< Rotation Velocity Body Y
double rotationVelocityBodyZ; //!< Rotation Velocity Body Z
// 52
double altitudeCalibratedFt; //!< Altitude without temperature effect (ft, FS2020)
// 53
double engine1Power; //!< Engine 1 power double engine1Power; //!< Engine 1 power
double engine2Power; //!< Engine 2 power double engine2Power; //!< Engine 2 power
double engine3Power; //!< Engine 3 power double engine3Power; //!< Engine 3 power
@@ -95,7 +86,16 @@ namespace swift::simplugin::msfs2024common
double engine6Power; //!< Engine 6 power double engine6Power; //!< Engine 6 power
double engine7Power; //!< Engine 7 power double engine7Power; //!< Engine 7 power
double engine8Power; //!< Engine 8 power double engine8Power; //!< Engine 8 power
// 61 // 53
double velocityWorldX; //!< Velocity World X
double velocityWorldY; //!< Velocity World Y
double velocityWorldZ; //!< Velocity World Z
double rotationVelocityBodyX; //!< Rotation Velocity Body X
double rotationVelocityBodyY; //!< Rotation Velocity Body Y
double rotationVelocityBodyZ; //!< Rotation Velocity Body Z
// 59
double altitudeCalibratedFt; //!< Altitude without temperature effect (ft, FS2020)
// 60
}; };
//! Data struct of aircraft position //! Data struct of aircraft position

View File

@@ -946,9 +946,14 @@ namespace swift::simplugin::msfs2024common
dtb(simulatorOwnAircraft.engine7Combustion), dtb(simulatorOwnAircraft.engine8Combustion) dtb(simulatorOwnAircraft.engine7Combustion), dtb(simulatorOwnAircraft.engine8Combustion)
}; };
const QList<double> powerList { simulatorOwnAircraft.engine1Power, simulatorOwnAircraft.engine2Power,
simulatorOwnAircraft.engine3Power, simulatorOwnAircraft.engine4Power,
simulatorOwnAircraft.engine5Power, simulatorOwnAircraft.engine6Power,
simulatorOwnAircraft.engine7Power, simulatorOwnAircraft.engine8Power };
for (int index = 0; index < simulatorOwnAircraft.numberOfEngines; ++index) for (int index = 0; index < simulatorOwnAircraft.numberOfEngines; ++index)
{ {
engines.push_back(CAircraftEngine(index + 1, helperList.value(index, true), 100)); engines.push_back(CAircraftEngine(index + 1, helperList.value(index, false), powerList.value(index, 0)));
} }
const CAircraftParts parts(lights, dtb(simulatorOwnAircraft.gearHandlePosition), const CAircraftParts parts(lights, dtb(simulatorOwnAircraft.gearHandlePosition),