diff --git a/src/gui/components/simulatorcomponent.cpp b/src/gui/components/simulatorcomponent.cpp
index cb0aed866..89dd60bb8 100644
--- a/src/gui/components/simulatorcomponent.cpp
+++ b/src/gui/components/simulatorcomponent.cpp
@@ -221,7 +221,7 @@ namespace swift::gui::components
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),
+ this->addOrUpdateLiveDataByName(QStringLiteral("ENG%1PwrPct").arg(engNum),
engpwr < 0 ? QStringLiteral("N/A") : QString::number(engpwr, 'f', 1),
CIcon(CIcons::ApplicationSimulator));
}
diff --git a/src/gui/editors/aircraftpartsform.ui b/src/gui/editors/aircraftpartsform.ui
index 731008015..bca349457 100644
--- a/src/gui/editors/aircraftpartsform.ui
+++ b/src/gui/editors/aircraftpartsform.ui
@@ -374,7 +374,7 @@
100
- 11
+ 12
@@ -384,7 +384,7 @@
100
- 11
+ 13
diff --git a/src/misc/aviation/aircraftengine.cpp b/src/misc/aviation/aircraftengine.cpp
index 642ef0933..cb24dc13a 100644
--- a/src/misc/aviation/aircraftengine.cpp
+++ b/src/misc/aviation/aircraftengine.cpp
@@ -12,7 +12,7 @@ SWIFT_DEFINE_VALUEOBJECT_MIXINS(swift::misc::aviation, CAircraftEngine)
namespace swift::misc::aviation
{
CAircraftEngine::CAircraftEngine(int number, bool on, int enginePercentage)
- : m_number(number), m_on(on), m_power(enginePercentage)
+ : m_number(number), m_on(on), m_rpm_pct(enginePercentage)
{
Q_ASSERT_X(number > 0, "CAircraftEngine", "Engine numbers have to be > 1");
}
@@ -25,10 +25,10 @@ namespace swift::misc::aviation
void CAircraftEngine::setEnginePower(double power)
{
- m_power = power;
- if (!m_on) m_power = 0;
- if (m_power > 100) m_power = 100;
- if (m_power < 0) m_power = 0;
+ m_rpm_pct = power;
+ if (!m_on) m_rpm_pct = 0;
+ if (m_rpm_pct > 100) m_rpm_pct = 100;
+ if (m_rpm_pct < 0) m_rpm_pct = 0;
}
QString CAircraftEngine::convertToQString(bool i18n) const
diff --git a/src/misc/aviation/aircraftengine.h b/src/misc/aviation/aircraftengine.h
index c195fe43a..36b2ed174 100644
--- a/src/misc/aviation/aircraftengine.h
+++ b/src/misc/aviation/aircraftengine.h
@@ -46,7 +46,7 @@ namespace swift::misc::aviation
//! Set engine percentage (0..100)
void setEnginePower(double percentage);
- double getEnginePower() const { return m_power; }
+ double getEnginePower() const { return m_rpm_pct; }
//! \copydoc swift::misc::mixin::String::toQString
QString convertToQString(bool i18n = false) const;
@@ -54,14 +54,15 @@ namespace swift::misc::aviation
private:
int m_number = 1;
bool m_on = false;
- double m_power = 0.0;
+ double m_rpm_pct = 0.0;
SWIFT_METACLASS(
CAircraftEngine,
SWIFT_METAMEMBER(number, 0, DisabledForJson),
SWIFT_METAMEMBER(on),
- SWIFT_METAMEMBER(power));
+ SWIFT_METAMEMBER(rpm_pct));
};
+
} // namespace swift::misc::aviation
Q_DECLARE_METATYPE(swift::misc::aviation::CAircraftEngine)
diff --git a/src/plugins/simulator/fsxcommon/simconnectdatadefinition.cpp b/src/plugins/simulator/fsxcommon/simconnectdatadefinition.cpp
index 50535ba45..7085b7d4f 100644
--- a/src/plugins/simulator/fsxcommon/simconnectdatadefinition.cpp
+++ b/src/plugins/simulator/fsxcommon/simconnectdatadefinition.cpp
@@ -187,21 +187,21 @@ namespace swift::simplugin::fsxcommon
"GENERAL ENG COMBUSTION:8", "Bool");
// 45
hr += SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataOwnAircraft,
- "GENERAL ENG THROTTLE LEVER POSITION:1", "percent");
+ "GENERAL ENG PCT MAX RPM:1", "percent");
hr += SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataOwnAircraft,
- "GENERAL ENG THROTTLE LEVER POSITION:2", "percent");
+ "GENERAL ENG PCT MAX RPM:2", "percent");
hr += SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataOwnAircraft,
- "GENERAL ENG THROTTLE LEVER POSITION:3", "percent");
+ "GENERAL ENG PCT MAX RPM:3", "percent");
hr += SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataOwnAircraft,
- "GENERAL ENG THROTTLE LEVER POSITION:4", "percent");
+ "GENERAL ENG PCT MAX RPM:4", "percent");
hr += SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataOwnAircraft,
- "GENERAL ENG THROTTLE LEVER POSITION:5", "percent");
+ "GENERAL ENG PCT MAX RPM:5", "percent");
hr += SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataOwnAircraft,
- "GENERAL ENG THROTTLE LEVER POSITION:6", "percent");
+ "GENERAL ENG PCT MAX RPM:6", "percent");
hr += SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataOwnAircraft,
- "GENERAL ENG THROTTLE LEVER POSITION:7", "percent");
+ "GENERAL ENG PCT MAX RPM:7", "percent");
hr += SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataOwnAircraft,
- "GENERAL ENG THROTTLE LEVER POSITION:8", "percent");
+ "GENERAL ENG PCT MAX RPM:8", "percent");
// 53
hr += SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataOwnAircraft, "VELOCITY WORLD X",
"Feet per second");
diff --git a/src/plugins/simulator/fsxcommon/simulatorfsxcommon.cpp b/src/plugins/simulator/fsxcommon/simulatorfsxcommon.cpp
index 0c36d7ad8..2ef82aea2 100644
--- a/src/plugins/simulator/fsxcommon/simulatorfsxcommon.cpp
+++ b/src/plugins/simulator/fsxcommon/simulatorfsxcommon.cpp
@@ -753,7 +753,13 @@ namespace swift::simplugin::fsxcommon
for (int index = 0; index < simulatorOwnAircraft.numberOfEngines; ++index)
{
- engines.push_back(CAircraftEngine(index + 1, helperList.value(index, false), powerList.value(index, 0)));
+ // this is a bit of a guess, but it seems that idle is around 30% in the sim, so
+ // I use that as 0% for better resolution
+ // because we read "GENERAL ENG PCT MAX RPM" and send "GENERAL ENG THROTTLE LEVER POSITION"
+ CONST DOUBLE factor = 30.0;
+ DOUBLE engine_rpm = (powerList.value(index, 0) - factor) * 100 / (100 - factor);
+ if (engine_rpm < 0) engine_rpm = 0;
+ engines.push_back(CAircraftEngine(index + 1, helperList.value(index, false), engine_rpm));
}
const CAircraftParts parts(lights, dtb(simulatorOwnAircraft.gearHandlePosition),
diff --git a/src/plugins/simulator/msfs2024/simconnectdatadefinitionmsfs2024.cpp b/src/plugins/simulator/msfs2024/simconnectdatadefinitionmsfs2024.cpp
index 459958239..4c65ea20e 100644
--- a/src/plugins/simulator/msfs2024/simconnectdatadefinitionmsfs2024.cpp
+++ b/src/plugins/simulator/msfs2024/simconnectdatadefinitionmsfs2024.cpp
@@ -169,6 +169,8 @@ namespace swift::simplugin::msfs2024common
"GEAR HANDLE POSITION", "Bool");
hr += SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataOwnAircraft, "NUMBER OF ENGINES",
"Number");
+ hr += SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataOwnAircraft, "ENGINE TYPE",
+ "Number");
// Simconnect supports index 1 - 4
hr += SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataOwnAircraft,
"GENERAL ENG COMBUSTION:1", "Bool");
@@ -188,21 +190,21 @@ namespace swift::simplugin::msfs2024common
"GENERAL ENG COMBUSTION:8", "Bool");
hr += SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataOwnAircraft,
- "GENERAL ENG THROTTLE LEVER POSITION:1", "percent");
+ "GENERAL ENG PCT MAX RPM:1", "percent");
hr += SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataOwnAircraft,
- "GENERAL ENG THROTTLE LEVER POSITION:2", "percent");
+ "GENERAL ENG PCT MAX RPM:2", "percent");
hr += SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataOwnAircraft,
- "GENERAL ENG THROTTLE LEVER POSITION:3", "percent");
+ "GENERAL ENG PCT MAX RPM:3", "percent");
hr += SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataOwnAircraft,
- "GENERAL ENG THROTTLE LEVER POSITION:4", "percent");
+ "GENERAL ENG PCT MAX RPM:4", "percent");
hr += SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataOwnAircraft,
- "GENERAL ENG THROTTLE LEVER POSITION:5", "percent");
+ "GENERAL ENG PCT MAX RPM:5", "percent");
hr += SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataOwnAircraft,
- "GENERAL ENG THROTTLE LEVER POSITION:6", "percent");
+ "GENERAL ENG PCT MAX RPM:6", "percent");
hr += SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataOwnAircraft,
- "GENERAL ENG THROTTLE LEVER POSITION:7", "percent");
+ "GENERAL ENG PCT MAX RPM:7", "percent");
hr += SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataOwnAircraft,
- "GENERAL ENG THROTTLE LEVER POSITION:8", "percent");
+ "GENERAL ENG PCT MAX RPM:8", "percent");
hr += SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataOwnAircraft, "VELOCITY WORLD X",
"Feet per second");
diff --git a/src/plugins/simulator/msfs2024/simconnectdatadefinitionmsfs2024.h b/src/plugins/simulator/msfs2024/simconnectdatadefinitionmsfs2024.h
index 691db417b..a0233ac17 100644
--- a/src/plugins/simulator/msfs2024/simconnectdatadefinitionmsfs2024.h
+++ b/src/plugins/simulator/msfs2024/simconnectdatadefinitionmsfs2024.h
@@ -69,6 +69,7 @@ namespace swift::simplugin::msfs2024common
double gearHandlePosition; //!< Gear handle position (flag)
// 36
double numberOfEngines; //!< Number of engines
+ double engineType; //!< Engine type
double engine1Combustion; //!< Engine 1 combustion flag
double engine2Combustion; //!< Engine 2 combustion flag
double engine3Combustion; //!< Engine 3 combustion flag
@@ -77,7 +78,7 @@ namespace swift::simplugin::msfs2024common
double engine6Combustion; //!< Engine 6 combustion flag
double engine7Combustion; //!< Engine 7 combustion flag
double engine8Combustion; //!< Engine 8 combustion flag
- // 45
+ // 46
double engine1Power; //!< Engine 1 power
double engine2Power; //!< Engine 2 power
double engine3Power; //!< Engine 3 power
@@ -86,16 +87,16 @@ namespace swift::simplugin::msfs2024common
double engine6Power; //!< Engine 6 power
double engine7Power; //!< Engine 7 power
double engine8Power; //!< Engine 8 power
- // 53
+ // 54
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
+ double altitudeCalibratedFt; //!< Altitude without temperature effect (ft, FS2020)
+ // 61
};
//! Data struct of aircraft position
diff --git a/src/plugins/simulator/msfs2024/simulatormsfs2024common.cpp b/src/plugins/simulator/msfs2024/simulatormsfs2024common.cpp
index 4391ba339..6ed7f509d 100644
--- a/src/plugins/simulator/msfs2024/simulatormsfs2024common.cpp
+++ b/src/plugins/simulator/msfs2024/simulatormsfs2024common.cpp
@@ -888,6 +888,26 @@ namespace swift::simplugin::msfs2024common
aircraftSituation.setAltitude(
CAltitude(simulatorOwnAircraft.altitudeFt, CAltitude::MeanSeaLevel, CLengthUnit::ft()));
}
+
+ double CSimulatorMsfs2024::calcEngineFactor(int engineType)
+ {
+ // this is a bit of a guess, but it seems that idle is around 30% in the sim, so
+ // I use that as 0% for better resolution
+ // because we read "GENERAL ENG PCT MAX RPM" and send "GENERAL ENG THROTTLE LEVER POSITION"
+ double factor = 30.0; // default factor, keep 30% as 0% for better resolution
+ switch (engineType)
+ {
+ case 0: factor = 25.0; break; // piston, seems to be around 30% at idle
+ case 1: factor = 40.0; break; // jet, seems to be around 55% at idle
+ case 2: factor = 25.0; break; // none, seems to be around 0% at idle
+ case 3: factor = 80.0; break; // helo, seems to be around 99% at idle
+ case 4: factor = 30.0; break; // unsupported, seems to be around 30% at idle
+ case 5: factor = 40.0; break; // turboprop, seems to be around 40% at idle
+ case 6: factor = 1.0; break; // electric, seems to be around 0% at idle
+ default: factor = 30.0; break; // default, keep 30% factor
+ }
+ return factor;
+ }
void CSimulatorMsfs2024::updateOwnAircraftFromSimulator(const DataDefinitionOwnAircraft &simulatorOwnAircraft)
{
@@ -951,9 +971,13 @@ namespace swift::simplugin::msfs2024common
simulatorOwnAircraft.engine5Power, simulatorOwnAircraft.engine6Power,
simulatorOwnAircraft.engine7Power, simulatorOwnAircraft.engine8Power };
+ DOUBLE factor = this->calcEngineFactor(static_cast(simulatorOwnAircraft.engineType)); // clears all pending aircraft etc
+
for (int index = 0; index < simulatorOwnAircraft.numberOfEngines; ++index)
{
- engines.push_back(CAircraftEngine(index + 1, helperList.value(index, false), powerList.value(index, 0)));
+ DOUBLE engine_rpm = (powerList.value(index, 0) - factor) * 100 / (100 - factor);
+ if (engine_rpm < 0) engine_rpm = 0;
+ engines.push_back(CAircraftEngine(index + 1, helperList.value(index, false), engine_rpm));
}
const CAircraftParts parts(lights, dtb(simulatorOwnAircraft.gearHandlePosition),
diff --git a/src/plugins/simulator/msfs2024/simulatormsfs2024common.h b/src/plugins/simulator/msfs2024/simulatormsfs2024common.h
index d6c5b52fe..cc36d6e57 100644
--- a/src/plugins/simulator/msfs2024/simulatormsfs2024common.h
+++ b/src/plugins/simulator/msfs2024/simulatormsfs2024common.h
@@ -499,6 +499,9 @@ namespace swift::simplugin::msfs2024common
setTrueAltitude(swift::misc::aviation::CAircraftSituation &aircraftSituation,
const swift::simplugin::msfs2024common::DataDefinitionOwnAircraft &simulatorOwnAircraft);
+ double calcEngineFactor(int engineType);
+
+
//! Called when data about our own aircraft are received
void updateOwnAircraftFromSimulator(const DataDefinitionOwnAircraft &simulatorOwnAircraft);
diff --git a/src/plugins/simulator/msfs2024/simulatormsfs2024simconnectproc.cpp b/src/plugins/simulator/msfs2024/simulatormsfs2024simconnectproc.cpp
index 0d94a4cb0..5ba9fa963 100644
--- a/src/plugins/simulator/msfs2024/simulatormsfs2024simconnectproc.cpp
+++ b/src/plugins/simulator/msfs2024/simulatormsfs2024simconnectproc.cpp
@@ -286,7 +286,7 @@ namespace swift::simplugin::msfs2024common
{
case CSimConnectDefinitions::RequestOwnAircraft:
{
- static_assert(sizeof(DataDefinitionOwnAircraft) == 60 * sizeof(double),
+ static_assert(sizeof(DataDefinitionOwnAircraft) == 61 * sizeof(double),
"DataDefinitionOwnAircraft has an incorrect size.");
const DataDefinitionOwnAircraft *ownAircaft =
reinterpret_cast(&pObjData->dwData);
diff --git a/src/xswiftbus/datarefs.inc b/src/xswiftbus/datarefs.inc
index 13c86c48b..4ed8fa55a 100644
--- a/src/xswiftbus/datarefs.inc
+++ b/src/xswiftbus/datarefs.inc
@@ -27689,10 +27689,10 @@ namespace xplane
};
//! Switch, 0 or 1. This is to turn COM1 on to get a clearance without turning the rest of the avionics on. (boolean)
- struct gnd_com_power_on
+ struct gnd_com_rpm_pct_on
{
//! Dataref name
- static constexpr const char *name() { return "sim/cockpit2/switches/gnd_com_power_on"; }
+ static constexpr const char *name() { return "sim/cockpit2/switches/gnd_com_rpm_pct_on"; }
//! Can be written to?
static constexpr bool writable = true;
//! Dataref type