From dbe7bf69fb81a32b102969d5e2d5b1756b6063bd Mon Sep 17 00:00:00 2001 From: tzobler Date: Tue, 11 Nov 2025 16:16:18 +0100 Subject: [PATCH] refactor: Remove TerrainProbe from msfs2024 code --- src/core/airspacemonitor.cpp | 16 +- .../msfs2024/simconnectobjectmsfs2024.cpp | 59 +--- .../msfs2024/simconnectobjectmsfs2024.h | 10 - .../msfs2024/simulatormsfs2024common.cpp | 293 ++++-------------- .../msfs2024/simulatormsfs2024common.h | 66 +--- .../simulatormsfs2024simconnectproc.cpp | 36 --- 6 files changed, 91 insertions(+), 389 deletions(-) diff --git a/src/core/airspacemonitor.cpp b/src/core/airspacemonitor.cpp index 2251acecd..afc0af21e 100644 --- a/src/core/airspacemonitor.cpp +++ b/src/core/airspacemonitor.cpp @@ -549,6 +549,12 @@ namespace swift::core if (!this->isConnectedAndNotShuttingDown()) { return; } Q_ASSERT_X(!callsign.isEmpty(), Q_FUNC_INFO, "missing callsign"); + // TODO TZ remove when testing is done + CLogMessage(this).info(u"CAirspaceMonitor::sendReadyForModelMatching " + u"callsign %1 ") + << callsign; + // TODO remove + // set flag and init ts Readiness &readiness = this->addMatchingReadinessFlag(callsign, rf); @@ -769,12 +775,15 @@ namespace swift::core } } + // for request + // #SBBER750:DAL483:FSIPIR:0:BER:A320:::::L2J:PMDG 737-800 AIRBERLIN (D-ABKM) + // and also for information + // #SBFSC751 : BER636 : FSIPI : 0 ::EC35:: :: : H2T : AIRBUS H135 NORSK LUFTAMBULANSE void CAirspaceMonitor::onCustomFSInnPacketReceived(const CCallsign &callsign, const QString &airlineIcaoDesignator, const QString &aircraftIcaoDesignator, const QString &combinedAircraftType, const QString &modelString) { // TODO TZ remove when testing is done - // #SBBER750:DAL483:FSIPIR:0:BER:A320:::::L2J:PMDG 737-800 AIRBERLIN (D-ABKM) CLogMessage(this).info(u"CAirspaceMonitor::onCustomFSInnPacketReceived CHECK:" u"callsign %1 " u"airlineIcaoDesignator %2 " @@ -853,11 +862,11 @@ namespace swift::core } } + // #SBDAL483:BER636:PI:GEN:EQUIPMENT=B738:AIRLINE=DAL:LIVERY=swift_l1855a1787m13853 void CAirspaceMonitor::onIcaoCodesReceived(const CCallsign &callsign, const QString &aircraftIcaoDesignator, const QString &airlineIcaoDesignator, const QString &livery) { // TODO TZ remove logmessage when testing is done - // #SBDAL483:BER636:PI:GEN:EQUIPMENT=B738:AIRLINE=DAL:LIVERY=swift_l1855a1787m13853 CLogMessage(this).info(u"CAirspaceMonitor::onIcaoCodesReceived CHECK:" u"callsign %1 " u"aircraftIcaoDesignator %2 " @@ -888,6 +897,8 @@ namespace swift::core const CSimulatedAircraft aircraft = this->addOrUpdateAircraftInRange( callsign, aircraftIcaoDesignator, airlineIcaoDesignator, livery, client.getQueriedModelString(), CAircraftModel::TypeQueriedFromNetwork, pReverseLookupMessages); + + // we do not change manually assigned models if (aircraft.getModel().getModelType() != CAircraftModel::TypeManuallySet) { this->addReverseLookupMessages(callsign, reverseLookupMessages); @@ -1211,6 +1222,7 @@ namespace swift::core u"incomming modelType %4 ") << aircraft.getModelType() << callsign.toQString() << aircraftIcao << modelType; + // we do not change manually assigned models if (!aircraft.getModel().hasValidDbKey() && aircraft.getModelType() != CAircraftModel::TypeManuallySet) { diff --git a/src/plugins/simulator/msfs2024/simconnectobjectmsfs2024.cpp b/src/plugins/simulator/msfs2024/simconnectobjectmsfs2024.cpp index 1d2251fe5..77f20d06f 100644 --- a/src/plugins/simulator/msfs2024/simconnectobjectmsfs2024.cpp +++ b/src/plugins/simulator/msfs2024/simconnectobjectmsfs2024.cpp @@ -34,7 +34,7 @@ namespace swift::simplugin::msfs2024common setupProvider, remoteAircraftProvider, logger)) { this->resetCameraPositions(); - m_type = aircraft.isTerrainProbe() ? TerrainProbe : AircraftNonAtc; + m_type = AircraftNonAtc; m_interpolator->initCorrespondingModel(aircraft.getModel()); m_callsignByteArray = aircraft.getCallsignAsString().toLatin1(); } @@ -43,7 +43,7 @@ namespace swift::simplugin::msfs2024common { m_aircraft = aircraft; m_callsignByteArray = aircraft.getCallsignAsString().toLatin1(); - m_type = aircraft.isTerrainProbe() ? TerrainProbe : AircraftNonAtc; + m_type = AircraftNonAtc; } void CSimConnectObject::setAircraftModelString(const QString &modelString) @@ -78,7 +78,6 @@ namespace swift::simplugin::msfs2024common DWORD os = 0; switch (this->getType()) { - case TerrainProbe: os = static_cast(CSimulatorMsfs2024::offsetSimObjTerrainProbe(offset)); break; case AircraftNonAtc: case AircraftSimulatedObject: default: os = static_cast(CSimulatorMsfs2024::offsetSimObjAircraft(offset)); break; @@ -233,7 +232,6 @@ namespace swift::simplugin::msfs2024common CSimConnectObject::SimObjectType CSimConnectObject::requestIdToType(DWORD requestId) { - if (CSimulatorMsfs2024::isRequestForSimObjTerrainProbe(requestId)) { return TerrainProbe; } if (CSimulatorMsfs2024::isRequestForSimObjAircraft(requestId)) { return AircraftNonAtc; } Q_ASSERT_X(false, Q_FUNC_INFO, "Wrong range"); return AircraftNonAtc; @@ -243,13 +241,12 @@ namespace swift::simplugin::msfs2024common { static const QString a1("aircraft (non ATC)"); static const QString a2("aircraft (sim.object)"); - static const QString p("probe"); + // static const QString p("probe"); static const QString u("unknown"); switch (type) { case AircraftNonAtc: return a1; case AircraftSimulatedObject: return a2; - case TerrainProbe: return p; default: break; } return u; @@ -296,6 +293,7 @@ namespace swift::simplugin::msfs2024common return this->getSimObjectForObjectId(objectId).getCallsign(); } + // TODO TZ optimize? CCallsignSet CSimConnectObjects::getAllCallsigns(bool withoutProbes) const { if (this->isEmpty()) { return CCallsignSet(); } @@ -308,6 +306,7 @@ namespace swift::simplugin::msfs2024common return callsigns; } + // TODO TZ optimize? QStringList CSimConnectObjects::getAllCallsignStrings(bool sorted, bool withoutProbes) const { return this->getAllCallsigns(withoutProbes).getCallsignStrings(sorted); @@ -382,17 +381,17 @@ namespace swift::simplugin::msfs2024common return c > 0; } - int CSimConnectObjects::removeAllProbes() - { - const QList probes = this->getProbes(); - int c = 0; - for (const CSimConnectObject &probe : probes) - { - this->remove(probe.getCallsign()); - c++; - } - return c; - } + // int CSimConnectObjects::removeAllProbes() + //{ + // const QList probes = this->getProbes(); + // int c = 0; + // for (const CSimConnectObject &probe : probes) + // { + // this->remove(probe.getCallsign()); + // c++; + // } + // return c; + // } bool CSimConnectObjects::containsPendingAdded() const { @@ -479,32 +478,6 @@ namespace swift::simplugin::msfs2024common return l; } - CSimConnectObject CSimConnectObjects::getNotPendingProbe() const - { - for (const CSimConnectObject &simObject : *this) - { - if (simObject.getType() == CSimConnectObject::TerrainProbe && !simObject.isPending()) { return simObject; } - } - return CSimConnectObject(); - } - - CSimConnectObject CSimConnectObjects::getOldestNotPendingProbe() const - { - CSimConnectObject oldestProbe; - for (const CSimConnectObject &simObject : *this) - { - if (simObject.getType() == CSimConnectObject::TerrainProbe && !simObject.isPending()) - { - if (!oldestProbe.hasCreatedTimestamp() || - oldestProbe.getCreatedTimestamp() > simObject.getCreatedTimestamp()) - { - oldestProbe = simObject; - } - } - } - return oldestProbe; - } - bool CSimConnectObjects::containsType(CSimConnectObject::SimObjectType type) const { for (const CSimConnectObject &simObject : *this) diff --git a/src/plugins/simulator/msfs2024/simconnectobjectmsfs2024.h b/src/plugins/simulator/msfs2024/simconnectobjectmsfs2024.h index 6843c57e7..b94048c25 100644 --- a/src/plugins/simulator/msfs2024/simconnectobjectmsfs2024.h +++ b/src/plugins/simulator/msfs2024/simconnectobjectmsfs2024.h @@ -27,7 +27,6 @@ namespace swift::simplugin::msfs2024common { AircraftNonAtc, AircraftSimulatedObject, - TerrainProbe, AllTypes }; @@ -80,9 +79,6 @@ namespace swift::simplugin::msfs2024common //! Aircraft NON ATC? bool isAircraftNonAtc() const { return this->getType() == AircraftNonAtc; } - //! Probe? - bool isTerrainProbe() const { return this->getType() == TerrainProbe; } - //! Set the type void setType(SimObjectType type) { m_type = type; } @@ -424,9 +420,6 @@ namespace swift::simplugin::msfs2024common //! Get by type QList getByType(CSimConnectObject::SimObjectType type) const; - //! All probes - QList getProbes() const { return this->getByType(CSimConnectObject::TerrainProbe); } - //! All aircraft QList getAircraft() const; @@ -439,9 +432,6 @@ namespace swift::simplugin::msfs2024common //! Contains object of type bool containsType(CSimConnectObject::SimObjectType type) const; - //! Probe? - bool containsProbe() const { return this->containsType(CSimConnectObject::TerrainProbe); } - //! Aircraft? bool containsAircraft() const; }; diff --git a/src/plugins/simulator/msfs2024/simulatormsfs2024common.cpp b/src/plugins/simulator/msfs2024/simulatormsfs2024common.cpp index 055f24b3a..2a76dbc2e 100644 --- a/src/plugins/simulator/msfs2024/simulatormsfs2024common.cpp +++ b/src/plugins/simulator/msfs2024/simulatormsfs2024common.cpp @@ -343,34 +343,6 @@ namespace swift::simplugin::msfs2024common .arg(m_requestSimObjectDataCount); } - bool CSimulatorMsfs2024::requestElevation(const ICoordinateGeodetic &reference, const CCallsign &aircraftCallsign) - { - // this is the 32bit FSX version, the P3D x64 is overridden! - - if (this->isShuttingDownOrDisconnected()) { return false; } - if (!this->isUsingFsxTerrainProbe()) { return false; } - if (reference.isNull()) { return false; } - const CSimConnectObject simObject = m_simConnectObjects.getOldestNotPendingProbe(); // probes round robin - if (!simObject.isConfirmedAdded()) { return false; } - m_simConnectObjects[simObject.getCallsign()].resetTimestampToNow(); // mark probe as just used - - CCoordinateGeodetic pos(reference); - pos.setGeodeticHeight(terrainProbeAltitude()); - - SIMCONNECT_DATA_INITPOSITION position = this->coordinateToFsxPosition(pos); - const HRESULT hr = this->logAndTraceSendId( - SimConnect_SetDataOnSimObject(m_hSimConnect, CSimConnectDefinitions::DataRemoteAircraftSetPosition, - simObject.getObjectId(), 0, 0, sizeof(SIMCONNECT_DATA_INITPOSITION), - &position), - simObject, "Cannot request AI elevation", Q_FUNC_INFO, "SimConnect_SetDataOnSimObject"); - - if (isFailure(hr)) { return false; } - - const bool ok = this->requestTerrainProbeData(simObject, aircraftCallsign); - if (ok) { emit this->requestedElevation(aircraftCallsign); } - return ok; - } - void CSimulatorMsfs2024::CacheSimObjectAndLiveries(const SIMCONNECT_RECV_ENUMERATE_SIMOBJECT_AND_LIVERY_LIST *msg) { for (unsigned i = 0; i < msg->dwArraySize; ++i) @@ -722,10 +694,6 @@ namespace swift::simplugin::msfs2024common { DWORD v = static_cast(CSimConnectDefinitions::SimObjectEndMarker); if (isRequestForSimObjAircraft(requestId)) { v = (requestId - RequestSimObjAircraftStart) / MaxSimObjAircraft; } - else if (isRequestForSimObjTerrainProbe(requestId)) - { - v = (requestId - RequestSimObjTerrainProbeStart) / MaxSimObjProbes; - } Q_ASSERT_X(v <= CSimConnectDefinitions::SimObjectEndMarker, Q_FUNC_INFO, "Invalid value"); return static_cast(v); } @@ -849,13 +817,6 @@ namespace swift::simplugin::msfs2024common return id; } - SIMCONNECT_DATA_REQUEST_ID CSimulatorMsfs2024::obtainRequestIdForSimObjTerrainProbe() - { - const SIMCONNECT_DATA_REQUEST_ID id = m_requestIdSimObjTerrainProbe++; - if (id > RequestSimObjTerrainProbeEnd) { m_requestIdSimObjTerrainProbe = RequestSimObjTerrainProbeStart; } - return id; - } - bool CSimulatorMsfs2024::releaseAIControl(const CSimConnectObject &simObject, SIMCONNECT_DATA_REQUEST_ID requestId) { const SIMCONNECT_OBJECT_ID objectId = simObject.getObjectId(); @@ -1096,15 +1057,10 @@ namespace swift::simplugin::msfs2024common } else { --m_skipCockpitUpdateCycles; } + // TODO TZ check if we need to update terrain probes // slower updates if (m_ownAircraftUpdateCycles % 10 == 0) { - // init terrain probes here has the advantage we can also switch it on/off at runtime - if (m_useFsxTerrainProbe && !m_initFsxTerrainProbes) - { - this->physicallyInitAITerrainProbes(position, 2); // init probe - } - // SB3 offsets updating m_simulatorInternals.setValue(QStringLiteral("fsx/sb3"), boolToEnabledDisabled(m_useSbOffsets)); m_simulatorInternals.setValue(QStringLiteral("fsx/sb3packets"), m_useSbOffsets ? @@ -1297,11 +1253,6 @@ namespace swift::simplugin::msfs2024common void CSimulatorMsfs2024::verifyAddedRemoteAircraft(const CSimulatedAircraft &remoteAircraftIn) { if (this->isShuttingDownOrDisconnected()) { return; } - if (remoteAircraftIn.isTerrainProbe()) - { - this->verifyAddedTerrainProbe(remoteAircraftIn); - return; - } CStatusMessage msg; CSimulatedAircraft remoteAircraft = remoteAircraftIn; @@ -1524,36 +1475,6 @@ namespace swift::simplugin::msfs2024common return r; } - void CSimulatorMsfs2024::verifyAddedTerrainProbe(const CSimulatedAircraft &remoteAircraftIn) - { - bool verified = false; - CCallsign cs; - - // no simObject reference outside that block, because it will be deleted - { - CSimConnectObject &simObject = m_simConnectObjects[remoteAircraftIn.getCallsign()]; - simObject.setConfirmedAdded(true); // terrain probe - simObject.resetTimestampToNow(); - cs = simObject.getCallsign(); - CLogMessage(this).info(u"Probe: '%1' '%2' confirmed, %3") - << simObject.getCallsignAsString() << simObject.getAircraftModelString() << simObject.toQString(); - - // fails for probe - // SIMCONNECT_DATA_REQUEST_ID requestId = this->obtainRequestIdForSimObjTerrainProbe(); - // verified = this->releaseAIControl(simObject, requestId); // release probe - verified = true; - } - - if (!verified) // cppcheck-suppress knownConditionTrueFalse - { - CLogMessage(this).info(u"Disable probes: '%1' failed to relase control") << cs.asString(); - m_useFsxTerrainProbe = false; - } - - // trigger new adding from pending if any - if (!m_addPendingAircraft.isEmpty()) { this->addPendingAircraftAfterAdded(); } - } - void CSimulatorMsfs2024::timerBasedObjectAddOrRemove() { this->addPendingAircraft(AddByTimer); @@ -1576,10 +1497,6 @@ namespace swift::simplugin::msfs2024common { SWIFT_VERIFY_X(pendingSimObj.hasCallsign(), Q_FUNC_INFO, "missing callsign"); if (!pendingSimObj.hasCallsign()) { continue; } - if (pendingSimObj.isTerrainProbe() || aircraftCallsignsInRange.contains(pendingSimObj.getCallsign())) - { - toBeAddedAircraft.push_back(pendingSimObj.getAircraft()); - } else { toBeRemovedCallsigns.push_back(pendingSimObj.getCallsign()); } } @@ -1597,7 +1514,6 @@ namespace swift::simplugin::msfs2024common const QPointer myself(this); QTimer::singleShot(100, this, [=] { if (!myself) { return; } - if (this->isShuttingDownDisconnectedOrNoAircraft(nextPendingAircraft.isTerrainProbe())) { return; } this->physicallyAddRemoteAircraftImpl(nextPendingAircraft, mode, oldestSimObject); }); } @@ -1780,12 +1696,12 @@ namespace swift::simplugin::msfs2024common CSimpleCommandParser::registerCommand({ ".drv sblog on|off", "SB offsets logging on|off" }); } - CCallsign CSimulatorMsfs2024::getCallsignForPendingProbeRequests(DWORD requestId, bool remove) - { - const CCallsign cs = m_pendingProbeRequests.value(requestId); - if (remove) { m_pendingProbeRequests.remove(requestId); } - return cs; - } + // CCallsign CSimulatorMsfs2024::getCallsignForPendingProbeRequests(DWORD requestId, bool remove) + //{ + // const CCallsign cs = m_pendingProbeRequests.value(requestId); + // if (remove) { m_pendingProbeRequests.remove(requestId); } + // return cs; + // } const QString &CSimulatorMsfs2024::modeToString(CSimulatorMsfs2024::AircraftAddMode mode) { @@ -1870,7 +1786,6 @@ namespace swift::simplugin::msfs2024common const CSimConnectObject &correspondingSimObject) { const CCallsign callsign(newRemoteAircraft.getCallsign()); - const bool probe = newRemoteAircraft.isTerrainProbe(); // entry checks Q_ASSERT_X(CThreadUtils::isInThisThread(this), Q_FUNC_INFO, "thread"); @@ -1996,7 +1911,8 @@ namespace swift::simplugin::msfs2024common const CSimConnectObject removedPendingObj = this->removeFromAddPendingAndAddAgainAircraft(callsign); // create AI after crosschecking it - if (!probe && !this->isAircraftInRangeOrTestMode(callsign)) + // if (!probe && !this->isAircraftInRangeOrTestMode(callsign)) + if (!this->isAircraftInRangeOrTestMode(callsign)) { CLogMessage(this).info(u"Skipping adding of '%1' since it is no longer in range") << callsign.asString(); return false; @@ -2007,10 +1923,8 @@ namespace swift::simplugin::msfs2024common this->getInterpolationSetupConsolidated(callsign, true); const bool sendGround = setup.isSendingGndFlagToSimulator(); - // FSX/P3D adding bool adding = false; // will be added flag - const SIMCONNECT_DATA_REQUEST_ID requestId = - probe ? this->obtainRequestIdForSimObjTerrainProbe() : this->obtainRequestIdForSimObjAircraft(); + const SIMCONNECT_DATA_REQUEST_ID requestId = this->obtainRequestIdForSimObjAircraft(); // Initial situation, if possible from interpolation CAircraftSituation initialSituation = newRemoteAircraft.getSituation(); // default @@ -2045,43 +1959,31 @@ namespace swift::simplugin::msfs2024common const QByteArray modelStringBa = toFsxChar(modelString).trimmed(); const QByteArray modelLiveryBa = toFsxChar(modelLiveryString).trimmed(); - const QByteArray csBa = toFsxChar(callsign.toQString().left(12)); CSimConnectObject::SimObjectType type = CSimConnectObject::AircraftNonAtc; HRESULT hr = S_OK; - if (probe) + if (this->isAddingAsSimulatedObjectEnabled() && correspondingSimObject.hasCallsign() && + correspondingSimObject.getAddingExceptions() > 0 && + correspondingSimObject.getType() == CSimConnectObject::AircraftNonAtc) + { + CStatusMessage(this).warning( + u"Model '%1' for '%2' failed %1 time(s) before, using AICreateSimulatedObject now") + << newRemoteAircraft.getModelString() << callsign.toQString(); + + hr = SimConnect_AICreateNonATCAircraft_EX1(m_hSimConnect, modelStringBa.constData(), + modelLiveryBa.constData(), csBa.constData(), initialPosition, + requestId); + + type = CSimConnectObject::AircraftSimulatedObject; + } + else { hr = SimConnect_AICreateNonATCAircraft_EX1(m_hSimConnect, modelStringBa.constData(), modelLiveryBa.constData(), csBa.constData(), initialPosition, requestId); - type = CSimConnectObject::TerrainProbe; - } - else - { - if (this->isAddingAsSimulatedObjectEnabled() && correspondingSimObject.hasCallsign() && - correspondingSimObject.getAddingExceptions() > 0 && - correspondingSimObject.getType() == CSimConnectObject::AircraftNonAtc) - { - CStatusMessage(this).warning( - u"Model '%1' for '%2' failed %1 time(s) before, using AICreateSimulatedObject now") - << newRemoteAircraft.getModelString() << callsign.toQString(); - - hr = SimConnect_AICreateNonATCAircraft_EX1(m_hSimConnect, modelStringBa.constData(), - modelLiveryBa.constData(), csBa.constData(), initialPosition, - requestId); - - type = CSimConnectObject::AircraftSimulatedObject; - } - else - { - hr = SimConnect_AICreateNonATCAircraft_EX1(m_hSimConnect, modelStringBa.constData(), - modelLiveryBa.constData(), csBa.constData(), initialPosition, - requestId); - - type = CSimConnectObject::AircraftNonAtc; - } + type = CSimConnectObject::AircraftNonAtc; } if (!underflowStatus.isEmpty()) @@ -2110,52 +2012,6 @@ namespace swift::simplugin::msfs2024common return adding; } - bool CSimulatorMsfs2024::physicallyAddAITerrainProbe(const ICoordinateGeodetic &coordinate, int number) - { - if (coordinate.isNull()) { return false; } - if (!this->isUsingFsxTerrainProbe()) { return false; } - Q_ASSERT_X(CThreadUtils::isInThisThread(this), Q_FUNC_INFO, "thread"); - - // static const QString modelString("OrcaWhale"); - // static const QString modelString("Water Drop"); // not working on P3Dx86/FSX, no requests on that id - // possible static const QString modelString("A321ACA"); static const QString - // modelString("AI_Tracker_Object_0"); static const QString modelString("Piper Cub"); // P3Dv86 works as - // nonATC/SimulatedObject static const QString modelString("Discovery Spaceshuttle"); // P3Dx86 works as - // nonATC/SimulatedObject - static const QString modelString("swiftTerrainProbe0"); - static const QString pseudoCallsign("PROBE%1"); // max 12 chars - static const CCountry ctry("SW", "SWIFT"); - static const CAirlineIcaoCode swiftAirline("SWI", "swift probe", ctry, "SWIFT", false, false); - static const CLivery swiftLivery(CLivery::getStandardCode(swiftAirline), swiftAirline, "swift probe"); - - const CCallsign cs(pseudoCallsign.arg(number)); - const CAircraftModel model(modelString, CAircraftModel::TypeTerrainProbe, QStringLiteral("swift terrain probe"), - CAircraftIcaoCode::unassignedIcao(), swiftLivery); - CAircraftSituation situation(cs, coordinate); - situation.setAltitude(terrainProbeAltitude()); - situation.setZeroPBH(); - const CSimulatedAircraft pseudoAircraft(cs, model, CUser("123456", "swift", cs), situation); - return this->physicallyAddRemoteAircraftImpl(pseudoAircraft, ExternalCall); - } - - int CSimulatorMsfs2024::physicallyInitAITerrainProbes(const ICoordinateGeodetic &coordinate, int number) - { - if (number < 1) { return 0; } - if (m_initFsxTerrainProbes) { return m_addedProbes; } - m_initFsxTerrainProbes = true; // no multiple inits - this->triggerAutoTraceSendId(); - - int c = 0; - for (int n = 0; n < number; ++n) - { - if (this->physicallyAddAITerrainProbe(coordinate, n)) { c++; } - } - - CLogMessage(this).info(u"Adding %1 FSX terrain probes") << number; - m_addedProbes = c; - return c; - } - bool CSimulatorMsfs2024::physicallyRemoveRemoteAircraft(const CCallsign &callsign) { // only remove from sim @@ -2169,7 +2025,6 @@ namespace swift::simplugin::msfs2024common if (!m_simConnectObjects.contains(callsign)) { return false; } // already fully removed or not yet added CSimConnectObject &simObject = m_simConnectObjects[callsign]; if (simObject.isPendingRemoved()) { return true; } - if (simObject.isTerrainProbe()) { return false; } // check for pending objects m_addPendingAircraft.remove(callsign); // just in case still in list of pending aircraft @@ -2543,8 +2398,7 @@ namespace swift::simplugin::msfs2024common bool CSimulatorMsfs2024::sendRemoteAircraftAtcDataToSimulator(const CSimConnectObject &simObject) { if (!simObject.isReadyToSend()) { return false; } - if (simObject.isTerrainProbe()) { return false; } - // if (simObject.getType() != CSimConnectObject::AircraftNonAtc) { return false; } // otherwise errors + if (simObject.getType() != CSimConnectObject::AircraftNonAtc) { return false; } // otherwise errors const DWORD objectId = simObject.getObjectId(); const bool traceId = this->isTracingSendId(); @@ -2813,23 +2667,6 @@ namespace swift::simplugin::msfs2024common return false; } - bool CSimulatorMsfs2024::requestTerrainProbeData(const CSimConnectObject &simObject, - const CCallsign &aircraftCallsign) - { - static const QString w("Cannot request terrain probe data for id '%1'"); - const SIMCONNECT_DATA_REQUEST_ID requestId = - simObject.getRequestId(CSimConnectDefinitions::SimObjectPositionData); - const DWORD objectId = simObject.getObjectId(); - const HRESULT result = this->logAndTraceSendId( - SimConnect_RequestDataOnSimObject(m_hSimConnect, static_cast(requestId), - CSimConnectDefinitions::DataRemoteAircraftGetPosition, - static_cast(objectId), SIMCONNECT_PERIOD_ONCE), - simObject, w.arg(requestId), Q_FUNC_INFO, "SimConnect_RequestDataOnSimObject"); - const bool ok = isOk(result); - if (ok) { m_pendingProbeRequests.insert(requestId, aircraftCallsign); } - return ok; - } - bool CSimulatorMsfs2024::requestLightsForSimObject(const CSimConnectObject &simObject) { if (!this->isValidSimObjectNotPendingRemoved(simObject)) { return false; } @@ -2908,33 +2745,16 @@ namespace swift::simplugin::msfs2024common m_requestIdSimObjAircraft = static_cast(RequestSimObjAircraftStart); m_dispatchErrors = 0; m_receiveExceptionCount = 0; - m_addedProbes = 0; - m_initFsxTerrainProbes = false; m_sendIdTraces.clear(); } void CSimulatorMsfs2024::clearAllRemoteAircraftData() { - const bool reinitProbe = - m_useFsxTerrainProbe && m_initFsxTerrainProbes; // re-init if enabled and was initialized - this->removeAllProbes(); - // m_addAgainAircraftWhenRemoved cleared below CSimulatorFsCommon::clearAllRemoteAircraftData(); // also removes aircraft m_simConnectObjects.clear(); m_addPendingAircraft.clear(); m_simConnectObjectsPositionAndPartsTraces.clear(); - - if (reinitProbe) - { - // if we are still alive we re-init the probes - QPointer myself(this); - QTimer::singleShot(2000, this, [=] { - // Shutdown or unloaded - if (this->isShuttingDown() || !myself) { return; } - m_initFsxTerrainProbes = false; // probes will re-init - }); - } } void CSimulatorMsfs2024::onOwnModelChanged(const CAircraftModel &newModel) @@ -3033,29 +2853,30 @@ namespace swift::simplugin::msfs2024common return d.arg(trace.sendId).arg(simObject.getObjectId()).arg(simObject.toQString(), trace.comment); } - int CSimulatorMsfs2024::removeAllProbes() - { - if (!m_hSimConnect) { return 0; } // already disconnected - const QList probes = m_simConnectObjects.getProbes(); + // int CSimulatorMsfs2024::removeAllProbes() + //{ + // if (!m_hSimConnect) { return 0; } // already disconnected + // const QList probes = m_simConnectObjects.getProbes(); - int c = 0; - for (const CSimConnectObject &probeSimObject : probes) - { - if (!probeSimObject.isConfirmedAdded()) { continue; } - const SIMCONNECT_DATA_REQUEST_ID requestId = - probeSimObject.getRequestId(CSimConnectDefinitions::SimObjectRemove); - const HRESULT result = SimConnect_AIRemoveObject( - m_hSimConnect, static_cast(probeSimObject.getObjectId()), requestId); - if (isOk(result)) { c++; } - else - { - CLogMessage(this).warning(u"Removing probe '%1' from simulator failed") << probeSimObject.getObjectId(); - } - } - m_simConnectObjects.removeAllProbes(); - m_pendingProbeRequests.clear(); - return c; - } + // int c = 0; + // for (const CSimConnectObject &probeSimObject : probes) + // { + // if (!probeSimObject.isConfirmedAdded()) { continue; } + // const SIMCONNECT_DATA_REQUEST_ID requestId = + // probeSimObject.getRequestId(CSimConnectDefinitions::SimObjectRemove); + // const HRESULT result = SimConnect_AIRemoveObject( + // m_hSimConnect, static_cast(probeSimObject.getObjectId()), requestId); + // if (isOk(result)) { c++; } + // else + // { + // CLogMessage(this).warning(u"Removing probe '%1' from simulator failed") << + // probeSimObject.getObjectId(); + // } + // } + // m_simConnectObjects.removeAllProbes(); + // m_pendingProbeRequests.clear(); + // return c; + //} CSimConnectObject CSimulatorMsfs2024::insertNewSimConnectObject(const CSimulatedAircraft &aircraft, DWORD requestId, CSimConnectObject::SimObjectType type, @@ -3092,11 +2913,11 @@ namespace swift::simplugin::msfs2024common return simObject; } - const CAltitude &CSimulatorMsfs2024::terrainProbeAltitude() - { - static const CAltitude alt(50000, CLengthUnit::ft()); - return alt; - } + // const CAltitude &CSimulatorMsfs2024::terrainProbeAltitude() + //{ + // static const CAltitude alt(50000, CLengthUnit::ft()); + // return alt; + // } QString CSimulatorMsfs2024::fsxCharToQString(const char *fsxChar, int size) { @@ -3125,10 +2946,6 @@ namespace swift::simplugin::msfs2024common int end; switch (type) { - case CSimConnectObject::TerrainProbe: - start = RequestSimObjTerrainProbeStart; - end = RequestSimObjTerrainProbeEnd; - break; case CSimConnectObject::AircraftNonAtc: case CSimConnectObject::AircraftSimulatedObject: default: diff --git a/src/plugins/simulator/msfs2024/simulatormsfs2024common.h b/src/plugins/simulator/msfs2024/simulatormsfs2024common.h index fe4954968..760c62992 100644 --- a/src/plugins/simulator/msfs2024/simulatormsfs2024common.h +++ b/src/plugins/simulator/msfs2024/simulatormsfs2024common.h @@ -105,9 +105,6 @@ namespace swift::simplugin::msfs2024common CSimConnectObject simObject; //!< CSimConnectObject at the time of the trace QString comment; //!< where sent - //! For probe - bool isForProbe() const { return simObject.getType() == CSimConnectObject::TerrainProbe; } - //! For aircraft bool isForAircraft() const { return simObject.getType() == CSimConnectObject::AircraftNonAtc; } @@ -187,11 +184,11 @@ namespace swift::simplugin::msfs2024common const swift::misc::aviation::CAircraftParts &parts) override; //! @} - //! \copydoc swift::misc::simulation::ISimulationEnvironmentProvider::requestElevation - //! \remark x86 FSX version, x64 version is overridden - //! \sa CSimulatorFsxCommon::is - virtual bool requestElevation(const swift::misc::geo::ICoordinateGeodetic &reference, - const swift::misc::aviation::CCallsign &aircraftCallsign) override; + ////! \copydoc swift::misc::simulation::ISimulationEnvironmentProvider::requestElevation + ////! \remark x86 FSX version, x64 version is overridden + ////! \sa CSimulatorFsxCommon::is + // virtual bool requestElevation(const swift::misc::geo::ICoordinateGeodetic &reference, + // const swift::misc::aviation::CCallsign &aircraftCallsign) override; //! saves the SimObjects received from the simulator a structure void CacheSimObjectAndLiveries(const SIMCONNECT_RECV_ENUMERATE_SIMOBJECT_AND_LIVERY_LIST *msg); @@ -214,13 +211,6 @@ namespace swift::simplugin::msfs2024common //! Set tracing on/off void setTractingSendId(bool trace); - //! FSX Terrain probe - //! \remark must be off at P3D v4.2 drivers or later - bool isUsingFsxTerrainProbe() const { return m_useFsxTerrainProbe; } - - //! FSX terrain probe - void setUsingFsxTerrainProbe(bool use) { m_useFsxTerrainProbe = use; } - //! Using the SB offsets? bool isUsingSbOffsetValues() const { return m_useSbOffsets; } @@ -243,17 +233,8 @@ namespace swift::simplugin::msfs2024common return requestId >= RequestSimObjAircraftStart && requestId <= RequestSimObjAircraftRangeEnd; } - //! Request for probe (elevation)? - static bool isRequestForSimObjTerrainProbe(DWORD requestId) - { - return requestId >= RequestSimObjTerrainProbeStart && requestId <= RequestSimObjTerrainProbeRangeEnd; - } - //! Request for any CSimConnectObject? - static bool isRequestForSimConnectObject(DWORD requestId) - { - return isRequestForSimObjAircraft(requestId) || isRequestForSimObjTerrainProbe(requestId); - } + static bool isRequestForSimConnectObject(DWORD requestId) { return isRequestForSimObjAircraft(requestId); } //! Sub request type static CSimConnectDefinitions::SimObjectRequest requestToSimObjectRequest(DWORD requestId); @@ -309,9 +290,6 @@ namespace swift::simplugin::msfs2024common //! Get new request id, overflow safe SIMCONNECT_DATA_REQUEST_ID obtainRequestIdForSimObjAircraft(); - //! Get new request id, overflow safe - SIMCONNECT_DATA_REQUEST_ID obtainRequestIdForSimObjTerrainProbe(); - //! Release AI control //! \remark P3D version is overridden virtual bool releaseAIControl(const CSimConnectObject &simObject, SIMCONNECT_DATA_REQUEST_ID requestId); @@ -388,10 +366,6 @@ namespace swift::simplugin::msfs2024common //!< overriden by specialized P3D function CSimConnectObjects m_simConnectObjects; //!< AI objects and their object and request ids - // probes - bool m_useFsxTerrainProbe = is32bit(); //!< Use FSX Terrain probe? - bool m_initFsxTerrainProbes = false; //!< initialized terrain probes - int m_addedProbes = 0; //!< added probes QMap m_pendingProbeRequests; //!< pending elevation requests: requestId/aircraft callsign @@ -421,14 +395,6 @@ namespace swift::simplugin::msfs2024common AircraftAddMode addMode, const CSimConnectObject &correspondingSimObject = {}); - //! Add AI object for terrain probe - //! \remark experimental - bool physicallyAddAITerrainProbe(const swift::misc::geo::ICoordinateGeodetic &coordinate, int number); - - //! Add number probes (inits the probe objects) - //! \remark experimental - int physicallyInitAITerrainProbes(const swift::misc::geo::ICoordinateGeodetic &coordinate, int number); - //! Remove aircraft no longer in provider //! \remark kind of cleanup function, in an ideal scenario this should never need to cleanup something swift::misc::aviation::CCallsignSet physicallyRemoveAircraftNotInProvider(); @@ -450,9 +416,6 @@ namespace swift::simplugin::msfs2024common //! Logging version of verifyFailedAircraftInfo bool logVerifyFailedAircraftInfo(const CSimConnectObject &simObject) const; - //! Verify the probe - void verifyAddedTerrainProbe(const swift::misc::simulation::CSimulatedAircraft &remoteAircraftIn); - //! Add next aircraft based on timer void timerBasedObjectAddOrRemove(); @@ -586,10 +549,6 @@ namespace swift::simplugin::msfs2024common bool requestPositionDataForSimObject(const CSimConnectObject &simObject, SIMCONNECT_PERIOD period = SIMCONNECT_PERIOD_SECOND); - //! Request data for the terrain probe - bool requestTerrainProbeData(const CSimConnectObject &simObject, - const swift::misc::aviation::CCallsign &aircraftCallsign); - //! Request lights for a CSimConnectObject bool requestLightsForSimObject(const CSimConnectObject &simObject); @@ -655,13 +614,6 @@ namespace swift::simplugin::msfs2024common RequestSimObjAircraftStart - 1 + static_cast(CSimConnectDefinitions::SimObjectEndMarker) * MaxSimObjAircraft; - // -- range for probe data, each probe object will get its own request id and use the offset ranges - static constexpr int RequestSimObjTerrainProbeStart = RequestSimObjAircraftRangeEnd + 1; - static constexpr int RequestSimObjTerrainProbeEnd = RequestSimObjTerrainProbeStart - 1 + MaxSimObjProbes; - static constexpr int RequestSimObjTerrainProbeRangeEnd = - RequestSimObjTerrainProbeStart - 1 + - static_cast(CSimConnectDefinitions::SimObjectEndMarker) * MaxSimObjProbes; - // times static constexpr int AddPendingAircraftIntervalMs = 20 * 1000; static constexpr int DispatchIntervalMs = 10; //!< how often with run the FSX event queue @@ -713,8 +665,6 @@ namespace swift::simplugin::msfs2024common CSimConnectObjects m_addPendingAircraft; //!< aircraft/probes awaiting to be added; SIMCONNECT_DATA_REQUEST_ID m_requestIdSimObjAircraft = static_cast( RequestSimObjAircraftStart); //!< request id, use obtainRequestIdForSimObjAircraft to get id - SIMCONNECT_DATA_REQUEST_ID m_requestIdSimObjTerrainProbe = static_cast( - RequestSimObjTerrainProbeStart); //!< request id, use obtainRequestIdForSimObjTerrainProbe to get id QTimer m_simObjectTimer; //!< updating of SimObjects awaiting to be added // Last selected frequencies in simulator before setting 8.33 kHz spacing frequency @@ -754,10 +704,6 @@ namespace swift::simplugin::msfs2024common { return MaxSimObjAircraft * static_cast(req); } - static DWORD offsetSimObjTerrainProbe(CSimConnectDefinitions::SimObjectRequest req) - { - return MaxSimObjProbes * static_cast(req); - } //! @} }; diff --git a/src/plugins/simulator/msfs2024/simulatormsfs2024simconnectproc.cpp b/src/plugins/simulator/msfs2024/simulatormsfs2024simconnectproc.cpp index 39cd5e391..45e338812 100644 --- a/src/plugins/simulator/msfs2024/simulatormsfs2024simconnectproc.cpp +++ b/src/plugins/simulator/msfs2024/simulatormsfs2024simconnectproc.cpp @@ -113,11 +113,6 @@ namespace swift::simplugin::msfs2024common Q_UNUSED(removed); CLogMessage(simulatorMsfs2024).warning(u"Adding probe failed: %1 %2") << simObject.getCallsign().asString() << simObject.getAircraftModelString(); - if (simulatorMsfs2024->isUsingFsxTerrainProbe()) - { - CLogMessage(simulatorMsfs2024).warning(u"Disabling terrain probe"); - simulatorMsfs2024->setUsingFsxTerrainProbe(false); - } logGenericExceptionInfo = false; } // aircraft } // valid @@ -366,37 +361,6 @@ namespace swift::simplugin::msfs2024common } } } - else if (CSimulatorMsfs2024::isRequestForSimObjTerrainProbe(requestId)) - { - const CSimConnectObject probeObj = simulatorMsfs2024->getSimObjectForObjectId(objectId); - if (!probeObj.hasValidRequestAndObjectId()) { break; } - Q_ASSERT_X(probeObj.isTerrainProbe(), Q_FUNC_INFO, "No probe"); - const CSimConnectDefinitions::SimObjectRequest subRequest = - CSimulatorMsfs2024::requestToSimObjectRequest(requestId); - - if (subRequest == CSimConnectDefinitions::SimObjectPositionData) - { - static_assert(sizeof(DataDefinitionPosData) == 5 * sizeof(double), - "DataDefinitionRemoteAircraftSimData has an incorrect size."); - const DataDefinitionPosData *probeSimData = - reinterpret_cast(&pObjData->dwData); - // extra check, but ids should be the same - if (objectId == probeObj.getObjectId()) - { - const CCallsign cs = simulatorMsfs2024->m_pendingProbeRequests.value(requestId); - if (cs.isEmpty()) { break; } - simulatorMsfs2024->updateProbeFromSimulator(cs, *probeSimData); - } - } - else - { - if (CBuildConfig::isLocalDeveloperDebugBuild()) - { - CLogMessage(simulatorMsfs2024).error(u"Unknown subrequest (probe): '%1' %2") - << CSimConnectDefinitions::simObjectRequestToString(subRequest) << probeObj.toQString(); - } - } - } // probe } break; // default (SIMCONNECT_RECV_ID_SIMOBJECT_DATA) }