From 2a46208d37b061961604696d90e3fcb274b894c1 Mon Sep 17 00:00:00 2001 From: f4exb Date: Sun, 1 Feb 2026 00:49:36 +0100 Subject: [PATCH] Apply atomic settings to channel Rx plugins part 2. Part of #1329 --- .../radioastronomy/radioastronomy.cpp | 61 +++-- .../channelrx/radioastronomy/radioastronomy.h | 15 +- .../radioastronomy/radioastronomybaseband.cpp | 16 +- .../radioastronomy/radioastronomybaseband.h | 11 +- .../radioastronomy/radioastronomygui.cpp | 219 +++++++++--------- .../radioastronomy/radioastronomygui.h | 2 +- .../radioastronomy/radioastronomysink.cpp | 30 ++- .../radioastronomy/radioastronomysink.h | 2 +- .../radioastronomy/radioastronomyworker.h | 9 +- plugins/channelrx/radioclock/radioclock.cpp | 82 +++---- plugins/channelrx/radioclock/radioclock.h | 15 +- .../radioclock/radioclockbaseband.cpp | 14 +- .../channelrx/radioclock/radioclockbaseband.h | 11 +- .../channelrx/radioclock/radioclockgui.cpp | 31 +-- plugins/channelrx/radioclock/radioclockgui.h | 2 +- .../channelrx/radioclock/radioclocksink.cpp | 24 +- plugins/channelrx/radioclock/radioclocksink.h | 2 +- plugins/channelrx/remotesink/remotesink.cpp | 57 +++-- plugins/channelrx/remotesink/remotesink.h | 11 +- .../remotesink/remotesinkbaseband.cpp | 22 +- .../channelrx/remotesink/remotesinkbaseband.h | 11 +- .../channelrx/remotesink/remotesinkgui.cpp | 28 +-- plugins/channelrx/remotesink/remotesinkgui.h | 2 +- .../channelrx/remotesink/remotesinksink.cpp | 27 ++- plugins/channelrx/remotesink/remotesinksink.h | 2 +- .../channelrx/sigmffilesink/sigmffilesink.cpp | 91 +++----- .../channelrx/sigmffilesink/sigmffilesink.h | 17 +- .../sigmffilesink/sigmffilesinkbaseband.cpp | 28 +-- .../sigmffilesink/sigmffilesinkbaseband.h | 11 +- .../sigmffilesink/sigmffilesinkgui.cpp | 49 ++-- .../sigmffilesink/sigmffilesinkgui.h | 2 +- .../sigmffilesink/sigmffilesinksink.cpp | 20 +- .../sigmffilesink/sigmffilesinksink.h | 2 +- plugins/channelrx/udpsink/udpsink.cpp | 122 ++-------- plugins/channelrx/udpsink/udpsink.h | 17 +- plugins/channelrx/udpsink/udpsinkbaseband.cpp | 19 +- plugins/channelrx/udpsink/udpsinkbaseband.h | 11 +- plugins/channelrx/udpsink/udpsinkgui.cpp | 53 +++-- plugins/channelrx/udpsink/udpsinkgui.h | 4 +- plugins/channelrx/udpsink/udpsinksink.cpp | 55 ++--- plugins/channelrx/udpsink/udpsinksink.h | 2 +- plugins/channelrx/wdsprx/wdsprx.cpp | 74 +++--- plugins/channelrx/wdsprx/wdsprx.h | 11 +- plugins/channelrx/wdsprx/wdsprxbaseband.cpp | 18 +- plugins/channelrx/wdsprx/wdsprxbaseband.h | 11 +- plugins/channelrx/wdsprx/wdsprxgui.cpp | 123 +++++----- plugins/channelrx/wdsprx/wdsprxgui.h | 2 +- plugins/channelrx/wdsprx/wdsprxsink.cpp | 150 +++++------- plugins/channelrx/wdsprx/wdsprxsink.h | 2 +- sdrbase/util/stringlist.cpp | 4 +- 50 files changed, 738 insertions(+), 866 deletions(-) diff --git a/plugins/channelrx/radioastronomy/radioastronomy.cpp b/plugins/channelrx/radioastronomy/radioastronomy.cpp index b05d84270..3aeec05e5 100644 --- a/plugins/channelrx/radioastronomy/radioastronomy.cpp +++ b/plugins/channelrx/radioastronomy/radioastronomy.cpp @@ -82,7 +82,7 @@ RadioAstronomy::RadioAstronomy(DeviceAPI *deviceAPI) : m_worker->setMessageQueueToChannel(getInputMessageQueue()); m_worker->moveToThread(&m_workerThread); - applySettings(m_settings, true); + applySettings(QStringList(), m_settings, true); m_deviceAPI->addChannelSink(this); m_deviceAPI->addChannelSinkAPI(this); @@ -200,8 +200,8 @@ void RadioAstronomy::start() m_workerThread.start(); m_basebandSink->getInputMessageQueue()->push(new DSPSignalNotification(m_basebandSampleRate, m_centerFrequency)); - m_basebandSink->getInputMessageQueue()->push(RadioAstronomyBaseband::MsgConfigureRadioAstronomyBaseband::create(m_settings, true)); - m_worker->getInputMessageQueue()->push(RadioAstronomyWorker::MsgConfigureRadioAstronomyWorker::create(m_settings, true)); + m_basebandSink->getInputMessageQueue()->push(RadioAstronomyBaseband::MsgConfigureRadioAstronomyBaseband::create(QStringList(), m_settings, true)); + m_worker->getInputMessageQueue()->push(RadioAstronomyWorker::MsgConfigureRadioAstronomyWorker::create(QStringList(), m_settings, true)); } void RadioAstronomy::stop() @@ -219,11 +219,11 @@ void RadioAstronomy::setCenterFrequency(qint64 frequency) { RadioAstronomySettings settings = m_settings; settings.m_inputFrequencyOffset = frequency; - applySettings(settings, false); + applySettings(QStringList("inputFrequencyOffset"), settings, false); if (m_guiMessageQueue) // forward to GUI if any { - MsgConfigureRadioAstronomy *msgToGUI = MsgConfigureRadioAstronomy::create(settings, false); + MsgConfigureRadioAstronomy *msgToGUI = MsgConfigureRadioAstronomy::create(QStringList("inputFrequencyOffset"), settings, false); m_guiMessageQueue->push(msgToGUI); } } @@ -234,7 +234,7 @@ bool RadioAstronomy::handleMessage(const Message& cmd) { MsgConfigureRadioAstronomy& cfg = (MsgConfigureRadioAstronomy&) cmd; qDebug() << "RadioAstronomy::handleMessage: MsgConfigureRadioAstronomy"; - applySettings(cfg.getSettings(), cfg.getForce()); + applySettings(cfg.getSettingsKeys(), cfg.getSettings(), cfg.getForce()); return true; } @@ -683,16 +683,9 @@ void RadioAstronomy::sweepComplete() } } -void RadioAstronomy::applySettings(const RadioAstronomySettings& settings, bool force) +void RadioAstronomy::applySettings(const QStringList& settingsKeys, const RadioAstronomySettings& settings, bool force) { - qDebug() << "RadioAstronomy::applySettings:" - << " m_streamIndex: " << settings.m_streamIndex - << " m_useReverseAPI: " << settings.m_useReverseAPI - << " m_reverseAPIAddress: " << settings.m_reverseAPIAddress - << " m_reverseAPIPort: " << settings.m_reverseAPIPort - << " m_reverseAPIDeviceIndex: " << settings.m_reverseAPIDeviceIndex - << " m_reverseAPIChannelIndex: " << settings.m_reverseAPIChannelIndex - << " force: " << force; + qDebug() << "RadioAstronomy::applySettings:" << settings.getDebugString(settingsKeys, force); QList reverseAPIKeys; @@ -762,7 +755,7 @@ void RadioAstronomy::applySettings(const RadioAstronomySettings& settings, bool reverseAPIKeys.append("sweep2Delay"); } - if ((m_settings.m_starTracker != settings.m_starTracker) + if ((settingsKeys.contains("starTracker") && (m_settings.m_starTracker != settings.m_starTracker)) || (!settings.m_starTracker.isEmpty() && (m_selectedPipe == nullptr)) // Change in available pipes || force) { @@ -783,7 +776,7 @@ void RadioAstronomy::applySettings(const RadioAstronomySettings& settings, bool reverseAPIKeys.append("starTracker"); } - if (m_settings.m_streamIndex != settings.m_streamIndex) + if (settingsKeys.contains("streamIndex") && (m_settings.m_streamIndex != settings.m_streamIndex)) { if (m_deviceAPI->getSampleMIMO()) // change of stream is possible for MIMO devices only { @@ -798,21 +791,25 @@ void RadioAstronomy::applySettings(const RadioAstronomySettings& settings, bool reverseAPIKeys.append("streamIndex"); } - m_basebandSink->getInputMessageQueue()->push(RadioAstronomyBaseband::MsgConfigureRadioAstronomyBaseband::create(settings, force)); + m_basebandSink->getInputMessageQueue()->push(RadioAstronomyBaseband::MsgConfigureRadioAstronomyBaseband::create(settingsKeys, settings, force)); - m_worker->getInputMessageQueue()->push(RadioAstronomyWorker::MsgConfigureRadioAstronomyWorker::create(settings, force)); + m_worker->getInputMessageQueue()->push(RadioAstronomyWorker::MsgConfigureRadioAstronomyWorker::create(settingsKeys, settings, force)); - if (settings.m_useReverseAPI) + if (settingsKeys.contains("useReverseAPI") && settings.m_useReverseAPI) { - bool fullUpdate = ((m_settings.m_useReverseAPI != settings.m_useReverseAPI) && settings.m_useReverseAPI) || - (m_settings.m_reverseAPIAddress != settings.m_reverseAPIAddress) || - (m_settings.m_reverseAPIPort != settings.m_reverseAPIPort) || - (m_settings.m_reverseAPIDeviceIndex != settings.m_reverseAPIDeviceIndex) || - (m_settings.m_reverseAPIChannelIndex != settings.m_reverseAPIChannelIndex); + bool fullUpdate = ((settingsKeys.contains("useReverseAPI") && (m_settings.m_useReverseAPI != settings.m_useReverseAPI)) && settings.m_useReverseAPI) || + (settingsKeys.contains("reverseAPIAddress") && (m_settings.m_reverseAPIAddress != settings.m_reverseAPIAddress)) || + (settingsKeys.contains("reverseAPIPort") && (m_settings.m_reverseAPIPort != settings.m_reverseAPIPort)) || + (settingsKeys.contains("reverseAPIDeviceIndex") && (m_settings.m_reverseAPIDeviceIndex != settings.m_reverseAPIDeviceIndex)) || + (settingsKeys.contains("reverseAPIChannelIndex") && (m_settings.m_reverseAPIChannelIndex != settings.m_reverseAPIChannelIndex)); webapiReverseSendSettings(reverseAPIKeys, settings, fullUpdate || force); } - m_settings = settings; + if (force) { + m_settings = settings; + } else { + m_settings.applySettings(settingsKeys, settings); + } } QByteArray RadioAstronomy::serialize() const @@ -824,14 +821,14 @@ bool RadioAstronomy::deserialize(const QByteArray& data) { if (m_settings.deserialize(data)) { - MsgConfigureRadioAstronomy *msg = MsgConfigureRadioAstronomy::create(m_settings, true); + MsgConfigureRadioAstronomy *msg = MsgConfigureRadioAstronomy::create(QStringList(), m_settings, true); m_inputMessageQueue.push(msg); return true; } else { m_settings.resetToDefaults(); - MsgConfigureRadioAstronomy *msg = MsgConfigureRadioAstronomy::create(m_settings, true); + MsgConfigureRadioAstronomy *msg = MsgConfigureRadioAstronomy::create(QStringList(), m_settings, true); m_inputMessageQueue.push(msg); return false; } @@ -867,13 +864,13 @@ int RadioAstronomy::webapiSettingsPutPatch( RadioAstronomySettings settings = m_settings; webapiUpdateChannelSettings(settings, channelSettingsKeys, response); - MsgConfigureRadioAstronomy *msg = MsgConfigureRadioAstronomy::create(settings, force); + MsgConfigureRadioAstronomy *msg = MsgConfigureRadioAstronomy::create(channelSettingsKeys, settings, force); m_inputMessageQueue.push(msg); qDebug("RadioAstronomy::webapiSettingsPutPatch: forward to GUI: %p", m_guiMessageQueue); if (m_guiMessageQueue) // forward to GUI if any { - MsgConfigureRadioAstronomy *msgToGUI = MsgConfigureRadioAstronomy::create(settings, force); + MsgConfigureRadioAstronomy *msgToGUI = MsgConfigureRadioAstronomy::create(channelSettingsKeys, settings, force); m_guiMessageQueue->push(msgToGUI); } @@ -1087,7 +1084,7 @@ void RadioAstronomy::webapiFormatChannelSettings(SWGSDRangel::SWGChannelSettings } } -void RadioAstronomy::webapiReverseSendSettings(QList& channelSettingsKeys, const RadioAstronomySettings& settings, bool force) +void RadioAstronomy::webapiReverseSendSettings(const QList& channelSettingsKeys, const RadioAstronomySettings& settings, bool force) { SWGSDRangel::SWGChannelSettings *swgChannelSettings = new SWGSDRangel::SWGChannelSettings(); webapiFormatChannelSettings(channelSettingsKeys, swgChannelSettings, settings, force); @@ -1113,7 +1110,7 @@ void RadioAstronomy::webapiReverseSendSettings(QList& channelSettingsKe } void RadioAstronomy::webapiFormatChannelSettings( - QList& channelSettingsKeys, + const QList& channelSettingsKeys, SWGSDRangel::SWGChannelSettings *swgChannelSettings, const RadioAstronomySettings& settings, bool force diff --git a/plugins/channelrx/radioastronomy/radioastronomy.h b/plugins/channelrx/radioastronomy/radioastronomy.h index db3948ba8..ea2af8dc5 100644 --- a/plugins/channelrx/radioastronomy/radioastronomy.h +++ b/plugins/channelrx/radioastronomy/radioastronomy.h @@ -50,20 +50,23 @@ public: public: const RadioAstronomySettings& getSettings() const { return m_settings; } + const QStringList& getSettingsKeys() const { return m_settingsKeys; } bool getForce() const { return m_force; } - static MsgConfigureRadioAstronomy* create(const RadioAstronomySettings& settings, bool force) + static MsgConfigureRadioAstronomy* create(const QStringList& settingsKeys, const RadioAstronomySettings& settings, bool force) { - return new MsgConfigureRadioAstronomy(settings, force); + return new MsgConfigureRadioAstronomy(settingsKeys, settings, force); } private: RadioAstronomySettings m_settings; + QStringList m_settingsKeys; bool m_force; - MsgConfigureRadioAstronomy(const RadioAstronomySettings& settings, bool force) : + MsgConfigureRadioAstronomy(const QStringList& settingsKeys, const RadioAstronomySettings& settings, bool force) : Message(), m_settings(settings), + m_settingsKeys(settingsKeys), m_force(force) { } }; @@ -482,10 +485,10 @@ private: QMetaObject::Connection m_sweepTimerConnection; virtual bool handleMessage(const Message& cmd); - void applySettings(const RadioAstronomySettings& settings, bool force = false); - void webapiReverseSendSettings(QList& channelSettingsKeys, const RadioAstronomySettings& settings, bool force); + void applySettings(const QStringList& settingsKeys, const RadioAstronomySettings& settings, bool force = false); + void webapiReverseSendSettings(const QList& channelSettingsKeys, const RadioAstronomySettings& settings, bool force); void webapiFormatChannelSettings( - QList& channelSettingsKeys, + const QList& channelSettingsKeys, SWGSDRangel::SWGChannelSettings *swgChannelSettings, const RadioAstronomySettings& settings, bool force diff --git a/plugins/channelrx/radioastronomy/radioastronomybaseband.cpp b/plugins/channelrx/radioastronomy/radioastronomybaseband.cpp index 286bdc0ed..9e1905a63 100644 --- a/plugins/channelrx/radioastronomy/radioastronomybaseband.cpp +++ b/plugins/channelrx/radioastronomy/radioastronomybaseband.cpp @@ -134,7 +134,7 @@ bool RadioAstronomyBaseband::handleMessage(const Message& cmd) MsgConfigureRadioAstronomyBaseband& cfg = (MsgConfigureRadioAstronomyBaseband&) cmd; qDebug() << "RadioAstronomyBaseband::handleMessage: MsgConfigureRadioAstronomyBaseband"; - applySettings(cfg.getSettings(), cfg.getForce()); + applySettings(cfg.getSettingsKeys(), cfg.getSettings(), cfg.getForce()); return true; } @@ -173,19 +173,23 @@ bool RadioAstronomyBaseband::handleMessage(const Message& cmd) } } -void RadioAstronomyBaseband::applySettings(const RadioAstronomySettings& settings, bool force) +void RadioAstronomyBaseband::applySettings(const QStringList& settingsKeys, const RadioAstronomySettings& settings, bool force) { - if ((settings.m_inputFrequencyOffset != m_settings.m_inputFrequencyOffset) - || (settings.m_sampleRate != m_settings.m_sampleRate) + if ((settingsKeys.contains("inputFrequencyOffset") && (settings.m_inputFrequencyOffset != m_settings.m_inputFrequencyOffset)) + || (settingsKeys.contains("sampleRate") && (settings.m_sampleRate != m_settings.m_sampleRate)) || force) { m_channelizer->setChannelization(settings.m_sampleRate, settings.m_inputFrequencyOffset); m_sink.applyChannelSettings(m_channelizer->getChannelSampleRate(), m_channelizer->getChannelFrequencyOffset()); } - m_sink.applySettings(settings, force); + m_sink.applySettings(settingsKeys, settings, force); - m_settings = settings; + if (force) { + m_settings = settings; + } else { + m_settings.applySettings(settingsKeys, settings); + } } void RadioAstronomyBaseband::setBasebandSampleRate(int sampleRate) diff --git a/plugins/channelrx/radioastronomy/radioastronomybaseband.h b/plugins/channelrx/radioastronomy/radioastronomybaseband.h index 50967cafa..22be38336 100644 --- a/plugins/channelrx/radioastronomy/radioastronomybaseband.h +++ b/plugins/channelrx/radioastronomy/radioastronomybaseband.h @@ -41,20 +41,23 @@ public: public: const RadioAstronomySettings& getSettings() const { return m_settings; } + const QStringList& getSettingsKeys() const { return m_settingsKeys; } bool getForce() const { return m_force; } - static MsgConfigureRadioAstronomyBaseband* create(const RadioAstronomySettings& settings, bool force) + static MsgConfigureRadioAstronomyBaseband* create(const QStringList& settingsKeys, const RadioAstronomySettings& settings, bool force) { - return new MsgConfigureRadioAstronomyBaseband(settings, force); + return new MsgConfigureRadioAstronomyBaseband(settingsKeys, settings, force); } private: RadioAstronomySettings m_settings; + QStringList m_settingsKeys; bool m_force; - MsgConfigureRadioAstronomyBaseband(const RadioAstronomySettings& settings, bool force) : + MsgConfigureRadioAstronomyBaseband(const QStringList& settingsKeys, const RadioAstronomySettings& settings, bool force) : Message(), m_settings(settings), + m_settingsKeys(settingsKeys), m_force(force) { } }; @@ -87,7 +90,7 @@ private: bool handleMessage(const Message& cmd); void calculateOffset(RadioAstronomySink *sink); - void applySettings(const RadioAstronomySettings& settings, bool force = false); + void applySettings(const QStringList& settingsKeys, const RadioAstronomySettings& settings, bool force = false); private slots: void handleInputMessages(); diff --git a/plugins/channelrx/radioastronomy/radioastronomygui.cpp b/plugins/channelrx/radioastronomy/radioastronomygui.cpp index 28356cf8a..5c80f0d01 100644 --- a/plugins/channelrx/radioastronomy/radioastronomygui.cpp +++ b/plugins/channelrx/radioastronomy/radioastronomygui.cpp @@ -743,7 +743,7 @@ void RadioAstronomyGUI::on_powerAutoscale_toggled(bool checked) ui->powerStartTime->setEnabled(!m_settings.m_powerAutoscale); ui->powerEndTime->setEnabled(!m_settings.m_powerAutoscale); powerAutoscale(); - applySettings(); + applySettings(QStringList("powerAutoscale")); } void RadioAstronomyGUI::powerAutoscaleY(bool adjustAxis) @@ -800,7 +800,7 @@ void RadioAstronomyGUI::on_powerReference_valueChanged(double value) if (m_powerYAxis) { m_powerYAxis->setRange(m_settings.m_powerReference - m_settings.m_powerRange, m_settings.m_powerReference); } - applySettings(); + applySettings(QStringList("powerReference")); } void RadioAstronomyGUI::on_powerRange_valueChanged(double value) @@ -821,7 +821,7 @@ void RadioAstronomyGUI::on_powerRange_valueChanged(double value) if (m_powerYAxis) { m_powerYAxis->setRange(m_settings.m_powerReference - m_settings.m_powerRange, m_settings.m_powerReference); } - applySettings(); + applySettings(QStringList("powerRange")); } void RadioAstronomyGUI::on_powerStartTime_dateTimeChanged(QDateTime value) @@ -899,7 +899,7 @@ void RadioAstronomyGUI::resetToDefaults() { m_settings.resetToDefaults(); displaySettings(); - applySettings(true); + applySettings(QStringList(), true); } QByteArray RadioAstronomyGUI::serialize() const @@ -911,7 +911,7 @@ bool RadioAstronomyGUI::deserialize(const QByteArray& data) { if(m_settings.deserialize(data)) { displaySettings(); - applySettings(true); + applySettings(QStringList(), true); return true; } else { resetToDefaults(); @@ -925,7 +925,7 @@ void RadioAstronomyGUI::updateAvailableFeatures(const AvailableChannelOrFeatureL if (renameFrom.contains(m_settings.m_starTracker)) { m_settings.m_starTracker = renameTo[renameFrom.indexOf(m_settings.m_starTracker)]; - applySettings(); + applySettings(QStringList("starTracker")); } ui->starTracker->blockSignals(true); @@ -948,7 +948,7 @@ void RadioAstronomyGUI::updateAvailableFeatures(const AvailableChannelOrFeatureL if (m_settings.m_starTracker != newText) { m_settings.m_starTracker = newText; - applySettings(); + applySettings(QStringList("starTracker")); } } @@ -1091,7 +1091,7 @@ void RadioAstronomyGUI::channelMarkerChangedByCursor() { ui->deltaFrequency->setValue(m_channelMarker.getCenterFrequency()); m_settings.m_inputFrequencyOffset = m_channelMarker.getCenterFrequency(); - applySettings(); + applySettings(QStringList("inputFrequencyOffset")); } void RadioAstronomyGUI::channelMarkerHighlightedByCursor() @@ -1191,7 +1191,7 @@ void RadioAstronomyGUI::on_deltaFrequency_changed(qint64 value) m_channelMarker.setCenterFrequency(value); m_settings.m_inputFrequencyOffset = m_channelMarker.getCenterFrequency(); updateAbsoluteCenterFrequency(); - applySettings(); + applySettings(QStringList("inputFrequencyOffset")); } void RadioAstronomyGUI::on_sampleRate_changed(qint64 value) @@ -1200,7 +1200,7 @@ void RadioAstronomyGUI::on_sampleRate_changed(qint64 value) m_settings.m_sampleRate = sr; updateBWLimits(); updateIntegrationTime(); - applySettings(); + applySettings(QStringList("sampleRate")); } void RadioAstronomyGUI::on_rfBW_changed(qint64 value) @@ -1208,20 +1208,20 @@ void RadioAstronomyGUI::on_rfBW_changed(qint64 value) float bw = value; m_channelMarker.setBandwidth(bw); m_settings.m_rfBandwidth = bw; - applySettings(); + applySettings(QStringList("rfBandwidth")); } void RadioAstronomyGUI::on_integration_changed(qint64 value) { m_settings.m_integration = value; updateIntegrationTime(); - applySettings(); + applySettings(QStringList("integration")); } void RadioAstronomyGUI::on_recalibrate_toggled(bool checked) { m_settings.m_recalibrate = checked; - applySettings(); + applySettings(QStringList("recalibrate")); if (checked) { recalibrate(); } @@ -1231,7 +1231,7 @@ void RadioAstronomyGUI::on_showCalSettings_clicked() { RadioAstronomyCalibrationDialog dialog(&m_settings); if (dialog.exec() == QDialog::Accepted) { - applySettings(); + applySettings(QStringList({"gpioEnabled", "gpioPin", "gpioSense", "startCalCommand", "stopCalCommand", "calCommandDelay"})); } } @@ -1541,7 +1541,7 @@ void RadioAstronomyGUI::on_savePowerData_rightClicked(const QPoint& point) m_settings.m_powerAutoSaveCSVFilename = fileNames[0]; ui->savePowerData->setChecked(true); ui->savePowerData->setToolTip(QString("Left click to save data to a .csv file.\nRight click to disable auto save.\nAuto saving to %1").arg(m_settings.m_powerAutoSaveCSVFilename)); - applySettings(); + applySettings(QStringList("powerAutoSaveCSVFilename")); savePowerData(m_settings.m_powerAutoSaveCSVFilename); } } @@ -1551,7 +1551,7 @@ void RadioAstronomyGUI::on_savePowerData_rightClicked(const QPoint& point) ui->savePowerData->setChecked(false); ui->savePowerData->setToolTip("Left click to save data to a .csv file.\nRight click to auto-save data to a .csv file"); m_settings.m_powerAutoSaveCSVFilename = ""; - applySettings(); + applySettings(QStringList("powerAutoSaveCSVFilename")); } } @@ -1836,7 +1836,7 @@ void RadioAstronomyGUI::on_saveSpectrumData_rightClicked(const QPoint &point) m_settings.m_spectrumAutoSaveCSVFilename = fileNames[0]; ui->saveSpectrumData->setChecked(true); ui->saveSpectrumData->setToolTip(QString("Left click to save data to a .csv file.\nRight click to disable auto save.\nAuto saving to %1").arg(m_settings.m_spectrumAutoSaveCSVFilename)); - applySettings(); + applySettings(QStringList("spectrumAutoSaveCSVFilename")); saveSpectrumData(m_settings.m_spectrumAutoSaveCSVFilename); } } @@ -1846,7 +1846,7 @@ void RadioAstronomyGUI::on_saveSpectrumData_rightClicked(const QPoint &point) ui->saveSpectrumData->setChecked(false); ui->saveSpectrumData->setToolTip("Left click to save data to a .csv file.\nRight click to auto-save data to a .csv file"); m_settings.m_spectrumAutoSaveCSVFilename = ""; - applySettings(); + applySettings(QStringList("spectrumAutoSaveCSVFilename")); } } @@ -2019,7 +2019,7 @@ void RadioAstronomyGUI::onWidgetRolled(QWidget* widget, bool rollDown) (void) rollDown; getRollupContents()->saveState(m_rollupState); - applySettings(); + applySettings(QStringList()); } void RadioAstronomyGUI::onMenuDialogCalled(const QPoint &p) @@ -2064,7 +2064,9 @@ void RadioAstronomyGUI::onMenuDialogCalled(const QPoint &p) updateIndexLabel(); } - applySettings(); + applySettings(QStringList({"title", "rgbColor", "useReverseAPI", "reverseAPIAddress", + "reverseAPIPort", "reverseAPIDeviceIndex", "reverseAPIChannelIndex", + "streamIndex"})); } resetContextMenuType(); @@ -2320,7 +2322,7 @@ RadioAstronomyGUI::RadioAstronomyGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUI displaySettings(); makeUIConnections(); - applySettings(true); + applySettings(QStringList(), true); // Force apply all settings m_resizer.enableChildMouseTracking(); create2DImage(); @@ -2418,11 +2420,11 @@ void RadioAstronomyGUI::blockApplySettings(bool block) m_doApplySettings = !block; } -void RadioAstronomyGUI::applySettings(bool force) +void RadioAstronomyGUI::applySettings(const QStringList& settingsKeys, bool force) { if (m_doApplySettings) { - RadioAstronomy::MsgConfigureRadioAstronomy* message = RadioAstronomy::MsgConfigureRadioAstronomy::create( m_settings, force); + RadioAstronomy::MsgConfigureRadioAstronomy* message = RadioAstronomy::MsgConfigureRadioAstronomy::create(settingsKeys, m_settings, force); m_radioAstronomy->getInputMessageQueue()->push(message); } } @@ -2712,7 +2714,7 @@ void RadioAstronomyGUI::updateRotatorList(const AvailableChannelOrFeatureList& r if (renameFrom.contains(m_settings.m_rotator)) { m_settings.m_rotator = renameTo[renameFrom.indexOf(m_settings.m_rotator)]; - applySettings(); + applySettings(QStringList("rotator")); } // Update list of rotators @@ -2744,26 +2746,26 @@ void RadioAstronomyGUI::updateRotatorList(const AvailableChannelOrFeatureList& r void RadioAstronomyGUI::on_fftSize_currentIndexChanged(int index) { m_settings.m_fftSize = 1 << (4+index); - applySettings(); + applySettings(QStringList("fftSize")); updateIntegrationTime(); } void RadioAstronomyGUI::on_fftWindow_currentIndexChanged(int index) { m_settings.m_fftWindow = (RadioAstronomySettings::FFTWindow)index; - applySettings(); + applySettings(QStringList("fftWindow")); } void RadioAstronomyGUI::on_filterFreqs_editingFinished() { m_settings.m_filterFreqs = ui->filterFreqs->text(); - applySettings(); + applySettings(QStringList("filterFreqs")); } void RadioAstronomyGUI::on_gainVariation_valueChanged(double value) { m_settings.m_gainVariation = value; - applySettings(); + applySettings(QStringList("gainVariation")); updateTSys0(); } @@ -2771,7 +2773,7 @@ void RadioAstronomyGUI::on_gainVariation_valueChanged(double value) void RadioAstronomyGUI::on_sourceType_currentIndexChanged(int index) { m_settings.m_sourceType = (RadioAstronomySettings::SourceType)index; - applySettings(); + applySettings(QStringList("sourceType")); if (m_settings.m_sourceType == RadioAstronomySettings::SUN) { // Mean diameter of Sun in degrees from Earth @@ -2797,7 +2799,7 @@ void RadioAstronomyGUI::on_omegaS_valueChanged(double value) } else if ((m_settings.m_sourceType == RadioAstronomySettings::CAS_A) && (value != 0.08333)) { ui->sourceType->setCurrentIndex((int)RadioAstronomySettings::COMPACT); } - applySettings(); + applySettings(QStringList("omegaS")); } void RadioAstronomyGUI::updateOmegaA() @@ -2818,7 +2820,7 @@ void RadioAstronomyGUI::on_omegaAUnits_currentIndexChanged(int index) } else { ui->omegaALabel->setText(QString("%1A").arg(QChar(937))); } - applySettings(); + applySettings(QStringList("omegaAUnits")); } void RadioAstronomyGUI::on_omegaSUnits_currentIndexChanged(int index) @@ -2832,19 +2834,19 @@ void RadioAstronomyGUI::on_omegaSUnits_currentIndexChanged(int index) { ui->sourceType->setCurrentIndex((int)RadioAstronomySettings::COMPACT); } - applySettings(); + applySettings(QStringList("omegaSUnits")); } void RadioAstronomyGUI::on_starTracker_currentTextChanged(const QString& text) { m_settings.m_starTracker = text; - applySettings(); + applySettings(QStringList("starTracker")); } void RadioAstronomyGUI::on_rotator_currentTextChanged(const QString& text) { m_settings.m_rotator = text; - applySettings(); + applySettings(QStringList("rotator")); setColumnPrecisionFromRotator(); } @@ -2890,7 +2892,7 @@ void RadioAstronomyGUI::on_showSensors_clicked() { m_sensors[0].setName(m_settings.m_sensorName[0]); m_sensors[1].setName(m_settings.m_sensorName[1]); - applySettings(); + applySettings(QStringList("sensorName")); } } @@ -2934,7 +2936,7 @@ void RadioAstronomyGUI::on_powerChartSelect_currentIndexChanged(int index) updatePowerMarkerTableVisibility(); updatePowerChartWidgetsVisibility(); plotPowerChart(); - applySettings(); + applySettings(QStringList("powerYData")); } void RadioAstronomyGUI::updatePowerChartWidgetsVisibility() @@ -3033,7 +3035,7 @@ void RadioAstronomyGUI::on_powerYUnits_currentIndexChanged(int index) ui->powerColourScaleMinUnits->setText(text); ui->powerColourScaleMaxUnits->setText(text); } - applySettings(); + applySettings(QStringList("powerYUnits")); plotPowerChart(); } @@ -3470,20 +3472,20 @@ void RadioAstronomyGUI::on_power2DAutoscale_clicked() void RadioAstronomyGUI::on_power2DLinkSweep_toggled(bool checked) { m_settings.m_power2DLinkSweep = checked; - applySettings(); + applySettings(QStringList("power2DLinkSweep")); } void RadioAstronomyGUI::on_power2DSweepType_currentIndexChanged(int index) { m_settings.m_power2DSweepType = (RadioAstronomySettings::SweepType)index; - applySettings(); + applySettings(QStringList("power2DSweepType")); plot2DChart(); } void RadioAstronomyGUI::on_power2DWidth_valueChanged(int value) { m_settings.m_power2DWidth = value; - applySettings(); + applySettings(QStringList("power2DWidth")); create2DImage(); plot2DChart(); } @@ -3491,7 +3493,7 @@ void RadioAstronomyGUI::on_power2DWidth_valueChanged(int value) void RadioAstronomyGUI::on_power2DHeight_valueChanged(int value) { m_settings.m_power2DHeight = value; - applySettings(); + applySettings(QStringList("power2DHeight")); create2DImage(); plot2DChart(); } @@ -3499,7 +3501,7 @@ void RadioAstronomyGUI::on_power2DHeight_valueChanged(int value) void RadioAstronomyGUI::on_power2DXMin_valueChanged(double value) { m_settings.m_power2DXMin = value; - applySettings(); + applySettings(QStringList("power2DXMin")); if (m_2DXAxis) { m_2DXAxis->setMin(m_settings.m_power2DXMin); @@ -3510,7 +3512,7 @@ void RadioAstronomyGUI::on_power2DXMin_valueChanged(double value) void RadioAstronomyGUI::on_power2DXMax_valueChanged(double value) { m_settings.m_power2DXMax = value; - applySettings(); + applySettings(QStringList("power2DXMax")); if (m_2DXAxis) { m_2DXAxis->setMax(m_settings.m_power2DXMax); @@ -3521,7 +3523,7 @@ void RadioAstronomyGUI::on_power2DXMax_valueChanged(double value) void RadioAstronomyGUI::on_power2DYMin_valueChanged(double value) { m_settings.m_power2DYMin = value; - applySettings(); + applySettings(QStringList("power2DYMin")); if (m_2DYAxis) { m_2DYAxis->setMin(m_settings.m_power2DYMin); @@ -3532,7 +3534,7 @@ void RadioAstronomyGUI::on_power2DYMin_valueChanged(double value) void RadioAstronomyGUI::on_power2DYMax_valueChanged(double value) { m_settings.m_power2DYMax = value; - applySettings(); + applySettings(QStringList("power2DYMax")); if (m_2DYAxis) { m_2DYAxis->setMax(m_settings.m_power2DYMax); @@ -3565,7 +3567,7 @@ void RadioAstronomyGUI::powerColourAutoscale() void RadioAstronomyGUI::on_powerColourAutoscale_toggled(bool checked) { m_settings.m_powerColourAutoscale = checked; - applySettings(); + applySettings(QStringList("powerColourAutoscale")); if (m_settings.m_powerColourAutoscale) { powerColourAutoscale(); } @@ -3585,7 +3587,7 @@ void RadioAstronomyGUI::on_powerColourScaleMin_valueChanged(double value) { m_settings.m_powerColourScaleMin = value; updatePowerColourScaleStep(); - applySettings(); + applySettings(QStringList("powerColourScaleMin")); recolour2DImage(); } @@ -3593,7 +3595,7 @@ void RadioAstronomyGUI::on_powerColourScaleMax_valueChanged(double value) { m_settings.m_powerColourScaleMax = value; updatePowerColourScaleStep(); - applySettings(); + applySettings(QStringList("powerColourScaleMax")); recolour2DImage(); } @@ -3601,7 +3603,7 @@ void RadioAstronomyGUI::on_powerColourPalette_currentIndexChanged(int index) { (void) index; m_settings.m_powerColourPalette = ui->powerColourPalette->currentText(); - applySettings(); + applySettings(QStringList("powerColourPalette")); recolour2DImage(); } @@ -3980,7 +3982,7 @@ void RadioAstronomyGUI::on_spectrumReference_valueChanged(double value) m_settings.m_spectrumReference = value; spectrumUpdateYRange(); if (!m_settings.m_spectrumAutoscale) { - applySettings(); + applySettings(QStringList("spectrumReference")); } } @@ -4001,7 +4003,7 @@ void RadioAstronomyGUI::on_spectrumRange_valueChanged(double value) } spectrumUpdateYRange(); if (!m_settings.m_spectrumAutoscale) { - applySettings(); + applySettings(QStringList("spectrumRange")); } } @@ -4009,7 +4011,7 @@ void RadioAstronomyGUI::on_spectrumSpan_valueChanged(double value) { m_settings.m_spectrumSpan = value; spectrumUpdateXRange(); - applySettings(); + applySettings(QStringList("spectrumSpan")); } void RadioAstronomyGUI::on_spectrumCenterFreq_valueChanged(double value) @@ -4023,7 +4025,7 @@ void RadioAstronomyGUI::on_spectrumCenterFreq_valueChanged(double value) } m_settings.m_spectrumCenterFreqOffset = offset; spectrumUpdateXRange(); - applySettings(); + applySettings(QStringList("spectrumCenterFreqOffset")); } void RadioAstronomyGUI::spectrumUpdateXRange(FFTMeasurement* fft) @@ -4075,7 +4077,7 @@ void RadioAstronomyGUI::on_spectrumAutoscale_toggled(bool checked) ui->spectrumCenterFreq->setEnabled(!m_settings.m_spectrumAutoscale); ui->spectrumSpan->setEnabled(!m_settings.m_spectrumAutoscale); spectrumAutoscale(); - applySettings(); + applySettings(QStringList("spectrumAutoscale")); } // Get minimum and maximum values in a series @@ -4170,7 +4172,7 @@ void RadioAstronomyGUI::on_spectrumYUnits_currentIndexChanged(int index) ui->spectrumMarkerTable->horizontalHeaderItem(SPECTRUM_MARKER_COL_VALUE)->setText("Tsource (K)"); } plotFFTMeasurement(); - applySettings(); + applySettings(QStringList("spectrumYScale")); } void RadioAstronomyGUI::on_spectrumBaseline_currentIndexChanged(int index) @@ -4180,7 +4182,7 @@ void RadioAstronomyGUI::on_spectrumBaseline_currentIndexChanged(int index) if ((m_settings.m_powerYData == RadioAstronomySettings::PY_TSOURCE) || (m_settings.m_powerYData == RadioAstronomySettings::PY_FLUX)) { plotPowerChart(); } - applySettings(); + applySettings(QStringList("spectrumBaseline")); } // Convert frequency shift to velocity in km/s (+ve approaching) @@ -5052,35 +5054,35 @@ void RadioAstronomyGUI::on_tempRX_valueChanged(double value) m_settings.m_tempRX = Units::noiseFigureToNoiseTemp(value); } updateTSys0(); - applySettings(); + applySettings(QStringList("tempRX")); } void RadioAstronomyGUI::on_tempCMB_valueChanged(double value) { m_settings.m_tempCMB = value; updateTSys0(); - applySettings(); + applySettings(QStringList("tempCMB")); } void RadioAstronomyGUI::on_tempGal_valueChanged(double value) { m_settings.m_tempGal = value; updateTSys0(); - applySettings(); + applySettings(QStringList("tempGal")); } void RadioAstronomyGUI::on_tempSP_valueChanged(double value) { m_settings.m_tempSP = value; updateTSys0(); - applySettings(); + applySettings(QStringList("tempSP")); } void RadioAstronomyGUI::on_tempAtm_valueChanged(double value) { m_settings.m_tempAtm = value; updateTSys0(); - applySettings(); + applySettings(QStringList("tempAtm")); } void RadioAstronomyGUI::on_tempAir_valueChanged(double value) @@ -5089,7 +5091,7 @@ void RadioAstronomyGUI::on_tempAir_valueChanged(double value) if (m_settings.m_tempAtmLink) { calcAtmosphericTemp(); } - applySettings(); + applySettings(QStringList("tempAir")); } void RadioAstronomyGUI::on_zenithOpacity_valueChanged(double value) @@ -5098,7 +5100,7 @@ void RadioAstronomyGUI::on_zenithOpacity_valueChanged(double value) if (m_settings.m_tempAtmLink) { calcAtmosphericTemp(); } - applySettings(); + applySettings(QStringList("zenithOpacity")); } void RadioAstronomyGUI::on_elevation_valueChanged(double value) @@ -5107,7 +5109,7 @@ void RadioAstronomyGUI::on_elevation_valueChanged(double value) if (m_settings.m_tempAtmLink) { calcAtmosphericTemp(); } - applySettings(); + applySettings(QStringList("elevation")); } void RadioAstronomyGUI::on_elevationLink_toggled(bool checked) @@ -5115,7 +5117,7 @@ void RadioAstronomyGUI::on_elevationLink_toggled(bool checked) m_settings.m_elevationLink = checked; ui->elevation->setValue(m_elevation); ui->elevation->setEnabled(!m_settings.m_elevationLink); - applySettings(); + applySettings(QStringList("elevationLink")); } void RadioAstronomyGUI::on_tempAtmLink_toggled(bool checked) @@ -5125,7 +5127,7 @@ void RadioAstronomyGUI::on_tempAtmLink_toggled(bool checked) if (checked) { calcAtmosphericTemp(); } - applySettings(); + applySettings(QStringList("tempAtmLink")); } void RadioAstronomyGUI::on_tempAirLink_toggled(bool checked) @@ -5137,7 +5139,7 @@ void RadioAstronomyGUI::on_tempAirLink_toggled(bool checked) ui->tempAir->setValue(m_airTemps.lastValue()); calcAtmosphericTemp(); } - applySettings(); + applySettings(QStringList("tempAirLink")); } void RadioAstronomyGUI::on_tempGalLink_toggled(bool checked) @@ -5147,7 +5149,7 @@ void RadioAstronomyGUI::on_tempGalLink_toggled(bool checked) calcGalacticBackgroundTemp(); } ui->tempGal->setEnabled(!m_settings.m_tempGalLink); - applySettings(); + applySettings(QStringList("tempGalLink")); } void RadioAstronomyGUI::on_tCalHotSelect_currentIndexChanged(int value) @@ -5177,7 +5179,7 @@ void RadioAstronomyGUI::on_tCalHot_valueChanged(double value) } m_settings.m_tCalHot = (float)temp; calibrate(); - applySettings(); + applySettings(QStringList("tCalHot")); } void RadioAstronomyGUI::on_tCalColdSelect_currentIndexChanged(int value) @@ -5207,7 +5209,7 @@ void RadioAstronomyGUI::on_tCalCold_valueChanged(double value) } m_settings.m_tCalCold = (float)temp; calibrate(); - applySettings(); + applySettings(QStringList("tCalCold")); } void RadioAstronomyGUI::on_spectrumLine_currentIndexChanged(int value) @@ -5215,7 +5217,7 @@ void RadioAstronomyGUI::on_spectrumLine_currentIndexChanged(int value) m_settings.m_line = (RadioAstronomySettings::Line)value; displaySpectrumLineFrequency(); plotFFTMeasurement(); - applySettings(); + applySettings(QStringList("line")); } void RadioAstronomyGUI::displaySpectrumLineFrequency() @@ -5245,27 +5247,27 @@ void RadioAstronomyGUI::on_spectrumLineFrequency_valueChanged(double value) { m_settings.m_lineCustomFrequency = value * 1e6; plotFFTMeasurement(); - applySettings(); + applySettings(QStringList("lineCustomFrequency")); } void RadioAstronomyGUI::on_refFrame_currentIndexChanged(int value) { m_settings.m_refFrame = (RadioAstronomySettings::RefFrame)value; plotFFTMeasurement(); - applySettings(); + applySettings(QStringList("refFrame")); } void RadioAstronomyGUI::on_sunDistanceToGC_valueChanged(double value) { m_settings.m_sunDistanceToGC = value; - applySettings(); + applySettings(QStringList("sunDistanceToGC")); calcDistances(); } void RadioAstronomyGUI::on_sunOrbitalVelocity_valueChanged(double value) { m_settings.m_sunOrbitalVelocity = value; - applySettings(); + applySettings(QStringList("sunOrbitalVelocity")); calcDistances(); } @@ -5346,7 +5348,7 @@ void RadioAstronomyGUI::on_saveSpectrumChartImages_clicked() void RadioAstronomyGUI::on_spectrumReverseXAxis_toggled(bool checked) { m_settings.m_spectrumReverseXAxis = checked; - applySettings(); + applySettings(QStringList("spectrumReverseXAxis")); if (ui->spectrumChartSelect->currentIndex() == 0) { plotFFTMeasurement(); } else { @@ -5358,7 +5360,7 @@ void RadioAstronomyGUI::on_powerShowPeak_toggled(bool checked) { m_settings.m_powerPeaks = checked; updatePowerMarkerTableVisibility(); - applySettings(); + applySettings(QStringList("powerPeaks")); if (m_powerPeakSeries) { m_powerPeakSeries->setVisible(checked); @@ -5374,7 +5376,7 @@ void RadioAstronomyGUI::on_spectrumPeak_toggled(bool checked) m_settings.m_spectrumPeaks = checked; updateSpectrumMarkerTableVisibility(); plotFFTMeasurement(); - applySettings(); + applySettings(QStringList("spectrumPeaks")); if (m_fftChart) { if (checked) { @@ -5391,7 +5393,7 @@ void RadioAstronomyGUI::on_powerShowMarker_toggled(bool checked) { m_settings.m_powerMarkers = checked; updatePowerMarkerTableVisibility(); - applySettings(); + applySettings(QStringList("powerMarkers")); if (m_powerMarkerSeries) { m_powerMarkerSeries->setVisible(checked); @@ -5406,7 +5408,7 @@ void RadioAstronomyGUI::on_powerShowMarker_toggled(bool checked) void RadioAstronomyGUI::on_powerShowAvg_toggled(bool checked) { m_settings.m_powerAvg = checked; - applySettings(); + applySettings(QStringList("powerAvg")); ui->powerChartAvgWidgets->setVisible(checked); getRollupContents()->arrangeRollups(); if (checked) { @@ -5417,7 +5419,7 @@ void RadioAstronomyGUI::on_powerShowAvg_toggled(bool checked) void RadioAstronomyGUI::on_powerShowLegend_toggled(bool checked) { m_settings.m_powerLegend = checked; - applySettings(); + applySettings(QStringList("powerLegend")); if (m_powerChart) { if (checked) { @@ -5431,7 +5433,7 @@ void RadioAstronomyGUI::on_powerShowLegend_toggled(bool checked) void RadioAstronomyGUI::on_powerShowTsys0_toggled(bool checked) { m_settings.m_powerShowTsys0 = checked; - applySettings(); + applySettings(QStringList("powerShowTsys0")); if (m_powerTsys0Series) { m_powerTsys0Series->setVisible(checked); } @@ -5440,21 +5442,21 @@ void RadioAstronomyGUI::on_powerShowTsys0_toggled(bool checked) void RadioAstronomyGUI::on_powerShowAirTemp_toggled(bool checked) { m_settings.m_powerShowAirTemp = checked; - applySettings(); + applySettings(QStringList("powerShowAirTemp")); m_airTemps.clicked(checked); } void RadioAstronomyGUI::on_powerShowSensor1_toggled(bool checked) { m_settings.m_sensorVisible[0] = checked; - applySettings(); + applySettings(QStringList("sensorVisible")); m_sensors[0].clicked(checked); } void RadioAstronomyGUI::on_powerShowSensor2_toggled(bool checked) { m_settings.m_sensorVisible[1] = checked; - applySettings(); + applySettings(QStringList("sensorVisible")); m_sensors[1].clicked(checked); } @@ -5512,7 +5514,7 @@ void RadioAstronomyGUI::updateSpectrumMarkerTableVisibility() void RadioAstronomyGUI::on_spectrumMarker_toggled(bool checked) { m_settings.m_spectrumMarkers = checked; - applySettings(); + applySettings(QStringList("spectrumMarkers")); updateSpectrumMarkerTableVisibility(); m_fftMarkerSeries->setVisible(checked); if (checked) @@ -5533,7 +5535,7 @@ void RadioAstronomyGUI::on_spectrumMarker_toggled(bool checked) void RadioAstronomyGUI::on_spectrumTemp_toggled(bool checked) { m_settings.m_spectrumTemp = checked; - applySettings(); + applySettings(QStringList("spectrumTemp")); ui->spectrumGaussianWidgets->setVisible(checked); m_fftGaussianSeries->setVisible(checked); updateSpectrumSelect(); @@ -5543,7 +5545,7 @@ void RadioAstronomyGUI::on_spectrumTemp_toggled(bool checked) void RadioAstronomyGUI::on_spectrumShowLegend_toggled(bool checked) { m_settings.m_spectrumLegend = checked; - applySettings(); + applySettings(QStringList("spectrumLegend")); if (m_fftChart) { m_fftChart->legend()->setVisible(checked); @@ -5554,7 +5556,7 @@ void RadioAstronomyGUI::on_spectrumShowLegend_toggled(bool checked) void RadioAstronomyGUI::on_spectrumShowRefLine_toggled(bool checked) { m_settings.m_spectrumRefLine = checked; - applySettings(); + applySettings(QStringList("spectrumRefLine")); ui->spectrumRefLineWidgets->setVisible(checked); if (m_fftHlineSeries) { @@ -5568,7 +5570,7 @@ void RadioAstronomyGUI::on_spectrumShowRefLine_toggled(bool checked) void RadioAstronomyGUI::on_spectrumShowLAB_toggled(bool checked) { m_settings.m_spectrumLAB = checked; - applySettings(); + applySettings(QStringList("spectrumLAB")); m_fftLABSeries->setVisible(m_settings.m_spectrumLAB); if (m_settings.m_spectrumLAB) { plotLAB(); // Replot in case data needs to be downloaded @@ -5621,7 +5623,7 @@ void RadioAstronomyGUI::updateDistanceColumns() void RadioAstronomyGUI::on_spectrumShowDistance_toggled(bool checked) { m_settings.m_spectrumDistance = checked; - applySettings(); + applySettings(QStringList("spectrumDistance")); if (m_settings.m_spectrumDistance && !m_settings.m_spectrumRefLine) { ui->spectrumShowRefLine->setChecked(true); } @@ -5888,7 +5890,7 @@ void RadioAstronomyGUI::calcColumnDensity() void RadioAstronomyGUI::on_powerShowGaussian_clicked(bool checked) { m_settings.m_powerShowGaussian = checked; - applySettings(); + applySettings(QStringList("powerShowGaussian")); ui->powerGaussianWidgets->setVisible(checked); m_powerGaussianSeries->setVisible(checked); updatePowerSelect(); @@ -6029,7 +6031,7 @@ void RadioAstronomyGUI::plotPowerFiltered() void RadioAstronomyGUI::on_powerShowFiltered_clicked(bool checked) { m_settings.m_powerShowFiltered = checked; - applySettings(); + applySettings(QStringList("powerShowFiltered")); ui->powerFilterWidgets->setVisible(checked); m_powerFilteredSeries->setVisible(checked); getRollupContents()->arrangeRollups(); @@ -6039,21 +6041,21 @@ void RadioAstronomyGUI::on_powerShowFiltered_clicked(bool checked) void RadioAstronomyGUI::on_powerFilter_currentIndexChanged(int index) { m_settings.m_powerFilter = (RadioAstronomySettings::PowerFilter)index; - applySettings(); + applySettings(QStringList("powerFilter")); plotPowerFiltered(); } void RadioAstronomyGUI::on_powerFilterN_valueChanged(int value) { m_settings.m_powerFilterN = value; - applySettings(); + applySettings(QStringList("powerFilterN")); plotPowerFiltered(); } void RadioAstronomyGUI::on_powerShowMeasurement_clicked(bool checked) { m_settings.m_powerShowMeasurement = checked; - applySettings(); + applySettings(QStringList("powerShowMeasurement")); m_powerSeries->setVisible(checked); } @@ -6241,7 +6243,7 @@ void RadioAstronomyGUI::displayRunModeSettings() void RadioAstronomyGUI::on_runMode_currentIndexChanged(int index) { m_settings.m_runMode = (RadioAstronomySettings::RunMode)index; - applySettings(); + applySettings(QStringList("runMode")); displayRunModeSettings(); } @@ -6263,49 +6265,49 @@ void RadioAstronomyGUI::on_sweepType_currentIndexChanged(int index) void RadioAstronomyGUI::on_sweep1Start_valueChanged(double value) { m_settings.m_sweep1Start = value; - applySettings(); + applySettings(QStringList("sweep1Start")); } void RadioAstronomyGUI::on_sweep1Stop_valueChanged(double value) { m_settings.m_sweep1Stop = value; - applySettings(); + applySettings(QStringList("sweep1Stop")); } void RadioAstronomyGUI::on_sweep1Step_valueChanged(double value) { m_settings.m_sweep1Step = value; - applySettings(); + applySettings(QStringList("sweep1Step")); } void RadioAstronomyGUI::on_sweep1Delay_valueChanged(double value) { m_settings.m_sweep1Delay = value; - applySettings(); + applySettings(QStringList("sweep1Delay")); } void RadioAstronomyGUI::on_sweep2Start_valueChanged(double value) { m_settings.m_sweep2Start = value; - applySettings(); + applySettings(QStringList("sweep2Start")); } void RadioAstronomyGUI::on_sweep2Stop_valueChanged(double value) { m_settings.m_sweep2Stop = value; - applySettings(); + applySettings(QStringList("sweep2Stop")); } void RadioAstronomyGUI::on_sweep2Step_valueChanged(double value) { m_settings.m_sweep2Step = value; - applySettings(); + applySettings(QStringList("sweep2Step")); } void RadioAstronomyGUI::on_sweep2Delay_valueChanged(double value) { m_settings.m_sweep2Delay = value; - applySettings(); + applySettings(QStringList("sweep2Delay")); } void RadioAstronomyGUI::on_sweepStartAtTime_currentIndexChanged(int index) @@ -6313,13 +6315,13 @@ void RadioAstronomyGUI::on_sweepStartAtTime_currentIndexChanged(int index) m_settings.m_sweepStartAtTime = ui->sweepStartAtTime->currentIndex() == 1; ui->sweepStartDateTime->setVisible(index == 1); getRollupContents()->arrangeRollups(); - applySettings(); + applySettings(QStringList("sweepStartAtTime")); } void RadioAstronomyGUI::on_sweepStartDateTime_dateTimeChanged(const QDateTime& dateTime) { m_settings.m_sweepStartDateTime = dateTime; - applySettings(); + applySettings(QStringList("sweepStartDateTime")); } void RadioAstronomyGUI::on_startStop_clicked(bool checked) @@ -6327,7 +6329,7 @@ void RadioAstronomyGUI::on_startStop_clicked(bool checked) if (checked) { ui->startStop->setStyleSheet("QToolButton { background-color : green; }"); - applySettings(); + applySettings(QStringList("startStop")); if (m_settings.m_power2DLinkSweep) { update2DSettingsFromSweep(); @@ -6341,6 +6343,7 @@ void RadioAstronomyGUI::on_startStop_clicked(bool checked) if (m_settings.m_runMode != RadioAstronomySettings::SWEEP) { ui->startStop->setStyleSheet("QToolButton { background-color : blue; }"); } + applySettings(QStringList("startStop")); } } diff --git a/plugins/channelrx/radioastronomy/radioastronomygui.h b/plugins/channelrx/radioastronomy/radioastronomygui.h index fb5c3f7e6..6953d4f77 100644 --- a/plugins/channelrx/radioastronomy/radioastronomygui.h +++ b/plugins/channelrx/radioastronomy/radioastronomygui.h @@ -348,7 +348,7 @@ private: virtual ~RadioAstronomyGUI(); void blockApplySettings(bool block); - void applySettings(bool force = false); + void applySettings(const QStringList& settingsKeys, bool force = false); void displaySettings(); void displaySpectrumLineFrequency(); void displayRunModeSettings(); diff --git a/plugins/channelrx/radioastronomy/radioastronomysink.cpp b/plugins/channelrx/radioastronomy/radioastronomysink.cpp index 3691afad7..b3fab45db 100644 --- a/plugins/channelrx/radioastronomy/radioastronomysink.cpp +++ b/plugins/channelrx/radioastronomy/radioastronomysink.cpp @@ -42,7 +42,7 @@ RadioAstronomySink::RadioAstronomySink(RadioAstronomy *aisDemod) : { m_magsq = 0.0; - applySettings(m_settings, true); + applySettings(QStringList(), m_settings, true); applyChannelSettings(m_channelSampleRate, m_channelFrequencyOffset, true); } @@ -241,18 +241,12 @@ void RadioAstronomySink::applyChannelSettings(int channelSampleRate, int channel m_channelFrequencyOffset = channelFrequencyOffset; } -void RadioAstronomySink::applySettings(const RadioAstronomySettings& settings, bool force) +void RadioAstronomySink::applySettings(const QStringList& settingsKeys, const RadioAstronomySettings& settings, bool force) { - qDebug() << "RadioAstronomySink::applySettings:" - << " m_sampleRate: " << settings.m_sampleRate - << " m_rfBandwidth: " << settings.m_rfBandwidth - << " m_fftSize: " << settings.m_fftSize - << " m_fftWindow: " << settings.m_fftWindow - << " m_filterFreqs: " << settings.m_filterFreqs - << " force: " << force; + qDebug() << "RadioAstronomySink::applySettings:" << settings.getDebugString(settingsKeys, force); - if ((settings.m_rfBandwidth != m_settings.m_rfBandwidth) - || (settings.m_sampleRate != m_settings.m_sampleRate) + if ((settingsKeys.contains("rfBandwidth") && (settings.m_rfBandwidth != m_settings.m_rfBandwidth)) + || (settingsKeys.contains("sampleRate") && (settings.m_sampleRate != m_settings.m_sampleRate)) || force) { m_interpolator.create(16, m_channelSampleRate, settings.m_rfBandwidth / 2.0f); // 2.0 rather than 2.2 as in other plugins, to reduce rolloff at edge of band @@ -260,7 +254,7 @@ void RadioAstronomySink::applySettings(const RadioAstronomySettings& settings, b m_interpolatorDistanceRemain = m_interpolatorDistance; } - if ((settings.m_fftSize != m_settings.m_fftSize) || force) + if ((settingsKeys.contains("fftSize") && (settings.m_fftSize != m_settings.m_fftSize)) || force) { FFTFactory *fftFactory = DSPEngine::instance()->getFFTFactory(); if (m_fftSequence >= 0) { @@ -275,8 +269,8 @@ void RadioAstronomySink::applySettings(const RadioAstronomySettings& settings, b m_fftSumCount = 0; } - if ((settings.m_fftSize != m_settings.m_fftSize) - || (settings.m_fftWindow != m_settings.m_fftWindow) + if ((settingsKeys.contains("fftSize") && (settings.m_fftSize != m_settings.m_fftSize)) + || (settingsKeys.contains("fftWindow") && (settings.m_fftWindow != m_settings.m_fftWindow)) || force) { if (settings.m_fftWindow == RadioAstronomySettings::HAN) { @@ -286,7 +280,7 @@ void RadioAstronomySink::applySettings(const RadioAstronomySettings& settings, b } } - if ((settings.m_filterFreqs != m_settings.m_filterFreqs) || force) + if ((settingsKeys.contains("filterFreqs") && (settings.m_filterFreqs != m_settings.m_filterFreqs)) || force) { m_filterBins.clear(); QStringList filterFreqs = settings.m_filterFreqs.split(" "); @@ -300,5 +294,9 @@ void RadioAstronomySink::applySettings(const RadioAstronomySettings& settings, b } } - m_settings = settings; + if (force) { + m_settings = settings; + } else { + m_settings.applySettings(settingsKeys, settings); + } } diff --git a/plugins/channelrx/radioastronomy/radioastronomysink.h b/plugins/channelrx/radioastronomy/radioastronomysink.h index 6386c42fd..75a2e75af 100644 --- a/plugins/channelrx/radioastronomy/radioastronomysink.h +++ b/plugins/channelrx/radioastronomy/radioastronomysink.h @@ -41,7 +41,7 @@ public: virtual void feed(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end); void applyChannelSettings(int channelSampleRate, int channelFrequencyOffset, bool force = false); - void applySettings(const RadioAstronomySettings& settings, bool force = false); + void applySettings(const QStringList& settingsKeys, const RadioAstronomySettings& settings, bool force = false); void setMessageQueueToChannel(MessageQueue *messageQueue) { m_messageQueueToChannel = messageQueue; } void setChannel(ChannelAPI *channel) { m_channel = channel; } void startMeasurements(); diff --git a/plugins/channelrx/radioastronomy/radioastronomyworker.h b/plugins/channelrx/radioastronomy/radioastronomyworker.h index 5d79bd05f..ba17a0c5d 100644 --- a/plugins/channelrx/radioastronomy/radioastronomyworker.h +++ b/plugins/channelrx/radioastronomy/radioastronomyworker.h @@ -39,20 +39,23 @@ public: public: const RadioAstronomySettings& getSettings() const { return m_settings; } + const QStringList& getSettingsKeys() const { return m_settingsKeys; } bool getForce() const { return m_force; } - static MsgConfigureRadioAstronomyWorker* create(const RadioAstronomySettings& settings, bool force) + static MsgConfigureRadioAstronomyWorker* create(const QStringList& settingsKeys, const RadioAstronomySettings& settings, bool force) { - return new MsgConfigureRadioAstronomyWorker(settings, force); + return new MsgConfigureRadioAstronomyWorker(settingsKeys, settings, force); } private: RadioAstronomySettings m_settings; + QStringList m_settingsKeys; bool m_force; - MsgConfigureRadioAstronomyWorker(const RadioAstronomySettings& settings, bool force) : + MsgConfigureRadioAstronomyWorker(const QStringList& settingsKeys, const RadioAstronomySettings& settings, bool force) : Message(), m_settings(settings), + m_settingsKeys(settingsKeys), m_force(force) { } }; diff --git a/plugins/channelrx/radioclock/radioclock.cpp b/plugins/channelrx/radioclock/radioclock.cpp index d9d4f6b9a..074a751a6 100644 --- a/plugins/channelrx/radioclock/radioclock.cpp +++ b/plugins/channelrx/radioclock/radioclock.cpp @@ -56,7 +56,7 @@ RadioClock::RadioClock(DeviceAPI *deviceAPI) : m_basebandSink->setChannel(this); m_basebandSink->moveToThread(&m_thread); - applySettings(m_settings, true); + applySettings(QStringList(), m_settings, true); m_deviceAPI->addChannelSink(this); m_deviceAPI->addChannelSinkAPI(this); @@ -130,7 +130,7 @@ void RadioClock::start() DSPSignalNotification *dspMsg = new DSPSignalNotification(m_basebandSampleRate, m_centerFrequency); m_basebandSink->getInputMessageQueue()->push(dspMsg); - RadioClockBaseband::MsgConfigureRadioClockBaseband *msg = RadioClockBaseband::MsgConfigureRadioClockBaseband::create(m_settings, true); + RadioClockBaseband::MsgConfigureRadioClockBaseband *msg = RadioClockBaseband::MsgConfigureRadioClockBaseband::create(QStringList(), m_settings, true); m_basebandSink->getInputMessageQueue()->push(msg); } @@ -146,11 +146,11 @@ void RadioClock::setCenterFrequency(qint64 frequency) { RadioClockSettings settings = m_settings; settings.m_inputFrequencyOffset = frequency; - applySettings(settings, false); + applySettings(QStringList("inputFrequencyOffset"), settings, false); if (m_guiMessageQueue) // forward to GUI if any { - MsgConfigureRadioClock *msgToGUI = MsgConfigureRadioClock::create(settings, false); + MsgConfigureRadioClock *msgToGUI = MsgConfigureRadioClock::create(QStringList("inputFrequencyOffset"), settings, false); m_guiMessageQueue->push(msgToGUI); } } @@ -161,7 +161,7 @@ bool RadioClock::handleMessage(const Message& cmd) { MsgConfigureRadioClock& cfg = (MsgConfigureRadioClock&) cmd; qDebug() << "RadioClock::handleMessage: MsgConfigureRadioClock"; - applySettings(cfg.getSettings(), cfg.getForce()); + applySettings(cfg.getSettingsKeys(), cfg.getSettings(), cfg.getForce()); return true; } @@ -216,41 +216,11 @@ ScopeVis *RadioClock::getScopeSink() return m_basebandSink->getScopeSink(); } -void RadioClock::applySettings(const RadioClockSettings& settings, bool force) +void RadioClock::applySettings(const QStringList& settingsKeys, const RadioClockSettings& settings, bool force) { - qDebug() << "RadioClock::applySettings:" - << " m_streamIndex: " << settings.m_streamIndex - << " m_useReverseAPI: " << settings.m_useReverseAPI - << " m_reverseAPIAddress: " << settings.m_reverseAPIAddress - << " m_reverseAPIPort: " << settings.m_reverseAPIPort - << " m_reverseAPIDeviceIndex: " << settings.m_reverseAPIDeviceIndex - << " m_reverseAPIChannelIndex: " << settings.m_reverseAPIChannelIndex - << " force: " << force; + qDebug() << "RadioClock::applySettings:" << settings.getDebugString(settingsKeys, force); - QList reverseAPIKeys; - - if ((settings.m_frequencyMode != m_settings.m_frequencyMode) || force) { - reverseAPIKeys.append("frequencyMode"); - } - if ((settings.m_inputFrequencyOffset != m_settings.m_inputFrequencyOffset) || force) { - reverseAPIKeys.append("inputFrequencyOffset"); - } - if ((settings.m_frequency != m_settings.m_frequency) || force) { - reverseAPIKeys.append("frequency"); - } - if ((settings.m_rfBandwidth != m_settings.m_rfBandwidth) || force) { - reverseAPIKeys.append("rfBandwidth"); - } - if ((settings.m_threshold != m_settings.m_threshold) || force) { - reverseAPIKeys.append("threshold"); - } - if ((settings.m_modulation != m_settings.m_modulation) || force) { - reverseAPIKeys.append("modulation"); - } - if ((settings.m_timezone != m_settings.m_timezone) || force) { - reverseAPIKeys.append("timezone"); - } - if (m_settings.m_streamIndex != settings.m_streamIndex) + if (settingsKeys.contains("streamIndex") && m_settings.m_streamIndex != settings.m_streamIndex) { if (m_deviceAPI->getSampleMIMO()) // change of stream is possible for MIMO devices only { @@ -261,24 +231,26 @@ void RadioClock::applySettings(const RadioClockSettings& settings, bool force) m_settings.m_streamIndex = settings.m_streamIndex; // make sure ChannelAPI::getStreamIndex() is consistent emit streamIndexChanged(settings.m_streamIndex); } - - reverseAPIKeys.append("streamIndex"); } - RadioClockBaseband::MsgConfigureRadioClockBaseband *msg = RadioClockBaseband::MsgConfigureRadioClockBaseband::create(settings, force); + RadioClockBaseband::MsgConfigureRadioClockBaseband *msg = RadioClockBaseband::MsgConfigureRadioClockBaseband::create(settingsKeys, settings, force); m_basebandSink->getInputMessageQueue()->push(msg); - if (settings.m_useReverseAPI) + if (settingsKeys.contains("useReverseAPI") && settings.m_useReverseAPI) { - bool fullUpdate = ((m_settings.m_useReverseAPI != settings.m_useReverseAPI) && settings.m_useReverseAPI) || - (m_settings.m_reverseAPIAddress != settings.m_reverseAPIAddress) || - (m_settings.m_reverseAPIPort != settings.m_reverseAPIPort) || - (m_settings.m_reverseAPIDeviceIndex != settings.m_reverseAPIDeviceIndex) || - (m_settings.m_reverseAPIChannelIndex != settings.m_reverseAPIChannelIndex); - webapiReverseSendSettings(reverseAPIKeys, settings, fullUpdate || force); + bool fullUpdate = ((settingsKeys.contains("useReverseAPI") && m_settings.m_useReverseAPI != settings.m_useReverseAPI) && settings.m_useReverseAPI) || + (settingsKeys.contains("reverseAPIAddress") && m_settings.m_reverseAPIAddress != settings.m_reverseAPIAddress) || + (settingsKeys.contains("reverseAPIPort") && m_settings.m_reverseAPIPort != settings.m_reverseAPIPort) || + (settingsKeys.contains("reverseAPIDeviceIndex") && m_settings.m_reverseAPIDeviceIndex != settings.m_reverseAPIDeviceIndex) || + (settingsKeys.contains("reverseAPIChannelIndex") && m_settings.m_reverseAPIChannelIndex != settings.m_reverseAPIChannelIndex); + webapiReverseSendSettings(settingsKeys, settings, fullUpdate || force); } - m_settings = settings; + if (force) { + m_settings = settings; + } else { + m_settings.applySettings(settingsKeys, settings); + } } QByteArray RadioClock::serialize() const @@ -290,14 +262,14 @@ bool RadioClock::deserialize(const QByteArray& data) { if (m_settings.deserialize(data)) { - MsgConfigureRadioClock *msg = MsgConfigureRadioClock::create(m_settings, true); + MsgConfigureRadioClock *msg = MsgConfigureRadioClock::create(QStringList(), m_settings, true); m_inputMessageQueue.push(msg); return true; } else { m_settings.resetToDefaults(); - MsgConfigureRadioClock *msg = MsgConfigureRadioClock::create(m_settings, true); + MsgConfigureRadioClock *msg = MsgConfigureRadioClock::create(QStringList(), m_settings, true); m_inputMessageQueue.push(msg); return false; } @@ -340,13 +312,13 @@ int RadioClock::webapiSettingsPutPatch( settings.m_frequency = m_centerFrequency + settings.m_inputFrequencyOffset; } - MsgConfigureRadioClock *msg = MsgConfigureRadioClock::create(settings, force); + MsgConfigureRadioClock *msg = MsgConfigureRadioClock::create(channelSettingsKeys, settings, force); m_inputMessageQueue.push(msg); qDebug("RadioClock::webapiSettingsPutPatch: forward to GUI: %p", m_guiMessageQueue); if (m_guiMessageQueue) // forward to GUI if any { - MsgConfigureRadioClock *msgToGUI = MsgConfigureRadioClock::create(settings, force); + MsgConfigureRadioClock *msgToGUI = MsgConfigureRadioClock::create(channelSettingsKeys, settings, force); m_guiMessageQueue->push(msgToGUI); } @@ -501,7 +473,7 @@ void RadioClock::webapiFormatChannelReport(SWGSDRangel::SWGChannelReport& respon response.getRadioClockReport()->setTime(new QString(m_dateTime.time().toString())); } -void RadioClock::webapiReverseSendSettings(QList& channelSettingsKeys, const RadioClockSettings& settings, bool force) +void RadioClock::webapiReverseSendSettings(const QList& channelSettingsKeys, const RadioClockSettings& settings, bool force) { SWGSDRangel::SWGChannelSettings *swgChannelSettings = new SWGSDRangel::SWGChannelSettings(); webapiFormatChannelSettings(channelSettingsKeys, swgChannelSettings, settings, force); @@ -538,7 +510,7 @@ int RadioClock::webapiReportGet( } void RadioClock::webapiFormatChannelSettings( - QList& channelSettingsKeys, + const QList& channelSettingsKeys, SWGSDRangel::SWGChannelSettings *swgChannelSettings, const RadioClockSettings& settings, bool force diff --git a/plugins/channelrx/radioclock/radioclock.h b/plugins/channelrx/radioclock/radioclock.h index 4f367ff1a..5ac47d83e 100644 --- a/plugins/channelrx/radioclock/radioclock.h +++ b/plugins/channelrx/radioclock/radioclock.h @@ -49,20 +49,23 @@ public: public: const RadioClockSettings& getSettings() const { return m_settings; } + const QStringList& getSettingsKeys() const { return m_settingsKeys; } bool getForce() const { return m_force; } - static MsgConfigureRadioClock* create(const RadioClockSettings& settings, bool force) + static MsgConfigureRadioClock* create(const QStringList& settingsKeys, const RadioClockSettings& settings, bool force) { - return new MsgConfigureRadioClock(settings, force); + return new MsgConfigureRadioClock(settingsKeys, settings, force); } private: RadioClockSettings m_settings; + QStringList m_settingsKeys; bool m_force; - MsgConfigureRadioClock(const RadioClockSettings& settings, bool force) : + MsgConfigureRadioClock(const QStringList& settingsKeys, const RadioClockSettings& settings, bool force) : Message(), m_settings(settings), + m_settingsKeys(settingsKeys), m_force(force) { } }; @@ -199,11 +202,11 @@ private: QNetworkRequest m_networkRequest; virtual bool handleMessage(const Message& cmd); - void applySettings(const RadioClockSettings& settings, bool force = false); + void applySettings(const QStringList& settingsKeys, const RadioClockSettings& settings, bool force = false); void webapiFormatChannelReport(SWGSDRangel::SWGChannelReport& response); - void webapiReverseSendSettings(QList& channelSettingsKeys, const RadioClockSettings& settings, bool force); + void webapiReverseSendSettings(const QList& channelSettingsKeys, const RadioClockSettings& settings, bool force); void webapiFormatChannelSettings( - QList& channelSettingsKeys, + const QList& channelSettingsKeys, SWGSDRangel::SWGChannelSettings *swgChannelSettings, const RadioClockSettings& settings, bool force diff --git a/plugins/channelrx/radioclock/radioclockbaseband.cpp b/plugins/channelrx/radioclock/radioclockbaseband.cpp index 03d3ceb2e..90540fdf4 100644 --- a/plugins/channelrx/radioclock/radioclockbaseband.cpp +++ b/plugins/channelrx/radioclock/radioclockbaseband.cpp @@ -136,7 +136,7 @@ bool RadioClockBaseband::handleMessage(const Message& cmd) MsgConfigureRadioClockBaseband& cfg = (MsgConfigureRadioClockBaseband&) cmd; qDebug() << "RadioClockBaseband::handleMessage: MsgConfigureRadioClockBaseband"; - applySettings(cfg.getSettings(), cfg.getForce()); + applySettings(cfg.getSettingsKeys(), cfg.getSettings(), cfg.getForce()); return true; } @@ -156,17 +156,21 @@ bool RadioClockBaseband::handleMessage(const Message& cmd) } } -void RadioClockBaseband::applySettings(const RadioClockSettings& settings, bool force) +void RadioClockBaseband::applySettings(const QStringList& settingsKeys, const RadioClockSettings& settings, bool force) { - if ((settings.m_inputFrequencyOffset != m_settings.m_inputFrequencyOffset) || force) + if ((settingsKeys.contains("inputFrequencyOffset") && settings.m_inputFrequencyOffset != m_settings.m_inputFrequencyOffset) || force) { m_channelizer->setChannelization(RadioClockSettings::RADIOCLOCK_CHANNEL_SAMPLE_RATE, settings.m_inputFrequencyOffset); m_sink.applyChannelSettings(m_channelizer->getChannelSampleRate(), m_channelizer->getChannelFrequencyOffset()); } - m_sink.applySettings(settings, force); + m_sink.applySettings(settingsKeys, settings, force); - m_settings = settings; + if (force) { + m_settings = settings; + } else { + m_settings.applySettings(settingsKeys, settings); + } } void RadioClockBaseband::setBasebandSampleRate(int sampleRate) diff --git a/plugins/channelrx/radioclock/radioclockbaseband.h b/plugins/channelrx/radioclock/radioclockbaseband.h index 410362880..e200ef336 100644 --- a/plugins/channelrx/radioclock/radioclockbaseband.h +++ b/plugins/channelrx/radioclock/radioclockbaseband.h @@ -44,20 +44,23 @@ public: public: const RadioClockSettings& getSettings() const { return m_settings; } + const QStringList& getSettingsKeys() const { return m_settingsKeys; } bool getForce() const { return m_force; } - static MsgConfigureRadioClockBaseband* create(const RadioClockSettings& settings, bool force) + static MsgConfigureRadioClockBaseband* create(const QStringList& settingsKeys, const RadioClockSettings& settings, bool force) { - return new MsgConfigureRadioClockBaseband(settings, force); + return new MsgConfigureRadioClockBaseband(settingsKeys, settings, force); } private: RadioClockSettings m_settings; + QStringList m_settingsKeys; bool m_force; - MsgConfigureRadioClockBaseband(const RadioClockSettings& settings, bool force) : + MsgConfigureRadioClockBaseband(const QStringList& settingsKeys, const RadioClockSettings& settings, bool force) : Message(), m_settings(settings), + m_settingsKeys(settingsKeys), m_force(force) { } }; @@ -91,7 +94,7 @@ private: QRecursiveMutex m_mutex; bool handleMessage(const Message& cmd); - void applySettings(const RadioClockSettings& settings, bool force = false); + void applySettings(const QStringList& settingsKeys, const RadioClockSettings& settings, bool force = false); private slots: void handleInputMessages(); diff --git a/plugins/channelrx/radioclock/radioclockgui.cpp b/plugins/channelrx/radioclock/radioclockgui.cpp index a21d19e96..b1dbe3a9b 100644 --- a/plugins/channelrx/radioclock/radioclockgui.cpp +++ b/plugins/channelrx/radioclock/radioclockgui.cpp @@ -52,7 +52,7 @@ void RadioClockGUI::resetToDefaults() { m_settings.resetToDefaults(); displaySettings(); - applySettings(true); + applySettings(QStringList(), true); } QByteArray RadioClockGUI::serialize() const @@ -64,7 +64,7 @@ bool RadioClockGUI::deserialize(const QByteArray& data) { if(m_settings.deserialize(data)) { displaySettings(); - applySettings(true); + applySettings(QStringList(), true); return true; } else { resetToDefaults(); @@ -155,7 +155,7 @@ void RadioClockGUI::calcOffset() m_channelMarker.setCenterFrequency(offset); m_settings.m_inputFrequencyOffset = m_channelMarker.getCenterFrequency(); updateAbsoluteCenterFrequency(); - applySettings(); + applySettings(QStringList("inputFrequencyOffset")); } } @@ -190,7 +190,7 @@ void RadioClockGUI::channelMarkerChangedByCursor() ui->deltaFrequency->blockSignals(false); updateAbsoluteCenterFrequency(); - applySettings(); + applySettings(QStringList({"inputFrequencyOffset", "frequency"})); } void RadioClockGUI::channelMarkerHighlightedByCursor() @@ -219,7 +219,7 @@ void RadioClockGUI::on_frequencyMode_currentIndexChanged(int index) ui->deltaFrequency->blockSignals(false); updateAbsoluteCenterFrequency(); - applySettings(); + applySettings(QStringList({"frequencyMode"})); } void RadioClockGUI::on_deltaFrequency_changed(qint64 value) @@ -240,7 +240,7 @@ void RadioClockGUI::on_deltaFrequency_changed(qint64 value) m_channelMarker.setCenterFrequency(offset); m_settings.m_inputFrequencyOffset = m_channelMarker.getCenterFrequency(); updateAbsoluteCenterFrequency(); - applySettings(); + applySettings(QStringList({"inputFrequencyOffset"})); } void RadioClockGUI::on_rfBW_valueChanged(int value) @@ -248,27 +248,27 @@ void RadioClockGUI::on_rfBW_valueChanged(int value) ui->rfBWText->setText(QString("%1 Hz").arg(value)); m_channelMarker.setBandwidth(value); m_settings.m_rfBandwidth = value; - applySettings(); + applySettings(QStringList({"rfBandwidth"})); } void RadioClockGUI::on_threshold_valueChanged(int value) { ui->thresholdText->setText(QString("%1 dB").arg(value)); m_settings.m_threshold = value; - applySettings(); + applySettings(QStringList({"threshold"})); } void RadioClockGUI::on_modulation_currentIndexChanged(int index) { m_settings.m_modulation = (RadioClockSettings::Modulation)index; - applySettings(); + applySettings(QStringList({"modulation"})); } void RadioClockGUI::on_timezone_currentIndexChanged(int index) { m_settings.m_timezone = (RadioClockSettings::DisplayTZ)index; displayDateTime(); - applySettings(); + applySettings(QStringList({"timezone"})); } void RadioClockGUI::onWidgetRolled(QWidget* widget, bool rollDown) @@ -277,7 +277,7 @@ void RadioClockGUI::onWidgetRolled(QWidget* widget, bool rollDown) (void) rollDown; getRollupContents()->saveState(m_rollupState); - applySettings(); + applySettings(QStringList()); } void RadioClockGUI::onMenuDialogCalled(const QPoint &p) @@ -322,7 +322,8 @@ void RadioClockGUI::onMenuDialogCalled(const QPoint &p) updateIndexLabel(); } - applySettings(); + applySettings(QStringList({"rgbColor", "title", "useReverseAPI", "reverseAPIAddress", + "reverseAPIPort", "reverseAPIDeviceIndex", "reverseAPIChannelIndex", "streamIndex"})); } resetContextMenuType(); @@ -390,7 +391,7 @@ RadioClockGUI::RadioClockGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Bas displaySettings(); makeUIConnections(); - applySettings(true); + applySettings(QStringList(), true); DialPopup::addPopupsToChildDials(this); m_resizer.enableChildMouseTracking(); } @@ -405,11 +406,11 @@ void RadioClockGUI::blockApplySettings(bool block) m_doApplySettings = !block; } -void RadioClockGUI::applySettings(bool force) +void RadioClockGUI::applySettings(const QStringList& settingsKeys, bool force) { if (m_doApplySettings) { - RadioClock::MsgConfigureRadioClock* message = RadioClock::MsgConfigureRadioClock::create( m_settings, force); + RadioClock::MsgConfigureRadioClock* message = RadioClock::MsgConfigureRadioClock::create(settingsKeys, m_settings, force); m_radioClock->getInputMessageQueue()->push(message); } } diff --git a/plugins/channelrx/radioclock/radioclockgui.h b/plugins/channelrx/radioclock/radioclockgui.h index a17d01ff7..122335e58 100644 --- a/plugins/channelrx/radioclock/radioclockgui.h +++ b/plugins/channelrx/radioclock/radioclockgui.h @@ -88,7 +88,7 @@ private: virtual ~RadioClockGUI(); void blockApplySettings(bool block); - void applySettings(bool force = false); + void applySettings(const QStringList& settingsKeys, bool force = false); void displaySettings(); bool handleMessage(const Message& message); void makeUIConnections(); diff --git a/plugins/channelrx/radioclock/radioclocksink.cpp b/plugins/channelrx/radioclock/radioclocksink.cpp index b23b3e05c..77fa9cbce 100644 --- a/plugins/channelrx/radioclock/radioclocksink.cpp +++ b/plugins/channelrx/radioclock/radioclocksink.cpp @@ -47,9 +47,9 @@ RadioClockSink::RadioClockSink() : m_zeroCount(0), m_sampleBufferIndex(0), m_gotMarker(false) -{ +{ m_phaseDiscri.setFMScaling(RadioClockSettings::RADIOCLOCK_CHANNEL_SAMPLE_RATE / (2.0f * 20.0/M_PI)); - applySettings(m_settings, true); + applySettings(QStringList(), m_settings, true); applyChannelSettings(m_channelSampleRate, m_channelFrequencyOffset, true); for (int i = 0; i < RadioClockSettings::m_scopeStreams; i++) { @@ -999,27 +999,23 @@ void RadioClockSink::applyChannelSettings(int channelSampleRate, int channelFreq m_channelFrequencyOffset = channelFrequencyOffset; } -void RadioClockSink::applySettings(const RadioClockSettings& settings, bool force) +void RadioClockSink::applySettings(const QStringList& settingsKeys, const RadioClockSettings& settings, bool force) { - qDebug() << "RadioClockSink::applySettings:" - << " m_rfBandwidth: " << settings.m_rfBandwidth - << " m_threshold: " << settings.m_threshold - << " m_modulation: " << settings.m_modulation - << " force: " << force; + qDebug() << "RadioClockSink::applySettings:" << settings.getDebugString(settingsKeys, force); - if ((settings.m_rfBandwidth != m_settings.m_rfBandwidth) || force) + if ((settingsKeys.contains("rfBandwidth") && (settings.m_rfBandwidth != m_settings.m_rfBandwidth)) || force) { m_interpolator.create(16, m_channelSampleRate, settings.m_rfBandwidth / 2.2); m_interpolatorDistance = (Real) m_channelSampleRate / (Real) RadioClockSettings::RADIOCLOCK_CHANNEL_SAMPLE_RATE; m_interpolatorDistanceRemain = m_interpolatorDistance; } - if ((settings.m_threshold != m_settings.m_threshold) || force) + if ((settingsKeys.contains("threshold") && (settings.m_threshold != m_settings.m_threshold)) || force) { m_linearThreshold = CalcDb::powerFromdB(-settings.m_threshold); } - if ((settings.m_modulation != m_settings.m_modulation) || force) + if ((settingsKeys.contains("modulation") && (settings.m_modulation != m_settings.m_modulation)) || force) { m_gotMinuteMarker = false; m_lowCount = 0; @@ -1032,5 +1028,9 @@ void RadioClockSink::applySettings(const RadioClockSettings& settings, bool forc } } - m_settings = settings; + if (force) { + m_settings = settings; + } else { + m_settings.applySettings(settingsKeys, settings); + } } diff --git a/plugins/channelrx/radioclock/radioclocksink.h b/plugins/channelrx/radioclock/radioclocksink.h index 316cb9ecd..8088411c6 100644 --- a/plugins/channelrx/radioclock/radioclocksink.h +++ b/plugins/channelrx/radioclock/radioclocksink.h @@ -49,7 +49,7 @@ public: void setScopeSink(ScopeVis* scopeSink); void applyChannelSettings(int channelSampleRate, int channelFrequencyOffset, bool force = false); - void applySettings(const RadioClockSettings& settings, bool force = false); + void applySettings(const QStringList& settingsKeys, const RadioClockSettings& settings, bool force = false); void setMessageQueueToChannel(MessageQueue *messageQueue) { m_messageQueueToChannel = messageQueue; } void setChannel(ChannelAPI *channel) { m_channel = channel; } diff --git a/plugins/channelrx/remotesink/remotesink.cpp b/plugins/channelrx/remotesink/remotesink.cpp index 7131d3bb1..82a83477e 100644 --- a/plugins/channelrx/remotesink/remotesink.cpp +++ b/plugins/channelrx/remotesink/remotesink.cpp @@ -60,7 +60,7 @@ RemoteSink::RemoteSink(DeviceAPI *deviceAPI) : { setObjectName(m_channelId); updateWithDeviceData(); - applySettings(m_settings, true); + applySettings(QStringList(), m_settings, true); m_deviceAPI->addChannelSink(this); m_deviceAPI->addChannelSinkAPI(this); @@ -145,7 +145,7 @@ void RemoteSink::start() m_basebandSink->setBasebandSampleRate(m_basebandSampleRate); } - RemoteSinkBaseband::MsgConfigureRemoteSinkBaseband *msg = RemoteSinkBaseband::MsgConfigureRemoteSinkBaseband::create(m_settings, true); + RemoteSinkBaseband::MsgConfigureRemoteSinkBaseband *msg = RemoteSinkBaseband::MsgConfigureRemoteSinkBaseband::create(QStringList(), m_settings, true); m_basebandSink->getInputMessageQueue()->push(msg); m_running = true; @@ -170,7 +170,7 @@ bool RemoteSink::handleMessage(const Message& cmd) { MsgConfigureRemoteSink& cfg = (MsgConfigureRemoteSink&) cmd; qDebug() << "RemoteSink::handleMessage: MsgConfigureRemoteSink"; - applySettings(cfg.getSettings(), cfg.getForce()); + applySettings(cfg.getSettingsKeys(), cfg.getSettings(), cfg.getForce()); return true; } @@ -212,48 +212,43 @@ bool RemoteSink::deserialize(const QByteArray& data) (void) data; if (m_settings.deserialize(data)) { - MsgConfigureRemoteSink *msg = MsgConfigureRemoteSink::create(m_settings, true); + MsgConfigureRemoteSink *msg = MsgConfigureRemoteSink::create(QStringList(), m_settings, true); m_inputMessageQueue.push(msg); return true; } else { m_settings.resetToDefaults(); - MsgConfigureRemoteSink *msg = MsgConfigureRemoteSink::create(m_settings, true); + MsgConfigureRemoteSink *msg = MsgConfigureRemoteSink::create(QStringList(), m_settings, true); m_inputMessageQueue.push(msg); return false; } } -void RemoteSink::applySettings(const RemoteSinkSettings& settings, bool force) +void RemoteSink::applySettings(const QStringList& settingsKeys, const RemoteSinkSettings& settings, bool force) { - qDebug() << "RemoteSink::applySettings:" - << " m_nbFECBlocks: " << settings.m_nbFECBlocks - << " m_dataAddress: " << settings.m_dataAddress - << " m_dataPort: " << settings.m_dataPort - << " m_streamIndex: " << settings.m_streamIndex - << " force: " << force; + qDebug() << "RemoteSink::applySettings:" << settings.getDebugString(settingsKeys, force); QList reverseAPIKeys; bool frequencyOffsetChange = false; - if ((m_settings.m_nbFECBlocks != settings.m_nbFECBlocks) || force) { + if ((settingsKeys.contains("nbFECBlocks") && (m_settings.m_nbFECBlocks != settings.m_nbFECBlocks)) || force) { reverseAPIKeys.append("nbFECBlocks"); } - if ((m_settings.m_dataAddress != settings.m_dataAddress) || force) { + if ((settingsKeys.contains("dataAddress") && (m_settings.m_dataAddress != settings.m_dataAddress)) || force) { reverseAPIKeys.append("dataAddress"); } - if ((m_settings.m_dataPort != settings.m_dataPort) || force) { + if ((settingsKeys.contains("dataPort") && (m_settings.m_dataPort != settings.m_dataPort)) || force) { reverseAPIKeys.append("dataPort"); } - if ((m_settings.m_rgbColor != settings.m_rgbColor) || force) { + if ((settingsKeys.contains("rgbColor") && (m_settings.m_rgbColor != settings.m_rgbColor)) || force) { reverseAPIKeys.append("rgbColor"); } - if ((m_settings.m_title != settings.m_title) || force) { + if ((settingsKeys.contains("title") && (m_settings.m_title != settings.m_title)) || force) { reverseAPIKeys.append("title"); } - if ((m_settings.m_deviceCenterFrequency != settings.m_deviceCenterFrequency) || force) + if ((settingsKeys.contains("deviceCenterFrequency") && (m_settings.m_deviceCenterFrequency != settings.m_deviceCenterFrequency)) || force) { reverseAPIKeys.append("deviceCenterFrequency"); @@ -264,19 +259,19 @@ void RemoteSink::applySettings(const RemoteSinkSettings& settings, bool force) } } - if ((m_settings.m_log2Decim != settings.m_log2Decim) || force) + if ((settingsKeys.contains("log2Decim") && (m_settings.m_log2Decim != settings.m_log2Decim)) || force) { reverseAPIKeys.append("log2Decim"); frequencyOffsetChange = true; } - if ((m_settings.m_filterChainHash != settings.m_filterChainHash) || force) + if ((settingsKeys.contains("filterChainHash") && (m_settings.m_filterChainHash != settings.m_filterChainHash)) || force) { reverseAPIKeys.append("filterChainHash"); frequencyOffsetChange = true; } - if ((m_settings.m_nbTxBytes != settings.m_nbTxBytes) || force) + if ((settingsKeys.contains("nbTxBytes") && (m_settings.m_nbTxBytes != settings.m_nbTxBytes)) || force) { reverseAPIKeys.append("nbTxBytes"); stop(); @@ -284,7 +279,7 @@ void RemoteSink::applySettings(const RemoteSinkSettings& settings, bool force) m_basebandSink->setNbTxBytes(settings.m_nbTxBytes); } - if (m_settings.m_streamIndex != settings.m_streamIndex) + if ((settingsKeys.contains("streamIndex") && (m_settings.m_streamIndex != settings.m_streamIndex)) || force) { if (m_deviceAPI->getSampleMIMO()) // change of stream is possible for MIMO devices only { @@ -301,17 +296,17 @@ void RemoteSink::applySettings(const RemoteSinkSettings& settings, bool force) if (m_running) { - RemoteSinkBaseband::MsgConfigureRemoteSinkBaseband *msg = RemoteSinkBaseband::MsgConfigureRemoteSinkBaseband::create(settings, force); + RemoteSinkBaseband::MsgConfigureRemoteSinkBaseband *msg = RemoteSinkBaseband::MsgConfigureRemoteSinkBaseband::create(settingsKeys, settings, force); m_basebandSink->getInputMessageQueue()->push(msg); } - if ((settings.m_useReverseAPI) && (reverseAPIKeys.size() != 0)) + if (( settingsKeys.contains("useReverseAPI") && (m_settings.m_useReverseAPI != settings.m_useReverseAPI)) && settings.m_useReverseAPI && (reverseAPIKeys.size() != 0)) { - bool fullUpdate = ((m_settings.m_useReverseAPI != settings.m_useReverseAPI) && settings.m_useReverseAPI) || - (m_settings.m_reverseAPIAddress != settings.m_reverseAPIAddress) || - (m_settings.m_reverseAPIPort != settings.m_reverseAPIPort) || - (m_settings.m_reverseAPIDeviceIndex != settings.m_reverseAPIDeviceIndex) || - (m_settings.m_reverseAPIChannelIndex != settings.m_reverseAPIChannelIndex); + bool fullUpdate = ((settingsKeys.contains("useReverseAPI") && (m_settings.m_useReverseAPI != settings.m_useReverseAPI)) && settings.m_useReverseAPI) || + (settingsKeys.contains("reverseAPIAddress") && (m_settings.m_reverseAPIAddress != settings.m_reverseAPIAddress)) || + (settingsKeys.contains("reverseAPIPort") && (m_settings.m_reverseAPIPort != settings.m_reverseAPIPort)) || + (settingsKeys.contains("reverseAPIDeviceIndex") && (m_settings.m_reverseAPIDeviceIndex != settings.m_reverseAPIDeviceIndex)) || + (settingsKeys.contains("reverseAPIChannelIndex") && (m_settings.m_reverseAPIChannelIndex != settings.m_reverseAPIChannelIndex)); webapiReverseSendSettings(reverseAPIKeys, settings, fullUpdate || force); } @@ -385,14 +380,14 @@ int RemoteSink::webapiSettingsPutPatch( RemoteSinkSettings settings = m_settings; webapiUpdateChannelSettings(settings, channelSettingsKeys, response); - MsgConfigureRemoteSink *msg = MsgConfigureRemoteSink::create(settings, force); + MsgConfigureRemoteSink *msg = MsgConfigureRemoteSink::create(channelSettingsKeys, settings, force); m_inputMessageQueue.push(msg); qDebug("RemoteSink::webapiSettingsPutPatch: forward to GUI: %p", m_guiMessageQueue); if (m_guiMessageQueue) // forward to GUI if any { - MsgConfigureRemoteSink *msgToGUI = MsgConfigureRemoteSink::create(settings, force); + MsgConfigureRemoteSink *msgToGUI = MsgConfigureRemoteSink::create(channelSettingsKeys, settings, force); m_guiMessageQueue->push(msgToGUI); } diff --git a/plugins/channelrx/remotesink/remotesink.h b/plugins/channelrx/remotesink/remotesink.h index 5c4d2cdf1..9a6a73a9c 100644 --- a/plugins/channelrx/remotesink/remotesink.h +++ b/plugins/channelrx/remotesink/remotesink.h @@ -45,20 +45,23 @@ public: public: const RemoteSinkSettings& getSettings() const { return m_settings; } + const QStringList& getSettingsKeys() const { return m_settingsKeys; } bool getForce() const { return m_force; } - static MsgConfigureRemoteSink* create(const RemoteSinkSettings& settings, bool force) + static MsgConfigureRemoteSink* create(const QStringList& settingsKeys, const RemoteSinkSettings& settings, bool force) { - return new MsgConfigureRemoteSink(settings, force); + return new MsgConfigureRemoteSink(settingsKeys, settings, force); } private: RemoteSinkSettings m_settings; + QStringList m_settingsKeys; bool m_force; - MsgConfigureRemoteSink(const RemoteSinkSettings& settings, bool force) : + MsgConfigureRemoteSink(const QStringList& settingsKeys, const RemoteSinkSettings& settings, bool force) : Message(), m_settings(settings), + m_settingsKeys(settingsKeys), m_force(force) { } }; @@ -139,7 +142,7 @@ private: QNetworkRequest m_networkRequest; virtual bool handleMessage(const Message& cmd); - void applySettings(const RemoteSinkSettings& settings, bool force = false); + void applySettings(const QStringList& settingsKeys, const RemoteSinkSettings& settings, bool force = false); static void validateFilterChainHash(RemoteSinkSettings& settings); void calculateFrequencyOffset(); void updateWithDeviceData(); diff --git a/plugins/channelrx/remotesink/remotesinkbaseband.cpp b/plugins/channelrx/remotesink/remotesinkbaseband.cpp index f68d84fb5..9eb750499 100644 --- a/plugins/channelrx/remotesink/remotesinkbaseband.cpp +++ b/plugins/channelrx/remotesink/remotesinkbaseband.cpp @@ -127,7 +127,7 @@ bool RemoteSinkBaseband::handleMessage(const Message& cmd) MsgConfigureRemoteSinkBaseband& cfg = (MsgConfigureRemoteSinkBaseband&) cmd; qDebug() << "RemoteSinkBaseband::handleMessage: MsgConfigureRemoteSinkBaseband"; - applySettings(cfg.getSettings(), cfg.getForce()); + applySettings(cfg.getSettingsKeys(), cfg.getSettings(), cfg.getForce()); return true; } @@ -149,21 +149,23 @@ bool RemoteSinkBaseband::handleMessage(const Message& cmd) } } -void RemoteSinkBaseband::applySettings(const RemoteSinkSettings& settings, bool force) +void RemoteSinkBaseband::applySettings(const QStringList& settingsKeys, const RemoteSinkSettings& settings, bool force) { - qDebug() << "RemoteSinkBaseband::applySettings:" - << "m_log2Decim:" << settings.m_log2Decim - << "m_filterChainHash:" << settings.m_filterChainHash - << " force: " << force; + qDebug() << "RemoteSinkBaseband::applySettings:" << settings.getDebugString(settingsKeys, force); - if ((settings.m_log2Decim != m_settings.m_log2Decim) - || (settings.m_filterChainHash != m_settings.m_filterChainHash) || force) + if ((settingsKeys.contains("log2Decim") && (settings.m_log2Decim != m_settings.m_log2Decim)) + || (settingsKeys.contains("filterChainHash") && (settings.m_filterChainHash != m_settings.m_filterChainHash)) || force) { m_channelizer->setDecimation(settings.m_log2Decim, settings.m_filterChainHash); } - m_sink.applySettings(settings, force); - m_settings = settings; + m_sink.applySettings(settingsKeys, settings, force); + + if (force) { + m_settings = settings; + } else { + m_settings.applySettings(settingsKeys, settings); + } } int RemoteSinkBaseband::getChannelSampleRate() const diff --git a/plugins/channelrx/remotesink/remotesinkbaseband.h b/plugins/channelrx/remotesink/remotesinkbaseband.h index 6b081a6f0..22b2a513d 100644 --- a/plugins/channelrx/remotesink/remotesinkbaseband.h +++ b/plugins/channelrx/remotesink/remotesinkbaseband.h @@ -40,20 +40,23 @@ public: public: const RemoteSinkSettings& getSettings() const { return m_settings; } + const QStringList& getSettingsKeys() const { return m_settingsKeys; } bool getForce() const { return m_force; } - static MsgConfigureRemoteSinkBaseband* create(const RemoteSinkSettings& settings, bool force) + static MsgConfigureRemoteSinkBaseband* create(const QStringList& settingsKeys, const RemoteSinkSettings& settings, bool force) { - return new MsgConfigureRemoteSinkBaseband(settings, force); + return new MsgConfigureRemoteSinkBaseband(settingsKeys, settings, force); } private: RemoteSinkSettings m_settings; + QStringList m_settingsKeys; bool m_force; - MsgConfigureRemoteSinkBaseband(const RemoteSinkSettings& settings, bool force) : + MsgConfigureRemoteSinkBaseband(const QStringList& settingsKeys, const RemoteSinkSettings& settings, bool force) : Message(), m_settings(settings), + m_settingsKeys(settingsKeys), m_force(force) { } }; @@ -86,7 +89,7 @@ private: QRecursiveMutex m_mutex; bool handleMessage(const Message& cmd); - void applySettings(const RemoteSinkSettings& settings, bool force = false); + void applySettings(const QStringList& settingsKeys, const RemoteSinkSettings& settings, bool force = false); private slots: void handleInputMessages(); diff --git a/plugins/channelrx/remotesink/remotesinkgui.cpp b/plugins/channelrx/remotesink/remotesinkgui.cpp index 94247a47d..c7675710c 100644 --- a/plugins/channelrx/remotesink/remotesinkgui.cpp +++ b/plugins/channelrx/remotesink/remotesinkgui.cpp @@ -44,7 +44,7 @@ void RemoteSinkGUI::resetToDefaults() { m_settings.resetToDefaults(); displaySettings(); - applySettings(true); + applySettings(QStringList(), true); } QByteArray RemoteSinkGUI::serialize() const @@ -56,7 +56,7 @@ bool RemoteSinkGUI::deserialize(const QByteArray& data) { if(m_settings.deserialize(data)) { displaySettings(); - applySettings(true); + applySettings(QStringList(), true); return true; } else { resetToDefaults(); @@ -131,7 +131,7 @@ RemoteSinkGUI::RemoteSinkGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Bas displaySettings(); makeUIConnections(); - applySettings(true); + applySettings(QStringList(), true); DialPopup::addPopupsToChildDials(this); m_resizer.enableChildMouseTracking(); } @@ -146,13 +146,13 @@ void RemoteSinkGUI::blockApplySettings(bool block) m_doApplySettings = !block; } -void RemoteSinkGUI::applySettings(bool force) +void RemoteSinkGUI::applySettings(const QStringList& settingsKeys, bool force) { if (m_doApplySettings) { setTitleColor(m_channelMarker.getColor()); - RemoteSink::MsgConfigureRemoteSink* message = RemoteSink::MsgConfigureRemoteSink::create(m_settings, force); + RemoteSink::MsgConfigureRemoteSink* message = RemoteSink::MsgConfigureRemoteSink::create(settingsKeys, m_settings, force); m_remoteSink->getInputMessageQueue()->push(message); } } @@ -228,7 +228,7 @@ void RemoteSinkGUI::onWidgetRolled(QWidget* widget, bool rollDown) (void) rollDown; getRollupContents()->saveState(m_rollupState); - applySettings(); + applySettings(QStringList()); } void RemoteSinkGUI::onMenuDialogCalled(const QPoint &p) @@ -273,7 +273,9 @@ void RemoteSinkGUI::onMenuDialogCalled(const QPoint &p) updateIndexLabel(); } - applySettings(); + applySettings(QStringList({"color", "title", "useReverseAPI", "reverseAPIAddress", + "reverseAPIPort", "reverseAPIDeviceIndex", "reverseAPIChannelIndex", + "streamIndex"})); } resetContextMenuType(); @@ -294,7 +296,7 @@ void RemoteSinkGUI::on_position_valueChanged(int value) void RemoteSinkGUI::on_dataAddress_returnPressed() { m_settings.m_dataAddress = ui->dataAddress->text(); - applySettings(); + applySettings(QStringList({"dataAddress"})); } void RemoteSinkGUI::on_dataPort_returnPressed() @@ -311,7 +313,7 @@ void RemoteSinkGUI::on_dataPort_returnPressed() m_settings.m_dataPort = dataPort; } - applySettings(); + applySettings(QStringList({"dataPort"})); } void RemoteSinkGUI::on_dataApplyButton_clicked(bool checked) @@ -327,7 +329,7 @@ void RemoteSinkGUI::on_dataApplyButton_clicked(bool checked) m_settings.m_dataPort = udpDataPort; } - applySettings(); + applySettings(QStringList({"dataAddress", "dataPort"})); } void RemoteSinkGUI::on_nbFECBlocks_valueChanged(int value) @@ -338,13 +340,13 @@ void RemoteSinkGUI::on_nbFECBlocks_valueChanged(int value) QString s = QString::number(nbOriginalBlocks + nbFECBlocks, 'f', 0); QString s1 = QString::number(nbFECBlocks, 'f', 0); ui->nominalNbBlocksText->setText(tr("%1/%2").arg(s).arg(s1)); - applySettings(); + applySettings(QStringList({"nbFECBlocks"})); } void RemoteSinkGUI::on_nbTxBytes_currentIndexChanged(int index) { m_settings.m_nbTxBytes = 1 << index; - applySettings(); + applySettings(QStringList({"nbTxBytes"})); } void RemoteSinkGUI::applyDecimation() @@ -370,7 +372,7 @@ void RemoteSinkGUI::applyPosition() updateAbsoluteCenterFrequency(); displayRateAndShift(); - applySettings(); + applySettings(QStringList()); } void RemoteSinkGUI::tick() diff --git a/plugins/channelrx/remotesink/remotesinkgui.h b/plugins/channelrx/remotesink/remotesinkgui.h index cf6b447d5..bcccea91b 100644 --- a/plugins/channelrx/remotesink/remotesinkgui.h +++ b/plugins/channelrx/remotesink/remotesinkgui.h @@ -85,7 +85,7 @@ private: virtual ~RemoteSinkGUI(); void blockApplySettings(bool block); - void applySettings(bool force = false); + void applySettings(const QStringList& settingsKeys, bool force = false); void displaySettings(); void displayRateAndShift(); bool handleMessage(const Message& message); diff --git a/plugins/channelrx/remotesink/remotesinksink.cpp b/plugins/channelrx/remotesink/remotesinksink.cpp index 6c9a4d4e9..fbe19e9f3 100644 --- a/plugins/channelrx/remotesink/remotesinksink.cpp +++ b/plugins/channelrx/remotesink/remotesinksink.cpp @@ -44,7 +44,7 @@ RemoteSinkSink::RemoteSinkSink() : m_dataPort(9090) { qDebug("RemoteSinkSink::RemoteSinkSink"); - applySettings(m_settings, true); + applySettings(QStringList(), m_settings, true); } RemoteSinkSink::~RemoteSinkSink() @@ -222,33 +222,32 @@ void RemoteSinkSink::feed(const SampleVector::const_iterator& begin, const Sampl } } -void RemoteSinkSink::applySettings(const RemoteSinkSettings& settings, bool force) +void RemoteSinkSink::applySettings(const QStringList& settingsKeys, const RemoteSinkSettings& settings, bool force) { - qDebug() << "RemoteSinkSink::applySettings:" - << " m_nbFECBlocks: " << settings.m_nbFECBlocks - << " m_dataAddress: " << settings.m_dataAddress - << " m_dataPort: " << settings.m_dataPort - << " m_streamIndex: " << settings.m_streamIndex - << " force: " << force; + qDebug() << "RemoteSinkSink::applySettings:" << settings.getDebugString(settingsKeys, force); - if ((m_settings.m_dataAddress != settings.m_dataAddress) || force) { + if ((settingsKeys.contains("dataAddress") && (m_settings.m_dataAddress != settings.m_dataAddress)) || force) { m_dataAddress = settings.m_dataAddress; } - if ((m_settings.m_dataPort != settings.m_dataPort) || force) { + if ((settingsKeys.contains("dataPort") && (m_settings.m_dataPort != settings.m_dataPort)) || force) { m_dataPort = settings.m_dataPort; } - if ((m_settings.m_log2Decim != settings.m_log2Decim) - || (m_settings.m_filterChainHash != settings.m_filterChainHash) - || (m_settings.m_nbFECBlocks != settings.m_nbFECBlocks) || force) + if ((settingsKeys.contains("log2Decim") && (m_settings.m_log2Decim != settings.m_log2Decim)) + || (settingsKeys.contains("filterChainHash") && (m_settings.m_filterChainHash != settings.m_filterChainHash)) + || (settingsKeys.contains("nbFECBlocks") && (m_settings.m_nbFECBlocks != settings.m_nbFECBlocks)) || force) { double shiftFactor = HBFilterChainConverter::getShiftFactor(settings.m_log2Decim, settings.m_filterChainHash); m_frequencyOffset = round(shiftFactor*m_basebandSampleRate); setNbBlocksFEC(settings.m_nbFECBlocks); } - m_settings = settings; + if (force) { + m_settings = settings; + } else { + m_settings.applySettings(settingsKeys, settings); + } } void RemoteSinkSink::applyBasebandSampleRate(uint32_t sampleRate) diff --git a/plugins/channelrx/remotesink/remotesinksink.h b/plugins/channelrx/remotesink/remotesinksink.h index 2347eab19..ec7894972 100644 --- a/plugins/channelrx/remotesink/remotesinksink.h +++ b/plugins/channelrx/remotesink/remotesinksink.h @@ -45,7 +45,7 @@ public: void init(); void setNbTxBytes(uint32_t nbTxBytes) { m_nbTxBytes = nbTxBytes; } - void applySettings(const RemoteSinkSettings& settings, bool force = false); + void applySettings(const QStringList& settingsKeys, const RemoteSinkSettings& settings, bool force = false); void applyBasebandSampleRate(uint32_t sampleRate); void setDeviceCenterFrequency(uint64_t frequency) { m_deviceCenterFrequency = frequency; } void setDeviceIndex(uint32_t deviceIndex) { m_deviceIndex = deviceIndex; } diff --git a/plugins/channelrx/sigmffilesink/sigmffilesink.cpp b/plugins/channelrx/sigmffilesink/sigmffilesink.cpp index c9636fb26..08bf4e126 100644 --- a/plugins/channelrx/sigmffilesink/sigmffilesink.cpp +++ b/plugins/channelrx/sigmffilesink/sigmffilesink.cpp @@ -62,7 +62,7 @@ SigMFFileSink::SigMFFileSink(DeviceAPI *deviceAPI) : { setObjectName(m_channelId); - applySettings(m_settings, true); + applySettings(QStringList(), m_settings, true); m_deviceAPI->addChannelSink(this); m_deviceAPI->addChannelSinkAPI(this); @@ -180,7 +180,7 @@ void SigMFFileSink::start() DSPSignalNotification *dspMsg = new DSPSignalNotification(m_basebandSampleRate, m_centerFrequency); m_basebandSink->getInputMessageQueue()->push(dspMsg); - SigMFFileSinkBaseband::MsgConfigureSigMFFileSinkBaseband *msg = SigMFFileSinkBaseband::MsgConfigureSigMFFileSinkBaseband::create(m_settings, true); + SigMFFileSinkBaseband::MsgConfigureSigMFFileSinkBaseband *msg = SigMFFileSinkBaseband::MsgConfigureSigMFFileSinkBaseband::create(QStringList(), m_settings, true); m_basebandSink->getInputMessageQueue()->push(msg); if (getMessageQueueToGUI()) @@ -239,7 +239,7 @@ bool SigMFFileSink::handleMessage(const Message& cmd) { MsgConfigureSigMFFileSink& cfg = (MsgConfigureSigMFFileSink&) cmd; qDebug() << "SigMFFileSink::handleMessage: MsgConfigureSigMFFileSink"; - applySettings(cfg.getSettings(), cfg.getForce()); + applySettings(cfg.getSettingsKeys(), cfg.getSettings(), cfg.getForce()); return true; } @@ -259,14 +259,14 @@ bool SigMFFileSink::deserialize(const QByteArray& data) (void) data; if (m_settings.deserialize(data)) { - MsgConfigureSigMFFileSink *msg = MsgConfigureSigMFFileSink::create(m_settings, true); + MsgConfigureSigMFFileSink *msg = MsgConfigureSigMFFileSink::create(QStringList(), m_settings, true); m_inputMessageQueue.push(msg); return true; } else { m_settings.resetToDefaults(); - MsgConfigureSigMFFileSink *msg = MsgConfigureSigMFFileSink::create(m_settings, true); + MsgConfigureSigMFFileSink *msg = MsgConfigureSigMFFileSink::create(QStringList(), m_settings, true); m_inputMessageQueue.push(msg); return false; } @@ -320,52 +320,11 @@ DeviceSampleSource *SigMFFileSink::getLocalDevice(uint32_t index) return nullptr; } -void SigMFFileSink::applySettings(const SigMFFileSinkSettings& settings, bool force) +void SigMFFileSink::applySettings(const QStringList& settingsKeys, const SigMFFileSinkSettings& settings, bool force) { - qDebug() << "SigMFFileSink::applySettings:" - << "m_inputFrequencyOffset: " << settings.m_inputFrequencyOffset - << "m_log2Decim: " << settings.m_log2Decim - << "m_fileRecordName: " << settings.m_fileRecordName - << "m_log2RecordSampleSize: " << settings.m_log2RecordSampleSize - << "force: " << force; + qDebug() << "SigMFFileSink::applySettings:" << settings.getDebugString(settingsKeys, force); - QList reverseAPIKeys; - - if ((settings.m_inputFrequencyOffset != m_settings.m_inputFrequencyOffset) || force) { - reverseAPIKeys.append("inputFrequencyOffset"); - } - if ((settings.m_fileRecordName != m_settings.m_fileRecordName) || force) { - reverseAPIKeys.append("fileRecordName"); - } - if ((settings.m_rgbColor != m_settings.m_rgbColor) || force) { - reverseAPIKeys.append("rgbColor"); - } - if ((settings.m_title != m_settings.m_title) || force) { - reverseAPIKeys.append("title"); - } - if ((settings.m_log2Decim != m_settings.m_log2Decim) || force) { - reverseAPIKeys.append("log2Decim"); - } - if ((settings.m_spectrumSquelchMode != m_settings.m_spectrumSquelchMode) || force) { - reverseAPIKeys.append("spectrumSquelchMode"); - } - if ((settings.m_spectrumSquelch != m_settings.m_spectrumSquelch) || force) { - reverseAPIKeys.append("spectrumSquelch"); - } - if ((settings.m_preRecordTime != m_settings.m_preRecordTime) || force) { - reverseAPIKeys.append("preRecordTime"); - } - if ((settings.m_squelchPostRecordTime != m_settings.m_squelchPostRecordTime) || force) { - reverseAPIKeys.append("squelchPostRecordTime"); - } - if ((settings.m_squelchRecordingEnable != m_settings.m_squelchRecordingEnable) || force) { - reverseAPIKeys.append("squelchRecordingEnable"); - } - if ((settings.m_log2RecordSampleSize != m_settings.m_log2RecordSampleSize) || force) { - reverseAPIKeys.append("log2RecordSampleSize"); - } - - if (m_settings.m_streamIndex != settings.m_streamIndex) + if (settingsKeys.contains("streamIndex") && (m_settings.m_streamIndex != settings.m_streamIndex)) { if (m_deviceAPI->getSampleMIMO()) // change of stream is possible for MIMO devices only { @@ -376,31 +335,33 @@ void SigMFFileSink::applySettings(const SigMFFileSinkSettings& settings, bool fo m_settings.m_streamIndex = settings.m_streamIndex; // make sure ChannelAPI::getStreamIndex() is consistent emit streamIndexChanged(settings.m_streamIndex); } - - reverseAPIKeys.append("streamIndex"); } if (m_running) { - SigMFFileSinkBaseband::MsgConfigureSigMFFileSinkBaseband *msg = SigMFFileSinkBaseband::MsgConfigureSigMFFileSinkBaseband::create(settings, force); + SigMFFileSinkBaseband::MsgConfigureSigMFFileSinkBaseband *msg = SigMFFileSinkBaseband::MsgConfigureSigMFFileSinkBaseband::create(settingsKeys, settings, force); m_basebandSink->getInputMessageQueue()->push(msg); } - if ((settings.m_useReverseAPI) && (reverseAPIKeys.size() != 0)) + if ((settingsKeys.contains("useReverseAPI") && settings.m_useReverseAPI) || + (settingsKeys.contains("reverseAPIAddress") && (m_settings.m_reverseAPIAddress != settings.m_reverseAPIAddress)) || + (settingsKeys.contains("reverseAPIPort") && (m_settings.m_reverseAPIPort != settings.m_reverseAPIPort)) || + (settingsKeys.contains("reverseAPIDeviceIndex") && (m_settings.m_reverseAPIDeviceIndex != settings.m_reverseAPIDeviceIndex)) || + (settingsKeys.contains("reverseAPIChannelIndex") && (m_settings.m_reverseAPIChannelIndex != settings.m_reverseAPIChannelIndex))) { - bool fullUpdate = ((m_settings.m_useReverseAPI != settings.m_useReverseAPI) && settings.m_useReverseAPI) || - (m_settings.m_reverseAPIAddress != settings.m_reverseAPIAddress) || - (m_settings.m_reverseAPIPort != settings.m_reverseAPIPort) || - (m_settings.m_reverseAPIDeviceIndex != settings.m_reverseAPIDeviceIndex) || - (m_settings.m_reverseAPIChannelIndex != settings.m_reverseAPIChannelIndex); - webapiReverseSendSettings(reverseAPIKeys, settings, fullUpdate || force); + bool fullUpdate = ((settingsKeys.contains("useReverseAPI") && (m_settings.m_useReverseAPI != settings.m_useReverseAPI)) && settings.m_useReverseAPI) || + (settingsKeys.contains("reverseAPIAddress") && (m_settings.m_reverseAPIAddress != settings.m_reverseAPIAddress)) || + (settingsKeys.contains("reverseAPIPort") && (m_settings.m_reverseAPIPort != settings.m_reverseAPIPort)) || + (settingsKeys.contains("reverseAPIDeviceIndex") && (m_settings.m_reverseAPIDeviceIndex != settings.m_reverseAPIDeviceIndex)) || + (settingsKeys.contains("reverseAPIChannelIndex") && (m_settings.m_reverseAPIChannelIndex != settings.m_reverseAPIChannelIndex)); + webapiReverseSendSettings(settingsKeys, settings, fullUpdate || force); } QList pipes; MainCore::instance()->getMessagePipes().getMessagePipes(this, "settings", pipes); if (pipes.size() > 0) { - sendChannelSettings(pipes, reverseAPIKeys, settings, force); + sendChannelSettings(pipes, settingsKeys, settings, force); } m_settings = settings; @@ -472,13 +433,13 @@ int SigMFFileSink::webapiSettingsPutPatch( SigMFFileSinkSettings settings = m_settings; webapiUpdateChannelSettings(settings, channelSettingsKeys, response); - MsgConfigureSigMFFileSink *msg = MsgConfigureSigMFFileSink::create(settings, force); + MsgConfigureSigMFFileSink *msg = MsgConfigureSigMFFileSink::create(channelSettingsKeys, settings, force); m_inputMessageQueue.push(msg); qDebug("SigMFFileSink::webapiSettingsPutPatch: forward to GUI: %p", m_guiMessageQueue); if (m_guiMessageQueue) // forward to GUI if any { - MsgConfigureSigMFFileSink *msgToGUI = MsgConfigureSigMFFileSink::create(settings, force); + MsgConfigureSigMFFileSink *msgToGUI = MsgConfigureSigMFFileSink::create(channelSettingsKeys, settings, force); m_guiMessageQueue->push(msgToGUI); } @@ -703,7 +664,7 @@ void SigMFFileSink::webapiFormatChannelReport(SWGSDRangel::SWGChannelReport& res response.getSigMfFileSinkReport()->setRecordSize(getByteCount()); } -void SigMFFileSink::webapiReverseSendSettings(QList& channelSettingsKeys, const SigMFFileSinkSettings& settings, bool force) +void SigMFFileSink::webapiReverseSendSettings(const QList& channelSettingsKeys, const SigMFFileSinkSettings& settings, bool force) { SWGSDRangel::SWGChannelSettings *swgChannelSettings = new SWGSDRangel::SWGChannelSettings(); webapiFormatChannelSettings(channelSettingsKeys, swgChannelSettings, settings, force); @@ -730,7 +691,7 @@ void SigMFFileSink::webapiReverseSendSettings(QList& channelSettingsKey void SigMFFileSink::sendChannelSettings( const QList& pipes, - QList& channelSettingsKeys, + const QList& channelSettingsKeys, const SigMFFileSinkSettings& settings, bool force) { @@ -754,7 +715,7 @@ void SigMFFileSink::sendChannelSettings( } void SigMFFileSink::webapiFormatChannelSettings( - QList& channelSettingsKeys, + const QList& channelSettingsKeys, SWGSDRangel::SWGChannelSettings *swgChannelSettings, const SigMFFileSinkSettings& settings, bool force diff --git a/plugins/channelrx/sigmffilesink/sigmffilesink.h b/plugins/channelrx/sigmffilesink/sigmffilesink.h index 9a7f5d678..a72111c30 100644 --- a/plugins/channelrx/sigmffilesink/sigmffilesink.h +++ b/plugins/channelrx/sigmffilesink/sigmffilesink.h @@ -46,20 +46,23 @@ public: public: const SigMFFileSinkSettings& getSettings() const { return m_settings; } + const QStringList& getSettingsKeys() const { return m_settingsKeys; } bool getForce() const { return m_force; } - static MsgConfigureSigMFFileSink* create(const SigMFFileSinkSettings& settings, bool force) + static MsgConfigureSigMFFileSink* create(const QStringList& settingsKeys, const SigMFFileSinkSettings& settings, bool force) { - return new MsgConfigureSigMFFileSink(settings, force); + return new MsgConfigureSigMFFileSink(settingsKeys, settings, force); } private: SigMFFileSinkSettings m_settings; + QStringList m_settingsKeys; bool m_force; - MsgConfigureSigMFFileSink(const SigMFFileSinkSettings& settings, bool force) : + MsgConfigureSigMFFileSink(const QStringList& settingsKeys, const SigMFFileSinkSettings& settings, bool force) : Message(), m_settings(settings), + m_settingsKeys(settingsKeys), m_force(force) { } }; @@ -177,20 +180,20 @@ private: QNetworkRequest m_networkRequest; virtual bool handleMessage(const Message& cmd); - void applySettings(const SigMFFileSinkSettings& settings, bool force = false); + void applySettings(const QStringList& settingsKeys, const SigMFFileSinkSettings& settings, bool force = false); void propagateSampleRateAndFrequency(uint32_t index, uint32_t log2Decim); DeviceSampleSource *getLocalDevice(uint32_t index); void webapiFormatChannelReport(SWGSDRangel::SWGChannelReport& response); - void webapiReverseSendSettings(QList& channelSettingsKeys, const SigMFFileSinkSettings& settings, bool force); + void webapiReverseSendSettings(const QList& channelSettingsKeys, const SigMFFileSinkSettings& settings, bool force); void sendChannelSettings( const QList& pipes, - QList& channelSettingsKeys, + const QList& channelSettingsKeys, const SigMFFileSinkSettings& settings, bool force ); void webapiFormatChannelSettings( - QList& channelSettingsKeys, + const QList& channelSettingsKeys, SWGSDRangel::SWGChannelSettings *swgChannelSettings, const SigMFFileSinkSettings& settings, bool force diff --git a/plugins/channelrx/sigmffilesink/sigmffilesinkbaseband.cpp b/plugins/channelrx/sigmffilesink/sigmffilesinkbaseband.cpp index fa4546594..111f93d88 100644 --- a/plugins/channelrx/sigmffilesink/sigmffilesinkbaseband.cpp +++ b/plugins/channelrx/sigmffilesink/sigmffilesinkbaseband.cpp @@ -156,7 +156,7 @@ bool SigMFFileSinkBaseband::handleMessage(const Message& cmd) MsgConfigureSigMFFileSinkBaseband& cfg = (MsgConfigureSigMFFileSinkBaseband&) cmd; qDebug() << "SigMFFileSinkBaseband::handleMessage: MsgConfigureSigMFFileSinkBaseband"; - applySettings(cfg.getSettings(), cfg.getForce()); + applySettings(cfg.getSettingsKeys(), cfg.getSettings(), cfg.getForce()); return true; } @@ -200,17 +200,12 @@ bool SigMFFileSinkBaseband::handleMessage(const Message& cmd) } } -void SigMFFileSinkBaseband::applySettings(const SigMFFileSinkSettings& settings, bool force) +void SigMFFileSinkBaseband::applySettings(const QStringList& settingsKeys, const SigMFFileSinkSettings& settings, bool force) { - qDebug() << "SigMFFileSinkBaseband::applySettings:" - << "m_log2Decim:" << settings.m_log2Decim - << "m_inputFrequencyOffset:" << settings.m_inputFrequencyOffset - << "m_fileRecordName: " << settings.m_fileRecordName - << "m_centerFrequency: " << m_centerFrequency - << "force: " << force; + qDebug() << "SigMFFileSinkBaseband::applySettings:" << settings.getDebugString(settingsKeys, force); - if ((settings.m_log2Decim != m_settings.m_log2Decim) - || (settings.m_inputFrequencyOffset != m_settings.m_inputFrequencyOffset) || force) + if ((settingsKeys.contains("log2Decim") && settings.m_log2Decim != m_settings.m_log2Decim) + || (settingsKeys.contains("inputFrequencyOffset") && settings.m_inputFrequencyOffset != m_settings.m_inputFrequencyOffset) || force) { int desiredSampleRate = m_channelizer.getBasebandSampleRate() / (1<getInputMessageQueue()->push(message); } } @@ -325,7 +325,7 @@ void SigMFFileSinkGUI::channelMarkerChangedByCursor() ui->deltaFrequency->setValue(m_channelMarker.getCenterFrequency()); m_settings.m_inputFrequencyOffset = m_channelMarker.getCenterFrequency(); setPosFromFrequency(); - applySettings(); + applySettings(QStringList("inputFrequencyOffset")); } void SigMFFileSinkGUI::channelMarkerHighlightedByCursor() @@ -352,7 +352,7 @@ void SigMFFileSinkGUI::onWidgetRolled(QWidget* widget, bool rollDown) (void) rollDown; getRollupContents()->saveState(m_rollupState); - applySettings(); + applySettings(QStringList()); } void SigMFFileSinkGUI::onMenuDialogCalled(const QPoint &p) @@ -397,7 +397,16 @@ void SigMFFileSinkGUI::onMenuDialogCalled(const QPoint &p) updateIndexLabel(); } - applySettings(); + applySettings(QStringList({ + "rgbColor", + "title", + "useReverseAPI", + "reverseAPIAddress", + "reverseAPIPort", + "reverseAPIDeviceIndex", + "reverseAPIChannelIndex", + "streamIndex" + })); } resetContextMenuType(); @@ -411,7 +420,7 @@ void SigMFFileSinkGUI::on_deltaFrequency_changed(qint64 value) m_settings.m_inputFrequencyOffset = m_channelMarker.getCenterFrequency(); updateAbsoluteCenterFrequency(); setPosFromFrequency(); - applySettings(); + applySettings(QStringList("inputFrequencyOffset")); } } @@ -421,7 +430,7 @@ void SigMFFileSinkGUI::on_decimationFactor_currentIndexChanged(int index) applyDecimation(); displayRate(); displayPos(); - applySettings(); + applySettings(QStringList("log2Decim")); if (m_fixedPosition) { setFrequencyFromPos(); @@ -433,7 +442,7 @@ void SigMFFileSinkGUI::on_decimationFactor_currentIndexChanged(int index) void SigMFFileSinkGUI::on_recordSampleSize_currentIndexChanged(int index) { m_settings.m_log2RecordSampleSize = index + 3; - applySettings(); + applySettings(QStringList("log2RecordSampleSize")); } void SigMFFileSinkGUI::on_fixedPosition_toggled(bool checked) @@ -446,7 +455,7 @@ void SigMFFileSinkGUI::on_fixedPosition_toggled(bool checked) if (m_fixedPosition) { setFrequencyFromPos(); - applySettings(); + applySettings(QStringList("inputFrequencyOffset")); } } @@ -458,7 +467,7 @@ void SigMFFileSinkGUI::on_position_valueChanged(int value) if (m_fixedPosition) { setFrequencyFromPos(); - applySettings(); + applySettings(QStringList("inputFrequencyOffset")); } } @@ -478,35 +487,35 @@ void SigMFFileSinkGUI::on_spectrumSquelch_toggled(bool checked) ui->squelchedRecording->setEnabled(checked); - applySettings(); + applySettings(QStringList("spectrumSquelchMode")); } void SigMFFileSinkGUI::on_squelchLevel_valueChanged(int value) { m_settings.m_spectrumSquelch = value; ui->squelchLevelText->setText(tr("%1").arg(m_settings.m_spectrumSquelch)); - applySettings(); + applySettings(QStringList("spectrumSquelch")); } void SigMFFileSinkGUI::on_preRecordTime_valueChanged(int value) { m_settings.m_preRecordTime = value; ui->preRecordTimeText->setText(tr("%1").arg(m_settings.m_preRecordTime)); - applySettings(); + applySettings(QStringList("preRecordTime")); } void SigMFFileSinkGUI::on_postSquelchTime_valueChanged(int value) { m_settings.m_squelchPostRecordTime = value; ui->postSquelchTimeText->setText(tr("%1").arg(m_settings.m_squelchPostRecordTime)); - applySettings(); + applySettings(QStringList("squelchPostRecordTime")); } void SigMFFileSinkGUI::on_squelchedRecording_toggled(bool checked) { ui->record->setEnabled(!checked); m_settings.m_squelchRecordingEnable = checked; - applySettings(); + applySettings(QStringList("squelchRecordingEnable")); } void SigMFFileSinkGUI::on_record_toggled(bool checked) @@ -537,7 +546,7 @@ void SigMFFileSinkGUI::on_showFileDialog_clicked(bool checked) { m_settings.m_fileRecordName = fileNames.at(0); ui->fileNameText->setText(m_settings.m_fileRecordName); - applySettings(); + applySettings(QStringList("fileRecordName")); } } } diff --git a/plugins/channelrx/sigmffilesink/sigmffilesinkgui.h b/plugins/channelrx/sigmffilesink/sigmffilesinkgui.h index 17ce8c6b9..34a1391b2 100644 --- a/plugins/channelrx/sigmffilesink/sigmffilesinkgui.h +++ b/plugins/channelrx/sigmffilesink/sigmffilesinkgui.h @@ -94,7 +94,7 @@ private: virtual ~SigMFFileSinkGUI(); void blockApplySettings(bool block); - void applySettings(bool force = false); + void applySettings(const QStringList& settingsKeys, bool force = false); void applyDecimation(); void displaySettings(); void displayRate(); diff --git a/plugins/channelrx/sigmffilesink/sigmffilesinksink.cpp b/plugins/channelrx/sigmffilesink/sigmffilesinksink.cpp index 31502079f..a27bb1de9 100644 --- a/plugins/channelrx/sigmffilesink/sigmffilesinksink.cpp +++ b/plugins/channelrx/sigmffilesink/sigmffilesinksink.cpp @@ -23,6 +23,7 @@ #include "dsp/dspcommands.h" #include "dsp/sigmffilerecord.h" #include "dsp/spectrumvis.h" +#include "util/stringlist.h" #include "sigmffilesinkmessages.h" #include "sigmffilesinksink.h" @@ -241,15 +242,13 @@ void SigMFFileSinkSink::applyChannelSettings( m_preRecordBuffer.reset(); } -void SigMFFileSinkSink::applySettings(const SigMFFileSinkSettings& settings, bool force) +void SigMFFileSinkSink::applySettings(const QStringList& settingsKeys, const SigMFFileSinkSettings& settings, bool force) { - qDebug() << "SigMFFileSinkSink::applySettings:" - << "m_fileRecordName: " << settings.m_fileRecordName - << "force: " << force; + qDebug() << "SigMFFileSinkSink::applySettings:" << settings.getDebugString(settingsKeys, force); QString fileRecordName = settings.m_fileRecordName; - if ((settings.m_fileRecordName != m_settings.m_fileRecordName) || force) + if ((settingsKeys.contains("fileRecordName") && (settings.m_fileRecordName != m_settings.m_fileRecordName)) || force) { QStringList dotBreakout = settings.m_fileRecordName.split(QLatin1Char('.')); @@ -284,7 +283,7 @@ void SigMFFileSinkSink::applySettings(const SigMFFileSinkSettings& settings, boo } } - if ((settings.m_preRecordTime != m_settings.m_squelchPostRecordTime) || force) + if ((StringListUtil::containsAny(settingsKeys, {"preRecordTime", "squelchPostRecordTime"}) && (settings.m_preRecordTime != m_settings.m_squelchPostRecordTime)) || force) { m_preRecordBuffer.setSize(settings.m_preRecordTime * m_sinkSampleRate); @@ -293,11 +292,16 @@ void SigMFFileSinkSink::applySettings(const SigMFFileSinkSettings& settings, boo } } - if ((settings.m_log2RecordSampleSize != m_settings.m_log2RecordSampleSize) || force) { + if ((settingsKeys.contains("log2RecordSampleSize") && (settings.m_log2RecordSampleSize != m_settings.m_log2RecordSampleSize)) || force) { m_fileSink.setLog2RecordSampleSize(settings.m_log2RecordSampleSize); } - m_settings = settings; + if (force) { + m_settings = settings; + } else { + m_settings.applySettings(settingsKeys, settings); + } + m_settings.m_fileRecordName = fileRecordName; } diff --git a/plugins/channelrx/sigmffilesink/sigmffilesinksink.h b/plugins/channelrx/sigmffilesink/sigmffilesinksink.h index 5293fe345..52f491bc7 100644 --- a/plugins/channelrx/sigmffilesink/sigmffilesinksink.h +++ b/plugins/channelrx/sigmffilesink/sigmffilesinksink.h @@ -50,7 +50,7 @@ public: int channelFrequencyOffset, int64_t centerFrequency, bool force = false); - void applySettings(const SigMFFileSinkSettings& settings, bool force = false); + void applySettings(const QStringList& settingsKeys, const SigMFFileSinkSettings& settings, bool force = false); uint64_t getMsCount() const { return m_msCount; } uint64_t getByteCount() const { return m_byteCount; } unsigned int getNbTracks() const { return m_fileSink.getNbCaptures(); } diff --git a/plugins/channelrx/udpsink/udpsink.cpp b/plugins/channelrx/udpsink/udpsink.cpp index 5ae73638e..e8a446b05 100644 --- a/plugins/channelrx/udpsink/udpsink.cpp +++ b/plugins/channelrx/udpsink/udpsink.cpp @@ -59,7 +59,7 @@ UDPSink::UDPSink(DeviceAPI *deviceAPI) : m_basebandSink->setSpectrum(&m_spectrumVis); m_basebandSink->moveToThread(m_thread); - applySettings(m_settings, true); + applySettings(QStringList(), m_settings, true); m_deviceAPI->addChannelSink(this); m_deviceAPI->addChannelSinkAPI(this); @@ -144,7 +144,7 @@ bool UDPSink::handleMessage(const Message& cmd) MsgConfigureUDPSink& cfg = (MsgConfigureUDPSink&) cmd; qDebug("UDPSink::handleMessage: MsgConfigureUDPSink"); - applySettings(cfg.getSettings(), cfg.getForce()); + applySettings(cfg.getSettingsKeys(), cfg.getSettings(), cfg.getForce()); return true; } @@ -173,94 +173,20 @@ void UDPSink::setCenterFrequency(qint64 frequency) { UDPSinkSettings settings = m_settings; settings.m_inputFrequencyOffset = frequency; - applySettings(settings, false); + applySettings(QStringList("inputFrequencyOffset"), settings, false); if (m_guiMessageQueue) // forward to GUI if any { - MsgConfigureUDPSink *msgToGUI = MsgConfigureUDPSink::create(settings, false); + MsgConfigureUDPSink *msgToGUI = MsgConfigureUDPSink::create(QStringList("inputFrequencyOffset"), settings, false); m_guiMessageQueue->push(msgToGUI); } } -void UDPSink::applySettings(const UDPSinkSettings& settings, bool force) +void UDPSink::applySettings(const QStringList& settingsKeys, const UDPSinkSettings& settings, bool force) { - qDebug() << "UDPSink::applySettings:" - << " m_inputFrequencyOffset: " << settings.m_inputFrequencyOffset - << " m_audioActive: " << settings.m_audioActive - << " m_audioStereo: " << settings.m_audioStereo - << " m_gain: " << settings.m_gain - << " m_volume: " << settings.m_volume - << " m_squelchEnabled: " << settings.m_squelchEnabled - << " m_squelchdB: " << settings.m_squelchdB - << " m_squelchGate" << settings.m_squelchGate - << " m_agc" << settings.m_agc - << " m_sampleFormat: " << settings.m_sampleFormat - << " m_outputSampleRate: " << settings.m_outputSampleRate - << " m_rfBandwidth: " << settings.m_rfBandwidth - << " m_fmDeviation: " << settings.m_fmDeviation - << " m_udpAddressStr: " << settings.m_udpAddress - << " m_udpPort: " << settings.m_udpPort - << " m_audioPort: " << settings.m_audioPort - << " m_streamIndex: " << settings.m_streamIndex - << " m_useReverseAPI: " << settings.m_useReverseAPI - << " m_reverseAPIAddress: " << settings.m_reverseAPIAddress - << " m_reverseAPIPort: " << settings.m_reverseAPIPort - << " m_reverseAPIDeviceIndex: " << settings.m_reverseAPIDeviceIndex - << " m_reverseAPIChannelIndex: " << settings.m_reverseAPIChannelIndex - << " force: " << force; + qDebug() << "UDPSink::applySettings:" << settings.getDebugString(settingsKeys, force); - QList reverseAPIKeys; - - if ((settings.m_inputFrequencyOffset != m_settings.m_inputFrequencyOffset) || force) { - reverseAPIKeys.append("inputFrequencyOffset"); - } - if ((settings.m_audioActive != m_settings.m_audioActive) || force) { - reverseAPIKeys.append("audioActive"); - } - if ((settings.m_audioStereo != m_settings.m_audioStereo) || force) { - reverseAPIKeys.append("audioStereo"); - } - if ((settings.m_gain != m_settings.m_gain) || force) { - reverseAPIKeys.append("gain"); - } - if ((settings.m_volume != m_settings.m_volume) || force) { - reverseAPIKeys.append("volume"); - } - if ((settings.m_squelchEnabled != m_settings.m_squelchEnabled) || force) { - reverseAPIKeys.append("squelchEnabled"); - } - if ((settings.m_squelchdB != m_settings.m_squelchdB) || force) { - reverseAPIKeys.append("squelchDB"); - } - if ((settings.m_squelchGate != m_settings.m_squelchGate) || force) { - reverseAPIKeys.append("squelchGate"); - } - if ((settings.m_agc != m_settings.m_agc) || force) { - reverseAPIKeys.append("agc"); - } - if ((settings.m_sampleFormat != m_settings.m_sampleFormat) || force) { - reverseAPIKeys.append("sampleFormat"); - } - if ((settings.m_outputSampleRate != m_settings.m_outputSampleRate) || force) { - reverseAPIKeys.append("outputSampleRate"); - } - if ((settings.m_rfBandwidth != m_settings.m_rfBandwidth) || force) { - reverseAPIKeys.append("rfBandwidth"); - } - if ((settings.m_fmDeviation != m_settings.m_fmDeviation) || force) { - reverseAPIKeys.append("fmDeviation"); - } - if ((settings.m_udpAddress != m_settings.m_udpAddress) || force) { - reverseAPIKeys.append("udpAddress"); - } - if ((settings.m_udpPort != m_settings.m_udpPort) || force) { - reverseAPIKeys.append("udpPort"); - } - if ((settings.m_audioPort != m_settings.m_audioPort) || force) { - reverseAPIKeys.append("audioPort"); - } - - if (m_settings.m_streamIndex != settings.m_streamIndex) + if (settingsKeys.contains("streamIndex") && m_settings.m_streamIndex != settings.m_streamIndex) { if (m_deviceAPI->getSampleMIMO()) // change of stream is possible for MIMO devices only { @@ -271,28 +197,26 @@ void UDPSink::applySettings(const UDPSinkSettings& settings, bool force) m_settings.m_streamIndex = settings.m_streamIndex; // make sure ChannelAPI::getStreamIndex() is consistent emit streamIndexChanged(settings.m_streamIndex); } - - reverseAPIKeys.append("streamIndex"); } - UDPSinkBaseband::MsgConfigureUDPSinkBaseband *msg = UDPSinkBaseband::MsgConfigureUDPSinkBaseband::create(settings, force); + UDPSinkBaseband::MsgConfigureUDPSinkBaseband *msg = UDPSinkBaseband::MsgConfigureUDPSinkBaseband::create(settingsKeys, settings, force); m_basebandSink->getInputMessageQueue()->push(msg); - if (settings.m_useReverseAPI) + if (settingsKeys.contains("useReverseAPI") && settings.m_useReverseAPI) { - bool fullUpdate = ((m_settings.m_useReverseAPI != settings.m_useReverseAPI) && settings.m_useReverseAPI) || - (m_settings.m_reverseAPIAddress != settings.m_reverseAPIAddress) || - (m_settings.m_reverseAPIPort != settings.m_reverseAPIPort) || - (m_settings.m_reverseAPIDeviceIndex != settings.m_reverseAPIDeviceIndex) || - (m_settings.m_reverseAPIChannelIndex != settings.m_reverseAPIChannelIndex); - webapiReverseSendSettings(reverseAPIKeys, settings, fullUpdate || force); + bool fullUpdate = ((settingsKeys.contains("useReverseAPI") && m_settings.m_useReverseAPI != settings.m_useReverseAPI) && settings.m_useReverseAPI) || + (settingsKeys.contains("reverseAPIAddress") && m_settings.m_reverseAPIAddress != settings.m_reverseAPIAddress) || + (settingsKeys.contains("reverseAPIPort") && m_settings.m_reverseAPIPort != settings.m_reverseAPIPort) || + (settingsKeys.contains("reverseAPIDeviceIndex") && m_settings.m_reverseAPIDeviceIndex != settings.m_reverseAPIDeviceIndex) || + (settingsKeys.contains("reverseAPIChannelIndex") && m_settings.m_reverseAPIChannelIndex != settings.m_reverseAPIChannelIndex); + webapiReverseSendSettings(settingsKeys, settings, fullUpdate || force); } QList pipes; MainCore::instance()->getMessagePipes().getMessagePipes(this, "settings", pipes); if (pipes.size() > 0) { - sendChannelSettings(pipes, reverseAPIKeys, settings, force); + sendChannelSettings(pipes, settingsKeys, settings, force); } m_settings = settings; @@ -307,14 +231,14 @@ bool UDPSink::deserialize(const QByteArray& data) { if (m_settings.deserialize(data)) { - MsgConfigureUDPSink *msg = MsgConfigureUDPSink::create(m_settings, true); + MsgConfigureUDPSink *msg = MsgConfigureUDPSink::create(QStringList(), m_settings, true); m_inputMessageQueue.push(msg); return true; } else { m_settings.resetToDefaults(); - MsgConfigureUDPSink *msg = MsgConfigureUDPSink::create(m_settings, true); + MsgConfigureUDPSink *msg = MsgConfigureUDPSink::create(QStringList(), m_settings, true); m_inputMessageQueue.push(msg); return false; } @@ -350,13 +274,13 @@ int UDPSink::webapiSettingsPutPatch( UDPSinkSettings settings = m_settings; webapiUpdateChannelSettings(settings, channelSettingsKeys, response); - MsgConfigureUDPSink *msg = MsgConfigureUDPSink::create(settings, force); + MsgConfigureUDPSink *msg = MsgConfigureUDPSink::create(channelSettingsKeys, settings, force); m_inputMessageQueue.push(msg); qDebug("getUdpSinkSettings::webapiSettingsPutPatch: forward to GUI: %p", m_guiMessageQueue); if (m_guiMessageQueue) // forward to GUI if any { - MsgConfigureUDPSink *msgToGUI = MsgConfigureUDPSink::create(settings, force); + MsgConfigureUDPSink *msgToGUI = MsgConfigureUDPSink::create(channelSettingsKeys, settings, force); m_guiMessageQueue->push(msgToGUI); } @@ -564,7 +488,7 @@ void UDPSink::webapiFormatChannelReport(SWGSDRangel::SWGChannelReport& response) response.getUdpSinkReport()->setInputSampleRate(m_channelSampleRate); } -void UDPSink::webapiReverseSendSettings(QList& channelSettingsKeys, const UDPSinkSettings& settings, bool force) +void UDPSink::webapiReverseSendSettings(const QList& channelSettingsKeys, const UDPSinkSettings& settings, bool force) { SWGSDRangel::SWGChannelSettings *swgChannelSettings = new SWGSDRangel::SWGChannelSettings(); webapiFormatChannelSettings(channelSettingsKeys, swgChannelSettings, settings, force); @@ -591,7 +515,7 @@ void UDPSink::webapiReverseSendSettings(QList& channelSettingsKeys, con void UDPSink::sendChannelSettings( const QList& pipes, - QList& channelSettingsKeys, + const QList& channelSettingsKeys, const UDPSinkSettings& settings, bool force) { @@ -615,7 +539,7 @@ void UDPSink::sendChannelSettings( } void UDPSink::webapiFormatChannelSettings( - QList& channelSettingsKeys, + const QList& channelSettingsKeys, SWGSDRangel::SWGChannelSettings *swgChannelSettings, const UDPSinkSettings& settings, bool force diff --git a/plugins/channelrx/udpsink/udpsink.h b/plugins/channelrx/udpsink/udpsink.h index c08d4d256..d976e56b6 100644 --- a/plugins/channelrx/udpsink/udpsink.h +++ b/plugins/channelrx/udpsink/udpsink.h @@ -44,20 +44,23 @@ public: public: const UDPSinkSettings& getSettings() const { return m_settings; } + const QStringList& getSettingsKeys() const { return m_settingsKeys; } bool getForce() const { return m_force; } - static MsgConfigureUDPSink* create(const UDPSinkSettings& settings, bool force) + static MsgConfigureUDPSink* create(const QStringList& settingsKeys, const UDPSinkSettings& settings, bool force) { - return new MsgConfigureUDPSink(settings, force); + return new MsgConfigureUDPSink(settingsKeys, settings, force); } private: UDPSinkSettings m_settings; + QStringList m_settingsKeys; bool m_force; - MsgConfigureUDPSink(const UDPSinkSettings& settings, bool force) : + MsgConfigureUDPSink(const QStringList& settingsKeys, const UDPSinkSettings& settings, bool force) : Message(), m_settings(settings), + m_settingsKeys(settingsKeys), m_force(force) { } @@ -156,17 +159,17 @@ protected: virtual bool handleMessage(const Message& cmd); - void applySettings(const UDPSinkSettings& settings, bool force = false); + void applySettings(const QStringList& settingsKeys, const UDPSinkSettings& settings, bool force = false); void webapiFormatChannelReport(SWGSDRangel::SWGChannelReport& response); - void webapiReverseSendSettings(QList& channelSettingsKeys, const UDPSinkSettings& settings, bool force); + void webapiReverseSendSettings(const QList& channelSettingsKeys, const UDPSinkSettings& settings, bool force); void sendChannelSettings( const QList& pipes, - QList& channelSettingsKeys, + const QList& channelSettingsKeys, const UDPSinkSettings& settings, bool force ); void webapiFormatChannelSettings( - QList& channelSettingsKeys, + const QList& channelSettingsKeys, SWGSDRangel::SWGChannelSettings *swgChannelSettings, const UDPSinkSettings& settings, bool force diff --git a/plugins/channelrx/udpsink/udpsinkbaseband.cpp b/plugins/channelrx/udpsink/udpsinkbaseband.cpp index 02d64fb36..0c355bc5e 100644 --- a/plugins/channelrx/udpsink/udpsinkbaseband.cpp +++ b/plugins/channelrx/udpsink/udpsinkbaseband.cpp @@ -109,7 +109,7 @@ bool UDPSinkBaseband::handleMessage(const Message& cmd) MsgConfigureUDPSinkBaseband& cfg = (MsgConfigureUDPSinkBaseband&) cmd; qDebug() << "UDPSinkBaseband::handleMessage: MsgConfigureUDPSinkBaseband"; - applySettings(cfg.getSettings(), cfg.getForce()); + applySettings(cfg.getSettingsKeys(), cfg.getSettings(), cfg.getForce()); return true; } @@ -139,9 +139,9 @@ bool UDPSinkBaseband::handleMessage(const Message& cmd) } } -void UDPSinkBaseband::applySettings(const UDPSinkSettings& settings, bool force) +void UDPSinkBaseband::applySettings(const QStringList& settingsKeys, const UDPSinkSettings& settings, bool force) { - if ((settings.m_audioActive != m_settings.m_audioActive) || force) + if ((settingsKeys.contains("audioActive") && (settings.m_audioActive != m_settings.m_audioActive)) || force) { if (settings.m_audioActive) { DSPEngine::instance()->getAudioDeviceManager()->addAudioSink(m_sink.getAudioFifo(), getInputMessageQueue()); @@ -150,15 +150,20 @@ void UDPSinkBaseband::applySettings(const UDPSinkSettings& settings, bool force) } } - if ((settings.m_outputSampleRate != m_settings.m_outputSampleRate) - || (settings.m_inputFrequencyOffset != m_settings.m_inputFrequencyOffset) || force) + if ((settingsKeys.contains("outputSampleRate") && (settings.m_outputSampleRate != m_settings.m_outputSampleRate)) + || (settingsKeys.contains("inputFrequencyOffset") && (settings.m_inputFrequencyOffset != m_settings.m_inputFrequencyOffset)) || force) { m_channelizer->setChannelization(settings.m_outputSampleRate, settings.m_inputFrequencyOffset); m_sink.applyChannelSettings(m_channelizer->getChannelSampleRate(), m_channelizer->getChannelFrequencyOffset()); } - m_sink.applySettings(settings, force); - m_settings = settings; + m_sink.applySettings(settingsKeys, settings, force); + + if (force) { + m_settings = settings; + } else { + m_settings.applySettings(settingsKeys, settings); + } } int UDPSinkBaseband::getChannelSampleRate() const diff --git a/plugins/channelrx/udpsink/udpsinkbaseband.h b/plugins/channelrx/udpsink/udpsinkbaseband.h index 2d3a688a3..f26db8ef6 100644 --- a/plugins/channelrx/udpsink/udpsinkbaseband.h +++ b/plugins/channelrx/udpsink/udpsinkbaseband.h @@ -38,20 +38,23 @@ public: MESSAGE_CLASS_DECLARATION public: const UDPSinkSettings& getSettings() const { return m_settings; } + const QStringList& getSettingsKeys() const { return m_settingsKeys; } bool getForce() const { return m_force; } - static MsgConfigureUDPSinkBaseband* create(const UDPSinkSettings& settings, bool force) + static MsgConfigureUDPSinkBaseband* create(const QStringList& settingsKeys, const UDPSinkSettings& settings, bool force) { - return new MsgConfigureUDPSinkBaseband(settings, force); + return new MsgConfigureUDPSinkBaseband(settingsKeys, settings, force); } private: UDPSinkSettings m_settings; + QStringList m_settingsKeys; bool m_force; - MsgConfigureUDPSinkBaseband(const UDPSinkSettings& settings, bool force) : + MsgConfigureUDPSinkBaseband(const QStringList& settingsKeys, const UDPSinkSettings& settings, bool force) : Message(), m_settings(settings), + m_settingsKeys(settingsKeys), m_force(force) { } @@ -101,7 +104,7 @@ private: QRecursiveMutex m_mutex; bool handleMessage(const Message& cmd); - void applySettings(const UDPSinkSettings& settings, bool force = false); + void applySettings(const QStringList& settingsKeys, const UDPSinkSettings& settings, bool force = false); private slots: void handleInputMessages(); diff --git a/plugins/channelrx/udpsink/udpsinkgui.cpp b/plugins/channelrx/udpsink/udpsinkgui.cpp index 5cf7d806c..38ca53e99 100644 --- a/plugins/channelrx/udpsink/udpsinkgui.cpp +++ b/plugins/channelrx/udpsink/udpsinkgui.cpp @@ -49,8 +49,8 @@ void UDPSinkGUI::resetToDefaults() { m_settings.resetToDefaults(); displaySettings(); - applySettingsImmediate(true); - applySettings(true); + applySettingsImmediate(QStringList(), true); + applySettings(QStringList(), true); } QByteArray UDPSinkGUI::serialize() const @@ -63,8 +63,8 @@ bool UDPSinkGUI::deserialize(const QByteArray& data) if(m_settings.deserialize(data)) { displaySettings(); - applySettingsImmediate(true); - applySettings(true); + applySettingsImmediate(QStringList(), true); + applySettings(QStringList(), true); return true; } else { resetToDefaults(); @@ -118,7 +118,7 @@ void UDPSinkGUI::channelMarkerChangedByCursor() { ui->deltaFrequency->setValue(m_channelMarker.getCenterFrequency()); m_settings.m_inputFrequencyOffset = m_channelMarker.getCenterFrequency(); - applySettingsImmediate(); + applySettingsImmediate(QStringList("inputFrequencyOffset")); } void UDPSinkGUI::channelMarkerHighlightedByCursor() @@ -219,8 +219,8 @@ UDPSinkGUI::UDPSinkGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, BasebandS displaySettings(); makeUIConnections(); - applySettingsImmediate(true); - applySettings(true); + applySettingsImmediate(QStringList(), true); + applySettings(QStringList(), true); DialPopup::addPopupsToChildDials(this); m_resizer.enableChildMouseTracking(); } @@ -389,20 +389,20 @@ void UDPSinkGUI::setSampleFormat(int index) } } -void UDPSinkGUI::applySettingsImmediate(bool force) +void UDPSinkGUI::applySettingsImmediate(const QStringList& settingsKeys, bool force) { if (m_doApplySettings) { - UDPSink::MsgConfigureUDPSink* message = UDPSink::MsgConfigureUDPSink::create( m_settings, force); + UDPSink::MsgConfigureUDPSink* message = UDPSink::MsgConfigureUDPSink::create(settingsKeys, m_settings, force); m_udpSink->getInputMessageQueue()->push(message); } } -void UDPSinkGUI::applySettings(bool force) +void UDPSinkGUI::applySettings( const QStringList& settingsKeys, bool force) { if (m_doApplySettings) { - UDPSink::MsgConfigureUDPSink* message = UDPSink::MsgConfigureUDPSink::create( m_settings, force); + UDPSink::MsgConfigureUDPSink* message = UDPSink::MsgConfigureUDPSink::create(settingsKeys, m_settings, force); m_udpSink->getInputMessageQueue()->push(message); ui->applyBtn->setEnabled(false); @@ -415,7 +415,7 @@ void UDPSinkGUI::on_deltaFrequency_changed(qint64 value) m_channelMarker.setCenterFrequency(value); m_settings.m_inputFrequencyOffset = m_channelMarker.getCenterFrequency(); updateAbsoluteCenterFrequency(); - applySettings(); + applySettings(QStringList("inputFrequencyOffset")); } void UDPSinkGUI::on_sampleFormat_currentIndexChanged(int index) @@ -543,39 +543,39 @@ void UDPSinkGUI::on_applyBtn_clicked() ui->glSpectrum->setSampleRate(m_settings.m_outputSampleRate); - applySettings(); + applySettings(QStringList({"rfBandwidth", "outputSampleRate"})); } void UDPSinkGUI::on_audioActive_toggled(bool active) { m_settings.m_audioActive = active; - applySettingsImmediate(); + applySettingsImmediate(QStringList("audioActive")); } void UDPSinkGUI::on_audioStereo_toggled(bool stereo) { m_settings.m_audioStereo = stereo; - applySettingsImmediate(); + applySettingsImmediate(QStringList("audioStereo")); } void UDPSinkGUI::on_agc_toggled(bool agc) { m_settings.m_agc = agc; - applySettingsImmediate(); + applySettingsImmediate(QStringList("agc")); } void UDPSinkGUI::on_gain_valueChanged(int value) { m_settings.m_gain = value / 10.0; ui->gainText->setText(tr("%1").arg(value/10.0, 0, 'f', 1)); - applySettingsImmediate(); + applySettingsImmediate(QStringList("gain")); } void UDPSinkGUI::on_volume_valueChanged(int value) { m_settings.m_volume = value; ui->volumeText->setText(QString("%1").arg(value)); - applySettingsImmediate(); + applySettingsImmediate(QStringList("volume")); } void UDPSinkGUI::on_squelch_valueChanged(int value) @@ -593,14 +593,14 @@ void UDPSinkGUI::on_squelch_valueChanged(int value) m_settings.m_squelchEnabled = true; } - applySettingsImmediate(); + applySettingsImmediate(QStringList("squelchdB")); } void UDPSinkGUI::on_squelchGate_valueChanged(int value) { m_settings.m_squelchGate = value; ui->squelchGateText->setText(tr("%1").arg(value*10.0, 0, 'f', 0)); - applySettingsImmediate(); + applySettingsImmediate(QStringList("squelchGate")); } void UDPSinkGUI::onWidgetRolled(QWidget* widget, bool rollDown) @@ -610,7 +610,7 @@ void UDPSinkGUI::onWidgetRolled(QWidget* widget, bool rollDown) } getRollupContents()->saveState(m_rollupState); - applySettings(); + applySettings(QStringList()); } void UDPSinkGUI::onMenuDialogCalled(const QPoint &p) @@ -655,7 +655,16 @@ void UDPSinkGUI::onMenuDialogCalled(const QPoint &p) updateIndexLabel(); } - applySettingsImmediate(); + applySettingsImmediate(QStringList({ + "title", + "rgbColor", + "useReverseAPI", + "reverseAPIAddress", + "reverseAPIPort", + "reverseAPIDeviceIndex", + "reverseAPIChannelIndex", + "streamIndex" + })); } resetContextMenuType(); diff --git a/plugins/channelrx/udpsink/udpsinkgui.h b/plugins/channelrx/udpsink/udpsinkgui.h index 352b98631..847ce1a21 100644 --- a/plugins/channelrx/udpsink/udpsinkgui.h +++ b/plugins/channelrx/udpsink/udpsinkgui.h @@ -94,8 +94,8 @@ private: virtual ~UDPSinkGUI(); void blockApplySettings(bool block); - void applySettings(bool force = false); - void applySettingsImmediate(bool force = false); + void applySettings(const QStringList& settingsKeys, bool force = false); + void applySettingsImmediate(const QStringList& settingsKeys, bool force = false); void displaySettings(); void setSampleFormat(int index); void setSampleFormatIndex(const UDPSinkSettings::SampleFormat& sampleFormat); diff --git a/plugins/channelrx/udpsink/udpsinksink.cpp b/plugins/channelrx/udpsink/udpsinksink.cpp index 3b69797ff..de34a3fa1 100644 --- a/plugins/channelrx/udpsink/udpsinksink.cpp +++ b/plugins/channelrx/udpsink/udpsinksink.cpp @@ -85,7 +85,7 @@ UDPSinkSink::UDPSinkSink() : //DSPEngine::instance()->addAudioSink(&m_audioFifo); applyChannelSettings(m_channelSampleRate, m_channelFrequencyOffset, true); - applySettings(m_settings, true); + applySettings(QStringList(), m_settings, true); } UDPSinkSink::~UDPSinkSink() @@ -365,43 +365,20 @@ void UDPSinkSink::applyChannelSettings(int channelSampleRate, int channelFrequen m_channelFrequencyOffset = channelFrequencyOffset; } -void UDPSinkSink::applySettings(const UDPSinkSettings& settings, bool force) +void UDPSinkSink::applySettings(const QStringList& settingsKeys, const UDPSinkSettings& settings, bool force) { - qDebug() << "UDPSinkSink::applySettings:" - << " m_inputFrequencyOffset: " << settings.m_inputFrequencyOffset - << " m_audioActive: " << settings.m_audioActive - << " m_audioStereo: " << settings.m_audioStereo - << " m_gain: " << settings.m_gain - << " m_volume: " << settings.m_volume - << " m_squelchEnabled: " << settings.m_squelchEnabled - << " m_squelchdB: " << settings.m_squelchdB - << " m_squelchGate" << settings.m_squelchGate - << " m_agc" << settings.m_agc - << " m_sampleFormat: " << settings.m_sampleFormat - << " m_outputSampleRate: " << settings.m_outputSampleRate - << " m_rfBandwidth: " << settings.m_rfBandwidth - << " m_fmDeviation: " << settings.m_fmDeviation - << " m_udpAddressStr: " << settings.m_udpAddress - << " m_udpPort: " << settings.m_udpPort - << " m_audioPort: " << settings.m_audioPort - << " m_streamIndex: " << settings.m_streamIndex - << " m_useReverseAPI: " << settings.m_useReverseAPI - << " m_reverseAPIAddress: " << settings.m_reverseAPIAddress - << " m_reverseAPIPort: " << settings.m_reverseAPIPort - << " m_reverseAPIDeviceIndex: " << settings.m_reverseAPIDeviceIndex - << " m_reverseAPIChannelIndex: " << settings.m_reverseAPIChannelIndex - << " force: " << force; + qDebug() << "UDPSinkSink::applySettings:" << settings.getDebugString(settingsKeys, force); - if ((settings.m_audioActive != m_settings.m_audioActive) || force) + if ((settingsKeys.contains("audioActive") && (settings.m_audioActive != m_settings.m_audioActive)) || force) { if (settings.m_audioActive) { m_audioBufferFill = 0; } } - if ((settings.m_inputFrequencyOffset != m_settings.m_inputFrequencyOffset) || - (settings.m_rfBandwidth != m_settings.m_rfBandwidth) || - (settings.m_outputSampleRate != m_settings.m_outputSampleRate) || force) + if ((settingsKeys.contains("inputFrequencyOffset") && (settings.m_inputFrequencyOffset != m_settings.m_inputFrequencyOffset)) || + (settingsKeys.contains("rfBandwidth") && (settings.m_rfBandwidth != m_settings.m_rfBandwidth)) || + (settingsKeys.contains("outputSampleRate") && (settings.m_outputSampleRate != m_settings.m_outputSampleRate)) || force) { m_interpolator.create(16, m_channelSampleRate, settings.m_rfBandwidth / 2.0); m_sampleDistanceRemain = m_channelSampleRate / settings.m_outputSampleRate; @@ -432,7 +409,7 @@ void UDPSinkSink::applySettings(const UDPSinkSettings& settings, bool force) m_outMovingAverage.resize(settings.m_outputSampleRate * 0.01, 1e-10); // 10 ms } - if ((settings.m_squelchGate != m_settings.m_squelchGate) || force) + if ((settingsKeys.contains("squelchGate") && (settings.m_squelchGate != m_settings.m_squelchGate)) || force) { if ((settings.m_sampleFormat == UDPSinkSettings::FormatLSB) || (settings.m_sampleFormat == UDPSinkSettings::FormatLSBMono) || @@ -452,27 +429,27 @@ void UDPSinkSink::applySettings(const UDPSinkSettings& settings, bool force) m_agc.setStepDownDelay(stepDownDelay); // same delay for up and down } - if ((settings.m_squelchdB != m_settings.m_squelchdB) || force) + if ((settingsKeys.contains("squelchdB") && (settings.m_squelchdB != m_settings.m_squelchdB)) || force) { m_squelch = CalcDb::powerFromdB(settings.m_squelchdB); m_agc.setThreshold(m_squelch*(1<<23)); } - if ((settings.m_udpAddress != m_settings.m_udpAddress) || force) + if ((settingsKeys.contains("udpAddress") && (settings.m_udpAddress != m_settings.m_udpAddress)) || force) { m_udpBuffer16->setAddress(const_cast(settings.m_udpAddress)); m_udpBufferMono16->setAddress(const_cast(settings.m_udpAddress)); m_udpBuffer24->setAddress(const_cast(settings.m_udpAddress)); } - if ((settings.m_udpPort != m_settings.m_udpPort) || force) + if ((settingsKeys.contains("udpPort") && (settings.m_udpPort != m_settings.m_udpPort)) || force) { m_udpBuffer16->setPort(settings.m_udpPort); m_udpBufferMono16->setPort(settings.m_udpPort); m_udpBuffer24->setPort(settings.m_udpPort); } - if ((settings.m_audioPort != m_settings.m_audioPort) || force) + if ((settingsKeys.contains("audioPort") && (settings.m_audioPort != m_settings.m_audioPort)) || force) { disconnect(m_audioSocket, SIGNAL(readyRead()), this, SLOT(audioReadyRead())); delete m_audioSocket; @@ -489,9 +466,13 @@ void UDPSinkSink::applySettings(const UDPSinkSettings& settings, bool force) } } - if ((settings.m_fmDeviation != m_settings.m_fmDeviation) || force) { + if ((settingsKeys.contains("fmDeviation") && (settings.m_fmDeviation != m_settings.m_fmDeviation)) || force) { m_phaseDiscri.setFMScaling((float) settings.m_outputSampleRate / (2.0f * settings.m_fmDeviation)); } - m_settings = settings; + if (force) { + m_settings = settings; + } else { + m_settings.applySettings(settingsKeys, settings); + } } diff --git a/plugins/channelrx/udpsink/udpsinksink.h b/plugins/channelrx/udpsink/udpsinksink.h index 0b6eeede9..d5f01299f 100644 --- a/plugins/channelrx/udpsink/udpsinksink.h +++ b/plugins/channelrx/udpsink/udpsinksink.h @@ -48,7 +48,7 @@ public: virtual void feed(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end); void applyChannelSettings(int channelSampleRate, int channelFrequencyOffset, bool force = true); - void applySettings(const UDPSinkSettings& settings, bool force = false); + void applySettings(const QStringList& settingsKeys, const UDPSinkSettings& settings, bool force = false); AudioFifo *getAudioFifo() { return &m_audioFifo; } void setAudioFifoLabel(const QString& label) { m_audioFifo.setLabel(label); } diff --git a/plugins/channelrx/wdsprx/wdsprx.cpp b/plugins/channelrx/wdsprx/wdsprx.cpp index 079be782e..e6cc15655 100644 --- a/plugins/channelrx/wdsprx/wdsprx.cpp +++ b/plugins/channelrx/wdsprx/wdsprx.cpp @@ -62,7 +62,7 @@ WDSPRx::WDSPRx(DeviceAPI *deviceAPI) : { setObjectName(m_channelId); - applySettings(m_settings, true); + applySettings(QStringList(), m_settings, true); m_deviceAPI->addChannelSink(this); m_deviceAPI->addChannelSinkAPI(this); @@ -174,7 +174,7 @@ void WDSPRx::start() m_thread->start(); - WDSPRxBaseband::MsgConfigureWDSPRxBaseband *msg = WDSPRxBaseband::MsgConfigureWDSPRxBaseband::create(m_settings, true); + WDSPRxBaseband::MsgConfigureWDSPRxBaseband *msg = WDSPRxBaseband::MsgConfigureWDSPRxBaseband::create(QStringList(), m_settings, true); m_basebandSink->getInputMessageQueue()->push(msg); m_running = true; @@ -201,7 +201,7 @@ bool WDSPRx::handleMessage(const Message& cmd) auto& cfg = (const MsgConfigureWDSPRx&) cmd; qDebug("WDSPRx::handleMessage: MsgConfigureWDSPRx"); - applySettings(cfg.getSettings(), cfg.getForce()); + applySettings(cfg.getSettingsKeys(), cfg.getSettings(), cfg.getForce()); return true; } @@ -238,42 +238,18 @@ void WDSPRx::setCenterFrequency(qint64 frequency) { WDSPRxSettings settings = m_settings; settings.m_inputFrequencyOffset = (qint32) frequency; - applySettings(settings, false); + applySettings(QStringList("inputFrequencyOffset"), settings); if (m_guiMessageQueue) // forward to GUI if any { - MsgConfigureWDSPRx *msgToGUI = MsgConfigureWDSPRx::create(settings, false); + MsgConfigureWDSPRx *msgToGUI = MsgConfigureWDSPRx::create(QStringList("inputFrequencyOffset"), settings, false); m_guiMessageQueue->push(msgToGUI); } } -void WDSPRx::applySettings(const WDSPRxSettings& settings, bool force) +void WDSPRx::applySettings(const QStringList& settingsKeys, const WDSPRxSettings& settings, bool force) { - qDebug() << "WDSPRx::applySettings:" - << " m_inputFrequencyOffset: " << settings.m_inputFrequencyOffset - << " m_profileIndex: " << settings.m_profileIndex - << " [m_spanLog2: " << settings.m_profiles[settings.m_profileIndex].m_spanLog2 - << " m_highCutoff: " << settings.m_profiles[settings.m_profileIndex].m_highCutoff - << " m_lowCutoff: " << settings.m_profiles[settings.m_profileIndex].m_lowCutoff - << " m_fftWindow: " << settings.m_profiles[settings.m_profileIndex].m_fftWindow << "]" - << " m_volume: " << settings.m_volume - << " m_audioBinaual: " << settings.m_audioBinaural - << " m_audioFlipChannels: " << settings.m_audioFlipChannels - << " m_dsb: " << settings.m_dsb - << " m_audioMute: " << settings.m_audioMute - << " m_agcActive: " << settings.m_agc - << " m_agcMode: " << settings.m_agcMode - << " m_agcGain: " << settings.m_agcGain - << " m_agcSlope: " << settings.m_agcSlope - << " m_agcHangThreshold: " << settings.m_agcHangThreshold - << " m_audioDeviceName: " << settings.m_audioDeviceName - << " m_streamIndex: " << settings.m_streamIndex - << " m_useReverseAPI: " << settings.m_useReverseAPI - << " m_reverseAPIAddress: " << settings.m_reverseAPIAddress - << " m_reverseAPIPort: " << settings.m_reverseAPIPort - << " m_reverseAPIDeviceIndex: " << settings.m_reverseAPIDeviceIndex - << " m_reverseAPIChannelIndex: " << settings.m_reverseAPIChannelIndex - << " force: " << force; + qDebug() << "WDSPRx::applySettings:" << settings.getDebugString(settingsKeys, force); QList reverseAPIKeys; @@ -317,7 +293,7 @@ void WDSPRx::applySettings(const WDSPRxSettings& settings, bool force) reverseAPIKeys.append("agc"); } - if (m_settings.m_streamIndex != settings.m_streamIndex) + if (settingsKeys.contains("streamIndex") && m_settings.m_streamIndex != settings.m_streamIndex) { if (m_deviceAPI->getSampleMIMO()) // change of stream is possible for MIMO devices only { @@ -332,9 +308,9 @@ void WDSPRx::applySettings(const WDSPRxSettings& settings, bool force) reverseAPIKeys.append("streamIndex"); } - if ((settings.m_dsb != m_settings.m_dsb) - || (settings.m_profiles[settings.m_profileIndex].m_highCutoff != m_settings.m_profiles[m_settings.m_profileIndex].m_highCutoff) - || (settings.m_profiles[settings.m_profileIndex].m_lowCutoff != m_settings.m_profiles[m_settings.m_profileIndex].m_lowCutoff) || force) + if ((settingsKeys.contains("dsb") && (settings.m_dsb != m_settings.m_dsb)) + || (settingsKeys.contains("highCutoff") && (settings.m_profiles[settings.m_profileIndex].m_highCutoff != m_settings.m_profiles[m_settings.m_profileIndex].m_highCutoff)) + || (settingsKeys.contains("lowCutoff") && (settings.m_profiles[settings.m_profileIndex].m_lowCutoff != m_settings.m_profiles[m_settings.m_profileIndex].m_lowCutoff)) || force) { SpectrumSettings spectrumSettings = m_spectrumVis.getSettings(); spectrumSettings.m_ssb = !settings.m_dsb; @@ -345,17 +321,17 @@ void WDSPRx::applySettings(const WDSPRxSettings& settings, bool force) if (m_running) { - WDSPRxBaseband::MsgConfigureWDSPRxBaseband *msg = WDSPRxBaseband::MsgConfigureWDSPRxBaseband::create(settings, force); + WDSPRxBaseband::MsgConfigureWDSPRxBaseband *msg = WDSPRxBaseband::MsgConfigureWDSPRxBaseband::create(settingsKeys, settings, force); m_basebandSink->getInputMessageQueue()->push(msg); } - if (settings.m_useReverseAPI) + if (settingsKeys.contains("useReverseAPI") && settings.m_useReverseAPI) { - bool fullUpdate = ((m_settings.m_useReverseAPI != settings.m_useReverseAPI) && settings.m_useReverseAPI) || - (m_settings.m_reverseAPIAddress != settings.m_reverseAPIAddress) || - (m_settings.m_reverseAPIPort != settings.m_reverseAPIPort) || - (m_settings.m_reverseAPIDeviceIndex != settings.m_reverseAPIDeviceIndex) || - (m_settings.m_reverseAPIChannelIndex != settings.m_reverseAPIChannelIndex); + bool fullUpdate = ((settingsKeys.contains("useReverseAPI") && (m_settings.m_useReverseAPI != settings.m_useReverseAPI)) && settings.m_useReverseAPI) || + (settingsKeys.contains("reverseAPIAddress") && (m_settings.m_reverseAPIAddress != settings.m_reverseAPIAddress)) || + (settingsKeys.contains("reverseAPIPort") && (m_settings.m_reverseAPIPort != settings.m_reverseAPIPort)) || + (settingsKeys.contains("reverseAPIDeviceIndex") && (m_settings.m_reverseAPIDeviceIndex != settings.m_reverseAPIDeviceIndex)) || + (settingsKeys.contains("reverseAPIChannelIndex") && (m_settings.m_reverseAPIChannelIndex != settings.m_reverseAPIChannelIndex)); webapiReverseSendSettings(reverseAPIKeys, settings, fullUpdate || force); } @@ -366,7 +342,11 @@ void WDSPRx::applySettings(const WDSPRxSettings& settings, bool force) sendChannelSettings(pipes, reverseAPIKeys, settings, force); } - m_settings = settings; + if (force) { + m_settings = settings; + } else { + m_settings.applySettings(settingsKeys, settings); + } } QByteArray WDSPRx::serialize() const @@ -378,14 +358,14 @@ bool WDSPRx::deserialize(const QByteArray& data) { if (m_settings.deserialize(data)) { - MsgConfigureWDSPRx *msg = MsgConfigureWDSPRx::create(m_settings, true); + MsgConfigureWDSPRx *msg = MsgConfigureWDSPRx::create(QStringList(), m_settings, true); m_inputMessageQueue.push(msg); return true; } else { m_settings.resetToDefaults(); - MsgConfigureWDSPRx *msg = MsgConfigureWDSPRx::create(m_settings, true); + MsgConfigureWDSPRx *msg = MsgConfigureWDSPRx::create(QStringList(), m_settings, true); m_inputMessageQueue.push(msg); return false; } @@ -444,13 +424,13 @@ int WDSPRx::webapiSettingsPutPatch( WDSPRxSettings settings = m_settings; webapiUpdateChannelSettings(settings, channelSettingsKeys, response); - MsgConfigureWDSPRx *msg = MsgConfigureWDSPRx::create(settings, force); + MsgConfigureWDSPRx *msg = MsgConfigureWDSPRx::create(channelSettingsKeys, settings, force); m_inputMessageQueue.push(msg); qDebug("WDSPRx::webapiSettingsPutPatch: forward to GUI: %p", m_guiMessageQueue); if (m_guiMessageQueue) // forward to GUI if any { - MsgConfigureWDSPRx *msgToGUI = MsgConfigureWDSPRx::create(settings, force); + MsgConfigureWDSPRx *msgToGUI = MsgConfigureWDSPRx::create(channelSettingsKeys, settings, force); m_guiMessageQueue->push(msgToGUI); } diff --git a/plugins/channelrx/wdsprx/wdsprx.h b/plugins/channelrx/wdsprx/wdsprx.h index b7b7b95c6..f47a4d0cd 100644 --- a/plugins/channelrx/wdsprx/wdsprx.h +++ b/plugins/channelrx/wdsprx/wdsprx.h @@ -49,20 +49,23 @@ public: public: const WDSPRxSettings& getSettings() const { return m_settings; } + const QStringList& getSettingsKeys() const { return m_settingsKeys; } bool getForce() const { return m_force; } - static MsgConfigureWDSPRx* create(const WDSPRxSettings& settings, bool force) + static MsgConfigureWDSPRx* create(const QStringList& settingsKeys, const WDSPRxSettings& settings, bool force) { - return new MsgConfigureWDSPRx(settings, force); + return new MsgConfigureWDSPRx(settingsKeys, settings, force); } private: WDSPRxSettings m_settings; + QStringList m_settingsKeys; bool m_force; - MsgConfigureWDSPRx(const WDSPRxSettings& settings, bool force) : + MsgConfigureWDSPRx( const QStringList& settingsKeys, const WDSPRxSettings& settings, bool force) : Message(), m_settings(settings), + m_settingsKeys(settingsKeys), m_force(force) { } }; @@ -162,7 +165,7 @@ private: QNetworkRequest m_networkRequest; bool handleMessage(const Message& cmd) final; - void applySettings(const WDSPRxSettings& settings, bool force = false); + void applySettings( const QStringList& settingsKeys, const WDSPRxSettings& settings, bool force = false); void sendSampleRateToDemodAnalyzer() const; void webapiFormatChannelReport(SWGSDRangel::SWGChannelReport& response); void webapiReverseSendSettings(const QList& channelSettingsKeys, const WDSPRxSettings& settings, bool force); diff --git a/plugins/channelrx/wdsprx/wdsprxbaseband.cpp b/plugins/channelrx/wdsprx/wdsprxbaseband.cpp index f0a1e176d..97826c8e3 100644 --- a/plugins/channelrx/wdsprx/wdsprxbaseband.cpp +++ b/plugins/channelrx/wdsprx/wdsprxbaseband.cpp @@ -121,7 +121,7 @@ bool WDSPRxBaseband::handleMessage(const Message& cmd) MsgConfigureWDSPRxBaseband& cfg = (MsgConfigureWDSPRxBaseband&) cmd; qDebug() << "WDSPRxBaseband::handleMessage: MsgConfigureWDSPRxBaseband"; - applySettings(cfg.getSettings(), cfg.getForce()); + applySettings(cfg.getSettingsKeys(), cfg.getSettings(), cfg.getForce()); return true; } @@ -177,9 +177,9 @@ bool WDSPRxBaseband::handleMessage(const Message& cmd) } } -void WDSPRxBaseband::applySettings(const WDSPRxSettings& settings, bool force) +void WDSPRxBaseband::applySettings(const QStringList& settingsKeys, const WDSPRxSettings& settings, bool force) { - if ((settings.m_inputFrequencyOffset != m_settings.m_inputFrequencyOffset) || force) + if ((settingsKeys.contains("inputFrequencyOffset") && settings.m_inputFrequencyOffset != m_settings.m_inputFrequencyOffset) || force) { m_channelizer.setChannelization(m_audioSampleRate, settings.m_inputFrequencyOffset); m_sink.applyChannelSettings(m_channelizer.getChannelSampleRate(), m_channelizer.getChannelFrequencyOffset()); @@ -191,7 +191,7 @@ void WDSPRxBaseband::applySettings(const WDSPRxSettings& settings, bool force) } } - if ((settings.m_profiles[settings.m_profileIndex].m_spanLog2 != m_settings.m_profiles[settings.m_profileIndex].m_spanLog2) || force) + if ((settingsKeys.contains("spanLog2") && settings.m_profiles[settings.m_profileIndex].m_spanLog2 != m_settings.m_profiles[settings.m_profileIndex].m_spanLog2) || force) { if (m_spectrumVis) { @@ -200,7 +200,7 @@ void WDSPRxBaseband::applySettings(const WDSPRxSettings& settings, bool force) } } - if ((settings.m_audioDeviceName != m_settings.m_audioDeviceName) || force) + if ((settingsKeys.contains("audioDeviceName") && settings.m_audioDeviceName != m_settings.m_audioDeviceName) || force) { AudioDeviceManager *audioDeviceManager = DSPEngine::instance()->getAudioDeviceManager(); int audioDeviceIndex = audioDeviceManager->getOutputDeviceIndex(settings.m_audioDeviceName); @@ -228,9 +228,13 @@ void WDSPRxBaseband::applySettings(const WDSPRxSettings& settings, bool force) } } - m_sink.applySettings(settings, force); + m_sink.applySettings(settingsKeys, settings, force); - m_settings = settings; + if (force) { + m_settings = settings; + } else { + m_settings.applySettings(settingsKeys, settings); + } } int WDSPRxBaseband::getChannelSampleRate() const diff --git a/plugins/channelrx/wdsprx/wdsprxbaseband.h b/plugins/channelrx/wdsprx/wdsprxbaseband.h index 6042b51b2..860a163c9 100644 --- a/plugins/channelrx/wdsprx/wdsprxbaseband.h +++ b/plugins/channelrx/wdsprx/wdsprxbaseband.h @@ -41,20 +41,23 @@ public: public: const WDSPRxSettings& getSettings() const { return m_settings; } + const QStringList& getSettingsKeys() const { return m_settingsKeys; } bool getForce() const { return m_force; } - static MsgConfigureWDSPRxBaseband* create(const WDSPRxSettings& settings, bool force) + static MsgConfigureWDSPRxBaseband* create(const QStringList& settingsKeys, const WDSPRxSettings& settings, bool force) { - return new MsgConfigureWDSPRxBaseband(settings, force); + return new MsgConfigureWDSPRxBaseband(settingsKeys, settings, force); } private: WDSPRxSettings m_settings; + QStringList m_settingsKeys; bool m_force; - MsgConfigureWDSPRxBaseband(const WDSPRxSettings& settings, bool force) : + MsgConfigureWDSPRxBaseband(const QStringList& settingsKeys, const WDSPRxSettings& settings, bool force) : Message(), m_settings(settings), + m_settingsKeys(settingsKeys), m_force(force) { } }; @@ -89,7 +92,7 @@ private: QRecursiveMutex m_mutex; bool handleMessage(const Message& cmd); - void applySettings(const WDSPRxSettings& settings, bool force = false); + void applySettings(const QStringList& settingsKeys, const WDSPRxSettings& settings, bool force = false); MessageQueue *getMessageQueueToGUI() { return m_messageQueueToGUI; } private slots: diff --git a/plugins/channelrx/wdsprx/wdsprxgui.cpp b/plugins/channelrx/wdsprx/wdsprxgui.cpp index 319790569..07343ee2c 100644 --- a/plugins/channelrx/wdsprx/wdsprxgui.cpp +++ b/plugins/channelrx/wdsprx/wdsprxgui.cpp @@ -146,7 +146,7 @@ void WDSPRxGUI::channelMarkerChangedByCursor() { ui->deltaFrequency->setValue(m_channelMarker.getCenterFrequency()); m_settings.m_inputFrequencyOffset = m_channelMarker.getCenterFrequency(); - applySettings(); + applySettings(QStringList("inputFrequencyOffset")); } void WDSPRxGUI::channelMarkerHighlightedByCursor() @@ -159,7 +159,7 @@ void WDSPRxGUI::on_audioBinaural_toggled(bool binaural) m_audioBinaural = binaural; m_settings.m_audioBinaural = binaural; m_settings.m_profiles[m_settings.m_profileIndex].m_audioBinaural = m_settings.m_audioBinaural; - applySettings(); + applySettings(QStringList("audioBinaural")); } void WDSPRxGUI::on_audioFlipChannels_toggled(bool flip) @@ -167,7 +167,7 @@ void WDSPRxGUI::on_audioFlipChannels_toggled(bool flip) m_audioFlipChannels = flip; m_settings.m_audioFlipChannels = flip; m_settings.m_profiles[m_settings.m_profileIndex].m_audioFlipChannels = m_settings.m_audioFlipChannels; - applySettings(); + applySettings(QStringList("audioFlipChannels")); } void WDSPRxGUI::on_dsb_toggled(bool dsb) @@ -181,7 +181,7 @@ void WDSPRxGUI::on_deltaFrequency_changed(qint64 value) m_channelMarker.setCenterFrequency((int) value); m_settings.m_inputFrequencyOffset = m_channelMarker.getCenterFrequency(); updateAbsoluteCenterFrequency(); - applySettings(); + applySettings(QStringList("inputFrequencyOffset")); } void WDSPRxGUI::on_BW_valueChanged(int value) @@ -201,14 +201,14 @@ void WDSPRxGUI::on_volume_valueChanged(int value) { ui->volumeText->setText(QString("%1").arg(value)); m_settings.m_volume = (Real) CalcDb::powerFromdB(value); - applySettings(); + applySettings(QStringList("volume")); } void WDSPRxGUI::on_agc_toggled(bool checked) { m_settings.m_agc = checked; m_settings.m_profiles[m_settings.m_profileIndex].m_agc = m_settings.m_agc; - applySettings(); + applySettings(QStringList("agc")); } void WDSPRxGUI::on_agcGain_valueChanged(int value) @@ -217,42 +217,42 @@ void WDSPRxGUI::on_agcGain_valueChanged(int value) ui->agcGainText->setText(s); m_settings.m_agcGain = value; m_settings.m_profiles[m_settings.m_profileIndex].m_agcGain = m_settings.m_agcGain; - applySettings(); + applySettings(QStringList("agcGain")); } void WDSPRxGUI::on_dnr_toggled(bool checked) { m_settings.m_dnr = checked; m_settings.m_profiles[m_settings.m_profileIndex].m_dnr = m_settings.m_dnr; - applySettings(); + applySettings(QStringList("dnr")); } void WDSPRxGUI::on_dnb_toggled(bool checked) { m_settings.m_dnb = checked; m_settings.m_profiles[m_settings.m_profileIndex].m_dnb = m_settings.m_dnb; - applySettings(); + applySettings(QStringList("dnb")); } void WDSPRxGUI::on_anf_toggled(bool checked) { m_settings.m_anf = checked; m_settings.m_profiles[m_settings.m_profileIndex].m_anf = m_settings.m_anf; - applySettings(); + applySettings(QStringList("anf")); } void WDSPRxGUI::on_cwPeaking_toggled(bool checked) { m_settings.m_cwPeaking = checked; m_settings.m_profiles[m_settings.m_profileIndex].m_cwPeaking = m_settings.m_cwPeaking; - applySettings(); + applySettings(QStringList("cwPeaking")); } void WDSPRxGUI::on_squelch_toggled(bool checked) { m_settings.m_squelch = checked; m_settings.m_profiles[m_settings.m_profileIndex].m_squelch = m_settings.m_squelch; - applySettings(); + applySettings(QStringList("squelch")); } void WDSPRxGUI::on_squelchThreshold_valueChanged(int value) @@ -260,14 +260,14 @@ void WDSPRxGUI::on_squelchThreshold_valueChanged(int value) m_settings.m_squelchThreshold = value; m_settings.m_profiles[m_settings.m_profileIndex].m_squelchThreshold = m_settings.m_squelchThreshold; ui->squelchThresholdText->setText(tr("%1").arg(m_settings.m_squelchThreshold)); - applySettings(); + applySettings(QStringList("squelchThreshold")); } void WDSPRxGUI::on_equalizer_toggled(bool checked) { m_settings.m_equalizer = checked; m_settings.m_profiles[m_settings.m_profileIndex].m_equalizer = m_settings.m_equalizer; - applySettings(); + applySettings(QStringList("equalizer")); } void WDSPRxGUI::on_rit_toggled(bool checked) @@ -275,7 +275,7 @@ void WDSPRxGUI::on_rit_toggled(bool checked) m_settings.m_rit = checked; m_settings.m_profiles[m_settings.m_profileIndex].m_rit = m_settings.m_rit; m_channelMarker.setShift(checked ? (int) m_settings.m_ritFrequency: 0); - applySettings(); + applySettings(QStringList("rit")); } void WDSPRxGUI::on_ritFrequency_valueChanged(int value) @@ -284,7 +284,7 @@ void WDSPRxGUI::on_ritFrequency_valueChanged(int value) m_settings.m_profiles[m_settings.m_profileIndex].m_ritFrequency = m_settings.m_ritFrequency; ui->ritFrequencyText->setText(tr("%1").arg(value)); m_channelMarker.setShift(m_settings.m_rit ? value: 0); - applySettings(); + applySettings(QStringList("ritFrequency")); } void WDSPRxGUI::on_dbOrS_toggled(bool checked) @@ -299,7 +299,7 @@ void WDSPRxGUI::on_audioMute_toggled(bool checked) { m_audioMute = checked; m_settings.m_audioMute = checked; - applySettings(); + applySettings(QStringList("audioMute")); } void WDSPRxGUI::on_spanLog2_valueChanged(int value) @@ -325,7 +325,7 @@ void WDSPRxGUI::on_flipSidebands_clicked(bool checked) void WDSPRxGUI::on_fftWindow_currentIndexChanged(int index) { m_settings.m_profiles[m_settings.m_profileIndex].m_fftWindow = index; - applySettings(); + applySettings(QStringList("fftWindow")); } void WDSPRxGUI::on_profileIndex_valueChanged(int value) @@ -469,7 +469,14 @@ void WDSPRxGUI::onMenuDialogCalled(const QPoint &p) updateIndexLabel(); } - applySettings(); + applySettings(QStringList() << "rgbColor" + << "title" + << "useReverseAPI" + << "reverseAPIAddress" + << "reverseAPIPort" + << "reverseAPIDeviceIndex" + << "reverseAPIChannelIndex" + << "streamIndex"); } resetContextMenuType(); @@ -481,7 +488,7 @@ void WDSPRxGUI::onWidgetRolled(const QWidget* widget, bool rollDown) (void) rollDown; getRollupContents()->saveState(m_rollupState); - applySettings(); + applySettings(QStringList()); } WDSPRxGUI::WDSPRxGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, BasebandSampleSink *rxChannel, QWidget* parent) : @@ -626,11 +633,11 @@ bool WDSPRxGUI::blockApplySettings(bool block) return ret; } -void WDSPRxGUI::applySettings(bool force) +void WDSPRxGUI::applySettings(const QStringList& settingsKeys, bool force) { if (m_doApplySettings) { - WDSPRx::MsgConfigureWDSPRx* message = WDSPRx::MsgConfigureWDSPRx::create( m_settings, force); + WDSPRx::MsgConfigureWDSPRx* message = WDSPRx::MsgConfigureWDSPRx::create(settingsKeys, m_settings, force); m_wdspRx->getInputMessageQueue()->push(message); } } @@ -763,7 +770,7 @@ void WDSPRxGUI::applyBandwidths(unsigned int spanLog2, bool force) m_settings.m_profiles[m_settings.m_profileIndex].m_highCutoff = (Real) (bw * 100); m_settings.m_profiles[m_settings.m_profileIndex].m_lowCutoff = (Real) (lw * 100); - applySettings(force); + applySettings(QStringList({"dsb", "spanLog2", "highCutoff", "lowCutoff"}), force); bool wasBlocked = blockApplySettings(true); m_channelMarker.setBandwidth(bw * 200); @@ -932,7 +939,7 @@ void WDSPRxGUI::audioSelect(const QPoint& p) if (audioSelect.m_selected) { m_settings.m_audioDeviceName = audioSelect.m_audioDeviceName; - applySettings(); + applySettings(QStringList("audioDeviceName")); } } @@ -963,17 +970,17 @@ void WDSPRxGUI::agcSetup(int iValueChanged) case WDSPRxAGCDialog::ValueChanged::ChangedMode: m_settings.m_agcMode = m_agcDialog->getAGCMode(); m_settings.m_profiles[m_settings.m_profileIndex].m_agcMode = m_settings.m_agcMode; - applySettings(); + applySettings(QStringList("agcMode")); break; case WDSPRxAGCDialog::ValueChanged::ChangedSlope: m_settings.m_agcSlope = m_agcDialog->getAGCSlope(); m_settings.m_profiles[m_settings.m_profileIndex].m_agcSlope = m_settings.m_agcSlope; - applySettings(); + applySettings(QStringList("agcSlope")); break; case WDSPRxAGCDialog::ValueChanged::ChangedHangThreshold: m_settings.m_agcHangThreshold = m_agcDialog->getAGCHangThreshold(); m_settings.m_profiles[m_settings.m_profileIndex].m_agcHangThreshold = m_settings.m_agcHangThreshold; - applySettings(); + applySettings(QStringList("agcHangThreshold")); break; default: break; @@ -1011,37 +1018,37 @@ void WDSPRxGUI::dnbSetup(int32_t iValueChanged) case WDSPRxDNBDialog::ValueChanged::ChangedNB: m_settings.m_nbScheme = m_dnbDialog->getNBScheme(); m_settings.m_profiles[m_settings.m_profileIndex].m_nbScheme = m_settings.m_nbScheme; - applySettings(); + applySettings(QStringList("nbScheme")); break; case WDSPRxDNBDialog::ValueChanged::ChangedNB2Mode: m_settings.m_nb2Mode = m_dnbDialog->getNB2Mode(); m_settings.m_profiles[m_settings.m_profileIndex].m_nb2Mode = m_settings.m_nb2Mode; - applySettings(); + applySettings(QStringList("nb2Mode")); break; case WDSPRxDNBDialog::ValueChanged::ChangedNBSlewTime: m_settings.m_nbSlewTime = m_dnbDialog->getNBSlewTime(); m_settings.m_profiles[m_settings.m_profileIndex].m_nbSlewTime = m_settings.m_nbSlewTime; - applySettings(); + applySettings(QStringList("nbSlewTime")); break; case WDSPRxDNBDialog::ValueChanged::ChangedNBLeadTime: m_settings.m_nbLeadTime = m_dnbDialog->getNBLeadTime(); m_settings.m_profiles[m_settings.m_profileIndex].m_nbLeadTime = m_settings.m_nbLeadTime; - applySettings(); + applySettings(QStringList("nbLeadTime")); break; case WDSPRxDNBDialog::ValueChanged::ChangedNBLagTime: m_settings.m_nbLagTime = m_dnbDialog->getNBLagTime(); m_settings.m_profiles[m_settings.m_profileIndex].m_nbLagTime = m_settings.m_nbLagTime; - applySettings(); + applySettings(QStringList("nbLagTime")); break; case WDSPRxDNBDialog::ValueChanged::ChangedNBThreshold: m_settings.m_nbThreshold = m_dnbDialog->getNBThreshold(); m_settings.m_profiles[m_settings.m_profileIndex].m_nbThreshold = m_settings.m_nbThreshold; - applySettings(); + applySettings(QStringList("nbThreshold")); break; case WDSPRxDNBDialog::ValueChanged::ChangedNBAvgTime: m_settings.m_nbAvgTime = m_dnbDialog->getNBAvgTime(); m_settings.m_profiles[m_settings.m_profileIndex].m_nbAvgTime = m_settings.m_nbAvgTime; - applySettings(); + applySettings(QStringList("nbAvgTime")); break; default: break; @@ -1078,32 +1085,32 @@ void WDSPRxGUI::dnrSetup(int32_t iValueChanged) case WDSPRxDNRDialog::ValueChanged::ChangedSNB: m_settings.m_snb = m_dnrDialog->getSNB(); m_settings.m_profiles[m_settings.m_profileIndex].m_snb = m_settings.m_snb; - applySettings(); + applySettings(QStringList("snb")); break; case WDSPRxDNRDialog::ValueChanged::ChangedNR: m_settings.m_nrScheme = m_dnrDialog->getNRScheme(); m_settings.m_profiles[m_settings.m_profileIndex].m_nrScheme = m_settings.m_nrScheme; - applySettings(); + applySettings(QStringList("nrScheme")); break; case WDSPRxDNRDialog::ValueChanged::ChangedNR2Gain: m_settings.m_nr2Gain = m_dnrDialog->getNR2Gain(); m_settings.m_profiles[m_settings.m_profileIndex].m_nr2Gain = m_settings.m_nr2Gain; - applySettings(); + applySettings(QStringList("nr2Gain")); break; case WDSPRxDNRDialog::ValueChanged::ChangedNR2NPE: m_settings.m_nr2NPE = m_dnrDialog->getNR2NPE(); m_settings.m_profiles[m_settings.m_profileIndex].m_nr2NPE = m_settings.m_nr2NPE; - applySettings(); + applySettings(QStringList("nr2NPE")); break; case WDSPRxDNRDialog::ValueChanged::ChangedNRPosition: m_settings.m_nrPosition = m_dnrDialog->getNRPosition(); m_settings.m_profiles[m_settings.m_profileIndex].m_nrPosition = m_settings.m_nrPosition; - applySettings(); + applySettings(QStringList("nrPosition")); break; case WDSPRxDNRDialog::ValueChanged::ChangedNR2Artifacts: m_settings.m_nr2ArtifactReduction = m_dnrDialog->getNR2ArtifactReduction(); m_settings.m_profiles[m_settings.m_profileIndex].m_nr2ArtifactReduction = m_settings.m_nr2ArtifactReduction; - applySettings(); + applySettings(QStringList("nr2ArtifactReduction")); break; default: break; @@ -1137,17 +1144,17 @@ void WDSPRxGUI::cwPeakSetup(int iValueChanged) case WDSPRxCWPeakDialog::ChangedCWPeakFrequency: m_settings.m_cwPeakFrequency = m_cwPeakDialog->getCWPeakFrequency(); m_settings.m_profiles[m_settings.m_profileIndex].m_cwPeakFrequency = m_settings.m_cwPeakFrequency; - applySettings(); + applySettings(QStringList("cwPeakFrequency")); break; case WDSPRxCWPeakDialog::ChangedCWBandwidth: m_settings.m_cwBandwidth = m_cwPeakDialog->getCWBandwidth(); m_settings.m_profiles[m_settings.m_profileIndex].m_cwBandwidth = m_settings.m_cwBandwidth; - applySettings(); + applySettings(QStringList("cwBandwidth")); break; case WDSPRxCWPeakDialog::ChangedCWGain: m_settings.m_cwGain = m_cwPeakDialog->getCWGain(); m_settings.m_profiles[m_settings.m_profileIndex].m_cwGain = m_settings.m_cwGain; - applySettings(); + applySettings(QStringList("cwGain")); break; default: break; @@ -1199,7 +1206,7 @@ void WDSPRxGUI::amSetup(int iValueChanged) { m_settings.m_amFadeLevel = m_amDialog->getFadeLevel(); m_settings.m_profiles[m_settings.m_profileIndex].m_amFadeLevel = m_settings.m_amFadeLevel; - applySettings(); + applySettings(QStringList("amFadeLevel")); } } @@ -1216,37 +1223,37 @@ void WDSPRxGUI::fmSetup(int iValueChanged) case WDSPRxFMDialog::ChangedDeviation: m_settings.m_fmDeviation = m_fmDialog->getDeviation(); m_settings.m_profiles[m_settings.m_profileIndex].m_fmDeviation = m_settings.m_fmDeviation; - applySettings(); + applySettings(QStringList("fmDeviation")); break; case WDSPRxFMDialog::ChangedAFLow: m_settings.m_fmAFLow = m_fmDialog->getAFLow(); m_settings.m_profiles[m_settings.m_profileIndex].m_fmAFLow = m_settings.m_fmAFLow; - applySettings(); + applySettings(QStringList("fmAFLow")); break; case WDSPRxFMDialog::ChangedAFHigh: m_settings.m_fmAFHigh = m_fmDialog->getAFHigh(); m_settings.m_profiles[m_settings.m_profileIndex].m_fmAFHigh = m_settings.m_fmAFHigh; - applySettings(); + applySettings(QStringList("fmAFHigh")); break; case WDSPRxFMDialog::ChangedAFLimiter: m_settings.m_fmAFLimiter = m_fmDialog->getAFLimiter(); m_settings.m_profiles[m_settings.m_profileIndex].m_fmAFLimiter = m_settings.m_fmAFLimiter; - applySettings(); + applySettings(QStringList("fmAFLimiter")); break; case WDSPRxFMDialog::ChangedAFLimiterGain: m_settings.m_fmAFLimiterGain = m_fmDialog->getAFLimiterGain(); m_settings.m_profiles[m_settings.m_profileIndex].m_fmAFLimiterGain = m_settings.m_fmAFLimiterGain; - applySettings(); + applySettings(QStringList("fmAFLimiterGain")); break; case WDSPRxFMDialog::ChangedCTCSSNotch: m_settings.m_fmCTCSSNotch = m_fmDialog->getCTCSSNotch(); m_settings.m_profiles[m_settings.m_profileIndex].m_fmCTCSSNotch = m_settings.m_fmCTCSSNotch; - applySettings(); + applySettings(QStringList("fmCTCSSNotch")); break; case WDSPRxFMDialog::ChangedCTCSSNotchFrequency: m_settings.m_fmCTCSSNotchFrequency = m_fmDialog->getCTCSSNotchFrequency(); m_settings.m_profiles[m_settings.m_profileIndex].m_fmCTCSSNotchFrequency = m_settings.m_fmCTCSSNotchFrequency; - applySettings(); + applySettings(QStringList("fmCTCSSNotchFrequency")); break; default: break; @@ -1281,22 +1288,22 @@ void WDSPRxGUI::squelchSetup(int iValueChanged) case WDSPRxSquelchDialog::ChangedMode: m_settings.m_squelchMode = m_squelchDialog->getMode(); m_settings.m_profiles[m_settings.m_profileIndex].m_squelchMode = m_settings.m_squelchMode; - applySettings(); + applySettings(QStringList("squelchMode")); break; case WDSPRxSquelchDialog::ChangedSSQLTauMute: m_settings.m_ssqlTauMute = m_squelchDialog->getSSQLTauMute(); m_settings.m_profiles[m_settings.m_profileIndex].m_ssqlTauMute = m_settings.m_ssqlTauMute; - applySettings(); + applySettings(QStringList("ssqlTauMute")); break; case WDSPRxSquelchDialog::ChangedSSQLTauUnmute: m_settings.m_ssqlTauUnmute = m_squelchDialog->getSSQLTauUnmute(); m_settings.m_profiles[m_settings.m_profileIndex].m_ssqlTauUnmute = m_settings.m_ssqlTauUnmute; - applySettings(); + applySettings(QStringList("ssqlTauUnmute")); break; case WDSPRxSquelchDialog::ChangedAMSQMaxTail: m_settings.m_amsqMaxTail = m_squelchDialog->getAMSQMaxTail(); m_settings.m_profiles[m_settings.m_profileIndex].m_amsqMaxTail = m_settings.m_amsqMaxTail; - applySettings(); + applySettings(QStringList("amsqMaxTail")); break; default: break; @@ -1329,12 +1336,12 @@ void WDSPRxGUI::equalizerSetup(int iValueChanged) case WDSPRxEqDialog::ChangedFrequency: m_settings.m_eqF = m_equalizerDialog->getEqF(); m_settings.m_profiles[m_settings.m_profileIndex].m_eqF = m_settings.m_eqF; - applySettings(); + applySettings(QStringList("eqF")); break; case WDSPRxEqDialog::ChangedGain: m_settings.m_eqG = m_equalizerDialog->getEqG(); m_settings.m_profiles[m_settings.m_profileIndex].m_eqG = m_settings.m_eqG; - applySettings(); + applySettings(QStringList("eqG")); break; default: break; @@ -1365,7 +1372,7 @@ void WDSPRxGUI::panSetup(int iValueChanged) { m_settings.m_audioPan = m_panDialog->getPan(); m_settings.m_profiles[m_settings.m_profileIndex].m_audioPan = m_settings.m_audioPan; - applySettings(); + applySettings(QStringList("audioPan")); } } diff --git a/plugins/channelrx/wdsprx/wdsprxgui.h b/plugins/channelrx/wdsprx/wdsprxgui.h index fb354eda7..da3e6a652 100644 --- a/plugins/channelrx/wdsprx/wdsprxgui.h +++ b/plugins/channelrx/wdsprx/wdsprxgui.h @@ -125,7 +125,7 @@ private: ~WDSPRxGUI() final; bool blockApplySettings(bool block); - void applySettings(bool force = false); + void applySettings(const QStringList& settingsKeys, bool force = false); void applyBandwidths(unsigned int spanLog2, bool force = false); unsigned int spanLog2Max() const; void displaySettings(); diff --git a/plugins/channelrx/wdsprx/wdsprxsink.cpp b/plugins/channelrx/wdsprx/wdsprxsink.cpp index 7a266714e..8840d9f52 100644 --- a/plugins/channelrx/wdsprx/wdsprxsink.cpp +++ b/plugins/channelrx/wdsprx/wdsprxsink.cpp @@ -134,7 +134,7 @@ WDSPRxSink::WDSPRxSink() : m_rxa->setPassband(0, m_Bandwidth); applyChannelSettings(m_channelSampleRate, m_channelFrequencyOffset, true); - applySettings(m_settings, true); + applySettings(QStringList(), m_settings, true); } WDSPRxSink::~WDSPRxSink() @@ -329,47 +329,15 @@ void WDSPRxSink::applyAudioSampleRate(int sampleRate) } } -void WDSPRxSink::applySettings(const WDSPRxSettings& settings, bool force) +void WDSPRxSink::applySettings(const QStringList& settingsKeys, const WDSPRxSettings& settings, bool force) { - qDebug() << "WDSPRxSink::applySettings:" - << " m_demod: " << settings.m_demod - << " m_inputFrequencyOffset: " << settings.m_inputFrequencyOffset - << " m_profileIndex: " << settings.m_profileIndex - << " m_spanLog2: " << settings.m_profiles[settings.m_profileIndex].m_spanLog2 - << " m_highCutoff: " << settings.m_profiles[settings.m_profileIndex].m_highCutoff - << " m_lowCutoff: " << settings.m_profiles[settings.m_profileIndex].m_lowCutoff - << " m_fftWindow: " << settings.m_profiles[settings.m_profileIndex].m_fftWindow << "]" - << " m_volume: " << settings.m_volume - << " m_audioBinaural: " << settings.m_audioBinaural - << " m_audioFlipChannels: " << settings.m_audioFlipChannels - << " m_dsb: " << settings.m_dsb - << " m_audioMute: " << settings.m_audioMute - << " m_agc: " << settings.m_agc - << " m_agcMode: " << settings.m_agcMode - << " m_agcGain: " << settings.m_agcGain - << " m_agcSlope: " << settings.m_agcSlope - << " m_agcHangThreshold: " << settings.m_agcHangThreshold - << " m_audioDeviceName: " << settings.m_audioDeviceName - << " m_dnr: " << settings.m_dnr - << " m_nrScheme: " << settings.m_nrScheme - << " m_nrPosition: "<< settings.m_nrPosition - << " m_nr2Gain: " << settings.m_nr2Gain - << " m_nr2NPE: " << settings.m_nr2NPE - << " m_nr2ArtifactReduction: " << settings.m_nr2ArtifactReduction - << " m_rit: " << settings.m_rit - << " m_ritFrequency: " << settings.m_ritFrequency - << " m_streamIndex: " << settings.m_streamIndex - << " m_useReverseAPI: " << settings.m_useReverseAPI - << " m_reverseAPIAddress: " << settings.m_reverseAPIAddress - << " m_reverseAPIPort: " << settings.m_reverseAPIPort - << " m_reverseAPIDeviceIndex: " << settings.m_reverseAPIDeviceIndex - << " m_reverseAPIChannelIndex: " << settings.m_reverseAPIChannelIndex - << " force: " << force; + qDebug() << "WDSPRxSink::applySettings:" << settings.getDebugString(settingsKeys, force); // RIT - if ((m_settings.m_rit != settings.m_rit) || (m_settings.m_ritFrequency != settings.m_ritFrequency) || force) + if ((settingsKeys.contains("rit") && (m_settings.m_rit != settings.m_rit)) || + (settingsKeys.contains("ritFrequency") && (m_settings.m_ritFrequency != settings.m_ritFrequency)) || force) { m_rxa->shift->SetFreq(settings.m_ritFrequency); m_rxa->shift->SetRun(settings.m_rit ? 1 : 0); @@ -377,11 +345,11 @@ void WDSPRxSink::applySettings(const WDSPRxSettings& settings, bool force) // Filter and mode - if((m_settings.m_profiles[m_settings.m_profileIndex].m_highCutoff != settings.m_profiles[settings.m_profileIndex].m_highCutoff) || - (m_settings.m_profiles[m_settings.m_profileIndex].m_lowCutoff != settings.m_profiles[settings.m_profileIndex].m_lowCutoff) || - (m_settings.m_profiles[m_settings.m_profileIndex].m_fftWindow != settings.m_profiles[settings.m_profileIndex].m_fftWindow) || - (m_settings.m_demod != settings.m_demod) || - (m_settings.m_dsb != settings.m_dsb) || force) + if((settingsKeys.contains("highCutoff") && (m_settings.m_profiles[m_settings.m_profileIndex].m_highCutoff != settings.m_profiles[settings.m_profileIndex].m_highCutoff)) || + (settingsKeys.contains("lowCutoff") && (m_settings.m_profiles[m_settings.m_profileIndex].m_lowCutoff != settings.m_profiles[settings.m_profileIndex].m_lowCutoff)) || + (settingsKeys.contains("fftWindow") && (m_settings.m_profiles[m_settings.m_profileIndex].m_fftWindow != settings.m_profiles[settings.m_profileIndex].m_fftWindow)) || + (settingsKeys.contains("demod") && (m_settings.m_demod != settings.m_demod)) || + (settingsKeys.contains("dsb") && (m_settings.m_dsb != settings.m_dsb)) || force) { float band; float low; @@ -480,14 +448,14 @@ void WDSPRxSink::applySettings(const WDSPRxSettings& settings, bool force) } } - if ((m_settings.m_profiles[settings.m_profileIndex].m_spanLog2 != settings.m_profiles[settings.m_profileIndex].m_spanLog2) || force) { + if ((settingsKeys.contains("spanLog2") && (m_settings.m_profiles[settings.m_profileIndex].m_spanLog2 != settings.m_profiles[settings.m_profileIndex].m_spanLog2)) || force) { m_spectrumProbe.setSpanLog2(settings.m_profiles[settings.m_profileIndex].m_spanLog2); } // Noise Reduction - if ((m_settings.m_dnr != settings.m_dnr) - || (m_settings.m_nrScheme != settings.m_nrScheme) || force) + if ((settingsKeys.contains("dnr") && (m_settings.m_dnr != settings.m_dnr)) + || (settingsKeys.contains("nrScheme") && (m_settings.m_nrScheme != settings.m_nrScheme)) || force) { m_rxa->setANRRun(0); m_rxa->setEMNRRun(0); @@ -508,7 +476,7 @@ void WDSPRxSink::applySettings(const WDSPRxSettings& settings, bool force) } } - if ((m_settings.m_nrPosition != settings.m_nrPosition) || force) + if ((settingsKeys.contains("nrPosition") && (m_settings.m_nrPosition != settings.m_nrPosition)) || force) { switch (settings.m_nrPosition) { @@ -525,7 +493,7 @@ void WDSPRxSink::applySettings(const WDSPRxSettings& settings, bool force) } } - if ((m_settings.m_nr2Gain != settings.m_nr2Gain) || force) + if ((settingsKeys.contains("nr2Gain") && (m_settings.m_nr2Gain != settings.m_nr2Gain)) || force) { switch (settings.m_nr2Gain) { @@ -543,7 +511,7 @@ void WDSPRxSink::applySettings(const WDSPRxSettings& settings, bool force) } } - if ((m_settings.m_nr2NPE != settings.m_nr2NPE) || force) + if ((settingsKeys.contains("nr2NPE") && (m_settings.m_nr2NPE != settings.m_nr2NPE)) || force) { switch (settings.m_nr2NPE) { @@ -558,41 +526,41 @@ void WDSPRxSink::applySettings(const WDSPRxSettings& settings, bool force) } } - if ((m_settings.m_nr2ArtifactReduction != settings.m_nr2ArtifactReduction) || force) { + if ((settingsKeys.contains("nr2ArtifactReduction") && (m_settings.m_nr2ArtifactReduction != settings.m_nr2ArtifactReduction)) || force) { m_rxa->emnr->setAeRun(settings.m_nr2ArtifactReduction ? 1 : 0); } - if ((m_settings.m_anf != settings.m_anf) || force) { + if ((settingsKeys.contains("anf") && (m_settings.m_anf != settings.m_anf)) || force) { m_rxa->setANFRun(settings.m_anf ? 1 : 0); } // Caution: Causes corruption - if ((m_settings.m_snb != settings.m_snb) || force) { + if ((settingsKeys.contains("snb") && (m_settings.m_snb != settings.m_snb)) || force) { m_rxa->setSNBARun(settings.m_snb ? 1 : 0); } // CW Peaking - if ((m_settings.m_cwPeaking != settings.m_cwPeaking) || force) { + if ((settingsKeys.contains("cwPeaking") && (m_settings.m_cwPeaking != settings.m_cwPeaking)) || force) { m_rxa->speak->setRun(settings.m_cwPeaking ? 1 : 0); } - if ((m_settings.m_cwPeakFrequency != settings.m_cwPeakFrequency) || force) { + if ((settingsKeys.contains("cwPeakFrequency") && (m_settings.m_cwPeakFrequency != settings.m_cwPeakFrequency)) || force) { m_rxa->speak->setFreq(settings.m_cwPeakFrequency); } - if ((m_settings.m_cwBandwidth != settings.m_cwBandwidth) || force) { + if ((settingsKeys.contains("cwBandwidth") && (m_settings.m_cwBandwidth != settings.m_cwBandwidth)) || force) { m_rxa->speak->setBandwidth(settings.m_cwBandwidth); } - if ((m_settings.m_cwGain != settings.m_cwGain) || force) { + if ((settingsKeys.contains("cwGain") && (m_settings.m_cwGain != settings.m_cwGain)) || force) { m_rxa->speak->setGain(settings.m_cwGain); } // Noise Blanker - if ((m_settings.m_dnb != settings.m_dnb) - || (m_settings.m_nbScheme != settings.m_nbScheme) || force) + if ((settingsKeys.contains("dnb") && (m_settings.m_dnb != settings.m_dnb)) + || (settingsKeys.contains("nbScheme") && (m_settings.m_nbScheme != settings.m_nbScheme)) || force) { m_rxa->anb->setRun(0); m_rxa->nob->setRun(0); @@ -613,31 +581,31 @@ void WDSPRxSink::applySettings(const WDSPRxSettings& settings, bool force) } } - if ((m_settings.m_nbSlewTime != settings.m_nbSlewTime) || force) + if ((settingsKeys.contains("nbSlewTime") && (m_settings.m_nbSlewTime != settings.m_nbSlewTime)) || force) { m_rxa->anb->setTau(settings.m_nbSlewTime * 0.001); m_rxa->nob->setTau(settings.m_nbSlewTime * 0.001); } - if ((m_settings.m_nbLeadTime != settings.m_nbLeadTime) || force) + if ((settingsKeys.contains("nbLeadTime") && (m_settings.m_nbLeadTime != settings.m_nbLeadTime)) || force) { m_rxa->anb->setAdvtime(settings.m_nbLeadTime * 0.001); m_rxa->nob->setAdvtime(settings.m_nbLeadTime * 0.001); } - if ((m_settings.m_nbLagTime != settings.m_nbLagTime) || force) + if ((settingsKeys.contains("nbLagTime") && (m_settings.m_nbLagTime != settings.m_nbLagTime)) || force) { m_rxa->anb->setHangtime(settings.m_nbLagTime * 0.001); m_rxa->nob->setHangtime(settings.m_nbLagTime * 0.001); } - if ((m_settings.m_nbThreshold != settings.m_nbThreshold) || force) + if ((settingsKeys.contains("nbThreshold") && (m_settings.m_nbThreshold != settings.m_nbThreshold)) || force) { m_rxa->anb->setThreshold(settings.m_nbThreshold); m_rxa->nob->setThreshold(settings.m_nbThreshold); } - if ((m_settings.m_nbAvgTime != settings.m_nbAvgTime) || force) + if ((settingsKeys.contains("nbAvgTime") && (m_settings.m_nbAvgTime != settings.m_nbAvgTime)) || force) { m_rxa->anb->setBacktau(settings.m_nbAvgTime * 0.001); m_rxa->nob->setBacktau(settings.m_nbAvgTime * 0.001); @@ -645,43 +613,43 @@ void WDSPRxSink::applySettings(const WDSPRxSettings& settings, bool force) // AM option - if ((m_settings.m_amFadeLevel != settings.m_amFadeLevel) || force) { + if ((settingsKeys.contains("amFadeLevel") && (m_settings.m_amFadeLevel != settings.m_amFadeLevel)) || force) { m_rxa->amd->setFadeLevel(settings.m_amFadeLevel); } // FM options - if ((m_settings.m_fmDeviation != settings.m_fmDeviation) || force) { + if ((settingsKeys.contains("fmDeviation") && (m_settings.m_fmDeviation != settings.m_fmDeviation)) || force) { m_rxa->fmd->setDeviation(settings.m_fmDeviation); } - if ((m_settings.m_fmAFLow != settings.m_fmAFLow) - || (m_settings.m_fmAFHigh != settings.m_fmAFHigh) || force) + if ((settingsKeys.contains("fmAFLow") && (m_settings.m_fmAFLow != settings.m_fmAFLow)) + || (settingsKeys.contains("fmAFHigh") && (m_settings.m_fmAFHigh != settings.m_fmAFHigh)) || force) { m_rxa->fmd->setAFFilter(settings.m_fmAFLow, settings.m_fmAFHigh); } - if ((m_settings.m_fmAFLimiter != settings.m_fmAFLimiter) || force) { + if ((settingsKeys.contains("fmAFLimiter") && (m_settings.m_fmAFLimiter != settings.m_fmAFLimiter)) || force) { m_rxa->fmd->setLimRun(settings.m_fmAFLimiter ? 1 : 0); } - if ((m_settings.m_fmAFLimiterGain != settings.m_fmAFLimiterGain) || force) { + if ((settingsKeys.contains("fmAFLimiterGain") && (m_settings.m_fmAFLimiterGain != settings.m_fmAFLimiterGain)) || force) { m_rxa->fmd->setLimGain(settings.m_fmAFLimiterGain); } - if ((m_settings.m_fmCTCSSNotch != settings.m_fmCTCSSNotch) || force) { + if ((settingsKeys.contains("fmCTCSSNotch") && (m_settings.m_fmCTCSSNotch != settings.m_fmCTCSSNotch)) || force) { m_rxa->fmd->setCTCSSRun(settings.m_fmCTCSSNotch ? 1 : 0); } - if ((m_settings.m_fmCTCSSNotchFrequency != settings.m_fmCTCSSNotchFrequency) || force) { + if ((settingsKeys.contains("fmCTCSSNotchFrequency") && (m_settings.m_fmCTCSSNotchFrequency != settings.m_fmCTCSSNotchFrequency)) || force) { m_rxa->fmd->setCTCSSFreq(settings.m_fmCTCSSNotchFrequency); } // Squelch - if ((m_settings.m_squelch != settings.m_squelch) - || (m_settings.m_squelchThreshold != settings.m_squelchThreshold) - || (m_settings.m_squelchMode != settings.m_squelchMode) || force) + if ((settingsKeys.contains("squelch") && (m_settings.m_squelch != settings.m_squelch)) + || (settingsKeys.contains("squelchThreshold") && (m_settings.m_squelchThreshold != settings.m_squelchThreshold)) + || (settingsKeys.contains("squelchMode") && (m_settings.m_squelchMode != settings.m_squelchMode)) || force) { m_rxa->ssql->setRun(0); m_rxa->amsq->setRun(0); @@ -719,39 +687,39 @@ void WDSPRxSink::applySettings(const WDSPRxSettings& settings, bool force) } } - if ((m_settings.m_ssqlTauMute != settings.m_ssqlTauMute) || force) { + if ((settingsKeys.contains("ssqlTauMute") && (m_settings.m_ssqlTauMute != settings.m_ssqlTauMute)) || force) { m_rxa->ssql->setTauMute(settings.m_ssqlTauMute); } - if ((m_settings.m_ssqlTauUnmute != settings.m_ssqlTauUnmute) || force) { + if ((settingsKeys.contains("ssqlTauUnmute") && (m_settings.m_ssqlTauUnmute != settings.m_ssqlTauUnmute)) || force) { m_rxa->ssql->setTauUnMute(settings.m_ssqlTauUnmute); } - if ((m_settings.m_amsqMaxTail != settings.m_amsqMaxTail) || force) { + if ((settingsKeys.contains("amsqMaxTail") && (m_settings.m_amsqMaxTail != settings.m_amsqMaxTail)) || force) { m_rxa->amsq->setMaxTail(settings.m_amsqMaxTail); } // Equalizer - if ((m_settings.m_equalizer != settings.m_equalizer) || force) { + if ((settingsKeys.contains("equalizer") && (m_settings.m_equalizer != settings.m_equalizer)) || force) { m_rxa->eqp->setRun(settings.m_equalizer ? 1 : 0); } - if ((m_settings.m_eqF != settings.m_eqF) - || (m_settings.m_eqG != settings.m_eqG) || force) + if ((settingsKeys.contains("eqF") && (m_settings.m_eqF != settings.m_eqF)) + || (settingsKeys.contains("eqG") && (m_settings.m_eqG != settings.m_eqG)) || force) { m_rxa->eqp->setProfile(10, settings.m_eqF.data(), settings.m_eqG.data()); } // Audio panel - if ((m_settings.m_volume != settings.m_volume) || force) { + if ((settingsKeys.contains("volume") && (m_settings.m_volume != settings.m_volume)) || force) { m_rxa->panel->setGain1(settings.m_volume); } - if ((m_settings.m_audioBinaural != settings.m_audioBinaural) - || (m_settings.m_audioPan != settings.m_audioPan) - || (m_settings.m_audioFlipChannels != settings.m_audioFlipChannels) || force) + if ((settingsKeys.contains("audioBinaural") && (m_settings.m_audioBinaural != settings.m_audioBinaural)) + || (settingsKeys.contains("audioPan") && (m_settings.m_audioPan != settings.m_audioPan)) + || (settingsKeys.contains("audioFlipChannels") && (m_settings.m_audioFlipChannels != settings.m_audioFlipChannels)) || force) { if (settings.m_audioBinaural) { @@ -767,11 +735,11 @@ void WDSPRxSink::applySettings(const WDSPRxSettings& settings, bool force) // AGC - if ((m_settings.m_agc != settings.m_agc) - || (m_settings.m_agcMode != settings.m_agcMode) - || (m_settings.m_agcSlope != settings.m_agcSlope) - || (m_settings.m_agcHangThreshold != settings.m_agcHangThreshold) - || (m_settings.m_agcGain != settings.m_agcGain) || force) + if ((settingsKeys.contains("agc") && (m_settings.m_agc != settings.m_agc)) + || (settingsKeys.contains("agcMode") && (m_settings.m_agcMode != settings.m_agcMode)) + || (settingsKeys.contains("agcSlope") && (m_settings.m_agcSlope != settings.m_agcSlope)) + || (settingsKeys.contains("agcHangThreshold") && (m_settings.m_agcHangThreshold != settings.m_agcHangThreshold)) + || (settingsKeys.contains("agcGain") && (m_settings.m_agcGain != settings.m_agcGain)) || force) { m_rxa->agc->setSlope(settings.m_agcSlope); m_rxa->agc->setTop((float) settings.m_agcGain); @@ -816,5 +784,9 @@ void WDSPRxSink::applySettings(const WDSPRxSettings& settings, bool force) } } - m_settings = settings; + if (force) { + m_settings = settings; + } else { + m_settings.applySettings(settingsKeys, settings); + } } diff --git a/plugins/channelrx/wdsprx/wdsprxsink.h b/plugins/channelrx/wdsprx/wdsprxsink.h index 12408921e..b7f447d00 100644 --- a/plugins/channelrx/wdsprx/wdsprxsink.h +++ b/plugins/channelrx/wdsprx/wdsprxsink.h @@ -48,7 +48,7 @@ public: void setSpectrumSink(SpectrumVis* spectrumSink) { m_spectrumSink = spectrumSink; } void applyChannelSettings(int inputSampleRate, int inputFrequencyOffset, bool force = false); - void applySettings(const WDSPRxSettings& settings, bool force = false); + void applySettings(const QStringList& settingsKeys, const WDSPRxSettings& settings, bool force = false); void applyAudioSampleRate(int sampleRate); AudioFifo *getAudioFifo() { return &m_audioFifo; } diff --git a/sdrbase/util/stringlist.cpp b/sdrbase/util/stringlist.cpp index 41e79f30b..97f865244 100644 --- a/sdrbase/util/stringlist.cpp +++ b/sdrbase/util/stringlist.cpp @@ -1,6 +1,6 @@ #include "stringlist.h" -bool StringListUtil::containsAll(const QStringList &haystack, const QStringList &needles) +static bool StringListUtil::containsAll(const QStringList &haystack, const QStringList &needles) { for (const auto &s : needles) { if (!haystack.contains(s)) // optionally add Qt::CaseSensitivity @@ -9,7 +9,7 @@ bool StringListUtil::containsAll(const QStringList &haystack, const QStringList return true; } -bool StringListUtil::containsAny(const QStringList &haystack, const QStringList &needles) +static bool StringListUtil::containsAny(const QStringList &haystack, const QStringList &needles) { for (const auto &s : needles) { if (haystack.contains(s)) // optionally add Qt::CaseSensitivity