diff --git a/src/plugins/simulator/fsxcommon/simconnectdatadefinition.cpp b/src/plugins/simulator/fsxcommon/simconnectdatadefinition.cpp index 677a7f69f..3a3428b4e 100644 --- a/src/plugins/simulator/fsxcommon/simconnectdatadefinition.cpp +++ b/src/plugins/simulator/fsxcommon/simconnectdatadefinition.cpp @@ -178,13 +178,18 @@ namespace swift::simplugin::fsxcommon "ROTATION VELOCITY BODY Y", "Radians per second"); hr += SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataOwnAircraft, "ROTATION VELOCITY BODY Z", "Radians per second"); - // MSFS 2020/2024 only + // MSFS 2020/2024 only. Placed at the end because non-MSFS simulators fail with these and skip them. + // Only access the members when using MSFS! hr += SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataOwnAircraft, "INDICATED ALTITUDE CALIBRATED", "Feet"); hr += SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataOwnAircraft, "TRANSPONDER STATE:1", "Enum"); hr += SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataOwnAircraft, "TRANSPONDER IDENT:1", "Bool"); + hr += SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataOwnAircraft, + "COM VOLUME:1", "Percent"); + hr += SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataOwnAircraft, + "COM VOLUME:2", "Percent"); hr += SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataOwnAircraftTitle, "TITLE", nullptr, SIMCONNECT_DATATYPE_STRING256); diff --git a/src/plugins/simulator/fsxcommon/simconnectdatadefinition.h b/src/plugins/simulator/fsxcommon/simconnectdatadefinition.h index ce46a673b..1073e6cbf 100644 --- a/src/plugins/simulator/fsxcommon/simconnectdatadefinition.h +++ b/src/plugins/simulator/fsxcommon/simconnectdatadefinition.h @@ -79,6 +79,8 @@ namespace swift::simplugin::fsxcommon double altitudeCalibratedFt; //!< Altitude without temperature effect (ft, MSFS) double transponderMode; //!< transponder state (MSFS) double ident; //!< ident (MSFS) + double com1Volume; //!< COM1 volume (MSFS) + double com2Volume; //!< COM2 volume (MSFS) }; //! Data struct of aircraft position diff --git a/src/plugins/simulator/fsxcommon/simulatorfsxcommon.cpp b/src/plugins/simulator/fsxcommon/simulatorfsxcommon.cpp index df1ea9a4a..4670505a7 100644 --- a/src/plugins/simulator/fsxcommon/simulatorfsxcommon.cpp +++ b/src/plugins/simulator/fsxcommon/simulatorfsxcommon.cpp @@ -687,6 +687,14 @@ namespace swift::simplugin::fsxcommon [[maybe_unused]] const swift::simplugin::fsxcommon::DataDefinitionOwnAircraft &simulatorOwnAircraft) { /* Do not modify the transponder mode by default. Only MSFS allows to read it from SimVars */ } + void CSimulatorFsxCommon::setComVolume( + [[maybe_unused]] swift::misc::aviation::CComSystem &com, + [[maybe_unused]] const swift::simplugin::fsxcommon::DataDefinitionOwnAircraft &simulatorOwnAircraft, + [[maybe_unused]] swift::misc::aviation::CComSystem::ComUnit unit) + { + /* Do not modify the COM volume by default. Only MSFS allows to read it from SimVars */ + } + void CSimulatorFsxCommon::updateOwnAircraftFromSimulator(const DataDefinitionOwnAircraft &simulatorOwnAircraft) { @@ -792,6 +800,8 @@ namespace swift::simplugin::fsxcommon if (!changedCom1Standby) { com1.setFrequencyStandby(myAircraft.getCom1System().getFrequencyStandby()); } else { m_lastCom1Standby.setNull(); } + setComVolume(com1, simulatorOwnAircraft, CComSystem::Com1); + const bool changedCom1 = myAircraft.getCom1System() != com1; m_simCom1 = com1; @@ -820,6 +830,8 @@ namespace swift::simplugin::fsxcommon if (!changedCom2Standby) { com2.setFrequencyStandby(myAircraft.getCom2System().getFrequencyStandby()); } else { m_lastCom2Standby.setNull(); } + setComVolume(com2, simulatorOwnAircraft, CComSystem::Com2); + const bool changedCom2 = myAircraft.getCom2System() != com2; m_simCom2 = com2; diff --git a/src/plugins/simulator/fsxcommon/simulatorfsxcommon.h b/src/plugins/simulator/fsxcommon/simulatorfsxcommon.h index d9c21f7a1..35600d83c 100644 --- a/src/plugins/simulator/fsxcommon/simulatorfsxcommon.h +++ b/src/plugins/simulator/fsxcommon/simulatorfsxcommon.h @@ -508,6 +508,12 @@ namespace swift::simplugin::fsxcommon setTransponderMode(swift::misc::aviation::CTransponder &transponder, const swift::simplugin::fsxcommon::DataDefinitionOwnAircraft &simulatorOwnAircraft); + //! Customization point for changing the COM volume + virtual void + setComVolume(swift::misc::aviation::CComSystem &com, + const swift::simplugin::fsxcommon::DataDefinitionOwnAircraft &simulatorOwnAircraft, + swift::misc::aviation::CComSystem::ComUnit unit); + //! Called when data about our own aircraft are received void updateOwnAircraftFromSimulator(const DataDefinitionOwnAircraft &simulatorOwnAircraft); diff --git a/src/plugins/simulator/fsxcommon/simulatorfsxsimconnectproc.cpp b/src/plugins/simulator/fsxcommon/simulatorfsxsimconnectproc.cpp index a46feaa0e..4f7cd4f97 100644 --- a/src/plugins/simulator/fsxcommon/simulatorfsxsimconnectproc.cpp +++ b/src/plugins/simulator/fsxcommon/simulatorfsxsimconnectproc.cpp @@ -252,7 +252,7 @@ namespace swift::simplugin::fsxcommon { case CSimConnectDefinitions::RequestOwnAircraft: { - static_assert(sizeof(DataDefinitionOwnAircraft) == 47 * sizeof(double), + static_assert(sizeof(DataDefinitionOwnAircraft) == 49 * sizeof(double), "DataDefinitionOwnAircraft has an incorrect size."); const DataDefinitionOwnAircraft *ownAircaft = reinterpret_cast(&pObjData->dwData); diff --git a/src/plugins/simulator/msfs/simulatormsfs.cpp b/src/plugins/simulator/msfs/simulatormsfs.cpp index 004f48a08..279e74b28 100644 --- a/src/plugins/simulator/msfs/simulatormsfs.cpp +++ b/src/plugins/simulator/msfs/simulatormsfs.cpp @@ -54,6 +54,15 @@ namespace swift::simplugin::msfs transponder.setTransponderMode(mode); } + void CSimulatorMsFs::setComVolume( + swift::misc::aviation::CComSystem& com, + const swift::simplugin::fsxcommon::DataDefinitionOwnAircraft& simulatorOwnAircraft, + swift::misc::aviation::CComSystem::ComUnit unit) + { + if (unit == CComSystem::Com1) { com.setVolumeReceive(simulatorOwnAircraft.com1Volume);} + if (unit == CComSystem::Com2) { com.setVolumeReceive(simulatorOwnAircraft.com2Volume); } + } + void CSimulatorMsFsListener::startImpl() { diff --git a/src/plugins/simulator/msfs/simulatormsfs.h b/src/plugins/simulator/msfs/simulatormsfs.h index 9e7c2da6e..91a7d4b65 100644 --- a/src/plugins/simulator/msfs/simulatormsfs.h +++ b/src/plugins/simulator/msfs/simulatormsfs.h @@ -35,6 +35,10 @@ namespace swift::simplugin::msfs setTransponderMode(swift::misc::aviation::CTransponder &transponder, const swift::simplugin::fsxcommon::DataDefinitionOwnAircraft &simulatorOwnAircraft) override; + void setComVolume(swift::misc::aviation::CComSystem &com, + const swift::simplugin::fsxcommon::DataDefinitionOwnAircraft &simulatorOwnAircraft, + swift::misc::aviation::CComSystem::ComUnit unit) override; + }; //! Listener for MSFS