From 5323cb09d71b11c1e28624112650438ecc7cec0b Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Tue, 25 Sep 2018 01:52:01 +0200 Subject: [PATCH] Ref T372, fixed freeze so aircraft is really stable see https://swift-project.slack.com/archives/G96QTUBEG/p1537784648000100 --- .../fsxcommon/simulatorfsxcommon.cpp | 28 ++++++++----------- .../simulator/fsxcommon/simulatorfsxcommon.h | 23 +++++++-------- 2 files changed, 24 insertions(+), 27 deletions(-) diff --git a/src/plugins/simulator/fsxcommon/simulatorfsxcommon.cpp b/src/plugins/simulator/fsxcommon/simulatorfsxcommon.cpp index 7ae960288..c4fc3ad8e 100644 --- a/src/plugins/simulator/fsxcommon/simulatorfsxcommon.cpp +++ b/src/plugins/simulator/fsxcommon/simulatorfsxcommon.cpp @@ -502,13 +502,13 @@ namespace BlackSimPlugin SimConnect_AIReleaseControl(m_hSimConnect, objectId, requestId), simObject, "Release control", Q_FUNC_INFO, "SimConnect_AIReleaseControl"); const HRESULT hr2 = this->logAndTraceSendId( - SimConnect_TransmitClientEvent(m_hSimConnect, objectId, EventFreezeLat, 1, SIMCONNECT_GROUP_PRIORITY_HIGHEST, SIMCONNECT_EVENT_FLAG_GROUPID_IS_PRIORITY), - simObject, "EventFreezeLat", Q_FUNC_INFO, "SimConnect_TransmitClientEvent"); + SimConnect_TransmitClientEvent(m_hSimConnect, objectId, EventFreezeLatLng, 1, SIMCONNECT_GROUP_PRIORITY_HIGHEST, SIMCONNECT_EVENT_FLAG_GROUPID_IS_PRIORITY), + simObject, "EventFreezeLatLng", Q_FUNC_INFO, "SimConnect_TransmitClientEvent"); const HRESULT hr3 = this->logAndTraceSendId( - SimConnect_TransmitClientEvent(m_hSimConnect, objectId, EventFreezeLat, 1, SIMCONNECT_GROUP_PRIORITY_HIGHEST, SIMCONNECT_EVENT_FLAG_GROUPID_IS_PRIORITY), + SimConnect_TransmitClientEvent(m_hSimConnect, objectId, EventFreezeAlt, 1, SIMCONNECT_GROUP_PRIORITY_HIGHEST, SIMCONNECT_EVENT_FLAG_GROUPID_IS_PRIORITY), simObject, "EventFreezeAlt", Q_FUNC_INFO, "SimConnect_TransmitClientEvent"); const HRESULT hr4 = this->logAndTraceSendId( - SimConnect_TransmitClientEvent(m_hSimConnect, objectId, EventFreezeLat, 1, SIMCONNECT_GROUP_PRIORITY_HIGHEST, SIMCONNECT_EVENT_FLAG_GROUPID_IS_PRIORITY), + SimConnect_TransmitClientEvent(m_hSimConnect, objectId, EventFreezeAtt, 1, SIMCONNECT_GROUP_PRIORITY_HIGHEST, SIMCONNECT_EVENT_FLAG_GROUPID_IS_PRIORITY), simObject, "EventFreezeAtt", Q_FUNC_INFO, "SimConnect_TransmitClientEvent"); return isOk(hr1, hr2, hr3, hr4); @@ -1590,9 +1590,9 @@ namespace BlackSimPlugin // http://www.prepar3d.com/SDKv2/LearningCenter/utilities/variables/event_ids.html hr += SimConnect_MapClientEventToSimEvent(m_hSimConnect, EventPauseToggle, "PAUSE_TOGGLE"); hr += SimConnect_MapClientEventToSimEvent(m_hSimConnect, SystemEventSlewToggle, "SLEW_TOGGLE"); - hr += SimConnect_MapClientEventToSimEvent(m_hSimConnect, EventFreezeLat, "FREEZE_LATITUDE_LONGITUDE_SET"); - hr += SimConnect_MapClientEventToSimEvent(m_hSimConnect, EventFreezeAlt, "FREEZE_ALTITUDE_SET"); - hr += SimConnect_MapClientEventToSimEvent(m_hSimConnect, EventFreezeAtt, "FREEZE_ATTITUDE_SET"); + hr += SimConnect_MapClientEventToSimEvent(m_hSimConnect, EventFreezeLatLng, "FREEZE_LATITUDE_LONGITUDE_SET"); // FSX old standard + hr += SimConnect_MapClientEventToSimEvent(m_hSimConnect, EventFreezeAlt, "FREEZE_ALTITUDE_SET"); // FSX old standard + hr += SimConnect_MapClientEventToSimEvent(m_hSimConnect, EventFreezeAtt, "FREEZE_ATTITUDE_SET"); // FSX old standard hr += SimConnect_MapClientEventToSimEvent(m_hSimConnect, EventSetCom1Active, "COM_RADIO_SET"); hr += SimConnect_MapClientEventToSimEvent(m_hSimConnect, EventSetCom1Standby, "COM_STBY_RADIO_SET"); hr += SimConnect_MapClientEventToSimEvent(m_hSimConnect, EventSetCom2Active, "COM2_RADIO_SET"); @@ -1709,7 +1709,7 @@ namespace BlackSimPlugin if (result.getInterpolationStatus().hasValidSituation()) { // update situation - if (!this->isEqualLastSent(result)) + if (!this->isEqualLastSent(result.getInterpolatedSituation())) { SIMCONNECT_DATA_INITPOSITION position = this->aircraftSituationToFsxPosition(result, sendGround); const HRESULT hr = this->logAndTraceSendId( @@ -2004,8 +2004,7 @@ namespace BlackSimPlugin const SIMCONNECT_DATA_REQUEST_ID reqId = static_cast(simObject.getRequestId(CSimConnectDefinitions::SimObjectPositionData)); const HRESULT result = this->logAndTraceSendId( SimConnect_RequestDataOnSimObject( - m_hSimConnect, reqId, - CSimConnectDefinitions::DataRemoteAircraftGetPosition, + m_hSimConnect, reqId, CSimConnectDefinitions::DataRemoteAircraftGetPosition, simObject.getObjectId(), period), simObject, "Cannot request simulator data", Q_FUNC_INFO, "SimConnect_RequestDataOnSimObject"); @@ -2058,8 +2057,7 @@ namespace BlackSimPlugin const SIMCONNECT_DATA_REQUEST_ID requestId = simObject.getRequestId(CSimConnectDefinitions::SimObjectModel); const HRESULT result = this->logAndTraceSendId( SimConnect_RequestDataOnSimObject( - m_hSimConnect, requestId, - CSimConnectDefinitions::DataRemoteAircraftModelData, + m_hSimConnect, requestId, CSimConnectDefinitions::DataRemoteAircraftModelData, simObject.getObjectId(), SIMCONNECT_PERIOD_ONCE), simObject, "Cannot request model info", Q_FUNC_INFO, "SimConnect_RequestDataOnSimObject"); return isOk(result); @@ -2074,16 +2072,14 @@ namespace BlackSimPlugin SIMCONNECT_DATA_REQUEST_ID requestId = simObject.getRequestId(CSimConnectDefinitions::SimObjectPositionData); const HRESULT hr1 = this->logAndTraceSendId( SimConnect_RequestDataOnSimObject( - m_hSimConnect, requestId, - CSimConnectDefinitions::DataRemoteAircraftGetPosition, + m_hSimConnect, requestId, CSimConnectDefinitions::DataRemoteAircraftGetPosition, simObject.getObjectId(), SIMCONNECT_PERIOD_NEVER), simObject, "Stopping position request", Q_FUNC_INFO, "SimConnect_RequestDataOnSimObject"); requestId = simObject.getRequestId(CSimConnectDefinitions::SimObjectLights); const HRESULT hr2 = this->logAndTraceSendId( SimConnect_RequestDataOnSimObject( - m_hSimConnect, requestId, - CSimConnectDefinitions::DataRemoteAircraftLights, + m_hSimConnect, requestId, CSimConnectDefinitions::DataRemoteAircraftLights, simObject.getObjectId(), SIMCONNECT_PERIOD_NEVER), simObject, "Stopping lights request", Q_FUNC_INFO, "SimConnect_RequestDataOnSimObject"); return isOk(hr1, hr2); diff --git a/src/plugins/simulator/fsxcommon/simulatorfsxcommon.h b/src/plugins/simulator/fsxcommon/simulatorfsxcommon.h index 7ccda1323..db0bae504 100644 --- a/src/plugins/simulator/fsxcommon/simulatorfsxcommon.h +++ b/src/plugins/simulator/fsxcommon/simulatorfsxcommon.h @@ -49,7 +49,7 @@ namespace BlackSimPlugin SystemEventPause, SystemEventFlightLoaded, EventPauseToggle, - EventFreezeLat, + EventFreezeLatLng, EventFreezeAlt, EventFreezeAtt, EventSetCom1Active, @@ -239,7 +239,8 @@ namespace BlackSimPlugin SIMCONNECT_DATA_REQUEST_ID obtainRequestIdForSimObjTerrainProbe(); //! Release AI control - bool releaseAIControl(const CSimConnectObject &simObject, SIMCONNECT_DATA_REQUEST_ID requestId); + //! \remark P3D version is overridden + virtual bool releaseAIControl(const CSimConnectObject &simObject, SIMCONNECT_DATA_REQUEST_ID requestId); //! Valid CSimConnectObject which is NOT pendig removed bool isValidSimObjectNotPendingRemoved(const CSimConnectObject &simObject) const; @@ -250,6 +251,15 @@ namespace BlackSimPlugin //! Remove the CSimConnectObject linked in the trace bool removeSimObjectForTrace(const TraceFsxSendId &trace); + //! Trace if required, log errors + HRESULT logAndTraceSendId(HRESULT hr, const QString &warningMsg, const QString &functionName, const QString &functionDetails = {}); + + //! Trace if required, log errors + HRESULT logAndTraceSendId(HRESULT hr, const CSimConnectObject &simObject, const QString &warningMsg, const QString &functionName, const QString &functionDetails = {}); + + //! Trace if required, log errors + HRESULT logAndTraceSendId(HRESULT hr, bool traceSendId, const CSimConnectObject &simObject, const QString &warningMsg, const QString &functionName, const QString &functionDetails = {}); + //! Register help static void registerHelp(); @@ -463,15 +473,6 @@ namespace BlackSimPlugin //! Trace the send id void traceSendId(const CSimConnectObject &simObject, const QString &functionName, const QString &details = {}, bool forceTrace = false); - //! Trace if required, log errors - HRESULT logAndTraceSendId(HRESULT hr, const QString &warningMsg, const QString &functionName, const QString &functionDetails = {}); - - //! Trace if required, log errors - HRESULT logAndTraceSendId(HRESULT hr, const CSimConnectObject &simObject, const QString &warningMsg, const QString &functionName, const QString &functionDetails = {}); - - //! Trace if required, log errors - HRESULT logAndTraceSendId(HRESULT hr, bool traceSendId, const CSimConnectObject &simObject, const QString &warningMsg, const QString &functionName, const QString &functionDetails = {}); - //! Send id trace or given send id TraceFsxSendId getSendIdTrace(DWORD sendId) const;