diff --git a/src/plugins/simulator/fsxcommon/simconnectdatadefinition.cpp b/src/plugins/simulator/fsxcommon/simconnectdatadefinition.cpp index 87b5c5164..45d72882d 100644 --- a/src/plugins/simulator/fsxcommon/simconnectdatadefinition.cpp +++ b/src/plugins/simulator/fsxcommon/simconnectdatadefinition.cpp @@ -36,9 +36,9 @@ namespace BlackSimPlugin { case RequestOwnAircraft: return ownAircraft; case RequestOwnAircraftTitle: return title; - case RequestSimEnvironment: return simEnv; - case RequestSbData: return sbData; - case RequestFacility: return facility; + case RequestSimEnvironment: return simEnv; + case RequestSbData: return sbData; + case RequestFacility: return facility; case RequestEndMarker: return end; default: break; } @@ -60,12 +60,12 @@ namespace BlackSimPlugin switch (simObjectRequest) { case SimObjectBaseId: return baseId; - case SimObjectAdd: return add; + case SimObjectAdd: return add; case SimObjectRemove: return remove; case SimObjectLights: return lights; case SimObjectPositionData: return pos; - case SimObjectModel: return model; - case SimObjectMisc: return misc; + case SimObjectModel: return model; + case SimObjectMisc: return misc; case SimObjectEndMarker: return end; default: break; } @@ -87,6 +87,8 @@ namespace BlackSimPlugin HRESULT CSimConnectDefinitions::initOwnAircraft(const HANDLE hSimConnect) { + // FSX vars: https://docs.microsoft.com/en-us/previous-versions/microsoft-esp/cc526981(v%3dmsdn.10) + // all the VARS here should be FSX/P3D HRESULT hr = s_ok(); hr += SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataOwnAircraft, "PLANE LATITUDE", "Degrees"); hr += SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataOwnAircraft, "PLANE LONGITUDE", "Degrees"); @@ -111,6 +113,13 @@ namespace BlackSimPlugin hr += SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataOwnAircraft, "COM ACTIVE FREQUENCY:2", "MHz"); hr += SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataOwnAircraft, "COM STANDBY FREQUENCY:1", "MHz"); hr += SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataOwnAircraft, "COM STANDBY FREQUENCY:2", "MHz"); + hr += SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataOwnAircraft, "COM TRANSMIT:1", "Bool"); + hr += SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataOwnAircraft, "COM TRANSMIT:2", "Bool"); + hr += SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataOwnAircraft, "COM RECEIVE ALL", "Bool"); + hr += SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataOwnAircraft, "COM TEST:1", "Bool"); + hr += SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataOwnAircraft, "COM TEST:2", "Bool"); + hr += SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataOwnAircraft, "COM STATUS:1", "Enum"); + hr += SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataOwnAircraft, "COM STATUS:2", "Enum"); hr += SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataOwnAircraft, "FLAPS HANDLE PERCENT", "Percent Over 100"); hr += SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataOwnAircraft, "SPOILERS HANDLE POSITION", "Percent Over 100"); hr += SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataOwnAircraft, "GEAR HANDLE POSITION", "Bool"); diff --git a/src/plugins/simulator/fsxcommon/simconnectdatadefinition.h b/src/plugins/simulator/fsxcommon/simconnectdatadefinition.h index d73f5460d..ffd8a0866 100644 --- a/src/plugins/simulator/fsxcommon/simconnectdatadefinition.h +++ b/src/plugins/simulator/fsxcommon/simconnectdatadefinition.h @@ -53,18 +53,25 @@ namespace BlackSimPlugin double com1ActiveMHz; //!< COM1 active frequency double com2ActiveMHz; //!< COM2 active frequency double com1StandbyMHz; //!< COM1 standby frequency - double com2StandbyMHz; //!< COM1 standby frequency - // 23 + double com2StandbyMHz; //!< COM2 standby frequency + double comTransmit1; //!< COM1 transmit, means also receiving + double comTransmit2; //!< COM2 transmit, means also receiving + double comReceiveAll; //!< all COMs receiving, or COM:x transmitting or receiving + double comTest1; //!< COM1 test + double comTest2; //!< COM2 test + double comStatus1; //!< COM1 status + double comStatus2; //!< COM2 status + // 30 double flapsHandlePosition; //!< Flaps handle position in percent double spoilersHandlePosition; //!< Spoilers out? (flag) double gearHandlePosition; //!< Gear handle position (flag) - // 26 + // 33 double numberOfEngines; //!< Number of engines double engine1Combustion; //!< Engine 1 combustion flag double engine2Combustion; //!< Engine 2 combustion flag double engine3Combustion; //!< Engine 3 combustion flag double engine4Combustion; //!< Engine 4 combustion flag - //31 + // 38 }; //! Data struct of aircraft position diff --git a/src/plugins/simulator/fsxcommon/simulatorfsxcommon.cpp b/src/plugins/simulator/fsxcommon/simulatorfsxcommon.cpp index b1077f248..935dbd536 100644 --- a/src/plugins/simulator/fsxcommon/simulatorfsxcommon.cpp +++ b/src/plugins/simulator/fsxcommon/simulatorfsxcommon.cpp @@ -659,16 +659,32 @@ namespace BlackSimPlugin CComSystem com1(myAircraft.getCom1System()); // set defaults CComSystem com2(myAircraft.getCom2System()); - // updates + // updates: https://www.fsdeveloper.com/forum/threads/com-unit-receiving-status-com-transmit-x-com-test-1-and-volume.445187/ + // COM: If you're set to transmit on a unit, you WILL receive that unit. + // Otherwise if you're NOT set to transmit on a unit, then it will only receive if COM RECEIVE ALL is true. + // There is no control of COM volume. com1.setFrequencyActive(CFrequency(simulatorOwnAircraft.com1ActiveMHz, CFrequencyUnit::MHz())); com1.setFrequencyStandby(CFrequency(simulatorOwnAircraft.com1StandbyMHz, CFrequencyUnit::MHz())); + const bool comReceiveAll = dtb(simulatorOwnAircraft.comReceiveAll); + const bool com1Test = dtb(simulatorOwnAircraft.comTest1); + const bool com1Transmit = dtb(simulatorOwnAircraft.comTransmit1); + const int com1Status = qRound(simulatorOwnAircraft.comStatus1); // Radio status flag : -1 =Invalid 0 = OK 1 = Does not exist 2 = No electricity 3 = Failed + com1.setSendEnabled(com1Status == 0 && com1Transmit); + com1.setReceiveEnabled(com1Status == 0 && (comReceiveAll || com1Transmit)); const bool changedCom1 = myAircraft.getCom1System() != com1; m_simCom1 = com1; + Q_UNUSED(com1Test); com2.setFrequencyActive(CFrequency(simulatorOwnAircraft.com2ActiveMHz, CFrequencyUnit::MHz())); com2.setFrequencyStandby(CFrequency(simulatorOwnAircraft.com2StandbyMHz, CFrequencyUnit::MHz())); + const bool com2Test = dtb(simulatorOwnAircraft.comTest2); + const bool com2Transmit = dtb(simulatorOwnAircraft.comTransmit2); + const int com2Status = qRound(simulatorOwnAircraft.comStatus2); // Radio status flag : -1 =Invalid 0 = OK 1 = Does not exist 2 = No electricity 3 = Failed + com2.setSendEnabled(com2Status == 0 && com2Transmit); + com2.setReceiveEnabled(com2Status == 0 && (comReceiveAll || com2Transmit)); const bool changedCom2 = myAircraft.getCom2System() != com2; m_simCom2 = com2; + Q_UNUSED(com2Test); CTransponder transponder(myAircraft.getTransponder()); transponder.setTransponderCode(qRound(simulatorOwnAircraft.transponderCode)); diff --git a/src/plugins/simulator/fsxcommon/simulatorfsxsimconnectproc.cpp b/src/plugins/simulator/fsxcommon/simulatorfsxsimconnectproc.cpp index e454a913b..f0223411a 100644 --- a/src/plugins/simulator/fsxcommon/simulatorfsxsimconnectproc.cpp +++ b/src/plugins/simulator/fsxcommon/simulatorfsxsimconnectproc.cpp @@ -243,7 +243,7 @@ namespace BlackSimPlugin { case CSimConnectDefinitions::RequestOwnAircraft: { - static_assert(sizeof(DataDefinitionOwnAircraft) == 31 * sizeof(double), "DataDefinitionOwnAircraft has an incorrect size."); + static_assert(sizeof(DataDefinitionOwnAircraft) == 38 * sizeof(double), "DataDefinitionOwnAircraft has an incorrect size."); const DataDefinitionOwnAircraft *ownAircaft = reinterpret_cast(&pObjData->dwData); simulatorFsxP3D->updateOwnAircraftFromSimulator(*ownAircaft); break;