From bee032833e778789f338b6e77b3c669382650158 Mon Sep 17 00:00:00 2001 From: f4exb Date: Sat, 24 Oct 2020 13:05:28 +0200 Subject: [PATCH] AFC: process tracker frequency change only if its offset actually chages --- plugins/feature/afc/afcgui.cpp | 2 +- plugins/feature/afc/afcworker.cpp | 46 +++++++++++++++++-------------- plugins/feature/afc/afcworker.h | 2 +- 3 files changed, 28 insertions(+), 22 deletions(-) diff --git a/plugins/feature/afc/afcgui.cpp b/plugins/feature/afc/afcgui.cpp index fc4f3cf7b..97523323c 100644 --- a/plugins/feature/afc/afcgui.cpp +++ b/plugins/feature/afc/afcgui.cpp @@ -124,7 +124,7 @@ AFCGUI::AFCGUI(PluginAPI* pluginAPI, FeatureUISet *featureUISet, Feature *featur setAttribute(Qt::WA_DeleteOnClose, true); ui->targetFrequency->setColorMapper(ColorMapper(ColorMapper::GrayGold)); - ui->targetFrequency->setValueRange(11, 0, 99999999999L); + ui->targetFrequency->setValueRange(10, 0, 9999999999L); ui->toleranceFrequency->setColorMapper(ColorMapper(ColorMapper::GrayYellow)); ui->toleranceFrequency->setValueRange(5, 0, 99999L); diff --git a/plugins/feature/afc/afcworker.cpp b/plugins/feature/afc/afcworker.cpp index cec3f59e4..0cbf59436 100644 --- a/plugins/feature/afc/afcworker.cpp +++ b/plugins/feature/afc/afcworker.cpp @@ -115,7 +115,7 @@ bool AFCWorker::handleMessage(const Message& cmd) else if (MsgDeviceTrack::match(cmd)) { QMutexLocker mutexLocker(&m_mutex); - updateTarget(); + updateTarget(m_trackerChannelOffset); return true; } else if (MsgDevicesApply::match(cmd)) @@ -267,24 +267,30 @@ void AFCWorker::processChannelSettings( if (*swgChannelSettings->getChannelType() == "FreqTracker") { - m_trackerChannelOffset = swgChannelSettings->getFreqTrackerSettings()->getInputFrequencyOffset(); - QMap::iterator it = m_channelsMap.begin(); + int trackerChannelOffset = swgChannelSettings->getFreqTrackerSettings()->getInputFrequencyOffset(); - for (; it != m_channelsMap.end(); ++it) + if (trackerChannelOffset != m_trackerChannelOffset) { - if (mainCore->existsChannel(it.key())) - { - int channelOffset = it.value().m_channelOffset + m_trackerChannelOffset - it.value().m_trackerOffset; - updateChannelOffset(it.key(), it.value().m_channelDirection, channelOffset); - } - else - { - m_channelsMap.erase(it); - } - } + QMap::iterator it = m_channelsMap.begin(); - if (m_settings.m_hasTargetFrequency) { - updateTarget(); + for (; it != m_channelsMap.end(); ++it) + { + if (mainCore->existsChannel(it.key())) + { + int channelOffset = it.value().m_channelOffset + trackerChannelOffset - it.value().m_trackerOffset; + updateChannelOffset(it.key(), it.value().m_channelDirection, channelOffset); + } + else + { + m_channelsMap.erase(it); + } + } + + if (m_settings.m_hasTargetFrequency) { + updateTarget(trackerChannelOffset); + } + + m_trackerChannelOffset = trackerChannelOffset; } } else if (m_channelsMap.contains(const_cast(channelAPI))) @@ -340,7 +346,7 @@ bool AFCWorker::updateChannelOffset(ChannelAPI *channelAPI, int direction, int o return true; } -void AFCWorker::updateTarget() +void AFCWorker::updateTarget(int& trackerChannelOffset) { SWGSDRangel::SWGDeviceSettings resDevice; SWGSDRangel::SWGChannelSettings resChannel; @@ -370,7 +376,7 @@ void AFCWorker::updateTarget() return; } - int64_t trackerFrequency = m_trackerDeviceFrequency + m_trackerChannelOffset; + int64_t trackerFrequency = m_trackerDeviceFrequency + trackerChannelOffset; int64_t correction = m_settings.m_targetFrequency - trackerFrequency; int64_t tolerance = m_settings.m_freqTolerance; qDebug() << "AFCWorker::updateTarget: correction:" << correction << "tolerance:" << tolerance; @@ -397,8 +403,8 @@ void AFCWorker::updateTarget() } // adjust tracker offset - if (updateChannelOffset(m_freqTracker, 0, m_trackerChannelOffset + correction, 1)) { - m_trackerChannelOffset += correction; + if (updateChannelOffset(m_freqTracker, 0, trackerChannelOffset + correction, 1)) { + trackerChannelOffset += correction; } } else // act on device diff --git a/plugins/feature/afc/afcworker.h b/plugins/feature/afc/afcworker.h index 3035f11aa..5c31acf0e 100644 --- a/plugins/feature/afc/afcworker.h +++ b/plugins/feature/afc/afcworker.h @@ -163,7 +163,7 @@ private: SWGSDRangel::SWGChannelSettings *swgChannelSettings ); bool updateChannelOffset(ChannelAPI *channelAPI, int direction, int offset, unsigned int blockCount = 0); - void updateTarget(); + void updateTarget(int& trackerChannelOffset); bool updateDeviceFrequency(DeviceSet *deviceSet, const QString& key, int64_t frequency); int getDeviceDirection(DeviceAPI *deviceAPI); void getDeviceSettingsKey(DeviceAPI *deviceAPI, QString& settingsKey);