diff --git a/src/plugins/simulator/fsxcommon/simconnectdatadefinition.cpp b/src/plugins/simulator/fsxcommon/simconnectdatadefinition.cpp index 57be83855..267fed3ff 100644 --- a/src/plugins/simulator/fsxcommon/simconnectdatadefinition.cpp +++ b/src/plugins/simulator/fsxcommon/simconnectdatadefinition.cpp @@ -240,7 +240,7 @@ namespace BlackSimPlugin hr += SimConnect_AddToClientDataDefinition(hSimConnect, CSimConnectDefinitions::DataClientAreaSbStandby, 17, 1); // standby hr += SimConnect_AddToClientDataDefinition(hSimConnect, CSimConnectDefinitions::DataClientAreaSbIdent, 19, 1); // ident hr += SimConnect_AddToClientDataDefinition(hSimConnect, CSimConnectDefinitions::DataClientAreaSbConnected, 1, 1); // network connected - hr += SimConnect_AddToClientDataDefinition(hSimConnect, CSimConnectDefinitions::DataClientAreaSbRunning, 0, 1); // SB4 running + hr += SimConnect_AddToClientDataDefinition(hSimConnect, CSimConnectDefinitions::DataClientAreaSbRunning, 0, 1); // SB running if (isFailure(hr)) { @@ -252,8 +252,8 @@ namespace BlackSimPlugin DataDefinitionClientAreaSb sbArea; byte sbRunning = 1; sbArea.setDefaultValues(); - hr += SimConnect_SetClientData(hSimConnect, ClientAreaSquawkBox, CSimConnectDefinitions::DataClientAreaSb, SIMCONNECT_CLIENT_DATA_REQUEST_FLAG_DEFAULT, 0, sbSize, &sbArea); - hr += SimConnect_SetClientData(hSimConnect, ClientAreaSquawkBox, CSimConnectDefinitions::DataClientAreaSbRunning, SIMCONNECT_CLIENT_DATA_REQUEST_FLAG_DEFAULT, 0, 1, &sbRunning); + hr += SimConnect_SetClientData(hSimConnect, ClientAreaSquawkBox, CSimConnectDefinitions::DataClientAreaSb, SIMCONNECT_CLIENT_DATA_SET_FLAG_DEFAULT, 0, sbSize, &sbArea); + hr += SimConnect_SetClientData(hSimConnect, ClientAreaSquawkBox, CSimConnectDefinitions::DataClientAreaSbRunning, SIMCONNECT_CLIENT_DATA_SET_FLAG_DEFAULT, 0, 1, &sbRunning); if (isFailure(hr)) { CLogMessage(static_cast(nullptr)).error("SimConnect error: SimConnect_SetClientData %1") << hr; diff --git a/src/plugins/simulator/fsxcommon/simconnectdatadefinition.h b/src/plugins/simulator/fsxcommon/simconnectdatadefinition.h index e34bc69c3..c784fd382 100644 --- a/src/plugins/simulator/fsxcommon/simconnectdatadefinition.h +++ b/src/plugins/simulator/fsxcommon/simconnectdatadefinition.h @@ -194,7 +194,7 @@ namespace BlackSimPlugin std::fill(data, data + 128, static_cast(0)); data[0] = 1; // SB running, indicates the client is running as external app, 0..not running, 1..external app, 2..FS module data[1] = 0; // SB connected to FSD, 0..not connected, 1..connected - data[17] = 1; // standby + data[17] = 1; // 1..standby, 0..mode C data[19] = 0; // no ident } }; @@ -220,11 +220,11 @@ namespace BlackSimPlugin DataRemoteAircraftGetPosition, //!< get position to evaluate altitude / AGL DataRemoteAircraftModelData, //!< model data eventually used and reported back from simulator DataSimEnvironment, - DataClientAreaSb, //!< whole SB area - DataClientAreaSbIdent, //!< SB ident single value - DataClientAreaSbStandby, //!< SB standby - DataClientAreaSbConnected, //!< SB connected with network - DataClientAreaSbRunning //!< SB running + DataClientAreaSb, //!< whole SB area, see http://squawkbox.ca/doc/sdk/fsuipc.php + DataClientAreaSbIdent, //!< SB ident single value 0x7b93/19 + DataClientAreaSbStandby, //!< SB standby 0x7b91/17 + DataClientAreaSbConnected, //!< SB connected with network 0x7b81/1 + DataClientAreaSbRunning //!< SB running 0x7b80/0 }; //! SimConnect request IDs diff --git a/src/plugins/simulator/fsxcommon/simulatorfsxcommon.cpp b/src/plugins/simulator/fsxcommon/simulatorfsxcommon.cpp index 0a6a78873..4cf8678eb 100644 --- a/src/plugins/simulator/fsxcommon/simulatorfsxcommon.cpp +++ b/src/plugins/simulator/fsxcommon/simulatorfsxcommon.cpp @@ -190,20 +190,25 @@ namespace BlackSimPlugin if (newTransponder.getTransponderMode() != m_simTransponder.getTransponderMode()) { + // use one way to transfer XPDR ident/mode not both if (m_useSbOffsets) { byte ident = newTransponder.isIdentifying() ? 1U : 0U; // 1 is ident byte standby = newTransponder.isInStandby() ? 1U : 0U; // 1 is standby HRESULT hr = s_ok(); - hr += SimConnect_SetClientData(m_hSimConnect, ClientAreaSquawkBox, CSimConnectDefinitions::DataClientAreaSbIdent, SIMCONNECT_CLIENT_DATA_REQUEST_FLAG_DEFAULT, 0, 1, &ident); - hr += SimConnect_SetClientData(m_hSimConnect, ClientAreaSquawkBox, CSimConnectDefinitions::DataClientAreaSbStandby, SIMCONNECT_CLIENT_DATA_REQUEST_FLAG_DEFAULT, 0, 1, &standby); + hr += SimConnect_SetClientData(m_hSimConnect, ClientAreaSquawkBox, CSimConnectDefinitions::DataClientAreaSbIdent, SIMCONNECT_CLIENT_DATA_SET_FLAG_DEFAULT, 0, 1, &ident); + hr += SimConnect_SetClientData(m_hSimConnect, ClientAreaSquawkBox, CSimConnectDefinitions::DataClientAreaSbStandby, SIMCONNECT_CLIENT_DATA_SET_FLAG_DEFAULT, 0, 1, &standby); if (isFailure(hr)) { this->triggerAutoTraceSendId(); CLogMessage(this).warning("Setting transponder mode failed (SB offsets)"); } } + else if (m_useFsuipc && m_fsuipc) + { + m_fsuipc->write(newTransponder); + } changed = true; } @@ -354,7 +359,7 @@ namespace BlackSimPlugin // update SB area network connected byte sbNetworkConnected = connected ? 1u : 0u; - HRESULT hr = SimConnect_SetClientData(m_hSimConnect, ClientAreaSquawkBox, CSimConnectDefinitions::DataClientAreaSbConnected, SIMCONNECT_CLIENT_DATA_REQUEST_FLAG_DEFAULT, 0, 1, &sbNetworkConnected); + HRESULT hr = SimConnect_SetClientData(m_hSimConnect, ClientAreaSquawkBox, CSimConnectDefinitions::DataClientAreaSbConnected, SIMCONNECT_CLIENT_DATA_SET_FLAG_DEFAULT, 0, 1, &sbNetworkConnected); if (isFailure(hr)) { CLogMessage(this).warning("Setting network connected failed (SB offsets)"); @@ -647,7 +652,6 @@ namespace BlackSimPlugin // defaults CComSystem com1(myAircraft.getCom1System()); // set defaults CComSystem com2(myAircraft.getCom2System()); - CTransponder transponder(myAircraft.getTransponder()); // updates com1.setFrequencyActive(CFrequency(simulatorOwnAircraft.com1ActiveMHz, CFrequencyUnit::MHz())); @@ -660,11 +664,13 @@ namespace BlackSimPlugin const bool changedCom2 = myAircraft.getCom2System() != com2; m_simCom2 = com2; + CTransponder transponder(myAircraft.getTransponder()); transponder.setTransponderCode(qRound(simulatorOwnAircraft.transponderCode)); const bool changedXpr = (myAircraft.getTransponderCode() != transponder.getTransponderCode()); if (changedCom1 || changedCom2 || changedXpr) { + // set in own aircraft provider this->updateCockpit(com1, com2, transponder, identifier()); } } @@ -697,7 +703,7 @@ namespace BlackSimPlugin this->physicallyInitAITerrainProbes(position, 2); // init probe } - // SB3 offsets + // SB3 offsets updating m_simulatorInternals.setValue(QStringLiteral("fsx/sb3"), boolToEnabledDisabled(m_useSbOffsets)); m_simulatorInternals.setValue(QStringLiteral("fsx/sb3packets"), m_useSbOffsets ? QString::number(m_sbDataReceived) : QStringLiteral("disabled")); } @@ -817,6 +823,7 @@ namespace BlackSimPlugin void CSimulatorFsxCommon::updateOwnAircraftFromSimulatorFsuipc(const CTransponder &xpdr) { + if (!m_useFsuipc) { return; } const CSimulatedAircraft myAircraft(this->getOwnAircraft()); const bool changed = (myAircraft.getTransponderMode() != xpdr.getTransponderMode()); if (!changed) { return; } @@ -1347,14 +1354,17 @@ namespace BlackSimPlugin m_dispatchErrors = 0; if (m_useFsuipc && m_fsuipc) { - CSimulatedAircraft fsuipcAircraft(getOwnAircraft()); if (m_dispatchProcCount % 10 == 0) { - // slow - const bool ok = m_fsuipc->read(fsuipcAircraft, true, false, false); - if (ok) + // slow updates, here only when SB/SimConnect is disabled as those do the same thing + if (!m_useSbOffsets) { - this->updateOwnAircraftFromSimulatorFsuipc(fsuipcAircraft.getTransponder()); + CSimulatedAircraft fsuipcAircraft(this->getOwnAircraft()); + const bool ok = m_fsuipc->read(fsuipcAircraft, true, false, false); + if (ok) + { + this->updateOwnAircraftFromSimulatorFsuipc(fsuipcAircraft.getTransponder()); + } } } else diff --git a/src/plugins/simulator/fsxcommon/simulatorfsxcommon.h b/src/plugins/simulator/fsxcommon/simulatorfsxcommon.h index 15f2df694..810f13ecc 100644 --- a/src/plugins/simulator/fsxcommon/simulatorfsxcommon.h +++ b/src/plugins/simulator/fsxcommon/simulatorfsxcommon.h @@ -437,9 +437,6 @@ namespace BlackSimPlugin //! \param force send lights even if they appear to be the same void sendToggledLightsToSimulator(const CSimConnectObject &simObject, const BlackMisc::Aviation::CAircraftLights &lightsWanted, bool force = false); - //! Called when data about our own aircraft are received - void updateOwnAircraftFromSimulator(const DataDefinitionOwnAircraft &simulatorOwnAircraft); - //! Call CSimulatorFsxCommon::updateRemoteAircraftFromSimulator asynchronously //! \remark do not to send SimConnect data in event loop void triggerUpdateRemoteAircraftFromSimulator(const CSimConnectObject &simObject, const DataDefinitionPosData &remoteAircraftData); @@ -457,6 +454,9 @@ namespace BlackSimPlugin //! Probe data sent from simulator void updateProbeFromSimulator(const BlackMisc::Aviation::CCallsign &callsign, const DataDefinitionPosData &remoteAircraftData); + //! Called when data about our own aircraft are received + void updateOwnAircraftFromSimulator(const DataDefinitionOwnAircraft &simulatorOwnAircraft); + //! Update from SB client area //! \threadsafe void updateOwnAircraftFromSimulator(const DataDefinitionClientAreaSb &sbDataArea);