From 103e86c80be342fd63f7544f33b05204302ae6a9 Mon Sep 17 00:00:00 2001 From: f4exb Date: Sat, 31 Jan 2026 22:01:57 +0100 Subject: [PATCH] Apply atomic settings to channel Rx plugins part 1. Part of #1329 --- plugins/channelrx/chanalyzer/chanalyzer.cpp | 132 +--- plugins/channelrx/chanalyzer/chanalyzer.h | 17 +- .../chanalyzer/chanalyzerbaseband.cpp | 6 +- .../channelrx/chanalyzer/chanalyzerbaseband.h | 11 +- .../channelrx/chanalyzer/chanalyzergui.cpp | 57 +- plugins/channelrx/chanalyzer/chanalyzergui.h | 2 +- .../chanalyzer/chanalyzersettings.cpp | 174 +++++ .../channelrx/chanalyzer/chanalyzersettings.h | 2 + .../channelrx/chanalyzer/chanalyzersink.cpp | 29 +- plugins/channelrx/chanalyzer/chanalyzersink.h | 2 +- plugins/channelrx/demodais/aisdemod.cpp | 53 +- plugins/channelrx/demodais/aisdemod.h | 15 +- .../channelrx/demodais/aisdemodbaseband.cpp | 12 +- plugins/channelrx/demodais/aisdemodbaseband.h | 11 +- plugins/channelrx/demodais/aisdemodgui.cpp | 43 +- plugins/channelrx/demodais/aisdemodgui.h | 2 +- .../channelrx/demodais/aisdemodsettings.cpp | 154 ++++ plugins/channelrx/demodais/aisdemodsettings.h | 2 + plugins/channelrx/demodais/aisdemodsink.cpp | 19 +- plugins/channelrx/demodais/aisdemodsink.h | 2 +- plugins/channelrx/demodam/amdemod.cpp | 126 +--- plugins/channelrx/demodam/amdemod.h | 17 +- plugins/channelrx/demodam/amdemodbaseband.cpp | 16 +- plugins/channelrx/demodam/amdemodbaseband.h | 11 +- plugins/channelrx/demodam/amdemodgui.cpp | 47 +- plugins/channelrx/demodam/amdemodgui.h | 2 +- plugins/channelrx/demodam/amdemodsettings.cpp | 148 ++++ plugins/channelrx/demodam/amdemodsettings.h | 2 + plugins/channelrx/demodam/amdemodsink.cpp | 35 +- plugins/channelrx/demodam/amdemodsink.h | 2 +- plugins/channelrx/demodapt/aptdemod.cpp | 152 +--- plugins/channelrx/demodapt/aptdemod.h | 15 +- .../channelrx/demodapt/aptdemodbaseband.cpp | 14 +- plugins/channelrx/demodapt/aptdemodbaseband.h | 11 +- plugins/channelrx/demodapt/aptdemodgui.cpp | 76 +- plugins/channelrx/demodapt/aptdemodgui.h | 2 +- .../channelrx/demodapt/aptdemodimageworker.h | 9 +- .../channelrx/demodapt/aptdemodsettings.cpp | 256 +++++++ plugins/channelrx/demodapt/aptdemodsettings.h | 2 + plugins/channelrx/demodapt/aptdemodsink.cpp | 25 +- plugins/channelrx/demodapt/aptdemodsink.h | 2 +- plugins/channelrx/demodatv/atvdemod.cpp | 45 +- plugins/channelrx/demodatv/atvdemod.h | 13 +- .../channelrx/demodatv/atvdemodbaseband.cpp | 10 +- plugins/channelrx/demodatv/atvdemodbaseband.h | 11 +- plugins/channelrx/demodatv/atvdemodgui.cpp | 61 +- plugins/channelrx/demodatv/atvdemodgui.h | 2 +- .../channelrx/demodatv/atvdemodsettings.cpp | 192 +++++ plugins/channelrx/demodatv/atvdemodsettings.h | 2 + plugins/channelrx/demodatv/atvdemodsink.cpp | 46 +- plugins/channelrx/demodatv/atvdemodsink.h | 2 +- plugins/channelrx/demodbfm/bfmdemod.cpp | 107 +-- plugins/channelrx/demodbfm/bfmdemod.h | 17 +- .../channelrx/demodbfm/bfmdemodbaseband.cpp | 18 +- plugins/channelrx/demodbfm/bfmdemodbaseband.h | 11 +- plugins/channelrx/demodbfm/bfmdemodgui.cpp | 42 +- plugins/channelrx/demodbfm/bfmdemodgui.h | 2 +- .../channelrx/demodbfm/bfmdemodsettings.cpp | 144 ++++ plugins/channelrx/demodbfm/bfmdemodsettings.h | 2 + plugins/channelrx/demodbfm/bfmdemodsink.cpp | 30 +- plugins/channelrx/demodbfm/bfmdemodsink.h | 2 +- plugins/channelrx/demoddab/dabdemod.cpp | 51 +- plugins/channelrx/demoddab/dabdemod.h | 15 +- .../channelrx/demoddab/dabdemodbaseband.cpp | 16 +- plugins/channelrx/demoddab/dabdemodbaseband.h | 11 +- plugins/channelrx/demoddab/dabdemodgui.cpp | 33 +- plugins/channelrx/demoddab/dabdemodgui.h | 2 +- .../channelrx/demoddab/dabdemodsettings.cpp | 112 +++ plugins/channelrx/demoddab/dabdemodsettings.h | 2 + plugins/channelrx/demoddab/dabdemodsink.cpp | 11 +- plugins/channelrx/demoddab/dabdemodsink.h | 2 +- plugins/channelrx/demoddatv/datvdemod.cpp | 125 +--- plugins/channelrx/demoddatv/datvdemod.h | 17 +- .../channelrx/demoddatv/datvdemodbaseband.cpp | 21 +- .../channelrx/demoddatv/datvdemodbaseband.h | 11 +- plugins/channelrx/demoddatv/datvdemodgui.cpp | 71 +- plugins/channelrx/demoddatv/datvdemodgui.h | 2 +- .../channelrx/demoddatv/datvdemodsettings.cpp | 223 +++++- .../channelrx/demoddatv/datvdemodsettings.h | 2 + plugins/channelrx/demoddatv/datvdemodsink.cpp | 37 +- plugins/channelrx/demoddatv/datvdemodsink.h | 4 +- plugins/channelrx/demoddsc/dscdemod.cpp | 98 +-- plugins/channelrx/demoddsc/dscdemod.h | 16 +- .../channelrx/demoddsc/dscdemodbaseband.cpp | 15 +- plugins/channelrx/demoddsc/dscdemodbaseband.h | 12 +- plugins/channelrx/demoddsc/dscdemodgui.cpp | 47 +- plugins/channelrx/demoddsc/dscdemodgui.h | 3 +- .../channelrx/demoddsc/dscdemodsettings.cpp | 143 ++++ plugins/channelrx/demoddsc/dscdemodsettings.h | 2 + plugins/channelrx/demoddsc/dscdemodsink.cpp | 17 +- plugins/channelrx/demoddsc/dscdemodsink.h | 3 +- plugins/channelrx/demoddsd/dsddemod.cpp | 142 +--- plugins/channelrx/demoddsd/dsddemod.h | 17 +- .../channelrx/demoddsd/dsddemodbaseband.cpp | 16 +- plugins/channelrx/demoddsd/dsddemodbaseband.h | 11 +- plugins/channelrx/demoddsd/dsddemodgui.cpp | 68 +- plugins/channelrx/demoddsd/dsddemodgui.h | 2 +- .../channelrx/demoddsd/dsddemodsettings.cpp | 203 ++++++ plugins/channelrx/demoddsd/dsddemodsettings.h | 2 + plugins/channelrx/demoddsd/dsddemodsink.cpp | 54 +- plugins/channelrx/demoddsd/dsddemodsink.h | 2 +- plugins/channelrx/demodfreedv/freedvdemod.cpp | 94 +-- plugins/channelrx/demodfreedv/freedvdemod.h | 17 +- .../demodfreedv/freedvdemodbaseband.cpp | 19 +- .../demodfreedv/freedvdemodbaseband.h | 11 +- .../channelrx/demodfreedv/freedvdemodgui.cpp | 35 +- .../channelrx/demodfreedv/freedvdemodgui.h | 2 +- .../demodfreedv/freedvdemodsettings.cpp | 120 ++++ .../demodfreedv/freedvdemodsettings.h | 2 + .../channelrx/demodfreedv/freedvdemodsink.cpp | 30 +- .../channelrx/demodfreedv/freedvdemodsink.h | 2 +- plugins/channelrx/demodft8/ft8demod.cpp | 136 +--- plugins/channelrx/demodft8/ft8demod.h | 20 +- .../channelrx/demodft8/ft8demodbaseband.cpp | 39 +- plugins/channelrx/demodft8/ft8demodbaseband.h | 11 +- plugins/channelrx/demodft8/ft8demodgui.cpp | 37 +- plugins/channelrx/demodft8/ft8demodgui.h | 2 +- .../channelrx/demodft8/ft8demodsettings.cpp | 174 +++++ plugins/channelrx/demodft8/ft8demodsettings.h | 2 + plugins/channelrx/demodft8/ft8demodsink.cpp | 30 +- plugins/channelrx/demodft8/ft8demodsink.h | 3 +- plugins/channelrx/demodils/ilsdemod.cpp | 138 +--- plugins/channelrx/demodils/ilsdemod.h | 16 +- .../channelrx/demodils/ilsdemodbaseband.cpp | 17 +- plugins/channelrx/demodils/ilsdemodbaseband.h | 12 +- plugins/channelrx/demodils/ilsdemodgui.cpp | 76 +- plugins/channelrx/demodils/ilsdemodgui.h | 3 +- .../channelrx/demodils/ilsdemodsettings.cpp | 242 +++++++ plugins/channelrx/demodils/ilsdemodsettings.h | 3 +- plugins/channelrx/demodils/ilsdemodsink.cpp | 25 +- plugins/channelrx/demodils/ilsdemodsink.h | 3 +- plugins/channelrx/demodm17/m17demod.cpp | 19 +- .../channelrx/demodm17/m17demodsettings.cpp | 83 +++ plugins/channelrx/demodm17/m17demodsettings.h | 1 + plugins/channelrx/demodm17/m17demodsink.cpp | 20 +- plugins/channelrx/demodnavtex/navtexdemod.cpp | 96 +-- plugins/channelrx/demodnavtex/navtexdemod.h | 16 +- .../demodnavtex/navtexdemodbaseband.cpp | 15 +- .../demodnavtex/navtexdemodbaseband.h | 12 +- .../channelrx/demodnavtex/navtexdemodgui.cpp | 58 +- .../channelrx/demodnavtex/navtexdemodgui.h | 3 +- .../demodnavtex/navtexdemodsettings.cpp | 156 +++++ .../demodnavtex/navtexdemodsettings.h | 3 +- .../channelrx/demodnavtex/navtexdemodsink.cpp | 18 +- .../channelrx/demodnavtex/navtexdemodsink.h | 3 +- plugins/channelrx/demodnfm/nfmdemod.cpp | 125 +--- plugins/channelrx/demodnfm/nfmdemod.h | 19 +- .../channelrx/demodnfm/nfmdemodbaseband.cpp | 16 +- plugins/channelrx/demodnfm/nfmdemodbaseband.h | 11 +- plugins/channelrx/demodnfm/nfmdemodgui.cpp | 59 +- plugins/channelrx/demodnfm/nfmdemodgui.h | 2 +- .../channelrx/demodnfm/nfmdemodsettings.cpp | 171 +++++ plugins/channelrx/demodnfm/nfmdemodsettings.h | 2 + plugins/channelrx/demodnfm/nfmdemodsink.cpp | 47 +- plugins/channelrx/demodnfm/nfmdemodsink.h | 2 +- plugins/channelrx/demodpacket/packetdemod.cpp | 97 +-- plugins/channelrx/demodpacket/packetdemod.h | 15 +- .../demodpacket/packetdemodbaseband.cpp | 14 +- .../demodpacket/packetdemodbaseband.h | 11 +- .../channelrx/demodpacket/packetdemodgui.cpp | 49 +- .../channelrx/demodpacket/packetdemodgui.h | 2 +- .../demodpacket/packetdemodsettings.cpp | 164 ++++- .../demodpacket/packetdemodsettings.h | 2 + .../channelrx/demodpacket/packetdemodsink.cpp | 17 +- .../channelrx/demodpacket/packetdemodsink.h | 2 +- plugins/channelrx/demodpager/pagerdemod.cpp | 100 +-- plugins/channelrx/demodpager/pagerdemod.h | 15 +- .../demodpager/pagerdemodbaseband.cpp | 14 +- .../channelrx/demodpager/pagerdemodbaseband.h | 11 +- .../channelrx/demodpager/pagerdemodgui.cpp | 60 +- plugins/channelrx/demodpager/pagerdemodgui.h | 2 +- .../demodpager/pagerdemodsettings.cpp | 196 ++++++ .../channelrx/demodpager/pagerdemodsettings.h | 2 + .../channelrx/demodpager/pagerdemodsink.cpp | 22 +- plugins/channelrx/demodpager/pagerdemodsink.h | 2 +- .../demodradiosonde/radiosondedemod.cpp | 100 +-- .../demodradiosonde/radiosondedemod.h | 15 +- .../radiosondedemodbaseband.cpp | 14 +- .../demodradiosonde/radiosondedemodbaseband.h | 11 +- .../demodradiosonde/radiosondedemodgui.cpp | 43 +- .../demodradiosonde/radiosondedemodgui.h | 2 +- .../radiosondedemodsettings.cpp | 167 +++++ .../demodradiosonde/radiosondedemodsettings.h | 2 + .../demodradiosonde/radiosondedemodsink.cpp | 19 +- .../demodradiosonde/radiosondedemodsink.h | 2 +- plugins/channelrx/demodrtty/rttydemod.cpp | 57 +- plugins/channelrx/demodrtty/rttydemod.h | 16 +- .../channelrx/demodrtty/rttydemodbaseband.cpp | 15 +- .../channelrx/demodrtty/rttydemodbaseband.h | 12 +- plugins/channelrx/demodrtty/rttydemodgui.cpp | 66 +- plugins/channelrx/demodrtty/rttydemodgui.h | 3 +- .../channelrx/demodrtty/rttydemodsettings.cpp | 188 +++++ .../channelrx/demodrtty/rttydemodsettings.h | 3 +- plugins/channelrx/demodrtty/rttydemodsink.cpp | 31 +- plugins/channelrx/demodrtty/rttydemodsink.h | 3 +- plugins/channelrx/demodssb/ssbdemod.cpp | 158 +---- plugins/channelrx/demodssb/ssbdemod.h | 17 +- .../channelrx/demodssb/ssbdemodbaseband.cpp | 16 +- plugins/channelrx/demodssb/ssbdemodbaseband.h | 11 +- plugins/channelrx/demodssb/ssbdemodgui.cpp | 65 +- plugins/channelrx/demodssb/ssbdemodgui.h | 2 +- .../channelrx/demodssb/ssbdemodsettings.cpp | 192 +++++ plugins/channelrx/demodssb/ssbdemodsettings.h | 2 + plugins/channelrx/demodssb/ssbdemodsink.cpp | 65 +- plugins/channelrx/demodssb/ssbdemodsink.h | 2 +- plugins/channelrx/demodvor/vordemod.cpp | 99 +-- plugins/channelrx/demodvor/vordemod.h | 17 +- .../channelrx/demodvor/vordemodbaseband.cpp | 16 +- plugins/channelrx/demodvor/vordemodbaseband.h | 11 +- plugins/channelrx/demodvor/vordemodgui.cpp | 32 +- plugins/channelrx/demodvor/vordemodgui.h | 2 +- .../channelrx/demodvor/vordemodsettings.cpp | 133 ++++ plugins/channelrx/demodvor/vordemodsettings.h | 2 + plugins/channelrx/demodvor/vordemodsink.cpp | 27 +- plugins/channelrx/demodvor/vordemodsink.h | 2 +- plugins/channelrx/demodwfm/wfmdemod.cpp | 100 +-- plugins/channelrx/demodwfm/wfmdemod.h | 17 +- .../channelrx/demodwfm/wfmdemodbaseband.cpp | 18 +- plugins/channelrx/demodwfm/wfmdemodbaseband.h | 11 +- plugins/channelrx/demodwfm/wfmdemodgui.cpp | 30 +- plugins/channelrx/demodwfm/wfmdemodgui.h | 2 +- .../channelrx/demodwfm/wfmdemodsettings.cpp | 117 ++++ plugins/channelrx/demodwfm/wfmdemodsettings.h | 2 + plugins/channelrx/demodwfm/wfmdemodsink.cpp | 32 +- plugins/channelrx/demodwfm/wfmdemodsink.h | 2 +- plugins/channelrx/filesink/filesink.cpp | 93 +-- plugins/channelrx/filesink/filesink.h | 17 +- .../channelrx/filesink/filesinkbaseband.cpp | 28 +- plugins/channelrx/filesink/filesinkbaseband.h | 11 +- plugins/channelrx/filesink/filesinkgui.cpp | 46 +- plugins/channelrx/filesink/filesinkgui.h | 2 +- .../channelrx/filesink/filesinksettings.cpp | 125 +++- plugins/channelrx/filesink/filesinksettings.h | 2 + plugins/channelrx/filesink/filesinksink.cpp | 14 +- plugins/channelrx/filesink/filesinksink.h | 2 +- plugins/channelrx/freqtracker/freqtracker.cpp | 126 +--- plugins/channelrx/freqtracker/freqtracker.h | 17 +- .../freqtracker/freqtrackerbaseband.cpp | 16 +- .../freqtracker/freqtrackerbaseband.h | 11 +- .../channelrx/freqtracker/freqtrackergui.cpp | 41 +- .../channelrx/freqtracker/freqtrackergui.h | 2 +- .../freqtracker/freqtrackersettings.cpp | 147 ++++ .../freqtracker/freqtrackersettings.h | 2 + .../channelrx/freqtracker/freqtrackersink.cpp | 47 +- .../channelrx/freqtracker/freqtrackersink.h | 2 +- plugins/channelrx/heatmap/heatmap.cpp | 68 +- plugins/channelrx/heatmap/heatmap.h | 16 +- plugins/channelrx/heatmap/heatmapbaseband.cpp | 18 +- plugins/channelrx/heatmap/heatmapbaseband.h | 12 +- plugins/channelrx/heatmap/heatmapgui.cpp | 77 +- plugins/channelrx/heatmap/heatmapgui.h | 3 +- plugins/channelrx/heatmap/heatmapsettings.cpp | 224 ++++++ plugins/channelrx/heatmap/heatmapsettings.h | 3 +- plugins/channelrx/heatmap/heatmapsink.cpp | 29 +- plugins/channelrx/heatmap/heatmapsink.h | 3 +- plugins/channelrx/noisefigure/noisefigure.cpp | 66 +- plugins/channelrx/noisefigure/noisefigure.h | 15 +- .../noisefigure/noisefigurebaseband.cpp | 12 +- .../noisefigure/noisefigurebaseband.h | 11 +- .../channelrx/noisefigure/noisefiguregui.cpp | 40 +- .../channelrx/noisefigure/noisefiguregui.h | 2 +- .../noisefigure/noisefiguresettings.cpp | 177 +++++ .../noisefigure/noisefiguresettings.h | 2 + .../channelrx/noisefigure/noisefiguresink.cpp | 17 +- .../channelrx/noisefigure/noisefiguresink.h | 2 +- .../radioastronomy/radioastronomysettings.cpp | 661 ++++++++++++++++++ .../radioastronomy/radioastronomysettings.h | 2 + .../radioclock/radioclocksettings.cpp | 115 +++ .../channelrx/radioclock/radioclocksettings.h | 2 + .../remotesink/remotesinksettings.cpp | 114 ++- .../channelrx/remotesink/remotesinksettings.h | 2 + .../sigmffilesink/sigmffilesinksettings.cpp | 133 ++++ .../sigmffilesink/sigmffilesinksettings.h | 2 + plugins/channelrx/udpsink/udpsinksettings.cpp | 176 +++++ plugins/channelrx/udpsink/udpsinksettings.h | 2 + plugins/channelrx/wdsprx/wdsprxsettings.cpp | 393 +++++++++++ plugins/channelrx/wdsprx/wdsprxsettings.h | 2 + sdrbase/CMakeLists.txt | 2 + sdrbase/util/stringlist.cpp | 19 + sdrbase/util/stringlist.h | 13 + 280 files changed, 8736 insertions(+), 3611 deletions(-) create mode 100644 sdrbase/util/stringlist.cpp create mode 100644 sdrbase/util/stringlist.h diff --git a/plugins/channelrx/chanalyzer/chanalyzer.cpp b/plugins/channelrx/chanalyzer/chanalyzer.cpp index d93208eb7..4cd55eb5b 100644 --- a/plugins/channelrx/chanalyzer/chanalyzer.cpp +++ b/plugins/channelrx/chanalyzer/chanalyzer.cpp @@ -56,7 +56,7 @@ ChannelAnalyzer::ChannelAnalyzer(DeviceAPI *deviceAPI) : m_basebandSink = new ChannelAnalyzerBaseband(); m_basebandSink->moveToThread(&m_thread); - applySettings(m_settings, true); + applySettings(m_settings, QStringList(), true); m_deviceAPI->addChannelSink(this); m_deviceAPI->addChannelSinkAPI(this); @@ -144,7 +144,7 @@ void ChannelAnalyzer::start() m_basebandSink->getInputMessageQueue()->push(dspMsg); ChannelAnalyzerBaseband::MsgConfigureChannelAnalyzerBaseband *msg = - ChannelAnalyzerBaseband::MsgConfigureChannelAnalyzerBaseband::create(m_settings, true); + ChannelAnalyzerBaseband::MsgConfigureChannelAnalyzerBaseband::create(m_settings, QStringList(), true); m_basebandSink->getInputMessageQueue()->push(msg); if (getMessageQueueToGUI()) @@ -169,7 +169,7 @@ bool ChannelAnalyzer::handleMessage(const Message& cmd) qDebug("ChannelAnalyzer::handleMessage: MsgConfigureChannelAnalyzer"); MsgConfigureChannelAnalyzer& cfg = (MsgConfigureChannelAnalyzer&) cmd; - applySettings(cfg.getSettings(), cfg.getForce()); + applySettings(cfg.getSettings(), cfg.getSettingsKeys(), cfg.getForce()); return true; } @@ -200,98 +200,14 @@ void ChannelAnalyzer::setCenterFrequency(qint64 frequency) { ChannelAnalyzerSettings settings = m_settings; settings.m_inputFrequencyOffset = frequency; - applySettings(settings); + applySettings(settings, QStringList({"inputFrequencyOffset"}), false); } -void ChannelAnalyzer::applySettings(const ChannelAnalyzerSettings& settings, bool force) +void ChannelAnalyzer::applySettings(const ChannelAnalyzerSettings& settings, const QStringList& settingsKeys, bool force) { - qDebug() << "ChannelAnalyzer::applySettings:" - << " m_rationalDownSample: " << settings.m_rationalDownSample - << " m_rationalDownSamplerRate: " << settings.m_rationalDownSamplerRate - << " m_rcc: " << settings.m_rrc - << " m_rrcRolloff: " << settings.m_rrcRolloff / 100.0 - << " m_bandwidth: " << settings.m_bandwidth - << " m_lowCutoff: " << settings.m_lowCutoff - << " m_log2Decim: " << settings.m_log2Decim - << " m_ssb: " << settings.m_ssb - << " m_pll: " << settings.m_pll - << " m_fll: " << settings.m_fll - << " m_costasLoop: " << settings.m_costasLoop - << " m_pllPskOrder: " << settings.m_pllPskOrder - << " m_pllBandwidth: " << settings.m_pllBandwidth - << " m_pllDampingFactor: " << settings.m_pllDampingFactor - << " m_pllLoopGain: " << settings.m_pllLoopGain - << " m_inputType: " << (int) settings.m_inputType - << " 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; + qDebug() << "ChannelAnalyzer::applySettings:" << settings.getDebugString(settingsKeys, force); - QList reverseAPIKeys; - - if ((settings.m_inputFrequencyOffset != m_settings.m_inputFrequencyOffset) || force) { - reverseAPIKeys.append("inputFrequencyOffset"); - } - if ((settings.m_rationalDownSample != m_settings.m_rationalDownSample) || force) { - reverseAPIKeys.append("rationalDownSample"); - } - if ((settings.m_rationalDownSamplerRate != m_settings.m_rationalDownSamplerRate) || force) { - reverseAPIKeys.append("rationalDownSamplerRate"); - } - if ((settings.m_bandwidth != m_settings.m_bandwidth) || force) { - reverseAPIKeys.append("bandwidth"); - } - if ((settings.m_lowCutoff != m_settings.m_lowCutoff) || force) { - reverseAPIKeys.append("lowCutoff"); - } - if ((settings.m_log2Decim != m_settings.m_log2Decim) || force) { - reverseAPIKeys.append("log2Decim"); - } - if ((settings.m_lowCutoff != m_settings.m_lowCutoff) || force) { - reverseAPIKeys.append("lowCutoff"); - } - if ((settings.m_ssb != m_settings.m_ssb) || force) { - reverseAPIKeys.append("ssb"); - } - if ((settings.m_pll != m_settings.m_pll) || force) { - reverseAPIKeys.append("pll"); - } - if ((settings.m_fll != m_settings.m_fll) || force) { - reverseAPIKeys.append("fll"); - } - if ((settings.m_costasLoop != m_settings.m_costasLoop) || force) { - reverseAPIKeys.append("costasLoop"); - } - if ((settings.m_rrc != m_settings.m_rrc) || force) { - reverseAPIKeys.append("rrc"); - } - if ((settings.m_rrcRolloff != m_settings.m_rrcRolloff) || force) { - reverseAPIKeys.append("rrcRolloff"); - } - if ((settings.m_pllPskOrder != m_settings.m_pllPskOrder) || force) { - reverseAPIKeys.append("pllPskOrder"); - } - if ((settings.m_pllBandwidth != m_settings.m_pllBandwidth) || force) { - reverseAPIKeys.append("pllBandwidth"); - } - if ((settings.m_pllDampingFactor != m_settings.m_pllDampingFactor) || force) { - reverseAPIKeys.append("pllDampingFactor"); - } - if ((settings.m_pllLoopGain != m_settings.m_pllLoopGain) || force) { - reverseAPIKeys.append("pllLoopGain"); - } - if ((settings.m_inputType != m_settings.m_inputType) || force) { - reverseAPIKeys.append("inputType"); - } - 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 (m_settings.m_streamIndex != settings.m_streamIndex) + if (settingsKeys.contains("streamIndex")) { if (m_deviceAPI->getSampleMIMO()) // change of stream is possible for MIMO devices only { @@ -302,32 +218,34 @@ void ChannelAnalyzer::applySettings(const ChannelAnalyzerSettings& settings, boo m_settings.m_streamIndex = settings.m_streamIndex; // make sure ChannelAPI::getStreamIndex() is consistent emit streamIndexChanged(settings.m_streamIndex); } - - reverseAPIKeys.append("streamIndex"); } ChannelAnalyzerBaseband::MsgConfigureChannelAnalyzerBaseband *msg - = ChannelAnalyzerBaseband::MsgConfigureChannelAnalyzerBaseband::create(settings, force); + = ChannelAnalyzerBaseband::MsgConfigureChannelAnalyzerBaseband::create(settings, settingsKeys, force); m_basebandSink->getInputMessageQueue()->push(msg); if (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") + || settingsKeys.contains("reverseAPIAddress") + || settingsKeys.contains("reverseAPIPort") + || settingsKeys.contains("reverseAPIDeviceIndex") + || settingsKeys.contains("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; + if (force) { + m_settings = settings; + } else { + m_settings.applySettings(settingsKeys, settings); + } } int ChannelAnalyzer::webapiSettingsGet( @@ -360,13 +278,13 @@ int ChannelAnalyzer::webapiSettingsPutPatch( ChannelAnalyzerSettings settings = m_settings; webapiUpdateChannelSettings(settings, channelSettingsKeys, response); - MsgConfigureChannelAnalyzer *msg = MsgConfigureChannelAnalyzer::create(settings, force); + MsgConfigureChannelAnalyzer *msg = MsgConfigureChannelAnalyzer::create(settings, channelSettingsKeys, force); m_inputMessageQueue.push(msg); qDebug("ChannelAnalyzer::webapiSettingsPutPatch: forward to GUI: %p", m_guiMessageQueue); if (m_guiMessageQueue) // forward to GUI if any { - MsgConfigureChannelAnalyzer *msgToGUI = MsgConfigureChannelAnalyzer::create(settings, force); + MsgConfigureChannelAnalyzer *msgToGUI = MsgConfigureChannelAnalyzer::create(settings, channelSettingsKeys, force); m_guiMessageQueue->push(msgToGUI); } @@ -570,7 +488,7 @@ void ChannelAnalyzer::webapiFormatChannelSettings( } void ChannelAnalyzer::webapiReverseSendSettings( - QList& channelSettingsKeys, + const QList& channelSettingsKeys, const ChannelAnalyzerSettings& settings, bool force ) @@ -600,7 +518,7 @@ void ChannelAnalyzer::webapiReverseSendSettings( void ChannelAnalyzer::sendChannelSettings( const QList& pipes, - QList& channelSettingsKeys, + const QList& channelSettingsKeys, const ChannelAnalyzerSettings& settings, bool force) { @@ -624,7 +542,7 @@ void ChannelAnalyzer::sendChannelSettings( } void ChannelAnalyzer::webapiFormatChannelSettings( - QList& channelSettingsKeys, + const QList& channelSettingsKeys, SWGSDRangel::SWGChannelSettings *swgChannelSettings, const ChannelAnalyzerSettings& settings, bool force diff --git a/plugins/channelrx/chanalyzer/chanalyzer.h b/plugins/channelrx/chanalyzer/chanalyzer.h index f38e2f03f..831ec78cc 100644 --- a/plugins/channelrx/chanalyzer/chanalyzer.h +++ b/plugins/channelrx/chanalyzer/chanalyzer.h @@ -47,19 +47,22 @@ public: public: const ChannelAnalyzerSettings& getSettings() const { return m_settings; } + const QStringList& getSettingsKeys() const { return m_settingsKeys; } bool getForce() const { return m_force; } - static MsgConfigureChannelAnalyzer* create(const ChannelAnalyzerSettings& settings, bool force) { - return new MsgConfigureChannelAnalyzer(settings, force); + static MsgConfigureChannelAnalyzer* create(const ChannelAnalyzerSettings& settings, const QStringList& settingsKeys, bool force) { + return new MsgConfigureChannelAnalyzer(settings, settingsKeys, force); } private: ChannelAnalyzerSettings m_settings; + QStringList m_settingsKeys; bool m_force; - MsgConfigureChannelAnalyzer(const ChannelAnalyzerSettings& settings, bool force) : + MsgConfigureChannelAnalyzer(const ChannelAnalyzerSettings& settings, const QStringList& settingsKeys, bool force) : Message(), m_settings(settings), + m_settingsKeys(settingsKeys), m_force(force) { } }; @@ -149,16 +152,16 @@ private: QNetworkRequest m_networkRequest; virtual bool handleMessage(const Message& cmd); - void applySettings(const ChannelAnalyzerSettings& settings, bool force = false); - void webapiReverseSendSettings(QList& channelSettingsKeys, const ChannelAnalyzerSettings& settings, bool force); + void applySettings(const ChannelAnalyzerSettings& settings, const QStringList& settingsKeys, bool force = false); + void webapiReverseSendSettings(const QList& channelSettingsKeys, const ChannelAnalyzerSettings& settings, bool force); void sendChannelSettings( const QList& pipes, - QList& channelSettingsKeys, + const QList& channelSettingsKeys, const ChannelAnalyzerSettings& settings, bool force ); void webapiFormatChannelSettings( - QList& channelSettingsKeys, + const QList& channelSettingsKeys, SWGSDRangel::SWGChannelSettings *swgChannelSettings, const ChannelAnalyzerSettings& settings, bool force diff --git a/plugins/channelrx/chanalyzer/chanalyzerbaseband.cpp b/plugins/channelrx/chanalyzer/chanalyzerbaseband.cpp index 3344411f4..8169228b6 100644 --- a/plugins/channelrx/chanalyzer/chanalyzerbaseband.cpp +++ b/plugins/channelrx/chanalyzer/chanalyzerbaseband.cpp @@ -125,7 +125,7 @@ bool ChannelAnalyzerBaseband::handleMessage(const Message& cmd) MsgConfigureChannelAnalyzerBaseband& cfg = (MsgConfigureChannelAnalyzerBaseband&) cmd; qDebug() << "ChannelAnalyzerBaseband::handleMessage: MsgConfigureChannelAnalyzerBaseband"; - applySettings(cfg.getSettings(), cfg.getForce()); + applySettings(cfg.getSettings(), cfg.getSettingsKeys(), cfg.getForce()); return true; } @@ -148,7 +148,7 @@ bool ChannelAnalyzerBaseband::handleMessage(const Message& cmd) } } -void ChannelAnalyzerBaseband::applySettings(const ChannelAnalyzerSettings& settings, bool force) +void ChannelAnalyzerBaseband::applySettings(const ChannelAnalyzerSettings& settings, const QStringList& settingsKeys, bool force) { if ((settings.m_log2Decim != m_settings.m_log2Decim) || (settings.m_inputFrequencyOffset != m_settings.m_inputFrequencyOffset) @@ -160,7 +160,7 @@ void ChannelAnalyzerBaseband::applySettings(const ChannelAnalyzerSettings& setti m_sink.applyChannelSettings(m_channelizer->getChannelSampleRate(), desiredSampleRate, m_channelizer->getChannelFrequencyOffset()); } - m_sink.applySettings(settings, force); + m_sink.applySettings(settings, settingsKeys, force); m_settings = settings; } diff --git a/plugins/channelrx/chanalyzer/chanalyzerbaseband.h b/plugins/channelrx/chanalyzer/chanalyzerbaseband.h index b90d5f8e5..1bc17870a 100644 --- a/plugins/channelrx/chanalyzer/chanalyzerbaseband.h +++ b/plugins/channelrx/chanalyzer/chanalyzerbaseband.h @@ -39,20 +39,23 @@ public: public: const ChannelAnalyzerSettings& getSettings() const { return m_settings; } + const QStringList& getSettingsKeys() const { return m_settingsKeys; } bool getForce() const { return m_force; } - static MsgConfigureChannelAnalyzerBaseband* create(const ChannelAnalyzerSettings& settings, bool force) + static MsgConfigureChannelAnalyzerBaseband* create(const ChannelAnalyzerSettings& settings, const QStringList& settingsKeys, bool force) { - return new MsgConfigureChannelAnalyzerBaseband(settings, force); + return new MsgConfigureChannelAnalyzerBaseband(settings, settingsKeys, force); } private: ChannelAnalyzerSettings m_settings; + QStringList m_settingsKeys; bool m_force; - MsgConfigureChannelAnalyzerBaseband(const ChannelAnalyzerSettings& settings, bool force) : + MsgConfigureChannelAnalyzerBaseband(const ChannelAnalyzerSettings& settings, const QStringList& settingsKeys, bool force) : Message(), m_settings(settings), + m_settingsKeys(settingsKeys), m_force(force) { } }; @@ -85,7 +88,7 @@ private: QRecursiveMutex m_mutex; bool handleMessage(const Message& cmd); - void applySettings(const ChannelAnalyzerSettings& settings, bool force = false); + void applySettings(const ChannelAnalyzerSettings& settings, const QStringList& settingsKeys, bool force = false); private slots: void handleInputMessages(); diff --git a/plugins/channelrx/chanalyzer/chanalyzergui.cpp b/plugins/channelrx/chanalyzer/chanalyzergui.cpp index 26b15643d..9d8653b6e 100644 --- a/plugins/channelrx/chanalyzer/chanalyzergui.cpp +++ b/plugins/channelrx/chanalyzer/chanalyzergui.cpp @@ -226,14 +226,14 @@ bool ChannelAnalyzerGUI::deserialize(const QByteArray& data) if (m_settings.deserialize(data)) { displaySettings(); - applySettings(true); // will have true + applySettings(QStringList(), true); // will have true return true; } else { m_settings.resetToDefaults(); displaySettings(); - applySettings(true); // will have true + applySettings(QStringList(), true); // will have true return false; } } @@ -291,7 +291,7 @@ void ChannelAnalyzerGUI::channelMarkerChangedByCursor() ui->deltaFrequency->setValue(m_channelMarker.getCenterFrequency()); m_settings.m_inputFrequencyOffset = m_channelMarker.getCenterFrequency(); updateAbsoluteCenterFrequency(); - applySettings(); + applySettings(QStringList({"inputFrequencyOffset"})); } void ChannelAnalyzerGUI::channelMarkerHighlightedByCursor() @@ -324,7 +324,7 @@ void ChannelAnalyzerGUI::on_rationalDownSamplerRate_changed(quint64 value) { m_settings.m_rationalDownSamplerRate = value; setSinkSampleRate(); - applySettings(); + applySettings(QStringList({"rationalDownSamplerRate"})); } void ChannelAnalyzerGUI::on_pll_toggled(bool checked) @@ -335,7 +335,7 @@ void ChannelAnalyzerGUI::on_pll_toggled(bool checked) m_settings.m_pll = checked; setPLLVisibility(); - applySettings(); + applySettings(QStringList({"pll"})); } void ChannelAnalyzerGUI::on_pllType_currentIndexChanged(int index) @@ -343,7 +343,7 @@ void ChannelAnalyzerGUI::on_pllType_currentIndexChanged(int index) m_settings.m_fll = (index == 1); m_settings.m_costasLoop = (index == 2); setPLLVisibility(); - applySettings(); + applySettings(QStringList({"fll", "costasLoop"})); } void ChannelAnalyzerGUI::on_pllPskOrder_currentIndexChanged(int index) @@ -352,7 +352,7 @@ void ChannelAnalyzerGUI::on_pllPskOrder_currentIndexChanged(int index) m_settings.m_pllPskOrder = (1<<(index+1)); else m_settings.m_pllPskOrder = (1<pllBandwidthText->setText(bandwidthStr); - applySettings(); + applySettings(QStringList({"pllBandwidth"})); } void ChannelAnalyzerGUI::on_pllDampingFactor_valueChanged(int value) @@ -368,7 +368,7 @@ void ChannelAnalyzerGUI::on_pllDampingFactor_valueChanged(int value) m_settings.m_pllDampingFactor = value/10.0; QString factorStr = QString::number(m_settings.m_pllDampingFactor, 'f', 1); ui->pllDampingFactorText->setText(factorStr); - applySettings(); + applySettings(QStringList({"pllDampingFactor"})); } void ChannelAnalyzerGUI::on_pllLoopGain_valueChanged(int value) @@ -376,14 +376,14 @@ void ChannelAnalyzerGUI::on_pllLoopGain_valueChanged(int value) m_settings.m_pllLoopGain = value; QString gainStr = QString::number(m_settings.m_pllLoopGain, 'f', 0); ui->pllLoopGainText->setText(gainStr); - applySettings(); + applySettings(QStringList({"pllLoopGain"})); } void ChannelAnalyzerGUI::on_useRationalDownsampler_toggled(bool checked) { m_settings.m_rationalDownSample = checked; setSinkSampleRate(); - applySettings(); + applySettings(QStringList({"rationalDownSample"})); } void ChannelAnalyzerGUI::on_signalSelect_currentIndexChanged(int index) @@ -397,7 +397,7 @@ void ChannelAnalyzerGUI::on_signalSelect_currentIndexChanged(int index) } ui->scopeGUI->traceLengthChange(); - applySettings(); + applySettings(QStringList({"inputType"})); } void ChannelAnalyzerGUI::on_deltaFrequency_changed(qint64 value) @@ -405,13 +405,13 @@ void ChannelAnalyzerGUI::on_deltaFrequency_changed(qint64 value) m_channelMarker.setCenterFrequency(value); m_settings.m_inputFrequencyOffset = m_channelMarker.getCenterFrequency(); updateAbsoluteCenterFrequency(); - applySettings(); + applySettings(QStringList({"inputFrequencyOffset"})); } void ChannelAnalyzerGUI::on_rrcFilter_toggled(bool checked) { m_settings.m_rrc = checked; - applySettings(); + applySettings(QStringList({"rrc"})); } void ChannelAnalyzerGUI::on_rrcRolloff_valueChanged(int value) @@ -419,7 +419,7 @@ void ChannelAnalyzerGUI::on_rrcRolloff_valueChanged(int value) m_settings.m_rrcRolloff = value; QString rolloffStr = QString::number(value/100.0, 'f', 2); ui->rrcRolloffText->setText(rolloffStr); - applySettings(); + applySettings(QStringList({"rrcRolloff"})); } void ChannelAnalyzerGUI::on_BW_valueChanged(int value) @@ -428,7 +428,7 @@ void ChannelAnalyzerGUI::on_BW_valueChanged(int value) setFiltersUIBoundaries(); m_settings.m_bandwidth = ui->BW->value() * 100; m_settings.m_lowCutoff = ui->lowCut->value() * 100; - applySettings(); + applySettings(QStringList({"bandwidth", "lowCutoff"})); } void ChannelAnalyzerGUI::on_lowCut_valueChanged(int value) @@ -437,7 +437,7 @@ void ChannelAnalyzerGUI::on_lowCut_valueChanged(int value) setFiltersUIBoundaries(); m_settings.m_bandwidth = ui->BW->value() * 100; m_settings.m_lowCutoff = ui->lowCut->value() * 100; - applySettings(); + applySettings(QStringList({"bandwidth", "lowCutoff"})); } void ChannelAnalyzerGUI::on_log2Decim_currentIndexChanged(int index) @@ -448,7 +448,7 @@ void ChannelAnalyzerGUI::on_log2Decim_currentIndexChanged(int index) m_settings.m_log2Decim = index; setSinkSampleRate(); - applySettings(); + applySettings(QStringList({"log2Decim"})); } void ChannelAnalyzerGUI::on_ssb_toggled(bool checked) @@ -460,7 +460,7 @@ void ChannelAnalyzerGUI::on_ssb_toggled(bool checked) ui->BWLabel->setText("BP"); } setFiltersUIBoundaries(); - applySettings(); + applySettings(QStringList({"ssb"})); } void ChannelAnalyzerGUI::onWidgetRolled(QWidget* widget, bool rollDown) @@ -469,7 +469,7 @@ void ChannelAnalyzerGUI::onWidgetRolled(QWidget* widget, bool rollDown) (void) rollDown; getRollupContents()->saveState(m_rollupState); - applySettings(); + applySettings(QStringList({"rollupState"})); } void ChannelAnalyzerGUI::onMenuDialogCalled(const QPoint& p) @@ -514,7 +514,16 @@ void ChannelAnalyzerGUI::onMenuDialogCalled(const QPoint& p) updateIndexLabel(); } - applySettings(); + applySettings(QStringList({ + "rgbColor", + "title", + "useReverseAPI", + "reverseAPIAddress", + "reverseAPIPort", + "reverseAPIDeviceIndex", + "reverseAPIChannelIndex", + "streamIndex" + })); } resetContextMenuType(); @@ -596,7 +605,7 @@ ChannelAnalyzerGUI::ChannelAnalyzerGUI(PluginAPI* pluginAPI, DeviceUISet *device displaySettings(); makeUIConnections(); - applySettings(true); + applySettings(QStringList(), true); // will have true DialPopup::addPopupsToChildDials(this); m_resizer.enableChildMouseTracking(); } @@ -704,12 +713,12 @@ void ChannelAnalyzerGUI::blockApplySettings(bool block) m_doApplySettings = !block; } -void ChannelAnalyzerGUI::applySettings(bool force) +void ChannelAnalyzerGUI::applySettings(const QStringList& settingsKeys, bool force) { if (m_doApplySettings) { ChannelAnalyzer::MsgConfigureChannelAnalyzer* message = - ChannelAnalyzer::MsgConfigureChannelAnalyzer::create( m_settings, force); + ChannelAnalyzer::MsgConfigureChannelAnalyzer::create( m_settings, settingsKeys, force); m_channelAnalyzer->getInputMessageQueue()->push(message); } } diff --git a/plugins/channelrx/chanalyzer/chanalyzergui.h b/plugins/channelrx/chanalyzer/chanalyzergui.h index 1a09c69fe..b9dc95e89 100644 --- a/plugins/channelrx/chanalyzer/chanalyzergui.h +++ b/plugins/channelrx/chanalyzer/chanalyzergui.h @@ -92,7 +92,7 @@ private: void setFiltersUIBoundaries(); void blockApplySettings(bool block); - void applySettings(bool force = false); + void applySettings(const QStringList& settingsKeys, bool force = false); void displaySettings(); void displayPLLSettings(); void setPLLVisibility(); diff --git a/plugins/channelrx/chanalyzer/chanalyzersettings.cpp b/plugins/channelrx/chanalyzer/chanalyzersettings.cpp index 73d35315c..fa2691b5c 100644 --- a/plugins/channelrx/chanalyzer/chanalyzersettings.cpp +++ b/plugins/channelrx/chanalyzer/chanalyzersettings.cpp @@ -196,3 +196,177 @@ bool ChannelAnalyzerSettings::deserialize(const QByteArray& data) return false; } } + +void ChannelAnalyzerSettings::applySettings(const QStringList& settingsKeys, const ChannelAnalyzerSettings& settings) +{ + if (settingsKeys.contains("inputFrequencyOffset")) { + m_inputFrequencyOffset = settings.m_inputFrequencyOffset; + } + if (settingsKeys.contains("rationalDownSample")) { + m_rationalDownSample = settings.m_rationalDownSample; + } + if (settingsKeys.contains("rationalDownSamplerRate")) { + m_rationalDownSamplerRate = settings.m_rationalDownSamplerRate; + } + if (settingsKeys.contains("bandwidth")) { + m_bandwidth = settings.m_bandwidth; + } + if (settingsKeys.contains("lowCutoff")) { + m_lowCutoff = settings.m_lowCutoff; + } + if (settingsKeys.contains("log2Decim")) { + m_log2Decim = settings.m_log2Decim; + } + if (settingsKeys.contains("ssb")) { + m_ssb = settings.m_ssb; + } + if (settingsKeys.contains("pll")) { + m_pll = settings.m_pll; + } + if (settingsKeys.contains("fll")) { + m_fll = settings.m_fll; + } + if (settingsKeys.contains("costasLoop")) { + m_costasLoop = settings.m_costasLoop; + } + if (settingsKeys.contains("rrc")) { + m_rrc = settings.m_rrc; + } + if (settingsKeys.contains("rrcRolloff")) { + m_rrcRolloff = settings.m_rrcRolloff; + } + if (settingsKeys.contains("pllPskOrder")) { + m_pllPskOrder = settings.m_pllPskOrder; + } + if (settingsKeys.contains("pllBandwidth")) { + m_pllBandwidth = settings.m_pllBandwidth; + } + if (settingsKeys.contains("pllDampingFactor")) { + m_pllDampingFactor = settings.m_pllDampingFactor; + } + if (settingsKeys.contains("pllLoopGain")) { + m_pllLoopGain = settings.m_pllLoopGain; + } + if (settingsKeys.contains("inputType")) { + m_inputType = settings.m_inputType; + } + if (settingsKeys.contains("rgbColor")) { + m_rgbColor = settings.m_rgbColor; + } + if (settingsKeys.contains("title")) { + m_title = settings.m_title; + } + if (settingsKeys.contains("streamIndex")) { + m_streamIndex = settings.m_streamIndex; + } + if (settingsKeys.contains("useReverseAPI")) { + m_useReverseAPI = settings.m_useReverseAPI; + } + if (settingsKeys.contains("reverseAPIAddress")) { + m_reverseAPIAddress = settings.m_reverseAPIAddress; + } + if (settingsKeys.contains("reverseAPIPort")) { + m_reverseAPIPort = settings.m_reverseAPIPort; + } + if (settingsKeys.contains("reverseAPIDeviceIndex")) { + m_reverseAPIDeviceIndex = settings.m_reverseAPIDeviceIndex; + } + if (settingsKeys.contains("reverseAPIChannelIndex")) { + m_reverseAPIChannelIndex = settings.m_reverseAPIChannelIndex; + } + if (settingsKeys.contains("workspaceIndex")) { + m_workspaceIndex = settings.m_workspaceIndex; + } + if (settingsKeys.contains("hidden")) { + m_hidden = settings.m_hidden; + } +} + +QString ChannelAnalyzerSettings::getDebugString(const QStringList& settingsKeys, bool force) const +{ + std::ostringstream ostr; + + if (settingsKeys.contains("inputFrequencyOffset") || force) { + ostr << " m_inputFrequencyOffset: " << m_inputFrequencyOffset; + } + if (settingsKeys.contains("rationalDownSample") || force) { + ostr << " m_rationalDownSample: " << m_rationalDownSample; + } + if (settingsKeys.contains("rationalDownSamplerRate") || force) { + ostr << " m_rationalDownSamplerRate: " << m_rationalDownSamplerRate; + } + if (settingsKeys.contains("bandwidth") || force) { + ostr << " m_bandwidth: " << m_bandwidth; + } + if (settingsKeys.contains("lowCutoff") || force) { + ostr << " m_lowCutoff: " << m_lowCutoff; + } + if (settingsKeys.contains("log2Decim") || force) { + ostr << " m_log2Decim: " << m_log2Decim; + } + if (settingsKeys.contains("ssb") || force) { + ostr << " m_ssb: " << m_ssb; + } + if (settingsKeys.contains("pll") || force) { + ostr << " m_pll: " << m_pll; + } + if (settingsKeys.contains("fll") || force) { + ostr << " m_fll: " << m_fll; + } + if (settingsKeys.contains("costasLoop") || force) { + ostr << " m_costasLoop: " << m_costasLoop; + } + if (settingsKeys.contains("rrc") || force) { + ostr << " m_rrc: " << m_rrc; + } + if (settingsKeys.contains("rrcRolloff") || force) { + ostr << " m_rrcRolloff: " << m_rrcRolloff; + } + if (settingsKeys.contains("pllPskOrder") || force) { + ostr << " m_pllPskOrder: " << m_pllPskOrder; + } + if (settingsKeys.contains("pllBandwidth") || force) { + ostr << " m_pllBandwidth: " << m_pllBandwidth; + } + if (settingsKeys.contains("pllDampingFactor") || force) { + ostr << " m_pllDampingFactor: " << m_pllDampingFactor; + } + if (settingsKeys.contains("pllLoopGain") || force) { + ostr << " m_pllLoopGain: " << m_pllLoopGain; + } + if (settingsKeys.contains("inputType") || force) { + ostr << " m_inputType: " << m_inputType; + } + if (settingsKeys.contains("rgbColor") || force) { + ostr << " m_rgbColor: " << m_rgbColor; + } + if (settingsKeys.contains("title") || force) { + ostr << " m_title: " << m_title.toStdString(); + } + if (settingsKeys.contains("streamIndex") || force) { + ostr << " m_streamIndex: " << m_streamIndex; + } + if (settingsKeys.contains("useReverseAPI") || force) { + ostr << " m_useReverseAPI: " << m_useReverseAPI; + } + if (settingsKeys.contains("reverseAPIAddress") || force) { + ostr << " m_reverseAPIAddress: " << m_reverseAPIAddress.toStdString(); + } + if (settingsKeys.contains("reverseAPIPort") || force) { + ostr << " m_reverseAPIPort: " << m_reverseAPIPort; + } + if (settingsKeys.contains("reverseAPIDeviceIndex") || force) { + ostr << " m_reverseAPIDeviceIndex: " << m_reverseAPIDeviceIndex; + } + if (settingsKeys.contains("reverseAPIChannelIndex") || force) { + ostr << " m_reverseAPIChannelIndex: " << m_reverseAPIChannelIndex; + } + if (settingsKeys.contains("workspaceIndex") || force) { + ostr << " m_workspaceIndex: " << m_workspaceIndex; + } + if (settingsKeys.contains("hidden") || force) { + ostr << " m_hidden: " << m_hidden; + } + + return QString(ostr.str().c_str()); +} diff --git a/plugins/channelrx/chanalyzer/chanalyzersettings.h b/plugins/channelrx/chanalyzer/chanalyzersettings.h index 379fe179e..8512bf77e 100644 --- a/plugins/channelrx/chanalyzer/chanalyzersettings.h +++ b/plugins/channelrx/chanalyzer/chanalyzersettings.h @@ -75,6 +75,8 @@ struct ChannelAnalyzerSettings void setScopeGUI(Serializable *scopeGUI) { m_scopeGUI = scopeGUI; } QByteArray serialize() const; bool deserialize(const QByteArray& data); + void applySettings(const QStringList& settingsKeys, const ChannelAnalyzerSettings& settings); + QString getDebugString(const QStringList& settingsKeys, bool force=false) const; }; diff --git a/plugins/channelrx/chanalyzer/chanalyzersink.cpp b/plugins/channelrx/chanalyzer/chanalyzersink.cpp index 20e08ddf7..fe25b1c65 100644 --- a/plugins/channelrx/chanalyzer/chanalyzersink.cpp +++ b/plugins/channelrx/chanalyzer/chanalyzersink.cpp @@ -45,7 +45,7 @@ ChannelAnalyzerSink::ChannelAnalyzerSink() : m_costasLoop.computeCoefficients(m_settings.m_pllBandwidth); applyChannelSettings(m_channelSampleRate, m_sinkSampleRate, m_channelFrequencyOffset, true); - applySettings(m_settings, true); + applySettings(m_settings, QStringList(), true); } ChannelAnalyzerSink::~ChannelAnalyzerSink() @@ -243,26 +243,9 @@ void ChannelAnalyzerSink::setFilters(int sampleRate, float bandwidth, float lowC RRCFilter->create_rrc_filter(bandwidth / sampleRate, m_settings.m_rrcRolloff / 100.0); } -void ChannelAnalyzerSink::applySettings(const ChannelAnalyzerSettings& settings, bool force) +void ChannelAnalyzerSink::applySettings(const ChannelAnalyzerSettings& settings, const QStringList& settingsKeys, bool force) { - qDebug() << "ChannelAnalyzerSink::applySettings:" - << " m_inputFrequencyOffset: " << settings.m_inputFrequencyOffset - << " m_rcc: " << settings.m_rrc - << " m_rrcRolloff: " << settings.m_rrcRolloff / 100.0 - << " m_bandwidth: " << settings.m_bandwidth - << " m_lowCutoff: " << settings.m_lowCutoff - << " m_log2Decim: " << settings.m_log2Decim - << " m_rationalDownSample: " << settings.m_rationalDownSample - << " m_rationalDownSamplerRate: " << settings.m_rationalDownSamplerRate - << " m_ssb: " << settings.m_ssb - << " m_pll: " << settings.m_pll - << " m_fll: " << settings.m_fll - << " m_costasLoop: " << settings.m_costasLoop - << " m_pllPskOrder: " << settings.m_pllPskOrder - << " m_pllBandwidth: " << settings.m_pllBandwidth - << " m_pllDampingFactor: " << settings.m_pllDampingFactor - << " m_pllLoopGain: " << settings.m_pllLoopGain - << " m_inputType: " << (int) settings.m_inputType; + qDebug() << "ChannelAnalyzerSink::applySettings:" << settings.getDebugString(settingsKeys, force); bool doApplySampleRate = false; if ((settings.m_bandwidth != m_settings.m_bandwidth) || @@ -331,7 +314,11 @@ void ChannelAnalyzerSink::applySettings(const ChannelAnalyzerSettings& settings, } } - m_settings = settings; + if (force) { + m_settings = settings; + } else { + m_settings.applySettings(settingsKeys, settings); + } qDebug() << "ChannelAnalyzerSink::applySettings:" << " m_rationalDownSample: " << settings.m_rationalDownSample; diff --git a/plugins/channelrx/chanalyzer/chanalyzersink.h b/plugins/channelrx/chanalyzer/chanalyzersink.h index 5850cb00f..8e8a72f19 100644 --- a/plugins/channelrx/chanalyzer/chanalyzersink.h +++ b/plugins/channelrx/chanalyzer/chanalyzersink.h @@ -43,7 +43,7 @@ public: virtual void feed(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end); void applyChannelSettings(int channelSampleRate, int sinkSampleRate, int channelFrequencyOffset, bool force = false); - void applySettings(const ChannelAnalyzerSettings& settings, bool force = false); + void applySettings(const ChannelAnalyzerSettings& settings, const QStringList& settingsKeys, bool force = false); double getMagSq() const { return m_magsq; } double getMagSqAvg() const { return (double) m_channelPowerAvg; } diff --git a/plugins/channelrx/demodais/aisdemod.cpp b/plugins/channelrx/demodais/aisdemod.cpp index 762ad94f5..ac55bb14d 100644 --- a/plugins/channelrx/demodais/aisdemod.cpp +++ b/plugins/channelrx/demodais/aisdemod.cpp @@ -54,7 +54,7 @@ AISDemod::AISDemod(DeviceAPI *deviceAPI) : m_basebandSink->setChannel(this); m_basebandSink->moveToThread(&m_thread); - applySettings(m_settings, true); + applySettings(m_settings, QStringList(), true); m_deviceAPI->addChannelSink(this); m_deviceAPI->addChannelSinkAPI(this); @@ -128,7 +128,7 @@ void AISDemod::start() DSPSignalNotification *dspMsg = new DSPSignalNotification(m_basebandSampleRate, m_centerFrequency); m_basebandSink->getInputMessageQueue()->push(dspMsg); - AISDemodBaseband::MsgConfigureAISDemodBaseband *msg = AISDemodBaseband::MsgConfigureAISDemodBaseband::create(m_settings, true); + AISDemodBaseband::MsgConfigureAISDemodBaseband *msg = AISDemodBaseband::MsgConfigureAISDemodBaseband::create(m_settings, QStringList(), true); m_basebandSink->getInputMessageQueue()->push(msg); } @@ -146,7 +146,7 @@ bool AISDemod::handleMessage(const Message& cmd) { MsgConfigureAISDemod& cfg = (MsgConfigureAISDemod&) cmd; qDebug() << "AISDemod::handleMessage: MsgConfigureAISDemod"; - applySettings(cfg.getSettings(), cfg.getForce()); + applySettings(cfg.getSettings(), cfg.getSettingsKeys(), cfg.getForce()); return true; } @@ -251,27 +251,18 @@ void AISDemod::setCenterFrequency(qint64 frequency) { AISDemodSettings settings = m_settings; settings.m_inputFrequencyOffset = frequency; - applySettings(settings, false); + applySettings(settings, QStringList({"inputFrequencyOffset"}), false); if (m_guiMessageQueue) // forward to GUI if any { - MsgConfigureAISDemod *msgToGUI = MsgConfigureAISDemod::create(settings, false); + MsgConfigureAISDemod *msgToGUI = MsgConfigureAISDemod::create(settings, QStringList({"inputFrequencyOffset"}), false); m_guiMessageQueue->push(msgToGUI); } } -void AISDemod::applySettings(const AISDemodSettings& settings, bool force) +void AISDemod::applySettings(const AISDemodSettings& settings, const QStringList& settingsKeys, bool force) { - qDebug() << "AISDemod::applySettings:" - << " m_logEnabled: " << settings.m_logEnabled - << " m_logFilename: " << settings.m_logFilename - << " 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() << "AISDemod::applySettings:" << settings.getDebugString(settingsKeys, force); QList reverseAPIKeys; @@ -311,7 +302,8 @@ void AISDemod::applySettings(const AISDemodSettings& settings, bool force) if ((settings.m_useFileTime != m_settings.m_useFileTime) || force) { reverseAPIKeys.append("useFileTime"); } - if (m_settings.m_streamIndex != settings.m_streamIndex) + + if (settingsKeys.contains("streamIndex")) { if (m_deviceAPI->getSampleMIMO()) // change of stream is possible for MIMO devices only { @@ -326,17 +318,18 @@ void AISDemod::applySettings(const AISDemodSettings& settings, bool force) reverseAPIKeys.append("streamIndex"); } - AISDemodBaseband::MsgConfigureAISDemodBaseband *msg = AISDemodBaseband::MsgConfigureAISDemodBaseband::create(settings, force); + AISDemodBaseband::MsgConfigureAISDemodBaseband *msg = AISDemodBaseband::MsgConfigureAISDemodBaseband::create(settings, settingsKeys, force); m_basebandSink->getInputMessageQueue()->push(msg); if (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") || + settingsKeys.contains("reverseAPIAddress") || + settingsKeys.contains("reverseAPIPort") || + settingsKeys.contains("reverseAPIDeviceIndex") || + settingsKeys.contains("reverseAPIChannelIndex") || + settingsKeys.contains("reverseAPIChannelType"); + webapiReverseSendSettings(settingsKeys, settings, fullUpdate || force); } if ((settings.m_logEnabled != m_settings.m_logEnabled) @@ -381,14 +374,14 @@ bool AISDemod::deserialize(const QByteArray& data) { if (m_settings.deserialize(data)) { - MsgConfigureAISDemod *msg = MsgConfigureAISDemod::create(m_settings, true); + MsgConfigureAISDemod *msg = MsgConfigureAISDemod::create(m_settings, QStringList(), true); m_inputMessageQueue.push(msg); return true; } else { m_settings.resetToDefaults(); - MsgConfigureAISDemod *msg = MsgConfigureAISDemod::create(m_settings, true); + MsgConfigureAISDemod *msg = MsgConfigureAISDemod::create(m_settings, QStringList(), true); m_inputMessageQueue.push(msg); return false; } @@ -443,13 +436,13 @@ int AISDemod::webapiSettingsPutPatch( AISDemodSettings settings = m_settings; webapiUpdateChannelSettings(settings, channelSettingsKeys, response); - MsgConfigureAISDemod *msg = MsgConfigureAISDemod::create(settings, force); + MsgConfigureAISDemod *msg = MsgConfigureAISDemod::create(settings, channelSettingsKeys, force); m_inputMessageQueue.push(msg); qDebug("AISDemod::webapiSettingsPutPatch: forward to GUI: %p", m_guiMessageQueue); if (m_guiMessageQueue) // forward to GUI if any { - MsgConfigureAISDemod *msgToGUI = MsgConfigureAISDemod::create(settings, force); + MsgConfigureAISDemod *msgToGUI = MsgConfigureAISDemod::create(settings, channelSettingsKeys, force); m_guiMessageQueue->push(msgToGUI); } @@ -612,7 +605,7 @@ void AISDemod::webapiFormatChannelSettings(SWGSDRangel::SWGChannelSettings& resp } } -void AISDemod::webapiReverseSendSettings(QList& channelSettingsKeys, const AISDemodSettings& settings, bool force) +void AISDemod::webapiReverseSendSettings(const QList& channelSettingsKeys, const AISDemodSettings& settings, bool force) { SWGSDRangel::SWGChannelSettings *swgChannelSettings = new SWGSDRangel::SWGChannelSettings(); webapiFormatChannelSettings(channelSettingsKeys, swgChannelSettings, settings, force); @@ -638,7 +631,7 @@ void AISDemod::webapiReverseSendSettings(QList& channelSettingsKeys, co } void AISDemod::webapiFormatChannelSettings( - QList& channelSettingsKeys, + const QList& channelSettingsKeys, SWGSDRangel::SWGChannelSettings *swgChannelSettings, const AISDemodSettings& settings, bool force diff --git a/plugins/channelrx/demodais/aisdemod.h b/plugins/channelrx/demodais/aisdemod.h index 009f3be1c..85174b033 100644 --- a/plugins/channelrx/demodais/aisdemod.h +++ b/plugins/channelrx/demodais/aisdemod.h @@ -52,20 +52,23 @@ public: public: const AISDemodSettings& getSettings() const { return m_settings; } + const QStringList& getSettingsKeys() const { return m_settingsKeys; } bool getForce() const { return m_force; } - static MsgConfigureAISDemod* create(const AISDemodSettings& settings, bool force) + static MsgConfigureAISDemod* create(const AISDemodSettings& settings, const QStringList& settingsKeys, bool force) { - return new MsgConfigureAISDemod(settings, force); + return new MsgConfigureAISDemod(settings, settingsKeys, force); } private: AISDemodSettings m_settings; + QStringList m_settingsKeys; bool m_force; - MsgConfigureAISDemod(const AISDemodSettings& settings, bool force) : + MsgConfigureAISDemod(const AISDemodSettings& settings, const QStringList& settingsKeys, bool force) : Message(), m_settings(settings), + m_settingsKeys(settingsKeys), m_force(force) { } }; @@ -184,11 +187,11 @@ private: QNetworkRequest m_networkRequest; virtual bool handleMessage(const Message& cmd); - void applySettings(const AISDemodSettings& settings, bool force = false); + void applySettings(const AISDemodSettings& settings, const QStringList& settingsKeys, bool force = false); void sendSampleRateToDemodAnalyzer(); - void webapiReverseSendSettings(QList& channelSettingsKeys, const AISDemodSettings& settings, bool force); + void webapiReverseSendSettings(const QList& channelSettingsKeys, const AISDemodSettings& settings, bool force); void webapiFormatChannelSettings( - QList& channelSettingsKeys, + const QList& channelSettingsKeys, SWGSDRangel::SWGChannelSettings *swgChannelSettings, const AISDemodSettings& settings, bool force diff --git a/plugins/channelrx/demodais/aisdemodbaseband.cpp b/plugins/channelrx/demodais/aisdemodbaseband.cpp index edd29f7e1..6f57c20fa 100644 --- a/plugins/channelrx/demodais/aisdemodbaseband.cpp +++ b/plugins/channelrx/demodais/aisdemodbaseband.cpp @@ -136,7 +136,7 @@ bool AISDemodBaseband::handleMessage(const Message& cmd) MsgConfigureAISDemodBaseband& cfg = (MsgConfigureAISDemodBaseband&) cmd; qDebug() << "AISDemodBaseband::handleMessage: MsgConfigureAISDemodBaseband"; - applySettings(cfg.getSettings(), cfg.getForce()); + applySettings(cfg.getSettings(), cfg.getSettingsKeys(), cfg.getForce()); return true; } @@ -156,7 +156,7 @@ bool AISDemodBaseband::handleMessage(const Message& cmd) } } -void AISDemodBaseband::applySettings(const AISDemodSettings& settings, bool force) +void AISDemodBaseband::applySettings(const AISDemodSettings& settings, const QStringList& settingsKeys, bool force) { if ((settings.m_inputFrequencyOffset != m_settings.m_inputFrequencyOffset) || force) { @@ -164,9 +164,13 @@ void AISDemodBaseband::applySettings(const AISDemodSettings& settings, bool forc m_sink.applyChannelSettings(m_channelizer->getChannelSampleRate(), m_channelizer->getChannelFrequencyOffset()); } - m_sink.applySettings(settings, force); + m_sink.applySettings(settings, settingsKeys, force); - m_settings = settings; + if (force) { + m_settings = settings; + } else { + m_settings.applySettings(settingsKeys, settings); + } } void AISDemodBaseband::setBasebandSampleRate(int sampleRate) diff --git a/plugins/channelrx/demodais/aisdemodbaseband.h b/plugins/channelrx/demodais/aisdemodbaseband.h index e6df1dee1..34a84b8e4 100644 --- a/plugins/channelrx/demodais/aisdemodbaseband.h +++ b/plugins/channelrx/demodais/aisdemodbaseband.h @@ -44,20 +44,23 @@ public: public: const AISDemodSettings& getSettings() const { return m_settings; } + const QStringList& getSettingsKeys() const { return m_settingsKeys; } bool getForce() const { return m_force; } - static MsgConfigureAISDemodBaseband* create(const AISDemodSettings& settings, bool force) + static MsgConfigureAISDemodBaseband* create(const AISDemodSettings& settings, const QStringList& settingsKeys, bool force) { - return new MsgConfigureAISDemodBaseband(settings, force); + return new MsgConfigureAISDemodBaseband(settings, settingsKeys, force); } private: AISDemodSettings m_settings; + QStringList m_settingsKeys; bool m_force; - MsgConfigureAISDemodBaseband(const AISDemodSettings& settings, bool force) : + MsgConfigureAISDemodBaseband(const AISDemodSettings& settings, const QStringList& settingsKeys, bool force) : Message(), m_settings(settings), + m_settingsKeys(settingsKeys), m_force(force) { } }; @@ -92,7 +95,7 @@ private: bool handleMessage(const Message& cmd); void calculateOffset(AISDemodSink *sink); - void applySettings(const AISDemodSettings& settings, bool force = false); + void applySettings(const AISDemodSettings& settings, const QStringList& settingsKeys, bool force = false); private slots: void handleInputMessages(); diff --git a/plugins/channelrx/demodais/aisdemodgui.cpp b/plugins/channelrx/demodais/aisdemodgui.cpp index d21b89189..37b76143f 100644 --- a/plugins/channelrx/demodais/aisdemodgui.cpp +++ b/plugins/channelrx/demodais/aisdemodgui.cpp @@ -132,7 +132,7 @@ void AISDemodGUI::resetToDefaults() { m_settings.resetToDefaults(); displaySettings(); - applySettings(true); + applySettings(QStringList(), true); } QByteArray AISDemodGUI::serialize() const @@ -144,7 +144,7 @@ bool AISDemodGUI::deserialize(const QByteArray& data) { if(m_settings.deserialize(data)) { displaySettings(); - applySettings(true); + applySettings(QStringList(), true); return true; } else { resetToDefaults(); @@ -548,7 +548,7 @@ void AISDemodGUI::channelMarkerChangedByCursor() { ui->deltaFrequency->setValue(m_channelMarker.getCenterFrequency()); m_settings.m_inputFrequencyOffset = m_channelMarker.getCenterFrequency(); - applySettings(); + applySettings(QStringList({"inputFrequencyOffset"})); } void AISDemodGUI::channelMarkerHighlightedByCursor() @@ -561,7 +561,7 @@ void AISDemodGUI::on_deltaFrequency_changed(qint64 value) m_channelMarker.setCenterFrequency(value); m_settings.m_inputFrequencyOffset = m_channelMarker.getCenterFrequency(); updateAbsoluteCenterFrequency(); - applySettings(); + applySettings(QStringList({"inputFrequencyOffset"})); } void AISDemodGUI::on_rfBW_valueChanged(int value) @@ -570,28 +570,28 @@ void AISDemodGUI::on_rfBW_valueChanged(int value) ui->rfBWText->setText(QString("%1k").arg(value / 10.0, 0, 'f', 1)); m_channelMarker.setBandwidth(bw); m_settings.m_rfBandwidth = bw; - applySettings(); + applySettings(QStringList({"rfBandwidth"})); } void AISDemodGUI::on_fmDev_valueChanged(int value) { ui->fmDevText->setText(QString("%1k").arg(value / 10.0, 0, 'f', 1)); m_settings.m_fmDeviation = value * 100.0; - applySettings(); + applySettings(QStringList({"fmDeviation"})); } void AISDemodGUI::on_threshold_valueChanged(int value) { ui->thresholdText->setText(QString("%1").arg(value)); m_settings.m_correlationThreshold = value; - applySettings(); + applySettings(QStringList({"correlationThreshold"})); } void AISDemodGUI::on_filterMMSI_editingFinished() { m_settings.m_filterMMSI = ui->filterMMSI->text(); filter(); - applySettings(); + applySettings(QStringList({"filterMMSI"})); } void AISDemodGUI::on_clearTable_clicked() @@ -602,25 +602,25 @@ void AISDemodGUI::on_clearTable_clicked() void AISDemodGUI::on_udpEnabled_clicked(bool checked) { m_settings.m_udpEnabled = checked; - applySettings(); + applySettings(QStringList({"udpEnabled"})); } void AISDemodGUI::on_udpAddress_editingFinished() { m_settings.m_udpAddress = ui->udpAddress->text(); - applySettings(); + applySettings(QStringList({"udpAddress"})); } void AISDemodGUI::on_udpPort_editingFinished() { m_settings.m_udpPort = ui->udpPort->text().toInt(); - applySettings(); + applySettings(QStringList({"udpPort"})); } void AISDemodGUI::on_udpFormat_currentIndexChanged(int value) { m_settings.m_udpFormat = (AISDemodSettings::UDPFormat)value; - applySettings(); + applySettings(QStringList({"udpFormat"})); } void AISDemodGUI::on_messages_cellDoubleClicked(int row, int column) @@ -662,7 +662,7 @@ void AISDemodGUI::onWidgetRolled(QWidget* widget, bool rollDown) (void) rollDown; getRollupContents()->saveState(m_rollupState); - applySettings(); + applySettings(QStringList()); } void AISDemodGUI::onMenuDialogCalled(const QPoint &p) @@ -707,7 +707,8 @@ void AISDemodGUI::onMenuDialogCalled(const QPoint &p) updateIndexLabel(); } - applySettings(); + applySettings(QStringList({"title", "rgbColor", "useReverseAPI", "reverseAPIAddress", + "reverseAPIPort", "reverseAPIDeviceIndex", "reverseAPIChannelIndex", "streamIndex"})); } resetContextMenuType(); @@ -831,7 +832,7 @@ AISDemodGUI::AISDemodGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Baseban displaySettings(); makeUIConnections(); - applySettings(true); + applySettings(QStringList(), true); DialPopup::addPopupsToChildDials(this); m_resizer.enableChildMouseTracking(); } @@ -864,11 +865,11 @@ void AISDemodGUI::blockApplySettings(bool block) m_doApplySettings = !block; } -void AISDemodGUI::applySettings(bool force) +void AISDemodGUI::applySettings(const QStringList& settingsKeys, const bool force) { if (m_doApplySettings) { - AISDemod::MsgConfigureAISDemod* message = AISDemod::MsgConfigureAISDemod::create( m_settings, force); + AISDemod::MsgConfigureAISDemod* message = AISDemod::MsgConfigureAISDemod::create( m_settings, settingsKeys, force); m_aisDemod->getInputMessageQueue()->push(message); } } @@ -973,13 +974,13 @@ void AISDemodGUI::on_showSlotMap_clicked(bool checked) { ui->slotMapWidget->setVisible(checked); m_settings.m_showSlotMap = checked; - applySettings(); + applySettings(QStringList({"showSlotMap"})); } void AISDemodGUI::on_logEnable_clicked(bool checked) { m_settings.m_logEnabled = checked; - applySettings(); + applySettings(QStringList({"logEnabled"})); } void AISDemodGUI::on_logFilename_clicked() @@ -995,7 +996,7 @@ void AISDemodGUI::on_logFilename_clicked() { m_settings.m_logFilename = fileNames[0]; ui->logFilename->setToolTip(QString(".csv log filename: %1").arg(m_settings.m_logFilename)); - applySettings(); + applySettings(QStringList({"logFilename"})); } } } @@ -1092,7 +1093,7 @@ void AISDemodGUI::on_logOpen_clicked() void AISDemodGUI::on_useFileTime_toggled(bool checked) { m_settings.m_useFileTime = checked; - applySettings(); + applySettings(QStringList({"useFileTime"})); } void AISDemodGUI::makeUIConnections() diff --git a/plugins/channelrx/demodais/aisdemodgui.h b/plugins/channelrx/demodais/aisdemodgui.h index 738d904cc..ff198dd64 100644 --- a/plugins/channelrx/demodais/aisdemodgui.h +++ b/plugins/channelrx/demodais/aisdemodgui.h @@ -113,7 +113,7 @@ private: virtual ~AISDemodGUI(); void blockApplySettings(bool block); - void applySettings(bool force = false); + void applySettings(const QStringList& settingsKeys, bool force = false); void displaySettings(); void messageReceived(const QByteArray& message, const QDateTime& dateTime, int slot, int slots); bool handleMessage(const Message& message); diff --git a/plugins/channelrx/demodais/aisdemodsettings.cpp b/plugins/channelrx/demodais/aisdemodsettings.cpp index 9821d500e..5a505fdad 100644 --- a/plugins/channelrx/demodais/aisdemodsettings.cpp +++ b/plugins/channelrx/demodais/aisdemodsettings.cpp @@ -211,4 +211,158 @@ bool AISDemodSettings::deserialize(const QByteArray& data) } } +void AISDemodSettings::applySettings(const QStringList& settingsKeys, const AISDemodSettings& settings) +{ + if (settingsKeys.contains("baud")) { + m_baud = settings.m_baud; + } + if (settingsKeys.contains("inputFrequencyOffset")) { + m_inputFrequencyOffset = settings.m_inputFrequencyOffset; + } + if (settingsKeys.contains("rfBandwidth")) { + m_rfBandwidth = settings.m_rfBandwidth; + } + if (settingsKeys.contains("fmDeviation")) { + m_fmDeviation = settings.m_fmDeviation; + } + if (settingsKeys.contains("correlationThreshold")) { + m_correlationThreshold = settings.m_correlationThreshold; + } + if (settingsKeys.contains("filterMMSI")) { + m_filterMMSI = settings.m_filterMMSI; + } + if (settingsKeys.contains("udpEnabled")) { + m_udpEnabled = settings.m_udpEnabled; + } + if (settingsKeys.contains("udpAddress")) { + m_udpAddress = settings.m_udpAddress; + } + if (settingsKeys.contains("udpPort")) { + m_udpPort = settings.m_udpPort; + } + if (settingsKeys.contains("udpFormat")) { + m_udpFormat = settings.m_udpFormat; + } + if (settingsKeys.contains("logFilename")) { + m_logFilename = settings.m_logFilename; + } + if (settingsKeys.contains("logEnabled")) { + m_logEnabled = settings.m_logEnabled; + } + if (settingsKeys.contains("showSlotMap")) { + m_showSlotMap = settings.m_showSlotMap; + } + if (settingsKeys.contains("useFileTime")) { + m_useFileTime = settings.m_useFileTime; + } + if (settingsKeys.contains("rgbColor")) { + m_rgbColor = settings.m_rgbColor; + } + if (settingsKeys.contains("title")) { + m_title = settings.m_title; + } + if (settingsKeys.contains("streamIndex")) { + m_streamIndex = settings.m_streamIndex; + } + if (settingsKeys.contains("useReverseAPI")) { + m_useReverseAPI = settings.m_useReverseAPI; + } + if (settingsKeys.contains("reverseAPIAddress")) { + m_reverseAPIAddress = settings.m_reverseAPIAddress; + } + if (settingsKeys.contains("reverseAPIPort")) { + m_reverseAPIPort = settings.m_reverseAPIPort; + } + if (settingsKeys.contains("reverseAPIDeviceIndex")) { + m_reverseAPIDeviceIndex = settings.m_reverseAPIDeviceIndex; + } + if (settingsKeys.contains("reverseAPIChannelIndex")) { + m_reverseAPIChannelIndex = settings.m_reverseAPIChannelIndex; + } + if (settingsKeys.contains("workspaceIndex")) { + m_workspaceIndex = settings.m_workspaceIndex; + } + if (settingsKeys.contains("hidden")) { + m_hidden = settings.m_hidden; + } +} +QString AISDemodSettings::getDebugString(const QStringList& settingsKeys, bool force) const +{ + std::ostringstream ostr; + + if (settingsKeys.contains("baud") || force) { + ostr << " m_baud: " << m_baud; + } + if (settingsKeys.contains("inputFrequencyOffset") || force) { + ostr << " m_inputFrequencyOffset: " << m_inputFrequencyOffset; + } + if (settingsKeys.contains("rfBandwidth") || force) { + ostr << " m_rfBandwidth: " << m_rfBandwidth; + } + if (settingsKeys.contains("fmDeviation") || force) { + ostr << " m_fmDeviation: " << m_fmDeviation; + } + if (settingsKeys.contains("correlationThreshold") || force) { + ostr << " m_correlationThreshold: " << m_correlationThreshold; + } + if (settingsKeys.contains("filterMMSI") || force) { + ostr << " m_filterMMSI: " << m_filterMMSI.toStdString(); + } + if (settingsKeys.contains("udpEnabled") || force) { + ostr << " m_udpEnabled: " << m_udpEnabled; + } + if (settingsKeys.contains("udpAddress") || force) { + ostr << " m_udpAddress: " << m_udpAddress.toStdString(); + } + if (settingsKeys.contains("udpPort") || force) { + ostr << " m_udpPort: " << m_udpPort; + } + if (settingsKeys.contains("udpFormat") || force) { + ostr << " m_udpFormat: " << m_udpFormat; + } + if (settingsKeys.contains("logFilename") || force) { + ostr << " m_logFilename: " << m_logFilename.toStdString(); + } + if (settingsKeys.contains("logEnabled") || force) { + ostr << " m_logEnabled: " << m_logEnabled; + } + if (settingsKeys.contains("showSlotMap") || force) { + ostr << " m_showSlotMap: " << m_showSlotMap; + } + if (settingsKeys.contains("useFileTime") || force) { + ostr << " m_useFileTime: " << m_useFileTime; + } + if (settingsKeys.contains("rgbColor") || force) { + ostr << " m_rgbColor: " << m_rgbColor; + } + if (settingsKeys.contains("title") || force) { + ostr << " m_title: " << m_title.toStdString(); + } + if (settingsKeys.contains("streamIndex") || force) { + ostr << " m_streamIndex: " << m_streamIndex; + } + if (settingsKeys.contains("useReverseAPI") || force) { + ostr << " m_useReverseAPI: " << m_useReverseAPI; + } + if (settingsKeys.contains("reverseAPIAddress") || force) { + ostr << " m_reverseAPIAddress: " << m_reverseAPIAddress.toStdString(); + } + if (settingsKeys.contains("reverseAPIPort") || force) { + ostr << " m_reverseAPIPort: " << m_reverseAPIPort; + } + if (settingsKeys.contains("reverseAPIDeviceIndex") || force) { + ostr << " m_reverseAPIDeviceIndex: " << m_reverseAPIDeviceIndex; + } + if (settingsKeys.contains("reverseAPIChannelIndex") || force) { + ostr << " m_reverseAPIChannelIndex: " << m_reverseAPIChannelIndex; + } + if (settingsKeys.contains("workspaceIndex") || force) { + ostr << " m_workspaceIndex: " << m_workspaceIndex; + } + if (settingsKeys.contains("hidden") || force) { + ostr << " m_hidden: " << m_hidden; + } + + return QString(ostr.str().c_str()); +} diff --git a/plugins/channelrx/demodais/aisdemodsettings.h b/plugins/channelrx/demodais/aisdemodsettings.h index e9572ae05..17f9c1499 100644 --- a/plugins/channelrx/demodais/aisdemodsettings.h +++ b/plugins/channelrx/demodais/aisdemodsettings.h @@ -80,6 +80,8 @@ struct AISDemodSettings void setScopeGUI(Serializable *scopeGUI) { m_scopeGUI = scopeGUI; } QByteArray serialize() const; bool deserialize(const QByteArray& data); + void applySettings(const QStringList& settingsKeys, const AISDemodSettings& settings); + QString getDebugString(const QStringList& settingsKeys, bool force=false) const; }; #endif /* INCLUDE_AISDEMODSETTINGS_H */ diff --git a/plugins/channelrx/demodais/aisdemodsink.cpp b/plugins/channelrx/demodais/aisdemodsink.cpp index 9d8b5411e..92a8c6b2b 100644 --- a/plugins/channelrx/demodais/aisdemodsink.cpp +++ b/plugins/channelrx/demodais/aisdemodsink.cpp @@ -50,7 +50,7 @@ AISDemodSink::AISDemodSink(AISDemod *aisDemod) : m_sampleBuffer[i].resize(m_sampleBufferSize); } - applySettings(m_settings, true); + applySettings(m_settings, QStringList(), true); applyChannelSettings(m_channelSampleRate, m_channelFrequencyOffset, true); } @@ -398,23 +398,22 @@ void AISDemodSink::applyChannelSettings(int channelSampleRate, int channelFreque qDebug() << "AISDemodSink::applyChannelSettings: m_samplesPerSymbol: " << m_samplesPerSymbol; } -void AISDemodSink::applySettings(const AISDemodSettings& settings, bool force) +void AISDemodSink::applySettings(const AISDemodSettings& settings, const QStringList& settingsKeys, bool force) { - qDebug() << "AISDemodSink::applySettings:" - << " force: " << force; + qDebug() << "AISDemodSink::applySettings:" << settings.getDebugString(settingsKeys, force); - if ((settings.m_rfBandwidth != m_settings.m_rfBandwidth) || force) + if ((settingsKeys.contains("rfBandwidth")) || force) { m_interpolator.create(16, m_channelSampleRate, settings.m_rfBandwidth / 2.2); m_interpolatorDistance = (Real) m_channelSampleRate / (Real) AISDemodSettings::AISDEMOD_CHANNEL_SAMPLE_RATE; m_interpolatorDistanceRemain = m_interpolatorDistance; } - if ((settings.m_fmDeviation != m_settings.m_fmDeviation) || force) + if ((settingsKeys.contains("fmDeviation")) || force) { m_phaseDiscri.setFMScaling(AISDemodSettings::AISDEMOD_CHANNEL_SAMPLE_RATE / (2.0f * settings.m_fmDeviation)); } - if ((settings.m_baud != m_settings.m_baud) || force) + if ((settingsKeys.contains("baud")) || force) { m_samplesPerSymbol = AISDemodSettings::AISDEMOD_CHANNEL_SAMPLE_RATE / settings.m_baud; qDebug() << "AISDemodSink::applySettings: m_samplesPerSymbol: " << m_samplesPerSymbol << " baud " << settings.m_baud; @@ -447,5 +446,9 @@ void AISDemodSink::applySettings(const AISDemodSettings& settings, bool force) } } - m_settings = settings; + if (force) { + m_settings = settings; + } else { + m_settings.applySettings(settingsKeys, settings); + } } diff --git a/plugins/channelrx/demodais/aisdemodsink.h b/plugins/channelrx/demodais/aisdemodsink.h index aec5f10a0..c540af694 100644 --- a/plugins/channelrx/demodais/aisdemodsink.h +++ b/plugins/channelrx/demodais/aisdemodsink.h @@ -52,7 +52,7 @@ public: void setScopeSink(ScopeVis* scopeSink) { m_scopeSink = scopeSink; } void applyChannelSettings(int channelSampleRate, int channelFrequencyOffset, bool force = false); - void applySettings(const AISDemodSettings& settings, bool force = false); + void applySettings(const AISDemodSettings& settings, const QStringList& settingsKeys, bool force = false); void setMessageQueueToChannel(MessageQueue *messageQueue) { m_messageQueueToChannel = messageQueue; } void setChannel(ChannelAPI *channel) { m_channel = channel; } diff --git a/plugins/channelrx/demodam/amdemod.cpp b/plugins/channelrx/demodam/amdemod.cpp index 55388ea49..073fac7b6 100644 --- a/plugins/channelrx/demodam/amdemod.cpp +++ b/plugins/channelrx/demodam/amdemod.cpp @@ -60,7 +60,7 @@ AMDemod::AMDemod(DeviceAPI *deviceAPI) : m_lastTs(0) { setObjectName(m_channelId); - applySettings(m_settings, true); + applySettings(QStringList(), m_settings, true); m_deviceAPI->addChannelSink(this); m_deviceAPI->addChannelSinkAPI(this); @@ -140,7 +140,7 @@ void AMDemod::start() DSPSignalNotification *dspMsg = new DSPSignalNotification(m_basebandSampleRate, m_centerFrequency); m_basebandSink->getInputMessageQueue()->push(dspMsg); - AMDemodBaseband::MsgConfigureAMDemodBaseband *msg = AMDemodBaseband::MsgConfigureAMDemodBaseband::create(m_settings, true); + AMDemodBaseband::MsgConfigureAMDemodBaseband *msg = AMDemodBaseband::MsgConfigureAMDemodBaseband::create(QStringList(), m_settings, true); m_basebandSink->getInputMessageQueue()->push(msg); m_running = true; @@ -164,7 +164,7 @@ bool AMDemod::handleMessage(const Message& cmd) { MsgConfigureAMDemod& cfg = (MsgConfigureAMDemod&) cmd; qDebug() << "AMDemod::handleMessage: MsgConfigureAMDemod"; - applySettings(cfg.getSettings(), cfg.getForce()); + applySettings(cfg.getSettingsKeys(), cfg.getSettings(), cfg.getForce()); return true; } @@ -205,92 +205,20 @@ void AMDemod::setCenterFrequency(qint64 frequency) { AMDemodSettings settings = m_settings; settings.m_inputFrequencyOffset = frequency; - applySettings(settings, false); + applySettings(QStringList("inputFrequencyOffset"), settings, false); if (m_guiMessageQueue) // forward to GUI if any { - MsgConfigureAMDemod *msgToGUI = MsgConfigureAMDemod::create(settings, false); + MsgConfigureAMDemod *msgToGUI = MsgConfigureAMDemod::create(QStringList("inputFrequencyOffset"), settings, false); m_guiMessageQueue->push(msgToGUI); } } -void AMDemod::applySettings(const AMDemodSettings& settings, bool force) +void AMDemod::applySettings(const QStringList& settingsKeys, const AMDemodSettings& settings, bool force) { - qDebug() << "AMDemod::applySettings:" - << " m_inputFrequencyOffset: " << settings.m_inputFrequencyOffset - << " m_rfBandwidth: " << settings.m_rfBandwidth - << " m_afBandwidth: " << settings.m_afBandwidth - << " m_volume: " << settings.m_volume - << " m_squelch: " << settings.m_squelch - << " m_audioMute: " << settings.m_audioMute - << " m_bandpassEnable: " << settings.m_bandpassEnable - << " m_audioDeviceName: " << settings.m_audioDeviceName - << " m_pll: " << settings.m_pll - << " m_syncAMOperation: " << (int) settings.m_syncAMOperation - << " m_frequencyMode: " << settings.m_frequencyMode - << " m_frequency: " << settings.m_frequency - << " m_snap: " << settings.m_snap - << " 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() << "AMDemod::applySettings:" << settings.getDebugString(settingsKeys, force); - QList reverseAPIKeys; - - if ((m_settings.m_rfBandwidth != settings.m_rfBandwidth) || force) { - reverseAPIKeys.append("rfBandwidth"); - } - if ((m_settings.m_afBandwidth != settings.m_afBandwidth) || force) { - reverseAPIKeys.append("afBandwidth"); - } - if ((m_settings.m_bandpassEnable != settings.m_bandpassEnable) || force) { - reverseAPIKeys.append("bandpassEnable"); - } - if ((m_settings.m_squelch != settings.m_squelch) || force) { - reverseAPIKeys.append("squelch"); - } - if ((settings.m_audioDeviceName != m_settings.m_audioDeviceName) || force) { - reverseAPIKeys.append("audioDeviceName"); - } - - if ((m_settings.m_pll != settings.m_pll) || force) - { - reverseAPIKeys.append("pll"); - reverseAPIKeys.append("syncAMOperation"); - } - - if ((m_settings.m_syncAMOperation != settings.m_syncAMOperation) || force) - { - reverseAPIKeys.append("pll"); - reverseAPIKeys.append("syncAMOperation"); - } - - if ((m_settings.m_inputFrequencyOffset != settings.m_inputFrequencyOffset) || force) { - reverseAPIKeys.append("inputFrequencyOffset"); - } - - if ((m_settings.m_audioMute != settings.m_audioMute) || force) { - reverseAPIKeys.append("audioMute"); - } - - if ((m_settings.m_volume != settings.m_volume) || force) { - reverseAPIKeys.append("volume"); - } - - if ((m_settings.m_frequencyMode != settings.m_frequencyMode) || force) { - reverseAPIKeys.append("frequencyMode"); - } - if ((m_settings.m_frequency != settings.m_frequency) || force) { - reverseAPIKeys.append("frequency"); - } - if ((m_settings.m_snap != settings.m_snap) || force) { - reverseAPIKeys.append("snap"); - } - - if (m_settings.m_streamIndex != settings.m_streamIndex) + if (settingsKeys.contains("streamIndex")) { if (m_deviceAPI->getSampleMIMO()) // change of stream is possible for MIMO devices only { @@ -301,34 +229,36 @@ void AMDemod::applySettings(const AMDemodSettings& settings, bool force) m_settings.m_streamIndex = settings.m_streamIndex; // make sure ChannelAPI::getStreamIndex() is consistent emit streamIndexChanged(settings.m_streamIndex); } - - reverseAPIKeys.append("streamIndex"); } if (m_running) { - AMDemodBaseband::MsgConfigureAMDemodBaseband *msg = AMDemodBaseband::MsgConfigureAMDemodBaseband::create(settings, force); + AMDemodBaseband::MsgConfigureAMDemodBaseband *msg = AMDemodBaseband::MsgConfigureAMDemodBaseband::create(settingsKeys, settings, force); m_basebandSink->getInputMessageQueue()->push(msg); } if (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")) || + (settingsKeys.contains("reverseAPIAddress")) || + (settingsKeys.contains("reverseAPIPort")) || + (settingsKeys.contains("reverseAPIDeviceIndex")) || + (settingsKeys.contains("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; + if (force) { + m_settings = settings; + } else { + m_settings.applySettings(settingsKeys, settings); + } } QByteArray AMDemod::serialize() const @@ -340,14 +270,14 @@ bool AMDemod::deserialize(const QByteArray& data) { if (m_settings.deserialize(data)) { - MsgConfigureAMDemod *msg = MsgConfigureAMDemod::create(m_settings, true); + MsgConfigureAMDemod *msg = MsgConfigureAMDemod::create(QStringList(), m_settings, true); m_inputMessageQueue.push(msg); return true; } else { m_settings.resetToDefaults(); - MsgConfigureAMDemod *msg = MsgConfigureAMDemod::create(m_settings, true); + MsgConfigureAMDemod *msg = MsgConfigureAMDemod::create(QStringList(), m_settings, true); m_inputMessageQueue.push(msg); return false; } @@ -402,13 +332,13 @@ int AMDemod::webapiSettingsPutPatch( AMDemodSettings settings = m_settings; webapiUpdateChannelSettings(settings, channelSettingsKeys, response); - MsgConfigureAMDemod *msg = MsgConfigureAMDemod::create(settings, force); + MsgConfigureAMDemod *msg = MsgConfigureAMDemod::create(channelSettingsKeys, settings, force); m_inputMessageQueue.push(msg); qDebug("AMDemod::webapiSettingsPutPatch: forward to GUI: %p", m_guiMessageQueue); if (m_guiMessageQueue) // forward to GUI if any { - MsgConfigureAMDemod *msgToGUI = MsgConfigureAMDemod::create(settings, force); + MsgConfigureAMDemod *msgToGUI = MsgConfigureAMDemod::create(channelSettingsKeys, settings, force); m_guiMessageQueue->push(msgToGUI); } @@ -598,7 +528,7 @@ void AMDemod::webapiFormatChannelReport(SWGSDRangel::SWGChannelReport& response) response.getAmDemodReport()->setChannelSampleRate(m_basebandSink->getChannelSampleRate()); } -void AMDemod::webapiReverseSendSettings(QList& channelSettingsKeys, const AMDemodSettings& settings, bool force) +void AMDemod::webapiReverseSendSettings(const QList& channelSettingsKeys, const AMDemodSettings& settings, bool force) { SWGSDRangel::SWGChannelSettings *swgChannelSettings = new SWGSDRangel::SWGChannelSettings(); webapiFormatChannelSettings(channelSettingsKeys, swgChannelSettings, settings, force); @@ -625,7 +555,7 @@ void AMDemod::webapiReverseSendSettings(QList& channelSettingsKeys, con void AMDemod::sendChannelSettings( const QList& pipes, - QList& channelSettingsKeys, + const QList& channelSettingsKeys, const AMDemodSettings& settings, bool force) { @@ -649,7 +579,7 @@ void AMDemod::sendChannelSettings( } void AMDemod::webapiFormatChannelSettings( - QList& channelSettingsKeys, + const QList& channelSettingsKeys, SWGSDRangel::SWGChannelSettings *swgChannelSettings, const AMDemodSettings& settings, bool force diff --git a/plugins/channelrx/demodam/amdemod.h b/plugins/channelrx/demodam/amdemod.h index 64ade14b3..99e97fd2e 100644 --- a/plugins/channelrx/demodam/amdemod.h +++ b/plugins/channelrx/demodam/amdemod.h @@ -46,20 +46,23 @@ public: public: const AMDemodSettings& getSettings() const { return m_settings; } + const QStringList& getSettingsKeys() const { return m_settingsKeys; } bool getForce() const { return m_force; } - static MsgConfigureAMDemod* create(const AMDemodSettings& settings, bool force) + static MsgConfigureAMDemod* create(const QStringList& settingsKeys, const AMDemodSettings& settings, bool force) { - return new MsgConfigureAMDemod(settings, force); + return new MsgConfigureAMDemod(settingsKeys, settings, force); } private: AMDemodSettings m_settings; + QStringList m_settingsKeys; bool m_force; - MsgConfigureAMDemod(const AMDemodSettings& settings, bool force) : + MsgConfigureAMDemod(const QStringList& settingsKeys, const AMDemodSettings& settings, bool force) : Message(), m_settings(settings), + m_settingsKeys(settingsKeys), m_force(force) { } }; @@ -159,18 +162,18 @@ private: qint64 m_lastTs; virtual bool handleMessage(const Message& cmd); - void applySettings(const AMDemodSettings& settings, bool force = false); + void applySettings(const QStringList& settingsKeys, const AMDemodSettings& settings, bool force = false); void sendSampleRateToDemodAnalyzer(); void webapiFormatChannelReport(SWGSDRangel::SWGChannelReport& response); - void webapiReverseSendSettings(QList& channelSettingsKeys, const AMDemodSettings& settings, bool force); + void webapiReverseSendSettings(const QList& channelSettingsKeys, const AMDemodSettings& settings, bool force); void sendChannelSettings( const QList& pipes, - QList& channelSettingsKeys, + const QList& channelSettingsKeys, const AMDemodSettings& settings, bool force ); void webapiFormatChannelSettings( - QList& channelSettingsKeys, + const QList& channelSettingsKeys, SWGSDRangel::SWGChannelSettings *swgChannelSettings, const AMDemodSettings& settings, bool force diff --git a/plugins/channelrx/demodam/amdemodbaseband.cpp b/plugins/channelrx/demodam/amdemodbaseband.cpp index 6eb256498..9fbce447c 100644 --- a/plugins/channelrx/demodam/amdemodbaseband.cpp +++ b/plugins/channelrx/demodam/amdemodbaseband.cpp @@ -137,7 +137,7 @@ bool AMDemodBaseband::handleMessage(const Message& cmd) MsgConfigureAMDemodBaseband& cfg = (MsgConfigureAMDemodBaseband&) cmd; qDebug() << "AMDemodBaseband::handleMessage: MsgConfigureAMDemodBaseband"; - applySettings(cfg.getSettings(), cfg.getForce()); + applySettings(cfg.getSettingsKeys(), cfg.getSettings(), cfg.getForce()); return true; } @@ -164,9 +164,9 @@ bool AMDemodBaseband::handleMessage(const Message& cmd) } } -void AMDemodBaseband::applySettings(const AMDemodSettings& settings, bool force) +void AMDemodBaseband::applySettings(const QStringList& settingsKeys, const AMDemodSettings& settings, bool force) { - if ((settings.m_inputFrequencyOffset != m_settings.m_inputFrequencyOffset) || force) + if ((settingsKeys.contains("inputFrequencyOffset")) || force) { m_channelizer.setChannelization(m_sink.getAudioSampleRate(), settings.m_inputFrequencyOffset); m_sink.applyChannelSettings(m_channelizer.getChannelSampleRate(), m_channelizer.getChannelFrequencyOffset()); @@ -178,7 +178,7 @@ void AMDemodBaseband::applySettings(const AMDemodSettings& settings, bool force) } } - if ((settings.m_audioDeviceName != m_settings.m_audioDeviceName) || force) + if ((settingsKeys.contains("audioDeviceName")) || force) { AudioDeviceManager *audioDeviceManager = DSPEngine::instance()->getAudioDeviceManager(); int audioDeviceIndex = audioDeviceManager->getOutputDeviceIndex(settings.m_audioDeviceName); @@ -195,9 +195,13 @@ void AMDemodBaseband::applySettings(const AMDemodSettings& 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 AMDemodBaseband::getChannelSampleRate() const diff --git a/plugins/channelrx/demodam/amdemodbaseband.h b/plugins/channelrx/demodam/amdemodbaseband.h index 9663513e9..322f98158 100644 --- a/plugins/channelrx/demodam/amdemodbaseband.h +++ b/plugins/channelrx/demodam/amdemodbaseband.h @@ -40,20 +40,23 @@ public: public: const AMDemodSettings& getSettings() const { return m_settings; } + const QStringList& getSettingsKeys() const { return m_settingsKeys; } bool getForce() const { return m_force; } - static MsgConfigureAMDemodBaseband* create(const AMDemodSettings& settings, bool force) + static MsgConfigureAMDemodBaseband* create(const QStringList& settingsKeys, const AMDemodSettings& settings, bool force) { - return new MsgConfigureAMDemodBaseband(settings, force); + return new MsgConfigureAMDemodBaseband(settingsKeys, settings, force); } private: AMDemodSettings m_settings; + QStringList m_settingsKeys; bool m_force; - MsgConfigureAMDemodBaseband(const AMDemodSettings& settings, bool force) : + MsgConfigureAMDemodBaseband(const QStringList& settingsKeys, const AMDemodSettings& 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 AMDemodSettings& settings, bool force = false); + void applySettings(const QStringList& settingsKeys, const AMDemodSettings& settings, bool force = false); private slots: void handleInputMessages(); diff --git a/plugins/channelrx/demodam/amdemodgui.cpp b/plugins/channelrx/demodam/amdemodgui.cpp index 2f0c0b7da..12169ffd3 100644 --- a/plugins/channelrx/demodam/amdemodgui.cpp +++ b/plugins/channelrx/demodam/amdemodgui.cpp @@ -55,7 +55,7 @@ void AMDemodGUI::resetToDefaults() { m_settings.resetToDefaults(); displaySettings(); - applySettings(true); + applySettings(QStringList(), true); } QByteArray AMDemodGUI::serialize() const @@ -67,7 +67,7 @@ bool AMDemodGUI::deserialize(const QByteArray& data) { if(m_settings.deserialize(data)) { displaySettings(); - applySettings(true); + applySettings(QStringList(), true); return true; } else { resetToDefaults(); @@ -237,7 +237,7 @@ void AMDemodGUI::on_frequencyMode_currentIndexChanged(int index) } updateAbsoluteCenterFrequency(); - applySettings(); + applySettings(QStringList("frequencyMode")); } // Calculate input frequency offset, when device center frequency changes @@ -253,7 +253,7 @@ void AMDemodGUI::calcOffset() m_channelMarker.setCenterFrequency(offset); m_settings.m_inputFrequencyOffset = m_channelMarker.getCenterFrequency(); updateAbsoluteCenterFrequency(); - applySettings(); + applySettings(QStringList("inputFrequencyOffset")); } } @@ -285,7 +285,7 @@ void AMDemodGUI::channelMarkerChangedByCursor() ui->deltaFrequency->blockSignals(false); updateAbsoluteCenterFrequency(); - applySettings(); + applySettings(QStringList({"inputFrequencyOffset", "frequency"})); } void AMDemodGUI::on_deltaFrequency_changed(qint64 value) @@ -316,7 +316,7 @@ void AMDemodGUI::on_deltaFrequency_changed(qint64 value) m_channelMarker.setCenterFrequency(offset); m_settings.m_inputFrequencyOffset = m_channelMarker.getCenterFrequency(); updateAbsoluteCenterFrequency(); - applySettings(); + applySettings(QStringList({"frequency", "inputFrequencyOffset"})); } void AMDemodGUI::on_pll_toggled(bool checked) @@ -328,19 +328,19 @@ void AMDemodGUI::on_pll_toggled(bool checked) } m_settings.m_pll = checked; - applySettings(); + applySettings(QStringList("pll")); } void AMDemodGUI::on_ssb_toggled(bool checked) { m_settings.m_syncAMOperation = checked ? m_samUSB ? AMDemodSettings::SyncAMUSB : AMDemodSettings::SyncAMLSB : AMDemodSettings::SyncAMDSB; - applySettings(); + applySettings(QStringList("syncAMOperation")); } void AMDemodGUI::on_bandpassEnable_toggled(bool checked) { m_settings.m_bandpassEnable = checked; - applySettings(); + applySettings(QStringList("bandpassEnable")); } void AMDemodGUI::on_rfBW_valueChanged(int value) @@ -349,34 +349,34 @@ void AMDemodGUI::on_rfBW_valueChanged(int value) m_channelMarker.setBandwidth(value * 100); m_settings.m_rfBandwidth = value * 100; ui->afBW->setMaximum(value); - applySettings(); + applySettings(QStringList("rfBandwidth")); } void AMDemodGUI::on_afBW_valueChanged(int value) { ui->afBWText->setText(QString("%1 kHz").arg(value / 10.0, 0, 'f', 1)); m_settings.m_afBandwidth = value * 100; - applySettings(); + applySettings(QStringList("afBandwidth")); } void AMDemodGUI::on_volume_valueChanged(int value) { ui->volumeText->setText(QString("%1").arg(value / 10.0, 0, 'f', 1)); m_settings.m_volume = value / 10.0; - applySettings(); + applySettings(QStringList("volume")); } void AMDemodGUI::on_squelch_valueChanged(int value) { ui->squelchText->setText(QString("%1 dB").arg(value)); m_settings.m_squelch = value; - applySettings(); + applySettings(QStringList("squelch")); } void AMDemodGUI::on_audioMute_toggled(bool checked) { m_settings.m_audioMute = checked; - applySettings(); + applySettings(QStringList("audioMute")); } void AMDemodGUI::onWidgetRolled(QWidget* widget, bool rollDown) @@ -389,7 +389,7 @@ void AMDemodGUI::onWidgetRolled(QWidget* widget, bool rollDown) */ getRollupContents()->saveState(m_rollupState); - applySettings(); + applySettings(QStringList()); } void AMDemodGUI::onMenuDialogCalled(const QPoint &p) @@ -434,7 +434,10 @@ void AMDemodGUI::onMenuDialogCalled(const QPoint &p) updateIndexLabel(); } - applySettings(); + applySettings(QStringList({"title", "rgbColor", "useReverseAPI", + "reverseAPIAddress", "reverseAPIPort", + "reverseAPIDeviceIndex", "reverseAPIChannelIndex", + "streamIndex"})); } resetContextMenuType(); @@ -507,7 +510,7 @@ AMDemodGUI::AMDemodGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, BasebandS displaySettings(); makeUIConnections(); - applySettings(true); + applySettings(QStringList(), true); m_resizer.enableChildMouseTracking(); } @@ -521,11 +524,11 @@ void AMDemodGUI::blockApplySettings(bool block) m_doApplySettings = !block; } -void AMDemodGUI::applySettings(bool force) +void AMDemodGUI::applySettings(const QStringList& settingsKeys, bool force) { if (m_doApplySettings) { - AMDemod::MsgConfigureAMDemod* message = AMDemod::MsgConfigureAMDemod::create( m_settings, force); + AMDemod::MsgConfigureAMDemod* message = AMDemod::MsgConfigureAMDemod::create(settingsKeys, m_settings, force); m_amDemod->getInputMessageQueue()->push(message); } } @@ -626,7 +629,7 @@ void AMDemodGUI::audioSelect(const QPoint& p) if (audioSelect.m_selected) { m_settings.m_audioDeviceName = audioSelect.m_audioDeviceName; - applySettings(); + applySettings(QStringList("audioDeviceName")); } } @@ -646,7 +649,7 @@ void AMDemodGUI::samSSBSelect(const QPoint& p) if (m_settings.m_syncAMOperation != AMDemodSettings::SyncAMDSB) { m_settings.m_syncAMOperation = m_samUSB ? AMDemodSettings::SyncAMUSB : AMDemodSettings::SyncAMLSB; - applySettings(); + applySettings(QStringList("syncAMOperation")); } } } @@ -685,7 +688,7 @@ void AMDemodGUI::snapClicked() } displaySnap(); - applySettings(); + applySettings(QStringList({"snap"})); } void AMDemodGUI::applySnap() diff --git a/plugins/channelrx/demodam/amdemodgui.h b/plugins/channelrx/demodam/amdemodgui.h index 95710ce83..e298a5a6f 100644 --- a/plugins/channelrx/demodam/amdemodgui.h +++ b/plugins/channelrx/demodam/amdemodgui.h @@ -92,7 +92,7 @@ private: virtual ~AMDemodGUI(); 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/demodam/amdemodsettings.cpp b/plugins/channelrx/demodam/amdemodsettings.cpp index d9dc2f9a1..57285ad01 100644 --- a/plugins/channelrx/demodam/amdemodsettings.cpp +++ b/plugins/channelrx/demodam/amdemodsettings.cpp @@ -178,4 +178,152 @@ bool AMDemodSettings::deserialize(const QByteArray& data) } } +void AMDemodSettings::applySettings(const QStringList& settingsKeys, const AMDemodSettings& settings) +{ + if (settingsKeys.contains("inputFrequencyOffset")) { + m_inputFrequencyOffset = settings.m_inputFrequencyOffset; + } + if (settingsKeys.contains("rfBandwidth")) { + m_rfBandwidth = settings.m_rfBandwidth; + } + if (settingsKeys.contains("squelch")) { + m_squelch = settings.m_squelch; + } + if (settingsKeys.contains("volume")) { + m_volume = settings.m_volume; + } + if (settingsKeys.contains("audioMute")) { + m_audioMute = settings.m_audioMute; + } + if (settingsKeys.contains("bandpassEnable")) { + m_bandpassEnable = settings.m_bandpassEnable; + } + if (settingsKeys.contains("afBandwidth")) { + m_afBandwidth = settings.m_afBandwidth; + } + if (settingsKeys.contains("rgbColor")) { + m_rgbColor = settings.m_rgbColor; + } + if (settingsKeys.contains("title")) { + m_title = settings.m_title; + } + if (settingsKeys.contains("audioDeviceName")) { + m_audioDeviceName = settings.m_audioDeviceName; + } + if (settingsKeys.contains("pll")) { + m_pll = settings.m_pll; + } + if (settingsKeys.contains("syncAMOperation")) { + m_syncAMOperation = settings.m_syncAMOperation; + } + if (settingsKeys.contains("frequencyMode")) { + m_frequencyMode = settings.m_frequencyMode; + } + if (settingsKeys.contains("frequency")) { + m_frequency = settings.m_frequency; + } + if (settingsKeys.contains("snap")) { + m_snap = settings.m_snap; + } + if (settingsKeys.contains("streamIndex")) { + m_streamIndex = settings.m_streamIndex; + } + if (settingsKeys.contains("useReverseAPI")) { + m_useReverseAPI = settings.m_useReverseAPI; + } + if (settingsKeys.contains("reverseAPIAddress")) { + m_reverseAPIAddress = settings.m_reverseAPIAddress; + } + if (settingsKeys.contains("reverseAPIPort")) { + m_reverseAPIPort = settings.m_reverseAPIPort; + } + if (settingsKeys.contains("reverseAPIDeviceIndex")) { + m_reverseAPIDeviceIndex = settings.m_reverseAPIDeviceIndex; + } + if (settingsKeys.contains("reverseAPIChannelIndex")) { + m_reverseAPIChannelIndex = settings.m_reverseAPIChannelIndex; + } + if (settingsKeys.contains("workspaceIndex")) { + m_workspaceIndex = settings.m_workspaceIndex; + } + if (settingsKeys.contains("hidden")) { + m_hidden = settings.m_hidden; + } +} +QString AMDemodSettings::getDebugString(const QStringList& settingsKeys, bool force) const +{ + std::ostringstream ostr; + + if (settingsKeys.contains("inputFrequencyOffset") || force) { + ostr << " m_inputFrequencyOffset: " << m_inputFrequencyOffset; + } + if (settingsKeys.contains("rfBandwidth") || force) { + ostr << " m_rfBandwidth: " << m_rfBandwidth; + } + if (settingsKeys.contains("squelch") || force) { + ostr << " m_squelch: " << m_squelch; + } + if (settingsKeys.contains("volume") || force) { + ostr << " m_volume: " << m_volume; + } + if (settingsKeys.contains("audioMute") || force) { + ostr << " m_audioMute: " << m_audioMute; + } + if (settingsKeys.contains("bandpassEnable") || force) { + ostr << " m_bandpassEnable: " << m_bandpassEnable; + } + if (settingsKeys.contains("afBandwidth") || force) { + ostr << " m_afBandwidth: " << m_afBandwidth; + } + if (settingsKeys.contains("rgbColor") || force) { + ostr << " m_rgbColor: " << m_rgbColor; + } + if (settingsKeys.contains("title") || force) { + ostr << " m_title: " << m_title.toStdString(); + } + if (settingsKeys.contains("audioDeviceName") || force) { + ostr << " m_audioDeviceName: " << m_audioDeviceName.toStdString(); + } + if (settingsKeys.contains("pll") || force) { + ostr << " m_pll: " << m_pll; + } + if (settingsKeys.contains("syncAMOperation") || force) { + ostr << " m_syncAMOperation: " << m_syncAMOperation; + } + if (settingsKeys.contains("frequencyMode") || force) { + ostr << " m_frequencyMode: " << m_frequencyMode; + } + if (settingsKeys.contains("frequency") || force) { + ostr << " m_frequency: " << m_frequency; + } + if (settingsKeys.contains("snap") || force) { + ostr << " m_snap: " << m_snap; + } + if (settingsKeys.contains("streamIndex") || force) { + ostr << " m_streamIndex: " << m_streamIndex; + } + if (settingsKeys.contains("useReverseAPI") || force) { + ostr << " m_useReverseAPI: " << m_useReverseAPI; + } + if (settingsKeys.contains("reverseAPIAddress") || force) { + ostr << " m_reverseAPIAddress: " << m_reverseAPIAddress.toStdString(); + } + if (settingsKeys.contains("reverseAPIPort") || force) { + ostr << " m_reverseAPIPort: " << m_reverseAPIPort; + } + if (settingsKeys.contains("reverseAPIDeviceIndex") || force) { + ostr << " m_reverseAPIDeviceIndex: " << m_reverseAPIDeviceIndex; + } + if (settingsKeys.contains("reverseAPIChannelIndex") || force) { + ostr << " m_reverseAPIChannelIndex: " << m_reverseAPIChannelIndex; + } + if (settingsKeys.contains("workspaceIndex") || force) { + ostr << " m_workspaceIndex: " << m_workspaceIndex; + } + if (settingsKeys.contains("hidden") || force) { + ostr << " m_hidden: " << m_hidden; + } + + return QString(ostr.str().c_str()); +} diff --git a/plugins/channelrx/demodam/amdemodsettings.h b/plugins/channelrx/demodam/amdemodsettings.h index 52f43884b..da7fa11fc 100644 --- a/plugins/channelrx/demodam/amdemodsettings.h +++ b/plugins/channelrx/demodam/amdemodsettings.h @@ -74,6 +74,8 @@ struct AMDemodSettings void setRollupState(Serializable *rollupState) { m_rollupState = rollupState; } QByteArray serialize() const; bool deserialize(const QByteArray& data); + void applySettings(const QStringList& settingsKeys, const AMDemodSettings& settings); + QString getDebugString(const QStringList& settingsKeys, bool force=false) const; }; diff --git a/plugins/channelrx/demodam/amdemodsink.cpp b/plugins/channelrx/demodam/amdemodsink.cpp index c8d5f30c5..a86fbd9fc 100644 --- a/plugins/channelrx/demodam/amdemodsink.cpp +++ b/plugins/channelrx/demodam/amdemodsink.cpp @@ -60,7 +60,7 @@ AMDemodSink::AMDemodSink() : m_pll.computeCoefficients(0.05, 0.707, 1000); m_syncAMBuffIndex = 0; - applySettings(m_settings, true); + applySettings(QStringList(), m_settings, true); applyChannelSettings(m_channelSampleRate, m_channelFrequencyOffset, true); } @@ -264,24 +264,13 @@ void AMDemodSink::applyChannelSettings(int channelSampleRate, int channelFrequen m_channelFrequencyOffset = channelFrequencyOffset; } -void AMDemodSink::applySettings(const AMDemodSettings& settings, bool force) +void AMDemodSink::applySettings(const QStringList& settingsKeys, const AMDemodSettings& settings, bool force) { - qDebug() << "AMDemodSink::applySettings:" - << " m_inputFrequencyOffset: " << settings.m_inputFrequencyOffset - << " m_rfBandwidth: " << settings.m_rfBandwidth - << " m_volume: " << settings.m_volume - << " m_squelch: " << settings.m_squelch - << " m_audioMute: " << settings.m_audioMute - << " m_bandpassEnable: " << settings.m_bandpassEnable - << " m_afBandwidth: " << settings.m_afBandwidth - << " m_audioDeviceName: " << settings.m_audioDeviceName - << " m_pll: " << settings.m_pll - << " m_syncAMOperation: " << (int) settings.m_syncAMOperation - << " force: " << force; + qDebug() << "AMDemodSink::applySettings:" << settings.getDebugString(settingsKeys, force); - if((m_settings.m_rfBandwidth != settings.m_rfBandwidth) || - (m_settings.m_bandpassEnable != settings.m_bandpassEnable) || - (m_settings.m_afBandwidth != settings.m_afBandwidth) || force) + if((settingsKeys.contains("rfBandwidth") && (settings.m_rfBandwidth != m_settings.m_rfBandwidth)) || + (settingsKeys.contains("bandpassEnable") && (settings.m_bandpassEnable != m_settings.m_bandpassEnable)) || + (settingsKeys.contains("afBandwidth") && (settings.m_afBandwidth != m_settings.m_afBandwidth)) || force) { m_interpolator.create(16, m_channelSampleRate, settings.m_rfBandwidth / 2.2f); m_interpolatorDistanceRemain = 0; @@ -291,11 +280,11 @@ void AMDemodSink::applySettings(const AMDemodSettings& settings, bool force) DSBFilter->create_dsb_filter((2.0f * settings.m_rfBandwidth) / (float) m_audioSampleRate); } - if ((m_settings.m_squelch != settings.m_squelch) || force) { + if ((settingsKeys.contains("squelch") && (m_settings.m_squelch != settings.m_squelch)) || force) { m_squelchLevel = CalcDb::powerFromdB(settings.m_squelch); } - if ((m_settings.m_pll != settings.m_pll) || force) + if ((settingsKeys.contains("pll") && (m_settings.m_pll != settings.m_pll)) || force) { if (settings.m_pll) { @@ -308,11 +297,15 @@ void AMDemodSink::applySettings(const AMDemodSettings& settings, bool force) } } - if ((m_settings.m_syncAMOperation != settings.m_syncAMOperation) || force) { + if ((settingsKeys.contains("syncAMOperation") && (m_settings.m_syncAMOperation != settings.m_syncAMOperation)) || force) { m_syncAMBuffIndex = 0; } - m_settings = settings; + if (force) { + m_settings = settings; + } else { + m_settings.applySettings(settingsKeys, settings); + } } void AMDemodSink::applyAudioSampleRate(int sampleRate) diff --git a/plugins/channelrx/demodam/amdemodsink.h b/plugins/channelrx/demodam/amdemodsink.h index d768e4c35..5059da770 100644 --- a/plugins/channelrx/demodam/amdemodsink.h +++ b/plugins/channelrx/demodam/amdemodsink.h @@ -43,7 +43,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 AMDemodSettings& settings, bool force = false); + void applySettings(const QStringList& settingsKeys, const AMDemodSettings& settings, bool force = false); void applyAudioSampleRate(int sampleRate); int getAudioSampleRate() const { return m_audioSampleRate; } diff --git a/plugins/channelrx/demodapt/aptdemod.cpp b/plugins/channelrx/demodapt/aptdemod.cpp index 693c6da8d..1f9692ca6 100644 --- a/plugins/channelrx/demodapt/aptdemod.cpp +++ b/plugins/channelrx/demodapt/aptdemod.cpp @@ -62,7 +62,7 @@ APTDemod::APTDemod(DeviceAPI *deviceAPI) : m_basebandSink->setImagWorkerMessageQueue(m_imageWorker->getInputMessageQueue()); m_imageWorker->moveToThread(&m_imageThread); - applySettings(m_settings, true); + applySettings(QStringList(), m_settings, true); m_deviceAPI->addChannelSink(this); m_deviceAPI->addChannelSinkAPI(this); @@ -149,7 +149,7 @@ void APTDemod::startBasebandSink() DSPSignalNotification *dspMsg = new DSPSignalNotification(m_basebandSampleRate, m_centerFrequency); m_basebandSink->getInputMessageQueue()->push(dspMsg); - APTDemodBaseband::MsgConfigureAPTDemodBaseband *msg = APTDemodBaseband::MsgConfigureAPTDemodBaseband::create(m_settings, true); + APTDemodBaseband::MsgConfigureAPTDemodBaseband *msg = APTDemodBaseband::MsgConfigureAPTDemodBaseband::create(QStringList(), m_settings, true); m_basebandSink->getInputMessageQueue()->push(msg); } @@ -161,7 +161,7 @@ void APTDemod::startImageWorker() m_imageWorker->startWork(); m_imageThread.start(); - APTDemodImageWorker::MsgConfigureAPTDemodImageWorker *msg = APTDemodImageWorker::MsgConfigureAPTDemodImageWorker::create(m_settings, true); + APTDemodImageWorker::MsgConfigureAPTDemodImageWorker *msg = APTDemodImageWorker::MsgConfigureAPTDemodImageWorker::create(QStringList(), m_settings, true); m_imageWorker->getInputMessageQueue()->push(msg); } @@ -202,7 +202,7 @@ bool APTDemod::handleMessage(const Message& cmd) { MsgConfigureAPTDemod& cfg = (MsgConfigureAPTDemod&) cmd; qDebug() << "APTDemod::handleMessage: MsgConfigureAPTDemod"; - applySettings(cfg.getSettings(), cfg.getForce()); + applySettings(cfg.getSettingsKeys(), cfg.getSettings(), cfg.getForce()); return true; } @@ -239,116 +239,20 @@ void APTDemod::setCenterFrequency(qint64 frequency) { APTDemodSettings settings = m_settings; settings.m_inputFrequencyOffset = frequency; - applySettings(settings, false); + applySettings(QStringList({"inputFrequencyOffset"}), settings, false); if (m_guiMessageQueue) // forward to GUI if any { - MsgConfigureAPTDemod *msgToGUI = MsgConfigureAPTDemod::create(settings, false); + MsgConfigureAPTDemod *msgToGUI = MsgConfigureAPTDemod::create(QStringList({"inputFrequencyOffset"}), settings, false); m_guiMessageQueue->push(msgToGUI); } } -void APTDemod::applySettings(const APTDemodSettings& settings, bool force) +void APTDemod::applySettings(const QStringList& settingsKeys, const APTDemodSettings& settings, bool force) { - qDebug() << "APTDemod::applySettings:" - << " m_cropNoise: " << settings.m_cropNoise - << " m_denoise: " << settings.m_denoise - << " m_linearEqualise: " << settings.m_linearEqualise - << " m_histogramEqualise: " << settings.m_histogramEqualise - << " m_precipitationOverlay: " << settings.m_precipitationOverlay - << " m_flip: " << settings.m_flip - << " m_channels: " << settings.m_channels - << " m_decodeEnabled: " << settings.m_decodeEnabled - << " m_autoSave: " << settings.m_autoSave - << " m_autoSavePath: " << settings.m_autoSavePath - << " m_autoSaveMinScanLines: " << settings.m_autoSaveMinScanLines - << " 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() << "APTDemod::applySettings:" << settings.getDebugString(settingsKeys, force); - QList reverseAPIKeys; - - if ((settings.m_inputFrequencyOffset != m_settings.m_inputFrequencyOffset) || force) { - reverseAPIKeys.append("inputFrequencyOffset"); - } - 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_denoise != m_settings.m_denoise) || force) { - reverseAPIKeys.append("denoise"); - } - if ((settings.m_linearEqualise != m_settings.m_linearEqualise) || force) { - reverseAPIKeys.append("linearEqualise"); - } - if ((settings.m_histogramEqualise != m_settings.m_histogramEqualise) || force) { - reverseAPIKeys.append("histogramEqualise"); - } - if ((settings.m_precipitationOverlay != m_settings.m_precipitationOverlay) || force) { - reverseAPIKeys.append("precipitationOverlay"); - } - if ((settings.m_flip != m_settings.m_flip) || force) { - reverseAPIKeys.append("flip"); - } - if ((settings.m_channels != m_settings.m_channels) || force) { - reverseAPIKeys.append("channels"); - } - if ((settings.m_decodeEnabled != m_settings.m_decodeEnabled) || force) { - reverseAPIKeys.append("decodeEnabled"); - } - if ((settings.m_autoSave != m_settings.m_autoSave) || force) { - reverseAPIKeys.append("autoSave"); - } - if ((settings.m_autoSavePath != m_settings.m_autoSavePath) || force) { - reverseAPIKeys.append("autoSavePath"); - } - if ((settings.m_autoSaveMinScanLines != m_settings.m_autoSaveMinScanLines) || force) { - reverseAPIKeys.append("autoSaveMinScanLines"); - } - if ((settings.m_saveCombined != m_settings.m_saveCombined) || force) { - reverseAPIKeys.append("saveCombined"); - } - if ((settings.m_saveSeparate != m_settings.m_saveSeparate) || force) { - reverseAPIKeys.append("saveSeparate"); - } - if ((settings.m_saveProjection != m_settings.m_saveProjection) || force) { - reverseAPIKeys.append("saveProjection"); - } - if ((settings.m_scanlinesPerImageUpdate != m_settings.m_scanlinesPerImageUpdate) || force) { - reverseAPIKeys.append("scanlinesPerImageUpdate"); - } - if ((settings.m_transparencyThreshold != m_settings.m_transparencyThreshold) || force) { - reverseAPIKeys.append("transparencyThreshold"); - } - if ((settings.m_opacityThreshold != m_settings.m_opacityThreshold) || force) { - reverseAPIKeys.append("opacityThreshold"); - } - if ((settings.m_palettes != m_settings.m_palettes) || force) { - reverseAPIKeys.append("palettes"); - } - if ((settings.m_palette != m_settings.m_palette) || force) { - reverseAPIKeys.append("palette"); - } - if ((settings.m_horizontalPixelsPerDegree != m_settings.m_horizontalPixelsPerDegree) || force) { - reverseAPIKeys.append("horizontalPixelsPerDegree"); - } - if ((settings.m_verticalPixelsPerDegree != m_settings.m_verticalPixelsPerDegree) || force) { - reverseAPIKeys.append("verticalPixelsPerDegree"); - } - if ((settings.m_satTimeOffset != m_settings.m_satTimeOffset) || force) { - reverseAPIKeys.append("satTimeOffset"); - } - if ((settings.m_satYaw != m_settings.m_satYaw) || force) { - reverseAPIKeys.append("satYaw"); - } - - if (m_settings.m_streamIndex != settings.m_streamIndex) + if (settingsKeys.contains("streamIndex")) { if (m_deviceAPI->getSampleMIMO()) // change of stream is possible for MIMO devices only { @@ -359,26 +263,24 @@ void APTDemod::applySettings(const APTDemodSettings& settings, bool force) m_settings.m_streamIndex = settings.m_streamIndex; // make sure ChannelAPI::getStreamIndex() is consistent emit streamIndexChanged(settings.m_streamIndex); } - - reverseAPIKeys.append("streamIndex"); } APTDemodBaseband::MsgConfigureAPTDemodBaseband *msg - = APTDemodBaseband::MsgConfigureAPTDemodBaseband::create(settings, force); + = APTDemodBaseband::MsgConfigureAPTDemodBaseband::create(settingsKeys, settings, force); m_basebandSink->getInputMessageQueue()->push(msg); APTDemodImageWorker::MsgConfigureAPTDemodImageWorker *msgToImg - = APTDemodImageWorker::MsgConfigureAPTDemodImageWorker::create(settings, force); + = APTDemodImageWorker::MsgConfigureAPTDemodImageWorker::create(settingsKeys, settings, force); m_imageWorker->getInputMessageQueue()->push(msgToImg); if (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")) || + (settingsKeys.contains("reverseAPIAddress")) || + (settingsKeys.contains("reverseAPIPort")) || + (settingsKeys.contains("reverseAPIDeviceIndex")) || + (settingsKeys.contains("reverseAPIChannelIndex")); + webapiReverseSendSettings(settingsKeys, settings, fullUpdate || force); } m_settings = settings; @@ -393,14 +295,14 @@ bool APTDemod::deserialize(const QByteArray& data) { if (m_settings.deserialize(data)) { - MsgConfigureAPTDemod *msg = MsgConfigureAPTDemod::create(m_settings, true); + MsgConfigureAPTDemod *msg = MsgConfigureAPTDemod::create(QStringList(), m_settings, true); m_inputMessageQueue.push(msg); return true; } else { m_settings.resetToDefaults(); - MsgConfigureAPTDemod *msg = MsgConfigureAPTDemod::create(m_settings, true); + MsgConfigureAPTDemod *msg = MsgConfigureAPTDemod::create(QStringList(), m_settings, true); m_inputMessageQueue.push(msg); return false; } @@ -436,13 +338,13 @@ int APTDemod::webapiSettingsPutPatch( APTDemodSettings settings = m_settings; webapiUpdateChannelSettings(settings, channelSettingsKeys, response); - MsgConfigureAPTDemod *msg = MsgConfigureAPTDemod::create(settings, force); + MsgConfigureAPTDemod *msg = MsgConfigureAPTDemod::create(channelSettingsKeys, settings, force); m_inputMessageQueue.push(msg); qDebug("APTDemod::webapiSettingsPutPatch: forward to GUI: %p", m_guiMessageQueue); if (m_guiMessageQueue) // forward to GUI if any { - MsgConfigureAPTDemod *msgToGUI = MsgConfigureAPTDemod::create(settings, force); + MsgConfigureAPTDemod *msgToGUI = MsgConfigureAPTDemod::create(channelSettingsKeys, settings, force); m_guiMessageQueue->push(msgToGUI); } @@ -645,7 +547,7 @@ void APTDemod::webapiFormatChannelSettings(SWGSDRangel::SWGChannelSettings& resp } } -void APTDemod::webapiReverseSendSettings(QList& channelSettingsKeys, const APTDemodSettings& settings, bool force) +void APTDemod::webapiReverseSendSettings(const QList& channelSettingsKeys, const APTDemodSettings& settings, bool force) { SWGSDRangel::SWGChannelSettings *swgChannelSettings = new SWGSDRangel::SWGChannelSettings(); webapiFormatChannelSettings(channelSettingsKeys, swgChannelSettings, settings, force); @@ -671,7 +573,7 @@ void APTDemod::webapiReverseSendSettings(QList& channelSettingsKeys, co } void APTDemod::webapiFormatChannelSettings( - QList& channelSettingsKeys, + const QList& channelSettingsKeys, SWGSDRangel::SWGChannelSettings *swgChannelSettings, const APTDemodSettings& settings, bool force @@ -825,9 +727,9 @@ int APTDemod::webapiActionsPost( settings.m_aosDateTime = QDateTime::fromString(*aos->getDateTime(), Qt::ISODateWithMs); settings.m_northToSouth = aos->getNorthToSouthPass(); - m_inputMessageQueue.push(MsgConfigureAPTDemod::create(settings, false)); + m_inputMessageQueue.push(MsgConfigureAPTDemod::create(channelActionsKeys, settings, false)); if (m_guiMessageQueue) { - m_guiMessageQueue->push(MsgConfigureAPTDemod::create(settings, false)); + m_guiMessageQueue->push(MsgConfigureAPTDemod::create(channelActionsKeys, settings, false)); } } @@ -858,10 +760,10 @@ int APTDemod::webapiActionsPost( // Disable decoder APTDemodSettings settings = m_settings; settings.m_decodeEnabled = false; - m_inputMessageQueue.push(MsgConfigureAPTDemod::create(settings, false)); + m_inputMessageQueue.push(MsgConfigureAPTDemod::create(channelActionsKeys, settings, false)); if (m_guiMessageQueue) { - m_guiMessageQueue->push(MsgConfigureAPTDemod::create(settings, false)); + m_guiMessageQueue->push(MsgConfigureAPTDemod::create(channelActionsKeys, settings, false)); } } diff --git a/plugins/channelrx/demodapt/aptdemod.h b/plugins/channelrx/demodapt/aptdemod.h index 67fe1192c..0766eba36 100644 --- a/plugins/channelrx/demodapt/aptdemod.h +++ b/plugins/channelrx/demodapt/aptdemod.h @@ -48,20 +48,23 @@ public: public: const APTDemodSettings& getSettings() const { return m_settings; } + const QStringList& getSettingsKeys() const { return m_settingsKeys; } bool getForce() const { return m_force; } - static MsgConfigureAPTDemod* create(const APTDemodSettings& settings, bool force) + static MsgConfigureAPTDemod* create(const QStringList& settingsKeys, const APTDemodSettings& settings, bool force) { - return new MsgConfigureAPTDemod(settings, force); + return new MsgConfigureAPTDemod(settingsKeys, settings, force); } private: APTDemodSettings m_settings; + QStringList m_settingsKeys; bool m_force; - MsgConfigureAPTDemod(const APTDemodSettings& settings, bool force) : + MsgConfigureAPTDemod(const QStringList& settingsKeys, const APTDemodSettings& settings, bool force) : Message(), m_settings(settings), + m_settingsKeys(settingsKeys), m_force(force) { } }; @@ -282,10 +285,10 @@ private: QNetworkRequest m_networkRequest; virtual bool handleMessage(const Message& cmd); - void applySettings(const APTDemodSettings& settings, bool force = false); - void webapiReverseSendSettings(QList& channelSettingsKeys, const APTDemodSettings& settings, bool force); + void applySettings(const QStringList& settingsKeys, const APTDemodSettings& settings, bool force = false); + void webapiReverseSendSettings(const QList& channelSettingsKeys, const APTDemodSettings& settings, bool force); void webapiFormatChannelSettings( - QList& channelSettingsKeys, + const QList& channelSettingsKeys, SWGSDRangel::SWGChannelSettings *swgChannelSettings, const APTDemodSettings& settings, bool force diff --git a/plugins/channelrx/demodapt/aptdemodbaseband.cpp b/plugins/channelrx/demodapt/aptdemodbaseband.cpp index b19a85740..9a1d4f68d 100644 --- a/plugins/channelrx/demodapt/aptdemodbaseband.cpp +++ b/plugins/channelrx/demodapt/aptdemodbaseband.cpp @@ -129,7 +129,7 @@ bool APTDemodBaseband::handleMessage(const Message& cmd) MsgConfigureAPTDemodBaseband& cfg = (MsgConfigureAPTDemodBaseband&) cmd; qDebug() << "APTDemodBaseband::handleMessage: MsgConfigureAPTDemodBaseband"; - applySettings(cfg.getSettings(), cfg.getForce()); + applySettings(cfg.getSettingsKeys(), cfg.getSettings(), cfg.getForce()); return true; } @@ -154,17 +154,21 @@ bool APTDemodBaseband::handleMessage(const Message& cmd) } } -void APTDemodBaseband::applySettings(const APTDemodSettings& settings, bool force) +void APTDemodBaseband::applySettings(const QStringList& settingsKeys, const APTDemodSettings& settings, bool force) { - if ((settings.m_inputFrequencyOffset != m_settings.m_inputFrequencyOffset) || force) + if ((settingsKeys.contains("m_inputFrequencyOffset")) || force) { m_channelizer->setChannelization(APTDEMOD_AUDIO_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 APTDemodBaseband::setBasebandSampleRate(int sampleRate) diff --git a/plugins/channelrx/demodapt/aptdemodbaseband.h b/plugins/channelrx/demodapt/aptdemodbaseband.h index 72cdce30f..b58da71d1 100644 --- a/plugins/channelrx/demodapt/aptdemodbaseband.h +++ b/plugins/channelrx/demodapt/aptdemodbaseband.h @@ -40,20 +40,23 @@ public: public: const APTDemodSettings& getSettings() const { return m_settings; } + const QStringList& getSettingsKeys() const { return m_settingsKeys; } bool getForce() const { return m_force; } - static MsgConfigureAPTDemodBaseband* create(const APTDemodSettings& settings, bool force) + static MsgConfigureAPTDemodBaseband* create(const QStringList& settingsKeys, const APTDemodSettings& settings, bool force) { - return new MsgConfigureAPTDemodBaseband(settings, force); + return new MsgConfigureAPTDemodBaseband(settingsKeys, settings, force); } private: APTDemodSettings m_settings; + QStringList m_settingsKeys; bool m_force; - MsgConfigureAPTDemodBaseband(const APTDemodSettings& settings, bool force) : + MsgConfigureAPTDemodBaseband(const QStringList& settingsKeys, const APTDemodSettings& settings, bool force) : Message(), m_settings(settings), + m_settingsKeys(settingsKeys), m_force(force) { } }; @@ -85,7 +88,7 @@ private: bool handleMessage(const Message& cmd); void calculateOffset(APTDemodSink *sink); - void applySettings(const APTDemodSettings& settings, bool force = false); + void applySettings(const QStringList& settingsKeys, const APTDemodSettings& settings, bool force = false); private slots: void handleInputMessages(); diff --git a/plugins/channelrx/demodapt/aptdemodgui.cpp b/plugins/channelrx/demodapt/aptdemodgui.cpp index cdbf3250f..ba3a8b960 100644 --- a/plugins/channelrx/demodapt/aptdemodgui.cpp +++ b/plugins/channelrx/demodapt/aptdemodgui.cpp @@ -101,7 +101,7 @@ void APTDemodGUI::resetToDefaults() { m_settings.resetToDefaults(); displaySettings(); - applySettings(true); + applySettings(QStringList(), true); } QByteArray APTDemodGUI::serialize() const @@ -114,7 +114,7 @@ bool APTDemodGUI::deserialize(const QByteArray& data) if(m_settings.deserialize(data)) { displaySettings(); - applySettings(true); + applySettings(QStringList(), true); return true; } else { resetToDefaults(); @@ -296,7 +296,7 @@ void APTDemodGUI::channelMarkerChangedByCursor() { ui->deltaFrequency->setValue(m_channelMarker.getCenterFrequency()); m_settings.m_inputFrequencyOffset = m_channelMarker.getCenterFrequency(); - applySettings(); + applySettings(QStringList("inputFrequencyOffset"), false); } void APTDemodGUI::channelMarkerHighlightedByCursor() @@ -309,7 +309,7 @@ void APTDemodGUI::on_deltaFrequency_changed(qint64 value) m_channelMarker.setCenterFrequency(value); m_settings.m_inputFrequencyOffset = m_channelMarker.getCenterFrequency(); updateAbsoluteCenterFrequency(); - applySettings(); + applySettings(QStringList("inputFrequencyOffset"), false); } void APTDemodGUI::on_rfBW_valueChanged(int value) @@ -318,14 +318,14 @@ void APTDemodGUI::on_rfBW_valueChanged(int value) ui->rfBWText->setText(QString("%1k").arg(value / 10.0, 0, 'f', 1)); m_channelMarker.setBandwidth(bw); m_settings.m_rfBandwidth = bw; - applySettings(); + applySettings(QStringList("rfBandwidth"), false); } void APTDemodGUI::on_fmDev_valueChanged(int value) { ui->fmDevText->setText(QString("%1k").arg(value / 10.0, 0, 'f', 1)); m_settings.m_fmDeviation = value * 100.0; - applySettings(); + applySettings(QStringList("fmDeviation"), false); } void APTDemodGUI::displayLabels() @@ -385,7 +385,7 @@ void APTDemodGUI::on_channels_currentIndexChanged(int index) m_settings.m_precipitationOverlay = false; } displayLabels(); - applySettings(); + applySettings(QStringList("channels"), false); } void APTDemodGUI::on_transparencyThreshold_valueChanged(int value) @@ -394,13 +394,14 @@ void APTDemodGUI::on_transparencyThreshold_valueChanged(int value) ui->transparencyThresholdText->setText(QString::number(m_settings.m_transparencyThreshold)); // Don't applySettings while tracking, as processing an image takes a long time if (!ui->transparencyThreshold->isSliderDown()) { - applySettings(); + applySettings(QStringList("transparencyThreshold"), false); } } void APTDemodGUI::on_transparencyThreshold_sliderReleased() { - applySettings(); + m_settings.m_transparencyThreshold = ui->transparencyThreshold->value(); + applySettings(QStringList("transparencyThreshold"), false); } void APTDemodGUI::on_opacityThreshold_valueChanged(int value) @@ -409,43 +410,44 @@ void APTDemodGUI::on_opacityThreshold_valueChanged(int value) ui->opacityThresholdText->setText(QString::number(m_settings.m_opacityThreshold)); // Don't applySettings while tracking, as processing an image takes a long time if (!ui->opacityThreshold->isSliderDown()) { - applySettings(); + applySettings(QStringList("opacityThreshold"), false); } } void APTDemodGUI::on_opacityThreshold_sliderReleased() { - applySettings(); + m_settings.m_opacityThreshold = ui->opacityThreshold->value(); + applySettings(QStringList("opacityThreshold"), false); } void APTDemodGUI::on_cropNoise_clicked(bool checked) { m_settings.m_cropNoise = checked; - applySettings(); + applySettings(QStringList("cropNoise"), false); } void APTDemodGUI::on_denoise_clicked(bool checked) { m_settings.m_denoise = checked; - applySettings(); + applySettings(QStringList("denoise"), false); } void APTDemodGUI::on_linear_clicked(bool checked) { m_settings.m_linearEqualise = checked; - applySettings(); + applySettings(QStringList("linearEqualise"), false); } void APTDemodGUI::on_histogram_clicked(bool checked) { m_settings.m_histogramEqualise = checked; - applySettings(); + applySettings(QStringList("histogramEqualise"), false); } void APTDemodGUI::on_precipitation_clicked(bool checked) { m_settings.m_precipitationOverlay = checked; - applySettings(); + applySettings(QStringList("precipitationOverlay"), false); } void APTDemodGUI::on_flip_clicked(bool checked) @@ -456,13 +458,13 @@ void APTDemodGUI::on_flip_clicked(bool checked) } else { ui->image->setAlignment(Qt::AlignTop | Qt::AlignHCenter); } - applySettings(); + applySettings(QStringList("flip"), false); } void APTDemodGUI::on_startStop_clicked(bool checked) { m_settings.m_decodeEnabled = checked; - applySettings(); + applySettings(QStringList("decodeEnabled"), false); } void APTDemodGUI::resetDecoder() @@ -490,7 +492,21 @@ void APTDemodGUI::on_showSettings_clicked() if (dialog.exec() == QDialog::Accepted) { displayPalettes(); - applySettings(); + applySettings(QStringList({ + "satelliteTrackerControl", + "satelliteName", + "autoSave", + "saveCombined", + "saveSeparate", + "saveProjection", + "autoSavePath", + "autoSaveMinScanLines", + "scanlinesPerImageUpdate", + "horizontalPixelsPerDegree", + "verticalPixelsPerDegree", + "satTimeOffset", + "satYaw", + }), false); } } @@ -551,7 +567,7 @@ void APTDemodGUI::onWidgetRolled(QWidget* widget, bool rollDown) (void) rollDown; getRollupContents()->saveState(m_rollupState); - applySettings(); + applySettings(QStringList(), false); } void APTDemodGUI::onMenuDialogCalled(const QPoint &p) @@ -596,7 +612,19 @@ void APTDemodGUI::onMenuDialogCalled(const QPoint &p) updateIndexLabel(); } - applySettings(); + applySettings(QStringList( + { + "rgbColor", + "title", + "useReverseAPI", + "reverseAPIAddress", + "reverseAPIPort", + "reverseAPIDeviceIndex", + "reverseAPIChannelIndex", + "streamIndex" + }), + false + ); } resetContextMenuType(); @@ -679,7 +707,7 @@ APTDemodGUI::APTDemodGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Baseban displaySettings(); makeUIConnections(); - applySettings(true); + applySettings(QStringList(), true); DialPopup::addPopupsToChildDials(this); m_resizer.enableChildMouseTracking(); } @@ -743,11 +771,11 @@ void APTDemodGUI::blockApplySettings(bool block) m_doApplySettings = !block; } -void APTDemodGUI::applySettings(bool force) +void APTDemodGUI::applySettings(const QStringList& settingsKeys, bool force) { if (m_doApplySettings) { - APTDemod::MsgConfigureAPTDemod* message = APTDemod::MsgConfigureAPTDemod::create( m_settings, force); + APTDemod::MsgConfigureAPTDemod* message = APTDemod::MsgConfigureAPTDemod::create(settingsKeys, m_settings, force); m_aptDemod->getInputMessageQueue()->push(message); } } diff --git a/plugins/channelrx/demodapt/aptdemodgui.h b/plugins/channelrx/demodapt/aptdemodgui.h index e48acecc9..a5f4b738f 100644 --- a/plugins/channelrx/demodapt/aptdemodgui.h +++ b/plugins/channelrx/demodapt/aptdemodgui.h @@ -121,7 +121,7 @@ private: virtual ~APTDemodGUI(); void blockApplySettings(bool block); - void applySettings(bool force = false); + void applySettings(const QStringList& settingsKeys, bool force = false); void displaySettings(); void displayPalettes(); void displayLabels(); diff --git a/plugins/channelrx/demodapt/aptdemodimageworker.h b/plugins/channelrx/demodapt/aptdemodimageworker.h index 31418060c..9e1ddd2c0 100644 --- a/plugins/channelrx/demodapt/aptdemodimageworker.h +++ b/plugins/channelrx/demodapt/aptdemodimageworker.h @@ -49,20 +49,23 @@ public: public: const APTDemodSettings& getSettings() const { return m_settings; } + const QStringList& getSettingsKeys() const { return m_settingsKeys; } bool getForce() const { return m_force; } - static MsgConfigureAPTDemodImageWorker* create(const APTDemodSettings& settings, bool force) + static MsgConfigureAPTDemodImageWorker* create(const QStringList& settingsKeys, const APTDemodSettings& settings, bool force) { - return new MsgConfigureAPTDemodImageWorker(settings, force); + return new MsgConfigureAPTDemodImageWorker(settingsKeys, settings, force); } private: APTDemodSettings m_settings; + QStringList m_settingsKeys; bool m_force; - MsgConfigureAPTDemodImageWorker(const APTDemodSettings& settings, bool force) : + MsgConfigureAPTDemodImageWorker(const QStringList& settingsKeys, const APTDemodSettings& settings, bool force) : Message(), m_settings(settings), + m_settingsKeys(settingsKeys), m_force(force) { } }; diff --git a/plugins/channelrx/demodapt/aptdemodsettings.cpp b/plugins/channelrx/demodapt/aptdemodsettings.cpp index 95870be89..0bce80ac3 100644 --- a/plugins/channelrx/demodapt/aptdemodsettings.cpp +++ b/plugins/channelrx/demodapt/aptdemodsettings.cpp @@ -218,4 +218,260 @@ bool APTDemodSettings::deserialize(const QByteArray& data) } } +void APTDemodSettings::applySettings(const QStringList& settingsKeys, const APTDemodSettings& settings) +{ + if (settingsKeys.contains("inputFrequencyOffset")) { + m_inputFrequencyOffset = settings.m_inputFrequencyOffset; + } + if (settingsKeys.contains("rfBandwidth")) { + m_rfBandwidth = settings.m_rfBandwidth; + } + if (settingsKeys.contains("fmDeviation")) { + m_fmDeviation = settings.m_fmDeviation; + } + if (settingsKeys.contains("cropNoise")) { + m_cropNoise = settings.m_cropNoise; + } + if (settingsKeys.contains("denoise")) { + m_denoise = settings.m_denoise; + } + if (settingsKeys.contains("linearEqualise")) { + m_linearEqualise = settings.m_linearEqualise; + } + if (settingsKeys.contains("histogramEqualise")) { + m_histogramEqualise = settings.m_histogramEqualise; + } + if (settingsKeys.contains("precipitationOverlay")) { + m_precipitationOverlay = settings.m_precipitationOverlay; + } + if (settingsKeys.contains("flip")) { + m_flip = settings.m_flip; + } + if (settingsKeys.contains("channels")) { + m_channels = settings.m_channels; + } + if (settingsKeys.contains("decodeEnabled")) { + m_decodeEnabled = settings.m_decodeEnabled; + } + if (settingsKeys.contains("satelliteTrackerControl")) { + m_satelliteTrackerControl = settings.m_satelliteTrackerControl; + } + if (settingsKeys.contains("satelliteName")) { + m_satelliteName = settings.m_satelliteName; + } + if (settingsKeys.contains("autoSave")) { + m_autoSave = settings.m_autoSave; + } + if (settingsKeys.contains("autoSavePath")) { + m_autoSavePath = settings.m_autoSavePath; + } + if (settingsKeys.contains("autoSaveMinScanLines")) { + m_autoSaveMinScanLines = settings.m_autoSaveMinScanLines; + } + if (settingsKeys.contains("saveCombined")) { + m_saveCombined = settings.m_saveCombined; + } + if (settingsKeys.contains("saveSeparate")) { + m_saveSeparate = settings.m_saveSeparate; + } + if (settingsKeys.contains("saveProjection")) { + m_saveProjection = settings.m_saveProjection; + } + if (settingsKeys.contains("scanlinesPerImageUpdate")) { + m_scanlinesPerImageUpdate = settings.m_scanlinesPerImageUpdate; + } + if (settingsKeys.contains("transparencyThreshold")) { + m_transparencyThreshold = settings.m_transparencyThreshold; + } + if (settingsKeys.contains("opacityThreshold")) { + m_opacityThreshold = settings.m_opacityThreshold; + } + if (settingsKeys.contains("palettes")) { + m_palettes = settings.m_palettes; + } + if (settingsKeys.contains("palette")) { + m_palette = settings.m_palette; + } + if (settingsKeys.contains("horizontalPixelsPerDegree")) { + m_horizontalPixelsPerDegree = settings.m_horizontalPixelsPerDegree; + } + if (settingsKeys.contains("verticalPixelsPerDegree")) { + m_verticalPixelsPerDegree = settings.m_verticalPixelsPerDegree; + } + if (settingsKeys.contains("satTimeOffset")) { + m_satTimeOffset = settings.m_satTimeOffset; + } + if (settingsKeys.contains("satYaw")) { + m_satYaw = settings.m_satYaw; + } + if (settingsKeys.contains("rgbColor")) { + m_rgbColor = settings.m_rgbColor; + } + if (settingsKeys.contains("title")) { + m_title = settings.m_title; + } + if (settingsKeys.contains("streamIndex")) { + m_streamIndex = settings.m_streamIndex; + } + if (settingsKeys.contains("useReverseAPI")) { + m_useReverseAPI = settings.m_useReverseAPI; + } + if (settingsKeys.contains("reverseAPIAddress")) { + m_reverseAPIAddress = settings.m_reverseAPIAddress; + } + if (settingsKeys.contains("reverseAPIPort")) { + m_reverseAPIPort = settings.m_reverseAPIPort; + } + if (settingsKeys.contains("reverseAPIDeviceIndex")) { + m_reverseAPIDeviceIndex = settings.m_reverseAPIDeviceIndex; + } + if (settingsKeys.contains("reverseAPIChannelIndex")) { + m_reverseAPIChannelIndex = settings.m_reverseAPIChannelIndex; + } + if (settingsKeys.contains("workspaceIndex")) { + m_workspaceIndex = settings.m_workspaceIndex; + } + if (settingsKeys.contains("hidden")) { + m_hidden = settings.m_hidden; + } + if (settingsKeys.contains("tle")) { + m_tle = settings.m_tle; + } + if (settingsKeys.contains("aosDateTime")) { + m_aosDateTime = settings.m_aosDateTime; + } + if (settingsKeys.contains("northToSouth")) { + m_northToSouth = settings.m_northToSouth; + } +} +QString APTDemodSettings::getDebugString(const QStringList& settingsKeys, bool force) const +{ + std::ostringstream ostr; + + if (settingsKeys.contains("inputFrequencyOffset") || force) { + ostr << " m_inputFrequencyOffset: " << m_inputFrequencyOffset; + } + if (settingsKeys.contains("rfBandwidth") || force) { + ostr << " m_rfBandwidth: " << m_rfBandwidth; + } + if (settingsKeys.contains("fmDeviation") || force) { + ostr << " m_fmDeviation: " << m_fmDeviation; + } + if (settingsKeys.contains("cropNoise") || force) { + ostr << " m_cropNoise: " << m_cropNoise; + } + if (settingsKeys.contains("denoise") || force) { + ostr << " m_denoise: " << m_denoise; + } + if (settingsKeys.contains("linearEqualise") || force) { + ostr << " m_linearEqualise: " << m_linearEqualise; + } + if (settingsKeys.contains("histogramEqualise") || force) { + ostr << " m_histogramEqualise: " << m_histogramEqualise; + } + if (settingsKeys.contains("precipitationOverlay") || force) { + ostr << " m_precipitationOverlay: " << m_precipitationOverlay; + } + if (settingsKeys.contains("flip") || force) { + ostr << " m_flip: " << m_flip; + } + if (settingsKeys.contains("channels") || force) { + ostr << " m_channels: " << m_channels; + } + if (settingsKeys.contains("decodeEnabled") || force) { + ostr << " m_decodeEnabled: " << m_decodeEnabled; + } + if (settingsKeys.contains("satelliteTrackerControl") || force) { + ostr << " m_satelliteTrackerControl: " << m_satelliteTrackerControl; + } + if (settingsKeys.contains("satelliteName") || force) { + ostr << " m_satelliteName: " << m_satelliteName.toStdString(); + } + if (settingsKeys.contains("autoSave") || force) { + ostr << " m_autoSave: " << m_autoSave; + } + if (settingsKeys.contains("autoSavePath") || force) { + ostr << " m_autoSavePath: " << m_autoSavePath.toStdString(); + } + if (settingsKeys.contains("autoSaveMinScanLines") || force) { + ostr << " m_autoSaveMinScanLines: " << m_autoSaveMinScanLines; + } + if (settingsKeys.contains("saveCombined") || force) { + ostr << " m_saveCombined: " << m_saveCombined; + } + if (settingsKeys.contains("saveSeparate") || force) { + ostr << " m_saveSeparate: " << m_saveSeparate; + } + if (settingsKeys.contains("saveProjection") || force) { + ostr << " m_saveProjection: " << m_saveProjection; + } + if (settingsKeys.contains("scanlinesPerImageUpdate") || force) { + ostr << " m_scanlinesPerImageUpdate: " << m_scanlinesPerImageUpdate; + } + if (settingsKeys.contains("transparencyThreshold") || force) { + ostr << " m_transparencyThreshold: " << m_transparencyThreshold; + } + if (settingsKeys.contains("opacityThreshold") || force) { + ostr << " m_opacityThreshold: " << m_opacityThreshold; + } + if (settingsKeys.contains("palettes") || force) { + ostr << " m_palettes: " << m_palettes.join(";").toStdString(); + } + if (settingsKeys.contains("palette") || force) { + ostr << " m_palette: " << m_palette; + } + if (settingsKeys.contains("horizontalPixelsPerDegree") || force) { + ostr << " m_horizontalPixelsPerDegree: " << m_horizontalPixelsPerDegree; + } + if (settingsKeys.contains("verticalPixelsPerDegree") || force) { + ostr << " m_verticalPixelsPerDegree: " << m_verticalPixelsPerDegree; + } + if (settingsKeys.contains("satTimeOffset") || force) { + ostr << " m_satTimeOffset: " << m_satTimeOffset; + } + if (settingsKeys.contains("satYaw") || force) { + ostr << " m_satYaw: " << m_satYaw; + } + if (settingsKeys.contains("rgbColor") || force) { + ostr << " m_rgbColor: " << m_rgbColor; + } + if (settingsKeys.contains("title") || force) { + ostr << " m_title: " << m_title.toStdString(); + } + if (settingsKeys.contains("streamIndex") || force) { + ostr << " m_streamIndex: " << m_streamIndex; + } + if (settingsKeys.contains("useReverseAPI") || force) { + ostr << " m_useReverseAPI: " << m_useReverseAPI; + } + if (settingsKeys.contains("reverseAPIAddress") || force) { + ostr << " m_reverseAPIAddress: " << m_reverseAPIAddress.toStdString(); + } + if (settingsKeys.contains("reverseAPIPort") || force) { + ostr << " m_reverseAPIPort: " << m_reverseAPIPort; + } + if (settingsKeys.contains("reverseAPIDeviceIndex") || force) { + ostr << " m_reverseAPIDeviceIndex: " << m_reverseAPIDeviceIndex; + } + if (settingsKeys.contains("reverseAPIChannelIndex") || force) { + ostr << " m_reverseAPIChannelIndex: " << m_reverseAPIChannelIndex; + } + if (settingsKeys.contains("workspaceIndex") || force) { + ostr << " m_workspaceIndex: " << m_workspaceIndex; + } + if (settingsKeys.contains("hidden") || force) { + ostr << " m_hidden: " << m_hidden; + } + if (settingsKeys.contains("tle") || force) { + ostr << " m_tle: " << m_tle.toStdString(); + } + if (settingsKeys.contains("aosDateTime") || force) { + ostr << " m_aosDateTime: " << m_aosDateTime.toString().toStdString(); + } + if (settingsKeys.contains("northToSouth") || force) { + ostr << " m_northToSouth: " << m_northToSouth; + } + + return QString(ostr.str().c_str()); +} diff --git a/plugins/channelrx/demodapt/aptdemodsettings.h b/plugins/channelrx/demodapt/aptdemodsettings.h index c45165b7f..479ba139b 100644 --- a/plugins/channelrx/demodapt/aptdemodsettings.h +++ b/plugins/channelrx/demodapt/aptdemodsettings.h @@ -81,6 +81,8 @@ struct APTDemodSettings void setRollupState(Serializable *rollupState) { m_rollupState = rollupState; } QByteArray serialize() const; bool deserialize(const QByteArray& data); + void applySettings(const QStringList& settingsKeys, const APTDemodSettings& settings); + QString getDebugString(const QStringList& settingsKeys, bool force=false) const; }; #endif /* INCLUDE_APTDEMODSETTINGS_H */ diff --git a/plugins/channelrx/demodapt/aptdemodsink.cpp b/plugins/channelrx/demodapt/aptdemodsink.cpp index dffbcd243..9c75ff285 100644 --- a/plugins/channelrx/demodapt/aptdemodsink.cpp +++ b/plugins/channelrx/demodapt/aptdemodsink.cpp @@ -35,7 +35,7 @@ APTDemodSink::APTDemodSink() : m_magsq = 0.0; - applySettings(m_settings, true); + applySettings(QStringList(), m_settings, true); applyChannelSettings(m_channelSampleRate, m_channelFrequencyOffset, true); m_samplesLength = APTDEMOD_AUDIO_SAMPLE_RATE * APT_MAX_HEIGHT / 2; // APT broadcasts at 2 lines per second @@ -176,25 +176,30 @@ void APTDemodSink::applyChannelSettings(int channelSampleRate, int channelFreque m_channelFrequencyOffset = channelFrequencyOffset; } -void APTDemodSink::applySettings(const APTDemodSettings& settings, bool force) +void APTDemodSink::applySettings(const QStringList& settingsKeys, const APTDemodSettings& settings, bool force) { - qDebug() << "APTDemodSink::applySettings:" - << " m_rfBandwidth: " << settings.m_rfBandwidth - << " m_fmDeviation: " << settings.m_fmDeviation - << " m_decodeEnabled: " << settings.m_decodeEnabled - << " force: " << force; + qDebug() << "APTDemodSink::applySettings:" << settings.getDebugString(settingsKeys, force); - if ((settings.m_rfBandwidth != m_settings.m_rfBandwidth) || force) + if (settingsKeys.contains("decodeEnabled") || force) + { + m_settings.m_decodeEnabled = settings.m_decodeEnabled; + } + + 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) APTDEMOD_AUDIO_SAMPLE_RATE; m_interpolatorDistanceRemain = m_interpolatorDistance; } - if ((settings.m_fmDeviation != m_settings.m_fmDeviation) || force) + if ((settingsKeys.contains("fmDeviation") && (settings.m_fmDeviation != m_settings.m_fmDeviation)) || force) { m_phaseDiscri.setFMScaling(APTDEMOD_AUDIO_SAMPLE_RATE / (2.0f * settings.m_fmDeviation)); } - m_settings = settings; + if (force) { + m_settings = settings; + } else { + m_settings.applySettings(settingsKeys, settings); + } } diff --git a/plugins/channelrx/demodapt/aptdemodsink.h b/plugins/channelrx/demodapt/aptdemodsink.h index 5afd7403e..f7eda42c7 100644 --- a/plugins/channelrx/demodapt/aptdemodsink.h +++ b/plugins/channelrx/demodapt/aptdemodsink.h @@ -50,7 +50,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 APTDemodSettings& settings, bool force = false); + void applySettings(const QStringList& settingsKeys, const APTDemodSettings& settings, bool force = false); void setImageWorkerMessageQueue(MessageQueue *messageQueue) { m_imageWorkerMessageQueue = messageQueue; } double getMagSq() const { return m_magsq; } diff --git a/plugins/channelrx/demodatv/atvdemod.cpp b/plugins/channelrx/demodatv/atvdemod.cpp index fa5c13cb3..b0a0b4084 100644 --- a/plugins/channelrx/demodatv/atvdemod.cpp +++ b/plugins/channelrx/demodatv/atvdemod.cpp @@ -50,7 +50,7 @@ ATVDemod::ATVDemod(DeviceAPI *deviceAPI) : ); m_basebandSink->moveToThread(&m_thread); - applySettings(m_settings, true); + applySettings(QStringList(), m_settings, true); m_deviceAPI->addChannelSink(this); m_deviceAPI->addChannelSinkAPI(this); @@ -106,7 +106,7 @@ void ATVDemod::start() DSPSignalNotification* notifToSink = new DSPSignalNotification(m_basebandSampleRate, m_centerFrequency); m_basebandSink->getInputMessageQueue()->push(notifToSink); - ATVDemodBaseband::MsgConfigureATVDemodBaseband *msg = ATVDemodBaseband::MsgConfigureATVDemodBaseband::create(m_settings, true); + ATVDemodBaseband::MsgConfigureATVDemodBaseband *msg = ATVDemodBaseband::MsgConfigureATVDemodBaseband::create(QStringList(), m_settings, true); m_basebandSink->getInputMessageQueue()->push(msg); } @@ -129,7 +129,7 @@ bool ATVDemod::handleMessage(const Message& cmd) if (MsgConfigureATVDemod::match(cmd)) { MsgConfigureATVDemod& cfg = (MsgConfigureATVDemod&) cmd; - applySettings(cfg.getSettings(), cfg.getForce()); + applySettings(cfg.getSettingsKeys(), cfg.getSettings(), cfg.getForce()); return true; } @@ -161,41 +161,20 @@ void ATVDemod::setCenterFrequency(qint64 frequency) { ATVDemodSettings settings = m_settings; settings.m_inputFrequencyOffset = frequency; - applySettings(settings, false); + applySettings(QStringList("inputFrequencyOffset"), settings, false); if (getMessageQueueToGUI()) { - MsgConfigureATVDemod *msg = MsgConfigureATVDemod::create(settings, false); + MsgConfigureATVDemod *msg = MsgConfigureATVDemod::create(QStringList("inputFrequencyOffset"), settings, false); getMessageQueueToGUI()->push(msg); } } -void ATVDemod::applySettings(const ATVDemodSettings& settings, bool force) +void ATVDemod::applySettings(const QStringList& settingsKeys, const ATVDemodSettings& settings, bool force) { - qDebug() << "ATVDemod::applySettings:" - << "m_inputFrequencyOffset:" << settings.m_inputFrequencyOffset - << "m_bfoFrequency:" << settings.m_bfoFrequency - << "m_atvModulation:" << settings.m_atvModulation - << "m_fmDeviation:" << settings.m_fmDeviation - << "m_fftFiltering:" << settings.m_fftFiltering - << "m_fftOppBandwidth:" << settings.m_fftOppBandwidth - << "m_fftBandwidth:" << settings.m_fftBandwidth - << "m_nbLines:" << settings.m_nbLines - << "m_fps:" << settings.m_fps - << "m_atvStd:" << settings.m_atvStd - << "m_hSync:" << settings.m_hSync - << "m_vSync:" << settings.m_vSync - << "m_invertVideo:" << settings.m_invertVideo - << "m_halfFrames:" << settings.m_halfFrames - << "m_levelSynchroTop:" << settings.m_levelSynchroTop - << "m_levelBlack:" << settings.m_levelBlack - << "m_rgbColor:" << settings.m_rgbColor - << "m_title:" << settings.m_title - << "m_udpAddress:" << settings.m_udpAddress - << "m_udpPort:" << settings.m_udpPort - << "force:" << force; + qDebug() << "ATVDemod::applySettings:" << settings.getDebugString(settingsKeys, force); - if (m_settings.m_streamIndex != settings.m_streamIndex) + if (settingsKeys.contains("m_streamIndex") && m_settings.m_streamIndex != settings.m_streamIndex) { if (m_deviceAPI->getSampleMIMO()) // change of stream is possible for MIMO devices only { @@ -208,10 +187,14 @@ void ATVDemod::applySettings(const ATVDemodSettings& settings, bool force) } } - ATVDemodBaseband::MsgConfigureATVDemodBaseband *msg = ATVDemodBaseband::MsgConfigureATVDemodBaseband::create(settings, force); + ATVDemodBaseband::MsgConfigureATVDemodBaseband *msg = ATVDemodBaseband::MsgConfigureATVDemodBaseband::create(settingsKeys, settings, force); m_basebandSink->getInputMessageQueue()->push(msg); - m_settings = settings; + if (force) { + m_settings = settings; + } else { + m_settings.applySettings(settingsKeys, settings); + } } void ATVDemod::handleIndexInDeviceSetChanged(int index) diff --git a/plugins/channelrx/demodatv/atvdemod.h b/plugins/channelrx/demodatv/atvdemod.h index 3844d54c1..2f2b82aec 100644 --- a/plugins/channelrx/demodatv/atvdemod.h +++ b/plugins/channelrx/demodatv/atvdemod.h @@ -43,20 +43,23 @@ public: public: const ATVDemodSettings& getSettings() const { return m_settings; } bool getForce() const { return m_force; } + const QStringList& getSettingsKeys() const { return m_settingsKeys; } - static MsgConfigureATVDemod* create(const ATVDemodSettings& settings, bool force) + static MsgConfigureATVDemod* create(const QStringList& settingsKeys, const ATVDemodSettings& settings, bool force) { - return new MsgConfigureATVDemod(settings, force); + return new MsgConfigureATVDemod(settingsKeys, settings, force); } private: ATVDemodSettings m_settings; bool m_force; + QStringList m_settingsKeys; - MsgConfigureATVDemod(const ATVDemodSettings& settings, bool force) : + MsgConfigureATVDemod(const QStringList& settingsKeys, const ATVDemodSettings& settings, bool force) : Message(), m_settings(settings), - m_force(force) + m_force(force), + m_settingsKeys(settingsKeys) { } }; @@ -112,7 +115,7 @@ private: int m_basebandSampleRate; //!< sample rate stored from device message used when starting baseband sink virtual bool handleMessage(const Message& cmd); - void applySettings(const ATVDemodSettings& settings, bool force = false); + void applySettings(const QStringList& settingsKeys, const ATVDemodSettings& settings, bool force = false); private slots: void handleIndexInDeviceSetChanged(int index); diff --git a/plugins/channelrx/demodatv/atvdemodbaseband.cpp b/plugins/channelrx/demodatv/atvdemodbaseband.cpp index 5d2ed6810..00bad7a2b 100644 --- a/plugins/channelrx/demodatv/atvdemodbaseband.cpp +++ b/plugins/channelrx/demodatv/atvdemodbaseband.cpp @@ -126,7 +126,7 @@ bool ATVDemodBaseband::handleMessage(const Message& cmd) MsgConfigureATVDemodBaseband& cfg = (MsgConfigureATVDemodBaseband&) cmd; qDebug() << "ATVDemodBaseband::handleMessage: MsgConfigureATVDemodBaseband"; - applySettings(cfg.getSettings(), cfg.getForce()); + applySettings(cfg.getSettingsKeys(), cfg.getSettings(), cfg.getForce()); return true; } @@ -147,18 +147,18 @@ bool ATVDemodBaseband::handleMessage(const Message& cmd) } } -void ATVDemodBaseband::applySettings(const ATVDemodSettings& settings, bool force) +void ATVDemodBaseband::applySettings(const QStringList& settingsKeys, const ATVDemodSettings& settings, bool force) { - qDebug("ATVDemodBaseband::applySettings"); + qDebug() << "ATVDemodBaseband::applySettings" << settings.getDebugString(settingsKeys, force); - if ((settings.m_inputFrequencyOffset != m_settings.m_inputFrequencyOffset)|| force) + if ((settingsKeys.contains("m_inputFrequencyOffset") && (settings.m_inputFrequencyOffset != m_settings.m_inputFrequencyOffset)) || force) { unsigned int desiredSampleRate = m_channelizer->getBasebandSampleRate(); m_channelizer->setChannelization(desiredSampleRate, 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; } diff --git a/plugins/channelrx/demodatv/atvdemodbaseband.h b/plugins/channelrx/demodatv/atvdemodbaseband.h index e13b47913..c97df3794 100644 --- a/plugins/channelrx/demodatv/atvdemodbaseband.h +++ b/plugins/channelrx/demodatv/atvdemodbaseband.h @@ -41,20 +41,23 @@ public: public: const ATVDemodSettings& getSettings() const { return m_settings; } + const QStringList& getSettingsKeys() const { return m_settingsKeys; } bool getForce() const { return m_force; } - static MsgConfigureATVDemodBaseband* create(const ATVDemodSettings& settings, bool force) + static MsgConfigureATVDemodBaseband* create(const QStringList& settingsKeys, const ATVDemodSettings& settings, bool force) { - return new MsgConfigureATVDemodBaseband(settings, force); + return new MsgConfigureATVDemodBaseband(settingsKeys, settings, force); } private: ATVDemodSettings m_settings; + QStringList m_settingsKeys; bool m_force; - MsgConfigureATVDemodBaseband(const ATVDemodSettings& settings, bool force) : + MsgConfigureATVDemodBaseband(const QStringList& settingsKeys, const ATVDemodSettings& settings, bool force) : Message(), m_settings(settings), + m_settingsKeys(settingsKeys), m_force(force) { } }; @@ -87,7 +90,7 @@ private: QRecursiveMutex m_mutex; bool handleMessage(const Message& cmd); - void applySettings(const ATVDemodSettings& settings, bool force = false); + void applySettings(const QStringList& settingsKeys, const ATVDemodSettings& settings, bool force = false); private slots: void handleInputMessages(); diff --git a/plugins/channelrx/demodatv/atvdemodgui.cpp b/plugins/channelrx/demodatv/atvdemodgui.cpp index cd010a55d..7f1452dbc 100644 --- a/plugins/channelrx/demodatv/atvdemodgui.cpp +++ b/plugins/channelrx/demodatv/atvdemodgui.cpp @@ -55,7 +55,7 @@ void ATVDemodGUI::resetToDefaults() { m_settings.resetToDefaults(); displaySettings(); - applySettings(true); + applySettings(QStringList(), true); } QByteArray ATVDemodGUI::serialize() const @@ -68,14 +68,14 @@ bool ATVDemodGUI::deserialize(const QByteArray& data) if(m_settings.deserialize(data)) { displaySettings(); - applySettings(true); // will have true + applySettings(QStringList(), true); // will have true return true; } else { m_settings.resetToDefaults(); displaySettings(); - applySettings(true); // will have true + applySettings(QStringList(), true); // will have true return false; } } @@ -184,7 +184,7 @@ void ATVDemodGUI::channelMarkerChangedByCursor() qDebug("ATVDemodGUI::channelMarkerChangedByCursor"); ui->deltaFrequency->setValue(m_channelMarker.getCenterFrequency()); m_settings.m_inputFrequencyOffset = m_channelMarker.getCenterFrequency(); - applySettings(); + applySettings(QStringList("inputFrequencyOffset"), false); } void ATVDemodGUI::channelMarkerHighlightedByCursor() @@ -247,7 +247,16 @@ void ATVDemodGUI::onMenuDialogCalled(const QPoint &p) updateIndexLabel(); } - applySettings(); + applySettings(QStringList({ + "rgbColor", + "title", + "useReverseAPI", + "reverseAPIAddress", + "reverseAPIPort", + "reverseAPIDeviceIndex", + "reverseAPIChannelIndex" + }), + false); } resetContextMenuType(); @@ -259,7 +268,7 @@ void ATVDemodGUI::onWidgetRolled(QWidget* widget, bool rollDown) (void) rollDown; getRollupContents()->saveState(m_rollupState); - applySettings(); + applySettings(QStringList(), false); } ATVDemodGUI::ATVDemodGUI(PluginAPI* objPluginAPI, DeviceUISet *deviceUISet, BasebandSampleSink *rxChannel, QWidget* objParent) : @@ -343,13 +352,13 @@ ATVDemodGUI::~ATVDemodGUI() delete ui; } -void ATVDemodGUI::applySettings(bool force) +void ATVDemodGUI::applySettings(const QStringList& settingsKeys, bool force) { qDebug() << "ATVDemodGUI::applySettings: " << force << " m_doApplySettings: " << m_doApplySettings; if (m_doApplySettings) { - ATVDemod::MsgConfigureATVDemod *msg = ATVDemod::MsgConfigureATVDemod::create(m_settings, force); + ATVDemod::MsgConfigureATVDemod *msg = ATVDemod::MsgConfigureATVDemod::create(settingsKeys, m_settings, force); m_atvDemod->getInputMessageQueue()->push(msg); } } @@ -459,58 +468,58 @@ void ATVDemodGUI::on_synchLevel_valueChanged(int value) { ui->synchLevelText->setText(QString("%1 mV").arg(value)); m_settings.m_levelSynchroTop = value / 1000.0f; - applySettings(); + applySettings(QStringList("levelSynchroTop"), false); } void ATVDemodGUI::on_blackLevel_valueChanged(int value) { ui->blackLevelText->setText(QString("%1 mV").arg(value)); m_settings.m_levelBlack = value / 1000.0f; - applySettings(); + applySettings(QStringList("levelBlack"), false); } void ATVDemodGUI::on_hSync_clicked() { m_settings.m_hSync = ui->hSync->isChecked(); - applySettings(); + applySettings(QStringList("hSync"), false); } void ATVDemodGUI::on_vSync_clicked() { m_settings.m_vSync = ui->vSync->isChecked(); - applySettings(); + applySettings(QStringList("vSync"), false); } void ATVDemodGUI::on_invertVideo_clicked() { m_settings.m_invertVideo = ui->invertVideo->isChecked(); - applySettings(); + applySettings(QStringList("invertVideo"), false); } void ATVDemodGUI::on_halfImage_clicked() { m_settings.m_halfFrames = ui->halfImage->isChecked(); - applySettings(); + applySettings(QStringList("halfFrames"), false); } void ATVDemodGUI::on_nbLines_currentIndexChanged(int index) { m_settings.m_nbLines = ATVDemodSettings::getNumberOfLines(index); applySampleRate(); - applySettings(); + applySettings(QStringList("nbLines"), false); } void ATVDemodGUI::on_fps_currentIndexChanged(int index) { m_settings.m_fps = ATVDemodSettings::getFps(index); applySampleRate(); - applySettings(); + applySettings(QStringList("fps"), false); } void ATVDemodGUI::on_standard_currentIndexChanged(int index) { m_settings.m_atvStd = (ATVDemodSettings::ATVStd) index; - applySettings(); + applySettings(QStringList("atvStd"), false); } void ATVDemodGUI::on_reset_clicked(bool checked) @@ -524,7 +533,7 @@ void ATVDemodGUI::on_modulation_currentIndexChanged(int index) m_settings.m_atvModulation = (ATVDemodSettings::ATVModulation) index; setRFFiltersSlidersRange(m_basebandSampleRate); setChannelMarkerBandwidth(); - applySettings(); + applySettings(QStringList("atvModulation"), false); } void ATVDemodGUI::on_rfBW_valueChanged(int value) @@ -532,7 +541,7 @@ void ATVDemodGUI::on_rfBW_valueChanged(int value) m_settings.m_fftBandwidth = value * m_rfSliderDivisor; ui->rfBWText->setText(QString("%1k").arg((value * m_rfSliderDivisor) / 1000.0, 0, 'f', 0)); setChannelMarkerBandwidth(); - applySettings(); + applySettings(QStringList("fftBandwidth"), false); } void ATVDemodGUI::on_rfOppBW_valueChanged(int value) @@ -540,7 +549,7 @@ void ATVDemodGUI::on_rfOppBW_valueChanged(int value) m_settings.m_fftOppBandwidth = value * m_rfSliderDivisor; ui->rfOppBWText->setText(QString("%1k").arg((value * m_rfSliderDivisor) / 1000.0, 0, 'f', 0)); setChannelMarkerBandwidth(); - applySettings(); + applySettings(QStringList("fftOppBandwidth"), false); } void ATVDemodGUI::on_rfFiltering_toggled(bool checked) @@ -548,7 +557,7 @@ void ATVDemodGUI::on_rfFiltering_toggled(bool checked) m_settings.m_fftFiltering = checked; setRFFiltersSlidersRange(m_basebandSampleRate); setChannelMarkerBandwidth(); - applySettings(); + applySettings(QStringList("fftFiltering"), false); } void ATVDemodGUI::on_deltaFrequency_changed(qint64 value) @@ -556,21 +565,21 @@ void ATVDemodGUI::on_deltaFrequency_changed(qint64 value) m_settings.m_inputFrequencyOffset = value; m_channelMarker.setCenterFrequency(value); updateAbsoluteCenterFrequency(); - applySettings(); + applySettings(QStringList("inputFrequencyOffset"), false); } void ATVDemodGUI::on_bfo_valueChanged(int value) { m_settings.m_bfoFrequency = value; ui->bfoText->setText(QString("%1").arg(value * 1.0, 0, 'f', 0)); - applySettings(); + applySettings(QStringList("bfoFrequency"), false); } void ATVDemodGUI::on_fmDeviation_valueChanged(int value) { m_settings.m_fmDeviation = value / 1000.0f; ui->fmDeviationText->setText(QString("%1").arg(value / 10.0, 0, 'f', 1)); - applySettings(); + applySettings(QStringList("fmDeviation"), false); } void ATVDemodGUI::on_amScaleFactor_valueChanged(int value) @@ -578,7 +587,7 @@ void ATVDemodGUI::on_amScaleFactor_valueChanged(int value) m_settings.m_amScalingFactor = value; ui->amScaleFactor->setValue(m_settings.m_amScalingFactor); ui->amScaleFactorText->setText(QString("%1").arg(m_settings.m_amScalingFactor)); - applySettings(); + applySettings(QStringList("amScalingFactor"), false); } void ATVDemodGUI::on_amScaleOffset_valueChanged(int value) @@ -586,7 +595,7 @@ void ATVDemodGUI::on_amScaleOffset_valueChanged(int value) m_settings.m_amOffsetFactor = value; ui->amScaleOffset->setValue(m_settings.m_amOffsetFactor); ui->amScaleOffsetText->setText(QString("%1").arg(m_settings.m_amOffsetFactor)); - applySettings(); + applySettings(QStringList("amOffsetFactor"), false); } void ATVDemodGUI::on_screenTabWidget_currentChanged(int index) diff --git a/plugins/channelrx/demodatv/atvdemodgui.h b/plugins/channelrx/demodatv/atvdemodgui.h index 4a84ec3e6..8695800ac 100644 --- a/plugins/channelrx/demodatv/atvdemodgui.h +++ b/plugins/channelrx/demodatv/atvdemodgui.h @@ -91,7 +91,7 @@ private: explicit ATVDemodGUI(PluginAPI* objPluginAPI, DeviceUISet *deviceUISet, BasebandSampleSink *rxChannel, QWidget* objParent = 0); virtual ~ATVDemodGUI(); - void applySettings(bool force = false); + void applySettings(const QStringList& settingsKeys, bool force = false); void displaySettings(); void displayRFBandwidths(); void applySampleRate(); diff --git a/plugins/channelrx/demodatv/atvdemodsettings.cpp b/plugins/channelrx/demodatv/atvdemodsettings.cpp index 6ab06474f..07cfd550c 100644 --- a/plugins/channelrx/demodatv/atvdemodsettings.cpp +++ b/plugins/channelrx/demodatv/atvdemodsettings.cpp @@ -343,6 +343,198 @@ int ATVDemodSettings::getNumberOfLinesIndex(int nbLines) } } +void ATVDemodSettings::applySettings(const QStringList& settingsKeys, const ATVDemodSettings& settings) +{ + if (settingsKeys.contains("inputFrequencyOffset")) { + m_inputFrequencyOffset = settings.m_inputFrequencyOffset; + } + if (settingsKeys.contains("bfoFrequency")) { + m_bfoFrequency = settings.m_bfoFrequency; + } + if (settingsKeys.contains("atvModulation")) { + m_atvModulation = settings.m_atvModulation; + } + if (settingsKeys.contains("fmDeviation")) { + m_fmDeviation = settings.m_fmDeviation; + } + if (settingsKeys.contains("amScalingFactor")) { + m_amScalingFactor = settings.m_amScalingFactor; + } + if (settingsKeys.contains("amOffsetFactor")) { + m_amOffsetFactor = settings.m_amOffsetFactor; + } + if (settingsKeys.contains("fftFiltering")) { + m_fftFiltering = settings.m_fftFiltering; + } + if (settingsKeys.contains("fftOppBandwidth")) { + m_fftOppBandwidth = settings.m_fftOppBandwidth; + } + if (settingsKeys.contains("fftBandwidth")) { + m_fftBandwidth = settings.m_fftBandwidth; + } + if (settingsKeys.contains("nbLines")) { + m_nbLines = settings.m_nbLines; + } + if (settingsKeys.contains("fps")) { + m_fps = settings.m_fps; + } + if (settingsKeys.contains("atvStd")) { + m_atvStd = settings.m_atvStd; + } + if (settingsKeys.contains("hSync")) { + m_hSync = settings.m_hSync; + } + if (settingsKeys.contains("vSync")) { + m_vSync = settings.m_vSync; + } + if (settingsKeys.contains("invertVideo")) { + m_invertVideo = settings.m_invertVideo; + } + if (settingsKeys.contains("halfFrames")) { + m_halfFrames = settings.m_halfFrames; + } + if (settingsKeys.contains("levelSynchroTop")) { + m_levelSynchroTop = settings.m_levelSynchroTop; + } + if (settingsKeys.contains("levelBlack")) { + m_levelBlack = settings.m_levelBlack; + } + if (settingsKeys.contains("rgbColor")) { + m_rgbColor = settings.m_rgbColor; + } + if (settingsKeys.contains("title")) { + m_title = settings.m_title; + } + if (settingsKeys.contains("udpAddress")) { + m_udpAddress = settings.m_udpAddress; + } + if (settingsKeys.contains("udpPort")) { + m_udpPort = settings.m_udpPort; + } + if (settingsKeys.contains("streamIndex")) { + m_streamIndex = settings.m_streamIndex; + } + if (settingsKeys.contains("useReverseAPI")) { + m_useReverseAPI = settings.m_useReverseAPI; + } + if (settingsKeys.contains("reverseAPIAddress")) { + m_reverseAPIAddress = settings.m_reverseAPIAddress; + } + if (settingsKeys.contains("reverseAPIPort")) { + m_reverseAPIPort = settings.m_reverseAPIPort; + } + if (settingsKeys.contains("reverseAPIDeviceIndex")) { + m_reverseAPIDeviceIndex = settings.m_reverseAPIDeviceIndex; + } + if (settingsKeys.contains("reverseAPIChannelIndex")) { + m_reverseAPIChannelIndex = settings.m_reverseAPIChannelIndex; + } + if (settingsKeys.contains("workspaceIndex")) { + m_workspaceIndex = settings.m_workspaceIndex; + } + if (settingsKeys.contains("hidden")) { + m_hidden = settings.m_hidden; + } +} + +QString ATVDemodSettings::getDebugString(const QStringList& settingsKeys, bool force) const +{ + std::ostringstream ostr; + + if (settingsKeys.contains("inputFrequencyOffset") || force) { + ostr << " m_inputFrequencyOffset: " << m_inputFrequencyOffset; + } + if (settingsKeys.contains("bfoFrequency") || force) { + ostr << " m_bfoFrequency: " << m_bfoFrequency; + } + if (settingsKeys.contains("atvModulation") || force) { + ostr << " m_atvModulation: " << m_atvModulation; + } + if (settingsKeys.contains("fmDeviation") || force) { + ostr << " m_fmDeviation: " << m_fmDeviation; + } + if (settingsKeys.contains("amScalingFactor") || force) { + ostr << " m_amScalingFactor: " << m_amScalingFactor; + } + if (settingsKeys.contains("amOffsetFactor") || force) { + ostr << " m_amOffsetFactor: " << m_amOffsetFactor; + } + if (settingsKeys.contains("fftFiltering") || force) { + ostr << " m_fftFiltering: " << m_fftFiltering; + } + if (settingsKeys.contains("fftOppBandwidth") || force) { + ostr << " m_fftOppBandwidth: " << m_fftOppBandwidth; + } + if (settingsKeys.contains("fftBandwidth") || force) { + ostr << " m_fftBandwidth: " << m_fftBandwidth; + } + if (settingsKeys.contains("nbLines") || force) { + ostr << " m_nbLines: " << m_nbLines; + } + if (settingsKeys.contains("fps") || force) { + ostr << " m_fps: " << m_fps; + } + if (settingsKeys.contains("atvStd") || force) { + ostr << " m_atvStd: " << m_atvStd; + } + if (settingsKeys.contains("hSync") || force) { + ostr << " m_hSync: " << m_hSync; + } + if (settingsKeys.contains("vSync") || force) { + ostr << " m_vSync: " << m_vSync; + } + if (settingsKeys.contains("invertVideo") || force) { + ostr << " m_invertVideo: " << m_invertVideo; + } + if (settingsKeys.contains("halfFrames") || force) { + ostr << " m_halfFrames: " << m_halfFrames; + } + if (settingsKeys.contains("levelSynchroTop") || force) { + ostr << " m_levelSynchroTop: " << m_levelSynchroTop; + } + if (settingsKeys.contains("levelBlack") || force) { + ostr << " m_levelBlack: " << m_levelBlack; + } + if (settingsKeys.contains("rgbColor") || force) { + ostr << " m_rgbColor: " << m_rgbColor; + } + if (settingsKeys.contains("title") || force) { + ostr << " m_title: " << m_title.toStdString(); + } + if (settingsKeys.contains("udpAddress") || force) { + ostr << " m_udpAddress: " << m_udpAddress.toStdString(); + } + if (settingsKeys.contains("udpPort") || force) { + ostr << " m_udpPort: " << m_udpPort; + } + if (settingsKeys.contains("streamIndex") || force) { + ostr << " m_streamIndex: " << m_streamIndex; + } + if (settingsKeys.contains("useReverseAPI") || force) { + ostr << " m_useReverseAPI: " << m_useReverseAPI; + } + if (settingsKeys.contains("reverseAPIAddress") || force) { + ostr << " m_reverseAPIAddress: " << m_reverseAPIAddress.toStdString(); + } + if (settingsKeys.contains("reverseAPIPort") || force) { + ostr << " m_reverseAPIPort: " << m_reverseAPIPort; + } + if (settingsKeys.contains("reverseAPIDeviceIndex") || force) { + ostr << " m_reverseAPIDeviceIndex: " << m_reverseAPIDeviceIndex; + } + if (settingsKeys.contains("reverseAPIChannelIndex") || force) { + ostr << " m_reverseAPIChannelIndex: " << m_reverseAPIChannelIndex; + } + if (settingsKeys.contains("workspaceIndex") || force) { + ostr << " m_workspaceIndex: " << m_workspaceIndex; + } + if (settingsKeys.contains("hidden") || force) { + ostr << " m_hidden: " << m_hidden; + } + + return QString(ostr.str().c_str()); +} + float ATVDemodSettings::getNominalLineTime(int nbLines, int fps) { return 1.0f / ((float) nbLines * (float) fps); diff --git a/plugins/channelrx/demodatv/atvdemodsettings.h b/plugins/channelrx/demodatv/atvdemodsettings.h index db428fddb..969075663 100644 --- a/plugins/channelrx/demodatv/atvdemodsettings.h +++ b/plugins/channelrx/demodatv/atvdemodsettings.h @@ -91,6 +91,8 @@ struct ATVDemodSettings void setRollupState(Serializable *rollupState) { m_rollupState = rollupState; } QByteArray serialize() const; bool deserialize(const QByteArray& data); + void applySettings(const QStringList& settingsKeys, const ATVDemodSettings& settings); + QString getDebugString(const QStringList& settingsKeys, bool force=false) const; int getRFSliderDivisor(unsigned int sampleRate); diff --git a/plugins/channelrx/demodatv/atvdemodsink.cpp b/plugins/channelrx/demodatv/atvdemodsink.cpp index faf36930f..8c8b85ba7 100644 --- a/plugins/channelrx/demodatv/atvdemodsink.cpp +++ b/plugins/channelrx/demodatv/atvdemodsink.cpp @@ -70,7 +70,7 @@ ATVDemodSink::ATVDemodSink() : m_objPhaseDiscri.setFMScaling(1.0f); - applySettings(m_settings, true); + applySettings(QStringList(), m_settings, true); applyChannelSettings(m_channelSampleRate, m_channelFrequencyOffset, true); } @@ -465,33 +465,11 @@ void ATVDemodSink::applyChannelSettings(int channelSampleRate, int channelFreque m_channelFrequencyOffset = channelFrequencyOffset; } -void ATVDemodSink::applySettings(const ATVDemodSettings& settings, bool force) +void ATVDemodSink::applySettings(const QStringList& settingsKeys, const ATVDemodSettings& settings, bool force) { - qDebug() << "ATVDemodSink::applySettings:" - << "m_inputFrequencyOffset:" << settings.m_inputFrequencyOffset - << "m_bfoFrequency:" << settings.m_bfoFrequency - << "m_atvModulation:" << settings.m_atvModulation - << "m_fmDeviation:" << settings.m_fmDeviation - << "m_fftFiltering:" << settings.m_fftFiltering - << "m_fftOppBandwidth:" << settings.m_fftOppBandwidth - << "m_fftBandwidth:" << settings.m_fftBandwidth - << "m_nbLines:" << settings.m_nbLines - << "m_fps:" << settings.m_fps - << "m_atvStd:" << settings.m_atvStd - << "m_hSync:" << settings.m_hSync - << "m_vSync:" << settings.m_vSync - << "m_invertVideo:" << settings.m_invertVideo - << "m_halfFrames:" << settings.m_halfFrames - << "m_levelSynchroTop:" << settings.m_levelSynchroTop - << "m_levelBlack:" << settings.m_levelBlack - << "m_rgbColor:" << settings.m_rgbColor - << "m_title:" << settings.m_title - << "m_udpAddress:" << settings.m_udpAddress - << "m_udpPort:" << settings.m_udpPort - << "force:" << force; + qDebug() << "ATVDemodSink::applySettings:" << settings.getDebugString(settingsKeys, force); - if ((settings.m_fftBandwidth != m_settings.m_fftBandwidth) - || (settings.m_fftOppBandwidth != m_settings.m_fftOppBandwidth) || force) + if (settingsKeys.contains("fftBandwidth") || settingsKeys.contains("fftOppBandwidth") || force) { m_DSBFilter->create_asym_filter( settings.m_fftOppBandwidth / (float) m_channelSampleRate, @@ -501,7 +479,7 @@ void ATVDemodSink::applySettings(const ATVDemodSettings& settings, bool force) m_DSBFilterBufferIndex = 0; } - if ((settings.m_bfoFrequency != m_settings.m_bfoFrequency) || force) + if (settingsKeys.contains("bfoFrequency") || force) { m_bfoPLL.configure((float) settings.m_bfoFrequency / (float) m_channelSampleRate, 100.0 / m_channelSampleRate, @@ -509,9 +487,7 @@ void ATVDemodSink::applySettings(const ATVDemodSettings& settings, bool force) m_bfoFilter.setFrequencies(m_channelSampleRate, settings.m_bfoFrequency); } - if ((settings.m_nbLines != m_settings.m_nbLines) - || (settings.m_fps != m_settings.m_fps) - || (settings.m_atvStd != m_settings.m_atvStd) || force) + if (settingsKeys.contains("nbLines") || settingsKeys.contains("fps") || settingsKeys.contains("atvStd") || force) { unsigned int samplesPerLineNom; ATVDemodSettings::getBaseValues(m_channelSampleRate, settings.m_nbLines * settings.m_fps, samplesPerLineNom); @@ -539,13 +515,17 @@ void ATVDemodSink::applySettings(const ATVDemodSettings& settings, bool force) m_fieldIndex = 0; } - if ((settings.m_fmDeviation != m_settings.m_fmDeviation) || force) { + if (settingsKeys.contains("fmDeviation") || force) { m_objPhaseDiscri.setFMScaling(1.0f / settings.m_fmDeviation); } - if ((settings.m_levelBlack != m_settings.m_levelBlack) || force) { + if (settingsKeys.contains("levelBlack") || force) { m_sampleRangeCorrection = 255.0f / (1.0f - m_settings.m_levelBlack); } - m_settings = settings; + if (force) { + m_settings = settings; + } else { + m_settings.applySettings(settingsKeys, settings); + } } diff --git a/plugins/channelrx/demodatv/atvdemodsink.h b/plugins/channelrx/demodatv/atvdemodsink.h index 6af9b58df..b8bb4770e 100644 --- a/plugins/channelrx/demodatv/atvdemodsink.h +++ b/plugins/channelrx/demodatv/atvdemodsink.h @@ -54,7 +54,7 @@ public: void setVideoTabIndex(int videoTabIndex) { m_videoTabIndex = videoTabIndex; } void applyChannelSettings(int channelSampleRate, int channelFrequencyOffset, bool force = false); - void applySettings(const ATVDemodSettings& settings, bool force = false); + void applySettings(const QStringList& settingsKeys, const ATVDemodSettings& settings, bool force = false); private: struct ATVConfigPrivate diff --git a/plugins/channelrx/demodbfm/bfmdemod.cpp b/plugins/channelrx/demodbfm/bfmdemod.cpp index e4919239e..f4d2c16f3 100644 --- a/plugins/channelrx/demodbfm/bfmdemod.cpp +++ b/plugins/channelrx/demodbfm/bfmdemod.cpp @@ -58,7 +58,7 @@ BFMDemod::BFMDemod(DeviceAPI *deviceAPI) : m_basebandSampleRate(0) { setObjectName(m_channelId); - applySettings(m_settings, true); + applySettings(QStringList(), m_settings, true); m_deviceAPI->addChannelSink(this); m_deviceAPI->addChannelSinkAPI(this); @@ -140,7 +140,7 @@ void BFMDemod::start() DSPSignalNotification *dspMsg = new DSPSignalNotification(m_basebandSampleRate, 0); m_basebandSink->getInputMessageQueue()->push(dspMsg); - BFMDemodBaseband::MsgConfigureBFMDemodBaseband *msg = BFMDemodBaseband::MsgConfigureBFMDemodBaseband::create(m_settings, true); + BFMDemodBaseband::MsgConfigureBFMDemodBaseband *msg = BFMDemodBaseband::MsgConfigureBFMDemodBaseband::create(QStringList(), m_settings, true); m_basebandSink->getInputMessageQueue()->push(msg); SpectrumSettings spectrumSettings = m_spectrumVis.getSettings(); @@ -170,7 +170,7 @@ bool BFMDemod::handleMessage(const Message& cmd) MsgConfigureBFMDemod& cfg = (MsgConfigureBFMDemod&) cmd; qDebug() << "BFMDemod::handleMessage: MsgConfigureBFMDemod"; - applySettings(cfg.getSettings(), cfg.getForce()); + applySettings(cfg.getSettingsKeys(), cfg.getSettings(), cfg.getForce()); return true; } @@ -202,73 +202,20 @@ void BFMDemod::setCenterFrequency(qint64 frequency) { BFMDemodSettings settings = m_settings; settings.m_inputFrequencyOffset = frequency; - applySettings(settings, false); + applySettings(QStringList({"inputFrequencyOffset"}), settings, false); if (m_guiMessageQueue) // forward to GUI if any { - MsgConfigureBFMDemod *msgToGUI = MsgConfigureBFMDemod::create(settings, false); + MsgConfigureBFMDemod *msgToGUI = MsgConfigureBFMDemod::create(QStringList({"inputFrequencyOffset"}), settings, false); m_guiMessageQueue->push(msgToGUI); } } -void BFMDemod::applySettings(const BFMDemodSettings& settings, bool force) +void BFMDemod::applySettings(const QStringList& settingsKeys, const BFMDemodSettings& settings, bool force) { - qDebug() << "BFMDemod::applySettings: MsgConfigureBFMDemod:" - << " m_inputFrequencyOffset: " << settings.m_inputFrequencyOffset - << " m_rfBandwidth: " << settings.m_rfBandwidth - << " m_afBandwidth: " << settings.m_afBandwidth - << " m_deEmphasis: " << settings.getDeEmphasisTimeConstant() - << " m_volume: " << settings.m_volume - << " m_squelch: " << settings.m_squelch - << " m_audioStereo: " << settings.m_audioStereo - << " m_lsbStereo: " << settings.m_lsbStereo - << " m_showPilot: " << settings.m_showPilot - << " m_rdsActive: " << settings.m_rdsActive - << " m_audioDeviceName: " << settings.m_audioDeviceName - << " m_streamIndex: " << settings.m_streamIndex - << " m_useReverseAPI: " << settings.m_useReverseAPI - << " force: " << force; + qDebug() << "BFMDemod::applySettings: MsgConfigureBFMDemod:" << settings.getDebugString(settingsKeys, force); - QList reverseAPIKeys; - - if ((settings.m_inputFrequencyOffset != m_settings.m_inputFrequencyOffset) || force) { - reverseAPIKeys.append("inputFrequencyOffset"); - } - if ((settings.m_volume != m_settings.m_volume) || force) { - reverseAPIKeys.append("volume"); - } - if ((settings.m_audioMute != m_settings.m_audioMute) || force) { - reverseAPIKeys.append("audioMute"); - } - if ((settings.m_audioStereo != m_settings.m_audioStereo) || force) { - reverseAPIKeys.append("audioStereo"); - } - if ((settings.m_lsbStereo != m_settings.m_lsbStereo) || force) { - reverseAPIKeys.append("lsbStereo"); - } - if ((settings.m_showPilot != m_settings.m_showPilot) || force) { - reverseAPIKeys.append("showPilot"); - } - if ((settings.m_rdsActive != m_settings.m_rdsActive) || force) { - reverseAPIKeys.append("rdsActive"); - } - if ((settings.m_afBandwidth != m_settings.m_afBandwidth) || force) { - reverseAPIKeys.append("afBandwidth"); - } - if ((settings.m_rfBandwidth != m_settings.m_rfBandwidth) || force) { - reverseAPIKeys.append("rfBandwidth"); - } - if ((settings.m_deEmphasis != m_settings.m_deEmphasis) || force) { - reverseAPIKeys.append("deEmphasis"); - } - if ((settings.m_squelch != m_settings.m_squelch) || force) { - reverseAPIKeys.append("squelch"); - } - if ((settings.m_audioDeviceName != m_settings.m_audioDeviceName) || force) { - reverseAPIKeys.append("audioDeviceName"); - } - - if (m_settings.m_streamIndex != settings.m_streamIndex) + if (settingsKeys.contains("streamIndex") && (settings.m_streamIndex != m_settings.m_streamIndex)) { if (m_deviceAPI->getSampleMIMO()) // change of stream is possible for MIMO devices only { @@ -279,34 +226,36 @@ void BFMDemod::applySettings(const BFMDemodSettings& settings, bool force) m_settings.m_streamIndex = settings.m_streamIndex; // make sure ChannelAPI::getStreamIndex() is consistent emit streamIndexChanged(settings.m_streamIndex); } - - reverseAPIKeys.append("streamIndex"); } if (m_running) { - BFMDemodBaseband::MsgConfigureBFMDemodBaseband *msg = BFMDemodBaseband::MsgConfigureBFMDemodBaseband::create(settings, force); + BFMDemodBaseband::MsgConfigureBFMDemodBaseband *msg = BFMDemodBaseband::MsgConfigureBFMDemodBaseband::create(settingsKeys, settings, force); m_basebandSink->getInputMessageQueue()->push(msg); } if (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; + if (force) { + m_settings = settings; + } else { + m_settings.applySettings(settingsKeys, settings); + } } QByteArray BFMDemod::serialize() const @@ -318,14 +267,14 @@ bool BFMDemod::deserialize(const QByteArray& data) { if (m_settings.deserialize(data)) { - MsgConfigureBFMDemod *msg = MsgConfigureBFMDemod::create(m_settings, true); + MsgConfigureBFMDemod *msg = MsgConfigureBFMDemod::create(QStringList(), m_settings, true); m_inputMessageQueue.push(msg); return true; } else { m_settings.resetToDefaults(); - MsgConfigureBFMDemod *msg = MsgConfigureBFMDemod::create(m_settings, true); + MsgConfigureBFMDemod *msg = MsgConfigureBFMDemod::create(QStringList(), m_settings, true); m_inputMessageQueue.push(msg); return false; } @@ -361,13 +310,13 @@ int BFMDemod::webapiSettingsPutPatch( BFMDemodSettings settings = m_settings; webapiUpdateChannelSettings(settings, channelSettingsKeys, response); - MsgConfigureBFMDemod *msg = MsgConfigureBFMDemod::create(settings, force); + MsgConfigureBFMDemod *msg = MsgConfigureBFMDemod::create(channelSettingsKeys, settings, force); m_inputMessageQueue.push(msg); qDebug("BFMDemod::webapiSettingsPutPatch: forward to GUI: %p", m_guiMessageQueue); if (m_guiMessageQueue) // forward to GUI if any { - MsgConfigureBFMDemod *msgToGUI = MsgConfigureBFMDemod::create(settings, force); + MsgConfigureBFMDemod *msgToGUI = MsgConfigureBFMDemod::create(channelSettingsKeys, settings, force); m_guiMessageQueue->push(msgToGUI); } @@ -609,7 +558,7 @@ void BFMDemod::webapiFormatRDSReport(SWGSDRangel::SWGRDSReport *report) } } -void BFMDemod::webapiReverseSendSettings(QList& channelSettingsKeys, const BFMDemodSettings& settings, bool force) +void BFMDemod::webapiReverseSendSettings(const QStringList& channelSettingsKeys, const BFMDemodSettings& settings, bool force) { SWGSDRangel::SWGChannelSettings *swgChannelSettings = new SWGSDRangel::SWGChannelSettings(); webapiFormatChannelSettings(channelSettingsKeys, swgChannelSettings, settings, force); @@ -636,7 +585,7 @@ void BFMDemod::webapiReverseSendSettings(QList& channelSettingsKeys, co void BFMDemod::sendChannelSettings( const QList& pipes, - QList& channelSettingsKeys, + const QStringList& channelSettingsKeys, const BFMDemodSettings& settings, bool force) { @@ -660,7 +609,7 @@ void BFMDemod::sendChannelSettings( } void BFMDemod::webapiFormatChannelSettings( - QList& channelSettingsKeys, + const QStringList& channelSettingsKeys, SWGSDRangel::SWGChannelSettings *swgChannelSettings, const BFMDemodSettings& settings, bool force diff --git a/plugins/channelrx/demodbfm/bfmdemod.h b/plugins/channelrx/demodbfm/bfmdemod.h index 6580e6ed3..c4e705ebb 100644 --- a/plugins/channelrx/demodbfm/bfmdemod.h +++ b/plugins/channelrx/demodbfm/bfmdemod.h @@ -52,20 +52,23 @@ public: public: const BFMDemodSettings& getSettings() const { return m_settings; } + const QStringList& getSettingsKeys() const { return m_settingsKeys; } bool getForce() const { return m_force; } - static MsgConfigureBFMDemod* create(const BFMDemodSettings& settings, bool force) + static MsgConfigureBFMDemod* create(const QStringList& settingsKeys, const BFMDemodSettings& settings, bool force) { - return new MsgConfigureBFMDemod(settings, force); + return new MsgConfigureBFMDemod(settingsKeys, settings, force); } private: BFMDemodSettings m_settings; + QStringList m_settingsKeys; bool m_force; - MsgConfigureBFMDemod(const BFMDemodSettings& settings, bool force) : + MsgConfigureBFMDemod(const QStringList& settingsKeys, const BFMDemodSettings& settings, bool force) : Message(), m_settings(settings), + m_settingsKeys(settingsKeys), m_force(force) { } }; @@ -173,19 +176,19 @@ private: QNetworkRequest m_networkRequest; virtual bool handleMessage(const Message& cmd); - void applySettings(const BFMDemodSettings& settings, bool force = false); + void applySettings(const QStringList& settingsKeys, const BFMDemodSettings& settings, bool force = false); void webapiFormatChannelReport(SWGSDRangel::SWGChannelReport& response); void webapiFormatRDSReport(SWGSDRangel::SWGRDSReport *report); - void webapiReverseSendSettings(QList& channelSettingsKeys, const BFMDemodSettings& settings, bool force); + void webapiReverseSendSettings(const QStringList& channelSettingsKeys, const BFMDemodSettings& settings, bool force); void sendChannelSettings( const QList& pipes, - QList& channelSettingsKeys, + const QStringList& channelSettingsKeys, const BFMDemodSettings& settings, bool force ); void webapiFormatChannelSettings( - QList& channelSettingsKeys, + const QStringList& channelSettingsKeys, SWGSDRangel::SWGChannelSettings *swgChannelSettings, const BFMDemodSettings& settings, bool force diff --git a/plugins/channelrx/demodbfm/bfmdemodbaseband.cpp b/plugins/channelrx/demodbfm/bfmdemodbaseband.cpp index f0f6d5466..d7340cef0 100644 --- a/plugins/channelrx/demodbfm/bfmdemodbaseband.cpp +++ b/plugins/channelrx/demodbfm/bfmdemodbaseband.cpp @@ -143,7 +143,7 @@ bool BFMDemodBaseband::handleMessage(const Message& cmd) MsgConfigureBFMDemodBaseband& cfg = (MsgConfigureBFMDemodBaseband&) cmd; qDebug() << "BFMDemodBaseband::handleMessage: MsgConfigureBFMDemodBaseband"; - applySettings(cfg.getSettings(), cfg.getForce()); + applySettings(cfg.getSettingsKeys(), cfg.getSettings(), cfg.getForce()); return true; } @@ -182,10 +182,10 @@ bool BFMDemodBaseband::handleMessage(const Message& cmd) } } -void BFMDemodBaseband::applySettings(const BFMDemodSettings& settings, bool force) +void BFMDemodBaseband::applySettings(const QStringList& settingsKeys, const BFMDemodSettings& settings, bool force) { - if ((settings.m_rfBandwidth != m_settings.m_rfBandwidth) - || (settings.m_inputFrequencyOffset != m_settings.m_inputFrequencyOffset) || force) + if ((settingsKeys.contains("rfBandwidth") && (settings.m_rfBandwidth != m_settings.m_rfBandwidth)) + || (settingsKeys.contains("inputFrequencyOffset") && (settings.m_inputFrequencyOffset != m_settings.m_inputFrequencyOffset)) || force) { m_channelizer->setChannelization(BFMDemodSettings::requiredBW(settings.m_rfBandwidth), settings.m_inputFrequencyOffset); m_sink.applyChannelSettings(m_channelizer->getChannelSampleRate(), m_channelizer->getChannelFrequencyOffset()); @@ -209,7 +209,7 @@ void BFMDemodBaseband::applySettings(const BFMDemodSettings& settings, bool forc } } - 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); @@ -223,9 +223,13 @@ void BFMDemodBaseband::applySettings(const BFMDemodSettings& settings, bool forc } } - 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 BFMDemodBaseband::getChannelSampleRate() const diff --git a/plugins/channelrx/demodbfm/bfmdemodbaseband.h b/plugins/channelrx/demodbfm/bfmdemodbaseband.h index 92fd900cd..e0cf9849a 100644 --- a/plugins/channelrx/demodbfm/bfmdemodbaseband.h +++ b/plugins/channelrx/demodbfm/bfmdemodbaseband.h @@ -41,20 +41,23 @@ public: public: const BFMDemodSettings& getSettings() const { return m_settings; } + const QStringList& getSettingsKeys() const { return m_settingsKeys; } bool getForce() const { return m_force; } - static MsgConfigureBFMDemodBaseband* create(const BFMDemodSettings& settings, bool force) + static MsgConfigureBFMDemodBaseband* create(const QStringList& settingsKeys, const BFMDemodSettings& settings, bool force) { - return new MsgConfigureBFMDemodBaseband(settings, force); + return new MsgConfigureBFMDemodBaseband(settingsKeys, settings, force); } private: BFMDemodSettings m_settings; + QStringList m_settingsKeys; bool m_force; - MsgConfigureBFMDemodBaseband(const BFMDemodSettings& settings, bool force) : + MsgConfigureBFMDemodBaseband(const QStringList& settingsKeys, const BFMDemodSettings& settings, bool force) : Message(), m_settings(settings), + m_settingsKeys(settingsKeys), m_force(force) { } }; @@ -103,7 +106,7 @@ private: MessageQueue *getMessageQueueToGUI() { return m_messageQueueToGUI; } bool handleMessage(const Message& cmd); - void applySettings(const BFMDemodSettings& settings, bool force = false); + void applySettings(const QStringList& settingsKeys, const BFMDemodSettings& settings, bool force = false); private slots: void handleInputMessages(); diff --git a/plugins/channelrx/demodbfm/bfmdemodgui.cpp b/plugins/channelrx/demodbfm/bfmdemodgui.cpp index 7546fd160..21d2a8804 100644 --- a/plugins/channelrx/demodbfm/bfmdemodgui.cpp +++ b/plugins/channelrx/demodbfm/bfmdemodgui.cpp @@ -72,7 +72,7 @@ void BFMDemodGUI::resetToDefaults() ui->g14AltFrequencies->setEnabled(false); blockApplySettings(false); - applySettings(); + applySettings(QStringList(), true); } QByteArray BFMDemodGUI::serialize() const @@ -84,7 +84,7 @@ bool BFMDemodGUI::deserialize(const QByteArray& data) { if(m_settings.deserialize(data)) { displaySettings(); - applySettings(true); + applySettings(QStringList(), true); return true; } else { resetToDefaults(); @@ -148,7 +148,7 @@ void BFMDemodGUI::channelMarkerChangedByCursor() { ui->deltaFrequency->setValue(m_channelMarker.getCenterFrequency()); m_settings.m_inputFrequencyOffset = m_channelMarker.getCenterFrequency(); - applySettings(); + applySettings(QStringList({"inputFrequencyOffset"})); } void BFMDemodGUI::channelMarkerHighlightedByCursor() @@ -161,7 +161,7 @@ void BFMDemodGUI::on_deltaFrequency_changed(qint64 value) m_channelMarker.setCenterFrequency(value); m_settings.m_inputFrequencyOffset = m_channelMarker.getCenterFrequency(); updateAbsoluteCenterFrequency(); - applySettings(); + applySettings(QStringList({"inputFrequencyOffset"})); } void BFMDemodGUI::on_rfBW_valueChanged(int value) @@ -169,40 +169,40 @@ void BFMDemodGUI::on_rfBW_valueChanged(int value) ui->rfBWText->setText(QString("%1 kHz").arg(BFMDemodSettings::getRFBW(value) / 1000.0)); m_channelMarker.setBandwidth(BFMDemodSettings::getRFBW(value)); m_settings.m_rfBandwidth = BFMDemodSettings::getRFBW(value); - applySettings(); + applySettings(QStringList({"rfBandwidth"})); } void BFMDemodGUI::on_afBW_valueChanged(int value) { ui->afBWText->setText(QString("%1 kHz").arg(value)); m_settings.m_afBandwidth = value * 1000.0; - applySettings(); + applySettings(QStringList({"afBandwidth"})); } void BFMDemodGUI::on_deEmphasis_currentIndexChanged(int index) { m_settings.m_deEmphasis = static_cast(index); - applySettings(); + applySettings(QStringList({"deEmphasis"})); } void BFMDemodGUI::on_volume_valueChanged(int value) { ui->volumeText->setText(QString("%1").arg(value / 10.0, 0, 'f', 1)); m_settings.m_volume = value / 10.0; - applySettings(); + applySettings(QStringList({"volume"})); } void BFMDemodGUI::on_squelch_valueChanged(int value) { ui->squelchText->setText(QString("%1 dB").arg(value)); m_settings.m_squelch = value; - applySettings(); + applySettings(QStringList({"squelch"})); } void BFMDemodGUI::on_audioMute_toggled(bool mute) { m_settings.m_audioMute = mute; - applySettings(); + applySettings(QStringList({"audioMute"})); } void BFMDemodGUI::on_audioStereo_toggled(bool stereo) @@ -213,25 +213,25 @@ void BFMDemodGUI::on_audioStereo_toggled(bool stereo) } m_settings.m_audioStereo = stereo; - applySettings(); + applySettings(QStringList({"audioStereo"})); } void BFMDemodGUI::on_lsbStereo_toggled(bool lsb) { m_settings.m_lsbStereo = lsb; - applySettings(); + applySettings(QStringList({"lsbStereo"})); } void BFMDemodGUI::on_showPilot_clicked() { m_settings.m_showPilot = ui->showPilot->isChecked(); - applySettings(); + applySettings(QStringList({"showPilot"})); } void BFMDemodGUI::on_rds_clicked() { m_settings.m_rdsActive = ui->rds->isChecked(); - applySettings(); + applySettings(QStringList({"rdsActive"})); } void BFMDemodGUI::on_clearData_clicked(bool checked) @@ -339,7 +339,7 @@ void BFMDemodGUI::onWidgetRolled(QWidget* widget, bool rollDown) (void) rollDown; getRollupContents()->saveState(m_rollupState); - applySettings(); + applySettings(QStringList()); } void BFMDemodGUI::onMenuDialogCalled(const QPoint &p) @@ -384,7 +384,9 @@ void BFMDemodGUI::onMenuDialogCalled(const QPoint &p) updateIndexLabel(); } - applySettings(); + applySettings(QStringList({"title", "rgbColor", "useReverseAPI", + "reverseAPIAddress", "reverseAPIPort", "reverseAPIDeviceIndex", + "reverseAPIChannelIndex", "streamIndex"})); } resetContextMenuType(); @@ -472,7 +474,7 @@ BFMDemodGUI::BFMDemodGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Baseban rdsUpdate(true); displaySettings(); makeUIConnections(); - applySettings(true); + applySettings(QStringList(), true); m_resizer.enableChildMouseTracking(); } @@ -486,11 +488,11 @@ void BFMDemodGUI::blockApplySettings(bool block) m_doApplySettings = !block; } -void BFMDemodGUI::applySettings(bool force) +void BFMDemodGUI::applySettings(const QStringList& channelSettingsKeys, bool force) { if (m_doApplySettings) { - BFMDemod::MsgConfigureBFMDemod* msgConfig = BFMDemod::MsgConfigureBFMDemod::create( m_settings, force); + BFMDemod::MsgConfigureBFMDemod* msgConfig = BFMDemod::MsgConfigureBFMDemod::create(channelSettingsKeys, m_settings, force); m_bfmDemod->getInputMessageQueue()->push(msgConfig); } } @@ -562,7 +564,7 @@ void BFMDemodGUI::audioSelect(const QPoint& p) if (audioSelect.m_selected) { m_settings.m_audioDeviceName = audioSelect.m_audioDeviceName; - applySettings(); + applySettings(QStringList({"audioDeviceName"})); } } diff --git a/plugins/channelrx/demodbfm/bfmdemodgui.h b/plugins/channelrx/demodbfm/bfmdemodgui.h index f8b0fb2cd..f1b4c38af 100644 --- a/plugins/channelrx/demodbfm/bfmdemodgui.h +++ b/plugins/channelrx/demodbfm/bfmdemodgui.h @@ -91,7 +91,7 @@ private: virtual ~BFMDemodGUI(); void blockApplySettings(bool block); - void applySettings(bool force = false); + void applySettings(const QStringList& settingsKeys, bool force = false); void displaySettings(); void rdsUpdate(bool force); void rdsUpdateFixedFields(); diff --git a/plugins/channelrx/demodbfm/bfmdemodsettings.cpp b/plugins/channelrx/demodbfm/bfmdemodsettings.cpp index 9b2f68fd5..23dd516c6 100644 --- a/plugins/channelrx/demodbfm/bfmdemodsettings.cpp +++ b/plugins/channelrx/demodbfm/bfmdemodsettings.cpp @@ -195,6 +195,150 @@ bool BFMDemodSettings::deserialize(const QByteArray& data) } } +void BFMDemodSettings::applySettings(const QStringList& settingsKeys, const BFMDemodSettings& settings) +{ + if (settingsKeys.contains("inputFrequencyOffset")) { + m_inputFrequencyOffset = settings.m_inputFrequencyOffset; + } + if (settingsKeys.contains("rfBandwidth")) { + m_rfBandwidth = settings.m_rfBandwidth; + } + if (settingsKeys.contains("afBandwidth")) { + m_afBandwidth = settings.m_afBandwidth; + } + if (settingsKeys.contains("volume")) { + m_volume = settings.m_volume; + } + if (settingsKeys.contains("squelch")) { + m_squelch = settings.m_squelch; + } + if (settingsKeys.contains("audioMute")) { + m_audioMute = settings.m_audioMute; + } + if (settingsKeys.contains("audioStereo")) { + m_audioStereo = settings.m_audioStereo; + } + if (settingsKeys.contains("lsbStereo")) { + m_lsbStereo = settings.m_lsbStereo; + } + if (settingsKeys.contains("showPilot")) { + m_showPilot = settings.m_showPilot; + } + if (settingsKeys.contains("rdsActive")) { + m_rdsActive = settings.m_rdsActive; + } + if (settingsKeys.contains("deEmphasis")) { + m_deEmphasis = settings.m_deEmphasis; + } + if (settingsKeys.contains("rgbColor")) { + m_rgbColor = settings.m_rgbColor; + } + if (settingsKeys.contains("title")) { + m_title = settings.m_title; + } + if (settingsKeys.contains("audioDeviceName")) { + m_audioDeviceName = settings.m_audioDeviceName; + } + if (settingsKeys.contains("streamIndex")) { + m_streamIndex = settings.m_streamIndex; + } + if (settingsKeys.contains("useReverseAPI")) { + m_useReverseAPI = settings.m_useReverseAPI; + } + if (settingsKeys.contains("reverseAPIAddress")) { + m_reverseAPIAddress = settings.m_reverseAPIAddress; + } + if (settingsKeys.contains("reverseAPIPort")) { + m_reverseAPIPort = settings.m_reverseAPIPort; + } + if (settingsKeys.contains("reverseAPIDeviceIndex")) { + m_reverseAPIDeviceIndex = settings.m_reverseAPIDeviceIndex; + } + if (settingsKeys.contains("reverseAPIChannelIndex")) { + m_reverseAPIChannelIndex = settings.m_reverseAPIChannelIndex; + } + if (settingsKeys.contains("workspaceIndex")) { + m_workspaceIndex = settings.m_workspaceIndex; + } + if (settingsKeys.contains("hidden")) { + m_hidden = settings.m_hidden; + } +} + +QString BFMDemodSettings::getDebugString(const QStringList& settingsKeys, bool force) const +{ + std::ostringstream ostr; + + if (settingsKeys.contains("inputFrequencyOffset") || force) { + ostr << " m_inputFrequencyOffset: " << m_inputFrequencyOffset; + } + if (settingsKeys.contains("rfBandwidth") || force) { + ostr << " m_rfBandwidth: " << m_rfBandwidth; + } + if (settingsKeys.contains("afBandwidth") || force) { + ostr << " m_afBandwidth: " << m_afBandwidth; + } + if (settingsKeys.contains("volume") || force) { + ostr << " m_volume: " << m_volume; + } + if (settingsKeys.contains("squelch") || force) { + ostr << " m_squelch: " << m_squelch; + } + if (settingsKeys.contains("audioMute") || force) { + ostr << " m_audioMute: " << m_audioMute; + } + if (settingsKeys.contains("audioStereo") || force) { + ostr << " m_audioStereo: " << m_audioStereo; + } + if (settingsKeys.contains("lsbStereo") || force) { + ostr << " m_lsbStereo: " << m_lsbStereo; + } + if (settingsKeys.contains("showPilot") || force) { + ostr << " m_showPilot: " << m_showPilot; + } + if (settingsKeys.contains("rdsActive") || force) { + ostr << " m_rdsActive: " << m_rdsActive; + } + if (settingsKeys.contains("deEmphasis") || force) { + ostr << " m_deEmphasis: " << m_deEmphasis; + } + if (settingsKeys.contains("rgbColor") || force) { + ostr << " m_rgbColor: " << m_rgbColor; + } + if (settingsKeys.contains("title") || force) { + ostr << " m_title: " << m_title.toStdString(); + } + if (settingsKeys.contains("audioDeviceName") || force) { + ostr << " m_audioDeviceName: " << m_audioDeviceName.toStdString(); + } + if (settingsKeys.contains("streamIndex") || force) { + ostr << " m_streamIndex: " << m_streamIndex; + } + if (settingsKeys.contains("useReverseAPI") || force) { + ostr << " m_useReverseAPI: " << m_useReverseAPI; + } + if (settingsKeys.contains("reverseAPIAddress") || force) { + ostr << " m_reverseAPIAddress: " << m_reverseAPIAddress.toStdString(); + } + if (settingsKeys.contains("reverseAPIPort") || force) { + ostr << " m_reverseAPIPort: " << m_reverseAPIPort; + } + if (settingsKeys.contains("reverseAPIDeviceIndex") || force) { + ostr << " m_reverseAPIDeviceIndex: " << m_reverseAPIDeviceIndex; + } + if (settingsKeys.contains("reverseAPIChannelIndex") || force) { + ostr << " m_reverseAPIChannelIndex: " << m_reverseAPIChannelIndex; + } + if (settingsKeys.contains("workspaceIndex") || force) { + ostr << " m_workspaceIndex: " << m_workspaceIndex; + } + if (settingsKeys.contains("hidden") || force) { + ostr << " m_hidden: " << m_hidden; + } + + return QString(ostr.str().c_str()); +} + int BFMDemodSettings::getRFBW(int index) { if (index < 0) { diff --git a/plugins/channelrx/demodbfm/bfmdemodsettings.h b/plugins/channelrx/demodbfm/bfmdemodsettings.h index a7ba275e4..449f50550 100644 --- a/plugins/channelrx/demodbfm/bfmdemodsettings.h +++ b/plugins/channelrx/demodbfm/bfmdemodsettings.h @@ -71,6 +71,8 @@ struct BFMDemodSettings void setSpectrumGUI(Serializable *spectrumGUI) { m_spectrumGUI = spectrumGUI; } QByteArray serialize() const; bool deserialize(const QByteArray& data); + void applySettings(const QStringList& settingsKeys, const BFMDemodSettings& settings); + QString getDebugString(const QStringList& settingsKeys, bool force=false) const; static int getRFBW(int index); static int getRFBWIndex(int rfbw); diff --git a/plugins/channelrx/demodbfm/bfmdemodsink.cpp b/plugins/channelrx/demodbfm/bfmdemodsink.cpp index 90b9b9bfe..690623de3 100644 --- a/plugins/channelrx/demodbfm/bfmdemodsink.cpp +++ b/plugins/channelrx/demodbfm/bfmdemodsink.cpp @@ -76,7 +76,7 @@ BFMDemodSink::BFMDemodSink() : m_demodBuffer.resize(1<<13); m_demodBufferFill = 0; - applySettings(m_settings, true); + applySettings(QStringList(), m_settings, true); applyChannelSettings(m_channelSampleRate, m_channelFrequencyOffset, true); } @@ -331,37 +331,23 @@ void BFMDemodSink::applyChannelSettings(int channelSampleRate, int channelFreque m_channelFrequencyOffset = channelFrequencyOffset; } -void BFMDemodSink::applySettings(const BFMDemodSettings& settings, bool force) +void BFMDemodSink::applySettings(const QStringList& settingsKeys, const BFMDemodSettings& settings, bool force) { - qDebug() << "BFMDemodSink::applySettings: MsgConfigureBFMDemod:" - << " m_inputFrequencyOffset: " << settings.m_inputFrequencyOffset - << " m_rfBandwidth: " << settings.m_rfBandwidth - << " m_afBandwidth: " << settings.m_afBandwidth - << " m_deEmphasis: " << settings.getDeEmphasisTimeConstant() - << " m_volume: " << settings.m_volume - << " m_squelch: " << settings.m_squelch - << " m_audioStereo: " << settings.m_audioStereo - << " m_lsbStereo: " << settings.m_lsbStereo - << " m_showPilot: " << settings.m_showPilot - << " m_rdsActive: " << settings.m_rdsActive - << " m_audioDeviceName: " << settings.m_audioDeviceName - << " m_streamIndex: " << settings.m_streamIndex - << " m_useReverseAPI: " << settings.m_useReverseAPI - << " force: " << force; + qDebug() << "BFMDemodSink::applySettings: MsgConfigureBFMDemod:" << settings.getDebugString(settingsKeys, force); - if ((settings.m_audioStereo && (settings.m_audioStereo != m_settings.m_audioStereo)) || force) + if ((settingsKeys.contains("audioStereo") && (settings.m_audioStereo != m_settings.m_audioStereo)) || force) { m_pilotPLL.configure(19000.0/m_channelSampleRate, 50.0/m_channelSampleRate, 0.01); applyAudioSampleRate(m_audioSampleRate); // re-apply audio sample rate to reconfigure interpolators } - if ((settings.getDeEmphasisTimeConstant() != m_settings.getDeEmphasisTimeConstant()) || force) + if ((settingsKeys.contains("deEmphasis") && (settings.getDeEmphasisTimeConstant() != m_settings.getDeEmphasisTimeConstant())) || force) { m_deemphasisFilterX.configure(settings.getDeEmphasisTimeConstant() * m_audioSampleRate); m_deemphasisFilterY.configure(settings.getDeEmphasisTimeConstant() * m_audioSampleRate); } - if ((settings.m_afBandwidth != m_settings.m_afBandwidth) || force) + if ((settingsKeys.contains("afBandwidth") && (settings.m_afBandwidth != m_settings.m_afBandwidth)) || force) { m_interpolator.create(16, m_channelSampleRate, settings.m_afBandwidth); m_interpolatorDistanceRemain = (Real) m_channelSampleRate / m_audioSampleRate; @@ -378,7 +364,7 @@ void BFMDemodSink::applySettings(const BFMDemodSettings& settings, bool force) m_lowpass.create(21, m_audioSampleRate, settings.m_afBandwidth); } - if ((settings.m_rfBandwidth != m_settings.m_rfBandwidth) || force) + if ((settingsKeys.contains("rfBandwidth") && (settings.m_rfBandwidth != m_settings.m_rfBandwidth)) || force) { Real lowCut = -(settings.m_rfBandwidth / 2.0) / m_channelSampleRate; Real hiCut = (settings.m_rfBandwidth / 2.0) / m_channelSampleRate; @@ -386,7 +372,7 @@ void BFMDemodSink::applySettings(const BFMDemodSettings& settings, bool force) m_phaseDiscri.setFMScaling(m_channelSampleRate / m_fmExcursion); } - if ((settings.m_squelch != m_settings.m_squelch) || force) { + if ((settingsKeys.contains("squelch") && (settings.m_squelch != m_settings.m_squelch)) || force) { m_squelchLevel = std::pow(10.0, settings.m_squelch / 10.0); } diff --git a/plugins/channelrx/demodbfm/bfmdemodsink.h b/plugins/channelrx/demodbfm/bfmdemodsink.h index 675ab31ff..88af8a2a6 100644 --- a/plugins/channelrx/demodbfm/bfmdemodsink.h +++ b/plugins/channelrx/demodbfm/bfmdemodsink.h @@ -84,7 +84,7 @@ public: RDSParser& getRDSParser() { return m_rdsParser; } void applyChannelSettings(int channelSampleRate, int channelFrequencyOffset, bool force = false); - void applySettings(const BFMDemodSettings& settings, bool force = false); + void applySettings(const QStringList& keys, const BFMDemodSettings& settings, bool force = false); AudioFifo *getAudioFifo() { return &m_audioFifo; } void setAudioFifoLabel(const QString& label) { m_audioFifo.setLabel(label); } diff --git a/plugins/channelrx/demoddab/dabdemod.cpp b/plugins/channelrx/demoddab/dabdemod.cpp index d75b5136d..7c62cb930 100644 --- a/plugins/channelrx/demoddab/dabdemod.cpp +++ b/plugins/channelrx/demoddab/dabdemod.cpp @@ -69,7 +69,7 @@ DABDemod::DABDemod(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); @@ -143,7 +143,7 @@ void DABDemod::start() DSPSignalNotification *dspMsg = new DSPSignalNotification(m_basebandSampleRate, m_centerFrequency); m_basebandSink->getInputMessageQueue()->push(dspMsg); - DABDemodBaseband::MsgConfigureDABDemodBaseband *msg = DABDemodBaseband::MsgConfigureDABDemodBaseband::create(m_settings, true); + DABDemodBaseband::MsgConfigureDABDemodBaseband *msg = DABDemodBaseband::MsgConfigureDABDemodBaseband::create(QStringList(), m_settings, true); m_basebandSink->getInputMessageQueue()->push(msg); } @@ -161,7 +161,7 @@ bool DABDemod::handleMessage(const Message& cmd) { MsgConfigureDABDemod& cfg = (MsgConfigureDABDemod&) cmd; qDebug() << "DABDemod::handleMessage: MsgConfigureDABDemod"; - applySettings(cfg.getSettings(), cfg.getForce()); + applySettings(cfg.getSettingsKeys(), cfg.getSettings(), cfg.getForce()); return true; } @@ -313,25 +313,18 @@ void DABDemod::setCenterFrequency(qint64 frequency) { DABDemodSettings settings = m_settings; settings.m_inputFrequencyOffset = frequency; - applySettings(settings, false); + applySettings(QStringList({"inputFrequencyOffset"}), settings, false); if (m_guiMessageQueue) // forward to GUI if any { - MsgConfigureDABDemod *msgToGUI = MsgConfigureDABDemod::create(settings, false); + MsgConfigureDABDemod *msgToGUI = MsgConfigureDABDemod::create(QStringList({"inputFrequencyOffset"}), settings, false); m_guiMessageQueue->push(msgToGUI); } } -void DABDemod::applySettings(const DABDemodSettings& settings, bool force) +void DABDemod::applySettings(const QStringList& settingsKeys, const DABDemodSettings& settings, bool force) { - qDebug() << "DABDemod::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() << "DABDemod::applySettings:" << settings.getDebugString(settingsKeys, force); QList reverseAPIKeys; @@ -353,7 +346,7 @@ void DABDemod::applySettings(const DABDemodSettings& settings, bool force) if ((settings.m_audioDeviceName != m_settings.m_audioDeviceName) || force) { reverseAPIKeys.append("audioDeviceName"); } - if (m_settings.m_streamIndex != settings.m_streamIndex) + if (settingsKeys.contains("streamIndex") && (settings.m_streamIndex != m_settings.m_streamIndex)) { if (m_deviceAPI->getSampleMIMO()) // change of stream is possible for MIMO devices only { @@ -368,17 +361,17 @@ void DABDemod::applySettings(const DABDemodSettings& settings, bool force) reverseAPIKeys.append("streamIndex"); } - DABDemodBaseband::MsgConfigureDABDemodBaseband *msg = DABDemodBaseband::MsgConfigureDABDemodBaseband::create(settings, force); + DABDemodBaseband::MsgConfigureDABDemodBaseband *msg = DABDemodBaseband::MsgConfigureDABDemodBaseband::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; @@ -393,14 +386,14 @@ bool DABDemod::deserialize(const QByteArray& data) { if (m_settings.deserialize(data)) { - MsgConfigureDABDemod *msg = MsgConfigureDABDemod::create(m_settings, true); + MsgConfigureDABDemod *msg = MsgConfigureDABDemod::create(QStringList(), m_settings, true); m_inputMessageQueue.push(msg); return true; } else { m_settings.resetToDefaults(); - MsgConfigureDABDemod *msg = MsgConfigureDABDemod::create(m_settings, true); + MsgConfigureDABDemod *msg = MsgConfigureDABDemod::create(QStringList(), m_settings, true); m_inputMessageQueue.push(msg); return false; } @@ -455,13 +448,13 @@ int DABDemod::webapiSettingsPutPatch( DABDemodSettings settings = m_settings; webapiUpdateChannelSettings(settings, channelSettingsKeys, response); - MsgConfigureDABDemod *msg = MsgConfigureDABDemod::create(settings, force); + MsgConfigureDABDemod *msg = MsgConfigureDABDemod::create(channelSettingsKeys, settings, force); m_inputMessageQueue.push(msg); qDebug("DABDemod::webapiSettingsPutPatch: forward to GUI: %p", m_guiMessageQueue); if (m_guiMessageQueue) // forward to GUI if any { - MsgConfigureDABDemod *msgToGUI = MsgConfigureDABDemod::create(settings, force); + MsgConfigureDABDemod *msgToGUI = MsgConfigureDABDemod::create(channelSettingsKeys, settings, force); m_guiMessageQueue->push(msgToGUI); } @@ -583,7 +576,7 @@ void DABDemod::webapiFormatChannelSettings(SWGSDRangel::SWGChannelSettings& resp } } -void DABDemod::webapiReverseSendSettings(QList& channelSettingsKeys, const DABDemodSettings& settings, bool force) +void DABDemod::webapiReverseSendSettings(const QList& channelSettingsKeys, const DABDemodSettings& settings, bool force) { SWGSDRangel::SWGChannelSettings *swgChannelSettings = new SWGSDRangel::SWGChannelSettings(); webapiFormatChannelSettings(channelSettingsKeys, swgChannelSettings, settings, force); @@ -609,7 +602,7 @@ void DABDemod::webapiReverseSendSettings(QList& channelSettingsKeys, co } void DABDemod::webapiFormatChannelSettings( - QList& channelSettingsKeys, + const QList& channelSettingsKeys, SWGSDRangel::SWGChannelSettings *swgChannelSettings, const DABDemodSettings& settings, bool force diff --git a/plugins/channelrx/demoddab/dabdemod.h b/plugins/channelrx/demoddab/dabdemod.h index bce5df35b..962e2e5d3 100644 --- a/plugins/channelrx/demoddab/dabdemod.h +++ b/plugins/channelrx/demoddab/dabdemod.h @@ -44,19 +44,22 @@ public: public: const DABDemodSettings& getSettings() const { return m_settings; } bool getForce() const { return m_force; } + const QStringList& getSettingsKeys() const { return m_settingsKeys; } - static MsgConfigureDABDemod* create(const DABDemodSettings& settings, bool force) + static MsgConfigureDABDemod* create(const QStringList& settingsKeys, const DABDemodSettings& settings, bool force) { - return new MsgConfigureDABDemod(settings, force); + return new MsgConfigureDABDemod(settingsKeys, settings, force); } private: DABDemodSettings m_settings; + QStringList m_settingsKeys; bool m_force; - MsgConfigureDABDemod(const DABDemodSettings& settings, bool force) : + MsgConfigureDABDemod(const QStringList& settingsKeys, const DABDemodSettings& settings, bool force) : Message(), m_settings(settings), + m_settingsKeys(settingsKeys), m_force(force) { } }; @@ -411,11 +414,11 @@ private: QNetworkRequest m_networkRequest; virtual bool handleMessage(const Message& cmd); - void applySettings(const DABDemodSettings& settings, bool force = false); + void applySettings(const QStringList& settingsKeys, const DABDemodSettings& settings, bool force = false); void sendSampleRateToDemodAnalyzer(); - void webapiReverseSendSettings(QList& channelSettingsKeys, const DABDemodSettings& settings, bool force); + void webapiReverseSendSettings(const QList& channelSettingsKeys, const DABDemodSettings& settings, bool force); void webapiFormatChannelSettings( - QList& channelSettingsKeys, + const QList& channelSettingsKeys, SWGSDRangel::SWGChannelSettings *swgChannelSettings, const DABDemodSettings& settings, bool force diff --git a/plugins/channelrx/demoddab/dabdemodbaseband.cpp b/plugins/channelrx/demoddab/dabdemodbaseband.cpp index db6bee617..0c42ccf6a 100644 --- a/plugins/channelrx/demoddab/dabdemodbaseband.cpp +++ b/plugins/channelrx/demoddab/dabdemodbaseband.cpp @@ -138,7 +138,7 @@ bool DABDemodBaseband::handleMessage(const Message& cmd) MsgConfigureDABDemodBaseband& cfg = (MsgConfigureDABDemodBaseband&) cmd; qDebug() << "DABDemodBaseband::handleMessage: MsgConfigureDABDemodBaseband"; - applySettings(cfg.getSettings(), cfg.getForce()); + applySettings(cfg.getSettingsKeys(), cfg.getSettings(), cfg.getForce()); return true; } @@ -174,15 +174,15 @@ bool DABDemodBaseband::handleMessage(const Message& cmd) } } -void DABDemodBaseband::applySettings(const DABDemodSettings& settings, bool force) +void DABDemodBaseband::applySettings(const QStringList& settingsKeys, const DABDemodSettings& 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(DABDEMOD_CHANNEL_SAMPLE_RATE, settings.m_inputFrequencyOffset); m_sink.applyChannelSettings(m_channelizer->getChannelSampleRate(), m_channelizer->getChannelFrequencyOffset()); } - 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); @@ -196,9 +196,13 @@ void DABDemodBaseband::applySettings(const DABDemodSettings& settings, bool forc m_sink.applyAudioSampleRate(audioSampleRate); } } - 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 DABDemodBaseband::setBasebandSampleRate(int sampleRate) diff --git a/plugins/channelrx/demoddab/dabdemodbaseband.h b/plugins/channelrx/demoddab/dabdemodbaseband.h index 90b7eeef8..7d36bee57 100644 --- a/plugins/channelrx/demoddab/dabdemodbaseband.h +++ b/plugins/channelrx/demoddab/dabdemodbaseband.h @@ -42,20 +42,23 @@ public: public: const DABDemodSettings& getSettings() const { return m_settings; } + const QStringList& getSettingsKeys() const { return m_settingsKeys; } bool getForce() const { return m_force; } - static MsgConfigureDABDemodBaseband* create(const DABDemodSettings& settings, bool force) + static MsgConfigureDABDemodBaseband* create(const QStringList& settingsKeys, const DABDemodSettings& settings, bool force) { - return new MsgConfigureDABDemodBaseband(settings, force); + return new MsgConfigureDABDemodBaseband(settingsKeys, settings, force); } private: DABDemodSettings m_settings; + QStringList m_settingsKeys; bool m_force; - MsgConfigureDABDemodBaseband(const DABDemodSettings& settings, bool force) : + MsgConfigureDABDemodBaseband(const QStringList& settingsKeys, const DABDemodSettings& 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 DABDemodSettings& settings, bool force = false); + void applySettings(const QStringList& settingsKeys, const DABDemodSettings& settings, bool force = false); private slots: void handleInputMessages(); diff --git a/plugins/channelrx/demoddab/dabdemodgui.cpp b/plugins/channelrx/demoddab/dabdemodgui.cpp index 956632439..b4c95620e 100644 --- a/plugins/channelrx/demoddab/dabdemodgui.cpp +++ b/plugins/channelrx/demoddab/dabdemodgui.cpp @@ -122,7 +122,7 @@ void DABDemodGUI::resetToDefaults() { m_settings.resetToDefaults(); displaySettings(); - applySettings(true); + applySettings(QStringList(), true); } QByteArray DABDemodGUI::serialize() const @@ -134,7 +134,7 @@ bool DABDemodGUI::deserialize(const QByteArray& data) { if(m_settings.deserialize(data)) { displaySettings(); - applySettings(true); + applySettings(QStringList(), true); return true; } else { resetToDefaults(); @@ -203,7 +203,7 @@ void DABDemodGUI::on_programs_cellDoubleClicked(int row, int column) double centreFreq = frequencyInHz-m_settings.m_inputFrequencyOffset; ChannelWebAPIUtils::setCenterFrequency(m_dabDemod->getDeviceSetIndex(), centreFreq); clearProgram(); - applySettings(); + applySettings(QStringList({"program"})); } // Ensemble name can sometimes be decoded after program name, so we @@ -365,7 +365,7 @@ void DABDemodGUI::channelMarkerChangedByCursor() { ui->deltaFrequency->setValue(m_channelMarker.getCenterFrequency()); m_settings.m_inputFrequencyOffset = m_channelMarker.getCenterFrequency(); - applySettings(); + applySettings(QStringList({"inputFrequencyOffset"})); } void DABDemodGUI::channelMarkerHighlightedByCursor() @@ -378,20 +378,20 @@ void DABDemodGUI::on_deltaFrequency_changed(qint64 value) m_channelMarker.setCenterFrequency(value); m_settings.m_inputFrequencyOffset = m_channelMarker.getCenterFrequency(); updateAbsoluteCenterFrequency(); - applySettings(); + applySettings(QStringList({"inputFrequencyOffset"})); } void DABDemodGUI::on_audioMute_toggled(bool checked) { m_settings.m_audioMute = checked; - applySettings(); + applySettings(QStringList({"audioMute"})); } void DABDemodGUI::on_volume_valueChanged(int value) { ui->volumeText->setText(QString("%1").arg(value / 10.0, 0, 'f', 1)); m_settings.m_volume = value / 10.0; - applySettings(); + applySettings(QStringList({"volume"})); } void DABDemodGUI::on_rfBW_valueChanged(int value) @@ -400,14 +400,14 @@ void DABDemodGUI::on_rfBW_valueChanged(int value) ui->rfBWText->setText(QString("%1k").arg(value / 10.0, 0, 'f', 1)); m_channelMarker.setBandwidth(bw); m_settings.m_rfBandwidth = bw; - applySettings(); + applySettings(QStringList({"rfBandwidth"})); } void DABDemodGUI::on_filter_editingFinished() { m_settings.m_filter = ui->filter->text(); filter(); - applySettings(); + applySettings(QStringList({"filter"})); } void DABDemodGUI::on_clearTable_clicked() @@ -446,7 +446,7 @@ void DABDemodGUI::onWidgetRolled(QWidget* widget, bool rollDown) (void) rollDown; getRollupContents()->saveState(m_rollupState); - applySettings(); + applySettings(QStringList()); } void DABDemodGUI::onMenuDialogCalled(const QPoint &p) @@ -491,7 +491,9 @@ void DABDemodGUI::onMenuDialogCalled(const QPoint &p) updateIndexLabel(); } - applySettings(); + applySettings(QStringList({"rgbColor", "title", "useReverseAPI", "reverseAPIAddress", + "reverseAPIPort", "reverseAPIDeviceIndex", "reverseAPIChannelIndex", + "streamIndex"})); } resetContextMenuType(); @@ -574,7 +576,7 @@ DABDemodGUI::DABDemodGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Baseban displaySettings(); makeUIConnections(); - applySettings(true); + applySettings(QStringList(), true); m_resizer.enableChildMouseTracking(); } @@ -588,11 +590,11 @@ void DABDemodGUI::blockApplySettings(bool block) m_doApplySettings = !block; } -void DABDemodGUI::applySettings(bool force) +void DABDemodGUI::applySettings(const QStringList& channelSettingsKeys, bool force) { if (m_doApplySettings) { - DABDemod::MsgConfigureDABDemod* message = DABDemod::MsgConfigureDABDemod::create( m_settings, force); + DABDemod::MsgConfigureDABDemod* message = DABDemod::MsgConfigureDABDemod::create(channelSettingsKeys, m_settings, force); m_dabDemod->getInputMessageQueue()->push(message); } } @@ -706,7 +708,7 @@ void DABDemodGUI::audioSelect(const QPoint& p) if (audioSelect.m_selected) { m_settings.m_audioDeviceName = audioSelect.m_audioDeviceName; - applySettings(); + applySettings(QStringList({"audioDeviceName"})); } } @@ -796,4 +798,3 @@ void DABDemodGUI::on_findOnMap_clicked() qDebug() << "Finding " << id; FeatureWebAPIUtils::mapFind(id); } - diff --git a/plugins/channelrx/demoddab/dabdemodgui.h b/plugins/channelrx/demoddab/dabdemodgui.h index 65d990053..27419b044 100644 --- a/plugins/channelrx/demoddab/dabdemodgui.h +++ b/plugins/channelrx/demoddab/dabdemodgui.h @@ -90,7 +90,7 @@ private: virtual ~DABDemodGUI(); void blockApplySettings(bool block); - void applySettings(bool force = false); + void applySettings(const QStringList& channelSettingsKeys, bool force = false); void displaySettings(); void updateEnsembleName(const QString& ensemble); int findProgramRowById(int id); diff --git a/plugins/channelrx/demoddab/dabdemodsettings.cpp b/plugins/channelrx/demoddab/dabdemodsettings.cpp index 5bd91bce4..e719de9ac 100644 --- a/plugins/channelrx/demoddab/dabdemodsettings.cpp +++ b/plugins/channelrx/demoddab/dabdemodsettings.cpp @@ -175,4 +175,116 @@ bool DABDemodSettings::deserialize(const QByteArray& data) } } +void DABDemodSettings::applySettings(const QStringList& settingsKeys, const DABDemodSettings& settings) +{ + if (settingsKeys.contains("inputFrequencyOffset")) { + m_inputFrequencyOffset = settings.m_inputFrequencyOffset; + } + if (settingsKeys.contains("rfBandwidth")) { + m_rfBandwidth = settings.m_rfBandwidth; + } + if (settingsKeys.contains("filter")) { + m_filter = settings.m_filter; + } + if (settingsKeys.contains("program")) { + m_program = settings.m_program; + } + if (settingsKeys.contains("volume")) { + m_volume = settings.m_volume; + } + if (settingsKeys.contains("audioMute")) { + m_audioMute = settings.m_audioMute; + } + if (settingsKeys.contains("rgbColor")) { + m_rgbColor = settings.m_rgbColor; + } + if (settingsKeys.contains("title")) { + m_title = settings.m_title; + } + if (settingsKeys.contains("audioDeviceName")) { + m_audioDeviceName = settings.m_audioDeviceName; + } + if (settingsKeys.contains("streamIndex")) { + m_streamIndex = settings.m_streamIndex; + } + if (settingsKeys.contains("useReverseAPI")) { + m_useReverseAPI = settings.m_useReverseAPI; + } + if (settingsKeys.contains("reverseAPIAddress")) { + m_reverseAPIAddress = settings.m_reverseAPIAddress; + } + if (settingsKeys.contains("reverseAPIPort")) { + m_reverseAPIPort = settings.m_reverseAPIPort; + } + if (settingsKeys.contains("reverseAPIDeviceIndex")) { + m_reverseAPIDeviceIndex = settings.m_reverseAPIDeviceIndex; + } + if (settingsKeys.contains("reverseAPIChannelIndex")) { + m_reverseAPIChannelIndex = settings.m_reverseAPIChannelIndex; + } + if (settingsKeys.contains("workspaceIndex")) { + m_workspaceIndex = settings.m_workspaceIndex; + } + if (settingsKeys.contains("hidden")) { + m_hidden = settings.m_hidden; + } +} +QString DABDemodSettings::getDebugString(const QStringList& settingsKeys, bool force) const +{ + std::ostringstream ostr; + + if (settingsKeys.contains("inputFrequencyOffset") || force) { + ostr << " m_inputFrequencyOffset: " << m_inputFrequencyOffset; + } + if (settingsKeys.contains("rfBandwidth") || force) { + ostr << " m_rfBandwidth: " << m_rfBandwidth; + } + if (settingsKeys.contains("filter") || force) { + ostr << " m_filter: " << m_filter.toStdString(); + } + if (settingsKeys.contains("program") || force) { + ostr << " m_program: " << m_program.toStdString(); + } + if (settingsKeys.contains("volume") || force) { + ostr << " m_volume: " << m_volume; + } + if (settingsKeys.contains("audioMute") || force) { + ostr << " m_audioMute: " << m_audioMute; + } + if (settingsKeys.contains("rgbColor") || force) { + ostr << " m_rgbColor: " << m_rgbColor; + } + if (settingsKeys.contains("title") || force) { + ostr << " m_title: " << m_title.toStdString(); + } + if (settingsKeys.contains("audioDeviceName") || force) { + ostr << " m_audioDeviceName: " << m_audioDeviceName.toStdString(); + } + if (settingsKeys.contains("streamIndex") || force) { + ostr << " m_streamIndex: " << m_streamIndex; + } + if (settingsKeys.contains("useReverseAPI") || force) { + ostr << " m_useReverseAPI: " << m_useReverseAPI; + } + if (settingsKeys.contains("reverseAPIAddress") || force) { + ostr << " m_reverseAPIAddress: " << m_reverseAPIAddress.toStdString(); + } + if (settingsKeys.contains("reverseAPIPort") || force) { + ostr << " m_reverseAPIPort: " << m_reverseAPIPort; + } + if (settingsKeys.contains("reverseAPIDeviceIndex") || force) { + ostr << " m_reverseAPIDeviceIndex: " << m_reverseAPIDeviceIndex; + } + if (settingsKeys.contains("reverseAPIChannelIndex") || force) { + ostr << " m_reverseAPIChannelIndex: " << m_reverseAPIChannelIndex; + } + if (settingsKeys.contains("workspaceIndex") || force) { + ostr << " m_workspaceIndex: " << m_workspaceIndex; + } + if (settingsKeys.contains("hidden") || force) { + ostr << " m_hidden: " << m_hidden; + } + + return QString(ostr.str().c_str()); +} diff --git a/plugins/channelrx/demoddab/dabdemodsettings.h b/plugins/channelrx/demoddab/dabdemodsettings.h index b5d24e4c9..9852d0ebc 100644 --- a/plugins/channelrx/demoddab/dabdemodsettings.h +++ b/plugins/channelrx/demoddab/dabdemodsettings.h @@ -64,6 +64,8 @@ struct DABDemodSettings void setRollupState(Serializable *rollupState) { m_rollupState = rollupState; } QByteArray serialize() const; bool deserialize(const QByteArray& data); + void applySettings(const QStringList& settingsKeys, const DABDemodSettings& settings); + QString getDebugString(const QStringList& settingsKeys, bool force=false) const; }; #endif /* INCLUDE_DABDEMODSETTINGS_H */ diff --git a/plugins/channelrx/demoddab/dabdemodsink.cpp b/plugins/channelrx/demoddab/dabdemodsink.cpp index b599c24b5..49a9f1adb 100644 --- a/plugins/channelrx/demoddab/dabdemodsink.cpp +++ b/plugins/channelrx/demoddab/dabdemodsink.cpp @@ -507,7 +507,7 @@ DABDemodSink::DABDemodSink() : m_demodBuffer.resize(1<<13); m_demodBufferFill = 0; - applySettings(m_settings, true); + applySettings(QStringList(), m_settings, true); applyChannelSettings(m_channelSampleRate, m_channelFrequencyOffset, true); m_api.dabMode = 1; // Latest DAB spec only has mode 1 @@ -613,19 +613,18 @@ void DABDemodSink::applyChannelSettings(int channelSampleRate, int channelFreque m_channelFrequencyOffset = channelFrequencyOffset; } -void DABDemodSink::applySettings(const DABDemodSettings& settings, bool force) +void DABDemodSink::applySettings(const QStringList& settingsKeys, const DABDemodSettings& settings, bool force) { - qDebug() << "DABDemodSink::applySettings:" - << " force: " << force; + qDebug() << "DABDemodSink::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) DABDEMOD_CHANNEL_SAMPLE_RATE; m_interpolatorDistanceRemain = m_interpolatorDistance; } - if ((settings.m_program != m_settings.m_program) || force) + if ((settingsKeys.contains("program") && (settings.m_program != m_settings.m_program)) || force) { if (!settings.m_program.isEmpty()) { setProgram(settings.m_program); diff --git a/plugins/channelrx/demoddab/dabdemodsink.h b/plugins/channelrx/demoddab/dabdemodsink.h index a808ccf7b..96c2a9617 100644 --- a/plugins/channelrx/demoddab/dabdemodsink.h +++ b/plugins/channelrx/demoddab/dabdemodsink.h @@ -49,7 +49,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 DABDemodSettings& settings, bool force = false); + void applySettings(const QStringList& settingsKeys, const DABDemodSettings& settings, bool force = false); void applyAudioSampleRate(int sampleRate); void applyDABAudioSampleRate(int sampleRate); int getAudioSampleRate() const { return m_audioSampleRate; } diff --git a/plugins/channelrx/demoddatv/datvdemod.cpp b/plugins/channelrx/demoddatv/datvdemod.cpp index 4834f2217..55c2447fe 100644 --- a/plugins/channelrx/demoddatv/datvdemod.cpp +++ b/plugins/channelrx/demoddatv/datvdemod.cpp @@ -53,7 +53,7 @@ DATVDemod::DATVDemod(DeviceAPI *deviceAPI) : m_basebandSink = new DATVDemodBaseband(); m_basebandSink->moveToThread(&m_thread); - applySettings(m_settings, true); + applySettings(QStringList(), m_settings, true); m_deviceAPI->addChannelSink(this); m_deviceAPI->addChannelSinkAPI(this); @@ -123,7 +123,7 @@ void DATVDemod::start() m_basebandSink->startWork(); m_thread.start(); - DATVDemodBaseband::MsgConfigureDATVDemodBaseband *msg = DATVDemodBaseband::MsgConfigureDATVDemodBaseband::create(m_settings, true); + DATVDemodBaseband::MsgConfigureDATVDemodBaseband *msg = DATVDemodBaseband::MsgConfigureDATVDemodBaseband::create(QStringList(), m_settings, true); m_basebandSink->getInputMessageQueue()->push(msg); } @@ -141,7 +141,7 @@ bool DATVDemod::handleMessage(const Message& cmd) { MsgConfigureDATVDemod& objCfg = (MsgConfigureDATVDemod&) cmd; qDebug() << "DATVDemod::handleMessage: MsgConfigureDATVDemod"; - applySettings(objCfg.getSettings(), objCfg.getForce()); + applySettings(objCfg.getSettingsKeys(), objCfg.getSettings(), objCfg.getForce()); return true; } @@ -172,104 +172,21 @@ void DATVDemod::setCenterFrequency(qint64 frequency) { DATVDemodSettings settings = m_settings; settings.m_centerFrequency = frequency; - applySettings(settings, false); + applySettings(QStringList("centerFrequency"), settings, false); if (m_guiMessageQueue) // forward to GUI if any { - MsgConfigureDATVDemod *msgToGUI = MsgConfigureDATVDemod::create(settings, false); + MsgConfigureDATVDemod *msgToGUI = MsgConfigureDATVDemod::create(QStringList("centerFrequency"), settings, false); m_guiMessageQueue->push(msgToGUI); } } -void DATVDemod::applySettings(const DATVDemodSettings& settings, bool force) +void DATVDemod::applySettings(const QList& settingsKeys, const DATVDemodSettings& settings, bool force) { QString debugMsg = tr("DATVDemod::applySettings: force: %1").arg(force); settings.debug(debugMsg); - QList reverseAPIKeys; - - if (settings.m_rgbColor != m_settings.m_rgbColor) { - reverseAPIKeys.append("rgbColor"); - } - if (settings.m_title != m_settings.m_title) { - reverseAPIKeys.append("title"); - } - if (settings.m_rfBandwidth != m_settings.m_rfBandwidth) { - reverseAPIKeys.append("rfBandwidth"); - } - if (settings.m_centerFrequency != m_settings.m_centerFrequency) { - reverseAPIKeys.append("centerFrequency"); - } - if (settings.m_standard != m_settings.m_standard) { - reverseAPIKeys.append("standard"); - } - if (settings.m_modulation != m_settings.m_modulation) { - reverseAPIKeys.append("modulation"); - } - if (settings.m_fec != m_settings.m_fec) { - reverseAPIKeys.append("fec"); - } - if (settings.m_softLDPC != m_settings.m_softLDPC) { - reverseAPIKeys.append("softLDPC"); - } - if (settings.m_softLDPCMaxTrials != m_settings.m_softLDPCMaxTrials) { - reverseAPIKeys.append("softLDPCMaxTrials"); - } - if (settings.m_maxBitflips != m_settings.m_maxBitflips) { - reverseAPIKeys.append("maxBitflips"); - } - if (settings.m_audioMute != m_settings.m_audioMute) { - reverseAPIKeys.append("audioMute"); - } - if (settings.m_audioDeviceName != m_settings.m_audioDeviceName) { - reverseAPIKeys.append("audioDeviceName"); - } - if (settings.m_symbolRate != m_settings.m_symbolRate) { - reverseAPIKeys.append("symbolRate"); - } - if (settings.m_notchFilters != m_settings.m_notchFilters) { - reverseAPIKeys.append("notchFilters"); - } - if (settings.m_allowDrift != m_settings.m_allowDrift) { - reverseAPIKeys.append("allowDrift"); - } - if (settings.m_fastLock != m_settings.m_fastLock) { - reverseAPIKeys.append("fastLock"); - } - if (settings.m_filter != m_settings.m_filter) { - reverseAPIKeys.append("filter"); - } - if (settings.m_hardMetric != m_settings.m_hardMetric) { - reverseAPIKeys.append("hardMetric"); - } - if (settings.m_rollOff != m_settings.m_rollOff) { - reverseAPIKeys.append("rollOff"); - } - if (settings.m_viterbi != m_settings.m_viterbi) { - reverseAPIKeys.append("viterbi"); - } - if (settings.m_excursion != m_settings.m_excursion) { - reverseAPIKeys.append("excursion"); - } - if (settings.m_audioVolume != m_settings.m_audioVolume) { - reverseAPIKeys.append("audioVolume"); - } - if (settings.m_videoMute != m_settings.m_videoMute) { - reverseAPIKeys.append("videoMute"); - } - if (settings.m_udpTSAddress != m_settings.m_udpTSAddress) { - reverseAPIKeys.append("udpTSAddress"); - } - if (settings.m_udpTSPort != m_settings.m_udpTSPort) { - reverseAPIKeys.append("udpTSPort"); - } - if (settings.m_udpTS != m_settings.m_udpTS) { - reverseAPIKeys.append("udpTS"); - } - if (settings.m_playerEnable != m_settings.m_playerEnable) { - reverseAPIKeys.append("playerEnable"); - } - if (m_settings.m_streamIndex != settings.m_streamIndex) + if (settingsKeys.contains("streamIndex") && (settings.m_streamIndex != m_settings.m_streamIndex)) { if (m_deviceAPI->getSampleMIMO()) // change of stream is possible for MIMO devices only { @@ -280,28 +197,26 @@ void DATVDemod::applySettings(const DATVDemodSettings& settings, bool force) m_settings.m_streamIndex = settings.m_streamIndex; // make sure ChannelAPI::getStreamIndex() is consistent emit streamIndexChanged(settings.m_streamIndex); } - - reverseAPIKeys.append("streamIndex"); } - DATVDemodBaseband::MsgConfigureDATVDemodBaseband *msg = DATVDemodBaseband::MsgConfigureDATVDemodBaseband::create(settings, force); + DATVDemodBaseband::MsgConfigureDATVDemodBaseband *msg = DATVDemodBaseband::MsgConfigureDATVDemodBaseband::create(settingsKeys, settings, force); m_basebandSink->getInputMessageQueue()->push(msg); if (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") && (settings.m_useReverseAPI != m_settings.m_useReverseAPI)) && settings.m_useReverseAPI) || + (settingsKeys.contains("reverseAPIAddress") && (settings.m_reverseAPIAddress != m_settings.m_reverseAPIAddress)) || + (settingsKeys.contains("reverseAPIPort") && (settings.m_reverseAPIPort != m_settings.m_reverseAPIPort)) || + (settingsKeys.contains("reverseAPIDeviceIndex") && (settings.m_reverseAPIDeviceIndex != m_settings.m_reverseAPIDeviceIndex)) || + (settingsKeys.contains("reverseAPIChannelIndex") && (settings.m_reverseAPIChannelIndex != m_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; @@ -353,14 +268,14 @@ int DATVDemod::webapiSettingsPutPatch( DATVDemodSettings settings = m_settings; webapiUpdateChannelSettings(settings, channelSettingsKeys, response); - MsgConfigureDATVDemod *msg = MsgConfigureDATVDemod::create(settings, force); + MsgConfigureDATVDemod *msg = MsgConfigureDATVDemod::create(channelSettingsKeys, settings, force); m_inputMessageQueue.push(msg); qDebug("DATVDemod::webapiSettingsPutPatch: forward to GUI: %p", m_guiMessageQueue); if (m_guiMessageQueue) // forward to GUI if any { - MsgConfigureDATVDemod *msgToGUI = MsgConfigureDATVDemod::create(settings, force); + MsgConfigureDATVDemod *msgToGUI = MsgConfigureDATVDemod::create(channelSettingsKeys, settings, force); m_guiMessageQueue->push(msgToGUI); } @@ -589,7 +504,7 @@ void DATVDemod::webapiFormatChannelReport(SWGSDRangel::SWGChannelReport& respons void DATVDemod::sendChannelSettings( const QList& pipes, - QList& channelSettingsKeys, + const QList& channelSettingsKeys, const DATVDemodSettings& settings, bool force) { @@ -613,7 +528,7 @@ void DATVDemod::sendChannelSettings( } void DATVDemod::webapiFormatChannelSettings( - QList& channelSettingsKeys, + const QList& channelSettingsKeys, SWGSDRangel::SWGChannelSettings *swgChannelSettings, const DATVDemodSettings& settings, bool force @@ -728,7 +643,7 @@ void DATVDemod::webapiFormatChannelSettings( } } -void DATVDemod::webapiReverseSendSettings(QList& channelSettingsKeys, const DATVDemodSettings& settings, bool force) +void DATVDemod::webapiReverseSendSettings(const QList& channelSettingsKeys, const DATVDemodSettings& settings, bool force) { SWGSDRangel::SWGChannelSettings *swgChannelSettings = new SWGSDRangel::SWGChannelSettings(); webapiFormatChannelSettings(channelSettingsKeys, swgChannelSettings, settings, force); diff --git a/plugins/channelrx/demoddatv/datvdemod.h b/plugins/channelrx/demoddatv/datvdemod.h index ebb7d6135..a898c235d 100644 --- a/plugins/channelrx/demoddatv/datvdemod.h +++ b/plugins/channelrx/demoddatv/datvdemod.h @@ -142,20 +142,23 @@ public: public: const DATVDemodSettings& getSettings() const { return m_settings; } + const QStringList& getSettingsKeys() const { return m_settingsKeys; } bool getForce() const { return m_force; } - static MsgConfigureDATVDemod* create(const DATVDemodSettings& settings, bool force) + static MsgConfigureDATVDemod* create(const QStringList& settingsKeys, const DATVDemodSettings& settings, bool force) { - return new MsgConfigureDATVDemod(settings, force); + return new MsgConfigureDATVDemod(settingsKeys, settings, force); } private: DATVDemodSettings m_settings; + QStringList m_settingsKeys; bool m_force; - MsgConfigureDATVDemod(const DATVDemodSettings& settings, bool force) : + MsgConfigureDATVDemod(const QStringList& settingsKeys, const DATVDemodSettings& settings, bool force) : Message(), m_settings(settings), + m_settingsKeys(settingsKeys), m_force(force) { } }; @@ -170,17 +173,17 @@ private: QNetworkRequest m_networkRequest; virtual bool handleMessage(const Message& cmd); - void applySettings(const DATVDemodSettings& settings, bool force = false); + void applySettings(const QList& settingsKeys, const DATVDemodSettings& settings, bool force = false); void webapiFormatChannelReport(SWGSDRangel::SWGChannelReport& response); - void webapiReverseSendSettings(QList& channelSettingsKeys, const DATVDemodSettings& settings, bool force); + void webapiReverseSendSettings(const QList& channelSettingsKeys, const DATVDemodSettings& settings, bool force); void sendChannelSettings( const QList& pipes, - QList& channelSettingsKeys, + const QList& channelSettingsKeys, const DATVDemodSettings& settings, bool force ); void webapiFormatChannelSettings( - QList& channelSettingsKeys, + const QList& channelSettingsKeys, SWGSDRangel::SWGChannelSettings *swgChannelSettings, const DATVDemodSettings& settings, bool force diff --git a/plugins/channelrx/demoddatv/datvdemodbaseband.cpp b/plugins/channelrx/demoddatv/datvdemodbaseband.cpp index 33414e329..980e99d64 100644 --- a/plugins/channelrx/demoddatv/datvdemodbaseband.cpp +++ b/plugins/channelrx/demoddatv/datvdemodbaseband.cpp @@ -128,7 +128,7 @@ bool DATVDemodBaseband::handleMessage(const Message& cmd) MsgConfigureDATVDemodBaseband& cfg = (MsgConfigureDATVDemodBaseband&) cmd; qDebug() << "DATVDemodBaseband::handleMessage: MsgConfigureDATVDemodBaseband"; - applySettings(cfg.getSettings(), cfg.getForce()); + applySettings(cfg.getSettingsKeys(), cfg.getSettings(), cfg.getForce()); return true; } @@ -149,12 +149,12 @@ bool DATVDemodBaseband::handleMessage(const Message& cmd) } } -void DATVDemodBaseband::applySettings(const DATVDemodSettings& settings, bool force) +void DATVDemodBaseband::applySettings(const QStringList& settingsKeys, const DATVDemodSettings& settings, bool force) { - qDebug("DATVDemodBaseband::applySettings"); + qDebug() << "DATVDemodBaseband::applySettings" << settings.getDebugString(settingsKeys, force); - if ((settings.m_centerFrequency != m_settings.m_centerFrequency) || - (settings.m_symbolRate != m_settings.m_symbolRate) || force) + if ((settingsKeys.contains("centerFrequency") && (settings.m_centerFrequency != m_settings.m_centerFrequency)) || + (settingsKeys.contains("symbolRate") && (settings.m_symbolRate != m_settings.m_symbolRate)) || force) { unsigned int desiredSampleRate = 2 * settings.m_symbolRate; // m_channelizer->getBasebandSampleRate(); m_channelizer->setChannelization(desiredSampleRate, settings.m_centerFrequency); @@ -162,15 +162,20 @@ void DATVDemodBaseband::applySettings(const DATVDemodSettings& settings, bool fo m_sink->applyChannelSettings(m_channelizer->getChannelSampleRate(), m_channelizer->getChannelFrequencyOffset()); } - 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); audioDeviceManager->addAudioSink(m_sink->getAudioFifo(), getInputMessageQueue(), audioDeviceIndex); } - 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 DATVDemodBaseband::getChannelSampleRate() const diff --git a/plugins/channelrx/demoddatv/datvdemodbaseband.h b/plugins/channelrx/demoddatv/datvdemodbaseband.h index 23ca473cf..0b28c0993 100644 --- a/plugins/channelrx/demoddatv/datvdemodbaseband.h +++ b/plugins/channelrx/demoddatv/datvdemodbaseband.h @@ -41,20 +41,23 @@ public: public: const DATVDemodSettings& getSettings() const { return m_settings; } + const QStringList& getSettingsKeys() const { return m_settingsKeys; } bool getForce() const { return m_force; } - static MsgConfigureDATVDemodBaseband* create(const DATVDemodSettings& settings, bool force) + static MsgConfigureDATVDemodBaseband* create(const QStringList& settingsKeys, const DATVDemodSettings& settings, bool force) { - return new MsgConfigureDATVDemodBaseband(settings, force); + return new MsgConfigureDATVDemodBaseband(settingsKeys, settings, force); } private: DATVDemodSettings m_settings; + QStringList m_settingsKeys; bool m_force; - MsgConfigureDATVDemodBaseband(const DATVDemodSettings& settings, bool force) : + MsgConfigureDATVDemodBaseband(const QStringList& settingsKeys, const DATVDemodSettings& settings, bool force) : Message(), m_settings(settings), + m_settingsKeys(settingsKeys), m_force(force) { } }; @@ -106,7 +109,7 @@ private: QRecursiveMutex m_mutex; bool handleMessage(const Message& cmd); - void applySettings(const DATVDemodSettings& settings, bool force = false); + void applySettings(const QStringList& settingsKeys, const DATVDemodSettings& settings, bool force = false); private slots: void handleInputMessages(); diff --git a/plugins/channelrx/demoddatv/datvdemodgui.cpp b/plugins/channelrx/demoddatv/datvdemodgui.cpp index 6fa1805f0..b2df4bd4a 100644 --- a/plugins/channelrx/demoddatv/datvdemodgui.cpp +++ b/plugins/channelrx/demoddatv/datvdemodgui.cpp @@ -73,7 +73,7 @@ void DATVDemodGUI::resetToDefaults() { m_settings.resetToDefaults(); displaySettings(); - applySettings(true); + applySettings(QStringList(), true); } QByteArray DATVDemodGUI::serialize() const @@ -86,7 +86,7 @@ bool DATVDemodGUI::deserialize(const QByteArray& arrData) if (m_settings.deserialize(arrData)) { displaySettings(); - applySettings(true); + applySettings(QStringList(), true); return true; } else @@ -150,7 +150,7 @@ void DATVDemodGUI::channelMarkerChangedByCursor() { ui->deltaFrequency->setValue(m_channelMarker.getCenterFrequency()); m_settings.m_centerFrequency = m_channelMarker.getCenterFrequency(); - applySettings(); + applySettings(QStringList("centerFrequency")); } void DATVDemodGUI::channelMarkerHighlightedByCursor() @@ -165,7 +165,7 @@ void DATVDemodGUI::onWidgetRolled(QWidget* widget, bool rollDown) (void) rollDown; getRollupContents()->saveState(m_rollupState); - applySettings(); + applySettings(QStringList()); } void DATVDemodGUI::onMenuDialogCalled(const QPoint &p) @@ -210,7 +210,10 @@ void DATVDemodGUI::onMenuDialogCalled(const QPoint &p) updateIndexLabel(); } - applySettings(); + applySettings(QStringList({"title", "color", + "useReverseAPI", "reverseAPIAddress", "reverseAPIPort", + "reverseAPIDeviceIndex", "reverseAPIChannelIndex", + "streamIndex"})); } resetContextMenuType(); @@ -481,7 +484,7 @@ void DATVDemodGUI::displaySystemConfiguration() ui->cmbFEC->blockSignals(false); } -void DATVDemodGUI::applySettings(bool force) +void DATVDemodGUI::applySettings(const QStringList& settingsKeys, const bool force) { if (m_blnDoApplySettings) { @@ -492,7 +495,7 @@ void DATVDemodGUI::applySettings(bool force) QString msg = tr("DATVDemodGUI::applySettings: force: %1").arg(force ? "true" : "false"); m_settings.debug(msg); - DATVDemod::MsgConfigureDATVDemod* message = DATVDemod::MsgConfigureDATVDemod::create(m_settings, force); + DATVDemod::MsgConfigureDATVDemod* message = DATVDemod::MsgConfigureDATVDemod::create(settingsKeys, m_settings, force); m_datvDemod->getInputMessageQueue()->push(message); } } @@ -524,7 +527,7 @@ void DATVDemodGUI::audioSelect(const QPoint& p) if (audioSelect.m_selected) { m_settings.m_audioDeviceName = audioSelect.m_audioDeviceName; - applySettings(); + applySettings(QStringList("audioDeviceName")); } } @@ -538,7 +541,7 @@ void DATVDemodGUI::ldpcToolSelect(const QPoint& p) if (ldpcDialog.exec() == QDialog::Accepted) { m_settings.m_softLDPCMaxTrials = ldpcDialog.getMaxTrials(); - applySettings(); + applySettings(QStringList("softLDPCMaxTrials")); } } @@ -683,7 +686,7 @@ void DATVDemodGUI::on_cmbStandard_currentIndexChanged(int index) m_settings.validateSystemConfiguration(); displaySystemConfiguration(); - applySettings(); + applySettings(QStringList("standard")); } void DATVDemodGUI::on_cmbModulation_currentIndexChanged(int arg1) @@ -693,7 +696,7 @@ void DATVDemodGUI::on_cmbModulation_currentIndexChanged(int arg1) m_settings.m_modulation = DATVDemodSettings::getModulationFromStr(strModulation); m_settings.validateSystemConfiguration(); displaySystemConfiguration(); - + applySettings(QStringList("modulation")); //Viterbi only for BPSK and QPSK if ((m_settings.m_modulation != DATVDemodSettings::BPSK) && (m_settings.m_modulation != DATVDemodSettings::QPSK)) @@ -701,7 +704,7 @@ void DATVDemodGUI::on_cmbModulation_currentIndexChanged(int arg1) ui->chkViterbi->setChecked(false); } - applySettings(); + applySettings(QStringList("modulation")); } void DATVDemodGUI::on_cmbFEC_currentIndexChanged(int arg1) @@ -709,31 +712,31 @@ void DATVDemodGUI::on_cmbFEC_currentIndexChanged(int arg1) (void) arg1; QString strFEC = ui->cmbFEC->currentText(); m_settings.m_fec = DATVDemodSettings::getCodeRateFromStr(strFEC); - applySettings(); + applySettings(QStringList("fec")); } void DATVDemodGUI::on_softLDPC_clicked() { m_settings.m_softLDPC = ui->softLDPC->isChecked(); - applySettings(); + applySettings(QStringList("softLDPC")); } void DATVDemodGUI::on_maxBitflips_valueChanged(int value) { m_settings.m_maxBitflips = value; - applySettings(); + applySettings(QStringList("maxBitflips")); } void DATVDemodGUI::on_chkViterbi_clicked() { m_settings.m_viterbi = ui->chkViterbi->isChecked(); - applySettings(); + applySettings(QStringList("viterbi")); } void DATVDemodGUI::on_chkHardMetric_clicked() { m_settings.m_hardMetric = ui->chkHardMetric->isChecked(); - applySettings(); + applySettings(QStringList("hardMetric")); } void DATVDemodGUI::on_resetDefaults_clicked() @@ -747,7 +750,7 @@ void DATVDemodGUI::on_spiSymbolRate_valueChanged(int value) ui->datvStdSR->blockSignals(true); ui->datvStdSR->setValue(indexFromSymbolRate(value)); ui->datvStdSR->blockSignals(false); - applySettings(); + applySettings(QStringList("symbolRate")); } void DATVDemodGUI::on_datvStdSR_valueChanged(int value) @@ -761,19 +764,19 @@ void DATVDemodGUI::on_datvStdSR_valueChanged(int value) m_channelMarker.setBandwidth(m_settings.m_rfBandwidth); ui->rfBandwidth->blockSignals(false); ui->spiSymbolRate->blockSignals(false); - applySettings(); + applySettings(QStringList({"symbolRate", "rfBandwidth"})); } void DATVDemodGUI::on_spiNotchFilters_valueChanged(int value) { m_settings.m_notchFilters = value; - applySettings(); + applySettings(QStringList("notchFilters")); } void DATVDemodGUI::on_chkAllowDrift_clicked() { m_settings.m_allowDrift = ui->chkAllowDrift->isChecked(); - applySettings(); + applySettings(QStringList("allowDrift")); } void DATVDemodGUI::on_fullScreen_clicked() @@ -819,45 +822,45 @@ void DATVDemodGUI::on_deltaFrequency_changed(qint64 value) m_channelMarker.setCenterFrequency(value); m_settings.m_centerFrequency = m_channelMarker.getCenterFrequency(); updateAbsoluteCenterFrequency(); - applySettings(); + applySettings(QStringList("centerFrequency")); } void DATVDemodGUI::on_rfBandwidth_changed(qint64 value) { m_channelMarker.setBandwidth(value); m_settings.m_rfBandwidth = m_channelMarker.getBandwidth(); - applySettings(); + applySettings(QStringList("rfBandwidth")); } void DATVDemodGUI::on_chkFastlock_clicked() { m_settings.m_fastLock = ui->chkFastlock->isChecked(); - applySettings(); + applySettings(QStringList("fastLock")); } void DATVDemodGUI::on_audioMute_toggled(bool checked) { m_settings.m_audioMute = checked; - applySettings(); + applySettings(QStringList("audioMute")); } void DATVDemodGUI::on_videoMute_toggled(bool checked) { m_settings.m_videoMute = checked; - applySettings(); + applySettings(QStringList("videoMute")); } void DATVDemodGUI::on_audioVolume_valueChanged(int value) { ui->audioVolumeText->setText(tr("%1").arg(value)); m_settings.m_audioVolume = value; - applySettings(); + applySettings(QStringList("audioVolume")); } void DATVDemodGUI::on_udpTS_clicked(bool checked) { m_settings.m_udpTS = checked; - applySettings(); + applySettings(QStringList("udpTS")); } void DATVDemodGUI::on_StreamMetaDataChanged(DataTSMetaData2 *objMetaData) @@ -907,7 +910,7 @@ void DATVDemodGUI::on_playerEnable_clicked() connect(m_datvDemod->getUDPStream(), &DATVUDPStream::fifoData, this, &DATVDemodGUI::on_StreamDataAvailable); } - applySettings(); + applySettings(QStringList("playerEnable")); } void DATVDemodGUI::displayRRCParameters(bool blnVisible) @@ -929,25 +932,25 @@ void DATVDemodGUI::on_cmbFilter_currentIndexChanged(int index) } displayRRCParameters(index == 2); - applySettings(); + applySettings(QStringList("filter")); } void DATVDemodGUI::on_spiRollOff_valueChanged(int value) { m_settings.m_rollOff = ((float) value) / 100.0f; - applySettings(); + applySettings(QStringList("rollOff")); } void DATVDemodGUI::on_spiExcursion_valueChanged(int value) { m_settings.m_excursion = value; - applySettings(); + applySettings(QStringList("excursion")); } void DATVDemodGUI::on_udpTSAddress_editingFinished() { m_settings.m_udpTSAddress = ui->udpTSAddress->text(); - applySettings(); + applySettings(QStringList("udpTSAddress")); } void DATVDemodGUI::on_udpTSPort_editingFinished() @@ -961,7 +964,7 @@ void DATVDemodGUI::on_udpTSPort_editingFinished() m_settings.m_udpTSPort = udpPort; ui->udpTSPort->setText(tr("%1").arg(udpPort)); - applySettings(); + applySettings(QStringList("udpTSPort")); } void DATVDemodGUI::makeUIConnections() diff --git a/plugins/channelrx/demoddatv/datvdemodgui.h b/plugins/channelrx/demoddatv/datvdemodgui.h index 0c0453b7f..df94e00ff 100644 --- a/plugins/channelrx/demoddatv/datvdemodgui.h +++ b/plugins/channelrx/demoddatv/datvdemodgui.h @@ -143,7 +143,7 @@ private: virtual ~DATVDemodGUI(); void blockApplySettings(bool blnBlock); - void applySettings(bool force = false); + void applySettings(const QStringList& settingsKeys, bool force = false); void displaySettings(); void displaySystemConfiguration(); QString formatBytes(qint64 intBytes); diff --git a/plugins/channelrx/demoddatv/datvdemodsettings.cpp b/plugins/channelrx/demoddatv/datvdemodsettings.cpp index 73b9d5d26..bcb13058d 100644 --- a/plugins/channelrx/demoddatv/datvdemodsettings.cpp +++ b/plugins/channelrx/demoddatv/datvdemodsettings.cpp @@ -349,6 +349,228 @@ void DATVDemodSettings::validateSystemConfiguration() } } +void DATVDemodSettings::applySettings(const QStringList& settingsKeys, const DATVDemodSettings& settings) +{ + if (settingsKeys.contains("rgbColor")) { + m_rgbColor = settings.m_rgbColor; + } + if (settingsKeys.contains("title")) { + m_title = settings.m_title; + } + if (settingsKeys.contains("rfBandwidth")) { + m_rfBandwidth = settings.m_rfBandwidth; + } + if (settingsKeys.contains("centerFrequency")) { + m_centerFrequency = settings.m_centerFrequency; + } + if (settingsKeys.contains("standard")) { + m_standard = settings.m_standard; + } + if (settingsKeys.contains("modulation")) { + m_modulation = settings.m_modulation; + } + if (settingsKeys.contains("fec")) { + m_fec = settings.m_fec; + } + if (settingsKeys.contains("softLDPC")) { + m_softLDPC = settings.m_softLDPC; + } + if (settingsKeys.contains("softLDPCMaxTrials")) { + m_softLDPCMaxTrials = settings.m_softLDPCMaxTrials; + } + if (settingsKeys.contains("maxBitflips")) { + m_maxBitflips = settings.m_maxBitflips; + } + if (settingsKeys.contains("audioMute")) { + m_audioMute = settings.m_audioMute; + } + if (settingsKeys.contains("audioDeviceName")) { + m_audioDeviceName = settings.m_audioDeviceName; + } + if (settingsKeys.contains("symbolRate")) { + m_symbolRate = settings.m_symbolRate; + } + if (settingsKeys.contains("notchFilters")) { + m_notchFilters = settings.m_notchFilters; + } + if (settingsKeys.contains("allowDrift")) { + m_allowDrift = settings.m_allowDrift; + } + if (settingsKeys.contains("fastLock")) { + m_fastLock = settings.m_fastLock; + } + if (settingsKeys.contains("filter")) { + m_filter = settings.m_filter; + } + if (settingsKeys.contains("hardMetric")) { + m_hardMetric = settings.m_hardMetric; + } + if (settingsKeys.contains("rollOff")) { + m_rollOff = settings.m_rollOff; + } + if (settingsKeys.contains("viterbi")) { + m_viterbi = settings.m_viterbi; + } + if (settingsKeys.contains("excursion")) { + m_excursion = settings.m_excursion; + } + if (settingsKeys.contains("audioVolume")) { + m_audioVolume = settings.m_audioVolume; + } + if (settingsKeys.contains("videoMute")) { + m_videoMute = settings.m_videoMute; + } + if (settingsKeys.contains("udpTSAddress")) { + m_udpTSAddress = settings.m_udpTSAddress; + } + if (settingsKeys.contains("udpTSPort")) { + m_udpTSPort = settings.m_udpTSPort; + } + if (settingsKeys.contains("udpTS")) { + m_udpTS = settings.m_udpTS; + } + if (settingsKeys.contains("playerEnable")) { + m_playerEnable = settings.m_playerEnable; + } + if (settingsKeys.contains("streamIndex")) { + m_streamIndex = settings.m_streamIndex; + } + if (settingsKeys.contains("useReverseAPI")) { + m_useReverseAPI = settings.m_useReverseAPI; + } + if (settingsKeys.contains("reverseAPIAddress")) { + m_reverseAPIAddress = settings.m_reverseAPIAddress; + } + if (settingsKeys.contains("reverseAPIPort")) { + m_reverseAPIPort = settings.m_reverseAPIPort; + } + if (settingsKeys.contains("reverseAPIDeviceIndex")) { + m_reverseAPIDeviceIndex = settings.m_reverseAPIDeviceIndex; + } + if (settingsKeys.contains("reverseAPIChannelIndex")) { + m_reverseAPIChannelIndex = settings.m_reverseAPIChannelIndex; + } + if (settingsKeys.contains("workspaceIndex")) { + m_workspaceIndex = settings.m_workspaceIndex; + } + if (settingsKeys.contains("hidden")) { + m_hidden = settings.m_hidden; + } +} + +QString DATVDemodSettings::getDebugString(const QStringList& settingsKeys, bool force) const +{ + std::ostringstream ostr; + + if (settingsKeys.contains("rgbColor") || force) { + ostr << " m_rgbColor: " << m_rgbColor; + } + if (settingsKeys.contains("title") || force) { + ostr << " m_title: " << m_title.toStdString(); + } + if (settingsKeys.contains("rfBandwidth") || force) { + ostr << " m_rfBandwidth: " << m_rfBandwidth; + } + if (settingsKeys.contains("centerFrequency") || force) { + ostr << " m_centerFrequency: " << m_centerFrequency; + } + if (settingsKeys.contains("standard") || force) { + ostr << " m_standard: " << m_standard; + } + if (settingsKeys.contains("modulation") || force) { + ostr << " m_modulation: " << m_modulation; + } + if (settingsKeys.contains("fec") || force) { + ostr << " m_fec: " << m_fec; + } + if (settingsKeys.contains("softLDPC") || force) { + ostr << " m_softLDPC: " << m_softLDPC; + } + if (settingsKeys.contains("softLDPCMaxTrials") || force) { + ostr << " m_softLDPCMaxTrials: " << m_softLDPCMaxTrials; + } + if (settingsKeys.contains("maxBitflips") || force) { + ostr << " m_maxBitflips: " << m_maxBitflips; + } + if (settingsKeys.contains("audioMute") || force) { + ostr << " m_audioMute: " << m_audioMute; + } + if (settingsKeys.contains("audioDeviceName") || force) { + ostr << " m_audioDeviceName: " << m_audioDeviceName.toStdString(); + } + if (settingsKeys.contains("symbolRate") || force) { + ostr << " m_symbolRate: " << m_symbolRate; + } + if (settingsKeys.contains("notchFilters") || force) { + ostr << " m_notchFilters: " << m_notchFilters; + } + if (settingsKeys.contains("allowDrift") || force) { + ostr << " m_allowDrift: " << m_allowDrift; + } + if (settingsKeys.contains("fastLock") || force) { + ostr << " m_fastLock: " << m_fastLock; + } + if (settingsKeys.contains("filter") || force) { + ostr << " m_filter: " << m_filter; + } + if (settingsKeys.contains("hardMetric") || force) { + ostr << " m_hardMetric: " << m_hardMetric; + } + if (settingsKeys.contains("rollOff") || force) { + ostr << " m_rollOff: " << m_rollOff; + } + if (settingsKeys.contains("viterbi") || force) { + ostr << " m_viterbi: " << m_viterbi; + } + if (settingsKeys.contains("excursion") || force) { + ostr << " m_excursion: " << m_excursion; + } + if (settingsKeys.contains("audioVolume") || force) { + ostr << " m_audioVolume: " << m_audioVolume; + } + if (settingsKeys.contains("videoMute") || force) { + ostr << " m_videoMute: " << m_videoMute; + } + if (settingsKeys.contains("udpTSAddress") || force) { + ostr << " m_udpTSAddress: " << m_udpTSAddress.toStdString(); + } + if (settingsKeys.contains("udpTSPort") || force) { + ostr << " m_udpTSPort: " << m_udpTSPort; + } + if (settingsKeys.contains("udpTS") || force) { + ostr << " m_udpTS: " << m_udpTS; + } + if (settingsKeys.contains("playerEnable") || force) { + ostr << " m_playerEnable: " << m_playerEnable; + } + if (settingsKeys.contains("streamIndex") || force) { + ostr << " m_streamIndex: " << m_streamIndex; + } + if (settingsKeys.contains("useReverseAPI") || force) { + ostr << " m_useReverseAPI: " << m_useReverseAPI; + } + if (settingsKeys.contains("reverseAPIAddress") || force) { + ostr << " m_reverseAPIAddress: " << m_reverseAPIAddress.toStdString(); + } + if (settingsKeys.contains("reverseAPIPort") || force) { + ostr << " m_reverseAPIPort: " << m_reverseAPIPort; + } + if (settingsKeys.contains("reverseAPIDeviceIndex") || force) { + ostr << " m_reverseAPIDeviceIndex: " << m_reverseAPIDeviceIndex; + } + if (settingsKeys.contains("reverseAPIChannelIndex") || force) { + ostr << " m_reverseAPIChannelIndex: " << m_reverseAPIChannelIndex; + } + if (settingsKeys.contains("workspaceIndex") || force) { + ostr << " m_workspaceIndex: " << m_workspaceIndex; + } + if (settingsKeys.contains("hidden") || force) { + ostr << " m_hidden: " << m_hidden; + } + + return QString(ostr.str().c_str()); +} + DATVDemodSettings::DATVModulation DATVDemodSettings::getModulationFromStr(const QString& str) { if (str == "BPSK") { @@ -591,4 +813,3 @@ DATVDemodSettings::DATVModulation DATVDemodSettings::getModulationFromLeanDVBCod return DATVDemodSettings::DATVModulation::MOD_UNSET; } } - diff --git a/plugins/channelrx/demoddatv/datvdemodsettings.h b/plugins/channelrx/demoddatv/datvdemodsettings.h index 1d646bf01..d83c8ce5f 100644 --- a/plugins/channelrx/demoddatv/datvdemodsettings.h +++ b/plugins/channelrx/demoddatv/datvdemodsettings.h @@ -125,6 +125,8 @@ struct DATVDemodSettings void debug(const QString& msg) const; bool isDifferent(const DATVDemodSettings& other); // true if a change of settings should trigger DVB framework config update void validateSystemConfiguration(); + void applySettings(const QStringList& settingsKeys, const DATVDemodSettings& settings); + QString getDebugString(const QStringList& settingsKeys, bool force=false) const; static DATVModulation getModulationFromStr(const QString& str); static DATVCodeRate getCodeRateFromStr(const QString& str); diff --git a/plugins/channelrx/demoddatv/datvdemodsink.cpp b/plugins/channelrx/demoddatv/datvdemodsink.cpp index 25ded47ac..0ba3033e9 100644 --- a/plugins/channelrx/demoddatv/datvdemodsink.cpp +++ b/plugins/channelrx/demoddatv/datvdemodsink.cpp @@ -31,6 +31,9 @@ #include #include "datvdemodreport.h" +#ifndef SERVER_MODE +#include "datvideorender.h" +#endif const unsigned int DATVDemodSink::m_rfFilterFftLength = 512; @@ -68,9 +71,11 @@ DATVDemodSink::~DATVDemodSink() stopVideo(); CleanUpDATVFramework(); +#ifndef SERVER_MODE if (m_videoThread) { delete m_videoThread; } +#endif } void DATVDemodSink::stopVideo() @@ -100,6 +105,8 @@ void DATVDemodSink::SetVideoRender(DATVideoRender *screen) m_videoRender->setAudioFIFO(&m_audioFifo); m_videoThread = new DATVideoRenderThread(m_videoRender, m_videoStream); m_videoThread->setObjectName("vtDATVDemodSink"); +#else + (void) screen; #endif } @@ -1372,11 +1379,11 @@ void DATVDemodSink::applyChannelSettings(int channelSampleRate, int channelFrequ m_settings.m_centerFrequency = channelFrequencyOffset; if (callApplySettings) { - applySettings(m_settings, true); + applySettings(QStringList(), m_settings, true); } } -void DATVDemodSink::applySettings(const DATVDemodSettings& settings, bool force) +void DATVDemodSink::applySettings(const QStringList& settingsKeys, const DATVDemodSettings& settings, bool force) { QString msg = QObject::tr("DATVDemodSink::applySettings: force: %1").arg(force); settings.debug(msg); @@ -1388,21 +1395,21 @@ void DATVDemodSink::applySettings(const DATVDemodSettings& settings, bool force) } #ifndef SERVER_MODE - if ((settings.m_audioVolume) != (m_settings.m_audioVolume) || force) + if ((settingsKeys.contains("audioVolume") && (settings.m_audioVolume != m_settings.m_audioVolume)) || force) { if (m_videoRender) { m_videoRender->setAudioVolume(settings.m_audioVolume); } } - if ((settings.m_audioMute) != (m_settings.m_audioMute) || force) + if ((settingsKeys.contains("audioMute") && (settings.m_audioMute != m_settings.m_audioMute)) || force) { if (m_videoRender) { m_videoRender->setAudioMute(settings.m_audioMute); } } - if ((settings.m_videoMute) != (m_settings.m_videoMute) || force) + if ((settingsKeys.contains("videoMute") && (settings.m_videoMute != m_settings.m_videoMute)) || force) { if (m_videoRender) { m_videoRender->setVideoMute(settings.m_videoMute); @@ -1410,9 +1417,9 @@ void DATVDemodSink::applySettings(const DATVDemodSettings& settings, bool force) } #endif - if ((m_settings.m_rfBandwidth != settings.m_rfBandwidth) - || (m_settings.m_symbolRate != settings.m_symbolRate) - || (m_settings.m_centerFrequency != settings.m_centerFrequency) || force) + if (settingsKeys.contains("rfBandwidth") || + settingsKeys.contains("symbolRate") || + settingsKeys.contains("centerFrequency") || force) { m_interpolator.create(m_interpolatorPhaseSteps, m_channelSampleRate, settings.m_rfBandwidth / 2.2, m_interpolatorTapsPerPhase); m_interpolatorDistanceRemain = 0; @@ -1420,7 +1427,7 @@ void DATVDemodSink::applySettings(const DATVDemodSettings& settings, bool force) m_nco.setFreq(-(float) settings.m_centerFrequency, (float) m_channelSampleRate); } - if ((m_settings.m_udpTS != settings.m_udpTS) || force) + if ((settingsKeys.contains("udpTS") && (m_settings.m_udpTS != settings.m_udpTS)) || force) { m_udpStream.setActive(settings.m_udpTS); @@ -1429,17 +1436,17 @@ void DATVDemodSink::applySettings(const DATVDemodSettings& settings, bool force) } } - if ((m_settings.m_symbolRate != settings.m_symbolRate) || force) { + if ((settingsKeys.contains("symbolRate") && (m_settings.m_symbolRate != settings.m_symbolRate)) || force) { if (r_videoplayer) { r_videoplayer->setSymbolRate(settings.m_symbolRate); } } - if ((m_settings.m_udpTSAddress != settings.m_udpTSAddress) || force) { + if ((settingsKeys.contains("udpTSAddress") && (m_settings.m_udpTSAddress != settings.m_udpTSAddress)) || force) { m_udpStream.setAddress(settings.m_udpTSAddress); } - if ((m_settings.m_udpTSPort != settings.m_udpTSPort) || force) { + if ((settingsKeys.contains("udpTSPort") && (m_settings.m_udpTSPort != settings.m_udpTSPort)) || force) { m_udpStream.setPort(settings.m_udpTSPort); } @@ -1447,7 +1454,11 @@ void DATVDemodSink::applySettings(const DATVDemodSettings& settings, bool force) m_blnNeedConfigUpdate = true; } - m_settings = settings; + if (force) { + m_settings = settings; + } else { + m_settings.applySettings(settingsKeys, settings); + } } int DATVDemodSink::getLeanDVBCodeRateFromDATV(DATVDemodSettings::DATVCodeRate datvCodeRate) diff --git a/plugins/channelrx/demoddatv/datvdemodsink.h b/plugins/channelrx/demoddatv/datvdemodsink.h index 7670b1c9e..d4a255421 100644 --- a/plugins/channelrx/demoddatv/datvdemodsink.h +++ b/plugins/channelrx/demoddatv/datvdemodsink.h @@ -115,7 +115,7 @@ public: return r_cnrMeter ? r_cnrMeter->m_nbAvg : 1; } - void applySettings(const DATVDemodSettings& settings, bool force = false); + void applySettings(const QStringList& settingsKeys, const DATVDemodSettings& settings, bool force = false); void applyChannelSettings(int channelSampleRate, int channelFrequencyOffset, bool force = false); private: @@ -316,7 +316,7 @@ private: leansdr::datvvideoplayer *r_videoplayer; //CONSTELLATION -#ifndef SERVER_MODE +#ifndef SERVER_MODE leansdr::datvconstellation *r_scope_symbols; leansdr::datvdvbs2constellation *r_scope_symbols_dvbs2; #endif diff --git a/plugins/channelrx/demoddsc/dscdemod.cpp b/plugins/channelrx/demoddsc/dscdemod.cpp index 41b632156..aa11eab92 100644 --- a/plugins/channelrx/demoddsc/dscdemod.cpp +++ b/plugins/channelrx/demoddsc/dscdemod.cpp @@ -58,7 +58,7 @@ DSCDemod::DSCDemod(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); @@ -132,7 +132,7 @@ void DSCDemod::start() DSPSignalNotification *dspMsg = new DSPSignalNotification(m_basebandSampleRate, m_centerFrequency); m_basebandSink->getInputMessageQueue()->push(dspMsg); - DSCDemodBaseband::MsgConfigureDSCDemodBaseband *msg = DSCDemodBaseband::MsgConfigureDSCDemodBaseband::create(m_settings, true); + DSCDemodBaseband::MsgConfigureDSCDemodBaseband *msg = DSCDemodBaseband::MsgConfigureDSCDemodBaseband::create(QStringList(), m_settings, true); m_basebandSink->getInputMessageQueue()->push(msg); } @@ -150,7 +150,7 @@ bool DSCDemod::handleMessage(const Message& cmd) { MsgConfigureDSCDemod& cfg = (MsgConfigureDSCDemod&) cmd; qDebug() << "DSCDemod::handleMessage: MsgConfigureDSCDemod"; - applySettings(cfg.getSettings(), cfg.getForce()); + applySettings(cfg.getSettingsKeys(), cfg.getSettings(), cfg.getForce()); return true; } @@ -257,64 +257,20 @@ void DSCDemod::setCenterFrequency(qint64 frequency) { DSCDemodSettings settings = m_settings; settings.m_inputFrequencyOffset = frequency; - applySettings(settings, false); + applySettings(QStringList("inputFrequencyOffset"), settings, false); if (m_guiMessageQueue) // forward to GUI if any { - MsgConfigureDSCDemod *msgToGUI = MsgConfigureDSCDemod::create(settings, false); + MsgConfigureDSCDemod *msgToGUI = MsgConfigureDSCDemod::create(QStringList("inputFrequencyOffset"), settings, false); m_guiMessageQueue->push(msgToGUI); } } -void DSCDemod::applySettings(const DSCDemodSettings& settings, bool force) +void DSCDemod::applySettings(const QStringList& settingsKeys, const DSCDemodSettings& settings, bool force) { - qDebug() << "DSCDemod::applySettings:" - << " m_logEnabled: " << settings.m_logEnabled - << " m_logFilename: " << settings.m_logFilename - << " 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() << "DSCDemod::applySettings:" << settings.getDebugString(settingsKeys, force); - QList reverseAPIKeys; - - if ((settings.m_inputFrequencyOffset != m_settings.m_inputFrequencyOffset) || force) { - reverseAPIKeys.append("inputFrequencyOffset"); - } - if ((settings.m_rfBandwidth != m_settings.m_rfBandwidth) || force) { - reverseAPIKeys.append("rfBandwidth"); - } - if ((settings.m_filterInvalid != m_settings.m_filterInvalid) || force) { - reverseAPIKeys.append("filterInvalid"); - } - if ((settings.m_filterColumn != m_settings.m_filterColumn) || force) { - reverseAPIKeys.append("filterColumn"); - } - if ((settings.m_filter != m_settings.m_filter) || force) { - reverseAPIKeys.append("filter"); - } - if ((settings.m_udpEnabled != m_settings.m_udpEnabled) || force) { - reverseAPIKeys.append("udpEnabled"); - } - 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_logFilename != m_settings.m_logFilename) || force) { - reverseAPIKeys.append("logFilename"); - } - if ((settings.m_logEnabled != m_settings.m_logEnabled) || force) { - reverseAPIKeys.append("logEnabled"); - } - if ((settings.m_useFileTime != m_settings.m_useFileTime) || force) { - reverseAPIKeys.append("useFileTime"); - } - if (m_settings.m_streamIndex != settings.m_streamIndex) + if (settingsKeys.contains("streamIndex") && (settings.m_streamIndex != m_settings.m_streamIndex)) { if (m_deviceAPI->getSampleMIMO()) // change of stream is possible for MIMO devices only { @@ -325,25 +281,23 @@ void DSCDemod::applySettings(const DSCDemodSettings& settings, bool force) m_settings.m_streamIndex = settings.m_streamIndex; // make sure ChannelAPI::getStreamIndex() is consistent emit streamIndexChanged(settings.m_streamIndex); } - - reverseAPIKeys.append("streamIndex"); } - DSCDemodBaseband::MsgConfigureDSCDemodBaseband *msg = DSCDemodBaseband::MsgConfigureDSCDemodBaseband::create(settings, force); + DSCDemodBaseband::MsgConfigureDSCDemodBaseband *msg = DSCDemodBaseband::MsgConfigureDSCDemodBaseband::create(settingsKeys, settings, force); m_basebandSink->getInputMessageQueue()->push(msg); if (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") && (settings.m_useReverseAPI != m_settings.m_useReverseAPI)) && settings.m_useReverseAPI) || + (settingsKeys.contains("reverseAPIAddress") && (settings.m_reverseAPIAddress != m_settings.m_reverseAPIAddress)) || + (settingsKeys.contains("reverseAPIPort") && (settings.m_reverseAPIPort != m_settings.m_reverseAPIPort)) || + (settingsKeys.contains("reverseAPIDeviceIndex") && (settings.m_reverseAPIDeviceIndex != m_settings.m_reverseAPIDeviceIndex)) || + (settingsKeys.contains("reverseAPIChannelIndex") && (settings.m_reverseAPIChannelIndex != m_settings.m_reverseAPIChannelIndex)); + webapiReverseSendSettings(settingsKeys, settings, fullUpdate || force); } - if ((settings.m_logEnabled != m_settings.m_logEnabled) - || (settings.m_logFilename != m_settings.m_logFilename) + if ((settingsKeys.contains("logEnabled") && (settings.m_logEnabled != m_settings.m_logEnabled)) + || (settingsKeys.contains("logFilename") && (settings.m_logFilename != m_settings.m_logFilename)) || force) { if (m_logFile.isOpen()) @@ -372,7 +326,11 @@ void DSCDemod::applySettings(const DSCDemodSettings& settings, bool force) } } - m_settings = settings; + if (force) { + m_settings = settings; + } else { + m_settings.applySettings(settingsKeys, settings); + } } void DSCDemod::sendSampleRateToDemodAnalyzer() @@ -403,14 +361,14 @@ bool DSCDemod::deserialize(const QByteArray& data) { if (m_settings.deserialize(data)) { - MsgConfigureDSCDemod *msg = MsgConfigureDSCDemod::create(m_settings, true); + MsgConfigureDSCDemod *msg = MsgConfigureDSCDemod::create(QStringList(), m_settings, true); m_inputMessageQueue.push(msg); return true; } else { m_settings.resetToDefaults(); - MsgConfigureDSCDemod *msg = MsgConfigureDSCDemod::create(m_settings, true); + MsgConfigureDSCDemod *msg = MsgConfigureDSCDemod::create(QStringList(), m_settings, true); m_inputMessageQueue.push(msg); return false; } @@ -446,13 +404,13 @@ int DSCDemod::webapiSettingsPutPatch( DSCDemodSettings settings = m_settings; webapiUpdateChannelSettings(settings, channelSettingsKeys, response); - MsgConfigureDSCDemod *msg = MsgConfigureDSCDemod::create(settings, force); + MsgConfigureDSCDemod *msg = MsgConfigureDSCDemod::create(channelSettingsKeys, settings, force); m_inputMessageQueue.push(msg); qDebug("DSCDemod::webapiSettingsPutPatch: forward to GUI: %p", m_guiMessageQueue); if (m_guiMessageQueue) // forward to GUI if any { - MsgConfigureDSCDemod *msgToGUI = MsgConfigureDSCDemod::create(settings, force); + MsgConfigureDSCDemod *msgToGUI = MsgConfigureDSCDemod::create(channelSettingsKeys, settings, force); m_guiMessageQueue->push(msgToGUI); } @@ -631,7 +589,7 @@ void DSCDemod::webapiFormatChannelReport(SWGSDRangel::SWGChannelReport& response response.getDscDemodReport()->setChannelSampleRate(m_basebandSink->getChannelSampleRate()); } -void DSCDemod::webapiReverseSendSettings(QList& channelSettingsKeys, const DSCDemodSettings& settings, bool force) +void DSCDemod::webapiReverseSendSettings(const QList& channelSettingsKeys, const DSCDemodSettings& settings, bool force) { SWGSDRangel::SWGChannelSettings *swgChannelSettings = new SWGSDRangel::SWGChannelSettings(); webapiFormatChannelSettings(channelSettingsKeys, swgChannelSettings, settings, force); @@ -657,7 +615,7 @@ void DSCDemod::webapiReverseSendSettings(QList& channelSettingsKeys, co } void DSCDemod::webapiFormatChannelSettings( - QList& channelSettingsKeys, + const QList& channelSettingsKeys, SWGSDRangel::SWGChannelSettings *swgChannelSettings, const DSCDemodSettings& settings, bool force diff --git a/plugins/channelrx/demoddsc/dscdemod.h b/plugins/channelrx/demoddsc/dscdemod.h index e06b3bde5..b374aa66c 100644 --- a/plugins/channelrx/demoddsc/dscdemod.h +++ b/plugins/channelrx/demoddsc/dscdemod.h @@ -53,20 +53,23 @@ public: public: const DSCDemodSettings& getSettings() const { return m_settings; } + const QStringList& getSettingsKeys() const { return m_settingsKeys; } bool getForce() const { return m_force; } - static MsgConfigureDSCDemod* create(const DSCDemodSettings& settings, bool force) + static MsgConfigureDSCDemod* create(const QStringList& settingsKeys, const DSCDemodSettings& settings, bool force) { - return new MsgConfigureDSCDemod(settings, force); + return new MsgConfigureDSCDemod(settingsKeys, settings, force); } private: DSCDemodSettings m_settings; + QStringList m_settingsKeys; bool m_force; - MsgConfigureDSCDemod(const DSCDemodSettings& settings, bool force) : + MsgConfigureDSCDemod(const QStringList& settingsKeys, const DSCDemodSettings& settings, bool force) : Message(), m_settings(settings), + m_settingsKeys(settingsKeys), m_force(force) { } }; @@ -184,11 +187,11 @@ private: QNetworkRequest m_networkRequest; virtual bool handleMessage(const Message& cmd); - void applySettings(const DSCDemodSettings& settings, bool force = false); + void applySettings(const QStringList& settingsKeys, const DSCDemodSettings& settings, bool force = false); void sendSampleRateToDemodAnalyzer(); - void webapiReverseSendSettings(QList& channelSettingsKeys, const DSCDemodSettings& settings, bool force); + void webapiReverseSendSettings(const QList& channelSettingsKeys, const DSCDemodSettings& settings, bool force); void webapiFormatChannelSettings( - QList& channelSettingsKeys, + const QList& channelSettingsKeys, SWGSDRangel::SWGChannelSettings *swgChannelSettings, const DSCDemodSettings& settings, bool force @@ -202,4 +205,3 @@ private slots: }; #endif // INCLUDE_DSCDEMOD_H - diff --git a/plugins/channelrx/demoddsc/dscdemodbaseband.cpp b/plugins/channelrx/demoddsc/dscdemodbaseband.cpp index 612028414..d8eed0eda 100644 --- a/plugins/channelrx/demoddsc/dscdemodbaseband.cpp +++ b/plugins/channelrx/demoddsc/dscdemodbaseband.cpp @@ -136,7 +136,7 @@ bool DSCDemodBaseband::handleMessage(const Message& cmd) MsgConfigureDSCDemodBaseband& cfg = (MsgConfigureDSCDemodBaseband&) cmd; qDebug() << "DSCDemodBaseband::handleMessage: MsgConfigureDSCDemodBaseband"; - applySettings(cfg.getSettings(), cfg.getForce()); + applySettings(cfg.getSettingsKeys(), cfg.getSettings(), cfg.getForce()); return true; } @@ -157,17 +157,21 @@ bool DSCDemodBaseband::handleMessage(const Message& cmd) } } -void DSCDemodBaseband::applySettings(const DSCDemodSettings& settings, bool force) +void DSCDemodBaseband::applySettings(const QStringList& settingsKeys, const DSCDemodSettings& 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(DSCDemodSettings::DSCDEMOD_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); + } } int DSCDemodBaseband::getChannelSampleRate() const @@ -180,4 +184,3 @@ void DSCDemodBaseband::setBasebandSampleRate(int sampleRate) m_channelizer->setBasebandSampleRate(sampleRate); m_sink.applyChannelSettings(m_channelizer->getChannelSampleRate(), m_channelizer->getChannelFrequencyOffset()); } - diff --git a/plugins/channelrx/demoddsc/dscdemodbaseband.h b/plugins/channelrx/demoddsc/dscdemodbaseband.h index 28dde039f..9af9a773a 100644 --- a/plugins/channelrx/demoddsc/dscdemodbaseband.h +++ b/plugins/channelrx/demoddsc/dscdemodbaseband.h @@ -44,20 +44,23 @@ public: public: const DSCDemodSettings& getSettings() const { return m_settings; } + const QStringList& getSettingsKeys() const { return m_settingsKeys; } bool getForce() const { return m_force; } - static MsgConfigureDSCDemodBaseband* create(const DSCDemodSettings& settings, bool force) + static MsgConfigureDSCDemodBaseband* create(const QStringList& settingsKeys, const DSCDemodSettings& settings, bool force) { - return new MsgConfigureDSCDemodBaseband(settings, force); + return new MsgConfigureDSCDemodBaseband(settingsKeys, settings, force); } private: DSCDemodSettings m_settings; + QStringList m_settingsKeys; bool m_force; - MsgConfigureDSCDemodBaseband(const DSCDemodSettings& settings, bool force) : + MsgConfigureDSCDemodBaseband(const QStringList& settingsKeys, const DSCDemodSettings& settings, bool force) : Message(), m_settings(settings), + m_settingsKeys(settingsKeys), m_force(force) { } }; @@ -93,7 +96,7 @@ private: bool handleMessage(const Message& cmd); void calculateOffset(DSCDemodSink *sink); - void applySettings(const DSCDemodSettings& settings, bool force = false); + void applySettings(const QStringList& settingsKeys, const DSCDemodSettings& settings, bool force = false); private slots: void handleInputMessages(); @@ -101,4 +104,3 @@ private slots: }; #endif // INCLUDE_DSCDEMODBASEBAND_H - diff --git a/plugins/channelrx/demoddsc/dscdemodgui.cpp b/plugins/channelrx/demoddsc/dscdemodgui.cpp index 1869456fb..f4b7cfe1c 100644 --- a/plugins/channelrx/demoddsc/dscdemodgui.cpp +++ b/plugins/channelrx/demoddsc/dscdemodgui.cpp @@ -153,7 +153,7 @@ void DSCDemodGUI::resetToDefaults() { m_settings.resetToDefaults(); displaySettings(); - applySettings(true); + applySettings(QStringList(), true); } QByteArray DSCDemodGUI::serialize() const @@ -165,7 +165,7 @@ bool DSCDemodGUI::deserialize(const QByteArray& data) { if(m_settings.deserialize(data)) { displaySettings(); - applySettings(true); + applySettings(QStringList(), true); return true; } else { resetToDefaults(); @@ -401,7 +401,7 @@ void DSCDemodGUI::channelMarkerChangedByCursor() { ui->deltaFrequency->setValue(m_channelMarker.getCenterFrequency()); m_settings.m_inputFrequencyOffset = m_channelMarker.getCenterFrequency(); - applySettings(); + applySettings(QStringList({"inputFrequencyOffset"})); } void DSCDemodGUI::channelMarkerHighlightedByCursor() @@ -414,28 +414,28 @@ void DSCDemodGUI::on_deltaFrequency_changed(qint64 value) m_channelMarker.setCenterFrequency(value); m_settings.m_inputFrequencyOffset = m_channelMarker.getCenterFrequency(); updateAbsoluteCenterFrequency(); - applySettings(); + applySettings(QStringList({"inputFrequencyOffset"})); } void DSCDemodGUI::on_filterInvalid_clicked(bool checked) { m_settings.m_filterInvalid = checked; filter(); - applySettings(); + applySettings(QStringList({"filterInvalid"})); } void DSCDemodGUI::on_filterColumn_currentIndexChanged(int index) { m_settings.m_filterColumn = index; filter(); - applySettings(); + applySettings(QStringList({"filterColumn"})); } void DSCDemodGUI::on_filter_editingFinished() { m_settings.m_filter = ui->filter->text(); filter(); - applySettings(); + applySettings(QStringList({"filter"})); } void DSCDemodGUI::on_clearTable_clicked() @@ -446,19 +446,19 @@ void DSCDemodGUI::on_clearTable_clicked() void DSCDemodGUI::on_udpEnabled_clicked(bool checked) { m_settings.m_udpEnabled = checked; - applySettings(); + applySettings(QStringList({"udpEnabled"})); } void DSCDemodGUI::on_udpAddress_editingFinished() { m_settings.m_udpAddress = ui->udpAddress->text(); - applySettings(); + applySettings(QStringList({"udpAddress"})); } void DSCDemodGUI::on_udpPort_editingFinished() { m_settings.m_udpPort = ui->udpPort->text().toInt(); - applySettings(); + applySettings(QStringList({"udpPort"})); } void DSCDemodGUI::filterRow(int row) @@ -496,7 +496,7 @@ void DSCDemodGUI::onWidgetRolled(QWidget* widget, bool rollDown) (void) rollDown; getRollupContents()->saveState(m_rollupState); - applySettings(); + applySettings(QStringList()); } void DSCDemodGUI::onMenuDialogCalled(const QPoint &p) @@ -541,7 +541,16 @@ void DSCDemodGUI::onMenuDialogCalled(const QPoint &p) updateIndexLabel(); } - applySettings(); + applySettings(QStringList({ + "rgbColor", + "title", + "useReverseAPI", + "reverseAPIAddress", + "reverseAPIPort", + "reverseAPIDeviceIndex", + "reverseAPIChannelIndex", + "streamIndex" + })); } resetContextMenuType(); @@ -667,7 +676,7 @@ DSCDemodGUI::DSCDemodGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Baseban displaySettings(); makeUIConnections(); - applySettings(true); + applySettings(QStringList(), true); m_resizer.enableChildMouseTracking(); } @@ -975,11 +984,11 @@ void DSCDemodGUI::blockApplySettings(bool block) m_doApplySettings = !block; } -void DSCDemodGUI::applySettings(bool force) +void DSCDemodGUI::applySettings(const QStringList& settingsKeys, bool force) { if (m_doApplySettings) { - DSCDemod::MsgConfigureDSCDemod* message = DSCDemod::MsgConfigureDSCDemod::create( m_settings, force); + DSCDemod::MsgConfigureDSCDemod* message = DSCDemod::MsgConfigureDSCDemod::create(settingsKeys, m_settings, force); m_dscDemod->getInputMessageQueue()->push(message); } } @@ -1070,7 +1079,7 @@ void DSCDemodGUI::tick() void DSCDemodGUI::on_feed_clicked(bool checked) { m_settings.m_feed = checked; - applySettings(); + applySettings(QStringList({"feed"})); } void DSCDemodGUI::on_feed_rightClicked(const QPoint &point) @@ -1085,7 +1094,7 @@ void DSCDemodGUI::on_feed_rightClicked(const QPoint &point) void DSCDemodGUI::on_logEnable_clicked(bool checked) { m_settings.m_logEnabled = checked; - applySettings(); + applySettings(QStringList({"logEnabled"})); } void DSCDemodGUI::on_logFilename_clicked() @@ -1101,7 +1110,7 @@ void DSCDemodGUI::on_logFilename_clicked() { m_settings.m_logFilename = fileNames[0]; ui->logFilename->setToolTip(QString(".csv log filename: %1").arg(m_settings.m_logFilename)); - applySettings(); + applySettings(QStringList({"logFilename"})); } } } @@ -1179,7 +1188,7 @@ void DSCDemodGUI::on_logOpen_clicked() void DSCDemodGUI::on_useFileTime_toggled(bool checked) { m_settings.m_useFileTime = checked; - applySettings(); + applySettings(QStringList({"useFileTime"})); } void DSCDemodGUI::makeUIConnections() diff --git a/plugins/channelrx/demoddsc/dscdemodgui.h b/plugins/channelrx/demoddsc/dscdemodgui.h index fe79df7e2..127eb9dc6 100644 --- a/plugins/channelrx/demoddsc/dscdemodgui.h +++ b/plugins/channelrx/demoddsc/dscdemodgui.h @@ -121,7 +121,7 @@ private: virtual ~DSCDemodGUI(); void blockApplySettings(bool block); - void applySettings(bool force = false); + void applySettings(const QStringList& settingsKeys, bool force = false); void displaySettings(); void messageReceived(const DSCMessage& message, int errors, float rssi); bool handleMessage(const Message& message); @@ -168,4 +168,3 @@ private slots: }; #endif // INCLUDE_DSCDEMODGUI_H - diff --git a/plugins/channelrx/demoddsc/dscdemodsettings.cpp b/plugins/channelrx/demoddsc/dscdemodsettings.cpp index 41133af99..23d1d215f 100644 --- a/plugins/channelrx/demoddsc/dscdemodsettings.cpp +++ b/plugins/channelrx/demoddsc/dscdemodsettings.cpp @@ -208,3 +208,146 @@ bool DSCDemodSettings::deserialize(const QByteArray& data) } } +void DSCDemodSettings::applySettings(const QStringList& settingsKeys, const DSCDemodSettings& settings) +{ + if (settingsKeys.contains("inputFrequencyOffset")) { + m_inputFrequencyOffset = settings.m_inputFrequencyOffset; + } + if (settingsKeys.contains("rfBandwidth")) { + m_rfBandwidth = settings.m_rfBandwidth; + } + if (settingsKeys.contains("filterInvalid")) { + m_filterInvalid = settings.m_filterInvalid; + } + if (settingsKeys.contains("filterColumn")) { + m_filterColumn = settings.m_filterColumn; + } + if (settingsKeys.contains("filter")) { + m_filter = settings.m_filter; + } + if (settingsKeys.contains("udpEnabled")) { + m_udpEnabled = settings.m_udpEnabled; + } + if (settingsKeys.contains("udpAddress")) { + m_udpAddress = settings.m_udpAddress; + } + if (settingsKeys.contains("udpPort")) { + m_udpPort = settings.m_udpPort; + } + if (settingsKeys.contains("feed")) { + m_feed = settings.m_feed; + } + if (settingsKeys.contains("rgbColor")) { + m_rgbColor = settings.m_rgbColor; + } + if (settingsKeys.contains("title")) { + m_title = settings.m_title; + } + if (settingsKeys.contains("streamIndex")) { + m_streamIndex = settings.m_streamIndex; + } + if (settingsKeys.contains("useReverseAPI")) { + m_useReverseAPI = settings.m_useReverseAPI; + } + if (settingsKeys.contains("reverseAPIAddress")) { + m_reverseAPIAddress = settings.m_reverseAPIAddress; + } + if (settingsKeys.contains("reverseAPIPort")) { + m_reverseAPIPort = settings.m_reverseAPIPort; + } + if (settingsKeys.contains("reverseAPIDeviceIndex")) { + m_reverseAPIDeviceIndex = settings.m_reverseAPIDeviceIndex; + } + if (settingsKeys.contains("reverseAPIChannelIndex")) { + m_reverseAPIChannelIndex = settings.m_reverseAPIChannelIndex; + } + if (settingsKeys.contains("logFilename")) { + m_logFilename = settings.m_logFilename; + } + if (settingsKeys.contains("logEnabled")) { + m_logEnabled = settings.m_logEnabled; + } + if (settingsKeys.contains("useFileTime")) { + m_useFileTime = settings.m_useFileTime; + } + if (settingsKeys.contains("workspaceIndex")) { + m_workspaceIndex = settings.m_workspaceIndex; + } + if (settingsKeys.contains("hidden")) { + m_hidden = settings.m_hidden; + } +} + +QString DSCDemodSettings::getDebugString(const QStringList& settingsKeys, bool force) const +{ + std::ostringstream ostr; + + if (settingsKeys.contains("inputFrequencyOffset") || force) { + ostr << " m_inputFrequencyOffset: " << m_inputFrequencyOffset; + } + if (settingsKeys.contains("rfBandwidth") || force) { + ostr << " m_rfBandwidth: " << m_rfBandwidth; + } + if (settingsKeys.contains("filterInvalid") || force) { + ostr << " m_filterInvalid: " << m_filterInvalid; + } + if (settingsKeys.contains("filterColumn") || force) { + ostr << " m_filterColumn: " << m_filterColumn; + } + if (settingsKeys.contains("filter") || force) { + ostr << " m_filter: " << m_filter.toStdString(); + } + if (settingsKeys.contains("udpEnabled") || force) { + ostr << " m_udpEnabled: " << m_udpEnabled; + } + if (settingsKeys.contains("udpAddress") || force) { + ostr << " m_udpAddress: " << m_udpAddress.toStdString(); + } + if (settingsKeys.contains("udpPort") || force) { + ostr << " m_udpPort: " << m_udpPort; + } + if (settingsKeys.contains("feed") || force) { + ostr << " m_feed: " << m_feed; + } + if (settingsKeys.contains("rgbColor") || force) { + ostr << " m_rgbColor: " << m_rgbColor; + } + if (settingsKeys.contains("title") || force) { + ostr << " m_title: " << m_title.toStdString(); + } + if (settingsKeys.contains("streamIndex") || force) { + ostr << " m_streamIndex: " << m_streamIndex; + } + if (settingsKeys.contains("useReverseAPI") || force) { + ostr << " m_useReverseAPI: " << m_useReverseAPI; + } + if (settingsKeys.contains("reverseAPIAddress") || force) { + ostr << " m_reverseAPIAddress: " << m_reverseAPIAddress.toStdString(); + } + if (settingsKeys.contains("reverseAPIPort") || force) { + ostr << " m_reverseAPIPort: " << m_reverseAPIPort; + } + if (settingsKeys.contains("reverseAPIDeviceIndex") || force) { + ostr << " m_reverseAPIDeviceIndex: " << m_reverseAPIDeviceIndex; + } + if (settingsKeys.contains("reverseAPIChannelIndex") || force) { + ostr << " m_reverseAPIChannelIndex: " << m_reverseAPIChannelIndex; + } + if (settingsKeys.contains("logFilename") || force) { + ostr << " m_logFilename: " << m_logFilename.toStdString(); + } + if (settingsKeys.contains("logEnabled") || force) { + ostr << " m_logEnabled: " << m_logEnabled; + } + if (settingsKeys.contains("useFileTime") || force) { + ostr << " m_useFileTime: " << m_useFileTime; + } + if (settingsKeys.contains("workspaceIndex") || force) { + ostr << " m_workspaceIndex: " << m_workspaceIndex; + } + if (settingsKeys.contains("hidden") || force) { + ostr << " m_hidden: " << m_hidden; + } + + return QString(ostr.str().c_str()); +} diff --git a/plugins/channelrx/demoddsc/dscdemodsettings.h b/plugins/channelrx/demoddsc/dscdemodsettings.h index ebbe7d30c..85d21afef 100644 --- a/plugins/channelrx/demoddsc/dscdemodsettings.h +++ b/plugins/channelrx/demoddsc/dscdemodsettings.h @@ -75,6 +75,8 @@ struct DSCDemodSettings void setScopeGUI(Serializable *scopeGUI) { m_scopeGUI = scopeGUI; } QByteArray serialize() const; bool deserialize(const QByteArray& data); + void applySettings(const QStringList& settingsKeys, const DSCDemodSettings& settings); + QString getDebugString(const QStringList& settingsKeys, bool force=false) const; }; #endif /* INCLUDE_DSCDEMODSETTINGS_H */ diff --git a/plugins/channelrx/demoddsc/dscdemodsink.cpp b/plugins/channelrx/demoddsc/dscdemodsink.cpp index 88ac70b0a..ae4f59693 100644 --- a/plugins/channelrx/demoddsc/dscdemodsink.cpp +++ b/plugins/channelrx/demoddsc/dscdemodsink.cpp @@ -45,7 +45,7 @@ DSCDemodSink::DSCDemodSink(DSCDemod *dscDemod) : m_sampleBuffer[i].resize(m_sampleBufferSize); } - applySettings(m_settings, true); + applySettings(QStringList(), m_settings, true); applyChannelSettings(m_channelSampleRate, m_channelFrequencyOffset, true); m_lowpassComplex1.create(301, DSCDemodSettings::DSCDEMOD_CHANNEL_SAMPLE_RATE, DSCDemodSettings::DSCDEMOD_BAUD_RATE * 1.1); @@ -316,13 +316,11 @@ void DSCDemodSink::init() m_messageBuffer = ""; } -void DSCDemodSink::applySettings(const DSCDemodSettings& settings, bool force) +void DSCDemodSink::applySettings(const QStringList& settingsKeys, const DSCDemodSettings& settings, bool force) { - qDebug() << "DSCDemodSink::applySettings:" - << " m_rfBandwidth: " << settings.m_rfBandwidth - << " force: " << force; + qDebug() << "DSCDemodSink::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) DSCDemodSettings::DSCDEMOD_CHANNEL_SAMPLE_RATE; @@ -343,7 +341,10 @@ void DSCDemodSink::applySettings(const DSCDemodSettings& settings, bool force) m_movMax1.setSize(m_samplesPerBit * 8); m_movMax2.setSize(m_samplesPerBit * 8); + m_settings = settings; + } + else + { + m_settings.applySettings(settingsKeys, settings); } - - m_settings = settings; } diff --git a/plugins/channelrx/demoddsc/dscdemodsink.h b/plugins/channelrx/demoddsc/dscdemodsink.h index 3a6cabb25..67acb2456 100644 --- a/plugins/channelrx/demoddsc/dscdemodsink.h +++ b/plugins/channelrx/demoddsc/dscdemodsink.h @@ -49,7 +49,7 @@ public: void setScopeSink(ScopeVis* scopeSink) { m_scopeSink = scopeSink; } void applyChannelSettings(int channelSampleRate, int channelFrequencyOffset, bool force = false); - void applySettings(const DSCDemodSettings& settings, bool force = false); + void applySettings(const QStringList& settingsKeys, const DSCDemodSettings& settings, bool force = false); void setMessageQueueToChannel(MessageQueue *messageQueue) { m_messageQueueToChannel = messageQueue; } void setChannel(ChannelAPI *channel) { m_channel = channel; } @@ -152,4 +152,3 @@ private: }; #endif // INCLUDE_DSCDEMODSINK_H - diff --git a/plugins/channelrx/demoddsd/dsddemod.cpp b/plugins/channelrx/demoddsd/dsddemod.cpp index feaba1705..c55de76be 100644 --- a/plugins/channelrx/demoddsd/dsddemod.cpp +++ b/plugins/channelrx/demoddsd/dsddemod.cpp @@ -68,7 +68,7 @@ DSDDemod::DSDDemod(DeviceAPI *deviceAPI) : qDebug("DSDDemod::DSDDemod"); setObjectName(m_channelId); - applySettings(m_settings, true); + applySettings(QStringList(), m_settings, true); m_deviceAPI->addChannelSink(this); m_deviceAPI->addChannelSinkAPI(this); @@ -183,7 +183,7 @@ void DSDDemod::start() m_thread->start(); - DSDDemodBaseband::MsgConfigureDSDDemodBaseband *msg = DSDDemodBaseband::MsgConfigureDSDDemodBaseband::create(m_settings, true); + DSDDemodBaseband::MsgConfigureDSDDemodBaseband *msg = DSDDemodBaseband::MsgConfigureDSDDemodBaseband::create(QStringList(), m_settings, true); m_basebandSink->getInputMessageQueue()->push(msg); m_running = true; @@ -220,7 +220,7 @@ bool DSDDemod::handleMessage(const Message& cmd) MsgConfigureDSDDemod& cfg = (MsgConfigureDSDDemod&) cmd; qDebug("DSDDemod::handleMessage: MsgConfigureDSDDemod: m_rfBandwidth"); - applySettings(cfg.getSettings(), cfg.getForce()); + applySettings(cfg.getSettingsKeys(), cfg.getSettings(), cfg.getForce()); return true; } @@ -262,111 +262,21 @@ void DSDDemod::setCenterFrequency(qint64 frequency) { DSDDemodSettings settings = m_settings; settings.m_inputFrequencyOffset = frequency; - applySettings(settings, false); + applySettings(QStringList("inputFrequencyOffset"), settings, false); if (m_guiMessageQueue) // forward to GUI if any { - MsgConfigureDSDDemod *msgToGUI = MsgConfigureDSDDemod::create(settings, false); + MsgConfigureDSDDemod *msgToGUI = MsgConfigureDSDDemod::create(QStringList("inputFrequencyOffset"), settings, false); m_guiMessageQueue->push(msgToGUI); } } -void DSDDemod::applySettings(const DSDDemodSettings& settings, bool force) +void DSDDemod::applySettings(const QStringList& settingsKeys, const DSDDemodSettings& settings, bool force) { - qDebug() << "DSDDemod::applySettings: " - << " m_inputFrequencyOffset: " << settings.m_inputFrequencyOffset - << " m_rfBandwidth: " << settings.m_rfBandwidth - << " m_fmDeviation: " << settings.m_fmDeviation - << " m_demodGain: " << settings.m_demodGain - << " m_volume: " << settings.m_volume - << " m_baudRate: " << settings.m_baudRate - << " m_squelchGate" << settings.m_squelchGate - << " m_squelch: " << settings.m_squelch - << " m_audioMute: " << settings.m_audioMute - << " m_enableCosineFiltering: " << settings.m_enableCosineFiltering - << " m_syncOrConstellation: " << settings.m_syncOrConstellation - << " m_slot1On: " << settings.m_slot1On - << " m_slot2On: " << settings.m_slot2On - << " m_tdmaStereo: " << settings.m_tdmaStereo - << " m_pllLock: " << settings.m_pllLock - << " m_highPassFilter: "<< settings.m_highPassFilter - << " m_audioDeviceName: " << settings.m_audioDeviceName - << " m_traceLengthMutliplier: " << settings.m_traceLengthMutliplier - << " m_traceStroke: " << settings.m_traceStroke - << " m_traceDecay: " << settings.m_traceDecay - << " m_streamIndex: " << settings.m_streamIndex - << " m_ambeFeatureIndex: " << settings.m_ambeFeatureIndex - << " m_connectAMBE: " << settings.m_connectAMBE - << " force: " << force; + qDebug() << "DSDDemod::applySettings: " << settings.getDebugString(settingsKeys, force); - QList reverseAPIKeys; - - if ((settings.m_inputFrequencyOffset != m_settings.m_inputFrequencyOffset) || force) { - reverseAPIKeys.append("inputFrequencyOffset"); - } - if ((settings.m_demodGain != m_settings.m_demodGain) || force) { - reverseAPIKeys.append("demodGain"); - } - if ((settings.m_audioMute != m_settings.m_audioMute) || force) { - reverseAPIKeys.append("audioMute"); - } - if ((settings.m_syncOrConstellation != m_settings.m_syncOrConstellation) || force) { - reverseAPIKeys.append("syncOrConstellation"); - } - if ((settings.m_slot1On != m_settings.m_slot1On) || force) { - reverseAPIKeys.append("slot1On"); - } - if ((settings.m_slot2On != m_settings.m_slot2On) || force) { - reverseAPIKeys.append("slot2On"); - } - if ((settings.m_demodGain != m_settings.m_demodGain) || force) { - reverseAPIKeys.append("demodGain"); - } - if ((settings.m_traceLengthMutliplier != m_settings.m_traceLengthMutliplier) || force) { - reverseAPIKeys.append("traceLengthMutliplier"); - } - 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_squelchGate != m_settings.m_squelchGate) || force) { - reverseAPIKeys.append("squelchGate"); - } - if ((settings.m_squelch != m_settings.m_squelch) || force) { - reverseAPIKeys.append("squelch"); - } - if ((settings.m_volume != m_settings.m_volume) || force) { - reverseAPIKeys.append("volume"); - } - if ((settings.m_baudRate != m_settings.m_baudRate) || force) { - reverseAPIKeys.append("baudRate"); - } - if ((settings.m_enableCosineFiltering != m_settings.m_enableCosineFiltering) || force) { - reverseAPIKeys.append("enableCosineFiltering"); - } - if ((settings.m_tdmaStereo != m_settings.m_tdmaStereo) || force) { - reverseAPIKeys.append("tdmaStereo"); - } - if ((settings.m_pllLock != m_settings.m_pllLock) || force) { - reverseAPIKeys.append("pllLock"); - } - if ((settings.m_highPassFilter != m_settings.m_highPassFilter) || force) { - reverseAPIKeys.append("highPassFilter"); - } - if ((settings.m_audioDeviceName != m_settings.m_audioDeviceName) || force) { - reverseAPIKeys.append("audioDeviceName"); - } - if ((settings.m_ambeFeatureIndex != m_settings.m_ambeFeatureIndex) || force) { - reverseAPIKeys.append("ambeFeatureIndex"); - } - if ((settings.m_connectAMBE != m_settings.m_connectAMBE) || force) { - reverseAPIKeys.append("connectAMBE"); - } - - if ((m_settings.m_connectAMBE != settings.m_connectAMBE) - || (m_settings.m_ambeFeatureIndex != settings.m_ambeFeatureIndex) || force) + if ((settingsKeys.contains("connectAMBE") && (m_settings.m_connectAMBE != settings.m_connectAMBE)) + || (settingsKeys.contains("ambeFeatureIndex") && (m_settings.m_ambeFeatureIndex != settings.m_ambeFeatureIndex)) || force) { if (settings.m_connectAMBE) { @@ -385,7 +295,7 @@ void DSDDemod::applySettings(const DSDDemodSettings& settings, bool force) } } - 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 { @@ -396,31 +306,29 @@ void DSDDemod::applySettings(const DSDDemodSettings& settings, bool force) m_settings.m_streamIndex = settings.m_streamIndex; // make sure ChannelAPI::getStreamIndex() is consistent emit streamIndexChanged(settings.m_streamIndex); } - - reverseAPIKeys.append("streamIndex"); } if (m_running) { - DSDDemodBaseband::MsgConfigureDSDDemodBaseband *msg = DSDDemodBaseband::MsgConfigureDSDDemodBaseband::create(settings, force); + DSDDemodBaseband::MsgConfigureDSDDemodBaseband *msg = DSDDemodBaseband::MsgConfigureDSDDemodBaseband::create(settingsKeys, settings, force); m_basebandSink->getInputMessageQueue()->push(msg); } if (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; @@ -435,14 +343,14 @@ bool DSDDemod::deserialize(const QByteArray& data) { if (m_settings.deserialize(data)) { - MsgConfigureDSDDemod *msg = MsgConfigureDSDDemod::create(m_settings, true); + MsgConfigureDSDDemod *msg = MsgConfigureDSDDemod::create(QStringList(), m_settings, true); m_inputMessageQueue.push(msg); return true; } else { m_settings.resetToDefaults(); - MsgConfigureDSDDemod *msg = MsgConfigureDSDDemod::create(m_settings, true); + MsgConfigureDSDDemod *msg = MsgConfigureDSDDemod::create(QStringList(), m_settings, true); m_inputMessageQueue.push(msg); return false; } @@ -523,13 +431,13 @@ int DSDDemod::webapiSettingsPutPatch( DSDDemodSettings settings = m_settings; webapiUpdateChannelSettings(settings, channelSettingsKeys, response); - MsgConfigureDSDDemod *msg = MsgConfigureDSDDemod::create(settings, force); + MsgConfigureDSDDemod *msg = MsgConfigureDSDDemod::create(channelSettingsKeys, settings, force); m_inputMessageQueue.push(msg); qDebug("DSDDemod::webapiSettingsPutPatch: forward to GUI: %p", m_guiMessageQueue); if (m_guiMessageQueue) // forward to GUI if any { - MsgConfigureDSDDemod *msgToGUI = MsgConfigureDSDDemod::create(settings, force); + MsgConfigureDSDDemod *msgToGUI = MsgConfigureDSDDemod::create(channelSettingsKeys, settings, force); m_guiMessageQueue->push(msgToGUI); } @@ -755,7 +663,7 @@ void DSDDemod::webapiFormatChannelReport(SWGSDRangel::SWGChannelReport& response response.getDsdDemodReport()->setStatusText(new QString(updateAndGetStatusText())); } -void DSDDemod::webapiReverseSendSettings(QList& channelSettingsKeys, const DSDDemodSettings& settings, bool force) +void DSDDemod::webapiReverseSendSettings(const QList& channelSettingsKeys, const DSDDemodSettings& settings, bool force) { SWGSDRangel::SWGChannelSettings *swgChannelSettings = new SWGSDRangel::SWGChannelSettings(); webapiFormatChannelSettings(channelSettingsKeys, swgChannelSettings, settings, force); @@ -782,7 +690,7 @@ void DSDDemod::webapiReverseSendSettings(QList& channelSettingsKeys, co void DSDDemod::sendChannelSettings( const QList& pipes, - QList& channelSettingsKeys, + const QList& channelSettingsKeys, const DSDDemodSettings& settings, bool force) { @@ -806,7 +714,7 @@ void DSDDemod::sendChannelSettings( } void DSDDemod::webapiFormatChannelSettings( - QList& channelSettingsKeys, + const QList& channelSettingsKeys, SWGSDRangel::SWGChannelSettings *swgChannelSettings, const DSDDemodSettings& settings, bool force diff --git a/plugins/channelrx/demoddsd/dsddemod.h b/plugins/channelrx/demoddsd/dsddemod.h index 6d47bf739..256862b71 100644 --- a/plugins/channelrx/demoddsd/dsddemod.h +++ b/plugins/channelrx/demoddsd/dsddemod.h @@ -47,20 +47,23 @@ public: public: const DSDDemodSettings& getSettings() const { return m_settings; } + const QStringList& getSettingsKeys() const { return m_settingsKeys; } bool getForce() const { return m_force; } - static MsgConfigureDSDDemod* create(const DSDDemodSettings& settings, bool force) + static MsgConfigureDSDDemod* create(const QStringList& settingsKeys, const DSDDemodSettings& settings, bool force) { - return new MsgConfigureDSDDemod(settings, force); + return new MsgConfigureDSDDemod(settingsKeys, settings, force); } private: DSDDemodSettings m_settings; + QStringList m_settingsKeys; bool m_force; - MsgConfigureDSDDemod(const DSDDemodSettings& settings, bool force) : + MsgConfigureDSDDemod(const QStringList& settingsKeys, const DSDDemodSettings& settings, bool force) : Message(), m_settings(settings), + m_settingsKeys(settingsKeys), m_force(force) { } }; @@ -196,20 +199,20 @@ private: static const int m_udpBlockSize; virtual bool handleMessage(const Message& cmd); - void applySettings(const DSDDemodSettings& settings, bool force = false); + void applySettings(const QStringList& settingsKeys, const DSDDemodSettings& settings, bool force = false); void scanAvailableAMBEFeatures(); void notifyUpdateAMBEFeatures(); void sendSampleRateToDemodAnalyzer(); void webapiFormatChannelReport(SWGSDRangel::SWGChannelReport& response); - void webapiReverseSendSettings(QList& channelSettingsKeys, const DSDDemodSettings& settings, bool force); + void webapiReverseSendSettings(const QList& channelSettingsKeys, const DSDDemodSettings& settings, bool force); void sendChannelSettings( const QList& pipes, - QList& channelSettingsKeys, + const QList& channelSettingsKeys, const DSDDemodSettings& settings, bool force ); void webapiFormatChannelSettings( - QList& channelSettingsKeys, + const QList& channelSettingsKeys, SWGSDRangel::SWGChannelSettings *swgChannelSettings, const DSDDemodSettings& settings, bool force diff --git a/plugins/channelrx/demoddsd/dsddemodbaseband.cpp b/plugins/channelrx/demoddsd/dsddemodbaseband.cpp index 55b32117b..bc8a7b236 100644 --- a/plugins/channelrx/demoddsd/dsddemodbaseband.cpp +++ b/plugins/channelrx/demoddsd/dsddemodbaseband.cpp @@ -118,7 +118,7 @@ bool DSDDemodBaseband::handleMessage(const Message& cmd) MsgConfigureDSDDemodBaseband& cfg = (MsgConfigureDSDDemodBaseband&) cmd; qDebug() << "DSDDemodBaseband::handleMessage: MsgConfigureDSDDemodBaseband"; - applySettings(cfg.getSettings(), cfg.getForce()); + applySettings(cfg.getSettingsKeys(), cfg.getSettings(), cfg.getForce()); return true; } @@ -145,9 +145,9 @@ bool DSDDemodBaseband::handleMessage(const Message& cmd) } } -void DSDDemodBaseband::applySettings(const DSDDemodSettings& settings, bool force) +void DSDDemodBaseband::applySettings(const QStringList& settingsKeys, const DSDDemodSettings& 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(48000, settings.m_inputFrequencyOffset); m_sink.applyChannelSettings(m_channelizer.getChannelSampleRate(), m_channelizer.getChannelFrequencyOffset()); @@ -159,7 +159,7 @@ void DSDDemodBaseband::applySettings(const DSDDemodSettings& settings, bool forc } } - 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); @@ -175,9 +175,13 @@ void DSDDemodBaseband::applySettings(const DSDDemodSettings& settings, bool forc } } - 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 DSDDemodBaseband::getChannelSampleRate() const diff --git a/plugins/channelrx/demoddsd/dsddemodbaseband.h b/plugins/channelrx/demoddsd/dsddemodbaseband.h index 768ad3935..477e9b757 100644 --- a/plugins/channelrx/demoddsd/dsddemodbaseband.h +++ b/plugins/channelrx/demoddsd/dsddemodbaseband.h @@ -41,20 +41,23 @@ public: public: const DSDDemodSettings& getSettings() const { return m_settings; } + const QStringList& getSettingsKeys() const { return m_settingsKeys; } bool getForce() const { return m_force; } - static MsgConfigureDSDDemodBaseband* create(const DSDDemodSettings& settings, bool force) + static MsgConfigureDSDDemodBaseband* create(const QStringList& settingsKeys, const DSDDemodSettings& settings, bool force) { - return new MsgConfigureDSDDemodBaseband(settings, force); + return new MsgConfigureDSDDemodBaseband(settingsKeys, settings, force); } private: DSDDemodSettings m_settings; + QStringList m_settingsKeys; bool m_force; - MsgConfigureDSDDemodBaseband(const DSDDemodSettings& settings, bool force) : + MsgConfigureDSDDemodBaseband(const QStringList& settingsKeys, const DSDDemodSettings& 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 DSDDemodSettings& settings, bool force = false); + void applySettings(const QStringList& settingsKeys, const DSDDemodSettings& settings, bool force = false); private slots: void handleInputMessages(); diff --git a/plugins/channelrx/demoddsd/dsddemodgui.cpp b/plugins/channelrx/demoddsd/dsddemodgui.cpp index b6be07e02..71c3b482d 100644 --- a/plugins/channelrx/demoddsd/dsddemodgui.cpp +++ b/plugins/channelrx/demoddsd/dsddemodgui.cpp @@ -61,7 +61,7 @@ void DSDDemodGUI::resetToDefaults() blockApplySettings(true); displaySettings(); blockApplySettings(false); - applySettings(); + applySettings(QStringList(), true); } QByteArray DSDDemodGUI::serialize() const @@ -74,7 +74,7 @@ bool DSDDemodGUI::deserialize(const QByteArray& data) if (m_settings.deserialize(data)) { displaySettings(); - applySettings(true); + applySettings(QStringList(), true); return true; } else @@ -143,7 +143,7 @@ void DSDDemodGUI::on_deltaFrequency_changed(qint64 value) m_channelMarker.setCenterFrequency(value); m_settings.m_inputFrequencyOffset = m_channelMarker.getCenterFrequency(); updateAbsoluteCenterFrequency(); - applySettings(); + applySettings(QStringList({"inputFrequencyOffset"})); } void DSDDemodGUI::on_rfBW_valueChanged(int value) @@ -151,46 +151,46 @@ void DSDDemodGUI::on_rfBW_valueChanged(int value) m_channelMarker.setBandwidth(value * 100); m_settings.m_rfBandwidth = value * 100.0; ui->rfBWText->setText(QString("%1k").arg(value / 10.0, 0, 'f', 1)); - applySettings(); + applySettings(QStringList({"rfBandwidth"})); } void DSDDemodGUI::on_demodGain_valueChanged(int value) { m_settings.m_demodGain = value / 100.0; ui->demodGainText->setText(QString("%1").arg(value / 100.0, 0, 'f', 2)); - applySettings(); + applySettings(QStringList({"demodGain"})); } void DSDDemodGUI::on_fmDeviation_valueChanged(int value) { m_settings.m_fmDeviation = value * 100.0; ui->fmDeviationText->setText(QString("%1%2k").arg(QChar(0xB1, 0x00)).arg(value / 10.0, 0, 'f', 1)); - applySettings(); + applySettings(QStringList({"fmDeviation"})); } void DSDDemodGUI::on_volume_valueChanged(int value) { m_settings.m_volume= value / 10.0; ui->volumeText->setText(QString("%1").arg(value / 10.0, 0, 'f', 1)); - applySettings(); + applySettings(QStringList({"volume"})); } void DSDDemodGUI::on_baudRate_currentIndexChanged(int index) { m_settings.m_baudRate = DSDDemodBaudRates::getRate(index); - applySettings(); + applySettings(QStringList({"baudRate"})); } void DSDDemodGUI::on_enableCosineFiltering_toggled(bool enable) { m_settings.m_enableCosineFiltering = enable; - applySettings(); + applySettings(QStringList({"enableCosineFiltering"})); } void DSDDemodGUI::on_syncOrConstellation_toggled(bool checked) { m_settings.m_syncOrConstellation = checked; - applySettings(); + applySettings(QStringList({"syncOrConstellation"})); } void DSDDemodGUI::on_traceLength_valueChanged(int value) @@ -198,6 +198,7 @@ void DSDDemodGUI::on_traceLength_valueChanged(int value) m_settings.m_traceLengthMutliplier = value; ui->traceLengthText->setText(QString("%1").arg(m_settings.m_traceLengthMutliplier*50)); m_scopeVisXY->setPixelsPerFrame(m_settings.m_traceLengthMutliplier*960); // 48000 / 50. Chunks of 50 ms. + applySettings(QStringList({"traceLengthMutliplier"})); } void DSDDemodGUI::on_traceStroke_valueChanged(int value) @@ -205,6 +206,7 @@ void DSDDemodGUI::on_traceStroke_valueChanged(int value) m_settings.m_traceStroke = value; ui->traceStrokeText->setText(QString("%1").arg(m_settings.m_traceStroke)); m_scopeVisXY->setStroke(m_settings.m_traceStroke); + applySettings(QStringList({"traceStroke"})); } void DSDDemodGUI::on_traceDecay_valueChanged(int value) @@ -212,50 +214,51 @@ void DSDDemodGUI::on_traceDecay_valueChanged(int value) m_settings.m_traceDecay = value; ui->traceDecayText->setText(QString("%1").arg(m_settings.m_traceDecay)); m_scopeVisXY->setDecay(m_settings.m_traceDecay); + applySettings(QStringList({"traceDecay"})); } void DSDDemodGUI::on_slot1On_toggled(bool checked) { m_settings.m_slot1On = checked; - applySettings(); + applySettings(QStringList({"slot1On"})); } void DSDDemodGUI::on_slot2On_toggled(bool checked) { m_settings.m_slot2On = checked; - applySettings(); + applySettings(QStringList({"slot2On"})); } void DSDDemodGUI::on_tdmaStereoSplit_toggled(bool checked) { m_settings.m_tdmaStereo = checked; - applySettings(); + applySettings(QStringList({"tdmaStereo"})); } void DSDDemodGUI::on_squelchGate_valueChanged(int value) { m_settings.m_squelchGate = value; ui->squelchGateText->setText(QString("%1").arg(value * 10.0, 0, 'f', 0)); - applySettings(); + applySettings(QStringList({"squelchGate"})); } void DSDDemodGUI::on_squelch_valueChanged(int value) { ui->squelchText->setText(QString("%1").arg(value / 1.0, 0, 'f', 0)); m_settings.m_squelch = value; - applySettings(); + applySettings(QStringList({"squelch"})); } void DSDDemodGUI::on_audioMute_toggled(bool checked) { m_settings.m_audioMute = checked; - applySettings(); + applySettings(QStringList({"audioMute"})); } void DSDDemodGUI::on_highPassFilter_toggled(bool checked) { m_settings.m_highPassFilter = checked; - applySettings(); + applySettings(QStringList({"highPassFilter"})); } void DSDDemodGUI::on_symbolPLLLock_toggled(bool checked) @@ -266,7 +269,7 @@ void DSDDemodGUI::on_symbolPLLLock_toggled(bool checked) ui->symbolPLLLock->setStyleSheet("QToolButton { background:rgb(53,53,53); }"); } m_settings.m_pllLock = checked; - applySettings(); + applySettings(QStringList({"pllLock"})); } void DSDDemodGUI::on_ambeSupport_clicked(bool checked) @@ -277,13 +280,13 @@ void DSDDemodGUI::on_ambeSupport_clicked(bool checked) m_settings.m_connectAMBE = checked; m_settings.m_ambeFeatureIndex = m_availableAMBEFeatures[ui->ambeFeatures->currentIndex()].m_featureIndex; - applySettings(); + applySettings(QStringList({"connectAMBE", "ambeFeatureIndex"})); } void DSDDemodGUI::on_ambeFeatures_currentIndexChanged(int index) { m_settings.m_ambeFeatureIndex = m_availableAMBEFeatures[index].m_featureIndex; - applySettings(); + applySettings(QStringList({"ambeFeatureIndex"})); } void DSDDemodGUI::onWidgetRolled(QWidget* widget, bool rollDown) @@ -292,7 +295,7 @@ void DSDDemodGUI::onWidgetRolled(QWidget* widget, bool rollDown) (void) rollDown; getRollupContents()->saveState(m_rollupState); - applySettings(); + applySettings(QStringList()); } void DSDDemodGUI::onMenuDialogCalled(const QPoint &p) @@ -337,7 +340,16 @@ void DSDDemodGUI::onMenuDialogCalled(const QPoint &p) updateIndexLabel(); } - applySettings(); + applySettings(QStringList({ + "title", + "rgbColor", + "useReverseAPI", + "reverseAPIAddress", + "reverseAPIPort", + "reverseAPIDeviceIndex", + "reverseAPIChannelIndex", + "streamIndex" + })); } resetContextMenuType(); @@ -434,7 +446,7 @@ DSDDemodGUI::DSDDemodGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Baseban updateAMBEFeaturesList(); displaySettings(); makeUIConnections(); - applySettings(true); + applySettings(QStringList(), true); m_resizer.enableChildMouseTracking(); } @@ -560,17 +572,17 @@ void DSDDemodGUI::updateAMBEFeaturesList() ui->ambeFeatures->blockSignals(false); if (unsetAMBE) { - applySettings(); + applySettings(QStringList({"connectAMBE"})); } } -void DSDDemodGUI::applySettings(bool force) +void DSDDemodGUI::applySettings(const QStringList& settingsKeys, const bool force) { if (m_doApplySettings) { qDebug() << "DSDDemodGUI::applySettings"; - DSDDemod::MsgConfigureDSDDemod* message = DSDDemod::MsgConfigureDSDDemod::create( m_settings, force); + DSDDemod::MsgConfigureDSDDemod* message = DSDDemod::MsgConfigureDSDDemod::create(settingsKeys, m_settings, force); m_dsdDemod->getInputMessageQueue()->push(message); } } @@ -596,7 +608,7 @@ void DSDDemodGUI::channelMarkerChangedByCursor() { ui->deltaFrequency->setValue(m_channelMarker.getCenterFrequency()); m_settings.m_inputFrequencyOffset = m_channelMarker.getCenterFrequency(); - applySettings(); + applySettings(QStringList({"inputFrequencyOffset"})); } void DSDDemodGUI::channelMarkerHighlightedByCursor() @@ -615,7 +627,7 @@ void DSDDemodGUI::audioSelect(const QPoint& p) if (audioSelect.m_selected) { m_settings.m_audioDeviceName = audioSelect.m_audioDeviceName; - applySettings(); + applySettings(QStringList({"audioDeviceName"})); } } diff --git a/plugins/channelrx/demoddsd/dsddemodgui.h b/plugins/channelrx/demoddsd/dsddemodgui.h index 9b77a5c51..ffa97d638 100644 --- a/plugins/channelrx/demoddsd/dsddemodgui.h +++ b/plugins/channelrx/demoddsd/dsddemodgui.h @@ -115,7 +115,7 @@ private: virtual ~DSDDemodGUI(); void blockApplySettings(bool block); - void applySettings(bool force = false); + void applySettings(const QStringList& settingsKeys, bool force = false); void displaySettings(); void updateAMBEFeaturesList(); void updateMyPosition(); diff --git a/plugins/channelrx/demoddsd/dsddemodsettings.cpp b/plugins/channelrx/demoddsd/dsddemodsettings.cpp index 13d867fa9..c77813dd8 100644 --- a/plugins/channelrx/demoddsd/dsddemodsettings.cpp +++ b/plugins/channelrx/demoddsd/dsddemodsettings.cpp @@ -207,3 +207,206 @@ bool DSDDemodSettings::deserialize(const QByteArray& data) } } +void DSDDemodSettings::applySettings(const QStringList& settingsKeys, const DSDDemodSettings& settings) +{ + if (settingsKeys.contains("inputFrequencyOffset")) { + m_inputFrequencyOffset = settings.m_inputFrequencyOffset; + } + if (settingsKeys.contains("rfBandwidth")) { + m_rfBandwidth = settings.m_rfBandwidth; + } + if (settingsKeys.contains("fmDeviation")) { + m_fmDeviation = settings.m_fmDeviation; + } + if (settingsKeys.contains("demodGain")) { + m_demodGain = settings.m_demodGain; + } + if (settingsKeys.contains("volume")) { + m_volume = settings.m_volume; + } + if (settingsKeys.contains("baudRate")) { + m_baudRate = settings.m_baudRate; + } + if (settingsKeys.contains("squelchGate")) { + m_squelchGate = settings.m_squelchGate; + } + if (settingsKeys.contains("squelch")) { + m_squelch = settings.m_squelch; + } + if (settingsKeys.contains("audioMute")) { + m_audioMute = settings.m_audioMute; + } + if (settingsKeys.contains("enableCosineFiltering")) { + m_enableCosineFiltering = settings.m_enableCosineFiltering; + } + if (settingsKeys.contains("syncOrConstellation")) { + m_syncOrConstellation = settings.m_syncOrConstellation; + } + if (settingsKeys.contains("slot1On")) { + m_slot1On = settings.m_slot1On; + } + if (settingsKeys.contains("slot2On")) { + m_slot2On = settings.m_slot2On; + } + if (settingsKeys.contains("tdmaStereo")) { + m_tdmaStereo = settings.m_tdmaStereo; + } + if (settingsKeys.contains("pllLock")) { + m_pllLock = settings.m_pllLock; + } + if (settingsKeys.contains("rgbColor")) { + m_rgbColor = settings.m_rgbColor; + } + if (settingsKeys.contains("title")) { + m_title = settings.m_title; + } + if (settingsKeys.contains("highPassFilter")) { + m_highPassFilter = settings.m_highPassFilter; + } + if (settingsKeys.contains("traceLengthMutliplier")) { + m_traceLengthMutliplier = settings.m_traceLengthMutliplier; + } + if (settingsKeys.contains("traceStroke")) { + m_traceStroke = settings.m_traceStroke; + } + if (settingsKeys.contains("traceDecay")) { + m_traceDecay = settings.m_traceDecay; + } + if (settingsKeys.contains("audioDeviceName")) { + m_audioDeviceName = settings.m_audioDeviceName; + } + if (settingsKeys.contains("streamIndex")) { + m_streamIndex = settings.m_streamIndex; + } + if (settingsKeys.contains("useReverseAPI")) { + m_useReverseAPI = settings.m_useReverseAPI; + } + if (settingsKeys.contains("reverseAPIAddress")) { + m_reverseAPIAddress = settings.m_reverseAPIAddress; + } + if (settingsKeys.contains("reverseAPIPort")) { + m_reverseAPIPort = settings.m_reverseAPIPort; + } + if (settingsKeys.contains("reverseAPIDeviceIndex")) { + m_reverseAPIDeviceIndex = settings.m_reverseAPIDeviceIndex; + } + if (settingsKeys.contains("reverseAPIChannelIndex")) { + m_reverseAPIChannelIndex = settings.m_reverseAPIChannelIndex; + } + if (settingsKeys.contains("workspaceIndex")) { + m_workspaceIndex = settings.m_workspaceIndex; + } + if (settingsKeys.contains("hidden")) { + m_hidden = settings.m_hidden; + } + if (settingsKeys.contains("ambeFeatureIndex")) { + m_ambeFeatureIndex = settings.m_ambeFeatureIndex; + } + if (settingsKeys.contains("connectAMBE")) { + m_connectAMBE = settings.m_connectAMBE; + } +} + +QString DSDDemodSettings::getDebugString(const QStringList& settingsKeys, bool force) const +{ + std::ostringstream ostr; + + if (settingsKeys.contains("inputFrequencyOffset") || force) { + ostr << " m_inputFrequencyOffset: " << m_inputFrequencyOffset; + } + if (settingsKeys.contains("rfBandwidth") || force) { + ostr << " m_rfBandwidth: " << m_rfBandwidth; + } + if (settingsKeys.contains("fmDeviation") || force) { + ostr << " m_fmDeviation: " << m_fmDeviation; + } + if (settingsKeys.contains("demodGain") || force) { + ostr << " m_demodGain: " << m_demodGain; + } + if (settingsKeys.contains("volume") || force) { + ostr << " m_volume: " << m_volume; + } + if (settingsKeys.contains("baudRate") || force) { + ostr << " m_baudRate: " << m_baudRate; + } + if (settingsKeys.contains("squelchGate") || force) { + ostr << " m_squelchGate: " << m_squelchGate; + } + if (settingsKeys.contains("squelch") || force) { + ostr << " m_squelch: " << m_squelch; + } + if (settingsKeys.contains("audioMute") || force) { + ostr << " m_audioMute: " << m_audioMute; + } + if (settingsKeys.contains("enableCosineFiltering") || force) { + ostr << " m_enableCosineFiltering: " << m_enableCosineFiltering; + } + if (settingsKeys.contains("syncOrConstellation") || force) { + ostr << " m_syncOrConstellation: " << m_syncOrConstellation; + } + if (settingsKeys.contains("slot1On") || force) { + ostr << " m_slot1On: " << m_slot1On; + } + if (settingsKeys.contains("slot2On") || force) { + ostr << " m_slot2On: " << m_slot2On; + } + if (settingsKeys.contains("tdmaStereo") || force) { + ostr << " m_tdmaStereo: " << m_tdmaStereo; + } + if (settingsKeys.contains("pllLock") || force) { + ostr << " m_pllLock: " << m_pllLock; + } + if (settingsKeys.contains("rgbColor") || force) { + ostr << " m_rgbColor: " << m_rgbColor; + } + if (settingsKeys.contains("title") || force) { + ostr << " m_title: " << m_title.toStdString(); + } + if (settingsKeys.contains("highPassFilter") || force) { + ostr << " m_highPassFilter: " << m_highPassFilter; + } + if (settingsKeys.contains("traceLengthMutliplier") || force) { + ostr << " m_traceLengthMutliplier: " << m_traceLengthMutliplier; + } + if (settingsKeys.contains("traceStroke") || force) { + ostr << " m_traceStroke: " << m_traceStroke; + } + if (settingsKeys.contains("traceDecay") || force) { + ostr << " m_traceDecay: " << m_traceDecay; + } + if (settingsKeys.contains("audioDeviceName") || force) { + ostr << " m_audioDeviceName: " << m_audioDeviceName.toStdString(); + } + if (settingsKeys.contains("streamIndex") || force) { + ostr << " m_streamIndex: " << m_streamIndex; + } + if (settingsKeys.contains("useReverseAPI") || force) { + ostr << " m_useReverseAPI: " << m_useReverseAPI; + } + if (settingsKeys.contains("reverseAPIAddress") || force) { + ostr << " m_reverseAPIAddress: " << m_reverseAPIAddress.toStdString(); + } + if (settingsKeys.contains("reverseAPIPort") || force) { + ostr << " m_reverseAPIPort: " << m_reverseAPIPort; + } + if (settingsKeys.contains("reverseAPIDeviceIndex") || force) { + ostr << " m_reverseAPIDeviceIndex: " << m_reverseAPIDeviceIndex; + } + if (settingsKeys.contains("reverseAPIChannelIndex") || force) { + ostr << " m_reverseAPIChannelIndex: " << m_reverseAPIChannelIndex; + } + if (settingsKeys.contains("workspaceIndex") || force) { + ostr << " m_workspaceIndex: " << m_workspaceIndex; + } + if (settingsKeys.contains("hidden") || force) { + ostr << " m_hidden: " << m_hidden; + } + if (settingsKeys.contains("ambeFeatureIndex") || force) { + ostr << " m_ambeFeatureIndex: " << m_ambeFeatureIndex; + } + if (settingsKeys.contains("connectAMBE") || force) { + ostr << " m_connectAMBE: " << m_connectAMBE; + } + + return QString(ostr.str().c_str()); +} diff --git a/plugins/channelrx/demoddsd/dsddemodsettings.h b/plugins/channelrx/demoddsd/dsddemodsettings.h index 24dc1479c..e85c9e580 100644 --- a/plugins/channelrx/demoddsd/dsddemodsettings.h +++ b/plugins/channelrx/demoddsd/dsddemodsettings.h @@ -81,6 +81,8 @@ struct DSDDemodSettings void setRollupState(Serializable *rollupState) { m_rollupState = rollupState; } QByteArray serialize() const; bool deserialize(const QByteArray& data); + void applySettings(const QStringList& settingsKeys, const DSDDemodSettings& settings); + QString getDebugString(const QStringList& settingsKeys, bool force=false) const; }; diff --git a/plugins/channelrx/demoddsd/dsddemodsink.cpp b/plugins/channelrx/demoddsd/dsddemodsink.cpp index ed1be9f45..0a0b2caca 100644 --- a/plugins/channelrx/demoddsd/dsddemodsink.cpp +++ b/plugins/channelrx/demoddsd/dsddemodsink.cpp @@ -67,7 +67,7 @@ DSDDemodSink::DSDDemodSink() : m_magsqPeak = 0.0f; m_magsqCount = 0; - applySettings(m_settings, true); + applySettings(QStringList(), m_settings, true); applyChannelSettings(m_channelSampleRate, m_channelFrequencyOffset, true); } @@ -365,33 +365,11 @@ void DSDDemodSink::applyChannelSettings(int channelSampleRate, int channelFreque } -void DSDDemodSink::applySettings(const DSDDemodSettings& settings, bool force) +void DSDDemodSink::applySettings(const QStringList& settingsKeys, const DSDDemodSettings& settings, bool force) { - qDebug() << "DSDDemodSink::applySettings: " - << " m_inputFrequencyOffset: " << settings.m_inputFrequencyOffset - << " m_rfBandwidth: " << settings.m_rfBandwidth - << " m_fmDeviation: " << settings.m_fmDeviation - << " m_demodGain: " << settings.m_demodGain - << " m_volume: " << settings.m_volume - << " m_baudRate: " << settings.m_baudRate - << " m_squelchGate" << settings.m_squelchGate - << " m_squelch: " << settings.m_squelch - << " m_audioMute: " << settings.m_audioMute - << " m_enableCosineFiltering: " << settings.m_enableCosineFiltering - << " m_syncOrConstellation: " << settings.m_syncOrConstellation - << " m_slot1On: " << settings.m_slot1On - << " m_slot2On: " << settings.m_slot2On - << " m_tdmaStereo: " << settings.m_tdmaStereo - << " m_pllLock: " << settings.m_pllLock - << " m_highPassFilter: "<< settings.m_highPassFilter - << " m_audioDeviceName: " << settings.m_audioDeviceName - << " m_traceLengthMutliplier: " << settings.m_traceLengthMutliplier - << " m_traceStroke: " << settings.m_traceStroke - << " m_traceDecay: " << settings.m_traceDecay - << " m_streamIndex: " << settings.m_streamIndex - << " force: " << force; + qDebug() << "DSDDemodSink::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_interpolatorDistanceRemain = 0; @@ -399,54 +377,58 @@ void DSDDemodSink::applySettings(const DSDDemodSettings& settings, bool force) //m_phaseDiscri.setFMScaling((float) settings.m_rfBandwidth / (float) settings.m_fmDeviation); } - if ((settings.m_fmDeviation != m_settings.m_fmDeviation) || force) + if ((settingsKeys.contains("fmDeviation") && (settings.m_fmDeviation != m_settings.m_fmDeviation)) || force) { m_phaseDiscri.setFMScaling(48000.0f / (2.0f*settings.m_fmDeviation)); } - if ((settings.m_squelchGate != m_settings.m_squelchGate) || force) + if ((settingsKeys.contains("squelchGate") && (settings.m_squelchGate != m_settings.m_squelchGate)) || force) { m_squelchGate = 480 * settings.m_squelchGate; // gate is given in 10s of ms at 48000 Hz audio sample rate m_squelchCount = 0; // reset squelch open counter } - if ((settings.m_squelch != m_settings.m_squelch) || force) + if ((settingsKeys.contains("squelch") && (settings.m_squelch != m_settings.m_squelch)) || force) { // input is a value in dB m_squelchLevel = std::pow(10.0, settings.m_squelch / 10.0); } - if ((settings.m_volume != m_settings.m_volume) || force) + if ((settingsKeys.contains("volume") && (settings.m_volume != m_settings.m_volume)) || force) { m_dsdDecoder.setAudioGain(settings.m_volume); } - if ((settings.m_baudRate != m_settings.m_baudRate) || force) + if ((settingsKeys.contains("baudRate") && (settings.m_baudRate != m_settings.m_baudRate)) || force) { m_dsdDecoder.setBaudRate(settings.m_baudRate); } - if ((settings.m_enableCosineFiltering != m_settings.m_enableCosineFiltering) || force) + if ((settingsKeys.contains("enableCosineFiltering") && (settings.m_enableCosineFiltering != m_settings.m_enableCosineFiltering)) || force) { m_dsdDecoder.enableCosineFiltering(settings.m_enableCosineFiltering); } - if ((settings.m_tdmaStereo != m_settings.m_tdmaStereo) || force) + if ((settingsKeys.contains("tdmaStereo") && (settings.m_tdmaStereo != m_settings.m_tdmaStereo)) || force) { m_dsdDecoder.setTDMAStereo(settings.m_tdmaStereo); } - if ((settings.m_pllLock != m_settings.m_pllLock) || force) + if ((settingsKeys.contains("pllLock") && (settings.m_pllLock != m_settings.m_pllLock)) || force) { m_dsdDecoder.setSymbolPLLLock(settings.m_pllLock); } - if ((settings.m_highPassFilter != m_settings.m_highPassFilter) || force) + if ((settingsKeys.contains("highPassFilter") && (settings.m_highPassFilter != m_settings.m_highPassFilter)) || force) { m_dsdDecoder.useHPMbelib(settings.m_highPassFilter); } - m_settings = settings; + if (force) { + m_settings = settings; + } else { + m_settings.applySettings(settingsKeys, settings); + } } void DSDDemodSink::configureMyPosition(float myLatitude, float myLongitude) diff --git a/plugins/channelrx/demoddsd/dsddemodsink.h b/plugins/channelrx/demoddsd/dsddemodsink.h index 2eeb9f0da..533a2fe39 100644 --- a/plugins/channelrx/demoddsd/dsddemodsink.h +++ b/plugins/channelrx/demoddsd/dsddemodsink.h @@ -47,7 +47,7 @@ public: void applyAudioSampleRate(int sampleRate); void applyChannelSettings(int channelSampleRate, int channelFrequencyOffset, bool force = false); - void applySettings(const DSDDemodSettings& settings, bool force = false); + void applySettings(const QStringList& settingsKeys, const DSDDemodSettings& settings, bool force = false); AudioFifo *getAudioFifo1() { return &m_audioFifo1; } AudioFifo *getAudioFifo2() { return &m_audioFifo2; } void setAudioFifoLabel(const QString& label) { diff --git a/plugins/channelrx/demodfreedv/freedvdemod.cpp b/plugins/channelrx/demodfreedv/freedvdemod.cpp index 4b8752e6a..5011f85a6 100644 --- a/plugins/channelrx/demodfreedv/freedvdemod.cpp +++ b/plugins/channelrx/demodfreedv/freedvdemod.cpp @@ -57,7 +57,7 @@ FreeDVDemod::FreeDVDemod(DeviceAPI *deviceAPI) : m_basebandSink->setSpectrumSink(&m_spectrumVis); m_basebandSink->moveToThread(m_thread); - applySettings(m_settings, true); + applySettings(QStringList(), m_settings, true); m_deviceAPI->addChannelSink(this); m_deviceAPI->addChannelSinkAPI(this); @@ -147,7 +147,7 @@ bool FreeDVDemod::handleMessage(const Message& cmd) MsgConfigureFreeDVDemod& cfg = (MsgConfigureFreeDVDemod&) cmd; qDebug("FreeDVDemod::handleMessage: MsgConfigureFreeDVDemod"); - applySettings(cfg.getSettings(), cfg.getForce()); + applySettings(cfg.getSettingsKeys(), cfg.getSettings(), cfg.getForce()); return true; } @@ -184,58 +184,20 @@ void FreeDVDemod::setCenterFrequency(qint64 frequency) { FreeDVDemodSettings settings = m_settings; settings.m_inputFrequencyOffset = frequency; - applySettings(settings, false); + applySettings(QStringList("inputFrequencyOffset"), settings, false); if (m_guiMessageQueue) // forward to GUI if any { - MsgConfigureFreeDVDemod *msgToGUI = MsgConfigureFreeDVDemod::create(settings, false); + MsgConfigureFreeDVDemod *msgToGUI = MsgConfigureFreeDVDemod::create(QStringList("inputFrequencyOffset"), settings, false); m_guiMessageQueue->push(msgToGUI); } } -void FreeDVDemod::applySettings(const FreeDVDemodSettings& settings, bool force) +void FreeDVDemod::applySettings(const QStringList& settingsKeys, const FreeDVDemodSettings& settings, bool force) { - qDebug() << "FreeDVDemod::applySettings:" - << " m_inputFrequencyOffset: " << settings.m_inputFrequencyOffset - << " m_freeDVMode: " << (int) settings.m_freeDVMode - << " m_volume: " << settings.m_volume - << " m_volumeIn: " << settings.m_volumeIn - << " m_spanLog2: " << settings.m_spanLog2 - << " m_audioMute: " << settings.m_audioMute - << " m_agcActive: " << settings.m_agc - << " 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() << "FreeDVDemod::applySettings:" << settings.getDebugString(settingsKeys, force); - QList reverseAPIKeys; - - if((m_settings.m_inputFrequencyOffset != settings.m_inputFrequencyOffset) || force) { - reverseAPIKeys.append("inputFrequencyOffset"); - } - if ((m_settings.m_volume != settings.m_volume) || force) { - reverseAPIKeys.append("volume"); - } - if ((m_settings.m_volumeIn != settings.m_volumeIn) || force) { - reverseAPIKeys.append("volumeIn"); - } - if ((settings.m_audioDeviceName != m_settings.m_audioDeviceName) || force) { - reverseAPIKeys.append("audioDeviceName"); - } - if ((m_settings.m_spanLog2 != settings.m_spanLog2) || force) { - reverseAPIKeys.append("spanLog2"); - } - if ((m_settings.m_audioMute != settings.m_audioMute) || force) { - reverseAPIKeys.append("audioMute"); - } - if ((m_settings.m_agc != settings.m_agc) || 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 { @@ -246,12 +208,10 @@ void FreeDVDemod::applySettings(const FreeDVDemodSettings& settings, bool force) m_settings.m_streamIndex = settings.m_streamIndex; // make sure ChannelAPI::getStreamIndex() is consistent emit streamIndexChanged(settings.m_streamIndex); } - - reverseAPIKeys.append("streamIndex"); } - if ((settings.m_freeDVMode != m_settings.m_freeDVMode) - || (settings.m_spanLog2 != m_settings.m_spanLog2) || force) + if ((settingsKeys.contains("freeDVMode") && (settings.m_freeDVMode != m_settings.m_freeDVMode)) + || (settingsKeys.contains("spanLog2") && (settings.m_spanLog2 != m_settings.m_spanLog2)) || force) { DSPSignalNotification *msg = new DSPSignalNotification( FreeDVDemodSettings::getModSampleRate(settings.m_freeDVMode)/(1<push(msg); } - FreeDVDemodBaseband::MsgConfigureFreeDVDemodBaseband *msg = FreeDVDemodBaseband::MsgConfigureFreeDVDemodBaseband::create(settings, force); + FreeDVDemodBaseband::MsgConfigureFreeDVDemodBaseband *msg = FreeDVDemodBaseband::MsgConfigureFreeDVDemodBaseband::create(settingsKeys, settings, force); m_basebandSink->getInputMessageQueue()->push(msg); if (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; + if (force) { + m_settings = settings; + } else { + m_settings.applySettings(settingsKeys, settings); + } } QByteArray FreeDVDemod::serialize() const @@ -291,14 +255,14 @@ bool FreeDVDemod::deserialize(const QByteArray& data) { if (m_settings.deserialize(data)) { - MsgConfigureFreeDVDemod *msg = MsgConfigureFreeDVDemod::create(m_settings, true); + MsgConfigureFreeDVDemod *msg = MsgConfigureFreeDVDemod::create(QStringList(), m_settings, true); m_inputMessageQueue.push(msg); return true; } else { m_settings.resetToDefaults(); - MsgConfigureFreeDVDemod *msg = MsgConfigureFreeDVDemod::create(m_settings, true); + MsgConfigureFreeDVDemod *msg = MsgConfigureFreeDVDemod::create(QStringList(), m_settings, true); m_inputMessageQueue.push(msg); return false; } @@ -334,13 +298,13 @@ int FreeDVDemod::webapiSettingsPutPatch( FreeDVDemodSettings settings = m_settings; webapiUpdateChannelSettings(settings, channelSettingsKeys, response); - MsgConfigureFreeDVDemod *msg = MsgConfigureFreeDVDemod::create(settings, force); + MsgConfigureFreeDVDemod *msg = MsgConfigureFreeDVDemod::create(channelSettingsKeys, settings, force); m_inputMessageQueue.push(msg); qDebug("FreeDVDemod::webapiSettingsPutPatch: forward to GUI: %p", m_guiMessageQueue); if (m_guiMessageQueue) // forward to GUI if any { - MsgConfigureFreeDVDemod *msgToGUI = MsgConfigureFreeDVDemod::create(settings, force); + MsgConfigureFreeDVDemod *msgToGUI = MsgConfigureFreeDVDemod::create(channelSettingsKeys, settings, force); m_guiMessageQueue->push(msgToGUI); } @@ -516,7 +480,7 @@ void FreeDVDemod::webapiFormatChannelReport(SWGSDRangel::SWGChannelReport& respo response.getFreeDvDemodReport()->setChannelSampleRate(m_basebandSink->getChannelSampleRate()); } -void FreeDVDemod::webapiReverseSendSettings(QList& channelSettingsKeys, const FreeDVDemodSettings& settings, bool force) +void FreeDVDemod::webapiReverseSendSettings(const QList& channelSettingsKeys, const FreeDVDemodSettings& settings, bool force) { SWGSDRangel::SWGChannelSettings *swgChannelSettings = new SWGSDRangel::SWGChannelSettings(); webapiFormatChannelSettings(channelSettingsKeys, swgChannelSettings, settings, force); @@ -543,7 +507,7 @@ void FreeDVDemod::webapiReverseSendSettings(QList& channelSettingsKeys, void FreeDVDemod::sendChannelSettings( const QList& pipes, - QList& channelSettingsKeys, + const QList& channelSettingsKeys, const FreeDVDemodSettings& settings, bool force) { @@ -567,7 +531,7 @@ void FreeDVDemod::sendChannelSettings( } void FreeDVDemod::webapiFormatChannelSettings( - QList& channelSettingsKeys, + const QList& channelSettingsKeys, SWGSDRangel::SWGChannelSettings *swgChannelSettings, const FreeDVDemodSettings& settings, bool force diff --git a/plugins/channelrx/demodfreedv/freedvdemod.h b/plugins/channelrx/demodfreedv/freedvdemod.h index 3e76f100d..5d4d9f607 100644 --- a/plugins/channelrx/demodfreedv/freedvdemod.h +++ b/plugins/channelrx/demodfreedv/freedvdemod.h @@ -46,20 +46,23 @@ public: public: const FreeDVDemodSettings& getSettings() const { return m_settings; } + const QStringList& getSettingsKeys() const { return m_settingsKeys; } bool getForce() const { return m_force; } - static MsgConfigureFreeDVDemod* create(const FreeDVDemodSettings& settings, bool force) + static MsgConfigureFreeDVDemod* create(const QStringList& settingsKeys, const FreeDVDemodSettings& settings, bool force) { - return new MsgConfigureFreeDVDemod(settings, force); + return new MsgConfigureFreeDVDemod(settingsKeys, settings, force); } private: FreeDVDemodSettings m_settings; + QStringList m_settingsKeys; bool m_force; - MsgConfigureFreeDVDemod(const FreeDVDemodSettings& settings, bool force) : + MsgConfigureFreeDVDemod(const QStringList& settingsKeys, const FreeDVDemodSettings& settings, bool force) : Message(), m_settings(settings), + m_settingsKeys(settingsKeys), m_force(force) { } }; @@ -170,17 +173,17 @@ private: QNetworkRequest m_networkRequest; virtual bool handleMessage(const Message& cmd); - void applySettings(const FreeDVDemodSettings& settings, bool force = false); + void applySettings(const QStringList& settingsKeys, const FreeDVDemodSettings& settings, bool force = false); void webapiFormatChannelReport(SWGSDRangel::SWGChannelReport& response); - void webapiReverseSendSettings(QList& channelSettingsKeys, const FreeDVDemodSettings& settings, bool force); + void webapiReverseSendSettings(const QList& channelSettingsKeys, const FreeDVDemodSettings& settings, bool force); void sendChannelSettings( const QList& pipes, - QList& channelSettingsKeys, + const QList& channelSettingsKeys, const FreeDVDemodSettings& settings, bool force ); void webapiFormatChannelSettings( - QList& channelSettingsKeys, + const QList& channelSettingsKeys, SWGSDRangel::SWGChannelSettings *swgChannelSettings, const FreeDVDemodSettings& settings, bool force diff --git a/plugins/channelrx/demodfreedv/freedvdemodbaseband.cpp b/plugins/channelrx/demodfreedv/freedvdemodbaseband.cpp index ecfb47267..b83080658 100644 --- a/plugins/channelrx/demodfreedv/freedvdemodbaseband.cpp +++ b/plugins/channelrx/demodfreedv/freedvdemodbaseband.cpp @@ -117,7 +117,7 @@ bool FreeDVDemodBaseband::handleMessage(const Message& cmd) qDebug() << "FreeDVDemodBaseband::handleMessage: MsgConfigureFreeDVDemodBaseband"; MsgConfigureFreeDVDemodBaseband& cfg = (MsgConfigureFreeDVDemodBaseband&) cmd; - applySettings(cfg.getSettings(), cfg.getForce()); + applySettings(cfg.getSettingsKeys(), cfg.getSettings(), cfg.getForce()); return true; } @@ -146,15 +146,15 @@ bool FreeDVDemodBaseband::handleMessage(const Message& cmd) } } -void FreeDVDemodBaseband::applySettings(const FreeDVDemodSettings& settings, bool force) +void FreeDVDemodBaseband::applySettings(const QStringList& settingsKeys, const FreeDVDemodSettings& 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_sink.getModemSampleRate(), settings.m_inputFrequencyOffset); m_sink.applyChannelSettings(m_channelizer->getChannelSampleRate(), m_channelizer->getChannelFrequencyOffset()); } - 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); @@ -168,7 +168,7 @@ void FreeDVDemodBaseband::applySettings(const FreeDVDemodSettings& settings, boo } } - if ((settings.m_freeDVMode != m_settings.m_freeDVMode) || force) + if ((settingsKeys.contains("freeDVMode") && (settings.m_freeDVMode != m_settings.m_freeDVMode)) || force) { uint32_t modemSampleRate = FreeDVDemodSettings::getModSampleRate(settings.m_freeDVMode); @@ -187,8 +187,13 @@ void FreeDVDemodBaseband::applySettings(const FreeDVDemodSettings& settings, boo m_sink.applyFreeDVMode(settings.m_freeDVMode); } - 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 FreeDVDemodBaseband::getChannelSampleRate() const diff --git a/plugins/channelrx/demodfreedv/freedvdemodbaseband.h b/plugins/channelrx/demodfreedv/freedvdemodbaseband.h index 320e7ffb2..760d0bb9d 100644 --- a/plugins/channelrx/demodfreedv/freedvdemodbaseband.h +++ b/plugins/channelrx/demodfreedv/freedvdemodbaseband.h @@ -39,20 +39,23 @@ public: public: const FreeDVDemodSettings& getSettings() const { return m_settings; } + const QStringList& getSettingsKeys() const { return m_settingsKeys; } bool getForce() const { return m_force; } - static MsgConfigureFreeDVDemodBaseband* create(const FreeDVDemodSettings& settings, bool force) + static MsgConfigureFreeDVDemodBaseband* create(const QStringList& settingsKeys, const FreeDVDemodSettings& settings, bool force) { - return new MsgConfigureFreeDVDemodBaseband(settings, force); + return new MsgConfigureFreeDVDemodBaseband(settingsKeys, settings, force); } private: FreeDVDemodSettings m_settings; + QStringList m_settingsKeys; bool m_force; - MsgConfigureFreeDVDemodBaseband(const FreeDVDemodSettings& settings, bool force) : + MsgConfigureFreeDVDemodBaseband(const QStringList& settingsKeys, const FreeDVDemodSettings& settings, bool force) : Message(), m_settings(settings), + m_settingsKeys(settingsKeys), m_force(force) { } }; @@ -113,7 +116,7 @@ private: MessageQueue *getMessageQueueToGUI() { return m_messageQueueToGUI; } bool handleMessage(const Message& cmd); - void applySettings(const FreeDVDemodSettings& settings, bool force = false); + void applySettings(const QStringList& settingsKeys, const FreeDVDemodSettings& settings, bool force = false); private slots: void handleInputMessages(); diff --git a/plugins/channelrx/demodfreedv/freedvdemodgui.cpp b/plugins/channelrx/demodfreedv/freedvdemodgui.cpp index cd35e0633..ddfe03d2f 100644 --- a/plugins/channelrx/demodfreedv/freedvdemodgui.cpp +++ b/plugins/channelrx/demodfreedv/freedvdemodgui.cpp @@ -131,7 +131,7 @@ void FreeDVDemodGUI::channelMarkerChangedByCursor() { ui->deltaFrequency->setValue(m_channelMarker.getCenterFrequency()); m_settings.m_inputFrequencyOffset = m_channelMarker.getCenterFrequency(); - applySettings(); + applySettings(QStringList({"inputFrequencyOffset"})); } void FreeDVDemodGUI::channelMarkerHighlightedByCursor() @@ -144,7 +144,7 @@ void FreeDVDemodGUI::on_deltaFrequency_changed(qint64 value) m_channelMarker.setCenterFrequency(value); m_settings.m_inputFrequencyOffset = m_channelMarker.getCenterFrequency(); updateAbsoluteCenterFrequency(); - applySettings(); + applySettings(QStringList({"inputFrequencyOffset"})); } void FreeDVDemodGUI::on_reSync_clicked(bool checked) @@ -160,34 +160,34 @@ void FreeDVDemodGUI::on_freeDVMode_currentIndexChanged(int index) m_channelMarker.setBandwidth(FreeDVDemodSettings::getHiCutoff(m_settings.m_freeDVMode) * 2); m_channelMarker.setLowCutoff(FreeDVDemodSettings::getLowCutoff(m_settings.m_freeDVMode)); m_channelMarker.setSidebands(ChannelMarker::usb); - applySettings(); + applySettings(QStringList({"freeDVMode"})); } void FreeDVDemodGUI::on_volume_valueChanged(int value) { ui->volumeText->setText(QString("%1").arg(value / 10.0, 0, 'f', 1)); m_settings.m_volume = value / 10.0; - applySettings(); + applySettings(QStringList({"volume"})); } void FreeDVDemodGUI::on_volumeIn_valueChanged(int value) { ui->volumeInText->setText(QString("%1").arg(value / 10.0, 0, 'f', 1)); m_settings.m_volumeIn = value / 10.0; - applySettings(); + applySettings(QStringList({"volumeIn"})); } void FreeDVDemodGUI::on_agc_toggled(bool checked) { m_settings.m_agc = checked; - applySettings(); + applySettings(QStringList({"agc"})); } void FreeDVDemodGUI::on_audioMute_toggled(bool checked) { m_audioMute = checked; m_settings.m_audioMute = checked; - applySettings(); + applySettings(QStringList({"audioMute"})); } void FreeDVDemodGUI::on_spanLog2_valueChanged(int value) @@ -241,7 +241,16 @@ void FreeDVDemodGUI::onMenuDialogCalled(const QPoint &p) updateIndexLabel(); } - applySettings(); + applySettings(QStringList({ + "title", + "rgbColor", + "useReverseAPI", + "reverseAPIAddress", + "reverseAPIPort", + "reverseAPIDeviceIndex", + "reverseAPIChannelIndex", + "streamIndex" + })); } resetContextMenuType(); @@ -253,7 +262,7 @@ void FreeDVDemodGUI::onWidgetRolled(QWidget* widget, bool rollDown) (void) rollDown; getRollupContents()->saveState(m_rollupState); - applySettings(); + applySettings(QStringList()); } FreeDVDemodGUI::FreeDVDemodGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, BasebandSampleSink *rxChannel, QWidget* parent) : @@ -350,11 +359,11 @@ bool FreeDVDemodGUI::blockApplySettings(bool block) return ret; } -void FreeDVDemodGUI::applySettings(bool force) +void FreeDVDemodGUI::applySettings(const QStringList& settingsKeys, bool force) { if (m_doApplySettings) { - FreeDVDemod::MsgConfigureFreeDVDemod* message = FreeDVDemod::MsgConfigureFreeDVDemod::create( m_settings, force); + FreeDVDemod::MsgConfigureFreeDVDemod* message = FreeDVDemod::MsgConfigureFreeDVDemod::create(settingsKeys, m_settings, force); m_freeDVDemod->getInputMessageQueue()->push(message); } } @@ -363,7 +372,7 @@ void FreeDVDemodGUI::applyBandwidths(int spanLog2, bool force) { displayBandwidths(spanLog2); m_settings.m_spanLog2 = spanLog2; - applySettings(force); + applySettings(QStringList({"spanLog2"}), force); } void FreeDVDemodGUI::displayBandwidths(int spanLog2) @@ -449,7 +458,7 @@ void FreeDVDemodGUI::audioSelect(const QPoint& p) if (audioSelect.m_selected) { m_settings.m_audioDeviceName = audioSelect.m_audioDeviceName; - applySettings(); + applySettings(QStringList({"audioDeviceName"})); } } diff --git a/plugins/channelrx/demodfreedv/freedvdemodgui.h b/plugins/channelrx/demodfreedv/freedvdemodgui.h index 4639e2c4e..ba9db172d 100644 --- a/plugins/channelrx/demodfreedv/freedvdemodgui.h +++ b/plugins/channelrx/demodfreedv/freedvdemodgui.h @@ -97,7 +97,7 @@ private: virtual ~FreeDVDemodGUI(); bool blockApplySettings(bool block); - void applySettings(bool force = false); + void applySettings(const QStringList& settingsKeys, bool force = false); void applyBandwidths(int spanLog2, bool force = false); void displayBandwidths(int spanLog2); void displaySettings(); diff --git a/plugins/channelrx/demodfreedv/freedvdemodsettings.cpp b/plugins/channelrx/demodfreedv/freedvdemodsettings.cpp index 2d1945081..e46e8fd43 100644 --- a/plugins/channelrx/demodfreedv/freedvdemodsettings.cpp +++ b/plugins/channelrx/demodfreedv/freedvdemodsettings.cpp @@ -176,6 +176,126 @@ bool FreeDVDemodSettings::deserialize(const QByteArray& data) } } +void FreeDVDemodSettings::applySettings(const QStringList& settingsKeys, const FreeDVDemodSettings& settings) +{ + if (settingsKeys.contains("inputFrequencyOffset")) { + m_inputFrequencyOffset = settings.m_inputFrequencyOffset; + } + if (settingsKeys.contains("volume")) { + m_volume = settings.m_volume; + } + if (settingsKeys.contains("volumeIn")) { + m_volumeIn = settings.m_volumeIn; + } + if (settingsKeys.contains("spanLog2")) { + m_spanLog2 = settings.m_spanLog2; + } + if (settingsKeys.contains("audioMute")) { + m_audioMute = settings.m_audioMute; + } + if (settingsKeys.contains("agc")) { + m_agc = settings.m_agc; + } + if (settingsKeys.contains("rgbColor")) { + m_rgbColor = settings.m_rgbColor; + } + if (settingsKeys.contains("title")) { + m_title = settings.m_title; + } + if (settingsKeys.contains("audioDeviceName")) { + m_audioDeviceName = settings.m_audioDeviceName; + } + if (settingsKeys.contains("freeDVMode")) { + m_freeDVMode = settings.m_freeDVMode; + } + if (settingsKeys.contains("streamIndex")) { + m_streamIndex = settings.m_streamIndex; + } + if (settingsKeys.contains("useReverseAPI")) { + m_useReverseAPI = settings.m_useReverseAPI; + } + if (settingsKeys.contains("reverseAPIAddress")) { + m_reverseAPIAddress = settings.m_reverseAPIAddress; + } + if (settingsKeys.contains("reverseAPIPort")) { + m_reverseAPIPort = settings.m_reverseAPIPort; + } + if (settingsKeys.contains("reverseAPIDeviceIndex")) { + m_reverseAPIDeviceIndex = settings.m_reverseAPIDeviceIndex; + } + if (settingsKeys.contains("reverseAPIChannelIndex")) { + m_reverseAPIChannelIndex = settings.m_reverseAPIChannelIndex; + } + if (settingsKeys.contains("workspaceIndex")) { + m_workspaceIndex = settings.m_workspaceIndex; + } + if (settingsKeys.contains("hidden")) { + m_hidden = settings.m_hidden; + } +} + +QString FreeDVDemodSettings::getDebugString(const QStringList& settingsKeys, bool force) const +{ + std::ostringstream ostr; + + if (settingsKeys.contains("inputFrequencyOffset") || force) { + ostr << " m_inputFrequencyOffset: " << m_inputFrequencyOffset; + } + if (settingsKeys.contains("volume") || force) { + ostr << " m_volume: " << m_volume; + } + if (settingsKeys.contains("volumeIn") || force) { + ostr << " m_volumeIn: " << m_volumeIn; + } + if (settingsKeys.contains("spanLog2") || force) { + ostr << " m_spanLog2: " << m_spanLog2; + } + if (settingsKeys.contains("audioMute") || force) { + ostr << " m_audioMute: " << m_audioMute; + } + if (settingsKeys.contains("agc") || force) { + ostr << " m_agc: " << m_agc; + } + if (settingsKeys.contains("rgbColor") || force) { + ostr << " m_rgbColor: " << m_rgbColor; + } + if (settingsKeys.contains("title") || force) { + ostr << " m_title: " << m_title.toStdString(); + } + if (settingsKeys.contains("audioDeviceName") || force) { + ostr << " m_audioDeviceName: " << m_audioDeviceName.toStdString(); + } + if (settingsKeys.contains("freeDVMode") || force) { + ostr << " m_freeDVMode: " << m_freeDVMode; + } + if (settingsKeys.contains("streamIndex") || force) { + ostr << " m_streamIndex: " << m_streamIndex; + } + if (settingsKeys.contains("useReverseAPI") || force) { + ostr << " m_useReverseAPI: " << m_useReverseAPI; + } + if (settingsKeys.contains("reverseAPIAddress") || force) { + ostr << " m_reverseAPIAddress: " << m_reverseAPIAddress.toStdString(); + } + if (settingsKeys.contains("reverseAPIPort") || force) { + ostr << " m_reverseAPIPort: " << m_reverseAPIPort; + } + if (settingsKeys.contains("reverseAPIDeviceIndex") || force) { + ostr << " m_reverseAPIDeviceIndex: " << m_reverseAPIDeviceIndex; + } + if (settingsKeys.contains("reverseAPIChannelIndex") || force) { + ostr << " m_reverseAPIChannelIndex: " << m_reverseAPIChannelIndex; + } + if (settingsKeys.contains("workspaceIndex") || force) { + ostr << " m_workspaceIndex: " << m_workspaceIndex; + } + if (settingsKeys.contains("hidden") || force) { + ostr << " m_hidden: " << m_hidden; + } + + return QString(ostr.str().c_str()); +} + int FreeDVDemodSettings::getHiCutoff(FreeDVMode freeDVMode) { switch(freeDVMode) diff --git a/plugins/channelrx/demodfreedv/freedvdemodsettings.h b/plugins/channelrx/demodfreedv/freedvdemodsettings.h index a775e6513..e66e29642 100644 --- a/plugins/channelrx/demodfreedv/freedvdemodsettings.h +++ b/plugins/channelrx/demodfreedv/freedvdemodsettings.h @@ -71,6 +71,8 @@ struct FreeDVDemodSettings void setSpectrumGUI(Serializable *spectrumGUI) { m_spectrumGUI = spectrumGUI; } QByteArray serialize() const; bool deserialize(const QByteArray& data); + void applySettings(const QStringList& settingsKeys, const FreeDVDemodSettings& settings); + QString getDebugString(const QStringList& settingsKeys, bool force=false) const; static const int m_minPowerThresholdDB; static const float m_mminPowerThresholdDBf; diff --git a/plugins/channelrx/demodfreedv/freedvdemodsink.cpp b/plugins/channelrx/demodfreedv/freedvdemodsink.cpp index dc05bdd99..3f6ce20a1 100644 --- a/plugins/channelrx/demodfreedv/freedvdemodsink.cpp +++ b/plugins/channelrx/demodfreedv/freedvdemodsink.cpp @@ -169,7 +169,7 @@ FreeDVDemodSink::FreeDVDemodSink() : m_SSBFilterBufferIndex = 0; applyChannelSettings(m_channelSampleRate, m_channelFrequencyOffset, true); - applySettings(m_settings, true); + applySettings(QStringList(), m_settings, true); } FreeDVDemodSink::~FreeDVDemodSink() @@ -503,26 +503,11 @@ void FreeDVDemodSink::applyFreeDVMode(FreeDVDemodSettings::FreeDVMode mode) } } -void FreeDVDemodSink::applySettings(const FreeDVDemodSettings& settings, bool force) +void FreeDVDemodSink::applySettings(const QStringList& settingsKeys, const FreeDVDemodSettings& settings, bool force) { - qDebug() << "FreeDVDemodSink::applySettings:" - << " m_inputFrequencyOffset: " << settings.m_inputFrequencyOffset - << " m_freeDVMode: " << (int) settings.m_freeDVMode - << " m_volume: " << settings.m_volume - << " m_volumeIn: " << settings.m_volumeIn - << " m_spanLog2: " << settings.m_spanLog2 - << " m_audioMute: " << settings.m_audioMute - << " m_agcActive: " << settings.m_agc - << " 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() << "FreeDVDemodSink::applySettings:" << settings.getDebugString(settingsKeys, force); - if ((m_settings.m_volume != settings.m_volume) || force) + if ((settingsKeys.contains("m_volume") && (settings.m_volume != m_settings.m_volume)) || force) { m_volume = settings.m_volume; m_volume /= 4.0; // for 3276.8 @@ -531,7 +516,12 @@ void FreeDVDemodSink::applySettings(const FreeDVDemodSettings& settings, bool fo m_spanLog2 = settings.m_spanLog2; m_audioMute = settings.m_audioMute; m_agcActive = settings.m_agc; - m_settings = settings; + + if (force) { + m_settings = settings; + } else { + m_settings.applySettings(settingsKeys, settings); + } } void FreeDVDemodSink::getSNRLevels(double& avg, double& peak, int& nbSamples) diff --git a/plugins/channelrx/demodfreedv/freedvdemodsink.h b/plugins/channelrx/demodfreedv/freedvdemodsink.h index 9480647d5..6255f8bf9 100644 --- a/plugins/channelrx/demodfreedv/freedvdemodsink.h +++ b/plugins/channelrx/demodfreedv/freedvdemodsink.h @@ -46,7 +46,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 FreeDVDemodSettings& settings, bool force = false); + void applySettings(const QStringList& settingsKeys, const FreeDVDemodSettings& settings, bool force = false); void applyAudioSampleRate(int sampleRate); void applyFreeDVMode(FreeDVDemodSettings::FreeDVMode mode); AudioFifo *getAudioFifo() { return &m_audioFifo; } diff --git a/plugins/channelrx/demodft8/ft8demod.cpp b/plugins/channelrx/demodft8/ft8demod.cpp index abb6d7a20..5ef40f11f 100644 --- a/plugins/channelrx/demodft8/ft8demod.cpp +++ b/plugins/channelrx/demodft8/ft8demod.cpp @@ -62,7 +62,7 @@ FT8Demod::FT8Demod(DeviceAPI *deviceAPI) : { setObjectName(m_channelId); - applySettings(m_settings, true); + applySettings(QStringList(), m_settings, true); m_deviceAPI->addChannelSink(this); m_deviceAPI->addChannelSinkAPI(this); @@ -187,7 +187,7 @@ void FT8Demod::start() m_thread->start(); - FT8DemodBaseband::MsgConfigureFT8DemodBaseband *msg = FT8DemodBaseband::MsgConfigureFT8DemodBaseband::create(m_settings, true); + FT8DemodBaseband::MsgConfigureFT8DemodBaseband *msg = FT8DemodBaseband::MsgConfigureFT8DemodBaseband::create(QStringList(), m_settings, true); m_basebandSink->getInputMessageQueue()->push(msg); m_running = true; @@ -214,7 +214,7 @@ bool FT8Demod::handleMessage(const Message& cmd) MsgConfigureFT8Demod& cfg = (MsgConfigureFT8Demod&) cmd; qDebug("FT8Demod::handleMessage: MsgConfigureFT8Demod"); - applySettings(cfg.getSettings(), cfg.getForce()); + applySettings(cfg.getSettingsKeys(), cfg.getSettings(), cfg.getForce()); return true; } @@ -251,98 +251,20 @@ void FT8Demod::setCenterFrequency(qint64 frequency) { FT8DemodSettings settings = m_settings; settings.m_inputFrequencyOffset = frequency; - applySettings(settings, false); + applySettings(QStringList("inputFrequencyOffset"), settings, false); if (m_guiMessageQueue) // forward to GUI if any { - MsgConfigureFT8Demod *msgToGUI = MsgConfigureFT8Demod::create(settings, false); + MsgConfigureFT8Demod *msgToGUI = MsgConfigureFT8Demod::create(QStringList("inputFrequencyOffset"), settings, false); m_guiMessageQueue->push(msgToGUI); } } -void FT8Demod::applySettings(const FT8DemodSettings& settings, bool force) +void FT8Demod::applySettings(const QStringList& settingsKeys, const FT8DemodSettings& settings, bool force) { - qDebug() << "FT8Demod::applySettings:" - << " m_inputFrequencyOffset: " << settings.m_inputFrequencyOffset - << " m_filterIndex: " << settings.m_filterIndex - << " [m_spanLog2: " << settings.m_filterBank[settings.m_filterIndex].m_spanLog2 - << " m_rfBandwidth: " << settings.m_filterBank[settings.m_filterIndex].m_rfBandwidth - << " m_lowCutoff: " << settings.m_filterBank[settings.m_filterIndex].m_lowCutoff - << " m_fftWindow: " << settings.m_filterBank[settings.m_filterIndex].m_fftWindow << "]" - << " m_volume: " << settings.m_volume - << " m_agcActive: " << settings.m_agc - << " 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() << "FT8Demod::applySettings:" << settings.getDebugString(settingsKeys, force); - QList reverseAPIKeys; - - if ((m_settings.m_inputFrequencyOffset != settings.m_inputFrequencyOffset) || force) { - reverseAPIKeys.append("inputFrequencyOffset"); - } - if ((m_settings.m_filterIndex != settings.m_filterIndex) || force) { - reverseAPIKeys.append("filterIndex"); - } - if ((m_settings.m_filterBank[m_settings.m_filterIndex].m_spanLog2 != settings.m_filterBank[settings.m_filterIndex].m_spanLog2) || force) { - reverseAPIKeys.append("spanLog2"); - } - if ((m_settings.m_filterBank[m_settings.m_filterIndex].m_rfBandwidth != settings.m_filterBank[settings.m_filterIndex].m_rfBandwidth) || force) { - reverseAPIKeys.append("rfBandwidth"); - } - if ((m_settings.m_filterBank[m_settings.m_filterIndex].m_lowCutoff != settings.m_filterBank[settings.m_filterIndex].m_lowCutoff) || force) { - reverseAPIKeys.append("lowCutoff"); - } - if ((m_settings.m_filterBank[m_settings.m_filterIndex].m_fftWindow != settings.m_filterBank[settings.m_filterIndex].m_fftWindow) || force) { - reverseAPIKeys.append("fftWindow"); - } - if ((m_settings.m_volume != settings.m_volume) || force) { - reverseAPIKeys.append("volume"); - } - if ((m_settings.m_agc != settings.m_agc) || force) { - reverseAPIKeys.append("agc"); - } - if ((m_settings.m_recordWav != settings.m_recordWav) || force) { - reverseAPIKeys.append("recordWav"); - } - if ((m_settings.m_logMessages != settings.m_logMessages) || force) { - reverseAPIKeys.append("logMessages"); - } - if ((m_settings.m_nbDecoderThreads != settings.m_nbDecoderThreads) || force) { - reverseAPIKeys.append("nbDecoderThreads"); - } - if ((m_settings.m_decoderTimeBudget != settings.m_decoderTimeBudget) || force) { - reverseAPIKeys.append("decoderTimeBudget"); - } - if ((m_settings.m_useOSD != settings.m_useOSD) || force) { - reverseAPIKeys.append("useOSD"); - } - if ((m_settings.m_osdDepth != settings.m_osdDepth) || force) { - reverseAPIKeys.append("osdDepth"); - } - if ((m_settings.m_osdLDPCThreshold != settings.m_osdLDPCThreshold) || force) { - reverseAPIKeys.append("osdLDPCThreshold"); - } - if ((m_settings.m_verifyOSD != settings.m_verifyOSD) || force) { - reverseAPIKeys.append("verifyOSD"); - } - if ((m_settings.m_enablePSKReporter != settings.m_enablePSKReporter) || force) { - reverseAPIKeys.append("enablePSKReporter"); - } - if ((m_settings.m_pskReporterCallsign != settings.m_pskReporterCallsign) || force) { - reverseAPIKeys.append("pskReporterCallsign"); - } - if ((m_settings.m_pskReporterLocator != settings.m_pskReporterLocator) || force) { - reverseAPIKeys.append("pskReporterLocator"); - } - if ((m_settings.m_pskReporterSoftware != settings.m_pskReporterSoftware) || force) { - reverseAPIKeys.append("pskReporterSoftware"); - } - - 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 { @@ -353,12 +275,10 @@ void FT8Demod::applySettings(const FT8DemodSettings& settings, bool force) m_settings.m_streamIndex = settings.m_streamIndex; // make sure ChannelAPI::getStreamIndex() is consistent emit streamIndexChanged(settings.m_streamIndex); } - - reverseAPIKeys.append("streamIndex"); } - if ((settings.m_filterBank[settings.m_filterIndex].m_rfBandwidth != m_settings.m_filterBank[m_settings.m_filterIndex].m_rfBandwidth) - || (settings.m_filterBank[settings.m_filterIndex].m_lowCutoff != m_settings.m_filterBank[m_settings.m_filterIndex].m_lowCutoff) || force) + if ((settingsKeys.contains("rfBandwidth") && (settings.m_filterBank[settings.m_filterIndex].m_rfBandwidth != m_settings.m_filterBank[m_settings.m_filterIndex].m_rfBandwidth)) + || (settingsKeys.contains("lowCutoff") && (settings.m_filterBank[settings.m_filterIndex].m_lowCutoff != m_settings.m_filterBank[m_settings.m_filterIndex].m_lowCutoff)) || force) { SpectrumSettings spectrumSettings = m_spectrumVis.getSettings(); spectrumSettings.m_usb = (settings.m_filterBank[settings.m_filterIndex].m_lowCutoff < settings.m_filterBank[settings.m_filterIndex].m_rfBandwidth); @@ -368,28 +288,32 @@ void FT8Demod::applySettings(const FT8DemodSettings& settings, bool force) if (m_running) { - FT8DemodBaseband::MsgConfigureFT8DemodBaseband *msg = FT8DemodBaseband::MsgConfigureFT8DemodBaseband::create(settings, force); + FT8DemodBaseband::MsgConfigureFT8DemodBaseband *msg = FT8DemodBaseband::MsgConfigureFT8DemodBaseband::create(settingsKeys, settings, force); m_basebandSink->getInputMessageQueue()->push(msg); } if (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; + if (force) { + m_settings = settings; + } else { + m_settings.applySettings(settingsKeys, settings); + } } QByteArray FT8Demod::serialize() const @@ -401,14 +325,14 @@ bool FT8Demod::deserialize(const QByteArray& data) { if (m_settings.deserialize(data)) { - MsgConfigureFT8Demod *msg = MsgConfigureFT8Demod::create(m_settings, true); + MsgConfigureFT8Demod *msg = MsgConfigureFT8Demod::create(QStringList(), m_settings, true); m_inputMessageQueue.push(msg); return true; } else { m_settings.resetToDefaults(); - MsgConfigureFT8Demod *msg = MsgConfigureFT8Demod::create(m_settings, true); + MsgConfigureFT8Demod *msg = MsgConfigureFT8Demod::create(QStringList(), m_settings, true); m_inputMessageQueue.push(msg); return false; } @@ -467,13 +391,13 @@ int FT8Demod::webapiSettingsPutPatch( FT8DemodSettings settings = m_settings; webapiUpdateChannelSettings(settings, channelSettingsKeys, response); - MsgConfigureFT8Demod *msg = MsgConfigureFT8Demod::create(settings, force); + MsgConfigureFT8Demod *msg = MsgConfigureFT8Demod::create(channelSettingsKeys, settings, force); m_inputMessageQueue.push(msg); qDebug("FT8Demod::webapiSettingsPutPatch: forward to GUI: %p", m_guiMessageQueue); if (m_guiMessageQueue) // forward to GUI if any { - MsgConfigureFT8Demod *msgToGUI = MsgConfigureFT8Demod::create(settings, force); + MsgConfigureFT8Demod *msgToGUI = MsgConfigureFT8Demod::create(channelSettingsKeys, settings, force); m_guiMessageQueue->push(msgToGUI); } @@ -696,7 +620,7 @@ void FT8Demod::webapiFormatChannelReport(SWGSDRangel::SWGChannelReport& response } } -void FT8Demod::webapiReverseSendSettings(QList& channelSettingsKeys, const FT8DemodSettings& settings, bool force) +void FT8Demod::webapiReverseSendSettings(const QList& channelSettingsKeys, const FT8DemodSettings& settings, bool force) { SWGSDRangel::SWGChannelSettings *swgChannelSettings = new SWGSDRangel::SWGChannelSettings(); webapiFormatChannelSettings(channelSettingsKeys, swgChannelSettings, settings, force); @@ -723,7 +647,7 @@ void FT8Demod::webapiReverseSendSettings(QList& channelSettingsKeys, co void FT8Demod::sendChannelSettings( const QList& pipes, - QList& channelSettingsKeys, + const QList& channelSettingsKeys, const FT8DemodSettings& settings, bool force) { @@ -749,7 +673,7 @@ void FT8Demod::sendChannelSettings( } void FT8Demod::webapiFormatChannelSettings( - QList& channelSettingsKeys, + const QList& channelSettingsKeys, SWGSDRangel::SWGChannelSettings *swgChannelSettings, const FT8DemodSettings& settings, bool force diff --git a/plugins/channelrx/demodft8/ft8demod.h b/plugins/channelrx/demodft8/ft8demod.h index 7fe05bb77..2f409a21c 100644 --- a/plugins/channelrx/demodft8/ft8demod.h +++ b/plugins/channelrx/demodft8/ft8demod.h @@ -49,20 +49,23 @@ public: public: const FT8DemodSettings& getSettings() const { return m_settings; } + const QStringList& getSettingsKeys() const { return m_settingsKeys; } bool getForce() const { return m_force; } - static MsgConfigureFT8Demod* create(const FT8DemodSettings& settings, bool force) + static MsgConfigureFT8Demod* create(const QStringList& settingsKeys, const FT8DemodSettings& settings, bool force) { - return new MsgConfigureFT8Demod(settings, force); + return new MsgConfigureFT8Demod(settingsKeys, settings, force); } private: FT8DemodSettings m_settings; + QStringList m_settingsKeys; bool m_force; - MsgConfigureFT8Demod(const FT8DemodSettings& settings, bool force) : + MsgConfigureFT8Demod(const QStringList& settingsKeys, const FT8DemodSettings& settings, bool force) : Message(), m_settings(settings), + m_settingsKeys(settingsKeys), m_force(force) { } }; @@ -164,18 +167,18 @@ private: QNetworkRequest m_networkRequest; virtual bool handleMessage(const Message& cmd); - void applySettings(const FT8DemodSettings& settings, bool force = false); + void applySettings(const QStringList& settingsKeys, const FT8DemodSettings& settings, bool force = false); void sendSampleRateToDemodAnalyzer(); void webapiFormatChannelReport(SWGSDRangel::SWGChannelReport& response); - void webapiReverseSendSettings(QList& channelSettingsKeys, const FT8DemodSettings& settings, bool force); + void webapiReverseSendSettings(const QList& channelSettingsKeys, const FT8DemodSettings& settings, bool force); void sendChannelSettings( const QList& pipes, - QList& channelSettingsKeys, + const QList& channelSettingsKeys, const FT8DemodSettings& settings, bool force ); void webapiFormatChannelSettings( - QList& channelSettingsKeys, + const QList& channelSettingsKeys, SWGSDRangel::SWGChannelSettings *swgChannelSettings, const FT8DemodSettings& settings, bool force @@ -187,6 +190,3 @@ private slots: }; #endif // INCLUDE_FT8DEMOD_H - - - diff --git a/plugins/channelrx/demodft8/ft8demodbaseband.cpp b/plugins/channelrx/demodft8/ft8demodbaseband.cpp index 24c20deb5..5edf60ec3 100644 --- a/plugins/channelrx/demodft8/ft8demodbaseband.cpp +++ b/plugins/channelrx/demodft8/ft8demodbaseband.cpp @@ -174,7 +174,7 @@ bool FT8DemodBaseband::handleMessage(const Message& cmd) MsgConfigureFT8DemodBaseband& cfg = (MsgConfigureFT8DemodBaseband&) cmd; qDebug() << "FT8DemodBaseband::handleMessage: MsgConfigureFT8DemodBaseband"; - applySettings(cfg.getSettings(), cfg.getForce()); + applySettings(cfg.getSettingsKeys(), cfg.getSettings(), cfg.getForce()); return true; } @@ -208,9 +208,9 @@ bool FT8DemodBaseband::handleMessage(const Message& cmd) } } -void FT8DemodBaseband::applySettings(const FT8DemodSettings& settings, bool force) +void FT8DemodBaseband::applySettings(const QStringList& settingsKeys, const FT8DemodSettings& 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_ft8DemodWorker->invalidateSequence(); m_ft8DemodWorker->setBaseFrequency(m_deviceCenterFrequency + settings.m_inputFrequencyOffset); @@ -241,56 +241,61 @@ void FT8DemodBaseband::applySettings(const FT8DemodSettings& settings, bool forc m_ft8DemodWorker->setHighFrequency(settings.m_filterBank[settings.m_filterIndex].m_rfBandwidth); } - if ((settings.m_recordWav != m_settings.m_recordWav) || force) { + if ((settingsKeys.contains("recordWav") && (settings.m_recordWav != m_settings.m_recordWav)) || force) { m_ft8DemodWorker->setRecordSamples(settings.m_recordWav); } - if ((settings.m_logMessages != m_settings.m_logMessages) || force) { + if ((settingsKeys.contains("logMessages") && (settings.m_logMessages != m_settings.m_logMessages)) || force) { m_ft8DemodWorker->setLogMessages(settings.m_logMessages); } - if ((settings.m_enablePSKReporter != m_settings.m_enablePSKReporter) || force) { + if ((settingsKeys.contains("enablePSKReporter") && (settings.m_enablePSKReporter != m_settings.m_enablePSKReporter)) || force) { m_ft8DemodWorker->setEnablePskReporter(settings.m_enablePSKReporter); } - if ((settings.m_pskReporterCallsign != m_settings.m_pskReporterCallsign) || force) { + if ((settingsKeys.contains("pskReporterCallsign") && (settings.m_pskReporterCallsign != m_settings.m_pskReporterCallsign)) || force) { m_pskReporterWorker->setMyCallsign(settings.m_pskReporterCallsign); } - if ((settings.m_pskReporterLocator != m_settings.m_pskReporterLocator) || force) { + if ((settingsKeys.contains("pskReporterLocator") && (settings.m_pskReporterLocator != m_settings.m_pskReporterLocator)) || force) { m_pskReporterWorker->setMyLocator(settings.m_pskReporterLocator); } - if ((settings.m_pskReporterSoftware != m_settings.m_pskReporterSoftware) || force) { + if ((settingsKeys.contains("pskReporterSoftware") && (settings.m_pskReporterSoftware != m_settings.m_pskReporterSoftware)) || force) { m_pskReporterWorker->setDecoderInfo(settings.m_pskReporterSoftware); } - if ((settings.m_nbDecoderThreads != m_settings.m_nbDecoderThreads) || force) { + if ((settingsKeys.contains("nbDecoderThreads") && (settings.m_nbDecoderThreads != m_settings.m_nbDecoderThreads)) || force) { m_ft8DemodWorker->setNbDecoderThreads(settings.m_nbDecoderThreads); } - if ((settings.m_decoderTimeBudget != m_settings.m_decoderTimeBudget) || force) { + if ((settingsKeys.contains("decoderTimeBudget") && (settings.m_decoderTimeBudget != m_settings.m_decoderTimeBudget)) || force) { m_ft8DemodWorker->setDecoderTimeBudget(settings.m_decoderTimeBudget); } - if ((settings.m_useOSD != m_settings.m_useOSD) || force) { + if ((settingsKeys.contains("useOSD") && (settings.m_useOSD != m_settings.m_useOSD)) || force) { m_ft8DemodWorker->setUseOSD(settings.m_useOSD); } - if ((settings.m_osdDepth != m_settings.m_osdDepth) || force) { + if ((settingsKeys.contains("osdDepth") && (settings.m_osdDepth != m_settings.m_osdDepth)) || force) { m_ft8DemodWorker->setOSDDepth(settings.m_osdDepth); } - if ((settings.m_osdLDPCThreshold != m_settings.m_osdLDPCThreshold) || force) { + if ((settingsKeys.contains("osdLDPCThreshold") && (settings.m_osdLDPCThreshold != m_settings.m_osdLDPCThreshold)) || force) { m_ft8DemodWorker->setOSDLDPCThreshold(settings.m_osdLDPCThreshold); } - if ((settings.m_verifyOSD != m_settings.m_verifyOSD) || force) { + if ((settingsKeys.contains("verifyOSD") && (settings.m_verifyOSD != m_settings.m_verifyOSD)) || force) { m_ft8DemodWorker->setVerifyOSD(settings.m_verifyOSD); } - 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 FT8DemodBaseband::getChannelSampleRate() const diff --git a/plugins/channelrx/demodft8/ft8demodbaseband.h b/plugins/channelrx/demodft8/ft8demodbaseband.h index f64cffb47..60142a3b9 100644 --- a/plugins/channelrx/demodft8/ft8demodbaseband.h +++ b/plugins/channelrx/demodft8/ft8demodbaseband.h @@ -47,20 +47,23 @@ public: public: const FT8DemodSettings& getSettings() const { return m_settings; } + const QStringList& getSettingsKeys() const { return m_settingsKeys; } bool getForce() const { return m_force; } - static MsgConfigureFT8DemodBaseband* create(const FT8DemodSettings& settings, bool force) + static MsgConfigureFT8DemodBaseband* create(const QStringList& settingsKeys, const FT8DemodSettings& settings, bool force) { - return new MsgConfigureFT8DemodBaseband(settings, force); + return new MsgConfigureFT8DemodBaseband(settingsKeys, settings, force); } private: FT8DemodSettings m_settings; + QStringList m_settingsKeys; bool m_force; - MsgConfigureFT8DemodBaseband(const FT8DemodSettings& settings, bool force) : + MsgConfigureFT8DemodBaseband(const QStringList& settingsKeys, const FT8DemodSettings& settings, bool force) : Message(), m_settings(settings), + m_settingsKeys(settingsKeys), m_force(force) { } }; @@ -110,7 +113,7 @@ private: QRecursiveMutex m_mutex; bool handleMessage(const Message& cmd); - void applySettings(const FT8DemodSettings& settings, bool force = false); + void applySettings(const QStringList& settingsKeys, const FT8DemodSettings& settings, bool force = false); MessageQueue *getMessageQueueToGUI() { return m_messageQueueToGUI; } private slots: diff --git a/plugins/channelrx/demodft8/ft8demodgui.cpp b/plugins/channelrx/demodft8/ft8demodgui.cpp index bb3084d7e..2de33364c 100644 --- a/plugins/channelrx/demodft8/ft8demodgui.cpp +++ b/plugins/channelrx/demodft8/ft8demodgui.cpp @@ -362,7 +362,7 @@ void FT8DemodGUI::channelMarkerChangedByCursor() { ui->deltaFrequency->setValue(m_channelMarker.getCenterFrequency()); m_settings.m_inputFrequencyOffset = m_channelMarker.getCenterFrequency(); - applySettings(); + applySettings(QStringList("inputFrequencyOffset")); } void FT8DemodGUI::channelMarkerHighlightedByCursor() @@ -375,7 +375,7 @@ void FT8DemodGUI::on_deltaFrequency_changed(qint64 value) m_channelMarker.setCenterFrequency(value); m_settings.m_inputFrequencyOffset = m_channelMarker.getCenterFrequency(); updateAbsoluteCenterFrequency(); - applySettings(); + applySettings(QStringList("inputFrequencyOffset")); } void FT8DemodGUI::on_BW_valueChanged(int value) @@ -395,13 +395,13 @@ void FT8DemodGUI::on_volume_valueChanged(int value) { ui->volumeText->setText(QString("%1").arg(value)); m_settings.m_volume = CalcDb::powerFromdB(value); - applySettings(); + applySettings(QStringList("volume")); } void FT8DemodGUI::on_agc_toggled(bool checked) { m_settings.m_agc = checked; - applySettings(); + applySettings(QStringList("agc")); } void FT8DemodGUI::on_spanLog2_valueChanged(int value) @@ -418,7 +418,7 @@ void FT8DemodGUI::on_spanLog2_valueChanged(int value) void FT8DemodGUI::on_fftWindow_currentIndexChanged(int index) { m_settings.m_filterBank[m_settings.m_filterIndex].m_fftWindow = (FFTWindow::Function) index; - applySettings(); + applySettings(QStringList({"filterBank", "fftWindow"})); } void FT8DemodGUI::on_filterIndex_valueChanged(int value) @@ -460,7 +460,7 @@ void FT8DemodGUI::on_applyBandPreset_clicked() { m_settings.m_inputFrequencyOffset = channelShift * 1000; // Hz displaySettings(); - applySettings(); + applySettings(QStringList("inputFrequencyOffset")); } } @@ -473,13 +473,13 @@ void FT8DemodGUI::on_clearMessages_clicked() void FT8DemodGUI::on_recordWav_toggled(bool checked) { m_settings.m_recordWav = checked; - applySettings(); + applySettings(QStringList("recordWav")); } void FT8DemodGUI::on_logMessages_toggled(bool checked) { m_settings.m_logMessages = checked; - applySettings(); + applySettings(QStringList("logMessages")); } void FT8DemodGUI::on_settings_clicked() @@ -559,7 +559,7 @@ void FT8DemodGUI::on_settings_clicked() } if (changed) { - applySettings(); + applySettings(settingsKeys); } } } @@ -606,7 +606,16 @@ void FT8DemodGUI::onMenuDialogCalled(const QPoint &p) updateIndexLabel(); } - applySettings(); + applySettings(QStringList({ + "rgbColor", + "title", + "useReverseAPI", + "reverseAPIAddress", + "reverseAPIPort", + "reverseAPIDeviceIndex", + "reverseAPIChannelIndex", + "streamIndex" + })); } resetContextMenuType(); @@ -618,7 +627,7 @@ void FT8DemodGUI::onWidgetRolled(QWidget* widget, bool rollDown) (void) rollDown; getRollupContents()->saveState(m_rollupState); - applySettings(); + applySettings(QStringList()); } FT8DemodGUI::FT8DemodGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, BasebandSampleSink *rxChannel, QWidget* parent) : @@ -718,11 +727,11 @@ bool FT8DemodGUI::blockApplySettings(bool block) return ret; } -void FT8DemodGUI::applySettings(bool force) +void FT8DemodGUI::applySettings(const QStringList& settingsKeys, const bool force) { if (m_doApplySettings) { - FT8Demod::MsgConfigureFT8Demod* message = FT8Demod::MsgConfigureFT8Demod::create( m_settings, force); + FT8Demod::MsgConfigureFT8Demod* message = FT8Demod::MsgConfigureFT8Demod::create(settingsKeys, m_settings, force); m_ft8Demod->getInputMessageQueue()->push(message); } } @@ -800,7 +809,7 @@ void FT8DemodGUI::applyBandwidths(unsigned int spanLog2, bool force) m_settings.m_filterBank[m_settings.m_filterIndex].m_rfBandwidth = bw * 100; m_settings.m_filterBank[m_settings.m_filterIndex].m_lowCutoff = lw * 100; - applySettings(force); + applySettings(QStringList({"filterBank", "spanLog2", "lowCutoff", "rfBandwidth"}), force); bool wasBlocked = blockApplySettings(true); m_channelMarker.setBandwidth(bw * 200); diff --git a/plugins/channelrx/demodft8/ft8demodgui.h b/plugins/channelrx/demodft8/ft8demodgui.h index 1505e1f6a..73a303747 100644 --- a/plugins/channelrx/demodft8/ft8demodgui.h +++ b/plugins/channelrx/demodft8/ft8demodgui.h @@ -141,7 +141,7 @@ private: virtual ~FT8DemodGUI(); 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(); void displaySettings(); diff --git a/plugins/channelrx/demodft8/ft8demodsettings.cpp b/plugins/channelrx/demodft8/ft8demodsettings.cpp index ca114f622..75f165448 100644 --- a/plugins/channelrx/demodft8/ft8demodsettings.cpp +++ b/plugins/channelrx/demodft8/ft8demodsettings.cpp @@ -252,6 +252,180 @@ bool FT8DemodSettings::deserialize(const QByteArray& data) } } +void FT8DemodSettings::applySettings(const QStringList& settingsKeys, const FT8DemodSettings& settings) +{ + if (settingsKeys.contains("inputFrequencyOffset")) { + m_inputFrequencyOffset = settings.m_inputFrequencyOffset; + } + if (settingsKeys.contains("volume")) { + m_volume = settings.m_volume; + } + if (settingsKeys.contains("agc")) { + m_agc = settings.m_agc; + } + if (settingsKeys.contains("recordWav")) { + m_recordWav = settings.m_recordWav; + } + if (settingsKeys.contains("logMessages")) { + m_logMessages = settings.m_logMessages; + } + if (settingsKeys.contains("nbDecoderThreads")) { + m_nbDecoderThreads = settings.m_nbDecoderThreads; + } + if (settingsKeys.contains("decoderTimeBudget")) { + m_decoderTimeBudget = settings.m_decoderTimeBudget; + } + if (settingsKeys.contains("useOSD")) { + m_useOSD = settings.m_useOSD; + } + if (settingsKeys.contains("osdDepth")) { + m_osdDepth = settings.m_osdDepth; + } + if (settingsKeys.contains("osdLDPCThreshold")) { + m_osdLDPCThreshold = settings.m_osdLDPCThreshold; + } + if (settingsKeys.contains("verifyOSD")) { + m_verifyOSD = settings.m_verifyOSD; + } + if (settingsKeys.contains("rgbColor")) { + m_rgbColor = settings.m_rgbColor; + } + if (settingsKeys.contains("title")) { + m_title = settings.m_title; + } + if (settingsKeys.contains("streamIndex")) { + m_streamIndex = settings.m_streamIndex; + } + if (settingsKeys.contains("useReverseAPI")) { + m_useReverseAPI = settings.m_useReverseAPI; + } + if (settingsKeys.contains("reverseAPIAddress")) { + m_reverseAPIAddress = settings.m_reverseAPIAddress; + } + if (settingsKeys.contains("reverseAPIPort")) { + m_reverseAPIPort = settings.m_reverseAPIPort; + } + if (settingsKeys.contains("reverseAPIDeviceIndex")) { + m_reverseAPIDeviceIndex = settings.m_reverseAPIDeviceIndex; + } + if (settingsKeys.contains("reverseAPIChannelIndex")) { + m_reverseAPIChannelIndex = settings.m_reverseAPIChannelIndex; + } + if (settingsKeys.contains("workspaceIndex")) { + m_workspaceIndex = settings.m_workspaceIndex; + } + if (settingsKeys.contains("hidden")) { + m_hidden = settings.m_hidden; + } + if (settingsKeys.contains("filterBank")) { + m_filterBank = settings.m_filterBank; + } + if (settingsKeys.contains("filterIndex")) { + m_filterIndex = settings.m_filterIndex; + } + if (settingsKeys.contains("bandPresets")) { + m_bandPresets = settings.m_bandPresets; + } + if (settingsKeys.contains("enablePSKReporter")) { + m_enablePSKReporter = settings.m_enablePSKReporter; + } + if (settingsKeys.contains("pskReporterCallsign")) { + m_pskReporterCallsign = settings.m_pskReporterCallsign; + } + if (settingsKeys.contains("pskReporterLocator")) { + m_pskReporterLocator = settings.m_pskReporterLocator; + } + if (settingsKeys.contains("pskReporterSoftware")) { + m_pskReporterSoftware = settings.m_pskReporterSoftware; + } +} + +QString FT8DemodSettings::getDebugString(const QStringList& settingsKeys, bool force) const +{ + std::ostringstream ostr; + + if (settingsKeys.contains("inputFrequencyOffset") || force) { + ostr << " m_inputFrequencyOffset: " << m_inputFrequencyOffset; + } + if (settingsKeys.contains("volume") || force) { + ostr << " m_volume: " << m_volume; + } + if (settingsKeys.contains("agc") || force) { + ostr << " m_agc: " << m_agc; + } + if (settingsKeys.contains("recordWav") || force) { + ostr << " m_recordWav: " << m_recordWav; + } + if (settingsKeys.contains("logMessages") || force) { + ostr << " m_logMessages: " << m_logMessages; + } + if (settingsKeys.contains("nbDecoderThreads") || force) { + ostr << " m_nbDecoderThreads: " << m_nbDecoderThreads; + } + if (settingsKeys.contains("decoderTimeBudget") || force) { + ostr << " m_decoderTimeBudget: " << m_decoderTimeBudget; + } + if (settingsKeys.contains("useOSD") || force) { + ostr << " m_useOSD: " << m_useOSD; + } + if (settingsKeys.contains("osdDepth") || force) { + ostr << " m_osdDepth: " << m_osdDepth; + } + if (settingsKeys.contains("osdLDPCThreshold") || force) { + ostr << " m_osdLDPCThreshold: " << m_osdLDPCThreshold; + } + if (settingsKeys.contains("verifyOSD") || force) { + ostr << " m_verifyOSD: " << m_verifyOSD; + } + if (settingsKeys.contains("rgbColor") || force) { + ostr << " m_rgbColor: " << m_rgbColor; + } + if (settingsKeys.contains("title") || force) { + ostr << " m_title: " << m_title.toStdString(); + } + if (settingsKeys.contains("streamIndex") || force) { + ostr << " m_streamIndex: " << m_streamIndex; + } + if (settingsKeys.contains("useReverseAPI") || force) { + ostr << " m_useReverseAPI: " << m_useReverseAPI; + } + if (settingsKeys.contains("reverseAPIAddress") || force) { + ostr << " m_reverseAPIAddress: " << m_reverseAPIAddress.toStdString(); + } + if (settingsKeys.contains("reverseAPIPort") || force) { + ostr << " m_reverseAPIPort: " << m_reverseAPIPort; + } + if (settingsKeys.contains("reverseAPIDeviceIndex") || force) { + ostr << " m_reverseAPIDeviceIndex: " << m_reverseAPIDeviceIndex; + } + if (settingsKeys.contains("reverseAPIChannelIndex") || force) { + ostr << " m_reverseAPIChannelIndex: " << m_reverseAPIChannelIndex; + } + if (settingsKeys.contains("workspaceIndex") || force) { + ostr << " m_workspaceIndex: " << m_workspaceIndex; + } + if (settingsKeys.contains("hidden") || force) { + ostr << " m_hidden: " << m_hidden; + } + if (settingsKeys.contains("filterIndex") || force) { + ostr << " m_filterIndex: " << m_filterIndex; + } + if (settingsKeys.contains("enablePSKReporter") || force) { + ostr << " m_enablePSKReporter: " << m_enablePSKReporter; + } + if (settingsKeys.contains("pskReporterCallsign") || force) { + ostr << " m_pskReporterCallsign: " << m_pskReporterCallsign.toStdString(); + } + if (settingsKeys.contains("pskReporterLocator") || force) { + ostr << " m_pskReporterLocator: " << m_pskReporterLocator.toStdString(); + } + if (settingsKeys.contains("pskReporterSoftware") || force) { + ostr << " m_pskReporterSoftware: " << m_pskReporterSoftware.toStdString(); + } + + return QString(ostr.str().c_str()); +} + QDataStream& operator<<(QDataStream& out, const FT8DemodBandPreset& bandPreset) { out << bandPreset.m_name; diff --git a/plugins/channelrx/demodft8/ft8demodsettings.h b/plugins/channelrx/demodft8/ft8demodsettings.h index a6da8e27b..c3da7b5c8 100644 --- a/plugins/channelrx/demodft8/ft8demodsettings.h +++ b/plugins/channelrx/demodft8/ft8demodsettings.h @@ -117,6 +117,8 @@ public: QString getDefaultReporterCallsign() const; QString getDefaultReporterLocator() const; QString getDefaultReporterSoftware() const; + void applySettings(const QStringList& settingsKeys, const FT8DemodSettings& settings); + QString getDebugString(const QStringList& settingsKeys, bool force=false) const; static const int m_ft8SampleRate; static const int m_minPowerThresholdDB; diff --git a/plugins/channelrx/demodft8/ft8demodsink.cpp b/plugins/channelrx/demodft8/ft8demodsink.cpp index 8bff93045..d318760be 100644 --- a/plugins/channelrx/demodft8/ft8demodsink.cpp +++ b/plugins/channelrx/demodft8/ft8demodsink.cpp @@ -88,7 +88,7 @@ FT8DemodSink::FT8DemodSink() : SSBFilter = new fftfilt(m_LowCutoff / FT8DemodSettings::m_ft8SampleRate, m_Bandwidth / FT8DemodSettings::m_ft8SampleRate, m_ssbFftLen); applyChannelSettings(m_channelSampleRate, m_channelFrequencyOffset, true); - applySettings(m_settings, true); + applySettings(QStringList(), m_settings, true); } FT8DemodSink::~FT8DemodSink() @@ -265,24 +265,9 @@ void FT8DemodSink::applyFT8SampleRate() } } -void FT8DemodSink::applySettings(const FT8DemodSettings& settings, bool force) +void FT8DemodSink::applySettings(const QStringList& settingsKeys, const FT8DemodSettings& settings, bool force) { - qDebug() << "FT8DemodSink::applySettings:" - << " m_inputFrequencyOffset: " << settings.m_inputFrequencyOffset - << " m_filterIndex: " << settings.m_filterIndex - << " [m_spanLog2: " << settings.m_filterBank[settings.m_filterIndex].m_spanLog2 - << " m_rfBandwidth: " << settings.m_filterBank[settings.m_filterIndex].m_rfBandwidth - << " m_lowCutoff: " << settings.m_filterBank[settings.m_filterIndex].m_lowCutoff - << " m_fftWindow: " << settings.m_filterBank[settings.m_filterIndex].m_fftWindow << "]" - << " m_volume: " << settings.m_volume - << " m_agcActive: " << settings.m_agc - << " 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() << "FT8DemodSink::applySettings:" << settings.getDebugString(settingsKeys, force); if((m_settings.m_filterBank[m_settings.m_filterIndex].m_rfBandwidth != settings.m_filterBank[settings.m_filterIndex].m_rfBandwidth) || (m_settings.m_filterBank[m_settings.m_filterIndex].m_lowCutoff != settings.m_filterBank[settings.m_filterIndex].m_lowCutoff) || @@ -317,7 +302,7 @@ void FT8DemodSink::applySettings(const FT8DemodSettings& settings, bool force) SSBFilter->create_filter(m_LowCutoff / (float) FT8DemodSettings::m_ft8SampleRate, m_Bandwidth / (float) FT8DemodSettings::m_ft8SampleRate, settings.m_filterBank[settings.m_filterIndex].m_fftWindow); } - if ((m_settings.m_volume != settings.m_volume) || force) + if ((settingsKeys.contains("volume") && (m_settings.m_volume != settings.m_volume)) || force) { m_volume = settings.m_volume; m_volume /= 4.0; // for 3276.8 @@ -325,7 +310,12 @@ void FT8DemodSink::applySettings(const FT8DemodSettings& settings, bool force) m_spanLog2 = settings.m_filterBank[settings.m_filterIndex].m_spanLog2; m_agcActive = settings.m_agc; - m_settings = settings; + + if (force) { + m_settings = settings; + } else { + m_settings.applySettings(settingsKeys, settings); + } } void FT8DemodSink::calculateLevel(int16_t& sample) diff --git a/plugins/channelrx/demodft8/ft8demodsink.h b/plugins/channelrx/demodft8/ft8demodsink.h index b79b2bd82..d5c5e58e4 100644 --- a/plugins/channelrx/demodft8/ft8demodsink.h +++ b/plugins/channelrx/demodft8/ft8demodsink.h @@ -42,7 +42,7 @@ public: void setSpectrumSink(SpectrumVis* spectrumSink) { m_spectrumSink = spectrumSink; } void setFT8Buffer(FT8Buffer *buffer) { m_ft8Buffer = buffer; } void applyChannelSettings(int inputSampleRate, int inputFrequencyOffset, bool force = false); - void applySettings(const FT8DemodSettings& settings, bool force = false); + void applySettings(const QStringList& settingsKeys, const FT8DemodSettings& settings, bool force = false); void applyFT8SampleRate(); double getMagSq() const { return m_magsq; } @@ -150,4 +150,3 @@ private: }; #endif // INCLUDE_FT8DEMODSINK_H - diff --git a/plugins/channelrx/demodils/ilsdemod.cpp b/plugins/channelrx/demodils/ilsdemod.cpp index e17d2f4be..64feafc27 100644 --- a/plugins/channelrx/demodils/ilsdemod.cpp +++ b/plugins/channelrx/demodils/ilsdemod.cpp @@ -66,7 +66,7 @@ ILSDemod::ILSDemod(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); @@ -149,7 +149,7 @@ void ILSDemod::start() DSPSignalNotification *dspMsg = new DSPSignalNotification(m_basebandSampleRate, m_centerFrequency); m_basebandSink->getInputMessageQueue()->push(dspMsg); - ILSDemodBaseband::MsgConfigureILSDemodBaseband *msg = ILSDemodBaseband::MsgConfigureILSDemodBaseband::create(m_settings, true); + ILSDemodBaseband::MsgConfigureILSDemodBaseband *msg = ILSDemodBaseband::MsgConfigureILSDemodBaseband::create(QStringList(), m_settings, true); m_basebandSink->getInputMessageQueue()->push(msg); m_running = true; @@ -174,7 +174,7 @@ bool ILSDemod::handleMessage(const Message& cmd) { MsgConfigureILSDemod& cfg = (MsgConfigureILSDemod&) cmd; qDebug() << "ILSDemod::handleMessage: MsgConfigureILSDemod"; - applySettings(cfg.getSettings(), cfg.getForce()); + applySettings(cfg.getSettingsKeys(), cfg.getSettings(), cfg.getForce()); return true; } @@ -287,103 +287,20 @@ void ILSDemod::setCenterFrequency(qint64 frequency) { ILSDemodSettings settings = m_settings; settings.m_inputFrequencyOffset = frequency; - applySettings(settings, false); + applySettings(QStringList("inputFrequencyOffset"), settings, false); if (m_guiMessageQueue) // forward to GUI if any { - MsgConfigureILSDemod *msgToGUI = MsgConfigureILSDemod::create(settings, false); + MsgConfigureILSDemod *msgToGUI = MsgConfigureILSDemod::create(QStringList("inputFrequencyOffset"), settings, false); m_guiMessageQueue->push(msgToGUI); } } -void ILSDemod::applySettings(const ILSDemodSettings& settings, bool force) +void ILSDemod::applySettings(const QStringList& settingsKeys, const ILSDemodSettings& settings, bool force) { - qDebug() << "ILSDemod::applySettings:" - << " m_logEnabled: " << settings.m_logEnabled - << " m_logFilename: " << settings.m_logFilename - << " 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() << "ILSDemod::applySettings:" << settings.getDebugString(settingsKeys, force); - QList reverseAPIKeys; - - if ((settings.m_inputFrequencyOffset != m_settings.m_inputFrequencyOffset) || force) { - reverseAPIKeys.append("inputFrequencyOffset"); - } - if ((settings.m_rfBandwidth != m_settings.m_rfBandwidth) || force) { - reverseAPIKeys.append("rfBandwidth"); - } - if ((settings.m_mode != m_settings.m_mode) || force) { - reverseAPIKeys.append("mode"); - } - if ((settings.m_frequencyIndex != m_settings.m_frequencyIndex) || force) { - reverseAPIKeys.append("frequencyIndex"); - } - if ((settings.m_squelch != m_settings.m_squelch) || force) { - reverseAPIKeys.append("squelch"); - } - if ((settings.m_volume != m_settings.m_volume) || force) { - reverseAPIKeys.append("volume"); - } - if ((settings.m_audioMute != m_settings.m_audioMute) || force) { - reverseAPIKeys.append("audioMute"); - } - if ((settings.m_average != m_settings.m_average) || force) { - reverseAPIKeys.append("average"); - } - if ((settings.m_ddmUnits != m_settings.m_ddmUnits) || force) { - reverseAPIKeys.append("ddmUnits"); - } - if ((settings.m_identThreshold != m_settings.m_identThreshold) || force) { - reverseAPIKeys.append("identThreshold"); - } - if ((settings.m_ident != m_settings.m_ident) || force) { - reverseAPIKeys.append("ident"); - } - if ((settings.m_runway != m_settings.m_runway) || force) { - reverseAPIKeys.append("runway"); - } - if ((settings.m_trueBearing != m_settings.m_trueBearing) || force) { - reverseAPIKeys.append("trueBearing"); - } - if ((settings.m_latitude != m_settings.m_latitude) || force) { - reverseAPIKeys.append("latitude"); - } - if ((settings.m_longitude != m_settings.m_longitude) || force) { - reverseAPIKeys.append("longitude"); - } - if ((settings.m_elevation != m_settings.m_elevation) || force) { - reverseAPIKeys.append("elevation"); - } - if ((settings.m_glidePath != m_settings.m_glidePath) || force) { - reverseAPIKeys.append("glidePath"); - } - if ((settings.m_refHeight != m_settings.m_refHeight) || force) { - reverseAPIKeys.append("refHeight"); - } - if ((settings.m_courseWidth != m_settings.m_courseWidth) || force) { - reverseAPIKeys.append("courseWidth"); - } - if ((settings.m_udpEnabled != m_settings.m_udpEnabled) || force) { - reverseAPIKeys.append("udpEnabled"); - } - 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_logFilename != m_settings.m_logFilename) || force) { - reverseAPIKeys.append("logFilename"); - } - if ((settings.m_logEnabled != m_settings.m_logEnabled) || force) { - reverseAPIKeys.append("logEnabled"); - } - 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 { @@ -394,28 +311,26 @@ void ILSDemod::applySettings(const ILSDemodSettings& settings, bool force) m_settings.m_streamIndex = settings.m_streamIndex; // make sure ChannelAPI::getStreamIndex() is consistent emit streamIndexChanged(settings.m_streamIndex); } - - reverseAPIKeys.append("streamIndex"); } if (m_running) { - ILSDemodBaseband::MsgConfigureILSDemodBaseband *msg = ILSDemodBaseband::MsgConfigureILSDemodBaseband::create(settings, force); + ILSDemodBaseband::MsgConfigureILSDemodBaseband *msg = ILSDemodBaseband::MsgConfigureILSDemodBaseband::create(settingsKeys, settings, force); m_basebandSink->getInputMessageQueue()->push(msg); } if (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); } - if ((settings.m_logEnabled != m_settings.m_logEnabled) - || (settings.m_logFilename != m_settings.m_logFilename) + if ((settingsKeys.contains("logEnabled") && (settings.m_logEnabled != m_settings.m_logEnabled)) + || (settingsKeys.contains("logFilename") && (settings.m_logFilename != m_settings.m_logFilename)) || force) { if (m_logFile.isOpen()) @@ -444,7 +359,11 @@ void ILSDemod::applySettings(const ILSDemodSettings& settings, bool force) } } - m_settings = settings; + if (force) { + m_settings = settings; + } else { + m_settings.applySettings(settingsKeys, settings); + } } void ILSDemod::sendSampleRateToDemodAnalyzer() @@ -475,14 +394,14 @@ bool ILSDemod::deserialize(const QByteArray& data) { if (m_settings.deserialize(data)) { - MsgConfigureILSDemod *msg = MsgConfigureILSDemod::create(m_settings, true); + MsgConfigureILSDemod *msg = MsgConfigureILSDemod::create(QStringList(), m_settings, true); m_inputMessageQueue.push(msg); return true; } else { m_settings.resetToDefaults(); - MsgConfigureILSDemod *msg = MsgConfigureILSDemod::create(m_settings, true); + MsgConfigureILSDemod *msg = MsgConfigureILSDemod::create(QStringList(), m_settings, true); m_inputMessageQueue.push(msg); return false; } @@ -518,13 +437,13 @@ int ILSDemod::webapiSettingsPutPatch( ILSDemodSettings settings = m_settings; webapiUpdateChannelSettings(settings, channelSettingsKeys, response); - MsgConfigureILSDemod *msg = MsgConfigureILSDemod::create(settings, force); + MsgConfigureILSDemod *msg = MsgConfigureILSDemod::create(channelSettingsKeys, settings, force); m_inputMessageQueue.push(msg); qDebug("ILSDemod::webapiSettingsPutPatch: forward to GUI: %p", m_guiMessageQueue); if (m_guiMessageQueue) // forward to GUI if any { - MsgConfigureILSDemod *msgToGUI = MsgConfigureILSDemod::create(settings, force); + MsgConfigureILSDemod *msgToGUI = MsgConfigureILSDemod::create(channelSettingsKeys, settings, force); m_guiMessageQueue->push(msgToGUI); } @@ -761,7 +680,7 @@ void ILSDemod::webapiFormatChannelReport(SWGSDRangel::SWGChannelReport& response response.getIlsDemodReport()->setDm150(m_dm150); } -void ILSDemod::webapiReverseSendSettings(QList& channelSettingsKeys, const ILSDemodSettings& settings, bool force) +void ILSDemod::webapiReverseSendSettings(const QList& channelSettingsKeys, const ILSDemodSettings& settings, bool force) { SWGSDRangel::SWGChannelSettings *swgChannelSettings = new SWGSDRangel::SWGChannelSettings(); webapiFormatChannelSettings(channelSettingsKeys, swgChannelSettings, settings, force); @@ -787,7 +706,7 @@ void ILSDemod::webapiReverseSendSettings(QList& channelSettingsKeys, co } void ILSDemod::webapiFormatChannelSettings( - QList& channelSettingsKeys, + const QList& channelSettingsKeys, SWGSDRangel::SWGChannelSettings *swgChannelSettings, const ILSDemodSettings& settings, bool force @@ -939,4 +858,3 @@ void ILSDemod::handleIndexInDeviceSetChanged(int index) .arg(index); m_basebandSink->setFifoLabel(fifoLabel); } - diff --git a/plugins/channelrx/demodils/ilsdemod.h b/plugins/channelrx/demodils/ilsdemod.h index 911a2d1ab..686a2dc9b 100644 --- a/plugins/channelrx/demodils/ilsdemod.h +++ b/plugins/channelrx/demodils/ilsdemod.h @@ -50,20 +50,23 @@ public: public: const ILSDemodSettings& getSettings() const { return m_settings; } + const QStringList& getSettingsKeys() const { return m_settingsKeys; } bool getForce() const { return m_force; } - static MsgConfigureILSDemod* create(const ILSDemodSettings& settings, bool force) + static MsgConfigureILSDemod* create(const QStringList& settingsKeys, const ILSDemodSettings& settings, bool force) { - return new MsgConfigureILSDemod(settings, force); + return new MsgConfigureILSDemod(settingsKeys, settings, force); } private: ILSDemodSettings m_settings; + QStringList m_settingsKeys; bool m_force; - MsgConfigureILSDemod(const ILSDemodSettings& settings, bool force) : + MsgConfigureILSDemod(const QStringList& settingsKeys, const ILSDemodSettings& settings, bool force) : Message(), m_settings(settings), + m_settingsKeys(settingsKeys), m_force(force) { } }; @@ -210,11 +213,11 @@ private: Real m_angle; virtual bool handleMessage(const Message& cmd); - void applySettings(const ILSDemodSettings& settings, bool force = false); + void applySettings(const QStringList& settingsKeys, const ILSDemodSettings& settings, bool force = false); void sendSampleRateToDemodAnalyzer(); - void webapiReverseSendSettings(QList& channelSettingsKeys, const ILSDemodSettings& settings, bool force); + void webapiReverseSendSettings(const QList& channelSettingsKeys, const ILSDemodSettings& settings, bool force); void webapiFormatChannelSettings( - QList& channelSettingsKeys, + const QList& channelSettingsKeys, SWGSDRangel::SWGChannelSettings *swgChannelSettings, const ILSDemodSettings& settings, bool force @@ -228,4 +231,3 @@ private slots: }; #endif // INCLUDE_ILSDEMOD_H - diff --git a/plugins/channelrx/demodils/ilsdemodbaseband.cpp b/plugins/channelrx/demodils/ilsdemodbaseband.cpp index 9f43bee22..eef131ff6 100644 --- a/plugins/channelrx/demodils/ilsdemodbaseband.cpp +++ b/plugins/channelrx/demodils/ilsdemodbaseband.cpp @@ -139,7 +139,7 @@ bool ILSDemodBaseband::handleMessage(const Message& cmd) MsgConfigureILSDemodBaseband& cfg = (MsgConfigureILSDemodBaseband&) cmd; qDebug() << "ILSDemodBaseband::handleMessage: MsgConfigureILSDemodBaseband"; - applySettings(cfg.getSettings(), cfg.getForce()); + applySettings(cfg.getSettingsKeys(), cfg.getSettings(), cfg.getForce()); return true; } @@ -164,9 +164,9 @@ bool ILSDemodBaseband::handleMessage(const Message& cmd) } } -void ILSDemodBaseband::applySettings(const ILSDemodSettings& settings, bool force) +void ILSDemodBaseband::applySettings(const QStringList& settingsKeys, const ILSDemodSettings& settings, bool force) { - if ((settings.m_inputFrequencyOffset != m_settings.m_inputFrequencyOffset) || force) + if ((settingsKeys.contains("m_inputFrequencyOffset") && (settings.m_inputFrequencyOffset != m_settings.m_inputFrequencyOffset)) || force) { m_channelizer->setChannelization(ILSDemodSettings::ILSDEMOD_CHANNEL_SAMPLE_RATE, settings.m_inputFrequencyOffset); m_sink.applyChannelSettings(m_channelizer->getChannelSampleRate(), m_channelizer->getChannelFrequencyOffset()); @@ -177,7 +177,7 @@ void ILSDemodBaseband::applySettings(const ILSDemodSettings& settings, bool forc } } - if ((settings.m_audioDeviceName != m_settings.m_audioDeviceName) || force) + if ((settingsKeys.contains("m_audioDeviceName") && (settings.m_audioDeviceName != m_settings.m_audioDeviceName)) || force) { AudioDeviceManager *audioDeviceManager = DSPEngine::instance()->getAudioDeviceManager(); int audioDeviceIndex = audioDeviceManager->getOutputDeviceIndex(settings.m_audioDeviceName); @@ -194,9 +194,13 @@ void ILSDemodBaseband::applySettings(const ILSDemodSettings& settings, bool forc } } - 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 ILSDemodBaseband::getChannelSampleRate() const @@ -209,4 +213,3 @@ void ILSDemodBaseband::setBasebandSampleRate(int sampleRate) m_channelizer->setBasebandSampleRate(sampleRate); m_sink.applyChannelSettings(m_channelizer->getChannelSampleRate(), m_channelizer->getChannelFrequencyOffset()); } - diff --git a/plugins/channelrx/demodils/ilsdemodbaseband.h b/plugins/channelrx/demodils/ilsdemodbaseband.h index 545b6b53c..3cb60bf5f 100644 --- a/plugins/channelrx/demodils/ilsdemodbaseband.h +++ b/plugins/channelrx/demodils/ilsdemodbaseband.h @@ -45,20 +45,23 @@ public: public: const ILSDemodSettings& getSettings() const { return m_settings; } + const QStringList& getSettingsKeys() const { return m_settingsKeys; } bool getForce() const { return m_force; } - static MsgConfigureILSDemodBaseband* create(const ILSDemodSettings& settings, bool force) + static MsgConfigureILSDemodBaseband* create(const QStringList& settingsKeys, const ILSDemodSettings& settings, bool force) { - return new MsgConfigureILSDemodBaseband(settings, force); + return new MsgConfigureILSDemodBaseband(settingsKeys, settings, force); } private: ILSDemodSettings m_settings; + QStringList m_settingsKeys; bool m_force; - MsgConfigureILSDemodBaseband(const ILSDemodSettings& settings, bool force) : + MsgConfigureILSDemodBaseband(const QStringList& settingsKeys, const ILSDemodSettings& settings, bool force) : Message(), m_settings(settings), + m_settingsKeys(settingsKeys), m_force(force) { } }; @@ -100,7 +103,7 @@ private: bool handleMessage(const Message& cmd); void calculateOffset(ILSDemodSink *sink); - void applySettings(const ILSDemodSettings& settings, bool force = false); + void applySettings(const QStringList& settingsKeys, const ILSDemodSettings& settings, bool force = false); private slots: void handleInputMessages(); @@ -108,4 +111,3 @@ private slots: }; #endif // INCLUDE_ILSDEMODBASEBAND_H - diff --git a/plugins/channelrx/demodils/ilsdemodgui.cpp b/plugins/channelrx/demodils/ilsdemodgui.cpp index 29ff38bd1..518fc91a6 100644 --- a/plugins/channelrx/demodils/ilsdemodgui.cpp +++ b/plugins/channelrx/demodils/ilsdemodgui.cpp @@ -111,7 +111,7 @@ void ILSDemodGUI::resetToDefaults() { m_settings.resetToDefaults(); displaySettings(); - applySettings(true); + applySettings(QStringList(), true); } QByteArray ILSDemodGUI::serialize() const @@ -124,7 +124,7 @@ bool ILSDemodGUI::deserialize(const QByteArray& data) if(m_settings.deserialize(data)) { displaySettings(); - applySettings(true); + applySettings(QStringList(), true); return true; } else @@ -269,7 +269,7 @@ void ILSDemodGUI::channelMarkerChangedByCursor() { ui->deltaFrequency->setValue(m_channelMarker.getCenterFrequency()); m_settings.m_inputFrequencyOffset = m_channelMarker.getCenterFrequency(); - applySettings(); + applySettings(QStringList({"inputFrequencyOffset"})); } void ILSDemodGUI::channelMarkerHighlightedByCursor() @@ -282,7 +282,7 @@ void ILSDemodGUI::on_deltaFrequency_changed(qint64 value) m_channelMarker.setCenterFrequency(value); m_settings.m_inputFrequencyOffset = m_channelMarker.getCenterFrequency(); updateAbsoluteCenterFrequency(); - applySettings(); + applySettings(QStringList({"inputFrequencyOffset"})); } void ILSDemodGUI::on_rfBW_valueChanged(int value) @@ -291,7 +291,7 @@ void ILSDemodGUI::on_rfBW_valueChanged(int value) ui->rfBWText->setText(formatFrequency((int)bw)); m_channelMarker.setBandwidth(bw); m_settings.m_rfBandwidth = bw; - applySettings(); + applySettings(QStringList({"rfBandwidth"})); } void ILSDemodGUI::on_mode_currentIndexChanged(int index) @@ -320,7 +320,7 @@ void ILSDemodGUI::on_mode_currentIndexChanged(int index) closePipes(); } ui->frequency->setCurrentIndex(freqIdx); - applySettings(); + applySettings(QStringList({"mode"})); } void ILSDemodGUI::on_frequency_currentIndexChanged(int index) @@ -337,52 +337,52 @@ void ILSDemodGUI::on_frequency_currentIndexChanged(int index) double frequency = text.toDouble() * 1e6; ChannelWebAPIUtils::setCenterFrequency(m_ilsDemod->getDeviceSetIndex(), frequency); } - applySettings(); + applySettings(QStringList({"frequencyIndex"})); } void ILSDemodGUI::on_average_clicked(bool checked) { m_settings.m_average = checked; - applySettings(); + applySettings(QStringList({"average"})); } void ILSDemodGUI::on_volume_valueChanged(int value) { ui->volumeText->setText(QString("%1").arg(value / 10.0, 0, 'f', 1)); m_settings.m_volume = value / 10.0; - applySettings(); + applySettings(QStringList({"volume"})); } void ILSDemodGUI::on_squelch_valueChanged(int value) { ui->squelchText->setText(QString("%1 dB").arg(value)); m_settings.m_squelch = value; - applySettings(); + applySettings(QStringList({"squelch"})); } void ILSDemodGUI::on_audioMute_toggled(bool checked) { m_settings.m_audioMute = checked; - applySettings(); + applySettings(QStringList({"audioMute"})); } void ILSDemodGUI::on_thresh_valueChanged(int value) { ui->threshText->setText(QString("%1").arg(value / 10.0, 0, 'f', 1)); m_settings.m_identThreshold = value / 10.0; - applySettings(); + applySettings(QStringList({"identThreshold"})); } void ILSDemodGUI::on_ddmUnits_currentIndexChanged(int index) { m_settings.m_ddmUnits = (ILSDemodSettings::DDMUnits) index; - applySettings(); + applySettings(QStringList({"ddmUnits"})); } void ILSDemodGUI::on_ident_editingFinished() { m_settings.m_ident = ui->ident->currentText(); - applySettings(); + applySettings(QStringList({"ident"})); } // 3.1.3.7.3 Note 1 @@ -418,14 +418,14 @@ void ILSDemodGUI::on_ident_currentIndexChanged(int index) m_disableDrawILS = false; } drawILSOnMap(); - applySettings(); + applySettings(QStringList({"ident"})); } void ILSDemodGUI::on_runway_editingFinished() { m_settings.m_runway = ui->runway->text(); drawILSOnMap(); - applySettings(); + applySettings(QStringList({"runway"})); } void ILSDemodGUI::on_findOnMap_clicked() @@ -852,87 +852,87 @@ void ILSDemodGUI::updateGPSAngle() void ILSDemodGUI::on_trueBearing_valueChanged(double value) { m_settings.m_trueBearing = (float) value; - applySettings(); + applySettings(QStringList({"trueBearing"})); drawILSOnMap(); } void ILSDemodGUI::on_elevation_valueChanged(int value) { m_settings.m_elevation = value; - applySettings(); + applySettings(QStringList({"elevation"})); drawILSOnMap(); } void ILSDemodGUI::on_latitude_editingFinished() { m_settings.m_latitude = ui->latitude->text(); - applySettings(); + applySettings(QStringList({"latitude"})); drawILSOnMap(); } void ILSDemodGUI::on_longitude_editingFinished() { m_settings.m_longitude = ui->longitude->text(); - applySettings(); + applySettings(QStringList({"longitude"})); drawILSOnMap(); } void ILSDemodGUI::on_glidePath_valueChanged(double value) { m_settings.m_glidePath = value; - applySettings(); + applySettings(QStringList({"glidePath"})); drawILSOnMap(); } void ILSDemodGUI::on_height_valueChanged(double value) { m_settings.m_refHeight = (float)value; - applySettings(); + applySettings(QStringList({"refHeight"})); drawILSOnMap(); } void ILSDemodGUI::on_courseWidth_valueChanged(double value) { m_settings.m_courseWidth = (float)value; - applySettings(); + applySettings(QStringList({"courseWidth"})); drawILSOnMap(); } void ILSDemodGUI::on_slope_valueChanged(double value) { m_settings.m_slope = (float)value; - applySettings(); + applySettings(QStringList({"slope"})); drawILSOnMap(); } void ILSDemodGUI::on_udpEnabled_clicked(bool checked) { m_settings.m_udpEnabled = checked; - applySettings(); + applySettings(QStringList({"udpEnabled"})); } void ILSDemodGUI::on_udpAddress_editingFinished() { m_settings.m_udpAddress = ui->udpAddress->text(); - applySettings(); + applySettings(QStringList({"udpAddress"})); } void ILSDemodGUI::on_udpPort_editingFinished() { m_settings.m_udpPort = ui->udpPort->text().toInt(); - applySettings(); + applySettings(QStringList({"udpPort"})); } void ILSDemodGUI::on_channel1_currentIndexChanged(int index) { m_settings.m_scopeCh1 = index; - applySettings(); + applySettings(QStringList({"scopeCh1"})); } void ILSDemodGUI::on_channel2_currentIndexChanged(int index) { m_settings.m_scopeCh2 = index; - applySettings(); + applySettings(QStringList({"scopeCh2"})); } void ILSDemodGUI::onWidgetRolled(QWidget* widget, bool rollDown) @@ -941,7 +941,7 @@ void ILSDemodGUI::onWidgetRolled(QWidget* widget, bool rollDown) (void) rollDown; getRollupContents()->saveState(m_rollupState); - applySettings(); + applySettings(QStringList()); } void ILSDemodGUI::onMenuDialogCalled(const QPoint &p) @@ -986,7 +986,8 @@ void ILSDemodGUI::onMenuDialogCalled(const QPoint &p) updateIndexLabel(); } - applySettings(); + applySettings(QStringList({"rgbColor", "title", "useReverseAPI", "reverseAPIAddress", + "reverseAPIPort", "reverseAPIDeviceIndex", "reverseAPIChannelIndex", "streamIndex"})); } resetContextMenuType(); @@ -1101,7 +1102,7 @@ ILSDemodGUI::ILSDemodGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Baseban displaySettings(); makeUIConnections(); - applySettings(true); + applySettings(QStringList(), true); // force full settings apply m_resizer.enableChildMouseTracking(); drawILSOnMap(); @@ -1153,11 +1154,11 @@ void ILSDemodGUI::blockApplySettings(bool block) m_doApplySettings = !block; } -void ILSDemodGUI::applySettings(bool force) +void ILSDemodGUI::applySettings(const QStringList& settingsKeys, bool force) { if (m_doApplySettings) { - ILSDemod::MsgConfigureILSDemod* message = ILSDemod::MsgConfigureILSDemod::create( m_settings, force); + ILSDemod::MsgConfigureILSDemod* message = ILSDemod::MsgConfigureILSDemod::create(settingsKeys, m_settings, force); m_ilsDemod->getInputMessageQueue()->push(message); } } @@ -1277,7 +1278,7 @@ void ILSDemodGUI::audioSelect(const QPoint& p) if (audioSelect.m_selected) { m_settings.m_audioDeviceName = audioSelect.m_audioDeviceName; - applySettings(); + applySettings(QStringList({"audioDeviceName"})); } } @@ -1329,7 +1330,7 @@ void ILSDemodGUI::tick() void ILSDemodGUI::on_logEnable_clicked(bool checked) { m_settings.m_logEnabled = checked; - applySettings(); + applySettings(QStringList({"logEnabled"})); } void ILSDemodGUI::on_logFilename_clicked() @@ -1345,7 +1346,7 @@ void ILSDemodGUI::on_logFilename_clicked() { m_settings.m_logFilename = fileNames[0]; ui->logFilename->setToolTip(QString(".csv log filename: %1").arg(m_settings.m_logFilename)); - applySettings(); + applySettings(QStringList({"logFilename"})); } } } @@ -1521,4 +1522,3 @@ void ILSDemodGUI::handleChannelMessageQueue(MessageQueue* messageQueue) } } } - diff --git a/plugins/channelrx/demodils/ilsdemodgui.h b/plugins/channelrx/demodils/ilsdemodgui.h index b4771d06c..95b71006b 100644 --- a/plugins/channelrx/demodils/ilsdemodgui.h +++ b/plugins/channelrx/demodils/ilsdemodgui.h @@ -149,7 +149,7 @@ private: virtual ~ILSDemodGUI(); 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(); @@ -219,4 +219,3 @@ private slots: }; #endif // INCLUDE_ILSDEMODGUI_H - diff --git a/plugins/channelrx/demodils/ilsdemodsettings.cpp b/plugins/channelrx/demodils/ilsdemodsettings.cpp index dbd612f33..73460020a 100644 --- a/plugins/channelrx/demodils/ilsdemodsettings.cpp +++ b/plugins/channelrx/demodils/ilsdemodsettings.cpp @@ -233,3 +233,245 @@ bool ILSDemodSettings::deserialize(const QByteArray& data) } } +void ILSDemodSettings::applySettings(const QStringList& settingsKeys, const ILSDemodSettings& settings) +{ + if (settingsKeys.contains("inputFrequencyOffset")) { + m_inputFrequencyOffset = settings.m_inputFrequencyOffset; + } + if (settingsKeys.contains("rfBandwidth")) { + m_rfBandwidth = settings.m_rfBandwidth; + } + if (settingsKeys.contains("mode")) { + m_mode = settings.m_mode; + } + if (settingsKeys.contains("frequencyIndex")) { + m_frequencyIndex = settings.m_frequencyIndex; + } + if (settingsKeys.contains("squelch")) { + m_squelch = settings.m_squelch; + } + if (settingsKeys.contains("volume")) { + m_volume = settings.m_volume; + } + if (settingsKeys.contains("audioMute")) { + m_audioMute = settings.m_audioMute; + } + if (settingsKeys.contains("average")) { + m_average = settings.m_average; + } + if (settingsKeys.contains("ddmUnits")) { + m_ddmUnits = settings.m_ddmUnits; + } + if (settingsKeys.contains("identThreshold")) { + m_identThreshold = settings.m_identThreshold; + } + if (settingsKeys.contains("ident")) { + m_ident = settings.m_ident; + } + if (settingsKeys.contains("runway")) { + m_runway = settings.m_runway; + } + if (settingsKeys.contains("trueBearing")) { + m_trueBearing = settings.m_trueBearing; + } + if (settingsKeys.contains("slope")) { + m_slope = settings.m_slope; + } + if (settingsKeys.contains("latitude")) { + m_latitude = settings.m_latitude; + } + if (settingsKeys.contains("longitude")) { + m_longitude = settings.m_longitude; + } + if (settingsKeys.contains("elevation")) { + m_elevation = settings.m_elevation; + } + if (settingsKeys.contains("glidePath")) { + m_glidePath = settings.m_glidePath; + } + if (settingsKeys.contains("refHeight")) { + m_refHeight = settings.m_refHeight; + } + if (settingsKeys.contains("courseWidth")) { + m_courseWidth = settings.m_courseWidth; + } + if (settingsKeys.contains("udpEnabled")) { + m_udpEnabled = settings.m_udpEnabled; + } + if (settingsKeys.contains("udpAddress")) { + m_udpAddress = settings.m_udpAddress; + } + if (settingsKeys.contains("udpPort")) { + m_udpPort = settings.m_udpPort; + } + if (settingsKeys.contains("logFilename")) { + m_logFilename = settings.m_logFilename; + } + if (settingsKeys.contains("logEnabled")) { + m_logEnabled = settings.m_logEnabled; + } + if (settingsKeys.contains("scopeCh1")) { + m_scopeCh1 = settings.m_scopeCh1; + } + if (settingsKeys.contains("scopeCh2")) { + m_scopeCh2 = settings.m_scopeCh2; + } + if (settingsKeys.contains("rgbColor")) { + m_rgbColor = settings.m_rgbColor; + } + if (settingsKeys.contains("title")) { + m_title = settings.m_title; + } + if (settingsKeys.contains("audioDeviceName")) { + m_audioDeviceName = settings.m_audioDeviceName; + } + if (settingsKeys.contains("streamIndex")) { + m_streamIndex = settings.m_streamIndex; + } + if (settingsKeys.contains("useReverseAPI")) { + m_useReverseAPI = settings.m_useReverseAPI; + } + if (settingsKeys.contains("reverseAPIAddress")) { + m_reverseAPIAddress = settings.m_reverseAPIAddress; + } + if (settingsKeys.contains("reverseAPIPort")) { + m_reverseAPIPort = settings.m_reverseAPIPort; + } + if (settingsKeys.contains("reverseAPIDeviceIndex")) { + m_reverseAPIDeviceIndex = settings.m_reverseAPIDeviceIndex; + } + if (settingsKeys.contains("reverseAPIChannelIndex")) { + m_reverseAPIChannelIndex = settings.m_reverseAPIChannelIndex; + } + if (settingsKeys.contains("workspaceIndex")) { + m_workspaceIndex = settings.m_workspaceIndex; + } + if (settingsKeys.contains("geometryBytes")) { + m_geometryBytes = settings.m_geometryBytes; + } + if (settingsKeys.contains("hidden")) { + m_hidden = settings.m_hidden; + } +} + +QString ILSDemodSettings::getDebugString(const QStringList& settingsKeys, bool force) const +{ + std::ostringstream ostr; + + if (settingsKeys.contains("inputFrequencyOffset") || force) { + ostr << " m_inputFrequencyOffset: " << m_inputFrequencyOffset; + } + if (settingsKeys.contains("rfBandwidth") || force) { + ostr << " m_rfBandwidth: " << m_rfBandwidth; + } + if (settingsKeys.contains("mode") || force) { + ostr << " m_mode: " << m_mode; + } + if (settingsKeys.contains("frequencyIndex") || force) { + ostr << " m_frequencyIndex: " << m_frequencyIndex; + } + if (settingsKeys.contains("squelch") || force) { + ostr << " m_squelch: " << m_squelch; + } + if (settingsKeys.contains("volume") || force) { + ostr << " m_volume: " << m_volume; + } + if (settingsKeys.contains("audioMute") || force) { + ostr << " m_audioMute: " << m_audioMute; + } + if (settingsKeys.contains("average") || force) { + ostr << " m_average: " << m_average; + } + if (settingsKeys.contains("ddmUnits") || force) { + ostr << " m_ddmUnits: " << m_ddmUnits; + } + if (settingsKeys.contains("identThreshold") || force) { + ostr << " m_identThreshold: " << m_identThreshold; + } + if (settingsKeys.contains("ident") || force) { + ostr << " m_ident: " << m_ident.toStdString(); + } + if (settingsKeys.contains("runway") || force) { + ostr << " m_runway: " << m_runway.toStdString(); + } + if (settingsKeys.contains("trueBearing") || force) { + ostr << " m_trueBearing: " << m_trueBearing; + } + if (settingsKeys.contains("slope") || force) { + ostr << " m_slope: " << m_slope; + } + if (settingsKeys.contains("latitude") || force) { + ostr << " m_latitude: " << m_latitude.toStdString(); + } + if (settingsKeys.contains("longitude") || force) { + ostr << " m_longitude: " << m_longitude.toStdString(); + } + if (settingsKeys.contains("elevation") || force) { + ostr << " m_elevation: " << m_elevation; + } + if (settingsKeys.contains("glidePath") || force) { + ostr << " m_glidePath: " << m_glidePath; + } + if (settingsKeys.contains("refHeight") || force) { + ostr << " m_refHeight: " << m_refHeight; + } + if (settingsKeys.contains("courseWidth") || force) { + ostr << " m_courseWidth: " << m_courseWidth; + } + if (settingsKeys.contains("udpEnabled") || force) { + ostr << " m_udpEnabled: " << m_udpEnabled; + } + if (settingsKeys.contains("udpAddress") || force) { + ostr << " m_udpAddress: " << m_udpAddress.toStdString(); + } + if (settingsKeys.contains("udpPort") || force) { + ostr << " m_udpPort: " << m_udpPort; + } + if (settingsKeys.contains("logFilename") || force) { + ostr << " m_logFilename: " << m_logFilename.toStdString(); + } + if (settingsKeys.contains("logEnabled") || force) { + ostr << " m_logEnabled: " << m_logEnabled; + } + if (settingsKeys.contains("scopeCh1") || force) { + ostr << " m_scopeCh1: " << m_scopeCh1; + } + if (settingsKeys.contains("scopeCh2") || force) { + ostr << " m_scopeCh2: " << m_scopeCh2; + } + if (settingsKeys.contains("rgbColor") || force) { + ostr << " m_rgbColor: " << m_rgbColor; + } + if (settingsKeys.contains("title") || force) { + ostr << " m_title: " << m_title.toStdString(); + } + if (settingsKeys.contains("audioDeviceName") || force) { + ostr << " m_audioDeviceName: " << m_audioDeviceName.toStdString(); + } + if (settingsKeys.contains("streamIndex") || force) { + ostr << " m_streamIndex: " << m_streamIndex; + } + if (settingsKeys.contains("useReverseAPI") || force) { + ostr << " m_useReverseAPI: " << m_useReverseAPI; + } + if (settingsKeys.contains("reverseAPIAddress") || force) { + ostr << " m_reverseAPIAddress: " << m_reverseAPIAddress.toStdString(); + } + if (settingsKeys.contains("reverseAPIPort") || force) { + ostr << " m_reverseAPIPort: " << m_reverseAPIPort; + } + if (settingsKeys.contains("reverseAPIDeviceIndex") || force) { + ostr << " m_reverseAPIDeviceIndex: " << m_reverseAPIDeviceIndex; + } + if (settingsKeys.contains("reverseAPIChannelIndex") || force) { + ostr << " m_reverseAPIChannelIndex: " << m_reverseAPIChannelIndex; + } + if (settingsKeys.contains("workspaceIndex") || force) { + ostr << " m_workspaceIndex: " << m_workspaceIndex; + } + if (settingsKeys.contains("hidden") || force) { + ostr << " m_hidden: " << m_hidden; + } + + return QString(ostr.str().c_str()); +} diff --git a/plugins/channelrx/demodils/ilsdemodsettings.h b/plugins/channelrx/demodils/ilsdemodsettings.h index 3a50ed2a3..5ee53fb99 100644 --- a/plugins/channelrx/demodils/ilsdemodsettings.h +++ b/plugins/channelrx/demodils/ilsdemodsettings.h @@ -97,7 +97,8 @@ struct ILSDemodSettings void setScopeGUI(Serializable *scopeGUI) { m_scopeGUI = scopeGUI; } QByteArray serialize() const; bool deserialize(const QByteArray& data); + void applySettings(const QStringList& settingsKeys, const ILSDemodSettings& settings); + QString getDebugString(const QStringList& settingsKeys, bool force=false) const; }; #endif /* INCLUDE_ILSDEMODSETTINGS_H */ - diff --git a/plugins/channelrx/demodils/ilsdemodsink.cpp b/plugins/channelrx/demodils/ilsdemodsink.cpp index 939e16fa8..562491e3d 100644 --- a/plugins/channelrx/demodils/ilsdemodsink.cpp +++ b/plugins/channelrx/demodils/ilsdemodsink.cpp @@ -58,7 +58,7 @@ ILSDemodSink::ILSDemodSink() : m_sampleBuffer.resize(m_sampleBufferSize); m_spectrumSampleBuffer.resize(m_sampleBufferSize); - applySettings(m_settings, true); + applySettings(QStringList(), m_settings, true); applyChannelSettings(m_channelSampleRate, m_channelFrequencyOffset, true); FFTFactory *fftFactory = DSPEngine::instance()->getFFTFactory(); @@ -404,28 +404,22 @@ void ILSDemodSink::applyChannelSettings(int channelSampleRate, int channelFreque } -void ILSDemodSink::applySettings(const ILSDemodSettings& settings, bool force) +void ILSDemodSink::applySettings(const QStringList& settingsKeys, const ILSDemodSettings& settings, bool force) { - qDebug() << "ILSDemodSink::applySettings:" - << " m_rfBandwidth: " << settings.m_rfBandwidth - << " m_volume: " << settings.m_volume - << " m_squelch: " << settings.m_squelch - << " m_audioMute: " << settings.m_audioMute - << " m_audioDeviceName: " << settings.m_audioDeviceName - << " force: " << force; + qDebug() << "ILSDemodSink::applySettings:" << settings.getDebugString(settingsKeys, force); - if ((m_settings.m_squelch != settings.m_squelch) || force) { + if ((settingsKeys.contains("squelch") && (settings.m_squelch != m_settings.m_squelch)) || force) { m_squelchLevel = CalcDb::powerFromdB(settings.m_squelch); } - 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) ILSDemodSettings::ILSDEMOD_CHANNEL_SAMPLE_RATE; m_interpolatorDistanceRemain = m_interpolatorDistance; } - if ((settings.m_identThreshold != m_settings.m_identThreshold) || force) { + if ((settingsKeys.contains("identThreshold") && (settings.m_identThreshold != m_settings.m_identThreshold)) || force) { m_morseDemod.applySettings(settings.m_identThreshold); } @@ -435,9 +429,13 @@ void ILSDemodSink::applySettings(const ILSDemodSettings& settings, bool force) m_modDepth150Average.reset(); m_ddmAverage.reset(); m_decimator.setLog2Decim(ILSDemodSettings::ILSDEMOD_SPECTRUM_DECIM_LOG2); + m_settings = settings; + } + else + { + m_settings.applySettings(settingsKeys, settings); } - m_settings = settings; } void ILSDemodSink::applyAudioSampleRate(int sampleRate) @@ -466,4 +464,3 @@ void ILSDemodSink::applyAudioSampleRate(int sampleRate) m_audioSampleRate = sampleRate; } - diff --git a/plugins/channelrx/demodils/ilsdemodsink.h b/plugins/channelrx/demodils/ilsdemodsink.h index 9eaeb5bc0..a061ee9c4 100644 --- a/plugins/channelrx/demodils/ilsdemodsink.h +++ b/plugins/channelrx/demodils/ilsdemodsink.h @@ -52,7 +52,7 @@ public: void setSpectrumSink(SpectrumVis* spectrumSink) { m_spectrumSink = spectrumSink; } void setScopeSink(ScopeVis* scopeSink) { m_scopeSink = scopeSink; } void applyChannelSettings(int channelSampleRate, int channelFrequencyOffset, bool force = false); - void applySettings(const ILSDemodSettings& settings, bool force = false); + void applySettings(const QStringList& settingsKeys, const ILSDemodSettings& settings, bool force = false); void setMessageQueueToChannel(MessageQueue *messageQueue) { m_messageQueueToChannel = messageQueue; m_morseDemod.setMessageQueueToChannel(messageQueue); } void setChannel(ChannelAPI *channel) { m_channel = channel; } void applyAudioSampleRate(int sampleRate); @@ -166,4 +166,3 @@ private: }; #endif // INCLUDE_ILSDEMODSINK_H - diff --git a/plugins/channelrx/demodm17/m17demod.cpp b/plugins/channelrx/demodm17/m17demod.cpp index da6429cbc..2cfee7581 100644 --- a/plugins/channelrx/demodm17/m17demod.cpp +++ b/plugins/channelrx/demodm17/m17demod.cpp @@ -257,24 +257,7 @@ void M17Demod::setCenterFrequency(qint64 frequency) void M17Demod::applySettings(const M17DemodSettings& settings, const QList& settingsKeys, bool force) { - qDebug() << "M17Demod::applySettings: " - << " settingsKeys: " << settingsKeys - << " m_inputFrequencyOffset: " << settings.m_inputFrequencyOffset - << " m_rfBandwidth: " << settings.m_rfBandwidth - << " m_fmDeviation: " << settings.m_fmDeviation - << " m_volume: " << settings.m_volume - << " m_baudRate: " << settings.m_baudRate - << " m_squelchGate" << settings.m_squelchGate - << " m_squelch: " << settings.m_squelch - << " m_audioMute: " << settings.m_audioMute - << " m_syncOrConstellation: " << settings.m_syncOrConstellation - << " m_highPassFilter: "<< settings.m_highPassFilter - << " m_audioDeviceName: " << settings.m_audioDeviceName - << " m_traceLengthMutliplier: " << settings.m_traceLengthMutliplier - << " m_traceStroke: " << settings.m_traceStroke - << " m_traceDecay: " << settings.m_traceDecay - << " m_streamIndex: " << settings.m_streamIndex - << " force: " << force; + qDebug() << "M17Demod::applySettings: " << settings.getDebugString(settingsKeys, force); if (settingsKeys.contains("streamIndex")) { diff --git a/plugins/channelrx/demodm17/m17demodsettings.cpp b/plugins/channelrx/demodm17/m17demodsettings.cpp index 5dbe4d0f0..9ec47252f 100644 --- a/plugins/channelrx/demodm17/m17demodsettings.cpp +++ b/plugins/channelrx/demodm17/m17demodsettings.cpp @@ -261,3 +261,86 @@ void M17DemodSettings::applySettings(const QStringList& settingsKeys, const M17D m_channelMarker = settings.m_channelMarker; } } + +QString M17DemodSettings::getDebugString(const QStringList& settingsKeys, bool force) const +{ + std::ostringstream ostr; + + if (settingsKeys.contains("inputFrequencyOffset") || force) { + ostr << " m_inputFrequencyOffset: " << m_inputFrequencyOffset; + } + if (settingsKeys.contains("rfBandwidth") || force) { + ostr << " m_rfBandwidth: " << m_rfBandwidth; + } + if (settingsKeys.contains("fmDeviation") || force) { + ostr << " m_fmDeviation: " << m_fmDeviation; + } + if (settingsKeys.contains("volume") || force) { + ostr << " m_volume: " << m_volume; + } + if (settingsKeys.contains("baudRate") || force) { + ostr << " m_baudRate: " << m_baudRate; + } + if (settingsKeys.contains("squelchGate") || force) { + ostr << " m_squelchGate: " << m_squelchGate; + } + if (settingsKeys.contains("squelch") || force) { + ostr << " m_squelch: " << m_squelch; + } + if (settingsKeys.contains("audioMute") || force) { + ostr << " m_audioMute: " << m_audioMute; + } + if (settingsKeys.contains("syncOrConstellation") || force) { + ostr << " m_syncOrConstellation: " << m_syncOrConstellation; + } + if (settingsKeys.contains("rgbColor") || force) { + ostr << " m_rgbColor: " << m_rgbColor; + } + if (settingsKeys.contains("title") || force) { + ostr << " m_title: " << m_title.toStdString(); + } + if (settingsKeys.contains("highPassFilter") || force) { + ostr << " m_highPassFilter: " << m_highPassFilter; + } + if (settingsKeys.contains("traceLengthMutliplier") || force) { + ostr << " m_traceLengthMutliplier: " << m_traceLengthMutliplier; + } + if (settingsKeys.contains("traceStroke") || force) { + ostr << " m_traceStroke: " << m_traceStroke; + } + if (settingsKeys.contains("traceDecay") || force) { + ostr << " m_traceDecay: " << m_traceDecay; + } + if (settingsKeys.contains("audioDeviceName") || force) { + ostr << " m_audioDeviceName: " << m_audioDeviceName.toStdString(); + } + if (settingsKeys.contains("statusLogEnabled") || force) { + ostr << " m_statusLogEnabled: " << m_statusLogEnabled; + } + if (settingsKeys.contains("streamIndex") || force) { + ostr << " m_streamIndex: " << m_streamIndex; + } + if (settingsKeys.contains("useReverseAPI") || force) { + ostr << " m_useReverseAPI: " << m_useReverseAPI; + } + if (settingsKeys.contains("reverseAPIAddress") || force) { + ostr << " m_reverseAPIAddress: " << m_reverseAPIAddress.toStdString(); + } + if (settingsKeys.contains("reverseAPIPort") || force) { + ostr << " m_reverseAPIPort: " << m_reverseAPIPort; + } + if (settingsKeys.contains("reverseAPIDeviceIndex") || force) { + ostr << " m_reverseAPIDeviceIndex: " << m_reverseAPIDeviceIndex; + } + if (settingsKeys.contains("reverseAPIChannelIndex") || force) { + ostr << " m_reverseAPIChannelIndex: " << m_reverseAPIChannelIndex; + } + if (settingsKeys.contains("workspaceIndex") || force) { + ostr << " m_workspaceIndex: " << m_workspaceIndex; + } + if (settingsKeys.contains("hidden") || force) { + ostr << " m_hidden: " << m_hidden; + } + + return QString(ostr.str().c_str()); +} diff --git a/plugins/channelrx/demodm17/m17demodsettings.h b/plugins/channelrx/demodm17/m17demodsettings.h index 889cf35f7..69a300e6a 100644 --- a/plugins/channelrx/demodm17/m17demodsettings.h +++ b/plugins/channelrx/demodm17/m17demodsettings.h @@ -67,6 +67,7 @@ struct M17DemodSettings QByteArray serialize() const; bool deserialize(const QByteArray& data); void applySettings(const QStringList& settingsKeys, const M17DemodSettings& settings); + QString getDebugString(const QStringList& settingsKeys, bool force=false) const; }; diff --git a/plugins/channelrx/demodm17/m17demodsink.cpp b/plugins/channelrx/demodm17/m17demodsink.cpp index 7fd8ad4a0..9cee85ac8 100644 --- a/plugins/channelrx/demodm17/m17demodsink.cpp +++ b/plugins/channelrx/demodm17/m17demodsink.cpp @@ -297,24 +297,7 @@ void M17DemodSink::applyChannelSettings(int channelSampleRate, int channelFreque void M17DemodSink::applySettings(const M17DemodSettings& settings, const QList& settingsKeys, bool force) { - qDebug() << "M17DemodSink::applySettings: " - << " settingsKeys: " << settingsKeys - << " m_inputFrequencyOffset: " << settings.m_inputFrequencyOffset - << " m_rfBandwidth: " << settings.m_rfBandwidth - << " m_fmDeviation: " << settings.m_fmDeviation - << " m_volume: " << settings.m_volume - << " m_baudRate: " << settings.m_baudRate - << " m_squelchGate" << settings.m_squelchGate - << " m_squelch: " << settings.m_squelch - << " m_audioMute: " << settings.m_audioMute - << " m_syncOrConstellation: " << settings.m_syncOrConstellation - << " m_highPassFilter: "<< settings.m_highPassFilter - << " m_audioDeviceName: " << settings.m_audioDeviceName - << " m_traceLengthMutliplier: " << settings.m_traceLengthMutliplier - << " m_traceStroke: " << settings.m_traceStroke - << " m_traceDecay: " << settings.m_traceDecay - << " m_streamIndex: " << settings.m_streamIndex - << " force: " << force; + qDebug() << "M17DemodSink::applySettings: " << settings.getDebugString(settingsKeys, force); if (settingsKeys.contains("rfBandwidth") || force) { @@ -367,4 +350,3 @@ void M17DemodSink::configureMyPosition(float myLatitude, float myLongitude) m_latitude = myLatitude; m_longitude = myLongitude; } - diff --git a/plugins/channelrx/demodnavtex/navtexdemod.cpp b/plugins/channelrx/demodnavtex/navtexdemod.cpp index 94f80c98a..49c282233 100644 --- a/plugins/channelrx/demodnavtex/navtexdemod.cpp +++ b/plugins/channelrx/demodnavtex/navtexdemod.cpp @@ -58,7 +58,7 @@ NavtexDemod::NavtexDemod(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); @@ -132,7 +132,7 @@ void NavtexDemod::start() DSPSignalNotification *dspMsg = new DSPSignalNotification(m_basebandSampleRate, m_centerFrequency); m_basebandSink->getInputMessageQueue()->push(dspMsg); - NavtexDemodBaseband::MsgConfigureNavtexDemodBaseband *msg = NavtexDemodBaseband::MsgConfigureNavtexDemodBaseband::create(m_settings, true); + NavtexDemodBaseband::MsgConfigureNavtexDemodBaseband *msg = NavtexDemodBaseband::MsgConfigureNavtexDemodBaseband::create(QStringList(), m_settings, true); m_basebandSink->getInputMessageQueue()->push(msg); } @@ -150,7 +150,7 @@ bool NavtexDemod::handleMessage(const Message& cmd) { MsgConfigureNavtexDemod& cfg = (MsgConfigureNavtexDemod&) cmd; qDebug() << "NavtexDemod::handleMessage: MsgConfigureNavtexDemod"; - applySettings(cfg.getSettings(), cfg.getForce()); + applySettings(cfg.getSettingsKeys(), cfg.getSettings(), cfg.getForce()); return true; } @@ -244,61 +244,20 @@ void NavtexDemod::setCenterFrequency(qint64 frequency) { NavtexDemodSettings settings = m_settings; settings.m_inputFrequencyOffset = frequency; - applySettings(settings, false); + applySettings(QStringList("inputFrequencyOffset"), settings, false); if (m_guiMessageQueue) // forward to GUI if any { - MsgConfigureNavtexDemod *msgToGUI = MsgConfigureNavtexDemod::create(settings, false); + MsgConfigureNavtexDemod *msgToGUI = MsgConfigureNavtexDemod::create(QStringList("inputFrequencyOffset"), settings, false); m_guiMessageQueue->push(msgToGUI); } } -void NavtexDemod::applySettings(const NavtexDemodSettings& settings, bool force) +void NavtexDemod::applySettings(const QStringList& settingsKeys, const NavtexDemodSettings& settings, bool force) { - qDebug() << "NavtexDemod::applySettings:" - << " m_logEnabled: " << settings.m_logEnabled - << " m_logFilename: " << settings.m_logFilename - << " 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() << "NavtexDemod::applySettings:" << settings.getDebugString(settingsKeys, force); - QList reverseAPIKeys; - - if ((settings.m_inputFrequencyOffset != m_settings.m_inputFrequencyOffset) || force) { - reverseAPIKeys.append("inputFrequencyOffset"); - } - if ((settings.m_rfBandwidth != m_settings.m_rfBandwidth) || force) { - reverseAPIKeys.append("rfBandwidth"); - } - if ((settings.m_navArea != m_settings.m_navArea) || force) { - reverseAPIKeys.append("navArea"); - } - if ((settings.m_filterStation != m_settings.m_filterStation) || force) { - reverseAPIKeys.append("filterStation"); - } - if ((settings.m_filterType != m_settings.m_filterType) || force) { - reverseAPIKeys.append("filterType"); - } - if ((settings.m_udpEnabled != m_settings.m_udpEnabled) || force) { - reverseAPIKeys.append("udpEnabled"); - } - 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_logFilename != m_settings.m_logFilename) || force) { - reverseAPIKeys.append("logFilename"); - } - if ((settings.m_logEnabled != m_settings.m_logEnabled) || force) { - reverseAPIKeys.append("logEnabled"); - } - 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 { @@ -309,25 +268,23 @@ void NavtexDemod::applySettings(const NavtexDemodSettings& settings, bool force) m_settings.m_streamIndex = settings.m_streamIndex; // make sure ChannelAPI::getStreamIndex() is consistent emit streamIndexChanged(settings.m_streamIndex); } - - reverseAPIKeys.append("streamIndex"); } - NavtexDemodBaseband::MsgConfigureNavtexDemodBaseband *msg = NavtexDemodBaseband::MsgConfigureNavtexDemodBaseband::create(settings, force); + NavtexDemodBaseband::MsgConfigureNavtexDemodBaseband *msg = NavtexDemodBaseband::MsgConfigureNavtexDemodBaseband::create(settingsKeys, settings, force); m_basebandSink->getInputMessageQueue()->push(msg); if (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); } - if ((settings.m_logEnabled != m_settings.m_logEnabled) - || (settings.m_logFilename != m_settings.m_logFilename) + if ((settingsKeys.contains("logEnabled") && (m_settings.m_logEnabled != settings.m_logEnabled)) + || (settingsKeys.contains("logFilename") && (m_settings.m_logFilename != settings.m_logFilename)) || force) { if (m_logFile.isOpen()) @@ -356,7 +313,11 @@ void NavtexDemod::applySettings(const NavtexDemodSettings& settings, bool force) } } - m_settings = settings; + if (force) { + m_settings = settings; + } else { + m_settings.applySettings(settingsKeys, settings); + } } void NavtexDemod::sendSampleRateToDemodAnalyzer() @@ -387,14 +348,14 @@ bool NavtexDemod::deserialize(const QByteArray& data) { if (m_settings.deserialize(data)) { - MsgConfigureNavtexDemod *msg = MsgConfigureNavtexDemod::create(m_settings, true); + MsgConfigureNavtexDemod *msg = MsgConfigureNavtexDemod::create(QStringList(), m_settings, true); m_inputMessageQueue.push(msg); return true; } else { m_settings.resetToDefaults(); - MsgConfigureNavtexDemod *msg = MsgConfigureNavtexDemod::create(m_settings, true); + MsgConfigureNavtexDemod *msg = MsgConfigureNavtexDemod::create(QStringList(), m_settings, true); m_inputMessageQueue.push(msg); return false; } @@ -430,13 +391,13 @@ int NavtexDemod::webapiSettingsPutPatch( NavtexDemodSettings settings = m_settings; webapiUpdateChannelSettings(settings, channelSettingsKeys, response); - MsgConfigureNavtexDemod *msg = MsgConfigureNavtexDemod::create(settings, force); + MsgConfigureNavtexDemod *msg = MsgConfigureNavtexDemod::create(channelSettingsKeys, settings, force); m_inputMessageQueue.push(msg); qDebug("NavtexDemod::webapiSettingsPutPatch: forward to GUI: %p", m_guiMessageQueue); if (m_guiMessageQueue) // forward to GUI if any { - MsgConfigureNavtexDemod *msgToGUI = MsgConfigureNavtexDemod::create(settings, force); + MsgConfigureNavtexDemod *msgToGUI = MsgConfigureNavtexDemod::create(channelSettingsKeys, settings, force); m_guiMessageQueue->push(msgToGUI); } @@ -611,7 +572,7 @@ void NavtexDemod::webapiFormatChannelReport(SWGSDRangel::SWGChannelReport& respo response.getNavtexDemodReport()->setChannelSampleRate(m_basebandSink->getChannelSampleRate()); } -void NavtexDemod::webapiReverseSendSettings(QList& channelSettingsKeys, const NavtexDemodSettings& settings, bool force) +void NavtexDemod::webapiReverseSendSettings(const QList& channelSettingsKeys, const NavtexDemodSettings& settings, bool force) { SWGSDRangel::SWGChannelSettings *swgChannelSettings = new SWGSDRangel::SWGChannelSettings(); webapiFormatChannelSettings(channelSettingsKeys, swgChannelSettings, settings, force); @@ -637,7 +598,7 @@ void NavtexDemod::webapiReverseSendSettings(QList& channelSettingsKeys, } void NavtexDemod::webapiFormatChannelSettings( - QList& channelSettingsKeys, + const QList& channelSettingsKeys, SWGSDRangel::SWGChannelSettings *swgChannelSettings, const NavtexDemodSettings& settings, bool force @@ -747,4 +708,3 @@ void NavtexDemod::handleIndexInDeviceSetChanged(int index) .arg(index); m_basebandSink->setFifoLabel(fifoLabel); } - diff --git a/plugins/channelrx/demodnavtex/navtexdemod.h b/plugins/channelrx/demodnavtex/navtexdemod.h index 205cfecce..20956f09a 100644 --- a/plugins/channelrx/demodnavtex/navtexdemod.h +++ b/plugins/channelrx/demodnavtex/navtexdemod.h @@ -54,20 +54,23 @@ public: public: const NavtexDemodSettings& getSettings() const { return m_settings; } + const QStringList& getSettingsKeys() const { return m_settingsKeys; } bool getForce() const { return m_force; } - static MsgConfigureNavtexDemod* create(const NavtexDemodSettings& settings, bool force) + static MsgConfigureNavtexDemod* create(const QStringList& settingsKeys, const NavtexDemodSettings& settings, bool force) { - return new MsgConfigureNavtexDemod(settings, force); + return new MsgConfigureNavtexDemod(settingsKeys, settings, force); } private: NavtexDemodSettings m_settings; + QStringList m_settingsKeys; bool m_force; - MsgConfigureNavtexDemod(const NavtexDemodSettings& settings, bool force) : + MsgConfigureNavtexDemod(const QStringList& settingsKeys, const NavtexDemodSettings& settings, bool force) : Message(), m_settings(settings), + m_settingsKeys(settingsKeys), m_force(force) { } }; @@ -204,11 +207,11 @@ private: QNetworkRequest m_networkRequest; virtual bool handleMessage(const Message& cmd); - void applySettings(const NavtexDemodSettings& settings, bool force = false); + void applySettings(const QStringList& settingsKeys, const NavtexDemodSettings& settings, bool force = false); void sendSampleRateToDemodAnalyzer(); - void webapiReverseSendSettings(QList& channelSettingsKeys, const NavtexDemodSettings& settings, bool force); + void webapiReverseSendSettings(const QList& channelSettingsKeys, const NavtexDemodSettings& settings, bool force); void webapiFormatChannelSettings( - QList& channelSettingsKeys, + const QList& channelSettingsKeys, SWGSDRangel::SWGChannelSettings *swgChannelSettings, const NavtexDemodSettings& settings, bool force @@ -222,4 +225,3 @@ private slots: }; #endif // INCLUDE_NAVTEXDEMOD_H - diff --git a/plugins/channelrx/demodnavtex/navtexdemodbaseband.cpp b/plugins/channelrx/demodnavtex/navtexdemodbaseband.cpp index 1187365fe..633dd7637 100644 --- a/plugins/channelrx/demodnavtex/navtexdemodbaseband.cpp +++ b/plugins/channelrx/demodnavtex/navtexdemodbaseband.cpp @@ -134,7 +134,7 @@ bool NavtexDemodBaseband::handleMessage(const Message& cmd) MsgConfigureNavtexDemodBaseband& cfg = (MsgConfigureNavtexDemodBaseband&) cmd; qDebug() << "NavtexDemodBaseband::handleMessage: MsgConfigureNavtexDemodBaseband"; - applySettings(cfg.getSettings(), cfg.getForce()); + applySettings(cfg.getSettingsKeys(), cfg.getSettings(), cfg.getForce()); return true; } @@ -155,17 +155,21 @@ bool NavtexDemodBaseband::handleMessage(const Message& cmd) } } -void NavtexDemodBaseband::applySettings(const NavtexDemodSettings& settings, bool force) +void NavtexDemodBaseband::applySettings(const QStringList& settingsKeys, const NavtexDemodSettings& 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(NavtexDemodSettings::NAVTEXDEMOD_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); + } } int NavtexDemodBaseband::getChannelSampleRate() const @@ -178,4 +182,3 @@ void NavtexDemodBaseband::setBasebandSampleRate(int sampleRate) m_channelizer->setBasebandSampleRate(sampleRate); m_sink.applyChannelSettings(m_channelizer->getChannelSampleRate(), m_channelizer->getChannelFrequencyOffset()); } - diff --git a/plugins/channelrx/demodnavtex/navtexdemodbaseband.h b/plugins/channelrx/demodnavtex/navtexdemodbaseband.h index c78ed23d8..c238876a9 100644 --- a/plugins/channelrx/demodnavtex/navtexdemodbaseband.h +++ b/plugins/channelrx/demodnavtex/navtexdemodbaseband.h @@ -44,20 +44,23 @@ public: public: const NavtexDemodSettings& getSettings() const { return m_settings; } + const QStringList& getSettingsKeys() const { return m_settingsKeys; } bool getForce() const { return m_force; } - static MsgConfigureNavtexDemodBaseband* create(const NavtexDemodSettings& settings, bool force) + static MsgConfigureNavtexDemodBaseband* create(const QStringList& settingsKeys, const NavtexDemodSettings& settings, bool force) { - return new MsgConfigureNavtexDemodBaseband(settings, force); + return new MsgConfigureNavtexDemodBaseband(settingsKeys, settings, force); } private: NavtexDemodSettings m_settings; + QStringList m_settingsKeys; bool m_force; - MsgConfigureNavtexDemodBaseband(const NavtexDemodSettings& settings, bool force) : + MsgConfigureNavtexDemodBaseband(const QStringList& settingsKeys, const NavtexDemodSettings& settings, bool force) : Message(), m_settings(settings), + m_settingsKeys(settingsKeys), m_force(force) { } }; @@ -93,7 +96,7 @@ private: bool handleMessage(const Message& cmd); void calculateOffset(NavtexDemodSink *sink); - void applySettings(const NavtexDemodSettings& settings, bool force = false); + void applySettings(const QStringList& settingsKeys, const NavtexDemodSettings& settings, bool force = false); private slots: void handleInputMessages(); @@ -101,4 +104,3 @@ private slots: }; #endif // INCLUDE_NAVTEXDEMODBASEBAND_H - diff --git a/plugins/channelrx/demodnavtex/navtexdemodgui.cpp b/plugins/channelrx/demodnavtex/navtexdemodgui.cpp index c21407c8f..d08b1908c 100644 --- a/plugins/channelrx/demodnavtex/navtexdemodgui.cpp +++ b/plugins/channelrx/demodnavtex/navtexdemodgui.cpp @@ -127,7 +127,7 @@ void NavtexDemodGUI::resetToDefaults() { m_settings.resetToDefaults(); displaySettings(); - applySettings(true); + applySettings(QStringList(), true); } QByteArray NavtexDemodGUI::serialize() const @@ -139,7 +139,7 @@ bool NavtexDemodGUI::deserialize(const QByteArray& data) { if(m_settings.deserialize(data)) { displaySettings(); - applySettings(true); + applySettings(QStringList(), true); return true; } else { resetToDefaults(); @@ -303,7 +303,7 @@ void NavtexDemodGUI::channelMarkerChangedByCursor() { ui->deltaFrequency->setValue(m_channelMarker.getCenterFrequency()); m_settings.m_inputFrequencyOffset = m_channelMarker.getCenterFrequency(); - applySettings(); + applySettings(QStringList("inputFrequencyOffset")); } void NavtexDemodGUI::channelMarkerHighlightedByCursor() @@ -313,9 +313,11 @@ void NavtexDemodGUI::channelMarkerHighlightedByCursor() void NavtexDemodGUI::updateTxStation() { - const NavtexTransmitter *transmitter = NavtexTransmitter::getTransmitter(QDateTime::currentDateTimeUtc().time(), - m_settings.m_navArea, - getFrequency()); + const NavtexTransmitter *transmitter = NavtexTransmitter::getTransmitter( + QDateTime::currentDateTimeUtc().time(), + m_settings.m_navArea, + getFrequency() + ); if (transmitter) { ui->txStation->setText(transmitter->m_station); @@ -339,7 +341,7 @@ void NavtexDemodGUI::on_deltaFrequency_changed(qint64 value) m_channelMarker.setCenterFrequency(value); m_settings.m_inputFrequencyOffset = m_channelMarker.getCenterFrequency(); updateAbsoluteCenterFrequency(); - applySettings(); + applySettings(QStringList("inputFrequencyOffset")); } void NavtexDemodGUI::on_rfBW_valueChanged(int value) @@ -348,7 +350,7 @@ void NavtexDemodGUI::on_rfBW_valueChanged(int value) ui->rfBWText->setText(QString("%1 Hz").arg((int)bw)); m_channelMarker.setBandwidth(bw); m_settings.m_rfBandwidth = bw; - applySettings(); + applySettings(QStringList("rfBandwidth")); } void NavtexDemodGUI::on_filterStation_currentIndexChanged(int index) @@ -357,7 +359,7 @@ void NavtexDemodGUI::on_filterStation_currentIndexChanged(int index) m_settings.m_filterStation = ui->filterStation->currentText(); filter(); - applySettings(); + applySettings(QStringList("filterStation")); } void NavtexDemodGUI::on_filterType_currentIndexChanged(int index) @@ -366,7 +368,7 @@ void NavtexDemodGUI::on_filterType_currentIndexChanged(int index) m_settings.m_filterType = ui->filterType->currentText(); filter(); - applySettings(); + applySettings(QStringList("filterType")); } void NavtexDemodGUI::on_clearTable_clicked() @@ -378,19 +380,19 @@ void NavtexDemodGUI::on_clearTable_clicked() void NavtexDemodGUI::on_udpEnabled_clicked(bool checked) { m_settings.m_udpEnabled = checked; - applySettings(); + applySettings(QStringList("udpEnabled")); } void NavtexDemodGUI::on_udpAddress_editingFinished() { m_settings.m_udpAddress = ui->udpAddress->text(); - applySettings(); + applySettings(QStringList("udpAddress")); } void NavtexDemodGUI::on_udpPort_editingFinished() { m_settings.m_udpPort = ui->udpPort->text().toInt(); - applySettings(); + applySettings(QStringList("udpPort")); } void NavtexDemodGUI::filterRow(int row) @@ -424,19 +426,19 @@ void NavtexDemodGUI::on_navArea_currentIndexChanged(int index) { m_settings.m_navArea = index + 1; updateTxStation(); - applySettings(); + applySettings(QStringList("navArea")); } void NavtexDemodGUI::on_channel1_currentIndexChanged(int index) { m_settings.m_scopeCh1 = index; - applySettings(); + applySettings(QStringList("scopeCh1")); } void NavtexDemodGUI::on_channel2_currentIndexChanged(int index) { m_settings.m_scopeCh2 = index; - applySettings(); + applySettings(QStringList("scopeCh2")); } void NavtexDemodGUI::onWidgetRolled(QWidget* widget, bool rollDown) @@ -445,7 +447,7 @@ void NavtexDemodGUI::onWidgetRolled(QWidget* widget, bool rollDown) (void) rollDown; getRollupContents()->saveState(m_rollupState); - applySettings(); + applySettings(QStringList()); } void NavtexDemodGUI::onMenuDialogCalled(const QPoint &p) @@ -490,7 +492,16 @@ void NavtexDemodGUI::onMenuDialogCalled(const QPoint &p) updateIndexLabel(); } - applySettings(); + applySettings(QStringList({ + "title", + "rgbColor", + "useReverseAPI", + "reverseAPIAddress", + "reverseAPIPort", + "reverseAPIDeviceIndex", + "reverseAPIChannelIndex", + "streamIndex" + })); } resetContextMenuType(); @@ -605,7 +616,7 @@ NavtexDemodGUI::NavtexDemodGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, B displaySettings(); makeUIConnections(); - applySettings(true); + applySettings(QStringList(), true); m_resizer.enableChildMouseTracking(); } @@ -652,11 +663,11 @@ void NavtexDemodGUI::blockApplySettings(bool block) m_doApplySettings = !block; } -void NavtexDemodGUI::applySettings(bool force) +void NavtexDemodGUI::applySettings(const QStringList& settingsKeys, const bool force) { if (m_doApplySettings) { - NavtexDemod::MsgConfigureNavtexDemod* message = NavtexDemod::MsgConfigureNavtexDemod::create( m_settings, force); + NavtexDemod::MsgConfigureNavtexDemod* message = NavtexDemod::MsgConfigureNavtexDemod::create(settingsKeys, m_settings, force); m_navtexDemod->getInputMessageQueue()->push(message); } } @@ -754,7 +765,7 @@ void NavtexDemodGUI::tick() void NavtexDemodGUI::on_logEnable_clicked(bool checked) { m_settings.m_logEnabled = checked; - applySettings(); + applySettings(QStringList("logEnabled")); } void NavtexDemodGUI::on_logFilename_clicked() @@ -770,7 +781,7 @@ void NavtexDemodGUI::on_logFilename_clicked() { m_settings.m_logFilename = fileNames[0]; ui->logFilename->setToolTip(QString(".csv log filename: %1").arg(m_settings.m_logFilename)); - applySettings(); + applySettings(QStringList("logFilename")); } } } @@ -874,4 +885,3 @@ void NavtexDemodGUI::updateAbsoluteCenterFrequency() setStatusFrequency(m_deviceCenterFrequency + m_settings.m_inputFrequencyOffset); updateTxStation(); } - diff --git a/plugins/channelrx/demodnavtex/navtexdemodgui.h b/plugins/channelrx/demodnavtex/navtexdemodgui.h index 4c993d6fb..f52cb060a 100644 --- a/plugins/channelrx/demodnavtex/navtexdemodgui.h +++ b/plugins/channelrx/demodnavtex/navtexdemodgui.h @@ -101,7 +101,7 @@ private: virtual ~NavtexDemodGUI(); void blockApplySettings(bool block); - void applySettings(bool force = false); + void applySettings(const QStringList& settingsKeys, bool force = false); void displaySettings(); void messageReceived(const NavtexMessage& message, int errors, float rssi); bool handleMessage(const Message& message); @@ -146,4 +146,3 @@ private slots: }; #endif // INCLUDE_NAVTEXDEMODGUI_H - diff --git a/plugins/channelrx/demodnavtex/navtexdemodsettings.cpp b/plugins/channelrx/demodnavtex/navtexdemodsettings.cpp index e78ae8bf6..94fd55df5 100644 --- a/plugins/channelrx/demodnavtex/navtexdemodsettings.cpp +++ b/plugins/channelrx/demodnavtex/navtexdemodsettings.cpp @@ -208,3 +208,159 @@ bool NavtexDemodSettings::deserialize(const QByteArray& data) } } +void NavtexDemodSettings::applySettings(const QStringList& settingsKeys, const NavtexDemodSettings& settings) +{ + if (settingsKeys.contains("inputFrequencyOffset")) { + m_inputFrequencyOffset = settings.m_inputFrequencyOffset; + } + if (settingsKeys.contains("rfBandwidth")) { + m_rfBandwidth = settings.m_rfBandwidth; + } + if (settingsKeys.contains("navArea")) { + m_navArea = settings.m_navArea; + } + if (settingsKeys.contains("filterStation")) { + m_filterStation = settings.m_filterStation; + } + if (settingsKeys.contains("filterType")) { + m_filterType = settings.m_filterType; + } + if (settingsKeys.contains("udpEnabled")) { + m_udpEnabled = settings.m_udpEnabled; + } + if (settingsKeys.contains("udpAddress")) { + m_udpAddress = settings.m_udpAddress; + } + if (settingsKeys.contains("udpPort")) { + m_udpPort = settings.m_udpPort; + } + if (settingsKeys.contains("rgbColor")) { + m_rgbColor = settings.m_rgbColor; + } + if (settingsKeys.contains("title")) { + m_title = settings.m_title; + } + if (settingsKeys.contains("streamIndex")) { + m_streamIndex = settings.m_streamIndex; + } + if (settingsKeys.contains("useReverseAPI")) { + m_useReverseAPI = settings.m_useReverseAPI; + } + if (settingsKeys.contains("reverseAPIAddress")) { + m_reverseAPIAddress = settings.m_reverseAPIAddress; + } + if (settingsKeys.contains("reverseAPIPort")) { + m_reverseAPIPort = settings.m_reverseAPIPort; + } + if (settingsKeys.contains("reverseAPIDeviceIndex")) { + m_reverseAPIDeviceIndex = settings.m_reverseAPIDeviceIndex; + } + if (settingsKeys.contains("reverseAPIChannelIndex")) { + m_reverseAPIChannelIndex = settings.m_reverseAPIChannelIndex; + } + if (settingsKeys.contains("scopeCh1")) { + m_scopeCh1 = settings.m_scopeCh1; + } + if (settingsKeys.contains("scopeCh2")) { + m_scopeCh2 = settings.m_scopeCh2; + } + if (settingsKeys.contains("logFilename")) { + m_logFilename = settings.m_logFilename; + } + if (settingsKeys.contains("logEnabled")) { + m_logEnabled = settings.m_logEnabled; + } + if (settingsKeys.contains("workspaceIndex")) { + m_workspaceIndex = settings.m_workspaceIndex; + } + if (settingsKeys.contains("geometryBytes")) { + m_geometryBytes = settings.m_geometryBytes; + } + if (settingsKeys.contains("hidden")) { + m_hidden = settings.m_hidden; + } + if (settingsKeys.contains("columnIndexes")) { + for (int i = 0; i < NAVTEXDEMOD_COLUMNS; i++) { + m_columnIndexes[i] = settings.m_columnIndexes[i]; + } + } + if (settingsKeys.contains("columnSizes")) { + for (int i = 0; i < NAVTEXDEMOD_COLUMNS; i++) { + m_columnSizes[i] = settings.m_columnSizes[i]; + } + } +} + +QString NavtexDemodSettings::getDebugString(const QStringList& settingsKeys, bool force) const +{ + std::ostringstream ostr; + + if (settingsKeys.contains("inputFrequencyOffset") || force) { + ostr << " m_inputFrequencyOffset: " << m_inputFrequencyOffset; + } + if (settingsKeys.contains("rfBandwidth") || force) { + ostr << " m_rfBandwidth: " << m_rfBandwidth; + } + if (settingsKeys.contains("navArea") || force) { + ostr << " m_navArea: " << m_navArea; + } + if (settingsKeys.contains("filterStation") || force) { + ostr << " m_filterStation: " << m_filterStation.toStdString(); + } + if (settingsKeys.contains("filterType") || force) { + ostr << " m_filterType: " << m_filterType.toStdString(); + } + if (settingsKeys.contains("udpEnabled") || force) { + ostr << " m_udpEnabled: " << m_udpEnabled; + } + if (settingsKeys.contains("udpAddress") || force) { + ostr << " m_udpAddress: " << m_udpAddress.toStdString(); + } + if (settingsKeys.contains("udpPort") || force) { + ostr << " m_udpPort: " << m_udpPort; + } + if (settingsKeys.contains("rgbColor") || force) { + ostr << " m_rgbColor: " << m_rgbColor; + } + if (settingsKeys.contains("title") || force) { + ostr << " m_title: " << m_title.toStdString(); + } + if (settingsKeys.contains("streamIndex") || force) { + ostr << " m_streamIndex: " << m_streamIndex; + } + if (settingsKeys.contains("useReverseAPI") || force) { + ostr << " m_useReverseAPI: " << m_useReverseAPI; + } + if (settingsKeys.contains("reverseAPIAddress") || force) { + ostr << " m_reverseAPIAddress: " << m_reverseAPIAddress.toStdString(); + } + if (settingsKeys.contains("reverseAPIPort") || force) { + ostr << " m_reverseAPIPort: " << m_reverseAPIPort; + } + if (settingsKeys.contains("reverseAPIDeviceIndex") || force) { + ostr << " m_reverseAPIDeviceIndex: " << m_reverseAPIDeviceIndex; + } + if (settingsKeys.contains("reverseAPIChannelIndex") || force) { + ostr << " m_reverseAPIChannelIndex: " << m_reverseAPIChannelIndex; + } + if (settingsKeys.contains("scopeCh1") || force) { + ostr << " m_scopeCh1: " << m_scopeCh1; + } + if (settingsKeys.contains("scopeCh2") || force) { + ostr << " m_scopeCh2: " << m_scopeCh2; + } + if (settingsKeys.contains("logFilename") || force) { + ostr << " m_logFilename: " << m_logFilename.toStdString(); + } + if (settingsKeys.contains("logEnabled") || force) { + ostr << " m_logEnabled: " << m_logEnabled; + } + if (settingsKeys.contains("workspaceIndex") || force) { + ostr << " m_workspaceIndex: " << m_workspaceIndex; + } + if (settingsKeys.contains("hidden") || force) { + ostr << " m_hidden: " << m_hidden; + } + + return QString(ostr.str().c_str()); +} diff --git a/plugins/channelrx/demodnavtex/navtexdemodsettings.h b/plugins/channelrx/demodnavtex/navtexdemodsettings.h index e7e324fc0..dbdc7bd14 100644 --- a/plugins/channelrx/demodnavtex/navtexdemodsettings.h +++ b/plugins/channelrx/demodnavtex/navtexdemodsettings.h @@ -77,7 +77,8 @@ struct NavtexDemodSettings void setScopeGUI(Serializable *scopeGUI) { m_scopeGUI = scopeGUI; } QByteArray serialize() const; bool deserialize(const QByteArray& data); + void applySettings(const QStringList& settingsKeys, const NavtexDemodSettings& settings); + QString getDebugString(const QStringList& settingsKeys, bool force=false) const; }; #endif /* INCLUDE_NAVTEXDEMODSETTINGS_H */ - diff --git a/plugins/channelrx/demodnavtex/navtexdemodsink.cpp b/plugins/channelrx/demodnavtex/navtexdemodsink.cpp index 81a8be5d8..213057c4c 100644 --- a/plugins/channelrx/demodnavtex/navtexdemodsink.cpp +++ b/plugins/channelrx/demodnavtex/navtexdemodsink.cpp @@ -41,7 +41,7 @@ NavtexDemodSink::NavtexDemodSink() : m_sampleBuffer.resize(m_sampleBufferSize); - applySettings(m_settings, true); + applySettings(QStringList(), m_settings, true); applyChannelSettings(m_channelSampleRate, m_channelFrequencyOffset, true); m_lowpassComplex1.create(301, NavtexDemodSettings::NAVTEXDEMOD_CHANNEL_SAMPLE_RATE, NavtexDemodSettings::NAVTEXDEMOD_BAUD_RATE * 1.1); @@ -457,13 +457,11 @@ void NavtexDemodSink::init() m_messageBuffer = ""; } -void NavtexDemodSink::applySettings(const NavtexDemodSettings& settings, bool force) +void NavtexDemodSink::applySettings(const QStringList& settingsKeys, const NavtexDemodSettings& settings, bool force) { - qDebug() << "NavtexDemodSink::applySettings:" - << " m_rfBandwidth: " << settings.m_rfBandwidth - << " force: " << force; + qDebug() << "NavtexDemodSink::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) NavtexDemodSettings::NAVTEXDEMOD_CHANNEL_SAMPLE_RATE; @@ -485,8 +483,10 @@ void NavtexDemodSink::applySettings(const NavtexDemodSettings& settings, bool fo // while something is being transmitted m_movMax1.setSize(m_samplesPerBit * 8); m_movMax2.setSize(m_samplesPerBit * 8); + m_settings = settings; + } + else + { + m_settings.applySettings(settingsKeys, settings); } - - m_settings = settings; } - diff --git a/plugins/channelrx/demodnavtex/navtexdemodsink.h b/plugins/channelrx/demodnavtex/navtexdemodsink.h index 0a9ffdd2c..67df78328 100644 --- a/plugins/channelrx/demodnavtex/navtexdemodsink.h +++ b/plugins/channelrx/demodnavtex/navtexdemodsink.h @@ -46,7 +46,7 @@ public: void setScopeSink(ScopeVis* scopeSink) { m_scopeSink = scopeSink; } void applyChannelSettings(int channelSampleRate, int channelFrequencyOffset, bool force = false); - void applySettings(const NavtexDemodSettings& settings, bool force = false); + void applySettings(const QStringList& settingsKeys, const NavtexDemodSettings& settings, bool force = false); void setMessageQueueToChannel(MessageQueue *messageQueue) { m_messageQueueToChannel = messageQueue; } void setChannel(ChannelAPI *channel) { m_channel = channel; } @@ -142,4 +142,3 @@ private: }; #endif // INCLUDE_NAVTEXDEMODSINK_H - diff --git a/plugins/channelrx/demodnfm/nfmdemod.cpp b/plugins/channelrx/demodnfm/nfmdemod.cpp index ce6c2267e..44e92792c 100644 --- a/plugins/channelrx/demodnfm/nfmdemod.cpp +++ b/plugins/channelrx/demodnfm/nfmdemod.cpp @@ -60,7 +60,7 @@ NFMDemod::NFMDemod(DeviceAPI *devieAPI) : { qDebug("NFMDemod::NFMDemod"); setObjectName(m_channelId); - applySettings(m_settings, true); + applySettings(QStringList(), m_settings, true); m_deviceAPI->addChannelSink(this); m_deviceAPI->addChannelSinkAPI(this); @@ -155,7 +155,7 @@ void NFMDemod::start() m_thread->start(); - NFMDemodBaseband::MsgConfigureNFMDemodBaseband *msg = NFMDemodBaseband::MsgConfigureNFMDemodBaseband::create(m_settings, true); + NFMDemodBaseband::MsgConfigureNFMDemodBaseband *msg = NFMDemodBaseband::MsgConfigureNFMDemodBaseband::create(QStringList(), m_settings, true); m_basebandSink->getInputMessageQueue()->push(msg); m_running = true; @@ -180,7 +180,7 @@ bool NFMDemod::handleMessage(const Message& cmd) MsgConfigureNFMDemod& cfg = (MsgConfigureNFMDemod&) cmd; qDebug() << "NFMDemod::handleMessage: MsgConfigureNFMDemod"; - applySettings(cfg.getSettings(), cfg.getForce()); + applySettings(cfg.getSettingsKeys(), cfg.getSettings(), cfg.getForce()); return true; } @@ -218,91 +218,20 @@ void NFMDemod::setCenterFrequency(qint64 frequency) { NFMDemodSettings settings = m_settings; settings.m_inputFrequencyOffset = frequency; - applySettings(settings, false); + applySettings(QStringList("inputFrequencyOffset"), settings, false); if (m_guiMessageQueue) // forward to GUI if any { - MsgConfigureNFMDemod *msgToGUI = MsgConfigureNFMDemod::create(settings, false); + MsgConfigureNFMDemod *msgToGUI = MsgConfigureNFMDemod::create(QStringList("inputFrequencyOffset"), settings, false); m_guiMessageQueue->push(msgToGUI); } } -void NFMDemod::applySettings(const NFMDemodSettings& settings, bool force) +void NFMDemod::applySettings(const QStringList& settingsKeys, const NFMDemodSettings& settings, bool force) { - qDebug() << "NFMDemod::applySettings:" - << " m_inputFrequencyOffset: " << settings.m_inputFrequencyOffset - << " m_rfBandwidth: " << settings.m_rfBandwidth - << " m_afBandwidth: " << settings.m_afBandwidth - << " m_fmDeviation: " << settings.m_fmDeviation - << " m_volume: " << settings.m_volume - << " m_squelchGate: " << settings.m_squelchGate - << " m_deltaSquelch: " << settings.m_deltaSquelch - << " m_squelch: " << settings.m_squelch - << " m_ctcssIndex: " << settings.m_ctcssIndex - << " m_ctcssOn: " << settings.m_ctcssOn - << " m_dcsOn: " << settings.m_dcsOn - << " m_dcsCode: " << Qt::oct << settings.m_dcsCode << Qt::dec - << " m_dcsPositive: " << settings.m_dcsPositive - << " m_highPass: " << settings.m_highPass - << " m_audioMute: " << settings.m_audioMute - << " 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() << "NFMDemod::applySettings:" << settings.getDebugString(settingsKeys, force); - QList reverseAPIKeys; - - if ((settings.m_inputFrequencyOffset != m_settings.m_inputFrequencyOffset) || force) { - reverseAPIKeys.append("inputFrequencyOffset"); - } - if ((settings.m_volume != m_settings.m_volume) || force) { - reverseAPIKeys.append("volume"); - } - if ((settings.m_ctcssOn != m_settings.m_ctcssOn) || force) { - reverseAPIKeys.append("ctcssOn"); - } - if ((settings.m_audioMute != m_settings.m_audioMute) || force) { - reverseAPIKeys.append("audioMute"); - } - 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_rfBandwidth != m_settings.m_rfBandwidth) || force) { - reverseAPIKeys.append("rfBandwidth"); - } - if ((settings.m_fmDeviation != m_settings.m_fmDeviation) || force) { - reverseAPIKeys.append("fmDeviation"); - } - if ((settings.m_afBandwidth != m_settings.m_afBandwidth) || force) { - reverseAPIKeys.append("afBandwidth"); - } - if ((settings.m_squelchGate != m_settings.m_squelchGate) || force) { - reverseAPIKeys.append("squelchGate"); - } - if ((settings.m_squelch != m_settings.m_squelch) || force) { - reverseAPIKeys.append("squelch"); - } - if ((settings.m_deltaSquelch != m_settings.m_deltaSquelch) || force) { - reverseAPIKeys.append("deltaSquelch"); - } - if ((settings.m_ctcssIndex != m_settings.m_ctcssIndex) || force) { - reverseAPIKeys.append("ctcssIndex"); - } - if ((settings.m_highPass != m_settings.m_highPass) || force) { - reverseAPIKeys.append("highPass"); - } - if ((settings.m_audioDeviceName != m_settings.m_audioDeviceName) || force) { - reverseAPIKeys.append("audioDeviceName"); - } - - 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 { @@ -313,34 +242,36 @@ void NFMDemod::applySettings(const NFMDemodSettings& settings, bool force) m_settings.m_streamIndex = settings.m_streamIndex; // make sure ChannelAPI::getStreamIndex() is consistent emit streamIndexChanged(settings.m_streamIndex); } - - reverseAPIKeys.append("streamIndex"); } if (m_running) { - NFMDemodBaseband::MsgConfigureNFMDemodBaseband *msg = NFMDemodBaseband::MsgConfigureNFMDemodBaseband::create(settings, force); + NFMDemodBaseband::MsgConfigureNFMDemodBaseband *msg = NFMDemodBaseband::MsgConfigureNFMDemodBaseband::create(settingsKeys, settings, force); m_basebandSink->getInputMessageQueue()->push(msg); } - if (settings.m_useReverseAPI) + if (settingsKeys.contains("useReverseAPI") && (m_settings.m_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; + if (force) { + m_settings = settings; + } else { + m_settings.applySettings(settingsKeys, settings); + } } QByteArray NFMDemod::serialize() const @@ -358,7 +289,7 @@ bool NFMDemod::deserialize(const QByteArray& data) success = false; } - MsgConfigureNFMDemod *msg = MsgConfigureNFMDemod::create(m_settings, true); + MsgConfigureNFMDemod *msg = MsgConfigureNFMDemod::create(QStringList(), m_settings, true); m_inputMessageQueue.push(msg); return success; @@ -413,12 +344,12 @@ int NFMDemod::webapiSettingsPutPatch( NFMDemodSettings settings = m_settings; webapiUpdateChannelSettings(settings, channelSettingsKeys, response); - MsgConfigureNFMDemod *msg = MsgConfigureNFMDemod::create(settings, force); + MsgConfigureNFMDemod *msg = MsgConfigureNFMDemod::create(channelSettingsKeys, settings, force); m_inputMessageQueue.push(msg); if (m_guiMessageQueue) // forward to GUI if any { - MsgConfigureNFMDemod *msgToGUI = MsgConfigureNFMDemod::create(settings, force); + MsgConfigureNFMDemod *msgToGUI = MsgConfigureNFMDemod::create(channelSettingsKeys, settings, force); m_guiMessageQueue->push(msgToGUI); } @@ -611,7 +542,7 @@ void NFMDemod::webapiFormatChannelReport(SWGSDRangel::SWGChannelReport& response } } -void NFMDemod::webapiReverseSendSettings(QList& channelSettingsKeys, const NFMDemodSettings& settings, bool force) +void NFMDemod::webapiReverseSendSettings(const QList& channelSettingsKeys, const NFMDemodSettings& settings, bool force) { SWGSDRangel::SWGChannelSettings *swgChannelSettings = new SWGSDRangel::SWGChannelSettings(); webapiFormatChannelSettings(channelSettingsKeys, swgChannelSettings, settings, force); @@ -638,7 +569,7 @@ void NFMDemod::webapiReverseSendSettings(QList& channelSettingsKeys, co void NFMDemod::sendChannelSettings( const QList& pipes, - QList& channelSettingsKeys, + const QList& channelSettingsKeys, const NFMDemodSettings& settings, bool force) { @@ -662,7 +593,7 @@ void NFMDemod::sendChannelSettings( } void NFMDemod::webapiFormatChannelSettings( - QList& channelSettingsKeys, + const QList& channelSettingsKeys, SWGSDRangel::SWGChannelSettings *swgChannelSettings, const NFMDemodSettings& settings, bool force diff --git a/plugins/channelrx/demodnfm/nfmdemod.h b/plugins/channelrx/demodnfm/nfmdemod.h index afa003127..31059baf4 100644 --- a/plugins/channelrx/demodnfm/nfmdemod.h +++ b/plugins/channelrx/demodnfm/nfmdemod.h @@ -46,22 +46,25 @@ public: public: const NFMDemodSettings& getSettings() const { return m_settings; } + const QStringList& getSettingsKeys() const { return m_settingsKeys; } bool getForce() const { return m_force; } - static MsgConfigureNFMDemod* create(const NFMDemodSettings& settings, bool force) + static MsgConfigureNFMDemod* create(const QStringList& settingsKeys, const NFMDemodSettings& settings, bool force) { - return new MsgConfigureNFMDemod(settings, force); + return new MsgConfigureNFMDemod(settingsKeys, settings, force); } private: NFMDemodSettings m_settings; + QStringList m_settingsKeys; bool m_force; - MsgConfigureNFMDemod(const NFMDemodSettings& settings, bool force) : + MsgConfigureNFMDemod(const QStringList& settingsKeys, const NFMDemodSettings& settings, bool force) : Message(), m_settings(settings), + m_settingsKeys(settingsKeys), m_force(force) - { } + {} }; NFMDemod(DeviceAPI *deviceAPI); @@ -156,18 +159,18 @@ private: static const int m_udpBlockSize; virtual bool handleMessage(const Message& cmd); - void applySettings(const NFMDemodSettings& settings, bool force = false); + void applySettings(const QStringList& settingsKeys, const NFMDemodSettings& settings, bool force = false); void sendSampleRateToDemodAnalyzer(); void webapiFormatChannelReport(SWGSDRangel::SWGChannelReport& response); - void webapiReverseSendSettings(QList& channelSettingsKeys, const NFMDemodSettings& settings, bool force); + void webapiReverseSendSettings(const QList& channelSettingsKeys, const NFMDemodSettings& settings, bool force); void sendChannelSettings( const QList& pipes, - QList& channelSettingsKeys, + const QList& channelSettingsKeys, const NFMDemodSettings& settings, bool force ); void webapiFormatChannelSettings( - QList& channelSettingsKeys, + const QList& channelSettingsKeys, SWGSDRangel::SWGChannelSettings *swgChannelSettings, const NFMDemodSettings& settings, bool force diff --git a/plugins/channelrx/demodnfm/nfmdemodbaseband.cpp b/plugins/channelrx/demodnfm/nfmdemodbaseband.cpp index 9de80bac1..11edfbb78 100644 --- a/plugins/channelrx/demodnfm/nfmdemodbaseband.cpp +++ b/plugins/channelrx/demodnfm/nfmdemodbaseband.cpp @@ -121,7 +121,7 @@ bool NFMDemodBaseband::handleMessage(const Message& cmd) MsgConfigureNFMDemodBaseband& cfg = (MsgConfigureNFMDemodBaseband&) cmd; qDebug() << "NFMDemodBaseband::handleMessage: MsgConfigureNFMDemodBaseband"; - applySettings(cfg.getSettings(), cfg.getForce()); + applySettings(cfg.getSettingsKeys(), cfg.getSettings(), cfg.getForce()); return true; } @@ -148,9 +148,9 @@ bool NFMDemodBaseband::handleMessage(const Message& cmd) } } -void NFMDemodBaseband::applySettings(const NFMDemodSettings& settings, bool force) +void NFMDemodBaseband::applySettings(const QStringList& settingsKeys, const NFMDemodSettings& settings, const 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_sink.getAudioSampleRate(), settings.m_inputFrequencyOffset); m_sink.applyChannelSettings(m_channelizer.getChannelSampleRate(), m_channelizer.getChannelFrequencyOffset()); @@ -162,7 +162,7 @@ void NFMDemodBaseband::applySettings(const NFMDemodSettings& settings, bool forc } } - 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); @@ -179,9 +179,13 @@ void NFMDemodBaseband::applySettings(const NFMDemodSettings& settings, bool forc } } - 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 NFMDemodBaseband::getChannelSampleRate() const diff --git a/plugins/channelrx/demodnfm/nfmdemodbaseband.h b/plugins/channelrx/demodnfm/nfmdemodbaseband.h index 9e5505ee8..f4d1a81e8 100644 --- a/plugins/channelrx/demodnfm/nfmdemodbaseband.h +++ b/plugins/channelrx/demodnfm/nfmdemodbaseband.h @@ -40,20 +40,23 @@ public: public: const NFMDemodSettings& getSettings() const { return m_settings; } + const QStringList& getSettingsKeys() const { return m_settingsKeys; } bool getForce() const { return m_force; } - static MsgConfigureNFMDemodBaseband* create(const NFMDemodSettings& settings, bool force) + static MsgConfigureNFMDemodBaseband* create(const QStringList& settingsKeys, const NFMDemodSettings& settings, bool force) { - return new MsgConfigureNFMDemodBaseband(settings, force); + return new MsgConfigureNFMDemodBaseband(settingsKeys, settings, force); } private: NFMDemodSettings m_settings; + QStringList m_settingsKeys; bool m_force; - MsgConfigureNFMDemodBaseband(const NFMDemodSettings& settings, bool force) : + MsgConfigureNFMDemodBaseband(const QStringList& settingsKeys, const NFMDemodSettings& settings, bool force) : Message(), m_settings(settings), + m_settingsKeys(settingsKeys), m_force(force) { } }; @@ -83,7 +86,7 @@ private: QRecursiveMutex m_mutex; bool handleMessage(const Message& cmd); - void applySettings(const NFMDemodSettings& settings, bool force = false); + void applySettings(const QStringList& settingsKeys, const NFMDemodSettings& settings, bool force = false); private slots: void handleInputMessages(); diff --git a/plugins/channelrx/demodnfm/nfmdemodgui.cpp b/plugins/channelrx/demodnfm/nfmdemodgui.cpp index 2d832894a..cf315619c 100644 --- a/plugins/channelrx/demodnfm/nfmdemodgui.cpp +++ b/plugins/channelrx/demodnfm/nfmdemodgui.cpp @@ -55,7 +55,7 @@ void NFMDemodGUI::resetToDefaults() { m_settings.resetToDefaults(); displaySettings(); - applySettings(); + applySettings(QStringList(), true); } QByteArray NFMDemodGUI::serialize() const @@ -67,7 +67,7 @@ bool NFMDemodGUI::deserialize(const QByteArray& data) { if(m_settings.deserialize(data)) { displaySettings(); - applySettings(true); + applySettings(QStringList(), true); return true; } else { resetToDefaults(); @@ -132,7 +132,7 @@ void NFMDemodGUI::channelMarkerChangedByCursor() { ui->deltaFrequency->setValue(m_channelMarker.getCenterFrequency()); m_settings.m_inputFrequencyOffset = m_channelMarker.getCenterFrequency(); - applySettings(); + applySettings(QStringList("inputFrequencyOffset")); } void NFMDemodGUI::channelMarkerHighlightedByCursor() @@ -145,7 +145,7 @@ void NFMDemodGUI::on_deltaFrequency_changed(qint64 value) m_channelMarker.setCenterFrequency(value); m_settings.m_inputFrequencyOffset = m_channelMarker.getCenterFrequency(); updateAbsoluteCenterFrequency(); - applySettings(); + applySettings(QStringList("inputFrequencyOffset")); } void NFMDemodGUI::on_channelSpacingApply_clicked() @@ -168,7 +168,7 @@ void NFMDemodGUI::on_channelSpacingApply_clicked() ui->rfBW->blockSignals(false); ui->afBW->blockSignals(false); ui->fmDev->blockSignals(false); - applySettings(); + applySettings(QStringList({"rfBandwidth", "afBandwidth", "fmDeviation"})); } void NFMDemodGUI::on_rfBW_valueChanged(int value) @@ -182,35 +182,35 @@ void NFMDemodGUI::on_rfBW_valueChanged(int value) ui->channelSpacing->update(); ui->channelSpacing->blockSignals(false); - applySettings(); + applySettings(QStringList({"rfBandwidth"})); } void NFMDemodGUI::on_afBW_valueChanged(int value) { ui->afBWText->setText(QString("%1k").arg(value / 10.0, 0, 'f', 1)); m_settings.m_afBandwidth = value * 100.0; - applySettings(); + applySettings(QStringList({"afBandwidth"})); } void NFMDemodGUI::on_fmDev_valueChanged(int value) { ui->fmDevText->setText(QString("%1%2k").arg(QChar(0xB1, 0x00)).arg(value / 10.0, 0, 'f', 1)); m_settings.m_fmDeviation = value * 200.0; - applySettings(); + applySettings(QStringList({"fmDeviation"})); } void NFMDemodGUI::on_volume_valueChanged(int value) { ui->volumeText->setText(QString("%1").arg(value)); m_settings.m_volume = value / 100.0; - applySettings(); + applySettings(QStringList({"volume"})); } void NFMDemodGUI::on_squelchGate_valueChanged(int value) { ui->squelchGateText->setText(QString("%1").arg(value * 10.0f, 0, 'f', 0)); m_settings.m_squelchGate = value; - applySettings(); + applySettings(QStringList({"squelchGate"})); } void NFMDemodGUI::on_deltaSquelch_toggled(bool checked) @@ -228,7 +228,7 @@ void NFMDemodGUI::on_deltaSquelch_toggled(bool checked) ui->squelch->setToolTip(tr("Squelch power threshold (dB)")); } m_settings.m_deltaSquelch = checked; - applySettings(); + applySettings(QStringList({"deltaSquelch"})); } void NFMDemodGUI::on_squelch_valueChanged(int value) @@ -246,19 +246,19 @@ void NFMDemodGUI::on_squelch_valueChanged(int value) ui->squelch->setToolTip(tr("Squelch power threshold (dB)")); } m_settings.m_squelch = value * 1.0; - applySettings(); + applySettings(QStringList({"squelch"})); } void NFMDemodGUI::on_ctcssOn_toggled(bool checked) { m_settings.m_ctcssOn = checked; - applySettings(); + applySettings(QStringList({"ctcssOn"})); } void NFMDemodGUI::on_dcsOn_toggled(bool checked) { m_settings.m_dcsOn = checked; - applySettings(); + applySettings(QStringList({"dcsOn"})); } void NFMDemodGUI::on_dcsCode_currentIndexChanged(int index) @@ -266,7 +266,7 @@ void NFMDemodGUI::on_dcsCode_currentIndexChanged(int index) if (index == 0) { m_settings.m_dcsCode = 0; - applySettings(); + applySettings(QStringList({"dcsCode"})); } else { @@ -280,7 +280,7 @@ void NFMDemodGUI::on_dcsCode_currentIndexChanged(int index) { m_settings.m_dcsCode = dcsCode; m_settings.m_dcsPositive = positive; - applySettings(); + applySettings(QStringList({"dcsCode", "dcsPositive"})); } } } @@ -288,19 +288,19 @@ void NFMDemodGUI::on_dcsCode_currentIndexChanged(int index) void NFMDemodGUI::on_highPassFilter_toggled(bool checked) { m_settings.m_highPass = checked; - applySettings(); + applySettings(QStringList({"highPass"})); } void NFMDemodGUI::on_audioMute_toggled(bool checked) { m_settings.m_audioMute = checked; - applySettings(); + applySettings(QStringList({"audioMute"})); } void NFMDemodGUI::on_ctcss_currentIndexChanged(int index) { m_settings.m_ctcssIndex = index; - applySettings(); + applySettings(QStringList({"ctcssIndex"})); } void NFMDemodGUI::onWidgetRolled(QWidget* widget, bool rollDown) @@ -313,7 +313,7 @@ void NFMDemodGUI::onWidgetRolled(QWidget* widget, bool rollDown) */ getRollupContents()->saveState(m_rollupState); - applySettings(); + applySettings(QStringList()); } void NFMDemodGUI::onMenuDialogCalled(const QPoint &p) @@ -358,7 +358,16 @@ void NFMDemodGUI::onMenuDialogCalled(const QPoint &p) updateIndexLabel(); } - applySettings(); + applySettings(QStringList({ + "title", + "rgbColor", + "useReverseAPI", + "reverseAPIAddress", + "reverseAPIPort", + "reverseAPIDeviceIndex", + "reverseAPIChannelIndex", + "streamIndex" + })); } resetContextMenuType(); @@ -462,7 +471,7 @@ NFMDemodGUI::NFMDemodGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Baseban displaySettings(); makeUIConnections(); - applySettings(true); + applySettings(QStringList(), true); DialPopup::addPopupsToChildDials(this); m_resizer.enableChildMouseTracking(); } @@ -472,13 +481,13 @@ NFMDemodGUI::~NFMDemodGUI() delete ui; } -void NFMDemodGUI::applySettings(bool force) +void NFMDemodGUI::applySettings(const QStringList& settingsKeys, bool force) { if (m_doApplySettings) { qDebug() << "NFMDemodGUI::applySettings"; - NFMDemod::MsgConfigureNFMDemod* message = NFMDemod::MsgConfigureNFMDemod::create( m_settings, force); + NFMDemod::MsgConfigureNFMDemod* message = NFMDemod::MsgConfigureNFMDemod::create(settingsKeys, m_settings, force); m_nfmDemod->getInputMessageQueue()->push(message); } } @@ -612,7 +621,7 @@ void NFMDemodGUI::audioSelect(const QPoint& p) if (audioSelect.m_selected) { m_settings.m_audioDeviceName = audioSelect.m_audioDeviceName; - applySettings(); + applySettings(QStringList({"audioDeviceName"})); } } diff --git a/plugins/channelrx/demodnfm/nfmdemodgui.h b/plugins/channelrx/demodnfm/nfmdemodgui.h index 6a592e79b..f1c6a5bcc 100644 --- a/plugins/channelrx/demodnfm/nfmdemodgui.h +++ b/plugins/channelrx/demodnfm/nfmdemodgui.h @@ -88,7 +88,7 @@ private: virtual ~NFMDemodGUI(); void blockApplySettings(bool block); - void applySettings(bool force = false); + void applySettings(const QStringList& settingsKeys, bool force = false); void displaySettings(); void setCtcssFreq(Real ctcssFreq); void setDcsCode(unsigned int dcsCode); diff --git a/plugins/channelrx/demodnfm/nfmdemodsettings.cpp b/plugins/channelrx/demodnfm/nfmdemodsettings.cpp index 7c4487253..c3aedcbd7 100644 --- a/plugins/channelrx/demodnfm/nfmdemodsettings.cpp +++ b/plugins/channelrx/demodnfm/nfmdemodsettings.cpp @@ -204,6 +204,177 @@ bool NFMDemodSettings::deserialize(const QByteArray& data) } } +void NFMDemodSettings::applySettings(const QStringList& settingsKeys, const NFMDemodSettings& settings) +{ + if (settingsKeys.contains("inputFrequencyOffset")) { + m_inputFrequencyOffset = settings.m_inputFrequencyOffset; + } + if (settingsKeys.contains("rfBandwidth")) { + m_rfBandwidth = settings.m_rfBandwidth; + } + if (settingsKeys.contains("afBandwidth")) { + m_afBandwidth = settings.m_afBandwidth; + } + if (settingsKeys.contains("fmDeviation")) { + m_fmDeviation = settings.m_fmDeviation; + } + if (settingsKeys.contains("squelchGate")) { + m_squelchGate = settings.m_squelchGate; + } + if (settingsKeys.contains("deltaSquelch")) { + m_deltaSquelch = settings.m_deltaSquelch; + } + if (settingsKeys.contains("squelch")) { + m_squelch = settings.m_squelch; + } + if (settingsKeys.contains("volume")) { + m_volume = settings.m_volume; + } + if (settingsKeys.contains("ctcssOn")) { + m_ctcssOn = settings.m_ctcssOn; + } + if (settingsKeys.contains("audioMute")) { + m_audioMute = settings.m_audioMute; + } + if (settingsKeys.contains("ctcssIndex")) { + m_ctcssIndex = settings.m_ctcssIndex; + } + if (settingsKeys.contains("dcsOn")) { + m_dcsOn = settings.m_dcsOn; + } + if (settingsKeys.contains("dcsCode")) { + m_dcsCode = settings.m_dcsCode; + } + if (settingsKeys.contains("dcsPositive")) { + m_dcsPositive = settings.m_dcsPositive; + } + if (settingsKeys.contains("rgbColor")) { + m_rgbColor = settings.m_rgbColor; + } + if (settingsKeys.contains("title")) { + m_title = settings.m_title; + } + if (settingsKeys.contains("audioDeviceName")) { + m_audioDeviceName = settings.m_audioDeviceName; + } + if (settingsKeys.contains("highPass")) { + m_highPass = settings.m_highPass; + } + if (settingsKeys.contains("streamIndex")) { + m_streamIndex = settings.m_streamIndex; + } + if (settingsKeys.contains("useReverseAPI")) { + m_useReverseAPI = settings.m_useReverseAPI; + } + if (settingsKeys.contains("reverseAPIAddress")) { + m_reverseAPIAddress = settings.m_reverseAPIAddress; + } + if (settingsKeys.contains("reverseAPIPort")) { + m_reverseAPIPort = settings.m_reverseAPIPort; + } + if (settingsKeys.contains("reverseAPIDeviceIndex")) { + m_reverseAPIDeviceIndex = settings.m_reverseAPIDeviceIndex; + } + if (settingsKeys.contains("reverseAPIChannelIndex")) { + m_reverseAPIChannelIndex = settings.m_reverseAPIChannelIndex; + } + if (settingsKeys.contains("workspaceIndex")) { + m_workspaceIndex = settings.m_workspaceIndex; + } + if (settingsKeys.contains("geometryBytes")) { + m_geometryBytes = settings.m_geometryBytes; + } + if (settingsKeys.contains("hidden")) { + m_hidden = settings.m_hidden; + } +} + +QString NFMDemodSettings::getDebugString(const QStringList& settingsKeys, bool force) const +{ + std::ostringstream ostr; + + if (settingsKeys.contains("inputFrequencyOffset") || force) { + ostr << " m_inputFrequencyOffset: " << m_inputFrequencyOffset; + } + if (settingsKeys.contains("rfBandwidth") || force) { + ostr << " m_rfBandwidth: " << m_rfBandwidth; + } + if (settingsKeys.contains("afBandwidth") || force) { + ostr << " m_afBandwidth: " << m_afBandwidth; + } + if (settingsKeys.contains("fmDeviation") || force) { + ostr << " m_fmDeviation: " << m_fmDeviation; + } + if (settingsKeys.contains("squelchGate") || force) { + ostr << " m_squelchGate: " << m_squelchGate; + } + if (settingsKeys.contains("deltaSquelch") || force) { + ostr << " m_deltaSquelch: " << m_deltaSquelch; + } + if (settingsKeys.contains("squelch") || force) { + ostr << " m_squelch: " << m_squelch; + } + if (settingsKeys.contains("volume") || force) { + ostr << " m_volume: " << m_volume; + } + if (settingsKeys.contains("ctcssOn") || force) { + ostr << " m_ctcssOn: " << m_ctcssOn; + } + if (settingsKeys.contains("audioMute") || force) { + ostr << " m_audioMute: " << m_audioMute; + } + if (settingsKeys.contains("ctcssIndex") || force) { + ostr << " m_ctcssIndex: " << m_ctcssIndex; + } + if (settingsKeys.contains("dcsOn") || force) { + ostr << " m_dcsOn: " << m_dcsOn; + } + if (settingsKeys.contains("dcsCode") || force) { + ostr << " m_dcsCode: " << m_dcsCode; + } + if (settingsKeys.contains("dcsPositive") || force) { + ostr << " m_dcsPositive: " << m_dcsPositive; + } + if (settingsKeys.contains("rgbColor") || force) { + ostr << " m_rgbColor: " << m_rgbColor; + } + if (settingsKeys.contains("title") || force) { + ostr << " m_title: " << m_title.toStdString(); + } + if (settingsKeys.contains("audioDeviceName") || force) { + ostr << " m_audioDeviceName: " << m_audioDeviceName.toStdString(); + } + if (settingsKeys.contains("highPass") || force) { + ostr << " m_highPass: " << m_highPass; + } + if (settingsKeys.contains("streamIndex") || force) { + ostr << " m_streamIndex: " << m_streamIndex; + } + if (settingsKeys.contains("useReverseAPI") || force) { + ostr << " m_useReverseAPI: " << m_useReverseAPI; + } + if (settingsKeys.contains("reverseAPIAddress") || force) { + ostr << " m_reverseAPIAddress: " << m_reverseAPIAddress.toStdString(); + } + if (settingsKeys.contains("reverseAPIPort") || force) { + ostr << " m_reverseAPIPort: " << m_reverseAPIPort; + } + if (settingsKeys.contains("reverseAPIDeviceIndex") || force) { + ostr << " m_reverseAPIDeviceIndex: " << m_reverseAPIDeviceIndex; + } + if (settingsKeys.contains("reverseAPIChannelIndex") || force) { + ostr << " m_reverseAPIChannelIndex: " << m_reverseAPIChannelIndex; + } + if (settingsKeys.contains("workspaceIndex") || force) { + ostr << " m_workspaceIndex: " << m_workspaceIndex; + } + if (settingsKeys.contains("hidden") || force) { + ostr << " m_hidden: " << m_hidden; + } + + return QString(ostr.str().c_str()); +} + int NFMDemodSettings::getChannelSpacing(int index) { if (index < 0) { diff --git a/plugins/channelrx/demodnfm/nfmdemodsettings.h b/plugins/channelrx/demodnfm/nfmdemodsettings.h index be65ec9a6..bd48d114d 100644 --- a/plugins/channelrx/demodnfm/nfmdemodsettings.h +++ b/plugins/channelrx/demodnfm/nfmdemodsettings.h @@ -72,6 +72,8 @@ struct NFMDemodSettings void setRollupState(Serializable *rollupState) { m_rollupState = rollupState; } QByteArray serialize() const; bool deserialize(const QByteArray& data); + void applySettings(const QStringList& settingsKeys, const NFMDemodSettings& settings); + QString getDebugString(const QStringList& settingsKeys, bool force=false) const; static int getChannelSpacing(int index); static int getChannelSpacingIndex(int channelSpacing); diff --git a/plugins/channelrx/demodnfm/nfmdemodsink.cpp b/plugins/channelrx/demodnfm/nfmdemodsink.cpp index 71ec39b11..a48bb48b4 100644 --- a/plugins/channelrx/demodnfm/nfmdemodsink.cpp +++ b/plugins/channelrx/demodnfm/nfmdemodsink.cpp @@ -66,7 +66,7 @@ NFMDemodSink::NFMDemodSink() : m_dcsDetector.setSampleRate(CTCSS_DETECTOR_RATE); m_dcsDetector.setEqWindow(23); - applySettings(m_settings, true); + applySettings(QStringList(), m_settings, true); applyChannelSettings(m_channelSampleRate, m_channelFrequencyOffset, true); } @@ -302,55 +302,38 @@ void NFMDemodSink::applyChannelSettings(int channelSampleRate, int channelFreque m_channelFrequencyOffset = channelFrequencyOffset; } -void NFMDemodSink::applySettings(const NFMDemodSettings& settings, bool force) +void NFMDemodSink::applySettings(const QStringList& settingsKeys, const NFMDemodSettings& settings, bool force) { - qDebug() << "NFMDemodSink::applySettings:" - << " m_inputFrequencyOffset: " << settings.m_inputFrequencyOffset - << " m_rfBandwidth: " << settings.m_rfBandwidth - << " m_afBandwidth: " << settings.m_afBandwidth - << " m_fmDeviation: " << settings.m_fmDeviation - << " m_volume: " << settings.m_volume - << " m_squelchGate: " << settings.m_squelchGate - << " m_deltaSquelch: " << settings.m_deltaSquelch - << " m_squelch: " << settings.m_squelch - << " m_ctcssIndex: " << settings.m_ctcssIndex - << " m_ctcssOn: " << settings.m_ctcssOn - << " m_dcsOn: " << settings.m_dcsOn - << " m_dcsCode: " << settings.m_dcsCode - << " m_dcsPositive: " << settings.m_dcsPositive - << " m_highPass: " << settings.m_highPass - << " m_audioMute: " << settings.m_audioMute - << " m_audioDeviceName: " << settings.m_audioDeviceName - << " force: " << force; + qDebug() << "NFMDemodSink::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(m_audioSampleRate); m_interpolatorDistanceRemain = m_interpolatorDistance; } - if ((settings.m_fmDeviation != m_settings.m_fmDeviation) || force) { + if ((settingsKeys.contains("fmDeviation") && (settings.m_fmDeviation != m_settings.m_fmDeviation)) || force) { Real lowCut = -Real(settings.m_fmDeviation) / m_channelSampleRate; Real hiCut = Real(settings.m_fmDeviation) / m_channelSampleRate; m_rfFilter.create_filter(lowCut, hiCut); m_phaseDiscri.setFMScaling(Real(m_audioSampleRate) / (2.0f * settings.m_fmDeviation)); } - if ((settings.m_afBandwidth != m_settings.m_afBandwidth) || force) + if ((settingsKeys.contains("afBandwidth") && (settings.m_afBandwidth != m_settings.m_afBandwidth)) || force) { m_bandpass.create(m_filterTaps, m_audioSampleRate, 300.0, settings.m_afBandwidth); m_lowpass.create(m_filterTaps, m_audioSampleRate, settings.m_afBandwidth); } - if ((settings.m_squelchGate != m_settings.m_squelchGate) || force) + if ((settingsKeys.contains("squelchGate") && (settings.m_squelchGate != m_settings.m_squelchGate)) || force) { m_squelchGate = (m_audioSampleRate / 100) * settings.m_squelchGate; // gate is given in 10s of ms at 48000 Hz audio sample rate m_squelchCount = 0; // reset squelch open counter } - if ((settings.m_squelch != m_settings.m_squelch) || - (settings.m_deltaSquelch != m_settings.m_deltaSquelch) || force) + if ((settingsKeys.contains("squelch") && (settings.m_squelch != m_settings.m_squelch)) || + (settingsKeys.contains("deltaSquelch") && (settings.m_deltaSquelch != m_settings.m_deltaSquelch)) || force) { if (settings.m_deltaSquelch) { // input is a value in negative centis @@ -367,17 +350,21 @@ void NFMDemodSink::applySettings(const NFMDemodSettings& settings, bool force) m_squelchCount = 0; // reset squelch open counter } - if ((settings.m_ctcssIndex != m_settings.m_ctcssIndex) || force) { + if ((settingsKeys.contains("ctcssIndex") && (settings.m_ctcssIndex != m_settings.m_ctcssIndex)) || force) { setSelectedCtcssIndex(settings.m_ctcssIndex); } - if ((settings.m_dcsCode != m_settings.m_dcsCode) || - (settings.m_dcsPositive != m_settings.m_dcsPositive) || force) + if ((settingsKeys.contains("dcsCode") && (settings.m_dcsCode != m_settings.m_dcsCode)) || + (settingsKeys.contains("dcsPositive") && (settings.m_dcsPositive != m_settings.m_dcsPositive)) || force) { setSelectedDcsCode(settings.m_dcsCode, settings.m_dcsPositive); } - m_settings = settings; + if (force) { + m_settings = settings; + } else { + m_settings.applySettings(settingsKeys, settings); + } } void NFMDemodSink::applyAudioSampleRate(unsigned int sampleRate) diff --git a/plugins/channelrx/demodnfm/nfmdemodsink.h b/plugins/channelrx/demodnfm/nfmdemodsink.h index 5a1ae19ee..07ebde5ed 100644 --- a/plugins/channelrx/demodnfm/nfmdemodsink.h +++ b/plugins/channelrx/demodnfm/nfmdemodsink.h @@ -66,7 +66,7 @@ public: } void applyChannelSettings(int channelSampleRate, int channelFrequencyOffset, bool force = false); - void applySettings(const NFMDemodSettings& settings, bool force = false); + void applySettings(const QStringList& settingsKeys, const NFMDemodSettings& settings, bool force = false); void setMessageQueueToGUI(MessageQueue *messageQueue) { m_messageQueueToGUI = messageQueue; } AudioFifo *getAudioFifo() { return &m_audioFifo; } diff --git a/plugins/channelrx/demodpacket/packetdemod.cpp b/plugins/channelrx/demodpacket/packetdemod.cpp index 43d7026b0..446dbe98d 100644 --- a/plugins/channelrx/demodpacket/packetdemod.cpp +++ b/plugins/channelrx/demodpacket/packetdemod.cpp @@ -57,7 +57,7 @@ PacketDemod::PacketDemod(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); @@ -131,7 +131,7 @@ void PacketDemod::start() DSPSignalNotification *dspMsg = new DSPSignalNotification(m_basebandSampleRate, m_centerFrequency); m_basebandSink->getInputMessageQueue()->push(dspMsg); - PacketDemodBaseband::MsgConfigurePacketDemodBaseband *msg = PacketDemodBaseband::MsgConfigurePacketDemodBaseband::create(m_settings, true); + PacketDemodBaseband::MsgConfigurePacketDemodBaseband *msg = PacketDemodBaseband::MsgConfigurePacketDemodBaseband::create(QStringList(), m_settings, true); m_basebandSink->getInputMessageQueue()->push(msg); } @@ -149,7 +149,7 @@ bool PacketDemod::handleMessage(const Message& cmd) { MsgConfigurePacketDemod& cfg = (MsgConfigurePacketDemod&) cmd; qDebug() << "PacketDemod::handleMessage: MsgConfigurePacketDemod"; - applySettings(cfg.getSettings(), cfg.getForce()); + applySettings(cfg.getSettingsKeys(), cfg.getSettings(), cfg.getForce()); return true; } @@ -243,61 +243,20 @@ void PacketDemod::setCenterFrequency(qint64 frequency) { PacketDemodSettings settings = m_settings; settings.m_inputFrequencyOffset = frequency; - applySettings(settings, false); + applySettings(QStringList("inputFrequencyOffset"), settings, false); if (m_guiMessageQueue) // forward to GUI if any { - MsgConfigurePacketDemod *msgToGUI = MsgConfigurePacketDemod::create(settings, false); + MsgConfigurePacketDemod *msgToGUI = MsgConfigurePacketDemod::create(QStringList("inputFrequencyOffset"), settings, false); m_guiMessageQueue->push(msgToGUI); } } -void PacketDemod::applySettings(const PacketDemodSettings& settings, bool force) +void PacketDemod::applySettings(const QStringList& settingsKeys, const PacketDemodSettings& settings, bool force) { - qDebug() << "PacketDemod::applySettings:" - << " m_logEnabled: " << settings.m_logEnabled - << " m_logFilename: " << settings.m_logFilename - << " 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() << "PacketDemod::applySettings:" << settings.getDebugString(settingsKeys, force); - QList reverseAPIKeys; - - if ((settings.m_inputFrequencyOffset != m_settings.m_inputFrequencyOffset) || force) { - reverseAPIKeys.append("inputFrequencyOffset"); - } - if ((settings.m_mode != m_settings.m_mode) || force) { - reverseAPIKeys.append("mode"); - } - 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_udpEnabled != m_settings.m_udpEnabled) || force) { - reverseAPIKeys.append("udpEnabled"); - } - 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_logFilename != m_settings.m_logFilename) || force) { - reverseAPIKeys.append("logFilename"); - } - if ((settings.m_logEnabled != m_settings.m_logEnabled) || force) { - reverseAPIKeys.append("logEnabled"); - } - if ((settings.m_useFileTime != m_settings.m_useFileTime) || force) { - reverseAPIKeys.append("useFileTime"); - } - 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 { @@ -308,25 +267,23 @@ void PacketDemod::applySettings(const PacketDemodSettings& settings, bool force) m_settings.m_streamIndex = settings.m_streamIndex; // make sure ChannelAPI::getStreamIndex() is consistent emit streamIndexChanged(settings.m_streamIndex); } - - reverseAPIKeys.append("streamIndex"); } - PacketDemodBaseband::MsgConfigurePacketDemodBaseband *msg = PacketDemodBaseband::MsgConfigurePacketDemodBaseband::create(settings, force); + PacketDemodBaseband::MsgConfigurePacketDemodBaseband *msg = PacketDemodBaseband::MsgConfigurePacketDemodBaseband::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); } - if ((settings.m_logEnabled != m_settings.m_logEnabled) - || (settings.m_logFilename != m_settings.m_logFilename) + if ((settingsKeys.contains("logEnabled") && (settings.m_logEnabled != m_settings.m_logEnabled)) + || (settingsKeys.contains("logFilename") && (settings.m_logFilename != m_settings.m_logFilename)) || force) { if (m_logFile.isOpen()) @@ -355,7 +312,11 @@ void PacketDemod::applySettings(const PacketDemodSettings& settings, bool force) } } - m_settings = settings; + if (force) { + m_settings = settings; + } else { + m_settings.applySettings(settingsKeys, settings); + } } void PacketDemod::sendSampleRateToDemodAnalyzer() @@ -386,14 +347,14 @@ bool PacketDemod::deserialize(const QByteArray& data) { if (m_settings.deserialize(data)) { - MsgConfigurePacketDemod *msg = MsgConfigurePacketDemod::create(m_settings, true); + MsgConfigurePacketDemod *msg = MsgConfigurePacketDemod::create(QStringList(), m_settings, true); m_inputMessageQueue.push(msg); return true; } else { m_settings.resetToDefaults(); - MsgConfigurePacketDemod *msg = MsgConfigurePacketDemod::create(m_settings, true); + MsgConfigurePacketDemod *msg = MsgConfigurePacketDemod::create(QStringList(), m_settings, true); m_inputMessageQueue.push(msg); return false; } @@ -429,13 +390,13 @@ int PacketDemod::webapiSettingsPutPatch( PacketDemodSettings settings = m_settings; webapiUpdateChannelSettings(settings, channelSettingsKeys, response); - MsgConfigurePacketDemod *msg = MsgConfigurePacketDemod::create(settings, force); + MsgConfigurePacketDemod *msg = MsgConfigurePacketDemod::create(channelSettingsKeys, settings, force); m_inputMessageQueue.push(msg); qDebug("PacketDemod::webapiSettingsPutPatch: forward to GUI: %p", m_guiMessageQueue); if (m_guiMessageQueue) // forward to GUI if any { - MsgConfigurePacketDemod *msgToGUI = MsgConfigurePacketDemod::create(settings, force); + MsgConfigurePacketDemod *msgToGUI = MsgConfigurePacketDemod::create(channelSettingsKeys, settings, force); m_guiMessageQueue->push(msgToGUI); } @@ -594,7 +555,7 @@ void PacketDemod::webapiFormatChannelReport(SWGSDRangel::SWGChannelReport& respo response.getPacketDemodReport()->setChannelSampleRate(m_basebandSink->getChannelSampleRate()); } -void PacketDemod::webapiReverseSendSettings(QList& channelSettingsKeys, const PacketDemodSettings& settings, bool force) +void PacketDemod::webapiReverseSendSettings(const QList& channelSettingsKeys, const PacketDemodSettings& settings, bool force) { SWGSDRangel::SWGChannelSettings *swgChannelSettings = new SWGSDRangel::SWGChannelSettings(); webapiFormatChannelSettings(channelSettingsKeys, swgChannelSettings, settings, force); @@ -620,7 +581,7 @@ void PacketDemod::webapiReverseSendSettings(QList& channelSettingsKeys, } void PacketDemod::webapiFormatChannelSettings( - QList& channelSettingsKeys, + const QList& channelSettingsKeys, SWGSDRangel::SWGChannelSettings *swgChannelSettings, const PacketDemodSettings& settings, bool force diff --git a/plugins/channelrx/demodpacket/packetdemod.h b/plugins/channelrx/demodpacket/packetdemod.h index 29763cb08..043d78da4 100644 --- a/plugins/channelrx/demodpacket/packetdemod.h +++ b/plugins/channelrx/demodpacket/packetdemod.h @@ -50,20 +50,23 @@ public: public: const PacketDemodSettings& getSettings() const { return m_settings; } + const QStringList& getSettingsKeys() const { return m_settingsKeys; } bool getForce() const { return m_force; } - static MsgConfigurePacketDemod* create(const PacketDemodSettings& settings, bool force) + static MsgConfigurePacketDemod* create(const QStringList& settingsKeys, const PacketDemodSettings& settings, bool force) { - return new MsgConfigurePacketDemod(settings, force); + return new MsgConfigurePacketDemod(settingsKeys, settings, force); } private: PacketDemodSettings m_settings; + QStringList m_settingsKeys; bool m_force; - MsgConfigurePacketDemod(const PacketDemodSettings& settings, bool force) : + MsgConfigurePacketDemod(const QStringList& settingsKeys, const PacketDemodSettings& settings, bool force) : Message(), m_settings(settings), + m_settingsKeys(settingsKeys), m_force(force) { } }; @@ -155,11 +158,11 @@ private: QNetworkRequest m_networkRequest; virtual bool handleMessage(const Message& cmd); - void applySettings(const PacketDemodSettings& settings, bool force = false); + void applySettings(const QStringList& settingsKeys, const PacketDemodSettings& settings, bool force = false); void sendSampleRateToDemodAnalyzer(); - void webapiReverseSendSettings(QList& channelSettingsKeys, const PacketDemodSettings& settings, bool force); + void webapiReverseSendSettings(const QList& channelSettingsKeys, const PacketDemodSettings& settings, bool force); void webapiFormatChannelSettings( - QList& channelSettingsKeys, + const QList& channelSettingsKeys, SWGSDRangel::SWGChannelSettings *swgChannelSettings, const PacketDemodSettings& settings, bool force diff --git a/plugins/channelrx/demodpacket/packetdemodbaseband.cpp b/plugins/channelrx/demodpacket/packetdemodbaseband.cpp index e943a78f8..874dcee12 100644 --- a/plugins/channelrx/demodpacket/packetdemodbaseband.cpp +++ b/plugins/channelrx/demodpacket/packetdemodbaseband.cpp @@ -134,7 +134,7 @@ bool PacketDemodBaseband::handleMessage(const Message& cmd) MsgConfigurePacketDemodBaseband& cfg = (MsgConfigurePacketDemodBaseband&) cmd; qDebug() << "PacketDemodBaseband::handleMessage: MsgConfigurePacketDemodBaseband"; - applySettings(cfg.getSettings(), cfg.getForce()); + applySettings(cfg.getSettingsKeys(), cfg.getSettings(), cfg.getForce()); return true; } @@ -154,17 +154,21 @@ bool PacketDemodBaseband::handleMessage(const Message& cmd) } } -void PacketDemodBaseband::applySettings(const PacketDemodSettings& settings, bool force) +void PacketDemodBaseband::applySettings(const QStringList& settingsKeys, const PacketDemodSettings& 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(PacketDemodSettings::PACKETDEMOD_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); + } } int PacketDemodBaseband::getChannelSampleRate() const diff --git a/plugins/channelrx/demodpacket/packetdemodbaseband.h b/plugins/channelrx/demodpacket/packetdemodbaseband.h index 28d26f17f..c67be9169 100644 --- a/plugins/channelrx/demodpacket/packetdemodbaseband.h +++ b/plugins/channelrx/demodpacket/packetdemodbaseband.h @@ -42,20 +42,23 @@ public: public: const PacketDemodSettings& getSettings() const { return m_settings; } + const QStringList& getSettingsKeys() const { return m_settingsKeys; } bool getForce() const { return m_force; } - static MsgConfigurePacketDemodBaseband* create(const PacketDemodSettings& settings, bool force) + static MsgConfigurePacketDemodBaseband* create(const QStringList& settingsKeys, const PacketDemodSettings& settings, bool force) { - return new MsgConfigurePacketDemodBaseband(settings, force); + return new MsgConfigurePacketDemodBaseband(settingsKeys, settings, force); } private: PacketDemodSettings m_settings; + QStringList m_settingsKeys; bool m_force; - MsgConfigurePacketDemodBaseband(const PacketDemodSettings& settings, bool force) : + MsgConfigurePacketDemodBaseband(const QStringList& settingsKeys, const PacketDemodSettings& settings, bool force) : Message(), m_settings(settings), + m_settingsKeys(settingsKeys), m_force(force) { } }; @@ -89,7 +92,7 @@ private: bool handleMessage(const Message& cmd); void calculateOffset(PacketDemodSink *sink); - void applySettings(const PacketDemodSettings& settings, bool force = false); + void applySettings(const QStringList& settingsKeys, const PacketDemodSettings& settings, bool force = false); private slots: void handleInputMessages(); diff --git a/plugins/channelrx/demodpacket/packetdemodgui.cpp b/plugins/channelrx/demodpacket/packetdemodgui.cpp index 7d6608c5a..5764828ba 100644 --- a/plugins/channelrx/demodpacket/packetdemodgui.cpp +++ b/plugins/channelrx/demodpacket/packetdemodgui.cpp @@ -120,7 +120,7 @@ void PacketDemodGUI::resetToDefaults() { m_settings.resetToDefaults(); displaySettings(); - applySettings(true); + applySettings(QStringList(), true); } QByteArray PacketDemodGUI::serialize() const @@ -132,7 +132,7 @@ bool PacketDemodGUI::deserialize(const QByteArray& data) { if(m_settings.deserialize(data)) { displaySettings(); - applySettings(true); + applySettings(QStringList(), true); return true; } else { resetToDefaults(); @@ -242,7 +242,7 @@ void PacketDemodGUI::channelMarkerChangedByCursor() { ui->deltaFrequency->setValue(m_channelMarker.getCenterFrequency()); m_settings.m_inputFrequencyOffset = m_channelMarker.getCenterFrequency(); - applySettings(); + applySettings(QStringList({"inputFrequencyOffset"})); } void PacketDemodGUI::channelMarkerHighlightedByCursor() @@ -255,7 +255,7 @@ void PacketDemodGUI::on_deltaFrequency_changed(qint64 value) m_channelMarker.setCenterFrequency(value); m_settings.m_inputFrequencyOffset = m_channelMarker.getCenterFrequency(); updateAbsoluteCenterFrequency(); - applySettings(); + applySettings(QStringList({"inputFrequencyOffset"})); } void PacketDemodGUI::on_mode_currentIndexChanged(int value) @@ -271,35 +271,35 @@ void PacketDemodGUI::on_rfBW_valueChanged(int value) ui->rfBWText->setText(QString("%1k").arg(value / 10.0, 0, 'f', 1)); m_channelMarker.setBandwidth(bw); m_settings.m_rfBandwidth = bw; - applySettings(); + applySettings(QStringList({"rfBandwidth"})); } void PacketDemodGUI::on_fmDev_valueChanged(int value) { ui->fmDevText->setText(QString("%1k").arg(value / 10.0, 0, 'f', 1)); m_settings.m_fmDeviation = value * 100.0; - applySettings(); + applySettings(QStringList({"fmDeviation"})); } void PacketDemodGUI::on_filterFrom_editingFinished() { m_settings.m_filterFrom = ui->filterFrom->text(); filter(); - applySettings(); + applySettings(QStringList({"filterFrom"})); } void PacketDemodGUI::on_filterTo_editingFinished() { m_settings.m_filterTo = ui->filterTo->text(); filter(); - applySettings(); + applySettings(QStringList({"filterTo"})); } void PacketDemodGUI::on_filterPID_stateChanged(int state) { m_settings.m_filterPID = state==Qt::Checked ? "f0" : ""; filter(); - applySettings(); + applySettings(QStringList({"filterPID"})); } void PacketDemodGUI::on_clearTable_clicked() @@ -310,19 +310,19 @@ void PacketDemodGUI::on_clearTable_clicked() void PacketDemodGUI::on_udpEnabled_clicked(bool checked) { m_settings.m_udpEnabled = checked; - applySettings(); + applySettings(QStringList({"udpEnabled"})); } void PacketDemodGUI::on_udpAddress_editingFinished() { m_settings.m_udpAddress = ui->udpAddress->text(); - applySettings(); + applySettings(QStringList({"udpAddress"})); } void PacketDemodGUI::on_udpPort_editingFinished() { m_settings.m_udpPort = ui->udpPort->text().toInt(); - applySettings(); + applySettings(QStringList({"udpPort"})); } void PacketDemodGUI::filterRow(int row) @@ -367,7 +367,7 @@ void PacketDemodGUI::onWidgetRolled(QWidget* widget, bool rollDown) (void) rollDown; getRollupContents()->saveState(m_rollupState); - applySettings(); + applySettings(QStringList()); } void PacketDemodGUI::onMenuDialogCalled(const QPoint &p) @@ -412,7 +412,16 @@ void PacketDemodGUI::onMenuDialogCalled(const QPoint &p) updateIndexLabel(); } - applySettings(); + applySettings(QStringList({ + "rgbColor", + "title", + "useReverseAPI", + "reverseAPIAddress", + "reverseAPIPort", + "reverseAPIDeviceIndex", + "reverseAPIChannelIndex", + "streamIndex" + })); } resetContextMenuType(); @@ -486,7 +495,7 @@ PacketDemodGUI::PacketDemodGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, B displaySettings(); makeUIConnections(); - applySettings(true); + applySettings(QStringList(), true); m_resizer.enableChildMouseTracking(); } @@ -500,11 +509,11 @@ void PacketDemodGUI::blockApplySettings(bool block) m_doApplySettings = !block; } -void PacketDemodGUI::applySettings(bool force) +void PacketDemodGUI::applySettings(const QStringList& settingsKeys, bool force) { if (m_doApplySettings) { - PacketDemod::MsgConfigurePacketDemod* message = PacketDemod::MsgConfigurePacketDemod::create( m_settings, force); + PacketDemod::MsgConfigurePacketDemod* message = PacketDemod::MsgConfigurePacketDemod::create(settingsKeys, m_settings, force); m_packetDemod->getInputMessageQueue()->push(message); } } @@ -601,7 +610,7 @@ void PacketDemodGUI::tick() void PacketDemodGUI::on_logEnable_clicked(bool checked) { m_settings.m_logEnabled = checked; - applySettings(); + applySettings(QStringList({"logEnabled"})); } void PacketDemodGUI::on_logFilename_clicked() @@ -617,7 +626,7 @@ void PacketDemodGUI::on_logFilename_clicked() { m_settings.m_logFilename = fileNames[0]; ui->logFilename->setToolTip(QString(".csv log filename: %1").arg(m_settings.m_logFilename)); - applySettings(); + applySettings(QStringList({"logFilename"})); } } } @@ -689,7 +698,7 @@ void PacketDemodGUI::on_logOpen_clicked() void PacketDemodGUI::on_useFileTime_toggled(bool checked) { m_settings.m_useFileTime = checked; - applySettings(); + applySettings(QStringList({"useFileTime"})); } void PacketDemodGUI::makeUIConnections() diff --git a/plugins/channelrx/demodpacket/packetdemodgui.h b/plugins/channelrx/demodpacket/packetdemodgui.h index 58c74b3e6..df58eab41 100644 --- a/plugins/channelrx/demodpacket/packetdemodgui.h +++ b/plugins/channelrx/demodpacket/packetdemodgui.h @@ -94,7 +94,7 @@ private: virtual ~PacketDemodGUI(); void blockApplySettings(bool block); - void applySettings(bool force = false); + void applySettings(const QStringList& settingsKeys, bool force = false); void displaySettings(); void packetReceived(const QByteArray& packet, QDateTime dateTime); bool handleMessage(const Message& message); diff --git a/plugins/channelrx/demodpacket/packetdemodsettings.cpp b/plugins/channelrx/demodpacket/packetdemodsettings.cpp index 1705a7541..9a5476b9e 100644 --- a/plugins/channelrx/demodpacket/packetdemodsettings.cpp +++ b/plugins/channelrx/demodpacket/packetdemodsettings.cpp @@ -206,8 +206,170 @@ bool PacketDemodSettings::deserialize(const QByteArray& data) } } +void PacketDemodSettings::applySettings(const QStringList& settingsKeys, const PacketDemodSettings& settings) +{ + if (settingsKeys.contains("inputFrequencyOffset")) { + m_inputFrequencyOffset = settings.m_inputFrequencyOffset; + } + if (settingsKeys.contains("mode")) { + m_mode = settings.m_mode; + } + if (settingsKeys.contains("rfBandwidth")) { + m_rfBandwidth = settings.m_rfBandwidth; + } + if (settingsKeys.contains("fmDeviation")) { + m_fmDeviation = settings.m_fmDeviation; + } + if (settingsKeys.contains("filterFrom")) { + m_filterFrom = settings.m_filterFrom; + } + if (settingsKeys.contains("filterTo")) { + m_filterTo = settings.m_filterTo; + } + if (settingsKeys.contains("filterPID")) { + m_filterPID = settings.m_filterPID; + } + if (settingsKeys.contains("udpEnabled")) { + m_udpEnabled = settings.m_udpEnabled; + } + if (settingsKeys.contains("udpAddress")) { + m_udpAddress = settings.m_udpAddress; + } + if (settingsKeys.contains("udpPort")) { + m_udpPort = settings.m_udpPort; + } + if (settingsKeys.contains("useFileTime")) { + m_useFileTime = settings.m_useFileTime; + } + if (settingsKeys.contains("rgbColor")) { + m_rgbColor = settings.m_rgbColor; + } + if (settingsKeys.contains("title")) { + m_title = settings.m_title; + } + if (settingsKeys.contains("streamIndex")) { + m_streamIndex = settings.m_streamIndex; + } + if (settingsKeys.contains("useReverseAPI")) { + m_useReverseAPI = settings.m_useReverseAPI; + } + if (settingsKeys.contains("reverseAPIAddress")) { + m_reverseAPIAddress = settings.m_reverseAPIAddress; + } + if (settingsKeys.contains("reverseAPIPort")) { + m_reverseAPIPort = settings.m_reverseAPIPort; + } + if (settingsKeys.contains("reverseAPIDeviceIndex")) { + m_reverseAPIDeviceIndex = settings.m_reverseAPIDeviceIndex; + } + if (settingsKeys.contains("reverseAPIChannelIndex")) { + m_reverseAPIChannelIndex = settings.m_reverseAPIChannelIndex; + } + if (settingsKeys.contains("logFilename")) { + m_logFilename = settings.m_logFilename; + } + if (settingsKeys.contains("logEnabled")) { + m_logEnabled = settings.m_logEnabled; + } + if (settingsKeys.contains("workspaceIndex")) { + m_workspaceIndex = settings.m_workspaceIndex; + } + if (settingsKeys.contains("geometryBytes")) { + m_geometryBytes = settings.m_geometryBytes; + } + if (settingsKeys.contains("hidden")) { + m_hidden = settings.m_hidden; + } + if (settingsKeys.contains("columnIndexes")) { + for (int i = 0; i < PACKETDEMOD_COLUMNS; i++) { + m_columnIndexes[i] = settings.m_columnIndexes[i]; + } + } + if (settingsKeys.contains("columnSizes")) { + for (int i = 0; i < PACKETDEMOD_COLUMNS; i++) { + m_columnSizes[i] = settings.m_columnSizes[i]; + } + } +} + +QString PacketDemodSettings::getDebugString(const QStringList& settingsKeys, bool force) const +{ + std::ostringstream ostr; + + if (settingsKeys.contains("inputFrequencyOffset") || force) { + ostr << " m_inputFrequencyOffset: " << m_inputFrequencyOffset; + } + if (settingsKeys.contains("mode") || force) { + ostr << " m_mode: " << m_mode; + } + if (settingsKeys.contains("rfBandwidth") || force) { + ostr << " m_rfBandwidth: " << m_rfBandwidth; + } + if (settingsKeys.contains("fmDeviation") || force) { + ostr << " m_fmDeviation: " << m_fmDeviation; + } + if (settingsKeys.contains("filterFrom") || force) { + ostr << " m_filterFrom: " << m_filterFrom.toStdString(); + } + if (settingsKeys.contains("filterTo") || force) { + ostr << " m_filterTo: " << m_filterTo.toStdString(); + } + if (settingsKeys.contains("filterPID") || force) { + ostr << " m_filterPID: " << m_filterPID.toStdString(); + } + if (settingsKeys.contains("udpEnabled") || force) { + ostr << " m_udpEnabled: " << m_udpEnabled; + } + if (settingsKeys.contains("udpAddress") || force) { + ostr << " m_udpAddress: " << m_udpAddress.toStdString(); + } + if (settingsKeys.contains("udpPort") || force) { + ostr << " m_udpPort: " << m_udpPort; + } + if (settingsKeys.contains("useFileTime") || force) { + ostr << " m_useFileTime: " << m_useFileTime; + } + if (settingsKeys.contains("rgbColor") || force) { + ostr << " m_rgbColor: " << m_rgbColor; + } + if (settingsKeys.contains("title") || force) { + ostr << " m_title: " << m_title.toStdString(); + } + if (settingsKeys.contains("streamIndex") || force) { + ostr << " m_streamIndex: " << m_streamIndex; + } + if (settingsKeys.contains("useReverseAPI") || force) { + ostr << " m_useReverseAPI: " << m_useReverseAPI; + } + if (settingsKeys.contains("reverseAPIAddress") || force) { + ostr << " m_reverseAPIAddress: " << m_reverseAPIAddress.toStdString(); + } + if (settingsKeys.contains("reverseAPIPort") || force) { + ostr << " m_reverseAPIPort: " << m_reverseAPIPort; + } + if (settingsKeys.contains("reverseAPIDeviceIndex") || force) { + ostr << " m_reverseAPIDeviceIndex: " << m_reverseAPIDeviceIndex; + } + if (settingsKeys.contains("reverseAPIChannelIndex") || force) { + ostr << " m_reverseAPIChannelIndex: " << m_reverseAPIChannelIndex; + } + if (settingsKeys.contains("logFilename") || force) { + ostr << " m_logFilename: " << m_logFilename.toStdString(); + } + if (settingsKeys.contains("logEnabled") || force) { + ostr << " m_logEnabled: " << m_logEnabled; + } + if (settingsKeys.contains("workspaceIndex") || force) { + ostr << " m_workspaceIndex: " << m_workspaceIndex; + } + if (settingsKeys.contains("hidden") || force) { + ostr << " m_hidden: " << m_hidden; + } + + return QString(ostr.str().c_str()); +} + int PacketDemodSettings::getBaudRate() const { return 1200; } - diff --git a/plugins/channelrx/demodpacket/packetdemodsettings.h b/plugins/channelrx/demodpacket/packetdemodsettings.h index a5eef7f7a..95718c168 100644 --- a/plugins/channelrx/demodpacket/packetdemodsettings.h +++ b/plugins/channelrx/demodpacket/packetdemodsettings.h @@ -77,6 +77,8 @@ struct PacketDemodSettings void setRollupState(Serializable *rollupState) { m_rollupState = rollupState; } QByteArray serialize() const; bool deserialize(const QByteArray& data); + void applySettings(const QStringList& settingsKeys, const PacketDemodSettings& settings); + QString getDebugString(const QStringList& settingsKeys, bool force=false) const; int getBaudRate() const; }; diff --git a/plugins/channelrx/demodpacket/packetdemodsink.cpp b/plugins/channelrx/demodpacket/packetdemodsink.cpp index 7aab705c9..1c94d9d01 100644 --- a/plugins/channelrx/demodpacket/packetdemodsink.cpp +++ b/plugins/channelrx/demodpacket/packetdemodsink.cpp @@ -47,7 +47,7 @@ PacketDemodSink::PacketDemodSink(PacketDemod *packetDemod) : m_demodBuffer.resize(1<<12); m_demodBufferFill = 0; - applySettings(m_settings, true); + applySettings(QStringList(), m_settings, true); applyChannelSettings(m_channelSampleRate, m_channelFrequencyOffset, true); } @@ -305,18 +305,17 @@ void PacketDemodSink::applyChannelSettings(int channelSampleRate, int channelFre m_channelFrequencyOffset = channelFrequencyOffset; } -void PacketDemodSink::applySettings(const PacketDemodSettings& settings, bool force) +void PacketDemodSink::applySettings(const QStringList& settingsKeys, const PacketDemodSettings& settings, bool force) { - qDebug() << "PacketDemodSink::applySettings:" - << " force: " << force; + qDebug() << "PacketDemodSink::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) PacketDemodSettings::PACKETDEMOD_CHANNEL_SAMPLE_RATE; m_interpolatorDistanceRemain = m_interpolatorDistance; } - if ((settings.m_fmDeviation != m_settings.m_fmDeviation) || force) + if ((settingsKeys.contains("fmDeviation") && (settings.m_fmDeviation != m_settings.m_fmDeviation)) || force) { m_phaseDiscri.setFMScaling(PacketDemodSettings::PACKETDEMOD_CHANNEL_SAMPLE_RATE / (2.0f * settings.m_fmDeviation)); } @@ -352,7 +351,11 @@ void PacketDemodSink::applySettings(const PacketDemodSettings& settings, bool fo m_onesCount = 0; m_gotSOP = false; m_byteCount = 0; + m_settings = settings; + } + else + { + m_settings.applySettings(settingsKeys, settings); } - m_settings = settings; } diff --git a/plugins/channelrx/demodpacket/packetdemodsink.h b/plugins/channelrx/demodpacket/packetdemodsink.h index 561f9bd6c..2b691a58e 100644 --- a/plugins/channelrx/demodpacket/packetdemodsink.h +++ b/plugins/channelrx/demodpacket/packetdemodsink.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 = false); - void applySettings(const PacketDemodSettings& settings, bool force = false); + void applySettings(const QStringList& settingsKeys, const PacketDemodSettings& settings, bool force = false); void setMessageQueueToChannel(MessageQueue *messageQueue) { m_messageQueueToChannel = messageQueue; } void setChannel(ChannelAPI *channel) { m_channel = channel; } diff --git a/plugins/channelrx/demodpager/pagerdemod.cpp b/plugins/channelrx/demodpager/pagerdemod.cpp index e37555b86..43496dfbb 100644 --- a/plugins/channelrx/demodpager/pagerdemod.cpp +++ b/plugins/channelrx/demodpager/pagerdemod.cpp @@ -52,7 +52,7 @@ PagerDemod::PagerDemod(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); @@ -126,7 +126,7 @@ void PagerDemod::start() DSPSignalNotification *dspMsg = new DSPSignalNotification(m_basebandSampleRate, m_centerFrequency); m_basebandSink->getInputMessageQueue()->push(dspMsg); - PagerDemodBaseband::MsgConfigurePagerDemodBaseband *msg = PagerDemodBaseband::MsgConfigurePagerDemodBaseband::create(m_settings, true); + PagerDemodBaseband::MsgConfigurePagerDemodBaseband *msg = PagerDemodBaseband::MsgConfigurePagerDemodBaseband::create(QStringList(), m_settings, true); m_basebandSink->getInputMessageQueue()->push(msg); } @@ -144,7 +144,7 @@ bool PagerDemod::handleMessage(const Message& cmd) { const MsgConfigurePagerDemod& cfg = (const MsgConfigurePagerDemod&) cmd; qDebug() << "PagerDemod::handleMessage: MsgConfigurePagerDemod"; - applySettings(cfg.getSettings(), cfg.getForce()); + applySettings(cfg.getSettingsKeys(), cfg.getSettings(), cfg.getForce()); return true; } @@ -232,64 +232,20 @@ void PagerDemod::setCenterFrequency(qint64 frequency) { PagerDemodSettings settings = m_settings; settings.m_inputFrequencyOffset = frequency; - applySettings(settings, false); + applySettings(QStringList("inputFrequencyOffset"), settings, false); if (m_guiMessageQueue) // forward to GUI if any { - MsgConfigurePagerDemod *msgToGUI = MsgConfigurePagerDemod::create(settings, false); + MsgConfigurePagerDemod *msgToGUI = MsgConfigurePagerDemod::create(QStringList("inputFrequencyOffset"), settings, false); m_guiMessageQueue->push(msgToGUI); } } -void PagerDemod::applySettings(const PagerDemodSettings& settings, bool force) +void PagerDemod::applySettings(const QStringList& settingsKeys, const PagerDemodSettings& settings, bool force) { - qDebug() << "PagerDemod::applySettings:" - << " m_logEnabled: " << settings.m_logEnabled - << " m_logFilename: " << settings.m_logFilename - << " 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() << "PagerDemod::applySettings:" << settings.getDebugString(settingsKeys, force); - QList reverseAPIKeys; - - if ((settings.m_baud != m_settings.m_baud) || force) { - reverseAPIKeys.append("baud"); - } - if ((settings.m_decode != m_settings.m_decode) || force) { - reverseAPIKeys.append("decode"); - } - if ((settings.m_reverse != m_settings.m_reverse) || force) { - reverseAPIKeys.append("reverse"); - } - if ((settings.m_inputFrequencyOffset != m_settings.m_inputFrequencyOffset) || force) { - reverseAPIKeys.append("inputFrequencyOffset"); - } - 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_udpEnabled != m_settings.m_udpEnabled) || force) { - reverseAPIKeys.append("udpEnabled"); - } - 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_logFilename != m_settings.m_logFilename) || force) { - reverseAPIKeys.append("logFilename"); - } - if ((settings.m_logEnabled != m_settings.m_logEnabled) || force) { - reverseAPIKeys.append("logEnabled"); - } - 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 { @@ -300,25 +256,23 @@ void PagerDemod::applySettings(const PagerDemodSettings& settings, bool force) m_settings.m_streamIndex = settings.m_streamIndex; // make sure ChannelAPI::getStreamIndex() is consistent emit streamIndexChanged(settings.m_streamIndex); } - - reverseAPIKeys.append("streamIndex"); } - PagerDemodBaseband::MsgConfigurePagerDemodBaseband *msg = PagerDemodBaseband::MsgConfigurePagerDemodBaseband::create(settings, force); + PagerDemodBaseband::MsgConfigurePagerDemodBaseband *msg = PagerDemodBaseband::MsgConfigurePagerDemodBaseband::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); } - if ((settings.m_logEnabled != m_settings.m_logEnabled) - || (settings.m_logFilename != m_settings.m_logFilename) + if ((settingsKeys.contains("logEnabled") && (settings.m_logEnabled != m_settings.m_logEnabled)) + || (settingsKeys.contains("logFilename") && (settings.m_logFilename != m_settings.m_logFilename)) || force) { if (m_logFile.isOpen()) @@ -347,7 +301,11 @@ void PagerDemod::applySettings(const PagerDemodSettings& settings, bool force) } } - m_settings = settings; + if (force) { + m_settings = settings; + } else { + m_settings.applySettings(settingsKeys, settings); + } } QByteArray PagerDemod::serialize() const @@ -359,14 +317,14 @@ bool PagerDemod::deserialize(const QByteArray& data) { if (m_settings.deserialize(data)) { - MsgConfigurePagerDemod *msg = MsgConfigurePagerDemod::create(m_settings, true); + MsgConfigurePagerDemod *msg = MsgConfigurePagerDemod::create(QStringList(), m_settings, true); m_inputMessageQueue.push(msg); return true; } else { m_settings.resetToDefaults(); - MsgConfigurePagerDemod *msg = MsgConfigurePagerDemod::create(m_settings, true); + MsgConfigurePagerDemod *msg = MsgConfigurePagerDemod::create(QStringList(), m_settings, true); m_inputMessageQueue.push(msg); return false; } @@ -421,13 +379,13 @@ int PagerDemod::webapiSettingsPutPatch( PagerDemodSettings settings = m_settings; webapiUpdateChannelSettings(settings, channelSettingsKeys, response); - MsgConfigurePagerDemod *msg = MsgConfigurePagerDemod::create(settings, force); + MsgConfigurePagerDemod *msg = MsgConfigurePagerDemod::create(channelSettingsKeys, settings, force); m_inputMessageQueue.push(msg); qDebug("PagerDemod::webapiSettingsPutPatch: forward to GUI: %p", m_guiMessageQueue); if (m_guiMessageQueue) // forward to GUI if any { - MsgConfigurePagerDemod *msgToGUI = MsgConfigurePagerDemod::create(settings, force); + MsgConfigurePagerDemod *msgToGUI = MsgConfigurePagerDemod::create(channelSettingsKeys, settings, force); m_guiMessageQueue->push(msgToGUI); } @@ -607,7 +565,7 @@ void PagerDemod::webapiFormatChannelReport(SWGSDRangel::SWGChannelReport& respon response.getPagerDemodReport()->setChannelSampleRate(m_basebandSink->getChannelSampleRate()); } -void PagerDemod::webapiReverseSendSettings(QList& channelSettingsKeys, const PagerDemodSettings& settings, bool force) +void PagerDemod::webapiReverseSendSettings(const QList& channelSettingsKeys, const PagerDemodSettings& settings, bool force) { SWGSDRangel::SWGChannelSettings *swgChannelSettings = new SWGSDRangel::SWGChannelSettings(); webapiFormatChannelSettings(channelSettingsKeys, swgChannelSettings, settings, force); @@ -633,7 +591,7 @@ void PagerDemod::webapiReverseSendSettings(QList& channelSettingsKeys, } void PagerDemod::webapiFormatChannelSettings( - QList& channelSettingsKeys, + const QList& channelSettingsKeys, SWGSDRangel::SWGChannelSettings *swgChannelSettings, const PagerDemodSettings& settings, bool force diff --git a/plugins/channelrx/demodpager/pagerdemod.h b/plugins/channelrx/demodpager/pagerdemod.h index c59bddbb3..9e005bf06 100644 --- a/plugins/channelrx/demodpager/pagerdemod.h +++ b/plugins/channelrx/demodpager/pagerdemod.h @@ -52,19 +52,22 @@ public: public: const PagerDemodSettings& getSettings() const { return m_settings; } + const QStringList& getSettingsKeys() const { return m_settingsKeys; } bool getForce() const { return m_force; } - static MsgConfigurePagerDemod* create(const PagerDemodSettings& settings, bool force) { - return new MsgConfigurePagerDemod(settings, force); + static MsgConfigurePagerDemod* create(const QStringList& settingsKeys, const PagerDemodSettings& settings, bool force) { + return new MsgConfigurePagerDemod(settingsKeys, settings, force); } private: PagerDemodSettings m_settings; + QStringList m_settingsKeys; bool m_force; - MsgConfigurePagerDemod(const PagerDemodSettings& settings, bool force) : + MsgConfigurePagerDemod(const QStringList& settingsKeys, const PagerDemodSettings& settings, bool force) : Message(), m_settings(settings), + m_settingsKeys(settingsKeys), m_force(force) { } }; @@ -211,11 +214,11 @@ private: QNetworkRequest m_networkRequest; virtual bool handleMessage(const Message& cmd); - void applySettings(const PagerDemodSettings& settings, bool force = false); + void applySettings(const QStringList& settingsKeys, const PagerDemodSettings& settings, bool force = false); void sendSampleRateToDemodAnalyzer(); - void webapiReverseSendSettings(QList& channelSettingsKeys, const PagerDemodSettings& settings, bool force); + void webapiReverseSendSettings(const QList& channelSettingsKeys, const PagerDemodSettings& settings, bool force); void webapiFormatChannelSettings( - QList& channelSettingsKeys, + const QList& channelSettingsKeys, SWGSDRangel::SWGChannelSettings *swgChannelSettings, const PagerDemodSettings& settings, bool force diff --git a/plugins/channelrx/demodpager/pagerdemodbaseband.cpp b/plugins/channelrx/demodpager/pagerdemodbaseband.cpp index e6b870d6e..4066a75dd 100644 --- a/plugins/channelrx/demodpager/pagerdemodbaseband.cpp +++ b/plugins/channelrx/demodpager/pagerdemodbaseband.cpp @@ -134,7 +134,7 @@ bool PagerDemodBaseband::handleMessage(const Message& cmd) const MsgConfigurePagerDemodBaseband& cfg = (const MsgConfigurePagerDemodBaseband&) cmd; qDebug() << "PagerDemodBaseband::handleMessage: MsgConfigurePagerDemodBaseband"; - applySettings(cfg.getSettings(), cfg.getForce()); + applySettings(cfg.getSettingsKeys(), cfg.getSettings(), cfg.getForce()); return true; } @@ -154,17 +154,21 @@ bool PagerDemodBaseband::handleMessage(const Message& cmd) } } -void PagerDemodBaseband::applySettings(const PagerDemodSettings& settings, bool force) +void PagerDemodBaseband::applySettings(const QStringList& settingsKeys, const PagerDemodSettings& 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(PagerDemodSettings::m_channelSampleRate, 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); + } } int PagerDemodBaseband::getChannelSampleRate() const diff --git a/plugins/channelrx/demodpager/pagerdemodbaseband.h b/plugins/channelrx/demodpager/pagerdemodbaseband.h index 3c8a66735..8130874fc 100644 --- a/plugins/channelrx/demodpager/pagerdemodbaseband.h +++ b/plugins/channelrx/demodpager/pagerdemodbaseband.h @@ -44,20 +44,23 @@ public: public: const PagerDemodSettings& getSettings() const { return m_settings; } + const QStringList& getSettingsKeys() const { return m_settingsKeys; } bool getForce() const { return m_force; } - static MsgConfigurePagerDemodBaseband* create(const PagerDemodSettings& settings, bool force) + static MsgConfigurePagerDemodBaseband* create(const QStringList& settingsKeys, const PagerDemodSettings& settings, bool force) { - return new MsgConfigurePagerDemodBaseband(settings, force); + return new MsgConfigurePagerDemodBaseband(settingsKeys, settings, force); } private: PagerDemodSettings m_settings; + QStringList m_settingsKeys; bool m_force; - MsgConfigurePagerDemodBaseband(const PagerDemodSettings& settings, bool force) : + MsgConfigurePagerDemodBaseband(const QStringList& settingsKeys, const PagerDemodSettings& settings, bool force) : Message(), m_settings(settings), + m_settingsKeys(settingsKeys), m_force(force) { } }; @@ -93,7 +96,7 @@ private: bool handleMessage(const Message& cmd); void calculateOffset(PagerDemodSink *sink); - void applySettings(const PagerDemodSettings& settings, bool force = false); + void applySettings(const QStringList& settingsKeys, const PagerDemodSettings& settings, bool force = false); private slots: void handleInputMessages(); diff --git a/plugins/channelrx/demodpager/pagerdemodgui.cpp b/plugins/channelrx/demodpager/pagerdemodgui.cpp index c0a27b9d3..6829de94f 100644 --- a/plugins/channelrx/demodpager/pagerdemodgui.cpp +++ b/plugins/channelrx/demodpager/pagerdemodgui.cpp @@ -129,7 +129,7 @@ void PagerDemodGUI::resetToDefaults() { m_settings.resetToDefaults(); displaySettings(); - applySettings(true); + applySettings(QStringList(), true); } QByteArray PagerDemodGUI::serialize() const @@ -141,7 +141,7 @@ bool PagerDemodGUI::deserialize(const QByteArray& data) { if(m_settings.deserialize(data)) { displaySettings(); - applySettings(true); + applySettings(QStringList(), true); return true; } else { resetToDefaults(); @@ -341,7 +341,7 @@ void PagerDemodGUI::channelMarkerChangedByCursor() { ui->deltaFrequency->setValue(m_channelMarker.getCenterFrequency()); m_settings.m_inputFrequencyOffset = m_channelMarker.getCenterFrequency(); - applySettings(); + applySettings(QStringList("inputFrequencyOffset")); } void PagerDemodGUI::channelMarkerHighlightedByCursor() @@ -354,7 +354,7 @@ void PagerDemodGUI::on_deltaFrequency_changed(qint64 value) m_channelMarker.setCenterFrequency(value); m_settings.m_inputFrequencyOffset = m_channelMarker.getCenterFrequency(); updateAbsoluteCenterFrequency(); - applySettings(); + applySettings(QStringList("inputFrequencyOffset")); } void PagerDemodGUI::on_rfBW_valueChanged(int value) @@ -363,34 +363,34 @@ void PagerDemodGUI::on_rfBW_valueChanged(int value) ui->rfBWText->setText(QString("%1k").arg(value / 10.0, 0, 'f', 1)); m_channelMarker.setBandwidth(bw); m_settings.m_rfBandwidth = bw; - applySettings(); + applySettings(QStringList("rfBandwidth")); } void PagerDemodGUI::on_fmDev_valueChanged(int value) { ui->fmDevText->setText(QString("%1k").arg(value / 10.0, 0, 'f', 1)); m_settings.m_fmDeviation = value * 100.0; - applySettings(); + applySettings(QStringList("fmDeviation")); } void PagerDemodGUI::on_baud_currentIndexChanged(int index) { (void)index; m_settings.m_baud = ui->baud->currentText().toInt(); - applySettings(); + applySettings(QStringList("baud")); } void PagerDemodGUI::on_decode_currentIndexChanged(int index) { m_settings.m_decode = (PagerDemodSettings::Decode)index; - applySettings(); + applySettings(QStringList("decode")); } void PagerDemodGUI::on_filterAddress_editingFinished() { m_settings.m_filterAddress = ui->filterAddress->text(); filter(); - applySettings(); + applySettings(QStringList("filterAddress")); } void PagerDemodGUI::on_clearTable_clicked() @@ -401,31 +401,31 @@ void PagerDemodGUI::on_clearTable_clicked() void PagerDemodGUI::on_udpEnabled_clicked(bool checked) { m_settings.m_udpEnabled = checked; - applySettings(); + applySettings(QStringList("udpEnabled")); } void PagerDemodGUI::on_udpAddress_editingFinished() { m_settings.m_udpAddress = ui->udpAddress->text(); - applySettings(); + applySettings(QStringList("udpAddress")); } void PagerDemodGUI::on_udpPort_editingFinished() { m_settings.m_udpPort = ui->udpPort->text().toInt(); - applySettings(); + applySettings(QStringList("udpPort")); } void PagerDemodGUI::on_channel1_currentIndexChanged(int index) { m_settings.m_scopeCh1 = index; - applySettings(); + applySettings(QStringList("scopeCh1")); } void PagerDemodGUI::on_channel2_currentIndexChanged(int index) { m_settings.m_scopeCh2 = index; - applySettings(); + applySettings(QStringList("scopeCh2")); } void PagerDemodGUI::filterRow(int row) @@ -455,7 +455,7 @@ void PagerDemodGUI::onWidgetRolled(QWidget* widget, bool rollDown) (void) rollDown; getRollupContents()->saveState(m_rollupState); - applySettings(); + applySettings(QStringList()); } void PagerDemodGUI::onMenuDialogCalled(const QPoint &p) @@ -500,7 +500,8 @@ void PagerDemodGUI::onMenuDialogCalled(const QPoint &p) updateIndexLabel(); } - applySettings(); + applySettings(QStringList({"title", "rgbColor", "useReverseAPI", "reverseAPIAddress", + "reverseAPIPort", "reverseAPIDeviceIndex", "reverseAPIChannelIndex", "streamIndex"})); } resetContextMenuType(); @@ -515,8 +516,10 @@ PagerDemodGUI::PagerDemodGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Bas m_deviceCenterFrequency(0), m_basebandSampleRate(1), m_doApplySettings(true), - m_tickCount(0), - m_speech(nullptr) + m_tickCount(0) +#ifdef QT_TEXTTOSPEECH_FOUND + , m_speech(nullptr) +#endif { setAttribute(Qt::WA_DeleteOnClose, true); m_helpURL = "plugins/channelrx/demodpager/readme.md"; @@ -591,7 +594,7 @@ PagerDemodGUI::PagerDemodGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Bas displaySettings(); makeUIConnections(); - applySettings(true); + applySettings(QStringList(), true); m_resizer.enableChildMouseTracking(); } @@ -624,11 +627,11 @@ void PagerDemodGUI::blockApplySettings(bool block) m_doApplySettings = !block; } -void PagerDemodGUI::applySettings(bool force) +void PagerDemodGUI::applySettings(const QStringList& settingsKeys, bool force) { if (m_doApplySettings) { - PagerDemod::MsgConfigurePagerDemod* message = PagerDemod::MsgConfigurePagerDemod::create( m_settings, force); + PagerDemod::MsgConfigurePagerDemod* message = PagerDemod::MsgConfigurePagerDemod::create(settingsKeys, m_settings, force); m_pagerDemod->getInputMessageQueue()->push(message); } } @@ -738,8 +741,9 @@ void PagerDemodGUI::on_charset_clicked() { PagerDemodCharsetDialog dialog(&m_settings); new DialogPositioner(&dialog, true); + if (dialog.exec() == QDialog::Accepted) { - applySettings(); + applySettings(QStringList({"sevenbit", "unicode", "reverse"})); } } @@ -747,17 +751,18 @@ void PagerDemodGUI::on_notifications_clicked() { PagerDemodNotificationDialog dialog(&m_settings); new DialogPositioner(&dialog, true); + if (dialog.exec() == QDialog::Accepted) { enableSpeechIfNeeded(); - applySettings(); + applySettings(QStringList({"notificationSettings"})); } } void PagerDemodGUI::on_filterDuplicates_clicked(bool checked) { m_settings.m_filterDuplicates = checked; - applySettings(); + applySettings(QStringList({"filterDuplicates"})); } void PagerDemodGUI::on_filterDuplicates_rightClicked(const QPoint &p) @@ -766,15 +771,16 @@ void PagerDemodGUI::on_filterDuplicates_rightClicked(const QPoint &p) PagerDemodFilterDialog dialog(&m_settings); new DialogPositioner(&dialog, true); + if (dialog.exec() == QDialog::Accepted) { - applySettings(); + applySettings(QStringList({"duplicateMatchLastOnly", "duplicateMatchMessageOnly"})); } } void PagerDemodGUI::on_logEnable_clicked(bool checked) { m_settings.m_logEnabled = checked; - applySettings(); + applySettings(QStringList({"logEnabled"})); } void PagerDemodGUI::on_logFilename_clicked() @@ -790,7 +796,7 @@ void PagerDemodGUI::on_logFilename_clicked() { m_settings.m_logFilename = fileNames[0]; ui->logFilename->setToolTip(QString(".csv log filename: %1").arg(m_settings.m_logFilename)); - applySettings(); + applySettings(QStringList({"logFilename"})); } } } diff --git a/plugins/channelrx/demodpager/pagerdemodgui.h b/plugins/channelrx/demodpager/pagerdemodgui.h index 346f9fcae..39aab0142 100644 --- a/plugins/channelrx/demodpager/pagerdemodgui.h +++ b/plugins/channelrx/demodpager/pagerdemodgui.h @@ -97,7 +97,7 @@ private: virtual ~PagerDemodGUI(); void blockApplySettings(bool block); - void applySettings(bool force = false); + void applySettings(const QStringList& settingsKeys, bool force = false); void displaySettings(); QString selectMessage(int functionBits, const QString &numericMessage, const QString &alphaMessage) const; void messageReceived(const QDateTime dateTime, int address, int functionBits, diff --git a/plugins/channelrx/demodpager/pagerdemodsettings.cpp b/plugins/channelrx/demodpager/pagerdemodsettings.cpp index e329a56b8..53b112ea9 100644 --- a/plugins/channelrx/demodpager/pagerdemodsettings.cpp +++ b/plugins/channelrx/demodpager/pagerdemodsettings.cpp @@ -237,6 +237,202 @@ bool PagerDemodSettings::deserialize(const QByteArray& data) } } +void PagerDemodSettings::applySettings(const QStringList& settingsKeys, const PagerDemodSettings& settings) +{ + if (settingsKeys.contains("baud")) { + m_baud = settings.m_baud; + } + if (settingsKeys.contains("inputFrequencyOffset")) { + m_inputFrequencyOffset = settings.m_inputFrequencyOffset; + } + if (settingsKeys.contains("rfBandwidth")) { + m_rfBandwidth = settings.m_rfBandwidth; + } + if (settingsKeys.contains("fmDeviation")) { + m_fmDeviation = settings.m_fmDeviation; + } + if (settingsKeys.contains("decode")) { + m_decode = settings.m_decode; + } + if (settingsKeys.contains("udpEnabled")) { + m_udpEnabled = settings.m_udpEnabled; + } + if (settingsKeys.contains("udpAddress")) { + m_udpAddress = settings.m_udpAddress; + } + if (settingsKeys.contains("udpPort")) { + m_udpPort = settings.m_udpPort; + } + if (settingsKeys.contains("filterAddress")) { + m_filterAddress = settings.m_filterAddress; + } + if (settingsKeys.contains("scopeCh1")) { + m_scopeCh1 = settings.m_scopeCh1; + } + if (settingsKeys.contains("scopeCh2")) { + m_scopeCh2 = settings.m_scopeCh2; + } + if (settingsKeys.contains("rgbColor")) { + m_rgbColor = settings.m_rgbColor; + } + if (settingsKeys.contains("title")) { + m_title = settings.m_title; + } + if (settingsKeys.contains("streamIndex")) { + m_streamIndex = settings.m_streamIndex; + } + if (settingsKeys.contains("useReverseAPI")) { + m_useReverseAPI = settings.m_useReverseAPI; + } + if (settingsKeys.contains("reverseAPIAddress")) { + m_reverseAPIAddress = settings.m_reverseAPIAddress; + } + if (settingsKeys.contains("reverseAPIPort")) { + m_reverseAPIPort = settings.m_reverseAPIPort; + } + if (settingsKeys.contains("reverseAPIDeviceIndex")) { + m_reverseAPIDeviceIndex = settings.m_reverseAPIDeviceIndex; + } + if (settingsKeys.contains("reverseAPIChannelIndex")) { + m_reverseAPIChannelIndex = settings.m_reverseAPIChannelIndex; + } + if (settingsKeys.contains("reverse")) { + m_reverse = settings.m_reverse; + } + if (settingsKeys.contains("sevenbit")) { + m_sevenbit = settings.m_sevenbit; + } + if (settingsKeys.contains("unicode")) { + m_unicode = settings.m_unicode; + } + if (settingsKeys.contains("logFilename")) { + m_logFilename = settings.m_logFilename; + } + if (settingsKeys.contains("logEnabled")) { + m_logEnabled = settings.m_logEnabled; + } + if (settingsKeys.contains("workspaceIndex")) { + m_workspaceIndex = settings.m_workspaceIndex; + } + if (settingsKeys.contains("geometryBytes")) { + m_geometryBytes = settings.m_geometryBytes; + } + if (settingsKeys.contains("hidden")) { + m_hidden = settings.m_hidden; + } + if (settingsKeys.contains("notificationSettings")) { + m_notificationSettings = settings.m_notificationSettings; + } + if (settingsKeys.contains("filterDuplicates")) { + m_filterDuplicates = settings.m_filterDuplicates; + } + if (settingsKeys.contains("duplicateMatchMessageOnly")) { + m_duplicateMatchMessageOnly = settings.m_duplicateMatchMessageOnly; + } + if (settingsKeys.contains("duplicateMatchLastOnly")) { + m_duplicateMatchLastOnly = settings.m_duplicateMatchLastOnly; + } + if (settingsKeys.contains("messageColumnIndexes")) { + for (int i = 0; i < PAGERDEMOD_MESSAGE_COLUMNS; i++) { + m_messageColumnIndexes[i] = settings.m_messageColumnIndexes[i]; + } + } + if (settingsKeys.contains("messageColumnSizes")) { + for (int i = 0; i < PAGERDEMOD_MESSAGE_COLUMNS; i++) { + m_messageColumnSizes[i] = settings.m_messageColumnSizes[i]; + } + } +} + +QString PagerDemodSettings::getDebugString(const QStringList& settingsKeys, bool force) const +{ + std::ostringstream ostr; + + if (settingsKeys.contains("baud") || force) { + ostr << " m_baud: " << m_baud; + } + if (settingsKeys.contains("inputFrequencyOffset") || force) { + ostr << " m_inputFrequencyOffset: " << m_inputFrequencyOffset; + } + if (settingsKeys.contains("rfBandwidth") || force) { + ostr << " m_rfBandwidth: " << m_rfBandwidth; + } + if (settingsKeys.contains("fmDeviation") || force) { + ostr << " m_fmDeviation: " << m_fmDeviation; + } + if (settingsKeys.contains("decode") || force) { + ostr << " m_decode: " << m_decode; + } + if (settingsKeys.contains("udpEnabled") || force) { + ostr << " m_udpEnabled: " << m_udpEnabled; + } + if (settingsKeys.contains("udpAddress") || force) { + ostr << " m_udpAddress: " << m_udpAddress.toStdString(); + } + if (settingsKeys.contains("udpPort") || force) { + ostr << " m_udpPort: " << m_udpPort; + } + if (settingsKeys.contains("filterAddress") || force) { + ostr << " m_filterAddress: " << m_filterAddress.toStdString(); + } + if (settingsKeys.contains("scopeCh1") || force) { + ostr << " m_scopeCh1: " << m_scopeCh1; + } + if (settingsKeys.contains("scopeCh2") || force) { + ostr << " m_scopeCh2: " << m_scopeCh2; + } + if (settingsKeys.contains("rgbColor") || force) { + ostr << " m_rgbColor: " << m_rgbColor; + } + if (settingsKeys.contains("title") || force) { + ostr << " m_title: " << m_title.toStdString(); + } + if (settingsKeys.contains("streamIndex") || force) { + ostr << " m_streamIndex: " << m_streamIndex; + } + if (settingsKeys.contains("useReverseAPI") || force) { + ostr << " m_useReverseAPI: " << m_useReverseAPI; + } + if (settingsKeys.contains("reverseAPIAddress") || force) { + ostr << " m_reverseAPIAddress: " << m_reverseAPIAddress.toStdString(); + } + if (settingsKeys.contains("reverseAPIPort") || force) { + ostr << " m_reverseAPIPort: " << m_reverseAPIPort; + } + if (settingsKeys.contains("reverseAPIDeviceIndex") || force) { + ostr << " m_reverseAPIDeviceIndex: " << m_reverseAPIDeviceIndex; + } + if (settingsKeys.contains("reverseAPIChannelIndex") || force) { + ostr << " m_reverseAPIChannelIndex: " << m_reverseAPIChannelIndex; + } + if (settingsKeys.contains("reverse") || force) { + ostr << " m_reverse: " << m_reverse; + } + if (settingsKeys.contains("logFilename") || force) { + ostr << " m_logFilename: " << m_logFilename.toStdString(); + } + if (settingsKeys.contains("logEnabled") || force) { + ostr << " m_logEnabled: " << m_logEnabled; + } + if (settingsKeys.contains("workspaceIndex") || force) { + ostr << " m_workspaceIndex: " << m_workspaceIndex; + } + if (settingsKeys.contains("hidden") || force) { + ostr << " m_hidden: " << m_hidden; + } + if (settingsKeys.contains("filterDuplicates") || force) { + ostr << " m_filterDuplicates: " << m_filterDuplicates; + } + if (settingsKeys.contains("duplicateMatchMessageOnly") || force) { + ostr << " m_duplicateMatchMessageOnly: " << m_duplicateMatchMessageOnly; + } + if (settingsKeys.contains("duplicateMatchLastOnly") || force) { + ostr << " m_duplicateMatchLastOnly: " << m_duplicateMatchLastOnly; + } + + return QString(ostr.str().c_str()); +} + QByteArray PagerDemodSettings::serializeIntList(const QList& ints) const { QByteArray data; diff --git a/plugins/channelrx/demodpager/pagerdemodsettings.h b/plugins/channelrx/demodpager/pagerdemodsettings.h index 6f7a91b90..f44e0d4e6 100644 --- a/plugins/channelrx/demodpager/pagerdemodsettings.h +++ b/plugins/channelrx/demodpager/pagerdemodsettings.h @@ -121,6 +121,8 @@ struct PagerDemodSettings void setScopeGUI(Serializable *scopeGUI) { m_scopeGUI = scopeGUI; } QByteArray serialize() const; bool deserialize(const QByteArray& data); + void applySettings(const QStringList& settingsKeys, const PagerDemodSettings& settings); + QString getDebugString(const QStringList& settingsKeys, bool force=false) const; QByteArray serializeIntList(const QList& ints) const; void deserializeIntList(const QByteArray& data, QList& ints); }; diff --git a/plugins/channelrx/demodpager/pagerdemodsink.cpp b/plugins/channelrx/demodpager/pagerdemodsink.cpp index 1f72d8d89..dfc80e49b 100644 --- a/plugins/channelrx/demodpager/pagerdemodsink.cpp +++ b/plugins/channelrx/demodpager/pagerdemodsink.cpp @@ -54,7 +54,7 @@ PagerDemodSink::PagerDemodSink() : m_demodBuffer.resize(1<<12); m_demodBufferFill = 0; - applySettings(m_settings, true); + applySettings(QStringList(), m_settings, true); applyChannelSettings(m_channelSampleRate, m_channelFrequencyOffset, true); m_sampleBuffer.resize(m_sampleBufferSize); } @@ -633,15 +633,11 @@ void PagerDemodSink::applyChannelSettings(int channelSampleRate, int channelFreq m_channelFrequencyOffset = channelFrequencyOffset; } -void PagerDemodSink::applySettings(const PagerDemodSettings& settings, bool force) +void PagerDemodSink::applySettings(const QStringList& settingsKeys, const PagerDemodSettings& settings, bool force) { - qDebug() << "PagerDemodSink::applySettings:" - << " rfBandwidth: " << settings.m_rfBandwidth - << " fmDeviation: " << settings.m_fmDeviation - << " baud: " << settings.m_baud - << " force: " << force; + qDebug() << "PagerDemodSink::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) PagerDemodSettings::m_channelSampleRate; @@ -649,12 +645,12 @@ void PagerDemodSink::applySettings(const PagerDemodSettings& settings, bool forc m_lowpass.create(301, PagerDemodSettings::m_channelSampleRate, settings.m_rfBandwidth / 2.0f); } - if ((settings.m_fmDeviation != m_settings.m_fmDeviation) || force) + if ((settingsKeys.contains("fmDeviation") && (settings.m_fmDeviation != m_settings.m_fmDeviation)) || force) { m_phaseDiscri.setFMScaling(PagerDemodSettings::m_channelSampleRate / (2.0f * settings.m_fmDeviation)); } - if ((settings.m_baud != m_settings.m_baud) || force) + if ((settingsKeys.contains("baud") && (settings.m_baud != m_settings.m_baud)) || force) { m_samplesPerSymbol = PagerDemodSettings::m_channelSampleRate / settings.m_baud; qDebug() << "PagerDemodSink::applySettings: m_samplesPerSymbol: " << m_samplesPerSymbol; @@ -663,5 +659,9 @@ void PagerDemodSink::applySettings(const PagerDemodSettings& settings, bool forc m_lowpassBaud.create(301, PagerDemodSettings::m_channelSampleRate, settings.m_baud * 5.0f); } - m_settings = settings; + if (force) { + m_settings = settings; + } else { + m_settings.applySettings(settingsKeys, settings); + } } diff --git a/plugins/channelrx/demodpager/pagerdemodsink.h b/plugins/channelrx/demodpager/pagerdemodsink.h index 840f547ee..569c1270d 100644 --- a/plugins/channelrx/demodpager/pagerdemodsink.h +++ b/plugins/channelrx/demodpager/pagerdemodsink.h @@ -52,7 +52,7 @@ public: void setScopeSink(ScopeVis* scopeSink) { m_scopeSink = scopeSink; } void applyChannelSettings(int channelSampleRate, int channelFrequencyOffset, bool force = false); - void applySettings(const PagerDemodSettings& settings, bool force = false); + void applySettings(const QStringList& settingsKeys, const PagerDemodSettings& settings, bool force = false); void setMessageQueueToChannel(MessageQueue *messageQueue) { m_messageQueueToChannel = messageQueue; } void setChannel(ChannelAPI *channel) { m_channel = channel; } diff --git a/plugins/channelrx/demodradiosonde/radiosondedemod.cpp b/plugins/channelrx/demodradiosonde/radiosondedemod.cpp index a1dfd6d20..ced5182f4 100644 --- a/plugins/channelrx/demodradiosonde/radiosondedemod.cpp +++ b/plugins/channelrx/demodradiosonde/radiosondedemod.cpp @@ -53,7 +53,7 @@ RadiosondeDemod::RadiosondeDemod(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); @@ -127,7 +127,7 @@ void RadiosondeDemod::start() DSPSignalNotification *dspMsg = new DSPSignalNotification(m_basebandSampleRate, m_centerFrequency); m_basebandSink->getInputMessageQueue()->push(dspMsg); - RadiosondeDemodBaseband::MsgConfigureRadiosondeDemodBaseband *msg = RadiosondeDemodBaseband::MsgConfigureRadiosondeDemodBaseband::create(m_settings, true); + RadiosondeDemodBaseband::MsgConfigureRadiosondeDemodBaseband *msg = RadiosondeDemodBaseband::MsgConfigureRadiosondeDemodBaseband::create(QStringList(), m_settings, true); m_basebandSink->getInputMessageQueue()->push(msg); } @@ -145,7 +145,7 @@ bool RadiosondeDemod::handleMessage(const Message& cmd) { MsgConfigureRadiosondeDemod& cfg = (MsgConfigureRadiosondeDemod&) cmd; qDebug() << "RadiosondeDemod::handleMessage: MsgConfigureRadiosondeDemod"; - applySettings(cfg.getSettings(), cfg.getForce()); + applySettings(cfg.getSettingsKeys(), cfg.getSettings(), cfg.getForce()); return true; } @@ -279,64 +279,20 @@ void RadiosondeDemod::setCenterFrequency(qint64 frequency) { RadiosondeDemodSettings settings = m_settings; settings.m_inputFrequencyOffset = frequency; - applySettings(settings, false); + applySettings(QStringList("inputFrequencyOffset"), settings, false); if (m_guiMessageQueue) // forward to GUI if any { - MsgConfigureRadiosondeDemod *msgToGUI = MsgConfigureRadiosondeDemod::create(settings, false); + MsgConfigureRadiosondeDemod *msgToGUI = MsgConfigureRadiosondeDemod::create(QStringList("inputFrequencyOffset"), settings, false); m_guiMessageQueue->push(msgToGUI); } } -void RadiosondeDemod::applySettings(const RadiosondeDemodSettings& settings, bool force) +void RadiosondeDemod::applySettings(const QStringList& settingsKeys, const RadiosondeDemodSettings& settings, bool force) { - qDebug() << "RadiosondeDemod::applySettings:" - << " m_logEnabled: " << settings.m_logEnabled - << " m_logFilename: " << settings.m_logFilename - << " 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() << "RadiosondeDemod::applySettings:" << settings.getDebugString(settingsKeys, force); - QList reverseAPIKeys; - - if ((settings.m_baud != m_settings.m_baud) || force) { - reverseAPIKeys.append("baud"); - } - if ((settings.m_inputFrequencyOffset != m_settings.m_inputFrequencyOffset) || force) { - reverseAPIKeys.append("inputFrequencyOffset"); - } - 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_correlationThreshold != m_settings.m_correlationThreshold) || force) { - reverseAPIKeys.append("correlationThreshold"); - } - if ((settings.m_udpEnabled != m_settings.m_udpEnabled) || force) { - reverseAPIKeys.append("udpEnabled"); - } - 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_logFilename != m_settings.m_logFilename) || force) { - reverseAPIKeys.append("logFilename"); - } - if ((settings.m_logEnabled != m_settings.m_logEnabled) || force) { - reverseAPIKeys.append("logEnabled"); - } - if ((settings.m_useFileTime != m_settings.m_useFileTime) || force) { - reverseAPIKeys.append("useFileTime"); - } - 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 { @@ -347,25 +303,23 @@ void RadiosondeDemod::applySettings(const RadiosondeDemodSettings& settings, boo m_settings.m_streamIndex = settings.m_streamIndex; // make sure ChannelAPI::getStreamIndex() is consistent emit streamIndexChanged(settings.m_streamIndex); } - - reverseAPIKeys.append("streamIndex"); } - RadiosondeDemodBaseband::MsgConfigureRadiosondeDemodBaseband *msg = RadiosondeDemodBaseband::MsgConfigureRadiosondeDemodBaseband::create(settings, force); + RadiosondeDemodBaseband::MsgConfigureRadiosondeDemodBaseband *msg = RadiosondeDemodBaseband::MsgConfigureRadiosondeDemodBaseband::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); } - if ((settings.m_logEnabled != m_settings.m_logEnabled) - || (settings.m_logFilename != m_settings.m_logFilename) + if ((settingsKeys.contains("logEnabled") && (settings.m_logEnabled != m_settings.m_logEnabled)) + || (settingsKeys.contains("logFilename") && (settings.m_logFilename != m_settings.m_logFilename)) || force) { if (m_logFile.isOpen()) @@ -394,7 +348,11 @@ void RadiosondeDemod::applySettings(const RadiosondeDemodSettings& settings, boo } } - m_settings = settings; + if (force) { + m_settings = settings; + } else { + m_settings.applySettings(settingsKeys, settings); + } } QByteArray RadiosondeDemod::serialize() const @@ -406,14 +364,14 @@ bool RadiosondeDemod::deserialize(const QByteArray& data) { if (m_settings.deserialize(data)) { - MsgConfigureRadiosondeDemod *msg = MsgConfigureRadiosondeDemod::create(m_settings, true); + MsgConfigureRadiosondeDemod *msg = MsgConfigureRadiosondeDemod::create(QStringList(), m_settings, true); m_inputMessageQueue.push(msg); return true; } else { m_settings.resetToDefaults(); - MsgConfigureRadiosondeDemod *msg = MsgConfigureRadiosondeDemod::create(m_settings, true); + MsgConfigureRadiosondeDemod *msg = MsgConfigureRadiosondeDemod::create(QStringList(), m_settings, true); m_inputMessageQueue.push(msg); return false; } @@ -465,13 +423,13 @@ int RadiosondeDemod::webapiSettingsPutPatch( RadiosondeDemodSettings settings = m_settings; webapiUpdateChannelSettings(settings, channelSettingsKeys, response); - MsgConfigureRadiosondeDemod *msg = MsgConfigureRadiosondeDemod::create(settings, force); + MsgConfigureRadiosondeDemod *msg = MsgConfigureRadiosondeDemod::create(channelSettingsKeys, settings, force); m_inputMessageQueue.push(msg); qDebug("RadiosondeDemod::webapiSettingsPutPatch: forward to GUI: %p", m_guiMessageQueue); if (m_guiMessageQueue) // forward to GUI if any { - MsgConfigureRadiosondeDemod *msgToGUI = MsgConfigureRadiosondeDemod::create(settings, force); + MsgConfigureRadiosondeDemod *msgToGUI = MsgConfigureRadiosondeDemod::create(channelSettingsKeys, settings, force); m_guiMessageQueue->push(msgToGUI); } @@ -630,7 +588,7 @@ void RadiosondeDemod::webapiFormatChannelSettings(SWGSDRangel::SWGChannelSetting } } -void RadiosondeDemod::webapiReverseSendSettings(QList& channelSettingsKeys, const RadiosondeDemodSettings& settings, bool force) +void RadiosondeDemod::webapiReverseSendSettings(const QStringList& channelSettingsKeys, const RadiosondeDemodSettings& settings, bool force) { SWGSDRangel::SWGChannelSettings *swgChannelSettings = new SWGSDRangel::SWGChannelSettings(); webapiFormatChannelSettings(channelSettingsKeys, swgChannelSettings, settings, force); @@ -656,7 +614,7 @@ void RadiosondeDemod::webapiReverseSendSettings(QList& channelSettingsK } void RadiosondeDemod::webapiFormatChannelSettings( - QList& channelSettingsKeys, + const QStringList& channelSettingsKeys, SWGSDRangel::SWGChannelSettings *swgChannelSettings, const RadiosondeDemodSettings& settings, bool force diff --git a/plugins/channelrx/demodradiosonde/radiosondedemod.h b/plugins/channelrx/demodradiosonde/radiosondedemod.h index e8843d719..093fae449 100644 --- a/plugins/channelrx/demodradiosonde/radiosondedemod.h +++ b/plugins/channelrx/demodradiosonde/radiosondedemod.h @@ -56,19 +56,22 @@ public: public: const RadiosondeDemodSettings& getSettings() const { return m_settings; } bool getForce() const { return m_force; } + const QStringList& getSettingsKeys() const { return m_settingsKeys; } - static MsgConfigureRadiosondeDemod* create(const RadiosondeDemodSettings& settings, bool force) + static MsgConfigureRadiosondeDemod* create(const QStringList& settingsKeys, const RadiosondeDemodSettings& settings, bool force) { - return new MsgConfigureRadiosondeDemod(settings, force); + return new MsgConfigureRadiosondeDemod(settingsKeys, settings, force); } private: RadiosondeDemodSettings m_settings; + QStringList m_settingsKeys; bool m_force; - MsgConfigureRadiosondeDemod(const RadiosondeDemodSettings& settings, bool force) : + MsgConfigureRadiosondeDemod(const QStringList& settingsKeys, const RadiosondeDemodSettings& settings, bool force) : Message(), m_settings(settings), + m_settingsKeys(settingsKeys), m_force(force) { } }; @@ -189,11 +192,11 @@ private: QHash m_subframes; // Hash of serial to subframes virtual bool handleMessage(const Message& cmd); - void applySettings(const RadiosondeDemodSettings& settings, bool force = false); + void applySettings(const QStringList& settingsKeys, const RadiosondeDemodSettings& settings, bool force = false); void sendSampleRateToDemodAnalyzer(); - void webapiReverseSendSettings(QList& channelSettingsKeys, const RadiosondeDemodSettings& settings, bool force); + void webapiReverseSendSettings(const QStringList& channelSettingsKeys, const RadiosondeDemodSettings& settings, bool force); void webapiFormatChannelSettings( - QList& channelSettingsKeys, + const QStringList& channelSettingsKeys, SWGSDRangel::SWGChannelSettings *swgChannelSettings, const RadiosondeDemodSettings& settings, bool force diff --git a/plugins/channelrx/demodradiosonde/radiosondedemodbaseband.cpp b/plugins/channelrx/demodradiosonde/radiosondedemodbaseband.cpp index 9b0809a56..fca7a4b3a 100644 --- a/plugins/channelrx/demodradiosonde/radiosondedemodbaseband.cpp +++ b/plugins/channelrx/demodradiosonde/radiosondedemodbaseband.cpp @@ -135,7 +135,7 @@ bool RadiosondeDemodBaseband::handleMessage(const Message& cmd) MsgConfigureRadiosondeDemodBaseband& cfg = (MsgConfigureRadiosondeDemodBaseband&) cmd; qDebug() << "RadiosondeDemodBaseband::handleMessage: MsgConfigureRadiosondeDemodBaseband"; - applySettings(cfg.getSettings(), cfg.getForce()); + applySettings(cfg.getSettingsKeys(), cfg.getSettings(), cfg.getForce()); return true; } @@ -155,17 +155,21 @@ bool RadiosondeDemodBaseband::handleMessage(const Message& cmd) } } -void RadiosondeDemodBaseband::applySettings(const RadiosondeDemodSettings& settings, bool force) +void RadiosondeDemodBaseband::applySettings(const QStringList& settingsKeys, const RadiosondeDemodSettings& 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(RadiosondeDemodSettings::RADIOSONDEDEMOD_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 RadiosondeDemodBaseband::setBasebandSampleRate(int sampleRate) diff --git a/plugins/channelrx/demodradiosonde/radiosondedemodbaseband.h b/plugins/channelrx/demodradiosonde/radiosondedemodbaseband.h index 0435144bc..37854b178 100644 --- a/plugins/channelrx/demodradiosonde/radiosondedemodbaseband.h +++ b/plugins/channelrx/demodradiosonde/radiosondedemodbaseband.h @@ -44,20 +44,23 @@ public: public: const RadiosondeDemodSettings& getSettings() const { return m_settings; } + const QStringList& getSettingsKeys() const { return m_settingsKeys; } bool getForce() const { return m_force; } - static MsgConfigureRadiosondeDemodBaseband* create(const RadiosondeDemodSettings& settings, bool force) + static MsgConfigureRadiosondeDemodBaseband* create(const QStringList& settingsKeys, const RadiosondeDemodSettings& settings, bool force) { - return new MsgConfigureRadiosondeDemodBaseband(settings, force); + return new MsgConfigureRadiosondeDemodBaseband(settingsKeys, settings, force); } private: RadiosondeDemodSettings m_settings; + QStringList m_settingsKeys; bool m_force; - MsgConfigureRadiosondeDemodBaseband(const RadiosondeDemodSettings& settings, bool force) : + MsgConfigureRadiosondeDemodBaseband(const QStringList& settingsKeys, const RadiosondeDemodSettings& settings, bool force) : Message(), m_settings(settings), + m_settingsKeys(settingsKeys), m_force(force) { } }; @@ -92,7 +95,7 @@ private: bool handleMessage(const Message& cmd); void calculateOffset(RadiosondeDemodSink *sink); - void applySettings(const RadiosondeDemodSettings& settings, bool force = false); + void applySettings(const QStringList& settingsKeys, const RadiosondeDemodSettings& settings, bool force = false); private slots: void handleInputMessages(); diff --git a/plugins/channelrx/demodradiosonde/radiosondedemodgui.cpp b/plugins/channelrx/demodradiosonde/radiosondedemodgui.cpp index 0130ffef2..88e18df57 100644 --- a/plugins/channelrx/demodradiosonde/radiosondedemodgui.cpp +++ b/plugins/channelrx/demodradiosonde/radiosondedemodgui.cpp @@ -148,7 +148,7 @@ void RadiosondeDemodGUI::resetToDefaults() { m_settings.resetToDefaults(); displaySettings(); - applySettings(true); + applySettings(QStringList(), true); } QByteArray RadiosondeDemodGUI::serialize() const @@ -160,7 +160,7 @@ bool RadiosondeDemodGUI::deserialize(const QByteArray& data) { if(m_settings.deserialize(data)) { displaySettings(); - applySettings(true); + applySettings(QStringList(), true); return true; } else { resetToDefaults(); @@ -371,7 +371,7 @@ void RadiosondeDemodGUI::channelMarkerChangedByCursor() { ui->deltaFrequency->setValue(m_channelMarker.getCenterFrequency()); m_settings.m_inputFrequencyOffset = m_channelMarker.getCenterFrequency(); - applySettings(); + applySettings(QStringList("inputFrequencyOffset")); } void RadiosondeDemodGUI::channelMarkerHighlightedByCursor() @@ -384,7 +384,7 @@ void RadiosondeDemodGUI::on_deltaFrequency_changed(qint64 value) m_channelMarker.setCenterFrequency(value); m_settings.m_inputFrequencyOffset = m_channelMarker.getCenterFrequency(); updateAbsoluteCenterFrequency(); - applySettings(); + applySettings(QStringList("inputFrequencyOffset")); } void RadiosondeDemodGUI::on_rfBW_valueChanged(int value) @@ -393,28 +393,28 @@ void RadiosondeDemodGUI::on_rfBW_valueChanged(int value) ui->rfBWText->setText(QString("%1k").arg(value / 10.0, 0, 'f', 1)); m_channelMarker.setBandwidth(bw); m_settings.m_rfBandwidth = bw; - applySettings(); + applySettings(QStringList("rfBandwidth")); } void RadiosondeDemodGUI::on_fmDev_valueChanged(int value) { ui->fmDevText->setText(QString("%1k").arg(value / 10.0, 0, 'f', 1)); m_settings.m_fmDeviation = value * 100.0; - applySettings(); + applySettings(QStringList("fmDeviation")); } void RadiosondeDemodGUI::on_threshold_valueChanged(int value) { ui->thresholdText->setText(QString("%1").arg(value)); m_settings.m_correlationThreshold = value; - applySettings(); + applySettings(QStringList("correlationThreshold")); } void RadiosondeDemodGUI::on_filterSerial_editingFinished() { m_settings.m_filterSerial = ui->filterSerial->text(); filter(); - applySettings(); + applySettings(QStringList("filterSerial")); } void RadiosondeDemodGUI::on_clearTable_clicked() @@ -425,31 +425,31 @@ void RadiosondeDemodGUI::on_clearTable_clicked() void RadiosondeDemodGUI::on_udpEnabled_clicked(bool checked) { m_settings.m_udpEnabled = checked; - applySettings(); + applySettings(QStringList("udpEnabled")); } void RadiosondeDemodGUI::on_udpAddress_editingFinished() { m_settings.m_udpAddress = ui->udpAddress->text(); - applySettings(); + applySettings(QStringList("udpAddress")); } void RadiosondeDemodGUI::on_udpPort_editingFinished() { m_settings.m_udpPort = ui->udpPort->text().toInt(); - applySettings(); + applySettings(QStringList("udpPort")); } void RadiosondeDemodGUI::on_channel1_currentIndexChanged(int index) { m_settings.m_scopeCh1 = index; - applySettings(); + applySettings(QStringList("scopeCh1")); } void RadiosondeDemodGUI::on_channel2_currentIndexChanged(int index) { m_settings.m_scopeCh2 = index; - applySettings(); + applySettings(QStringList("scopeCh2")); } void RadiosondeDemodGUI::on_frames_cellDoubleClicked(int row, int column) @@ -496,7 +496,7 @@ void RadiosondeDemodGUI::onWidgetRolled(QWidget* widget, bool rollDown) (void) rollDown; getRollupContents()->saveState(m_rollupState); - applySettings(); + applySettings(QStringList()); } void RadiosondeDemodGUI::onMenuDialogCalled(const QPoint &p) @@ -541,7 +541,8 @@ void RadiosondeDemodGUI::onMenuDialogCalled(const QPoint &p) updateIndexLabel(); } - applySettings(); + applySettings(QStringList({"title", "rgbColor", "useReverseAPI", "reverseAPIAddress", + "reverseAPIPort", "reverseAPIDeviceIndex", "reverseAPIChannelIndex", "streamIndex"})); } resetContextMenuType(); @@ -663,7 +664,7 @@ RadiosondeDemodGUI::RadiosondeDemodGUI(PluginAPI* pluginAPI, DeviceUISet *device displaySettings(); makeUIConnections(); - applySettings(true); + applySettings(QStringList(), true); DialPopup::addPopupsToChildDials(this); m_resizer.enableChildMouseTracking(); } @@ -718,11 +719,11 @@ void RadiosondeDemodGUI::blockApplySettings(bool block) m_doApplySettings = !block; } -void RadiosondeDemodGUI::applySettings(bool force) +void RadiosondeDemodGUI::applySettings(const QStringList& settingsKeys, bool force) { if (m_doApplySettings) { - RadiosondeDemod::MsgConfigureRadiosondeDemod* frame = RadiosondeDemod::MsgConfigureRadiosondeDemod::create( m_settings, force); + RadiosondeDemod::MsgConfigureRadiosondeDemod* frame = RadiosondeDemod::MsgConfigureRadiosondeDemod::create(settingsKeys, m_settings, force); m_radiosondeDemod->getInputMessageQueue()->push(frame); } } @@ -823,7 +824,7 @@ void RadiosondeDemodGUI::tick() void RadiosondeDemodGUI::on_logEnable_clicked(bool checked) { m_settings.m_logEnabled = checked; - applySettings(); + applySettings(QStringList("logEnabled")); } void RadiosondeDemodGUI::on_logFilename_clicked() @@ -839,7 +840,7 @@ void RadiosondeDemodGUI::on_logFilename_clicked() { m_settings.m_logFilename = fileNames[0]; ui->logFilename->setToolTip(QString(".csv log filename: %1").arg(m_settings.m_logFilename)); - applySettings(); + applySettings(QStringList("logFilename")); } } } @@ -926,7 +927,7 @@ void RadiosondeDemodGUI::on_logOpen_clicked() void RadiosondeDemodGUI::on_useFileTime_toggled(bool checked) { m_settings.m_useFileTime = checked; - applySettings(); + applySettings(QStringList("useFileTime")); } void RadiosondeDemodGUI::makeUIConnections() diff --git a/plugins/channelrx/demodradiosonde/radiosondedemodgui.h b/plugins/channelrx/demodradiosonde/radiosondedemodgui.h index f1c952ca4..11e68feb2 100644 --- a/plugins/channelrx/demodradiosonde/radiosondedemodgui.h +++ b/plugins/channelrx/demodradiosonde/radiosondedemodgui.h @@ -94,7 +94,7 @@ private: virtual ~RadiosondeDemodGUI(); void blockApplySettings(bool block); - void applySettings(bool force = false); + void applySettings(const QStringList& settingsKeys, bool force = false); void displaySettings(); void frameReceived(const QByteArray& frame, const QDateTime& dateTime, int errorsCorrected, int threshold, bool loadCSV); bool handleMessage(const Message& message); diff --git a/plugins/channelrx/demodradiosonde/radiosondedemodsettings.cpp b/plugins/channelrx/demodradiosonde/radiosondedemodsettings.cpp index e01956bd0..ddffab323 100644 --- a/plugins/channelrx/demodradiosonde/radiosondedemodsettings.cpp +++ b/plugins/channelrx/demodradiosonde/radiosondedemodsettings.cpp @@ -213,4 +213,171 @@ bool RadiosondeDemodSettings::deserialize(const QByteArray& data) } } +void RadiosondeDemodSettings::applySettings(const QStringList& settingsKeys, const RadiosondeDemodSettings& settings) +{ + if (settingsKeys.contains("baud")) { + m_baud = settings.m_baud; + } + if (settingsKeys.contains("inputFrequencyOffset")) { + m_inputFrequencyOffset = settings.m_inputFrequencyOffset; + } + if (settingsKeys.contains("rfBandwidth")) { + m_rfBandwidth = settings.m_rfBandwidth; + } + if (settingsKeys.contains("fmDeviation")) { + m_fmDeviation = settings.m_fmDeviation; + } + if (settingsKeys.contains("correlationThreshold")) { + m_correlationThreshold = settings.m_correlationThreshold; + } + if (settingsKeys.contains("filterSerial")) { + m_filterSerial = settings.m_filterSerial; + } + if (settingsKeys.contains("udpEnabled")) { + m_udpEnabled = settings.m_udpEnabled; + } + if (settingsKeys.contains("udpAddress")) { + m_udpAddress = settings.m_udpAddress; + } + if (settingsKeys.contains("udpPort")) { + m_udpPort = settings.m_udpPort; + } + if (settingsKeys.contains("scopeCh1")) { + m_scopeCh1 = settings.m_scopeCh1; + } + if (settingsKeys.contains("scopeCh2")) { + m_scopeCh2 = settings.m_scopeCh2; + } + if (settingsKeys.contains("logFilename")) { + m_logFilename = settings.m_logFilename; + } + if (settingsKeys.contains("logEnabled")) { + m_logEnabled = settings.m_logEnabled; + } + if (settingsKeys.contains("useFileTime")) { + m_useFileTime = settings.m_useFileTime; + } + if (settingsKeys.contains("rgbColor")) { + m_rgbColor = settings.m_rgbColor; + } + if (settingsKeys.contains("title")) { + m_title = settings.m_title; + } + if (settingsKeys.contains("streamIndex")) { + m_streamIndex = settings.m_streamIndex; + } + if (settingsKeys.contains("useReverseAPI")) { + m_useReverseAPI = settings.m_useReverseAPI; + } + if (settingsKeys.contains("reverseAPIAddress")) { + m_reverseAPIAddress = settings.m_reverseAPIAddress; + } + if (settingsKeys.contains("reverseAPIPort")) { + m_reverseAPIPort = settings.m_reverseAPIPort; + } + if (settingsKeys.contains("reverseAPIDeviceIndex")) { + m_reverseAPIDeviceIndex = settings.m_reverseAPIDeviceIndex; + } + if (settingsKeys.contains("reverseAPIChannelIndex")) { + m_reverseAPIChannelIndex = settings.m_reverseAPIChannelIndex; + } + if (settingsKeys.contains("workspaceIndex")) { + m_workspaceIndex = settings.m_workspaceIndex; + } + if (settingsKeys.contains("geometryBytes")) { + m_geometryBytes = settings.m_geometryBytes; + } + if (settingsKeys.contains("hidden")) { + m_hidden = settings.m_hidden; + } + if (settingsKeys.contains("frameColumnIndexes")) { + for (int i = 0; i < RADIOSONDEDEMOD_FRAME_COLUMNS; i++) { + m_frameColumnIndexes[i] = settings.m_frameColumnIndexes[i]; + } + } + if (settingsKeys.contains("frameColumnSizes")) { + for (int i = 0; i < RADIOSONDEDEMOD_FRAME_COLUMNS; i++) { + m_frameColumnSizes[i] = settings.m_frameColumnSizes[i]; + } + } +} +QString RadiosondeDemodSettings::getDebugString(const QStringList& settingsKeys, bool force) const +{ + std::ostringstream ostr; + + if (settingsKeys.contains("baud") || force) { + ostr << " m_baud: " << m_baud; + } + if (settingsKeys.contains("inputFrequencyOffset") || force) { + ostr << " m_inputFrequencyOffset: " << m_inputFrequencyOffset; + } + if (settingsKeys.contains("rfBandwidth") || force) { + ostr << " m_rfBandwidth: " << m_rfBandwidth; + } + if (settingsKeys.contains("fmDeviation") || force) { + ostr << " m_fmDeviation: " << m_fmDeviation; + } + if (settingsKeys.contains("correlationThreshold") || force) { + ostr << " m_correlationThreshold: " << m_correlationThreshold; + } + if (settingsKeys.contains("filterSerial") || force) { + ostr << " m_filterSerial: " << m_filterSerial.toStdString(); + } + if (settingsKeys.contains("udpEnabled") || force) { + ostr << " m_udpEnabled: " << m_udpEnabled; + } + if (settingsKeys.contains("udpAddress") || force) { + ostr << " m_udpAddress: " << m_udpAddress.toStdString(); + } + if (settingsKeys.contains("udpPort") || force) { + ostr << " m_udpPort: " << m_udpPort; + } + if (settingsKeys.contains("scopeCh1") || force) { + ostr << " m_scopeCh1: " << m_scopeCh1; + } + if (settingsKeys.contains("scopeCh2") || force) { + ostr << " m_scopeCh2: " << m_scopeCh2; + } + if (settingsKeys.contains("logFilename") || force) { + ostr << " m_logFilename: " << m_logFilename.toStdString(); + } + if (settingsKeys.contains("logEnabled") || force) { + ostr << " m_logEnabled: " << m_logEnabled; + } + if (settingsKeys.contains("useFileTime") || force) { + ostr << " m_useFileTime: " << m_useFileTime; + } + if (settingsKeys.contains("rgbColor") || force) { + ostr << " m_rgbColor: " << m_rgbColor; + } + if (settingsKeys.contains("title") || force) { + ostr << " m_title: " << m_title.toStdString(); + } + if (settingsKeys.contains("streamIndex") || force) { + ostr << " m_streamIndex: " << m_streamIndex; + } + if (settingsKeys.contains("useReverseAPI") || force) { + ostr << " m_useReverseAPI: " << m_useReverseAPI; + } + if (settingsKeys.contains("reverseAPIAddress") || force) { + ostr << " m_reverseAPIAddress: " << m_reverseAPIAddress.toStdString(); + } + if (settingsKeys.contains("reverseAPIPort") || force) { + ostr << " m_reverseAPIPort: " << m_reverseAPIPort; + } + if (settingsKeys.contains("reverseAPIDeviceIndex") || force) { + ostr << " m_reverseAPIDeviceIndex: " << m_reverseAPIDeviceIndex; + } + if (settingsKeys.contains("reverseAPIChannelIndex") || force) { + ostr << " m_reverseAPIChannelIndex: " << m_reverseAPIChannelIndex; + } + if (settingsKeys.contains("workspaceIndex") || force) { + ostr << " m_workspaceIndex: " << m_workspaceIndex; + } + if (settingsKeys.contains("hidden") || force) { + ostr << " m_hidden: " << m_hidden; + } + + return QString(ostr.str().c_str()); +} diff --git a/plugins/channelrx/demodradiosonde/radiosondedemodsettings.h b/plugins/channelrx/demodradiosonde/radiosondedemodsettings.h index a79a1199d..fa9f83f58 100644 --- a/plugins/channelrx/demodradiosonde/radiosondedemodsettings.h +++ b/plugins/channelrx/demodradiosonde/radiosondedemodsettings.h @@ -76,6 +76,8 @@ struct RadiosondeDemodSettings void setScopeGUI(Serializable *scopeGUI) { m_scopeGUI = scopeGUI; } QByteArray serialize() const; bool deserialize(const QByteArray& data); + void applySettings(const QStringList& settingsKeys, const RadiosondeDemodSettings& settings); + QString getDebugString(const QStringList& settingsKeys, bool force=false) const; }; #endif /* INCLUDE_RADIOSONDEDEMODSETTINGS_H */ diff --git a/plugins/channelrx/demodradiosonde/radiosondedemodsink.cpp b/plugins/channelrx/demodradiosonde/radiosondedemodsink.cpp index 16f02ade0..b353fe7ef 100644 --- a/plugins/channelrx/demodradiosonde/radiosondedemodsink.cpp +++ b/plugins/channelrx/demodradiosonde/radiosondedemodsink.cpp @@ -60,7 +60,7 @@ RadiosondeDemodSink::RadiosondeDemodSink(RadiosondeDemod *radiosondeDemod) : m_demodBufferFill = 0; m_sampleBuffer.resize(m_sampleBufferSize); - applySettings(m_settings, true); + applySettings(QStringList(), m_settings, true); applyChannelSettings(m_channelSampleRate, m_channelFrequencyOffset, true); } @@ -525,24 +525,23 @@ void RadiosondeDemodSink::applyChannelSettings(int channelSampleRate, int channe qDebug() << "RadiosondeDemodSink::applyChannelSettings: m_samplesPerSymbol: " << m_samplesPerSymbol; } -void RadiosondeDemodSink::applySettings(const RadiosondeDemodSettings& settings, bool force) +void RadiosondeDemodSink::applySettings(const QStringList& settingsKeys, const RadiosondeDemodSettings& settings, bool force) { - qDebug() << "RadiosondeDemodSink::applySettings:" - << " force: " << force; + qDebug() << "RadiosondeDemodSink::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) RadiosondeDemodSettings::RADIOSONDEDEMOD_CHANNEL_SAMPLE_RATE; m_interpolatorDistanceRemain = m_interpolatorDistance; m_lowpass.create(301, RadiosondeDemodSettings::RADIOSONDEDEMOD_CHANNEL_SAMPLE_RATE, settings.m_rfBandwidth / 2.0f); } - if ((settings.m_fmDeviation != m_settings.m_fmDeviation) || force) + if ((settingsKeys.contains("fmDeviation") && (settings.m_fmDeviation != m_settings.m_fmDeviation)) || force) { m_phaseDiscri.setFMScaling(RadiosondeDemodSettings::RADIOSONDEDEMOD_CHANNEL_SAMPLE_RATE / (2.0f * settings.m_fmDeviation)); } - if ((settings.m_baud != m_settings.m_baud) || force) + if ((settingsKeys.contains("baud") && (settings.m_baud != m_settings.m_baud)) || force) { m_samplesPerSymbol = RadiosondeDemodSettings::RADIOSONDEDEMOD_CHANNEL_SAMPLE_RATE / settings.m_baud; qDebug() << "RadiosondeDemodSink::applySettings: m_samplesPerSymbol: " << m_samplesPerSymbol << " baud " << settings.m_baud; @@ -579,5 +578,9 @@ void RadiosondeDemodSink::applySettings(const RadiosondeDemodSettings& settings, } } - m_settings = settings; + if (force) { + m_settings = settings; + } else { + m_settings.applySettings(settingsKeys, settings); + } } diff --git a/plugins/channelrx/demodradiosonde/radiosondedemodsink.h b/plugins/channelrx/demodradiosonde/radiosondedemodsink.h index 9b8021967..0449e4cc0 100644 --- a/plugins/channelrx/demodradiosonde/radiosondedemodsink.h +++ b/plugins/channelrx/demodradiosonde/radiosondedemodsink.h @@ -50,7 +50,7 @@ public: void setScopeSink(ScopeVis* scopeSink) { m_scopeSink = scopeSink; } void applyChannelSettings(int channelSampleRate, int channelFrequencyOffset, bool force = false); - void applySettings(const RadiosondeDemodSettings& settings, bool force = false); + void applySettings(const QStringList& settingsKeys, const RadiosondeDemodSettings& settings, bool force = false); void setMessageQueueToChannel(MessageQueue *messageQueue) { m_messageQueueToChannel = messageQueue; } void setChannel(ChannelAPI *channel) { m_channel = channel; } diff --git a/plugins/channelrx/demodrtty/rttydemod.cpp b/plugins/channelrx/demodrtty/rttydemod.cpp index 84c0ad345..28018e042 100644 --- a/plugins/channelrx/demodrtty/rttydemod.cpp +++ b/plugins/channelrx/demodrtty/rttydemod.cpp @@ -58,7 +58,7 @@ RttyDemod::RttyDemod(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); @@ -132,7 +132,7 @@ void RttyDemod::start() DSPSignalNotification *dspMsg = new DSPSignalNotification(m_basebandSampleRate, m_centerFrequency); m_basebandSink->getInputMessageQueue()->push(dspMsg); - RttyDemodBaseband::MsgConfigureRttyDemodBaseband *msg = RttyDemodBaseband::MsgConfigureRttyDemodBaseband::create(m_settings, true); + RttyDemodBaseband::MsgConfigureRttyDemodBaseband *msg = RttyDemodBaseband::MsgConfigureRttyDemodBaseband::create(QStringList(), m_settings, true); m_basebandSink->getInputMessageQueue()->push(msg); } @@ -150,8 +150,7 @@ bool RttyDemod::handleMessage(const Message& cmd) { MsgConfigureRttyDemod& cfg = (MsgConfigureRttyDemod&) cmd; qDebug() << "RttyDemod::handleMessage: MsgConfigureRttyDemod"; - applySettings(cfg.getSettings(), cfg.getForce()); - + applySettings(cfg.getSettingsKeys(), cfg.getSettings(), cfg.getForce()); return true; } else if (DSPSignalNotification::match(cmd)) @@ -229,27 +228,18 @@ void RttyDemod::setCenterFrequency(qint64 frequency) { RttyDemodSettings settings = m_settings; settings.m_inputFrequencyOffset = frequency; - applySettings(settings, false); + applySettings(QStringList({"inputFrequencyOffset"}), settings, false); if (m_guiMessageQueue) // forward to GUI if any { - MsgConfigureRttyDemod *msgToGUI = MsgConfigureRttyDemod::create(settings, false); + MsgConfigureRttyDemod *msgToGUI = MsgConfigureRttyDemod::create(QStringList({"inputFrequencyOffset"}), settings, false); m_guiMessageQueue->push(msgToGUI); } } -void RttyDemod::applySettings(const RttyDemodSettings& settings, bool force) +void RttyDemod::applySettings(const QStringList& settingsKeys, const RttyDemodSettings& settings, bool force) { - qDebug() << "RttyDemod::applySettings:" - << " m_logEnabled: " << settings.m_logEnabled - << " m_logFilename: " << settings.m_logFilename - << " 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() << "RttyDemod::applySettings:" << settings.getDebugString(settingsKeys, force); QList reverseAPIKeys; @@ -298,7 +288,7 @@ void RttyDemod::applySettings(const RttyDemodSettings& settings, bool force) if ((settings.m_logEnabled != m_settings.m_logEnabled) || force) { reverseAPIKeys.append("logEnabled"); } - if (m_settings.m_streamIndex != settings.m_streamIndex) + if (settingsKeys.contains("streamIndex") && (settings.m_streamIndex != m_settings.m_streamIndex)) { if (m_deviceAPI->getSampleMIMO()) // change of stream is possible for MIMO devices only { @@ -313,21 +303,21 @@ void RttyDemod::applySettings(const RttyDemodSettings& settings, bool force) reverseAPIKeys.append("streamIndex"); } - RttyDemodBaseband::MsgConfigureRttyDemodBaseband *msg = RttyDemodBaseband::MsgConfigureRttyDemodBaseband::create(settings, force); + RttyDemodBaseband::MsgConfigureRttyDemodBaseband *msg = RttyDemodBaseband::MsgConfigureRttyDemodBaseband::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); } - if ((settings.m_logEnabled != m_settings.m_logEnabled) - || (settings.m_logFilename != m_settings.m_logFilename) + if ((settingsKeys.contains("logEnabled") && (settings.m_logEnabled != m_settings.m_logEnabled)) + || (settingsKeys.contains("logFilename") && (settings.m_logFilename != m_settings.m_logFilename)) || force) { if (m_logFile.isOpen()) @@ -381,14 +371,14 @@ bool RttyDemod::deserialize(const QByteArray& data) { if (m_settings.deserialize(data)) { - MsgConfigureRttyDemod *msg = MsgConfigureRttyDemod::create(m_settings, true); + MsgConfigureRttyDemod *msg = MsgConfigureRttyDemod::create(QStringList(), m_settings, true); m_inputMessageQueue.push(msg); return true; } else { m_settings.resetToDefaults(); - MsgConfigureRttyDemod *msg = MsgConfigureRttyDemod::create(m_settings, true); + MsgConfigureRttyDemod *msg = MsgConfigureRttyDemod::create(QStringList(), m_settings, true); m_inputMessageQueue.push(msg); return false; } @@ -424,13 +414,13 @@ int RttyDemod::webapiSettingsPutPatch( RttyDemodSettings settings = m_settings; webapiUpdateChannelSettings(settings, channelSettingsKeys, response); - MsgConfigureRttyDemod *msg = MsgConfigureRttyDemod::create(settings, force); + MsgConfigureRttyDemod *msg = MsgConfigureRttyDemod::create(channelSettingsKeys, settings, force); m_inputMessageQueue.push(msg); qDebug("RttyDemod::webapiSettingsPutPatch: forward to GUI: %p", m_guiMessageQueue); if (m_guiMessageQueue) // forward to GUI if any { - MsgConfigureRttyDemod *msgToGUI = MsgConfigureRttyDemod::create(settings, force); + MsgConfigureRttyDemod *msgToGUI = MsgConfigureRttyDemod::create(channelSettingsKeys, settings, force); m_guiMessageQueue->push(msgToGUI); } @@ -625,7 +615,7 @@ void RttyDemod::webapiFormatChannelReport(SWGSDRangel::SWGChannelReport& respons response.getRttyDemodReport()->setChannelSampleRate(m_basebandSink->getChannelSampleRate()); } -void RttyDemod::webapiReverseSendSettings(QList& channelSettingsKeys, const RttyDemodSettings& settings, bool force) +void RttyDemod::webapiReverseSendSettings(const QList& channelSettingsKeys, const RttyDemodSettings& settings, bool force) { SWGSDRangel::SWGChannelSettings *swgChannelSettings = new SWGSDRangel::SWGChannelSettings(); webapiFormatChannelSettings(channelSettingsKeys, swgChannelSettings, settings, force); @@ -651,7 +641,7 @@ void RttyDemod::webapiReverseSendSettings(QList& channelSettingsKeys, c } void RttyDemod::webapiFormatChannelSettings( - QList& channelSettingsKeys, + const QList& channelSettingsKeys, SWGSDRangel::SWGChannelSettings *swgChannelSettings, const RttyDemodSettings& settings, bool force @@ -776,4 +766,3 @@ void RttyDemod::handleIndexInDeviceSetChanged(int index) .arg(index); m_basebandSink->setFifoLabel(fifoLabel); } - diff --git a/plugins/channelrx/demodrtty/rttydemod.h b/plugins/channelrx/demodrtty/rttydemod.h index 849579bac..518566392 100644 --- a/plugins/channelrx/demodrtty/rttydemod.h +++ b/plugins/channelrx/demodrtty/rttydemod.h @@ -49,20 +49,23 @@ public: public: const RttyDemodSettings& getSettings() const { return m_settings; } + const QStringList& getSettingsKeys() const { return m_settingsKeys; } bool getForce() const { return m_force; } - static MsgConfigureRttyDemod* create(const RttyDemodSettings& settings, bool force) + static MsgConfigureRttyDemod* create(const QStringList& settingsKeys, const RttyDemodSettings& settings, bool force) { - return new MsgConfigureRttyDemod(settings, force); + return new MsgConfigureRttyDemod(settingsKeys, settings, force); } private: RttyDemodSettings m_settings; + QStringList m_settingsKeys; bool m_force; - MsgConfigureRttyDemod(const RttyDemodSettings& settings, bool force) : + MsgConfigureRttyDemod(const QStringList& settingsKeys, const RttyDemodSettings& settings, bool force) : Message(), m_settings(settings), + m_settingsKeys(settingsKeys), m_force(force) { } }; @@ -198,11 +201,11 @@ private: QNetworkRequest m_networkRequest; virtual bool handleMessage(const Message& cmd); - void applySettings(const RttyDemodSettings& settings, bool force = false); + void applySettings(const QStringList& settingsKeys, const RttyDemodSettings& settings, bool force = false); void sendSampleRateToDemodAnalyzer(); - void webapiReverseSendSettings(QList& channelSettingsKeys, const RttyDemodSettings& settings, bool force); + void webapiReverseSendSettings(const QList& channelSettingsKeys, const RttyDemodSettings& settings, bool force); void webapiFormatChannelSettings( - QList& channelSettingsKeys, + const QList& channelSettingsKeys, SWGSDRangel::SWGChannelSettings *swgChannelSettings, const RttyDemodSettings& settings, bool force @@ -216,4 +219,3 @@ private slots: }; #endif // INCLUDE_RTTYDEMOD_H - diff --git a/plugins/channelrx/demodrtty/rttydemodbaseband.cpp b/plugins/channelrx/demodrtty/rttydemodbaseband.cpp index e07245a51..81e928f83 100644 --- a/plugins/channelrx/demodrtty/rttydemodbaseband.cpp +++ b/plugins/channelrx/demodrtty/rttydemodbaseband.cpp @@ -134,7 +134,7 @@ bool RttyDemodBaseband::handleMessage(const Message& cmd) MsgConfigureRttyDemodBaseband& cfg = (MsgConfigureRttyDemodBaseband&) cmd; qDebug() << "RttyDemodBaseband::handleMessage: MsgConfigureRttyDemodBaseband"; - applySettings(cfg.getSettings(), cfg.getForce()); + applySettings(cfg.getSettingsKeys(), cfg.getSettings(), cfg.getForce()); return true; } @@ -155,17 +155,21 @@ bool RttyDemodBaseband::handleMessage(const Message& cmd) } } -void RttyDemodBaseband::applySettings(const RttyDemodSettings& settings, bool force) +void RttyDemodBaseband::applySettings(const QStringList& settingsKeys, const RttyDemodSettings& 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(RttyDemodSettings::RTTYDEMOD_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); + } } int RttyDemodBaseband::getChannelSampleRate() const @@ -178,4 +182,3 @@ void RttyDemodBaseband::setBasebandSampleRate(int sampleRate) m_channelizer->setBasebandSampleRate(sampleRate); m_sink.applyChannelSettings(m_channelizer->getChannelSampleRate(), m_channelizer->getChannelFrequencyOffset()); } - diff --git a/plugins/channelrx/demodrtty/rttydemodbaseband.h b/plugins/channelrx/demodrtty/rttydemodbaseband.h index 35344b710..cf39ad006 100644 --- a/plugins/channelrx/demodrtty/rttydemodbaseband.h +++ b/plugins/channelrx/demodrtty/rttydemodbaseband.h @@ -44,20 +44,23 @@ public: public: const RttyDemodSettings& getSettings() const { return m_settings; } + const QStringList& getSettingsKeys() const { return m_settingsKeys; } bool getForce() const { return m_force; } - static MsgConfigureRttyDemodBaseband* create(const RttyDemodSettings& settings, bool force) + static MsgConfigureRttyDemodBaseband* create(const QStringList& settingsKeys, const RttyDemodSettings& settings, bool force) { - return new MsgConfigureRttyDemodBaseband(settings, force); + return new MsgConfigureRttyDemodBaseband(settingsKeys, settings, force); } private: RttyDemodSettings m_settings; + QStringList m_settingsKeys; bool m_force; - MsgConfigureRttyDemodBaseband(const RttyDemodSettings& settings, bool force) : + MsgConfigureRttyDemodBaseband(const QStringList& settingsKeys, const RttyDemodSettings& settings, bool force) : Message(), m_settings(settings), + m_settingsKeys(settingsKeys), m_force(force) { } }; @@ -93,7 +96,7 @@ private: bool handleMessage(const Message& cmd); void calculateOffset(RttyDemodSink *sink); - void applySettings(const RttyDemodSettings& settings, bool force = false); + void applySettings(const QStringList& settingsKeys, const RttyDemodSettings& settings, bool force = false); private slots: void handleInputMessages(); @@ -101,4 +104,3 @@ private slots: }; #endif // INCLUDE_RTTYDEMODBASEBAND_H - diff --git a/plugins/channelrx/demodrtty/rttydemodgui.cpp b/plugins/channelrx/demodrtty/rttydemodgui.cpp index baad2448e..580f3e4d3 100644 --- a/plugins/channelrx/demodrtty/rttydemodgui.cpp +++ b/plugins/channelrx/demodrtty/rttydemodgui.cpp @@ -56,7 +56,7 @@ void RttyDemodGUI::resetToDefaults() { m_settings.resetToDefaults(); displaySettings(); - applySettings(true); + applySettings(QStringList(), true); } QByteArray RttyDemodGUI::serialize() const @@ -68,7 +68,7 @@ bool RttyDemodGUI::deserialize(const QByteArray& data) { if(m_settings.deserialize(data)) { displaySettings(); - applySettings(true); + applySettings(QStringList(), true); return true; } else { resetToDefaults(); @@ -181,7 +181,7 @@ void RttyDemodGUI::channelMarkerChangedByCursor() { ui->deltaFrequency->setValue(m_channelMarker.getCenterFrequency()); m_settings.m_inputFrequencyOffset = m_channelMarker.getCenterFrequency(); - applySettings(); + applySettings(QStringList({"inputFrequencyOffset"})); } void RttyDemodGUI::channelMarkerHighlightedByCursor() @@ -194,7 +194,7 @@ void RttyDemodGUI::on_deltaFrequency_changed(qint64 value) m_channelMarker.setCenterFrequency(value); m_settings.m_inputFrequencyOffset = m_channelMarker.getCenterFrequency(); updateAbsoluteCenterFrequency(); - applySettings(); + applySettings(QStringList({"inputFrequencyOffset"})); } void RttyDemodGUI::on_rfBW_valueChanged(int value) @@ -203,40 +203,40 @@ void RttyDemodGUI::on_rfBW_valueChanged(int value) ui->rfBWText->setText(formatFrequency((int)bw)); m_channelMarker.setBandwidth(bw); m_settings.m_rfBandwidth = bw; - applySettings(); + applySettings(QStringList({"rfBandwidth"})); } void RttyDemodGUI::on_baudRate_currentIndexChanged(int index) { (void) index; m_settings.m_baudRate = ui->baudRate->currentText().toFloat(); - applySettings(); + applySettings(QStringList({"baudRate"})); } void RttyDemodGUI::on_frequencyShift_valueChanged(int value) { ui->frequencyShiftText->setText(formatFrequency(value)); m_settings.m_frequencyShift = value; - applySettings(); + applySettings(QStringList({"frequencyShift"})); } void RttyDemodGUI::on_squelch_valueChanged(int value) { ui->squelchText->setText(QString("%1 dB").arg(value)); m_settings.m_squelch = value; - applySettings(); + applySettings(QStringList({"squelch"})); } void RttyDemodGUI::on_characterSet_currentIndexChanged(int index) { m_settings.m_characterSet = (Baudot::CharacterSet) index; - applySettings(); + applySettings(QStringList({"characterSet"})); } void RttyDemodGUI::on_suppressCRLF_clicked(bool checked) { m_settings.m_suppressCRLF = checked; - applySettings(); + applySettings(QStringList({"suppressCRLF"})); } void RttyDemodGUI::on_mode_currentIndexChanged(int index) @@ -267,20 +267,20 @@ void RttyDemodGUI::on_mode_currentIndexChanged(int index) ui->rfBWText->setEnabled(custom); //m_settings.m_mode = index; - applySettings(); + //applySettings(QStringList({"mode"})); } void RttyDemodGUI::on_filter_currentIndexChanged(int index) { m_settings.m_filter = (RttyDemodSettings::FilterType)index; - applySettings(); + applySettings(QStringList({"filter"})); } void RttyDemodGUI::on_atc_clicked(bool checked) { m_settings.m_atc = checked; - applySettings(); + applySettings(QStringList({"atc"})); } void RttyDemodGUI::on_endian_clicked(bool checked) @@ -291,7 +291,7 @@ void RttyDemodGUI::on_endian_clicked(bool checked) } else { ui->endian->setText("LSB"); } - applySettings(); + applySettings(QStringList({"msbFirst"})); } void RttyDemodGUI::on_spaceHigh_clicked(bool checked) @@ -303,13 +303,13 @@ void RttyDemodGUI::on_spaceHigh_clicked(bool checked) else { ui->spaceHigh->setText("S-M"); } - applySettings(); + applySettings(QStringList({"spaceHigh"})); } void RttyDemodGUI::on_unshiftOnSpace_clicked(bool checked) { m_settings.m_unshiftOnSpace = checked; - applySettings(); + applySettings(QStringList({"unshiftOnSpace"})); } void RttyDemodGUI::on_clearTable_clicked() @@ -320,31 +320,31 @@ void RttyDemodGUI::on_clearTable_clicked() void RttyDemodGUI::on_udpEnabled_clicked(bool checked) { m_settings.m_udpEnabled = checked; - applySettings(); + applySettings(QStringList({"udpEnabled"})); } void RttyDemodGUI::on_udpAddress_editingFinished() { m_settings.m_udpAddress = ui->udpAddress->text(); - applySettings(); + applySettings(QStringList({"udpAddress"})); } void RttyDemodGUI::on_udpPort_editingFinished() { m_settings.m_udpPort = ui->udpPort->text().toInt(); - applySettings(); + applySettings(QStringList({"udpPort"})); } void RttyDemodGUI::on_channel1_currentIndexChanged(int index) { m_settings.m_scopeCh1 = index; - applySettings(); + applySettings(QStringList({"scopeCh1"})); } void RttyDemodGUI::on_channel2_currentIndexChanged(int index) { m_settings.m_scopeCh2 = index; - applySettings(); + applySettings(QStringList({"scopeCh2"})); } void RttyDemodGUI::onWidgetRolled(QWidget* widget, bool rollDown) @@ -353,7 +353,7 @@ void RttyDemodGUI::onWidgetRolled(QWidget* widget, bool rollDown) (void) rollDown; getRollupContents()->saveState(m_rollupState); - applySettings(); + applySettings(QStringList()); } void RttyDemodGUI::onMenuDialogCalled(const QPoint &p) @@ -398,7 +398,16 @@ void RttyDemodGUI::onMenuDialogCalled(const QPoint &p) updateIndexLabel(); } - applySettings(); + applySettings(QStringList({ + "rgbColor", + "title", + "useReverseAPI", + "reverseAPIAddress", + "reverseAPIPort", + "reverseAPIDeviceIndex", + "reverseAPIChannelIndex", + "streamIndex" + })); } resetContextMenuType(); @@ -492,7 +501,7 @@ RttyDemodGUI::RttyDemodGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Baseb displaySettings(); makeUIConnections(); - applySettings(true); + applySettings(QStringList(), true); m_resizer.enableChildMouseTracking(); } @@ -506,11 +515,11 @@ void RttyDemodGUI::blockApplySettings(bool block) m_doApplySettings = !block; } -void RttyDemodGUI::applySettings(bool force) +void RttyDemodGUI::applySettings(const QStringList& settingsKeys, bool force) { if (m_doApplySettings) { - RttyDemod::MsgConfigureRttyDemod* message = RttyDemod::MsgConfigureRttyDemod::create( m_settings, force); + RttyDemod::MsgConfigureRttyDemod* message = RttyDemod::MsgConfigureRttyDemod::create(settingsKeys, m_settings, force); m_rttyDemod->getInputMessageQueue()->push(message); } } @@ -624,7 +633,7 @@ void RttyDemodGUI::tick() void RttyDemodGUI::on_logEnable_clicked(bool checked) { m_settings.m_logEnabled = checked; - applySettings(); + applySettings(QStringList({"logEnabled"})); } void RttyDemodGUI::on_logFilename_clicked() @@ -639,7 +648,7 @@ void RttyDemodGUI::on_logFilename_clicked() { m_settings.m_logFilename = fileNames[0]; ui->logFilename->setToolTip(QString(".txt log filename: %1").arg(m_settings.m_logFilename)); - applySettings(); + applySettings(QStringList({"logFilename"})); } } } @@ -673,4 +682,3 @@ void RttyDemodGUI::updateAbsoluteCenterFrequency() { setStatusFrequency(m_deviceCenterFrequency + m_settings.m_inputFrequencyOffset); } - diff --git a/plugins/channelrx/demodrtty/rttydemodgui.h b/plugins/channelrx/demodrtty/rttydemodgui.h index 736de1b4c..02b70bb35 100644 --- a/plugins/channelrx/demodrtty/rttydemodgui.h +++ b/plugins/channelrx/demodrtty/rttydemodgui.h @@ -86,7 +86,7 @@ private: virtual ~RttyDemodGUI(); 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(); @@ -127,4 +127,3 @@ private slots: }; #endif // INCLUDE_RTTYDEMODGUI_H - diff --git a/plugins/channelrx/demodrtty/rttydemodsettings.cpp b/plugins/channelrx/demodrtty/rttydemodsettings.cpp index 5da7a8086..45009efe8 100644 --- a/plugins/channelrx/demodrtty/rttydemodsettings.cpp +++ b/plugins/channelrx/demodrtty/rttydemodsettings.cpp @@ -213,3 +213,191 @@ bool RttyDemodSettings::deserialize(const QByteArray& data) } } +void RttyDemodSettings::applySettings(const QStringList& settingsKeys, const RttyDemodSettings& settings) +{ + if (settingsKeys.contains("inputFrequencyOffset")) { + m_inputFrequencyOffset = settings.m_inputFrequencyOffset; + } + if (settingsKeys.contains("rfBandwidth")) { + m_rfBandwidth = settings.m_rfBandwidth; + } + if (settingsKeys.contains("baudRate")) { + m_baudRate = settings.m_baudRate; + } + if (settingsKeys.contains("frequencyShift")) { + m_frequencyShift = settings.m_frequencyShift; + } + if (settingsKeys.contains("udpEnabled")) { + m_udpEnabled = settings.m_udpEnabled; + } + if (settingsKeys.contains("udpAddress")) { + m_udpAddress = settings.m_udpAddress; + } + if (settingsKeys.contains("udpPort")) { + m_udpPort = settings.m_udpPort; + } + if (settingsKeys.contains("characterSet")) { + m_characterSet = settings.m_characterSet; + } + if (settingsKeys.contains("suppressCRLF")) { + m_suppressCRLF = settings.m_suppressCRLF; + } + if (settingsKeys.contains("unshiftOnSpace")) { + m_unshiftOnSpace = settings.m_unshiftOnSpace; + } + if (settingsKeys.contains("filter")) { + m_filter = settings.m_filter; + } + if (settingsKeys.contains("atc")) { + m_atc = settings.m_atc; + } + if (settingsKeys.contains("msbFirst")) { + m_msbFirst = settings.m_msbFirst; + } + if (settingsKeys.contains("spaceHigh")) { + m_spaceHigh = settings.m_spaceHigh; + } + if (settingsKeys.contains("squelch")) { + m_squelch = settings.m_squelch; + } + if (settingsKeys.contains("rgbColor")) { + m_rgbColor = settings.m_rgbColor; + } + if (settingsKeys.contains("title")) { + m_title = settings.m_title; + } + if (settingsKeys.contains("streamIndex")) { + m_streamIndex = settings.m_streamIndex; + } + if (settingsKeys.contains("useReverseAPI")) { + m_useReverseAPI = settings.m_useReverseAPI; + } + if (settingsKeys.contains("reverseAPIAddress")) { + m_reverseAPIAddress = settings.m_reverseAPIAddress; + } + if (settingsKeys.contains("reverseAPIPort")) { + m_reverseAPIPort = settings.m_reverseAPIPort; + } + if (settingsKeys.contains("reverseAPIDeviceIndex")) { + m_reverseAPIDeviceIndex = settings.m_reverseAPIDeviceIndex; + } + if (settingsKeys.contains("reverseAPIChannelIndex")) { + m_reverseAPIChannelIndex = settings.m_reverseAPIChannelIndex; + } + if (settingsKeys.contains("scopeCh1")) { + m_scopeCh1 = settings.m_scopeCh1; + } + if (settingsKeys.contains("scopeCh2")) { + m_scopeCh2 = settings.m_scopeCh2; + } + if (settingsKeys.contains("logFilename")) { + m_logFilename = settings.m_logFilename; + } + if (settingsKeys.contains("logEnabled")) { + m_logEnabled = settings.m_logEnabled; + } + if (settingsKeys.contains("workspaceIndex")) { + m_workspaceIndex = settings.m_workspaceIndex; + } + if (settingsKeys.contains("geometryBytes")) { + m_geometryBytes = settings.m_geometryBytes; + } + if (settingsKeys.contains("hidden")) { + m_hidden = settings.m_hidden; + } +} + +QString RttyDemodSettings::getDebugString(const QStringList& settingsKeys, bool force) const +{ + std::ostringstream ostr; + + if (settingsKeys.contains("inputFrequencyOffset") || force) { + ostr << " m_inputFrequencyOffset: " << m_inputFrequencyOffset; + } + if (settingsKeys.contains("rfBandwidth") || force) { + ostr << " m_rfBandwidth: " << m_rfBandwidth; + } + if (settingsKeys.contains("baudRate") || force) { + ostr << " m_baudRate: " << m_baudRate; + } + if (settingsKeys.contains("frequencyShift") || force) { + ostr << " m_frequencyShift: " << m_frequencyShift; + } + if (settingsKeys.contains("udpEnabled") || force) { + ostr << " m_udpEnabled: " << m_udpEnabled; + } + if (settingsKeys.contains("udpAddress") || force) { + ostr << " m_udpAddress: " << m_udpAddress.toStdString(); + } + if (settingsKeys.contains("udpPort") || force) { + ostr << " m_udpPort: " << m_udpPort; + } + if (settingsKeys.contains("characterSet") || force) { + ostr << " m_characterSet: " << m_characterSet; + } + if (settingsKeys.contains("suppressCRLF") || force) { + ostr << " m_suppressCRLF: " << m_suppressCRLF; + } + if (settingsKeys.contains("unshiftOnSpace") || force) { + ostr << " m_unshiftOnSpace: " << m_unshiftOnSpace; + } + if (settingsKeys.contains("filter") || force) { + ostr << " m_filter: " << m_filter; + } + if (settingsKeys.contains("atc") || force) { + ostr << " m_atc: " << m_atc; + } + if (settingsKeys.contains("msbFirst") || force) { + ostr << " m_msbFirst: " << m_msbFirst; + } + if (settingsKeys.contains("spaceHigh") || force) { + ostr << " m_spaceHigh: " << m_spaceHigh; + } + if (settingsKeys.contains("squelch") || force) { + ostr << " m_squelch: " << m_squelch; + } + if (settingsKeys.contains("rgbColor") || force) { + ostr << " m_rgbColor: " << m_rgbColor; + } + if (settingsKeys.contains("title") || force) { + ostr << " m_title: " << m_title.toStdString(); + } + if (settingsKeys.contains("streamIndex") || force) { + ostr << " m_streamIndex: " << m_streamIndex; + } + if (settingsKeys.contains("useReverseAPI") || force) { + ostr << " m_useReverseAPI: " << m_useReverseAPI; + } + if (settingsKeys.contains("reverseAPIAddress") || force) { + ostr << " m_reverseAPIAddress: " << m_reverseAPIAddress.toStdString(); + } + if (settingsKeys.contains("reverseAPIPort") || force) { + ostr << " m_reverseAPIPort: " << m_reverseAPIPort; + } + if (settingsKeys.contains("reverseAPIDeviceIndex") || force) { + ostr << " m_reverseAPIDeviceIndex: " << m_reverseAPIDeviceIndex; + } + if (settingsKeys.contains("reverseAPIChannelIndex") || force) { + ostr << " m_reverseAPIChannelIndex: " << m_reverseAPIChannelIndex; + } + if (settingsKeys.contains("scopeCh1") || force) { + ostr << " m_scopeCh1: " << m_scopeCh1; + } + if (settingsKeys.contains("scopeCh2") || force) { + ostr << " m_scopeCh2: " << m_scopeCh2; + } + if (settingsKeys.contains("logFilename") || force) { + ostr << " m_logFilename: " << m_logFilename.toStdString(); + } + if (settingsKeys.contains("logEnabled") || force) { + ostr << " m_logEnabled: " << m_logEnabled; + } + if (settingsKeys.contains("workspaceIndex") || force) { + ostr << " m_workspaceIndex: " << m_workspaceIndex; + } + if (settingsKeys.contains("hidden") || force) { + ostr << " m_hidden: " << m_hidden; + } + + return QString(ostr.str().c_str()); +} diff --git a/plugins/channelrx/demodrtty/rttydemodsettings.h b/plugins/channelrx/demodrtty/rttydemodsettings.h index 8864f6080..ca94cc2af 100644 --- a/plugins/channelrx/demodrtty/rttydemodsettings.h +++ b/plugins/channelrx/demodrtty/rttydemodsettings.h @@ -85,7 +85,8 @@ struct RttyDemodSettings void setScopeGUI(Serializable *scopeGUI) { m_scopeGUI = scopeGUI; } QByteArray serialize() const; bool deserialize(const QByteArray& data); + void applySettings(const QStringList& settingsKeys, const RttyDemodSettings& settings); + QString getDebugString(const QStringList& settingsKeys, bool force=false) const; }; #endif /* INCLUDE_RTTYDEMODSETTINGS_H */ - diff --git a/plugins/channelrx/demodrtty/rttydemodsink.cpp b/plugins/channelrx/demodrtty/rttydemodsink.cpp index 324d8c0e0..cca647bc8 100644 --- a/plugins/channelrx/demodrtty/rttydemodsink.cpp +++ b/plugins/channelrx/demodrtty/rttydemodsink.cpp @@ -51,7 +51,7 @@ RttyDemodSink::RttyDemodSink() : m_sampleBuffer.resize(m_sampleBufferSize); - applySettings(m_settings, true); + applySettings(QStringList(), m_settings, true); applyChannelSettings(m_channelSampleRate, m_channelFrequencyOffset, true); FFTFactory *fftFactory = DSPEngine::instance()->getFFTFactory(); @@ -581,24 +581,19 @@ void RttyDemodSink::init() m_rttyDecoder.init(); } -void RttyDemodSink::applySettings(const RttyDemodSettings& settings, bool force) +void RttyDemodSink::applySettings(const QStringList& settingsKeys, const RttyDemodSettings& settings, bool force) { - qDebug() << "RttyDemodSink::applySettings:" - << " m_rfBandwidth: " << settings.m_rfBandwidth - << " m_baudRate: " << settings.m_baudRate - << " m_frequencyShift: " << settings.m_frequencyShift - << " m_characterSet: " << settings.m_characterSet - << " m_unshiftOnSpace: " << settings.m_unshiftOnSpace - << " force: " << force; + qDebug() << "RttyDemodSink::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) RttyDemodSettings::RTTYDEMOD_CHANNEL_SAMPLE_RATE; m_interpolatorDistanceRemain = m_interpolatorDistance; } - if ((settings.m_baudRate != m_settings.m_baudRate) || (settings.m_filter != m_settings.m_filter) || force) + if ((settingsKeys.contains("baudRate") && (settings.m_baudRate != m_settings.m_baudRate)) || + (settingsKeys.contains("filter") && (settings.m_filter != m_settings.m_filter)) || force) { m_envelope1.create(301, RttyDemodSettings::RTTYDEMOD_CHANNEL_SAMPLE_RATE, 2); m_envelope2.create(301, RttyDemodSettings::RTTYDEMOD_CHANNEL_SAMPLE_RATE, 2); @@ -628,14 +623,15 @@ void RttyDemodSink::applySettings(const RttyDemodSettings& settings, bool force) //m_raisedCosine1.printTaps("rcos"); } - if ((settings.m_characterSet != m_settings.m_characterSet) || force) { + if ((settingsKeys.contains("characterSet") && (settings.m_characterSet != m_settings.m_characterSet)) || force) { m_rttyDecoder.setCharacterSet(settings.m_characterSet); } - if ((settings.m_unshiftOnSpace != m_settings.m_unshiftOnSpace) || force) { + if ((settingsKeys.contains("unshiftOnSpace") && (settings.m_unshiftOnSpace != m_settings.m_unshiftOnSpace)) || force) { m_rttyDecoder.setUnshiftOnSpace(settings.m_unshiftOnSpace); } - if ((settings.m_baudRate != m_settings.m_baudRate) || (settings.m_frequencyShift != m_settings.m_frequencyShift) || force) + if ((settingsKeys.contains("baudRate") && (settings.m_baudRate != m_settings.m_baudRate)) || + (settingsKeys.contains("frequencyShift") && (settings.m_frequencyShift != m_settings.m_frequencyShift)) || force) { delete[] m_exp; delete[] m_prods1; @@ -665,6 +661,9 @@ void RttyDemodSink::applySettings(const RttyDemodSettings& settings, bool force) m_freq2Average.reset(); } - m_settings = settings; + if (force) { + m_settings = settings; + } else { + m_settings.applySettings(settingsKeys, settings); + } } - diff --git a/plugins/channelrx/demodrtty/rttydemodsink.h b/plugins/channelrx/demodrtty/rttydemodsink.h index 96b91bbad..e35326d3b 100644 --- a/plugins/channelrx/demodrtty/rttydemodsink.h +++ b/plugins/channelrx/demodrtty/rttydemodsink.h @@ -46,7 +46,7 @@ public: void setScopeSink(ScopeVis* scopeSink) { m_scopeSink = scopeSink; } void applyChannelSettings(int channelSampleRate, int channelFrequencyOffset, bool force = false); - void applySettings(const RttyDemodSettings& settings, bool force = false); + void applySettings(const QStringList& settingsKeys, const RttyDemodSettings& settings, bool force = false); void setMessageQueueToChannel(MessageQueue *messageQueue) { m_messageQueueToChannel = messageQueue; } void setChannel(ChannelAPI *channel) { m_channel = channel; } @@ -165,4 +165,3 @@ private: }; #endif // INCLUDE_RTTYDEMODSINK_H - diff --git a/plugins/channelrx/demodssb/ssbdemod.cpp b/plugins/channelrx/demodssb/ssbdemod.cpp index c4a50220a..57d43d8ce 100644 --- a/plugins/channelrx/demodssb/ssbdemod.cpp +++ b/plugins/channelrx/demodssb/ssbdemod.cpp @@ -62,7 +62,7 @@ SSBDemod::SSBDemod(DeviceAPI *deviceAPI) : { setObjectName(m_channelId); - applySettings(m_settings, true); + applySettings(QStringList(), m_settings, true); m_deviceAPI->addChannelSink(this); m_deviceAPI->addChannelSinkAPI(this); @@ -172,7 +172,7 @@ void SSBDemod::start() m_thread->start(); - SSBDemodBaseband::MsgConfigureSSBDemodBaseband *msg = SSBDemodBaseband::MsgConfigureSSBDemodBaseband::create(m_settings, true); + SSBDemodBaseband::MsgConfigureSSBDemodBaseband *msg = SSBDemodBaseband::MsgConfigureSSBDemodBaseband::create(QStringList(), m_settings, true); m_basebandSink->getInputMessageQueue()->push(msg); m_running = true; @@ -199,7 +199,7 @@ bool SSBDemod::handleMessage(const Message& cmd) MsgConfigureSSBDemod& cfg = (MsgConfigureSSBDemod&) cmd; qDebug("SSBDemod::handleMessage: MsgConfigureSSBDemod"); - applySettings(cfg.getSettings(), cfg.getForce()); + applySettings(cfg.getSettingsKeys(), cfg.getSettings(), cfg.getForce()); return true; } @@ -236,122 +236,20 @@ void SSBDemod::setCenterFrequency(qint64 frequency) { SSBDemodSettings settings = m_settings; settings.m_inputFrequencyOffset = frequency; - applySettings(settings, false); + applySettings(QStringList("inputFrequencyOffset"), settings, false); if (m_guiMessageQueue) // forward to GUI if any { - MsgConfigureSSBDemod *msgToGUI = MsgConfigureSSBDemod::create(settings, false); + MsgConfigureSSBDemod *msgToGUI = MsgConfigureSSBDemod::create(QStringList("inputFrequencyOffset"), settings, false); m_guiMessageQueue->push(msgToGUI); } } -void SSBDemod::applySettings(const SSBDemodSettings& settings, bool force) +void SSBDemod::applySettings(const QStringList& settingsKeys, const SSBDemodSettings& settings, bool force) { - qDebug() << "SSBDemod::applySettings:" - << " m_inputFrequencyOffset: " << settings.m_inputFrequencyOffset - << " m_filterIndex: " << settings.m_filterIndex - << " [m_spanLog2: " << settings.m_filterBank[settings.m_filterIndex].m_spanLog2 - << " m_rfBandwidth: " << settings.m_filterBank[settings.m_filterIndex].m_rfBandwidth - << " m_lowCutoff: " << settings.m_filterBank[settings.m_filterIndex].m_lowCutoff - << " m_fftWindow: " << settings.m_filterBank[settings.m_filterIndex].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_agcClamping: " << settings.m_agcClamping - << " m_agcTimeLog2: " << settings.m_agcTimeLog2 - << " agcPowerThreshold: " << settings.m_agcPowerThreshold - << " agcThresholdGate: " << settings.m_agcThresholdGate - << " m_dnr: " << settings.m_dnr - << " m_dnrScheme: " << settings.m_dnrScheme - << " m_dnrAboveAvgFactor: " << settings.m_dnrAboveAvgFactor - << " m_dnrSigmaFactor: " << settings.m_dnrSigmaFactor - << " m_dnrNbPeaks: " << settings.m_dnrNbPeaks - << " m_dnrAlpha: " << settings.m_dnrAlpha - << " 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() << "SSBDemod::applySettings:" << settings.getDebugString(settingsKeys, force); - QList reverseAPIKeys; - - if ((m_settings.m_inputFrequencyOffset != settings.m_inputFrequencyOffset) || force) { - reverseAPIKeys.append("inputFrequencyOffset"); - } - if ((m_settings.m_filterIndex != settings.m_filterIndex) || force) { - reverseAPIKeys.append("filterIndex"); - } - if ((m_settings.m_filterBank[m_settings.m_filterIndex].m_spanLog2 != settings.m_filterBank[settings.m_filterIndex].m_spanLog2) || force) { - reverseAPIKeys.append("spanLog2"); - } - if ((m_settings.m_filterBank[m_settings.m_filterIndex].m_rfBandwidth != settings.m_filterBank[settings.m_filterIndex].m_rfBandwidth) || force) { - reverseAPIKeys.append("rfBandwidth"); - } - if ((m_settings.m_filterBank[m_settings.m_filterIndex].m_lowCutoff != settings.m_filterBank[settings.m_filterIndex].m_lowCutoff) || force) { - reverseAPIKeys.append("lowCutoff"); - } - if ((m_settings.m_filterBank[m_settings.m_filterIndex].m_fftWindow != settings.m_filterBank[settings.m_filterIndex].m_fftWindow) || force) { - reverseAPIKeys.append("fftWindow"); - } - if ((m_settings.m_volume != settings.m_volume) || force) { - reverseAPIKeys.append("volume"); - } - if ((m_settings.m_agcTimeLog2 != settings.m_agcTimeLog2) || force) { - reverseAPIKeys.append("agcTimeLog2"); - } - if ((m_settings.m_agcPowerThreshold != settings.m_agcPowerThreshold) || force) { - reverseAPIKeys.append("agcPowerThreshold"); - } - if ((m_settings.m_agcThresholdGate != settings.m_agcThresholdGate) || force) { - reverseAPIKeys.append("agcThresholdGate"); - } - if ((m_settings.m_agcClamping != settings.m_agcClamping) || force) { - reverseAPIKeys.append("agcClamping"); - } - if ((settings.m_audioDeviceName != m_settings.m_audioDeviceName) || force) { - reverseAPIKeys.append("audioDeviceName"); - } - if ((m_settings.m_audioBinaural != settings.m_audioBinaural) || force) { - reverseAPIKeys.append("audioBinaural"); - } - if ((m_settings.m_audioFlipChannels != settings.m_audioFlipChannels) || force) { - reverseAPIKeys.append("audioFlipChannels"); - } - if ((m_settings.m_dsb != settings.m_dsb) || force) { - reverseAPIKeys.append("dsb"); - } - if ((m_settings.m_audioMute != settings.m_audioMute) || force) { - reverseAPIKeys.append("audioMute"); - } - if ((m_settings.m_agc != settings.m_agc) || force) { - reverseAPIKeys.append("agc"); - } - if ((m_settings.m_dnr != settings.m_dnr) || force) { - reverseAPIKeys.append("dnr"); - } - if ((m_settings.m_dnrScheme != settings.m_dnrScheme) || force) { - reverseAPIKeys.append("dnrScheme"); - } - if ((m_settings.m_dnrAboveAvgFactor != settings.m_dnrAboveAvgFactor) || force) { - reverseAPIKeys.append("dnrAboveAvgFactor"); - } - if ((m_settings.m_dnrSigmaFactor != settings.m_dnrSigmaFactor) || force) { - reverseAPIKeys.append("dnrSigmaFactor"); - } - if ((m_settings.m_dnrNbPeaks != settings.m_dnrNbPeaks) || force) { - reverseAPIKeys.append("dnrNbPeaks"); - } - if ((m_settings.m_dnrAlpha != settings.m_dnrAlpha) || force) { - reverseAPIKeys.append("dnrAlpha"); - } - - if (m_settings.m_streamIndex != settings.m_streamIndex) + if (settingsKeys.contains("streamIndex")) { if (m_deviceAPI->getSampleMIMO()) // change of stream is possible for MIMO devices only { @@ -362,11 +260,9 @@ void SSBDemod::applySettings(const SSBDemodSettings& settings, bool force) m_settings.m_streamIndex = settings.m_streamIndex; // make sure ChannelAPI::getStreamIndex() is consistent emit streamIndexChanged(settings.m_streamIndex); } - - reverseAPIKeys.append("streamIndex"); } - if ((settings.m_dsb != m_settings.m_dsb) + if ((settingsKeys.contains("dsb") && (settings.m_dsb != m_settings.m_dsb)) || (settings.m_filterBank[settings.m_filterIndex].m_rfBandwidth != m_settings.m_filterBank[m_settings.m_filterIndex].m_rfBandwidth) || (settings.m_filterBank[settings.m_filterIndex].m_lowCutoff != m_settings.m_filterBank[m_settings.m_filterIndex].m_lowCutoff) || force) { @@ -379,28 +275,32 @@ void SSBDemod::applySettings(const SSBDemodSettings& settings, bool force) if (m_running) { - SSBDemodBaseband::MsgConfigureSSBDemodBaseband *msg = SSBDemodBaseband::MsgConfigureSSBDemodBaseband::create(settings, force); + SSBDemodBaseband::MsgConfigureSSBDemodBaseband *msg = SSBDemodBaseband::MsgConfigureSSBDemodBaseband::create(settingsKeys, settings, force); m_basebandSink->getInputMessageQueue()->push(msg); } if (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") || + (settingsKeys.contains("reverseAPIAddress")) || + (settingsKeys.contains("reverseAPIPort")) || + (settingsKeys.contains("reverseAPIDeviceIndex")) || + (settingsKeys.contains("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; + if (force || !settingsKeys.isEmpty()) { + m_settings = settings; + } else { + m_settings.applySettings(settingsKeys, settings); + } } QByteArray SSBDemod::serialize() const @@ -412,14 +312,14 @@ bool SSBDemod::deserialize(const QByteArray& data) { if (m_settings.deserialize(data)) { - MsgConfigureSSBDemod *msg = MsgConfigureSSBDemod::create(m_settings, true); + MsgConfigureSSBDemod *msg = MsgConfigureSSBDemod::create(QStringList(), m_settings, true); m_inputMessageQueue.push(msg); return true; } else { m_settings.resetToDefaults(); - MsgConfigureSSBDemod *msg = MsgConfigureSSBDemod::create(m_settings, true); + MsgConfigureSSBDemod *msg = MsgConfigureSSBDemod::create(QStringList(), m_settings, true); m_inputMessageQueue.push(msg); return false; } @@ -478,13 +378,13 @@ int SSBDemod::webapiSettingsPutPatch( SSBDemodSettings settings = m_settings; webapiUpdateChannelSettings(settings, channelSettingsKeys, response); - MsgConfigureSSBDemod *msg = MsgConfigureSSBDemod::create(settings, force); + MsgConfigureSSBDemod *msg = MsgConfigureSSBDemod::create(channelSettingsKeys, settings, force); m_inputMessageQueue.push(msg); qDebug("SSBDemod::webapiSettingsPutPatch: forward to GUI: %p", m_guiMessageQueue); if (m_guiMessageQueue) // forward to GUI if any { - MsgConfigureSSBDemod *msgToGUI = MsgConfigureSSBDemod::create(settings, force); + MsgConfigureSSBDemod *msgToGUI = MsgConfigureSSBDemod::create(channelSettingsKeys, settings, force); m_guiMessageQueue->push(msgToGUI); } @@ -721,7 +621,7 @@ void SSBDemod::webapiFormatChannelReport(SWGSDRangel::SWGChannelReport& response } } -void SSBDemod::webapiReverseSendSettings(QList& channelSettingsKeys, const SSBDemodSettings& settings, bool force) +void SSBDemod::webapiReverseSendSettings(const QList& channelSettingsKeys, const SSBDemodSettings& settings, bool force) { SWGSDRangel::SWGChannelSettings *swgChannelSettings = new SWGSDRangel::SWGChannelSettings(); webapiFormatChannelSettings(channelSettingsKeys, swgChannelSettings, settings, force); @@ -748,7 +648,7 @@ void SSBDemod::webapiReverseSendSettings(QList& channelSettingsKeys, co void SSBDemod::sendChannelSettings( const QList& pipes, - QList& channelSettingsKeys, + const QList& channelSettingsKeys, const SSBDemodSettings& settings, bool force) { @@ -774,7 +674,7 @@ void SSBDemod::sendChannelSettings( } void SSBDemod::webapiFormatChannelSettings( - QList& channelSettingsKeys, + const QList& channelSettingsKeys, SWGSDRangel::SWGChannelSettings *swgChannelSettings, const SSBDemodSettings& settings, bool force diff --git a/plugins/channelrx/demodssb/ssbdemod.h b/plugins/channelrx/demodssb/ssbdemod.h index c2f7e94b7..89de0e303 100644 --- a/plugins/channelrx/demodssb/ssbdemod.h +++ b/plugins/channelrx/demodssb/ssbdemod.h @@ -49,20 +49,23 @@ public: public: const SSBDemodSettings& getSettings() const { return m_settings; } + const QStringList& getSettingsKeys() const { return m_settingsKeys; } bool getForce() const { return m_force; } - static MsgConfigureSSBDemod* create(const SSBDemodSettings& settings, bool force) + static MsgConfigureSSBDemod* create(const QStringList& settingsKeys, const SSBDemodSettings& settings, bool force) { - return new MsgConfigureSSBDemod(settings, force); + return new MsgConfigureSSBDemod(settingsKeys, settings, force); } private: SSBDemodSettings m_settings; + QStringList m_settingsKeys; bool m_force; - MsgConfigureSSBDemod(const SSBDemodSettings& settings, bool force) : + MsgConfigureSSBDemod(const QStringList& settingsKeys, const SSBDemodSettings& settings, bool force) : Message(), m_settings(settings), + m_settingsKeys(settingsKeys), m_force(force) { } }; @@ -162,18 +165,18 @@ private: QNetworkRequest m_networkRequest; virtual bool handleMessage(const Message& cmd); - void applySettings(const SSBDemodSettings& settings, bool force = false); + void applySettings(const QStringList& settingsKeys, const SSBDemodSettings& settings, bool force = false); void sendSampleRateToDemodAnalyzer(); void webapiFormatChannelReport(SWGSDRangel::SWGChannelReport& response); - void webapiReverseSendSettings(QList& channelSettingsKeys, const SSBDemodSettings& settings, bool force); + void webapiReverseSendSettings(const QList& channelSettingsKeys, const SSBDemodSettings& settings, bool force); void sendChannelSettings( const QList& pipes, - QList& channelSettingsKeys, + const QList& channelSettingsKeys, const SSBDemodSettings& settings, bool force ); void webapiFormatChannelSettings( - QList& channelSettingsKeys, + const QList& channelSettingsKeys, SWGSDRangel::SWGChannelSettings *swgChannelSettings, const SSBDemodSettings& settings, bool force diff --git a/plugins/channelrx/demodssb/ssbdemodbaseband.cpp b/plugins/channelrx/demodssb/ssbdemodbaseband.cpp index a90e8017a..ca4b3ab59 100644 --- a/plugins/channelrx/demodssb/ssbdemodbaseband.cpp +++ b/plugins/channelrx/demodssb/ssbdemodbaseband.cpp @@ -120,7 +120,7 @@ bool SSBDemodBaseband::handleMessage(const Message& cmd) MsgConfigureSSBDemodBaseband& cfg = (MsgConfigureSSBDemodBaseband&) cmd; qDebug() << "SSBDemodBaseband::handleMessage: MsgConfigureSSBDemodBaseband"; - applySettings(cfg.getSettings(), cfg.getForce()); + applySettings(cfg.getSettingsKeys(), cfg.getSettings(), cfg.getForce()); return true; } @@ -176,9 +176,9 @@ bool SSBDemodBaseband::handleMessage(const Message& cmd) } } -void SSBDemodBaseband::applySettings(const SSBDemodSettings& settings, bool force) +void SSBDemodBaseband::applySettings(const QStringList& settingsKeys, const SSBDemodSettings& settings, bool force) { - if ((settings.m_inputFrequencyOffset != m_settings.m_inputFrequencyOffset) || force) + if ((settingsKeys.contains("inputFrequencyOffset")) || force) { m_channelizer.setChannelization(m_audioSampleRate, settings.m_inputFrequencyOffset); m_sink.applyChannelSettings(m_channelizer.getChannelSampleRate(), m_channelizer.getChannelFrequencyOffset()); @@ -199,7 +199,7 @@ void SSBDemodBaseband::applySettings(const SSBDemodSettings& settings, bool forc } } - if ((settings.m_audioDeviceName != m_settings.m_audioDeviceName) || force) + if ((settingsKeys.contains("audioDeviceName")) || force) { AudioDeviceManager *audioDeviceManager = DSPEngine::instance()->getAudioDeviceManager(); int audioDeviceIndex = audioDeviceManager->getOutputDeviceIndex(settings.m_audioDeviceName); @@ -227,9 +227,13 @@ void SSBDemodBaseband::applySettings(const SSBDemodSettings& settings, bool forc } } - 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 SSBDemodBaseband::getChannelSampleRate() const diff --git a/plugins/channelrx/demodssb/ssbdemodbaseband.h b/plugins/channelrx/demodssb/ssbdemodbaseband.h index ed7ab5f81..91cc60754 100644 --- a/plugins/channelrx/demodssb/ssbdemodbaseband.h +++ b/plugins/channelrx/demodssb/ssbdemodbaseband.h @@ -41,20 +41,23 @@ public: public: const SSBDemodSettings& getSettings() const { return m_settings; } + const QStringList& getSettingsKeys() const { return m_settingsKeys; } bool getForce() const { return m_force; } - static MsgConfigureSSBDemodBaseband* create(const SSBDemodSettings& settings, bool force) + static MsgConfigureSSBDemodBaseband* create(const QStringList& settingsKeys, const SSBDemodSettings& settings, bool force) { - return new MsgConfigureSSBDemodBaseband(settings, force); + return new MsgConfigureSSBDemodBaseband(settingsKeys, settings, force); } private: SSBDemodSettings m_settings; + QStringList m_settingsKeys; bool m_force; - MsgConfigureSSBDemodBaseband(const SSBDemodSettings& settings, bool force) : + MsgConfigureSSBDemodBaseband(const QStringList& settingsKeys, const SSBDemodSettings& 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 SSBDemodSettings& settings, bool force = false); + void applySettings(const QStringList& settingsKeys, const SSBDemodSettings& settings, bool force = false); MessageQueue *getMessageQueueToGUI() { return m_messageQueueToGUI; } private slots: diff --git a/plugins/channelrx/demodssb/ssbdemodgui.cpp b/plugins/channelrx/demodssb/ssbdemodgui.cpp index 879022832..f3e4e60d5 100644 --- a/plugins/channelrx/demodssb/ssbdemodgui.cpp +++ b/plugins/channelrx/demodssb/ssbdemodgui.cpp @@ -142,7 +142,7 @@ void SSBDemodGUI::channelMarkerChangedByCursor() { ui->deltaFrequency->setValue(m_channelMarker.getCenterFrequency()); m_settings.m_inputFrequencyOffset = m_channelMarker.getCenterFrequency(); - applySettings(); + applySettings(QStringList("inputFrequencyOffset")); } void SSBDemodGUI::channelMarkerHighlightedByCursor() @@ -154,14 +154,14 @@ void SSBDemodGUI::on_audioBinaural_toggled(bool binaural) { m_audioBinaural = binaural; m_settings.m_audioBinaural = binaural; - applySettings(); + applySettings(QStringList("audioBinaural")); } void SSBDemodGUI::on_audioFlipChannels_toggled(bool flip) { m_audioFlipChannels = flip; m_settings.m_audioFlipChannels = flip; - applySettings(); + applySettings(QStringList("audioFlipChannels")); } void SSBDemodGUI::on_dsb_toggled(bool dsb) @@ -175,7 +175,7 @@ void SSBDemodGUI::on_deltaFrequency_changed(qint64 value) m_channelMarker.setCenterFrequency(value); m_settings.m_inputFrequencyOffset = m_channelMarker.getCenterFrequency(); updateAbsoluteCenterFrequency(); - applySettings(); + applySettings(QStringList("inputFrequencyOffset")); } void SSBDemodGUI::on_BW_valueChanged(int value) @@ -195,27 +195,27 @@ void SSBDemodGUI::on_volume_valueChanged(int value) { ui->volumeText->setText(QString("%1").arg(value)); m_settings.m_volume = CalcDb::powerFromdB(value); - applySettings(); + applySettings(QStringList("volume")); } void SSBDemodGUI::on_agc_toggled(bool checked) { m_settings.m_agc = checked; - applySettings(); + applySettings(QStringList("agc")); displayAGC(); } void SSBDemodGUI::on_agcClamping_toggled(bool checked) { m_settings.m_agcClamping = checked; - applySettings(); + applySettings(QStringList("agcClamping")); } void SSBDemodGUI::on_dnr_toggled(bool checked) { m_settings.m_dnr = checked; m_settings.m_filterBank[m_settings.m_filterIndex].m_dnr = m_settings.m_dnr; - applySettings(); + applySettings(QStringList({"dnr", "filterBank"})); } void SSBDemodGUI::on_agcTimeLog2_valueChanged(int value) @@ -223,14 +223,14 @@ void SSBDemodGUI::on_agcTimeLog2_valueChanged(int value) QString s = QString::number((1<agcTimeText->setText(s); m_settings.m_agcTimeLog2 = value; - applySettings(); + applySettings(QStringList("agcTimeLog2")); } void SSBDemodGUI::on_agcPowerThreshold_valueChanged(int value) { displayAGCPowerThreshold(value); m_settings.m_agcPowerThreshold = value; - applySettings(); + applySettings(QStringList("agcPowerThreshold")); } void SSBDemodGUI::on_agcThresholdGate_valueChanged(int value) @@ -239,14 +239,14 @@ void SSBDemodGUI::on_agcThresholdGate_valueChanged(int value) QString s = QString::number(agcThresholdGate, 'f', 0); ui->agcThresholdGateText->setText(s); m_settings.m_agcThresholdGate = agcThresholdGate; - applySettings(); + applySettings(QStringList("agcThresholdGate")); } void SSBDemodGUI::on_audioMute_toggled(bool checked) { m_audioMute = checked; m_settings.m_audioMute = checked; - applySettings(); + applySettings(QStringList("audioMute")); } void SSBDemodGUI::on_spanLog2_valueChanged(int value) @@ -258,6 +258,8 @@ void SSBDemodGUI::on_spanLog2_valueChanged(int value) } applyBandwidths(s2max - ui->spanLog2->value()); + m_settings.m_filterBank[m_settings.m_filterIndex].m_spanLog2 = s2max - ui->spanLog2->value(); + applySettings(QStringList({"spanLog2", "filterBank"})); } void SSBDemodGUI::on_flipSidebands_clicked(bool checked) @@ -272,7 +274,7 @@ void SSBDemodGUI::on_flipSidebands_clicked(bool checked) void SSBDemodGUI::on_fftWindow_currentIndexChanged(int index) { m_settings.m_filterBank[m_settings.m_filterIndex].m_fftWindow = (FFTWindow::Function) index; - applySettings(); + applySettings(QStringList({"fftWindow", "filterBank"})); } void SSBDemodGUI::on_filterIndex_valueChanged(int value) @@ -339,7 +341,16 @@ void SSBDemodGUI::onMenuDialogCalled(const QPoint &p) updateIndexLabel(); } - applySettings(); + applySettings(QStringList({ + "rgbColor", + "title", + "useReverseAPI", + "reverseAPIAddress", + "reverseAPIPort", + "reverseAPIDeviceIndex", + "reverseAPIChannelIndex", + "streamIndex" + })); } resetContextMenuType(); @@ -351,7 +362,7 @@ void SSBDemodGUI::onWidgetRolled(QWidget* widget, bool rollDown) (void) rollDown; getRollupContents()->saveState(m_rollupState); - applySettings(); + applySettings(QStringList()); } SSBDemodGUI::SSBDemodGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, BasebandSampleSink *rxChannel, QWidget* parent) : @@ -458,11 +469,11 @@ bool SSBDemodGUI::blockApplySettings(bool block) return ret; } -void SSBDemodGUI::applySettings(bool force) +void SSBDemodGUI::applySettings(const QStringList& channelSettingsKeys, bool force) { if (m_doApplySettings) { - SSBDemod::MsgConfigureSSBDemod* message = SSBDemod::MsgConfigureSSBDemod::create( m_settings, force); + SSBDemod::MsgConfigureSSBDemod* message = SSBDemod::MsgConfigureSSBDemod::create(channelSettingsKeys, m_settings, force); m_ssbDemod->getInputMessageQueue()->push(message); } } @@ -597,7 +608,13 @@ void SSBDemodGUI::applyBandwidths(unsigned int spanLog2, bool force) m_settings.m_filterBank[m_settings.m_filterIndex].m_rfBandwidth = bw * 100; m_settings.m_filterBank[m_settings.m_filterIndex].m_lowCutoff = lw * 100; - applySettings(force); + applySettings(QStringList({ + "dsb", + "spanLog2", + "rfBandwidth", + "lowCutoff", + "filterBank" + }), force); bool wasBlocked = blockApplySettings(true); m_channelMarker.setBandwidth(bw * 200); @@ -772,7 +789,7 @@ void SSBDemodGUI::audioSelect(const QPoint& p) if (audioSelect.m_selected) { m_settings.m_audioDeviceName = audioSelect.m_audioDeviceName; - applySettings(); + applySettings(QStringList("audioDeviceName")); } } @@ -805,27 +822,27 @@ void SSBDemodGUI::dnrSetup(int32_t iValueChanged) case FFTNRDialog::ValueChanged::ChangedScheme: m_settings.m_dnrScheme = m_fftNRDialog->getScheme(); m_settings.m_filterBank[m_settings.m_filterIndex].m_dnrScheme = m_settings.m_dnrScheme; - applySettings(); + applySettings(QStringList({"dnrScheme", "filterBank"})); break; case FFTNRDialog::ValueChanged::ChangedAboveAvgFactor: m_settings.m_dnrAboveAvgFactor = m_fftNRDialog->getAboveAvgFactor(); m_settings.m_filterBank[m_settings.m_filterIndex].m_dnrAboveAvgFactor = m_settings.m_dnrAboveAvgFactor; - applySettings(); + applySettings(QStringList({"dnrAboveAvgFactor", "filterBank"})); break; case FFTNRDialog::ValueChanged::ChangedSigmaFactor: m_settings.m_dnrSigmaFactor = m_fftNRDialog->getSigmaFactor(); m_settings.m_filterBank[m_settings.m_filterIndex].m_dnrSigmaFactor = m_settings.m_dnrSigmaFactor; - applySettings(); + applySettings(QStringList({"dnrSigmaFactor", "filterBank"})); break; case FFTNRDialog::ValueChanged::ChangedNbPeaks: m_settings.m_dnrNbPeaks = m_fftNRDialog->getNbPeaks(); m_settings.m_filterBank[m_settings.m_filterIndex].m_dnrNbPeaks = m_settings.m_dnrNbPeaks; - applySettings(); + applySettings(QStringList({"dnrNbPeaks", "filterBank"})); break; case FFTNRDialog::ValueChanged::ChangedAlpha: m_settings.m_dnrAlpha = m_fftNRDialog->getAlpha(); m_settings.m_filterBank[m_settings.m_filterIndex].m_dnrAlpha = m_settings.m_dnrAlpha; - applySettings(); + applySettings(QStringList({"dnrAlpha", "filterBank"})); break; default: break; diff --git a/plugins/channelrx/demodssb/ssbdemodgui.h b/plugins/channelrx/demodssb/ssbdemodgui.h index 9fa2a9ae7..df4f3f3db 100644 --- a/plugins/channelrx/demodssb/ssbdemodgui.h +++ b/plugins/channelrx/demodssb/ssbdemodgui.h @@ -98,7 +98,7 @@ private: virtual ~SSBDemodGUI(); bool blockApplySettings(bool block); - void applySettings(bool force = false); + void applySettings(const QStringList& channelSettingsKeys, bool force = false); void applyBandwidths(unsigned int spanLog2, bool force = false); unsigned int spanLog2Max(); void displaySettings(); diff --git a/plugins/channelrx/demodssb/ssbdemodsettings.cpp b/plugins/channelrx/demodssb/ssbdemodsettings.cpp index 4758be76a..83edb3e4b 100644 --- a/plugins/channelrx/demodssb/ssbdemodsettings.cpp +++ b/plugins/channelrx/demodssb/ssbdemodsettings.cpp @@ -235,3 +235,195 @@ bool SSBDemodSettings::deserialize(const QByteArray& data) return false; } } + +void SSBDemodSettings::applySettings(const QStringList& settingsKeys, const SSBDemodSettings& settings) +{ + if (settingsKeys.contains("inputFrequencyOffset")) { + m_inputFrequencyOffset = settings.m_inputFrequencyOffset; + } + if (settingsKeys.contains("volume")) { + m_volume = settings.m_volume; + } + if (settingsKeys.contains("audioBinaural")) { + m_audioBinaural = settings.m_audioBinaural; + } + if (settingsKeys.contains("audioFlipChannels")) { + m_audioFlipChannels = settings.m_audioFlipChannels; + } + if (settingsKeys.contains("dsb")) { + m_dsb = settings.m_dsb; + } + if (settingsKeys.contains("audioMute")) { + m_audioMute = settings.m_audioMute; + } + if (settingsKeys.contains("agc")) { + m_agc = settings.m_agc; + } + if (settingsKeys.contains("agcClamping")) { + m_agcClamping = settings.m_agcClamping; + } + if (settingsKeys.contains("agcTimeLog2")) { + m_agcTimeLog2 = settings.m_agcTimeLog2; + } + if (settingsKeys.contains("agcPowerThreshold")) { + m_agcPowerThreshold = settings.m_agcPowerThreshold; + } + if (settingsKeys.contains("agcThresholdGate")) { + m_agcThresholdGate = settings.m_agcThresholdGate; + } + if (settingsKeys.contains("dnr")) { + m_dnr = settings.m_dnr; + } + if (settingsKeys.contains("dnrScheme")) { + m_dnrScheme = settings.m_dnrScheme; + } + if (settingsKeys.contains("dnrAboveAvgFactor")) { + m_dnrAboveAvgFactor = settings.m_dnrAboveAvgFactor; + } + if (settingsKeys.contains("dnrSigmaFactor")) { + m_dnrSigmaFactor = settings.m_dnrSigmaFactor; + } + if (settingsKeys.contains("dnrNbPeaks")) { + m_dnrNbPeaks = settings.m_dnrNbPeaks; + } + if (settingsKeys.contains("dnrAlpha")) { + m_dnrAlpha = settings.m_dnrAlpha; + } + if (settingsKeys.contains("rgbColor")) { + m_rgbColor = settings.m_rgbColor; + } + if (settingsKeys.contains("title")) { + m_title = settings.m_title; + } + if (settingsKeys.contains("audioDeviceName")) { + m_audioDeviceName = settings.m_audioDeviceName; + } + if (settingsKeys.contains("streamIndex")) { + m_streamIndex = settings.m_streamIndex; + } + if (settingsKeys.contains("useReverseAPI")) { + m_useReverseAPI = settings.m_useReverseAPI; + } + if (settingsKeys.contains("reverseAPIAddress")) { + m_reverseAPIAddress = settings.m_reverseAPIAddress; + } + if (settingsKeys.contains("reverseAPIPort")) { + m_reverseAPIPort = settings.m_reverseAPIPort; + } + if (settingsKeys.contains("reverseAPIDeviceIndex")) { + m_reverseAPIDeviceIndex = settings.m_reverseAPIDeviceIndex; + } + if (settingsKeys.contains("reverseAPIChannelIndex")) { + m_reverseAPIChannelIndex = settings.m_reverseAPIChannelIndex; + } + if (settingsKeys.contains("workspaceIndex")) { + m_workspaceIndex = settings.m_workspaceIndex; + } + if (settingsKeys.contains("geometryBytes")) { + m_geometryBytes = settings.m_geometryBytes; + } + if (settingsKeys.contains("hidden")) { + m_hidden = settings.m_hidden; + } + if (settingsKeys.contains("filterBank")) { + m_filterBank = settings.m_filterBank; + } + if (settingsKeys.contains("filterIndex")) { + m_filterIndex = settings.m_filterIndex; + } +} + +QString SSBDemodSettings::getDebugString(const QStringList& settingsKeys, bool force) const +{ + std::ostringstream ostr; + + if (settingsKeys.contains("inputFrequencyOffset") || force) { + ostr << " m_inputFrequencyOffset: " << m_inputFrequencyOffset; + } + if (settingsKeys.contains("volume") || force) { + ostr << " m_volume: " << m_volume; + } + if (settingsKeys.contains("audioBinaural") || force) { + ostr << " m_audioBinaural: " << m_audioBinaural; + } + if (settingsKeys.contains("audioFlipChannels") || force) { + ostr << " m_audioFlipChannels: " << m_audioFlipChannels; + } + if (settingsKeys.contains("dsb") || force) { + ostr << " m_dsb: " << m_dsb; + } + if (settingsKeys.contains("audioMute") || force) { + ostr << " m_audioMute: " << m_audioMute; + } + if (settingsKeys.contains("agc") || force) { + ostr << " m_agc: " << m_agc; + } + if (settingsKeys.contains("agcClamping") || force) { + ostr << " m_agcClamping: " << m_agcClamping; + } + if (settingsKeys.contains("agcTimeLog2") || force) { + ostr << " m_agcTimeLog2: " << m_agcTimeLog2; + } + if (settingsKeys.contains("agcPowerThreshold") || force) { + ostr << " m_agcPowerThreshold: " << m_agcPowerThreshold; + } + if (settingsKeys.contains("agcThresholdGate") || force) { + ostr << " m_agcThresholdGate: " << m_agcThresholdGate; + } + if (settingsKeys.contains("dnr") || force) { + ostr << " m_dnr: " << m_dnr; + } + if (settingsKeys.contains("dnrScheme") || force) { + ostr << " m_dnrScheme: " << m_dnrScheme; + } + if (settingsKeys.contains("dnrAboveAvgFactor") || force) { + ostr << " m_dnrAboveAvgFactor: " << m_dnrAboveAvgFactor; + } + if (settingsKeys.contains("dnrSigmaFactor") || force) { + ostr << " m_dnrSigmaFactor: " << m_dnrSigmaFactor; + } + if (settingsKeys.contains("dnrNbPeaks") || force) { + ostr << " m_dnrNbPeaks: " << m_dnrNbPeaks; + } + if (settingsKeys.contains("dnrAlpha") || force) { + ostr << " m_dnrAlpha: " << m_dnrAlpha; + } + if (settingsKeys.contains("rgbColor") || force) { + ostr << " m_rgbColor: " << m_rgbColor; + } + if (settingsKeys.contains("title") || force) { + ostr << " m_title: " << m_title.toStdString(); + } + if (settingsKeys.contains("audioDeviceName") || force) { + ostr << " m_audioDeviceName: " << m_audioDeviceName.toStdString(); + } + if (settingsKeys.contains("streamIndex") || force) { + ostr << " m_streamIndex: " << m_streamIndex; + } + if (settingsKeys.contains("useReverseAPI") || force) { + ostr << " m_useReverseAPI: " << m_useReverseAPI; + } + if (settingsKeys.contains("reverseAPIAddress") || force) { + ostr << " m_reverseAPIAddress: " << m_reverseAPIAddress.toStdString(); + } + if (settingsKeys.contains("reverseAPIPort") || force) { + ostr << " m_reverseAPIPort: " << m_reverseAPIPort; + } + if (settingsKeys.contains("reverseAPIDeviceIndex") || force) { + ostr << " m_reverseAPIDeviceIndex: " << m_reverseAPIDeviceIndex; + } + if (settingsKeys.contains("reverseAPIChannelIndex") || force) { + ostr << " m_reverseAPIChannelIndex: " << m_reverseAPIChannelIndex; + } + if (settingsKeys.contains("workspaceIndex") || force) { + ostr << " m_workspaceIndex: " << m_workspaceIndex; + } + if (settingsKeys.contains("hidden") || force) { + ostr << " m_hidden: " << m_hidden; + } + if (settingsKeys.contains("filterIndex") || force) { + ostr << " m_filterIndex: " << m_filterIndex; + } + + return QString(ostr.str().c_str()); +} diff --git a/plugins/channelrx/demodssb/ssbdemodsettings.h b/plugins/channelrx/demodssb/ssbdemodsettings.h index 47b33ed8e..bf3e19482 100644 --- a/plugins/channelrx/demodssb/ssbdemodsettings.h +++ b/plugins/channelrx/demodssb/ssbdemodsettings.h @@ -98,6 +98,8 @@ struct SSBDemodSettings void setRollupState(Serializable *rollupState) { m_rollupState = rollupState; } QByteArray serialize() const; bool deserialize(const QByteArray& data); + void applySettings(const QStringList& settingsKeys, const SSBDemodSettings& settings); + QString getDebugString(const QStringList& settingsKeys, bool force=false) const; static const int m_minPowerThresholdDB; static const float m_mminPowerThresholdDBf; diff --git a/plugins/channelrx/demodssb/ssbdemodsink.cpp b/plugins/channelrx/demodssb/ssbdemodsink.cpp index 42c9e2ef2..3eda06678 100644 --- a/plugins/channelrx/demodssb/ssbdemodsink.cpp +++ b/plugins/channelrx/demodssb/ssbdemodsink.cpp @@ -76,7 +76,7 @@ SSBDemodSink::SSBDemodSink() : m_lowpassQ.create(101, m_audioSampleRate, m_Bandwidth * 1.2); applyChannelSettings(m_channelSampleRate, m_channelFrequencyOffset, true); - applySettings(m_settings, true); + applySettings(QStringList(), m_settings, true); } SSBDemodSink::~SSBDemodSink() @@ -342,39 +342,9 @@ void SSBDemodSink::applyAudioSampleRate(int sampleRate) } } -void SSBDemodSink::applySettings(const SSBDemodSettings& settings, bool force) +void SSBDemodSink::applySettings(const QStringList& settingsKeys, const SSBDemodSettings& settings, bool force) { - qDebug() << "SSBDemodSink::applySettings:" - << " m_inputFrequencyOffset: " << settings.m_inputFrequencyOffset - << " m_filterIndex: " << settings.m_filterIndex - << " [m_spanLog2: " << settings.m_filterBank[settings.m_filterIndex].m_spanLog2 - << " m_rfBandwidth: " << settings.m_filterBank[settings.m_filterIndex].m_rfBandwidth - << " m_lowCutoff: " << settings.m_filterBank[settings.m_filterIndex].m_lowCutoff - << " m_fftWindow: " << settings.m_filterBank[settings.m_filterIndex].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_agcClamping: " << settings.m_agcClamping - << " m_agcTimeLog2: " << settings.m_agcTimeLog2 - << " agcPowerThreshold: " << settings.m_agcPowerThreshold - << " agcThresholdGate: " << settings.m_agcThresholdGate - << " m_dnr: " << settings.m_dnr - << " m_dnrScheme: " << settings.m_dnrScheme - << " m_dnrAboveAvgFactor: " << settings.m_dnrAboveAvgFactor - << " m_dnrSigmaFactor: " << settings.m_dnrSigmaFactor - << " m_dnrNbPeaks: " << settings.m_dnrNbPeaks - << " m_dnrAlpha: " << settings.m_dnrAlpha - << " 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() << "SSBDemodSink::applySettings:" << settings.getDebugString(settingsKeys, force); if((m_settings.m_filterBank[m_settings.m_filterIndex].m_rfBandwidth != settings.m_filterBank[settings.m_filterIndex].m_rfBandwidth) || (m_settings.m_filterBank[m_settings.m_filterIndex].m_lowCutoff != settings.m_filterBank[settings.m_filterIndex].m_lowCutoff) || @@ -412,16 +382,16 @@ void SSBDemodSink::applySettings(const SSBDemodSettings& settings, bool force) m_lowpassQ.create(101, m_audioSampleRate, m_Bandwidth * 1.2); } - if ((m_settings.m_volume != settings.m_volume) || force) + if ((settingsKeys.contains("volume")) || force) { m_volume = settings.m_volume; m_volume /= 4.0; // for 3276.8 } - if ((m_settings.m_agcTimeLog2 != settings.m_agcTimeLog2) || - (m_settings.m_agcPowerThreshold != settings.m_agcPowerThreshold) || - (m_settings.m_agcThresholdGate != settings.m_agcThresholdGate) || - (m_settings.m_agcClamping != settings.m_agcClamping) || force) + if ((settingsKeys.contains("agcTimeLog2")) || + (settingsKeys.contains("agcPowerThreshold")) || + (settingsKeys.contains("agcThresholdGate")) || + (settingsKeys.contains("agcClamping")) || force) { int agcNbSamples = (m_audioSampleRate / 1000) * (1<setDNRScheme((FFTNoiseReduction::Scheme) settings.m_dnrScheme); } - if ((m_settings.m_dnrAboveAvgFactor != settings.m_dnrAboveAvgFactor) || force) { + if ((settingsKeys.contains("dnrAboveAvgFactor")) || force) { SSBFilter->setDNRAboveAvgFactor(settings.m_dnrAboveAvgFactor); } - if ((m_settings.m_dnrSigmaFactor != settings.m_dnrSigmaFactor) || force) { + if ((settingsKeys.contains("dnrSigmaFactor")) || force) { SSBFilter->setDNRSigmaFactor(settings.m_dnrSigmaFactor); } - if ((m_settings.m_dnrNbPeaks != settings.m_dnrNbPeaks) || force) { + if ((settingsKeys.contains("dnrNbPeaks")) || force) { SSBFilter->setDNRNbPeaks(settings.m_dnrNbPeaks); } - if ((m_settings.m_dnrAlpha != settings.m_dnrAlpha) || force) { + if ((settingsKeys.contains("dnrAlpha")) || force) { SSBFilter->setDNRAlpha(settings.m_dnrAlpha); } @@ -490,5 +460,10 @@ void SSBDemodSink::applySettings(const SSBDemodSettings& settings, bool force) m_dsb = settings.m_dsb; m_audioMute = settings.m_audioMute; m_agcActive = settings.m_agc; - m_settings = settings; + + if (force) { + m_settings = settings; + } else { + m_settings.applySettings(settingsKeys, settings); + } } diff --git a/plugins/channelrx/demodssb/ssbdemodsink.h b/plugins/channelrx/demodssb/ssbdemodsink.h index 918c00697..28ee4c37c 100644 --- a/plugins/channelrx/demodssb/ssbdemodsink.h +++ b/plugins/channelrx/demodssb/ssbdemodsink.h @@ -43,7 +43,7 @@ public: void setSpectrumSink(SpectrumVis* spectrumSink) { m_spectrumSink = spectrumSink; } void applyChannelSettings(int inputSampleRate, int inputFrequencyOffset, bool force = false); - void applySettings(const SSBDemodSettings& settings, bool force = false); + void applySettings(const QStringList& settingsKeys, const SSBDemodSettings& settings, bool force = false); void applyAudioSampleRate(int sampleRate); AudioFifo *getAudioFifo() { return &m_audioFifo; } diff --git a/plugins/channelrx/demodvor/vordemod.cpp b/plugins/channelrx/demodvor/vordemod.cpp index fe6392ea6..f9a47fa5b 100644 --- a/plugins/channelrx/demodvor/vordemod.cpp +++ b/plugins/channelrx/demodvor/vordemod.cpp @@ -60,7 +60,7 @@ VORDemod::VORDemod(DeviceAPI *deviceAPI) : m_basebandSampleRate(0) { setObjectName(m_channelId); - applySettings(m_settings, true); + applySettings(QStringList(), m_settings, true); m_deviceAPI->addChannelSink(this); m_deviceAPI->addChannelSinkAPI(this); @@ -143,7 +143,7 @@ void VORDemod::start() DSPSignalNotification *dspMsg = new DSPSignalNotification(m_basebandSampleRate, m_centerFrequency); m_basebandSink->getInputMessageQueue()->push(dspMsg); - VORDemodBaseband::MsgConfigureVORDemodBaseband *msg = VORDemodBaseband::MsgConfigureVORDemodBaseband::create(m_settings, true); + VORDemodBaseband::MsgConfigureVORDemodBaseband *msg = VORDemodBaseband::MsgConfigureVORDemodBaseband::create(QStringList(), m_settings, true); m_basebandSink->getInputMessageQueue()->push(msg); m_running = true; @@ -168,7 +168,7 @@ bool VORDemod::handleMessage(const Message& cmd) { MsgConfigureVORDemod& cfg = (MsgConfigureVORDemod&) cmd; qDebug() << "VORDemod::handleMessage: MsgConfigureVORDemod"; - applySettings(cfg.getSettings(), cfg.getForce()); + applySettings(cfg.getSettingsKeys(), cfg.getSettings(), cfg.getForce()); return true; } @@ -247,65 +247,20 @@ void VORDemod::setCenterFrequency(qint64 frequency) { VORDemodSettings settings = m_settings; settings.m_inputFrequencyOffset = frequency; - applySettings(settings, false); + applySettings(QStringList("inputFrequencyOffset"), settings, false); if (m_guiMessageQueue) // forward to GUI if any { - MsgConfigureVORDemod *msgToGUI = MsgConfigureVORDemod::create(settings, false); + MsgConfigureVORDemod *msgToGUI = MsgConfigureVORDemod::create(QStringList("inputFrequencyOffset"), settings, false); m_guiMessageQueue->push(msgToGUI); } } -void VORDemod::applySettings(const VORDemodSettings& settings, bool force) +void VORDemod::applySettings(const QStringList& settingsKeys, const VORDemodSettings& settings, bool force) { - qDebug() << "VORDemod::applySettings:" - << " m_inputFrequencyOffset: " << settings.m_inputFrequencyOffset - << " m_navId: " << settings.m_navId - << " m_volume: " << settings.m_volume - << " m_squelch: " << settings.m_squelch - << " m_identBandpassEnable: " << settings.m_identBandpassEnable - << " m_audioMute: " << settings.m_audioMute - << " 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() << "VORDemod::applySettings:" << settings.getDebugString(settingsKeys, force); - QList reverseAPIKeys; - - if ((m_settings.m_inputFrequencyOffset != settings.m_inputFrequencyOffset) || force) { - reverseAPIKeys.append("inputFrequencyOffset"); - } - if ((m_settings.m_navId != settings.m_navId) || force) { - reverseAPIKeys.append("navId"); - - // Reset state so we don't report old data for new NavId - m_radial = 0.0f; - m_refMag = -200.0f; - m_varMag = -200.0f; - m_morseIdent = ""; - } - if ((m_settings.m_squelch != settings.m_squelch) || force) { - reverseAPIKeys.append("squelch"); - } - if ((settings.m_audioDeviceName != m_settings.m_audioDeviceName) || force) { - reverseAPIKeys.append("audioDeviceName"); - } - - if ((m_settings.m_audioMute != settings.m_audioMute) || force) { - reverseAPIKeys.append("audioMute"); - } - if ((m_settings.m_identBandpassEnable != settings.m_identBandpassEnable) || force) { - reverseAPIKeys.append("identBandpassEnable"); - } - if ((m_settings.m_volume != settings.m_volume) || force) { - reverseAPIKeys.append("volume"); - } - - 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 { @@ -316,35 +271,29 @@ void VORDemod::applySettings(const VORDemodSettings& settings, bool force) m_settings.m_streamIndex = settings.m_streamIndex; // make sure ChannelAPI::getStreamIndex() is consistent emit streamIndexChanged(settings.m_streamIndex); } - - reverseAPIKeys.append("streamIndex"); - } - - if ((m_settings.m_identThreshold != settings.m_identThreshold) || force) { - reverseAPIKeys.append("identThreshold"); } if (m_running) { - VORDemodBaseband::MsgConfigureVORDemodBaseband *msg = VORDemodBaseband::MsgConfigureVORDemodBaseband::create(settings, force); + VORDemodBaseband::MsgConfigureVORDemodBaseband *msg = VORDemodBaseband::MsgConfigureVORDemodBaseband::create(settingsKeys, settings, force); m_basebandSink->getInputMessageQueue()->push(msg); } - if (settings.m_useReverseAPI) + if ((settingsKeys.contains("useReverseAPI") && (m_settings.m_useReverseAPI != settings.m_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; @@ -359,14 +308,14 @@ bool VORDemod::deserialize(const QByteArray& data) { if (m_settings.deserialize(data)) { - MsgConfigureVORDemod *msg = MsgConfigureVORDemod::create(m_settings, true); + MsgConfigureVORDemod *msg = MsgConfigureVORDemod::create(QStringList(), m_settings, true); m_inputMessageQueue.push(msg); return true; } else { m_settings.resetToDefaults(); - MsgConfigureVORDemod *msg = MsgConfigureVORDemod::create(m_settings, true); + MsgConfigureVORDemod *msg = MsgConfigureVORDemod::create(QStringList(), m_settings, true); m_inputMessageQueue.push(msg); return false; } @@ -402,13 +351,13 @@ int VORDemod::webapiSettingsPutPatch( VORDemodSettings settings = m_settings; webapiUpdateChannelSettings(settings, channelSettingsKeys, response); - MsgConfigureVORDemod *msg = MsgConfigureVORDemod::create(settings, force); + MsgConfigureVORDemod *msg = MsgConfigureVORDemod::create(channelSettingsKeys, settings, force); m_inputMessageQueue.push(msg); qDebug("VORDemod::webapiSettingsPutPatch: forward to GUI: %p", m_guiMessageQueue); if (m_guiMessageQueue) // forward to GUI if any { - MsgConfigureVORDemod *msgToGUI = MsgConfigureVORDemod::create(settings, force); + MsgConfigureVORDemod *msgToGUI = MsgConfigureVORDemod::create(channelSettingsKeys, settings, force); m_guiMessageQueue->push(msgToGUI); } @@ -585,7 +534,7 @@ void VORDemod::webapiFormatChannelReport(SWGSDRangel::SWGChannelReport& response } } -void VORDemod::webapiReverseSendSettings(QList& channelSettingsKeys, const VORDemodSettings& settings, bool force) +void VORDemod::webapiReverseSendSettings(const QList& channelSettingsKeys, const VORDemodSettings& settings, bool force) { SWGSDRangel::SWGChannelSettings *swgChannelSettings = new SWGSDRangel::SWGChannelSettings(); webapiFormatChannelSettings(channelSettingsKeys, swgChannelSettings, settings, force); @@ -612,7 +561,7 @@ void VORDemod::webapiReverseSendSettings(QList& channelSettingsKeys, co void VORDemod::sendChannelSettings( const QList& pipes, - QList& channelSettingsKeys, + const QList& channelSettingsKeys, const VORDemodSettings& settings, bool force) { @@ -655,7 +604,7 @@ void VORDemod::sendChannelReport(QList& messagePipes) } void VORDemod::webapiFormatChannelSettings( - QList& channelSettingsKeys, + const QList& channelSettingsKeys, SWGSDRangel::SWGChannelSettings *swgChannelSettings, const VORDemodSettings& settings, bool force diff --git a/plugins/channelrx/demodvor/vordemod.h b/plugins/channelrx/demodvor/vordemod.h index 61816fe60..d94774bfa 100644 --- a/plugins/channelrx/demodvor/vordemod.h +++ b/plugins/channelrx/demodvor/vordemod.h @@ -47,20 +47,23 @@ public: public: const VORDemodSettings& getSettings() const { return m_settings; } + const QStringList& getSettingsKeys() const { return m_settingsKeys; } bool getForce() const { return m_force; } - static MsgConfigureVORDemod* create(const VORDemodSettings& settings, bool force) + static MsgConfigureVORDemod* create(const QStringList& settingsKeys, const VORDemodSettings& settings, bool force) { - return new MsgConfigureVORDemod(settings, force); + return new MsgConfigureVORDemod(settingsKeys, settings, force); } private: VORDemodSettings m_settings; + QStringList m_settingsKeys; bool m_force; - MsgConfigureVORDemod(const VORDemodSettings& settings, bool force) : + MsgConfigureVORDemod(const QStringList& settingsKeys, const VORDemodSettings& settings, bool force) : Message(), m_settings(settings), + m_settingsKeys(settingsKeys), m_force(force) { } }; @@ -162,18 +165,18 @@ private: QNetworkRequest m_networkRequest; virtual bool handleMessage(const Message& cmd); - void applySettings(const VORDemodSettings& settings, bool force = false); + void applySettings(const QStringList& settingsKeys, const VORDemodSettings& settings, bool force = false); void webapiFormatChannelReport(SWGSDRangel::SWGChannelReport& response); - void webapiReverseSendSettings(QList& channelSettingsKeys, const VORDemodSettings& settings, bool force); + void webapiReverseSendSettings(const QList& channelSettingsKeys, const VORDemodSettings& settings, bool force); void sendChannelSettings( const QList& pipes, - QList& channelSettingsKeys, + const QList& channelSettingsKeys, const VORDemodSettings& settings, bool force ); void sendChannelReport(QList& messagePipes); void webapiFormatChannelSettings( - QList& channelSettingsKeys, + const QList& channelSettingsKeys, SWGSDRangel::SWGChannelSettings *swgChannelSettings, const VORDemodSettings& settings, bool force diff --git a/plugins/channelrx/demodvor/vordemodbaseband.cpp b/plugins/channelrx/demodvor/vordemodbaseband.cpp index 7d140b724..8bd61312a 100644 --- a/plugins/channelrx/demodvor/vordemodbaseband.cpp +++ b/plugins/channelrx/demodvor/vordemodbaseband.cpp @@ -133,7 +133,7 @@ bool VORDemodBaseband::handleMessage(const Message& cmd) MsgConfigureVORDemodBaseband& cfg = (MsgConfigureVORDemodBaseband&) cmd; qDebug() << "VORDemodBaseband::handleMessage: MsgConfigureVORDemodBaseband"; - applySettings(cfg.getSettings(), cfg.getForce()); + applySettings(cfg.getSettingsKeys(), cfg.getSettings(), cfg.getForce()); return true; } @@ -160,9 +160,9 @@ bool VORDemodBaseband::handleMessage(const Message& cmd) } } -void VORDemodBaseband::applySettings(const VORDemodSettings& settings, bool force) +void VORDemodBaseband::applySettings(const QStringList& settingsKeys, const VORDemodSettings& 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_sink.getAudioSampleRate(), settings.m_inputFrequencyOffset); m_sink.applyChannelSettings(m_channelizer.getChannelSampleRate(), m_channelizer.getChannelFrequencyOffset()); @@ -174,7 +174,7 @@ void VORDemodBaseband::applySettings(const VORDemodSettings& settings, bool forc } } - 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); @@ -191,7 +191,11 @@ void VORDemodBaseband::applySettings(const VORDemodSettings& settings, bool forc } } - 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); + } } diff --git a/plugins/channelrx/demodvor/vordemodbaseband.h b/plugins/channelrx/demodvor/vordemodbaseband.h index 93ecf48fa..2eae96924 100644 --- a/plugins/channelrx/demodvor/vordemodbaseband.h +++ b/plugins/channelrx/demodvor/vordemodbaseband.h @@ -39,20 +39,23 @@ public: public: const VORDemodSettings& getSettings() const { return m_settings; } + const QStringList& getSettingsKeys() const { return m_settingsKeys; } bool getForce() const { return m_force; } - static MsgConfigureVORDemodBaseband* create(const VORDemodSettings& settings, bool force) + static MsgConfigureVORDemodBaseband* create(const QStringList& settingsKeys, const VORDemodSettings& settings, bool force) { - return new MsgConfigureVORDemodBaseband(settings, force); + return new MsgConfigureVORDemodBaseband(settingsKeys, settings, force); } private: VORDemodSettings m_settings; + QStringList m_settingsKeys; bool m_force; - MsgConfigureVORDemodBaseband(const VORDemodSettings& settings, bool force) : + MsgConfigureVORDemodBaseband(const QStringList& settingsKeys, const VORDemodSettings& settings, bool force) : Message(), m_settings(settings), + m_settingsKeys(settingsKeys), m_force(force) { } }; @@ -85,7 +88,7 @@ private: QRecursiveMutex m_mutex; bool handleMessage(const Message& cmd); - void applySettings(const VORDemodSettings& settings, bool force = false); + void applySettings(const QStringList& settingsKeys, const VORDemodSettings& settings, bool force = false); private slots: void handleInputMessages(); diff --git a/plugins/channelrx/demodvor/vordemodgui.cpp b/plugins/channelrx/demodvor/vordemodgui.cpp index 8ea23389c..f882b025d 100644 --- a/plugins/channelrx/demodvor/vordemodgui.cpp +++ b/plugins/channelrx/demodvor/vordemodgui.cpp @@ -54,7 +54,7 @@ void VORDemodGUI::resetToDefaults() { m_settings.resetToDefaults(); displaySettings(); - applySettings(true); + applySettings(QStringList(), true); } QByteArray VORDemodGUI::serialize() const @@ -66,7 +66,7 @@ bool VORDemodGUI::deserialize(const QByteArray& data) { if(m_settings.deserialize(data)) { displaySettings(); - applySettings(true); + applySettings(QStringList(), true); return true; } else { resetToDefaults(); @@ -178,7 +178,7 @@ void VORDemodGUI::channelMarkerChangedByCursor() { ui->deltaFrequency->setValue(m_channelMarker.getCenterFrequency()); m_settings.m_inputFrequencyOffset = m_channelMarker.getCenterFrequency(); - applySettings(); + applySettings(QStringList("inputFrequencyOffset")); } void VORDemodGUI::channelMarkerHighlightedByCursor() @@ -191,40 +191,40 @@ void VORDemodGUI::on_deltaFrequency_changed(qint64 value) m_channelMarker.setCenterFrequency(value); m_settings.m_inputFrequencyOffset = m_channelMarker.getCenterFrequency(); updateAbsoluteCenterFrequency(); - applySettings(); + applySettings(QStringList("inputFrequencyOffset")); } void VORDemodGUI::on_thresh_valueChanged(int value) { ui->threshText->setText(QString("%1").arg(value / 10.0, 0, 'f', 1)); m_settings.m_identThreshold = value / 10.0; - applySettings(); + applySettings(QStringList("identThreshold")); } void VORDemodGUI::on_volume_valueChanged(int value) { ui->volumeText->setText(QString("%1").arg(value / 10.0, 0, 'f', 1)); m_settings.m_volume = value / 10.0; - applySettings(); + applySettings(QStringList("volume")); } void VORDemodGUI::on_squelch_valueChanged(int value) { ui->squelchText->setText(QString("%1 dB").arg(value)); m_settings.m_squelch = value; - applySettings(); + applySettings(QStringList("squelch")); } void VORDemodGUI::on_audioMute_toggled(bool checked) { m_settings.m_audioMute = checked; - applySettings(); + applySettings(QStringList("audioMute")); } void VORDemodGUI::on_identBandpassEnable_toggled(bool checked) { m_settings.m_identBandpassEnable = checked; - applySettings(); + applySettings(QStringList("identBandpassEnable")); } void VORDemodGUI::onWidgetRolled(QWidget* widget, bool rollDown) @@ -233,7 +233,7 @@ void VORDemodGUI::onWidgetRolled(QWidget* widget, bool rollDown) (void) rollDown; getRollupContents()->saveState(m_rollupState); - applySettings(); + applySettings(QStringList()); } void VORDemodGUI::onMenuDialogCalled(const QPoint &p) @@ -278,7 +278,9 @@ void VORDemodGUI::onMenuDialogCalled(const QPoint &p) updateIndexLabel(); } - applySettings(); + applySettings(QStringList({ "rgbColor", "title", "useReverseAPI", "reverseAPIAddress", + "reverseAPIPort", "reverseAPIDeviceIndex", "reverseAPIChannelIndex", + "streamIndex" })); } resetContextMenuType(); @@ -337,7 +339,7 @@ VORDemodGUI::VORDemodGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Baseban displaySettings(); makeUIConnections(); - applySettings(true); + applySettings(QStringList(), true); DialPopup::addPopupsToChildDials(this); m_resizer.enableChildMouseTracking(); } @@ -352,11 +354,11 @@ void VORDemodGUI::blockApplySettings(bool block) m_doApplySettings = !block; } -void VORDemodGUI::applySettings(bool force) +void VORDemodGUI::applySettings(const QStringList& settingsKeys, bool force) { if (m_doApplySettings) { - VORDemod::MsgConfigureVORDemod* message = VORDemod::MsgConfigureVORDemod::create( m_settings, force); + VORDemod::MsgConfigureVORDemod* message = VORDemod::MsgConfigureVORDemod::create(settingsKeys, m_settings, force); m_vorDemod->getInputMessageQueue()->push(message); } } @@ -420,7 +422,7 @@ void VORDemodGUI::audioSelect(const QPoint& p) if (audioSelect.m_selected) { m_settings.m_audioDeviceName = audioSelect.m_audioDeviceName; - applySettings(); + applySettings(QStringList("audioDeviceName")); } } diff --git a/plugins/channelrx/demodvor/vordemodgui.h b/plugins/channelrx/demodvor/vordemodgui.h index c8e9b9a41..9763259e0 100644 --- a/plugins/channelrx/demodvor/vordemodgui.h +++ b/plugins/channelrx/demodvor/vordemodgui.h @@ -83,7 +83,7 @@ private: virtual ~VORDemodGUI(); 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/demodvor/vordemodsettings.cpp b/plugins/channelrx/demodvor/vordemodsettings.cpp index f14cd1a96..32eee8a2c 100644 --- a/plugins/channelrx/demodvor/vordemodsettings.cpp +++ b/plugins/channelrx/demodvor/vordemodsettings.cpp @@ -166,4 +166,137 @@ bool VORDemodSettings::deserialize(const QByteArray& data) } } +void VORDemodSettings::applySettings(const QStringList& settingsKeys, const VORDemodSettings& settings) +{ + if (settingsKeys.contains("inputFrequencyOffset")) { + m_inputFrequencyOffset = settings.m_inputFrequencyOffset; + } + if (settingsKeys.contains("navId")) { + m_navId = settings.m_navId; + } + if (settingsKeys.contains("squelch")) { + m_squelch = settings.m_squelch; + } + if (settingsKeys.contains("volume")) { + m_volume = settings.m_volume; + } + if (settingsKeys.contains("audioMute")) { + m_audioMute = settings.m_audioMute; + } + if (settingsKeys.contains("identBandpassEnable")) { + m_identBandpassEnable = settings.m_identBandpassEnable; + } + if (settingsKeys.contains("rgbColor")) { + m_rgbColor = settings.m_rgbColor; + } + if (settingsKeys.contains("title")) { + m_title = settings.m_title; + } + if (settingsKeys.contains("audioDeviceName")) { + m_audioDeviceName = settings.m_audioDeviceName; + } + if (settingsKeys.contains("streamIndex")) { + m_streamIndex = settings.m_streamIndex; + } + if (settingsKeys.contains("useReverseAPI")) { + m_useReverseAPI = settings.m_useReverseAPI; + } + if (settingsKeys.contains("reverseAPIAddress")) { + m_reverseAPIAddress = settings.m_reverseAPIAddress; + } + if (settingsKeys.contains("reverseAPIPort")) { + m_reverseAPIPort = settings.m_reverseAPIPort; + } + if (settingsKeys.contains("reverseAPIDeviceIndex")) { + m_reverseAPIDeviceIndex = settings.m_reverseAPIDeviceIndex; + } + if (settingsKeys.contains("reverseAPIChannelIndex")) { + m_reverseAPIChannelIndex = settings.m_reverseAPIChannelIndex; + } + if (settingsKeys.contains("identThreshold")) { + m_identThreshold = settings.m_identThreshold; + } + if (settingsKeys.contains("refThresholdDB")) { + m_refThresholdDB = settings.m_refThresholdDB; + } + if (settingsKeys.contains("varThresholdDB")) { + m_varThresholdDB = settings.m_varThresholdDB; + } + if (settingsKeys.contains("workspaceIndex")) { + m_workspaceIndex = settings.m_workspaceIndex; + } + if (settingsKeys.contains("geometryBytes")) { + m_geometryBytes = settings.m_geometryBytes; + } + if (settingsKeys.contains("hidden")) { + m_hidden = settings.m_hidden; + } +} +QString VORDemodSettings::getDebugString(const QStringList& settingsKeys, bool force) const +{ + std::ostringstream ostr; + + if (settingsKeys.contains("inputFrequencyOffset") || force) { + ostr << " m_inputFrequencyOffset: " << m_inputFrequencyOffset; + } + if (settingsKeys.contains("navId") || force) { + ostr << " m_navId: " << m_navId; + } + if (settingsKeys.contains("squelch") || force) { + ostr << " m_squelch: " << m_squelch; + } + if (settingsKeys.contains("volume") || force) { + ostr << " m_volume: " << m_volume; + } + if (settingsKeys.contains("audioMute") || force) { + ostr << " m_audioMute: " << m_audioMute; + } + if (settingsKeys.contains("identBandpassEnable") || force) { + ostr << " m_identBandpassEnable: " << m_identBandpassEnable; + } + if (settingsKeys.contains("rgbColor") || force) { + ostr << " m_rgbColor: " << m_rgbColor; + } + if (settingsKeys.contains("title") || force) { + ostr << " m_title: " << m_title.toStdString(); + } + if (settingsKeys.contains("audioDeviceName") || force) { + ostr << " m_audioDeviceName: " << m_audioDeviceName.toStdString(); + } + if (settingsKeys.contains("streamIndex") || force) { + ostr << " m_streamIndex: " << m_streamIndex; + } + if (settingsKeys.contains("useReverseAPI") || force) { + ostr << " m_useReverseAPI: " << m_useReverseAPI; + } + if (settingsKeys.contains("reverseAPIAddress") || force) { + ostr << " m_reverseAPIAddress: " << m_reverseAPIAddress.toStdString(); + } + if (settingsKeys.contains("reverseAPIPort") || force) { + ostr << " m_reverseAPIPort: " << m_reverseAPIPort; + } + if (settingsKeys.contains("reverseAPIDeviceIndex") || force) { + ostr << " m_reverseAPIDeviceIndex: " << m_reverseAPIDeviceIndex; + } + if (settingsKeys.contains("reverseAPIChannelIndex") || force) { + ostr << " m_reverseAPIChannelIndex: " << m_reverseAPIChannelIndex; + } + if (settingsKeys.contains("identThreshold") || force) { + ostr << " m_identThreshold: " << m_identThreshold; + } + if (settingsKeys.contains("refThresholdDB") || force) { + ostr << " m_refThresholdDB: " << m_refThresholdDB; + } + if (settingsKeys.contains("varThresholdDB") || force) { + ostr << " m_varThresholdDB: " << m_varThresholdDB; + } + if (settingsKeys.contains("workspaceIndex") || force) { + ostr << " m_workspaceIndex: " << m_workspaceIndex; + } + if (settingsKeys.contains("hidden") || force) { + ostr << " m_hidden: " << m_hidden; + } + + return QString(ostr.str().c_str()); +} diff --git a/plugins/channelrx/demodvor/vordemodsettings.h b/plugins/channelrx/demodvor/vordemodsettings.h index 981b0de84..c3057117c 100644 --- a/plugins/channelrx/demodvor/vordemodsettings.h +++ b/plugins/channelrx/demodvor/vordemodsettings.h @@ -69,6 +69,8 @@ struct VORDemodSettings void setRollupState(Serializable *rollupState) { m_rollupState = rollupState; } QByteArray serialize() const; bool deserialize(const QByteArray& data); + void applySettings(const QStringList& settingsKeys, const VORDemodSettings& settings); + QString getDebugString(const QStringList& settingsKeys, bool force=false) const; }; #endif /* INCLUDE_VORDEMODSCSETTINGS_H */ diff --git a/plugins/channelrx/demodvor/vordemodsink.cpp b/plugins/channelrx/demodvor/vordemodsink.cpp index b60d43c4b..3f497436b 100644 --- a/plugins/channelrx/demodvor/vordemodsink.cpp +++ b/plugins/channelrx/demodvor/vordemodsink.cpp @@ -49,7 +49,7 @@ VORDemodSCSink::VORDemodSCSink() : m_magsq = 0.0; - applySettings(m_settings, true); + applySettings(QStringList(), m_settings, true); applyChannelSettings(m_channelSampleRate, m_channelFrequencyOffset, true); } @@ -281,21 +281,15 @@ void VORDemodSCSink::applyChannelSettings(int channelSampleRate, int channelFreq m_channelFrequencyOffset = channelFrequencyOffset; } -void VORDemodSCSink::applySettings(const VORDemodSettings& settings, bool force) +void VORDemodSCSink::applySettings(const QStringList& settingsKeys, const VORDemodSettings& settings, bool force) { - qDebug() << "VORDemodSCSink::applySettings:" - << " m_volume: " << settings.m_volume - << " m_squelch: " << settings.m_squelch - << " m_audioMute: " << settings.m_audioMute - << " m_audioDeviceName: " << settings.m_audioDeviceName - << " m_identBandpassEnable: " << settings.m_identBandpassEnable - << " force: " << force; + qDebug() << "VORDemodSCSink::applySettings:" << settings.getDebugString(settingsKeys, force); - if ((m_settings.m_squelch != settings.m_squelch) || force) { + if ((settingsKeys.contains("squelch") && (m_settings.m_squelch != settings.m_squelch)) || force) { m_squelchLevel = CalcDb::powerFromdB(settings.m_squelch); } - if (m_settings.m_navId != settings.m_navId) + if ((settingsKeys.contains("navId") && (m_settings.m_navId != settings.m_navId)) || force) { // Reset state when navId changes, so we don't report old ident for new navId m_morseDemod.reset(); @@ -303,7 +297,7 @@ void VORDemodSCSink::applySettings(const VORDemodSettings& settings, bool force) m_varGoertzel.reset(); } - if ((m_settings.m_identBandpassEnable != settings.m_identBandpassEnable) || force) + if ((settingsKeys.contains("identBandpassEnable") && (m_settings.m_identBandpassEnable != settings.m_identBandpassEnable)) || force) { if (settings.m_identBandpassEnable) { m_bandpass.create(1001, m_audioSampleRate, 970.0f, 1070.0f); @@ -313,8 +307,13 @@ void VORDemodSCSink::applySettings(const VORDemodSettings& settings, bool force) //m_bandpass.printTaps("audio_bpf"); } - m_settings = settings; - m_morseDemod.applySettings(m_settings.m_identThreshold); + if (force) { + m_settings = settings; + } else { + m_settings.applySettings(settingsKeys, settings); + } + + m_morseDemod.applySettings(settings.m_identThreshold); } void VORDemodSCSink::applyAudioSampleRate(int sampleRate) diff --git a/plugins/channelrx/demodvor/vordemodsink.h b/plugins/channelrx/demodvor/vordemodsink.h index 6257bb848..c749fa31b 100644 --- a/plugins/channelrx/demodvor/vordemodsink.h +++ b/plugins/channelrx/demodvor/vordemodsink.h @@ -44,7 +44,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 VORDemodSettings& settings, bool force = false); + void applySettings(const QStringList& settingsKeys, const VORDemodSettings& settings, bool force = false); void setMessageQueueToChannel(MessageQueue *messageQueue); void applyAudioSampleRate(int sampleRate); diff --git a/plugins/channelrx/demodwfm/wfmdemod.cpp b/plugins/channelrx/demodwfm/wfmdemod.cpp index 9415100a4..c11629fbc 100644 --- a/plugins/channelrx/demodwfm/wfmdemod.cpp +++ b/plugins/channelrx/demodwfm/wfmdemod.cpp @@ -61,7 +61,7 @@ WFMDemod::WFMDemod(DeviceAPI* deviceAPI) : m_basebandSampleRate(0) { setObjectName(m_channelId); - applySettings(m_settings, true); + applySettings(QStringList(), m_settings, true); m_deviceAPI->addChannelSink(this); m_deviceAPI->addChannelSinkAPI(this); @@ -145,7 +145,7 @@ void WFMDemod::start() m_basebandSink->reset(); m_thread->start(); - WFMDemodBaseband::MsgConfigureWFMDemodBaseband *msg = WFMDemodBaseband::MsgConfigureWFMDemodBaseband::create(m_settings, true); + WFMDemodBaseband::MsgConfigureWFMDemodBaseband *msg = WFMDemodBaseband::MsgConfigureWFMDemodBaseband::create(QStringList(), m_settings, true); m_basebandSink->getInputMessageQueue()->push(msg); m_running = true; @@ -170,7 +170,7 @@ bool WFMDemod::handleMessage(const Message& cmd) MsgConfigureWFMDemod& cfg = (MsgConfigureWFMDemod&) cmd; qDebug("WFMDemod::handleMessage: MsgConfigureWFMDemod"); - applySettings(cfg.getSettings(), cfg.getForce()); + applySettings(cfg.getSettingsKeys(), cfg.getSettings(), cfg.getForce()); return true; } @@ -211,64 +211,20 @@ void WFMDemod::setCenterFrequency(qint64 frequency) { WFMDemodSettings settings = m_settings; settings.m_inputFrequencyOffset = frequency; - applySettings(settings, false); + applySettings(QStringList("inputFrequencyOffset"), settings, false); if (m_guiMessageQueue) // forward to GUI if any { - MsgConfigureWFMDemod *msgToGUI = MsgConfigureWFMDemod::create(settings, false); + MsgConfigureWFMDemod *msgToGUI = MsgConfigureWFMDemod::create(QStringList("inputFrequencyOffset"), settings, false); m_guiMessageQueue->push(msgToGUI); } } -void WFMDemod::applySettings(const WFMDemodSettings& settings, bool force) +void WFMDemod::applySettings(const QStringList& settingsKeys, const WFMDemodSettings& settings, bool force) { - qDebug() << "WFMDemod::applySettings:" - << " m_inputFrequencyOffset: " << settings.m_inputFrequencyOffset - << " m_rfBandwidth: " << settings.m_rfBandwidth - << " m_afBandwidth: " << settings.m_afBandwidth - << " m_volume: " << settings.m_volume - << " m_squelch: " << settings.m_squelch - << " m_audioDeviceName: " << settings.m_audioDeviceName - << " m_audioMute: " << settings.m_audioMute - << " 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() << "WFMDemod::applySettings:" << settings.getDebugString(settingsKeys, force); - QList reverseAPIKeys; - - if((settings.m_inputFrequencyOffset != m_settings.m_inputFrequencyOffset) || force) { - reverseAPIKeys.append("inputFrequencyOffset"); - } - if((settings.m_rfBandwidth != m_settings.m_rfBandwidth) || force) { - reverseAPIKeys.append("rfBandwidth"); - } - if((settings.m_afBandwidth != m_settings.m_afBandwidth) || force) { - reverseAPIKeys.append("afBandwidth"); - } - if((settings.m_volume != m_settings.m_volume) || force) { - reverseAPIKeys.append("volume"); - } - if((settings.m_squelch != m_settings.m_squelch) || force) { - reverseAPIKeys.append("squelch"); - } - if((settings.m_audioMute != m_settings.m_audioMute) || force) { - reverseAPIKeys.append("audioMute"); - } - if((settings.m_audioDeviceName != m_settings.m_audioDeviceName) || force) { - reverseAPIKeys.append("audioDeviceName"); - } - if((settings.m_title != m_settings.m_title) || force) { - reverseAPIKeys.append("title"); - } - if((settings.m_rgbColor != m_settings.m_rgbColor) || force) { - reverseAPIKeys.append("rgbColor"); - } - - 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 { @@ -279,34 +235,36 @@ void WFMDemod::applySettings(const WFMDemodSettings& settings, bool force) m_settings.m_streamIndex = settings.m_streamIndex; // make sure ChannelAPI::getStreamIndex() is consistent emit streamIndexChanged(settings.m_streamIndex); } - - reverseAPIKeys.append("streamIndex"); } if (m_running) { - WFMDemodBaseband::MsgConfigureWFMDemodBaseband *msg = WFMDemodBaseband::MsgConfigureWFMDemodBaseband::create(settings, force); + WFMDemodBaseband::MsgConfigureWFMDemodBaseband *msg = WFMDemodBaseband::MsgConfigureWFMDemodBaseband::create(settingsKeys, settings, force); m_basebandSink->getInputMessageQueue()->push(msg); } - if (settings.m_useReverseAPI) + if (settingsKeys.contains("useReverseAPI") && (m_settings.m_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; + if (force) { + m_settings = settings; + } else { + m_settings.applySettings(settingsKeys, settings); + } } QByteArray WFMDemod::serialize() const @@ -318,14 +276,14 @@ bool WFMDemod::deserialize(const QByteArray& data) { if (m_settings.deserialize(data)) { - MsgConfigureWFMDemod *msg = MsgConfigureWFMDemod::create(m_settings, true); + MsgConfigureWFMDemod *msg = MsgConfigureWFMDemod::create(QStringList(), m_settings, true); m_inputMessageQueue.push(msg); return true; } else { m_settings.resetToDefaults(); - MsgConfigureWFMDemod *msg = MsgConfigureWFMDemod::create(m_settings, true); + MsgConfigureWFMDemod *msg = MsgConfigureWFMDemod::create(QStringList(), m_settings, true); m_inputMessageQueue.push(msg); return false; } @@ -381,13 +339,13 @@ int WFMDemod::webapiSettingsPutPatch( WFMDemodSettings settings = m_settings; webapiUpdateChannelSettings(settings, channelSettingsKeys, response); - MsgConfigureWFMDemod *msg = MsgConfigureWFMDemod::create(settings, force); + MsgConfigureWFMDemod *msg = MsgConfigureWFMDemod::create(channelSettingsKeys, settings, force); m_inputMessageQueue.push(msg); qDebug("WFMDemod::webapiSettingsPutPatch: forward to GUI: %p", m_guiMessageQueue); if (m_guiMessageQueue) // forward to GUI if any { - MsgConfigureWFMDemod *msgToGUI = MsgConfigureWFMDemod::create(settings, force); + MsgConfigureWFMDemod *msgToGUI = MsgConfigureWFMDemod::create(channelSettingsKeys, settings, force); m_guiMessageQueue->push(msgToGUI); } @@ -545,7 +503,7 @@ void WFMDemod::webapiFormatChannelReport(SWGSDRangel::SWGChannelReport& response response.getWfmDemodReport()->setChannelSampleRate(m_basebandSink->getChannelSampleRate()); } -void WFMDemod::webapiReverseSendSettings(QList& channelSettingsKeys, const WFMDemodSettings& settings, bool force) +void WFMDemod::webapiReverseSendSettings(const QList& channelSettingsKeys, const WFMDemodSettings& settings, bool force) { SWGSDRangel::SWGChannelSettings *swgChannelSettings = new SWGSDRangel::SWGChannelSettings(); webapiFormatChannelSettings(channelSettingsKeys, swgChannelSettings, settings, force); @@ -572,7 +530,7 @@ void WFMDemod::webapiReverseSendSettings(QList& channelSettingsKeys, co void WFMDemod::sendChannelSettings( const QList& pipes, - QList& channelSettingsKeys, + const QList& channelSettingsKeys, const WFMDemodSettings& settings, bool force) { @@ -596,7 +554,7 @@ void WFMDemod::sendChannelSettings( } void WFMDemod::webapiFormatChannelSettings( - QList& channelSettingsKeys, + const QList& channelSettingsKeys, SWGSDRangel::SWGChannelSettings *swgChannelSettings, const WFMDemodSettings& settings, bool force diff --git a/plugins/channelrx/demodwfm/wfmdemod.h b/plugins/channelrx/demodwfm/wfmdemod.h index df9d15b96..94e822c26 100644 --- a/plugins/channelrx/demodwfm/wfmdemod.h +++ b/plugins/channelrx/demodwfm/wfmdemod.h @@ -46,20 +46,23 @@ public: public: const WFMDemodSettings& getSettings() const { return m_settings; } + const QStringList& getSettingsKeys() const { return m_settingsKeys; } bool getForce() const { return m_force; } - static MsgConfigureWFMDemod* create(const WFMDemodSettings& settings, bool force) + static MsgConfigureWFMDemod* create(const QStringList& settingsKeys, const WFMDemodSettings& settings, bool force) { - return new MsgConfigureWFMDemod(settings, force); + return new MsgConfigureWFMDemod(settingsKeys, settings, force); } private: WFMDemodSettings m_settings; + QStringList m_settingsKeys; bool m_force; - MsgConfigureWFMDemod(const WFMDemodSettings& settings, bool force) : + MsgConfigureWFMDemod(const QStringList& settingsKeys, const WFMDemodSettings& settings, bool force) : Message(), m_settings(settings), + m_settingsKeys(settingsKeys), m_force(force) { } }; @@ -157,18 +160,18 @@ private: static const int m_udpBlockSize; virtual bool handleMessage(const Message& cmd); - void applySettings(const WFMDemodSettings& settings, bool force = false); + void applySettings(const QStringList& settingsKeys, const WFMDemodSettings& settings, bool force = false); void sendSampleRateToDemodAnalyzer(); void webapiFormatChannelReport(SWGSDRangel::SWGChannelReport& response); - void webapiReverseSendSettings(QList& channelSettingsKeys, const WFMDemodSettings& settings, bool force); + void webapiReverseSendSettings(const QList& channelSettingsKeys, const WFMDemodSettings& settings, bool force); void sendChannelSettings( const QList& pipes, - QList& channelSettingsKeys, + const QList& channelSettingsKeys, const WFMDemodSettings& settings, bool force ); void webapiFormatChannelSettings( - QList& channelSettingsKeys, + const QList& channelSettingsKeys, SWGSDRangel::SWGChannelSettings *swgChannelSettings, const WFMDemodSettings& settings, bool force diff --git a/plugins/channelrx/demodwfm/wfmdemodbaseband.cpp b/plugins/channelrx/demodwfm/wfmdemodbaseband.cpp index 4e8d2cf41..e5bc8fb76 100644 --- a/plugins/channelrx/demodwfm/wfmdemodbaseband.cpp +++ b/plugins/channelrx/demodwfm/wfmdemodbaseband.cpp @@ -120,7 +120,7 @@ bool WFMDemodBaseband::handleMessage(const Message& cmd) MsgConfigureWFMDemodBaseband& cfg = (MsgConfigureWFMDemodBaseband&) cmd; qDebug() << "WFMDemodBaseband::handleMessage: MsgConfigureWFMDemodBaseband"; - applySettings(cfg.getSettings(), cfg.getForce()); + applySettings(cfg.getSettingsKeys(), cfg.getSettings(), cfg.getForce()); return true; } @@ -147,10 +147,10 @@ bool WFMDemodBaseband::handleMessage(const Message& cmd) } } -void WFMDemodBaseband::applySettings(const WFMDemodSettings& settings, bool force) +void WFMDemodBaseband::applySettings(const QStringList& settingsKeys, const WFMDemodSettings& settings, bool force) { - if ((settings.m_rfBandwidth != m_settings.m_rfBandwidth) - || (settings.m_inputFrequencyOffset != m_settings.m_inputFrequencyOffset) || force) + if ((settingsKeys.contains("rfBandwidth") && settings.m_rfBandwidth != m_settings.m_rfBandwidth) + || (settingsKeys.contains("inputFrequencyOffset") && settings.m_inputFrequencyOffset != m_settings.m_inputFrequencyOffset) || force) { m_channelizer->setChannelization(WFMDemodSettings::requiredBW(settings.m_rfBandwidth), settings.m_inputFrequencyOffset); m_sink.applyChannelSettings(m_channelizer->getChannelSampleRate(), m_channelizer->getChannelFrequencyOffset()); @@ -162,7 +162,7 @@ void WFMDemodBaseband::applySettings(const WFMDemodSettings& settings, bool forc } } - 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); @@ -176,9 +176,13 @@ void WFMDemodBaseband::applySettings(const WFMDemodSettings& settings, bool forc } } - 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 WFMDemodBaseband::getChannelSampleRate() const diff --git a/plugins/channelrx/demodwfm/wfmdemodbaseband.h b/plugins/channelrx/demodwfm/wfmdemodbaseband.h index b2d2e4484..aeb3a8c7e 100644 --- a/plugins/channelrx/demodwfm/wfmdemodbaseband.h +++ b/plugins/channelrx/demodwfm/wfmdemodbaseband.h @@ -42,20 +42,23 @@ public: public: const WFMDemodSettings& getSettings() const { return m_settings; } + const QStringList& getSettingsKeys() const { return m_settingsKeys; } bool getForce() const { return m_force; } - static MsgConfigureWFMDemodBaseband* create(const WFMDemodSettings& settings, bool force) + static MsgConfigureWFMDemodBaseband* create(const QStringList& settingsKeys, const WFMDemodSettings& settings, bool force) { - return new MsgConfigureWFMDemodBaseband(settings, force); + return new MsgConfigureWFMDemodBaseband(settingsKeys, settings, force); } private: WFMDemodSettings m_settings; + QStringList m_settingsKeys; bool m_force; - MsgConfigureWFMDemodBaseband(const WFMDemodSettings& settings, bool force) : + MsgConfigureWFMDemodBaseband(const QStringList& settingsKeys, const WFMDemodSettings& settings, bool force) : Message(), m_settings(settings), + m_settingsKeys(settingsKeys), m_force(force) { } }; @@ -89,7 +92,7 @@ private: QDateTime m_audioFifoErrorDateTime; bool handleMessage(const Message& cmd); - void applySettings(const WFMDemodSettings& settings, bool force = false); + void applySettings(const QStringList& settingsKeys, const WFMDemodSettings& settings, bool force = false); private slots: void handleInputMessages(); diff --git a/plugins/channelrx/demodwfm/wfmdemodgui.cpp b/plugins/channelrx/demodwfm/wfmdemodgui.cpp index bae2b95c4..d3a07875b 100644 --- a/plugins/channelrx/demodwfm/wfmdemodgui.cpp +++ b/plugins/channelrx/demodwfm/wfmdemodgui.cpp @@ -54,7 +54,7 @@ void WFMDemodGUI::resetToDefaults() { m_settings.resetToDefaults(); displaySettings(); - applySettings(); + applySettings(QStringList(), true); } QByteArray WFMDemodGUI::serialize() const @@ -66,7 +66,7 @@ bool WFMDemodGUI::deserialize(const QByteArray& data) { if(m_settings.deserialize(data)) { displaySettings(); - applySettings(true); + applySettings(QStringList(), true); return true; } else { resetToDefaults(); @@ -119,7 +119,7 @@ void WFMDemodGUI::channelMarkerChangedByCursor() { ui->deltaFrequency->setValue(m_channelMarker.getCenterFrequency()); m_settings.m_inputFrequencyOffset = m_channelMarker.getCenterFrequency(); - applySettings(); + applySettings(QStringList("inputFrequencyOffset")); } void WFMDemodGUI::channelMarkerHighlightedByCursor() @@ -132,41 +132,41 @@ void WFMDemodGUI::on_deltaFrequency_changed(qint64 value) m_channelMarker.setCenterFrequency(value); m_settings.m_inputFrequencyOffset = m_channelMarker.getCenterFrequency(); updateAbsoluteCenterFrequency(); - applySettings(); + applySettings(QStringList("inputFrequencyOffset")); } void WFMDemodGUI::on_rfBW_changed(quint64 value) { m_channelMarker.setBandwidth(value); m_settings.m_rfBandwidth = value; - applySettings(); + applySettings(QStringList("rfBandwidth")); } void WFMDemodGUI::on_afBW_valueChanged(int value) { ui->afBWText->setText(QString("%1 kHz").arg(value)); m_settings.m_afBandwidth = value * 1000.0; - applySettings(); + applySettings(QStringList("afBandwidth")); } void WFMDemodGUI::on_volume_valueChanged(int value) { ui->volumeText->setText(QString("%1").arg(value / 10.0, 0, 'f', 1)); m_settings.m_volume = value / 10.0; - applySettings(); + applySettings(QStringList("volume")); } void WFMDemodGUI::on_squelch_valueChanged(int value) { ui->squelchText->setText(QString("%1 dB").arg(value)); m_settings.m_squelch = value; - applySettings(); + applySettings(QStringList("squelch")); } void WFMDemodGUI::on_audioMute_toggled(bool checked) { m_settings.m_audioMute = checked; - applySettings(); + applySettings(QStringList("audioMute")); } void WFMDemodGUI::onWidgetRolled(QWidget* widget, bool rollDown) @@ -175,7 +175,7 @@ void WFMDemodGUI::onWidgetRolled(QWidget* widget, bool rollDown) (void) rollDown; getRollupContents()->saveState(m_rollupState); - applySettings(); + applySettings(QStringList()); } void WFMDemodGUI::onMenuDialogCalled(const QPoint &p) @@ -220,7 +220,7 @@ void WFMDemodGUI::onMenuDialogCalled(const QPoint &p) updateIndexLabel(); } - applySettings(); + applySettings(QStringList({"title", "rgbColor", "useReverseAPI", "reverseAPIAddress", "reverseAPIPort", "reverseAPIDeviceIndex", "reverseAPIChannelIndex", "streamIndex"}), true); } resetContextMenuType(); @@ -284,7 +284,7 @@ WFMDemodGUI::WFMDemodGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Baseban displaySettings(); makeUIConnections(); - applySettings(true); + applySettings(QStringList(), true); m_resizer.enableChildMouseTracking(); } @@ -298,11 +298,11 @@ void WFMDemodGUI::blockApplySettings(bool block) m_doApplySettings = !block; } -void WFMDemodGUI::applySettings(bool force) +void WFMDemodGUI::applySettings(const QStringList& settingsKeys, bool force) { if (m_doApplySettings) { - WFMDemod::MsgConfigureWFMDemod* msgConfig = WFMDemod::MsgConfigureWFMDemod::create( m_settings, force); + WFMDemod::MsgConfigureWFMDemod* msgConfig = WFMDemod::MsgConfigureWFMDemod::create(settingsKeys, m_settings, force); m_wfmDemod->getInputMessageQueue()->push(msgConfig); } } @@ -362,7 +362,7 @@ void WFMDemodGUI::audioSelect(const QPoint& p) if (audioSelect.m_selected) { m_settings.m_audioDeviceName = audioSelect.m_audioDeviceName; - applySettings(); + applySettings(QStringList("audioDeviceName")); } } diff --git a/plugins/channelrx/demodwfm/wfmdemodgui.h b/plugins/channelrx/demodwfm/wfmdemodgui.h index 271457403..80c19ae80 100644 --- a/plugins/channelrx/demodwfm/wfmdemodgui.h +++ b/plugins/channelrx/demodwfm/wfmdemodgui.h @@ -87,7 +87,7 @@ private: virtual ~WFMDemodGUI(); 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/demodwfm/wfmdemodsettings.cpp b/plugins/channelrx/demodwfm/wfmdemodsettings.cpp index fe2e2fe4f..661f792ee 100644 --- a/plugins/channelrx/demodwfm/wfmdemodsettings.cpp +++ b/plugins/channelrx/demodwfm/wfmdemodsettings.cpp @@ -163,3 +163,120 @@ bool WFMDemodSettings::deserialize(const QByteArray& data) return false; } } + +void WFMDemodSettings::applySettings(const QStringList& settingsKeys, const WFMDemodSettings& settings) +{ + if (settingsKeys.contains("inputFrequencyOffset")) { + m_inputFrequencyOffset = settings.m_inputFrequencyOffset; + } + if (settingsKeys.contains("rfBandwidth")) { + m_rfBandwidth = settings.m_rfBandwidth; + } + if (settingsKeys.contains("afBandwidth")) { + m_afBandwidth = settings.m_afBandwidth; + } + if (settingsKeys.contains("volume")) { + m_volume = settings.m_volume; + } + if (settingsKeys.contains("squelch")) { + m_squelch = settings.m_squelch; + } + if (settingsKeys.contains("audioMute")) { + m_audioMute = settings.m_audioMute; + } + if (settingsKeys.contains("rgbColor")) { + m_rgbColor = settings.m_rgbColor; + } + if (settingsKeys.contains("title")) { + m_title = settings.m_title; + } + if (settingsKeys.contains("audioDeviceName")) { + m_audioDeviceName = settings.m_audioDeviceName; + } + if (settingsKeys.contains("streamIndex")) { + m_streamIndex = settings.m_streamIndex; + } + if (settingsKeys.contains("useReverseAPI")) { + m_useReverseAPI = settings.m_useReverseAPI; + } + if (settingsKeys.contains("reverseAPIAddress")) { + m_reverseAPIAddress = settings.m_reverseAPIAddress; + } + if (settingsKeys.contains("reverseAPIPort")) { + m_reverseAPIPort = settings.m_reverseAPIPort; + } + if (settingsKeys.contains("reverseAPIDeviceIndex")) { + m_reverseAPIDeviceIndex = settings.m_reverseAPIDeviceIndex; + } + if (settingsKeys.contains("reverseAPIChannelIndex")) { + m_reverseAPIChannelIndex = settings.m_reverseAPIChannelIndex; + } + if (settingsKeys.contains("workspaceIndex")) { + m_workspaceIndex = settings.m_workspaceIndex; + } + if (settingsKeys.contains("geometryBytes")) { + m_geometryBytes = settings.m_geometryBytes; + } + if (settingsKeys.contains("hidden")) { + m_hidden = settings.m_hidden; + } +} + +QString WFMDemodSettings::getDebugString(const QStringList& settingsKeys, bool force) const +{ + std::ostringstream ostr; + + if (settingsKeys.contains("inputFrequencyOffset") || force) { + ostr << " m_inputFrequencyOffset: " << m_inputFrequencyOffset; + } + if (settingsKeys.contains("rfBandwidth") || force) { + ostr << " m_rfBandwidth: " << m_rfBandwidth; + } + if (settingsKeys.contains("afBandwidth") || force) { + ostr << " m_afBandwidth: " << m_afBandwidth; + } + if (settingsKeys.contains("volume") || force) { + ostr << " m_volume: " << m_volume; + } + if (settingsKeys.contains("squelch") || force) { + ostr << " m_squelch: " << m_squelch; + } + if (settingsKeys.contains("audioMute") || force) { + ostr << " m_audioMute: " << m_audioMute; + } + if (settingsKeys.contains("rgbColor") || force) { + ostr << " m_rgbColor: " << m_rgbColor; + } + if (settingsKeys.contains("title") || force) { + ostr << " m_title: " << m_title.toStdString(); + } + if (settingsKeys.contains("audioDeviceName") || force) { + ostr << " m_audioDeviceName: " << m_audioDeviceName.toStdString(); + } + if (settingsKeys.contains("streamIndex") || force) { + ostr << " m_streamIndex: " << m_streamIndex; + } + if (settingsKeys.contains("useReverseAPI") || force) { + ostr << " m_useReverseAPI: " << m_useReverseAPI; + } + if (settingsKeys.contains("reverseAPIAddress") || force) { + ostr << " m_reverseAPIAddress: " << m_reverseAPIAddress.toStdString(); + } + if (settingsKeys.contains("reverseAPIPort") || force) { + ostr << " m_reverseAPIPort: " << m_reverseAPIPort; + } + if (settingsKeys.contains("reverseAPIDeviceIndex") || force) { + ostr << " m_reverseAPIDeviceIndex: " << m_reverseAPIDeviceIndex; + } + if (settingsKeys.contains("reverseAPIChannelIndex") || force) { + ostr << " m_reverseAPIChannelIndex: " << m_reverseAPIChannelIndex; + } + if (settingsKeys.contains("workspaceIndex") || force) { + ostr << " m_workspaceIndex: " << m_workspaceIndex; + } + if (settingsKeys.contains("hidden") || force) { + ostr << " m_hidden: " << m_hidden; + } + + return QString(ostr.str().c_str()); +} diff --git a/plugins/channelrx/demodwfm/wfmdemodsettings.h b/plugins/channelrx/demodwfm/wfmdemodsettings.h index c30dd7ed8..342cbd494 100644 --- a/plugins/channelrx/demodwfm/wfmdemodsettings.h +++ b/plugins/channelrx/demodwfm/wfmdemodsettings.h @@ -61,6 +61,8 @@ struct WFMDemodSettings void setRollupState(Serializable *rollupState) { m_rollupState = rollupState; } QByteArray serialize() const; bool deserialize(const QByteArray& data); + void applySettings(const QStringList& settingsKeys, const WFMDemodSettings& settings); + QString getDebugString(const QStringList& settingsKeys, bool force=false) const; static int requiredBW(int rfBW) { diff --git a/plugins/channelrx/demodwfm/wfmdemodsink.cpp b/plugins/channelrx/demodwfm/wfmdemodsink.cpp index 4c1d0aaf4..e2ab7cf23 100644 --- a/plugins/channelrx/demodwfm/wfmdemodsink.cpp +++ b/plugins/channelrx/demodwfm/wfmdemodsink.cpp @@ -50,7 +50,7 @@ WFMDemodSink::WFMDemodSink() : m_demodBuffer.resize(1<<12); m_demodBufferFill = 0; - applySettings(m_settings, true); + applySettings(QStringList(), m_settings, true); applyChannelSettings(m_channelSampleRate, m_channelFrequencyOffset, true); } @@ -219,26 +219,12 @@ void WFMDemodSink::applyChannelSettings(int channelSampleRate, int channelFreque m_channelFrequencyOffset = channelFrequencyOffset; } -void WFMDemodSink::applySettings(const WFMDemodSettings& settings, bool force) +void WFMDemodSink::applySettings(const QStringList& settingsKeys, const WFMDemodSettings& settings, bool force) { - qDebug() << "WFMDemodSink::applySettings:" - << " m_inputFrequencyOffset: " << settings.m_inputFrequencyOffset - << " m_rfBandwidth: " << settings.m_rfBandwidth - << " m_afBandwidth: " << settings.m_afBandwidth - << " m_volume: " << settings.m_volume - << " m_squelch: " << settings.m_squelch - << " m_audioDeviceName: " << settings.m_audioDeviceName - << " m_audioMute: " << settings.m_audioMute - << " 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() << "WFMDemodSink::applySettings:" << settings.getDebugString(settingsKeys, force); - if((settings.m_afBandwidth != m_settings.m_afBandwidth) || - (settings.m_rfBandwidth != m_settings.m_rfBandwidth) || force) + if((settingsKeys.contains("afBandwidth") && (settings.m_afBandwidth != m_settings.m_afBandwidth)) || + (settingsKeys.contains("rfBandwidth") && (settings.m_rfBandwidth != m_settings.m_rfBandwidth)) || force) { qDebug() << "WFMDemodSink::applySettings: m_interpolator.create"; m_interpolator.create(16, m_channelSampleRate, settings.m_afBandwidth); @@ -255,11 +241,15 @@ void WFMDemodSink::applySettings(const WFMDemodSettings& settings, bool force) qDebug("WFMDemodSink::applySettings: m_fmExcursion: %f", m_fmExcursion); } - if ((settings.m_squelch != m_settings.m_squelch) || force) + if ((settingsKeys.contains("squelch") && (settings.m_squelch != m_settings.m_squelch)) || force) { qDebug() << "WFMDemodSink::applySettings: set m_squelchLevel"; m_squelchLevel = pow(10.0, settings.m_squelch / 10.0); } - m_settings = settings; + if (force) { + m_settings = settings; + } else { + m_settings.applySettings(settingsKeys, settings); + } } diff --git a/plugins/channelrx/demodwfm/wfmdemodsink.h b/plugins/channelrx/demodwfm/wfmdemodsink.h index 2ad0d16b5..48098408f 100644 --- a/plugins/channelrx/demodwfm/wfmdemodsink.h +++ b/plugins/channelrx/demodwfm/wfmdemodsink.h @@ -62,7 +62,7 @@ public: } void applyChannelSettings(int channelSampleRate, int channelFrequencyOffset, bool force = false); - void applySettings(const WFMDemodSettings& settings, bool force = false); + void applySettings(const QStringList& settingsKeys, const WFMDemodSettings& settings, bool force = false); AudioFifo *getAudioFifo() { return &m_audioFifo; } void setAudioFifoLabel(const QString& label) { m_audioFifo.setLabel(label); } diff --git a/plugins/channelrx/filesink/filesink.cpp b/plugins/channelrx/filesink/filesink.cpp index 486e5cf78..8d4a4d06e 100644 --- a/plugins/channelrx/filesink/filesink.cpp +++ b/plugins/channelrx/filesink/filesink.cpp @@ -62,7 +62,7 @@ FileSink::FileSink(DeviceAPI *deviceAPI) : { setObjectName(m_channelId); - applySettings(m_settings, true); + applySettings(QStringList(), m_settings, true); m_deviceAPI->addChannelSink(this); m_deviceAPI->addChannelSinkAPI(this); @@ -181,7 +181,7 @@ void FileSink::start() DSPSignalNotification *dspMsg = new DSPSignalNotification(m_basebandSampleRate, m_centerFrequency); m_basebandSink->getInputMessageQueue()->push(dspMsg); - FileSinkBaseband::MsgConfigureFileSinkBaseband *msg = FileSinkBaseband::MsgConfigureFileSinkBaseband::create(m_settings, true); + FileSinkBaseband::MsgConfigureFileSinkBaseband *msg = FileSinkBaseband::MsgConfigureFileSinkBaseband::create(QStringList(), m_settings, true); m_basebandSink->getInputMessageQueue()->push(msg); if (getMessageQueueToGUI()) @@ -241,7 +241,7 @@ bool FileSink::handleMessage(const Message& cmd) { MsgConfigureFileSink& cfg = (MsgConfigureFileSink&) cmd; qDebug() << "FileSink::handleMessage: MsgConfigureFileSink"; - applySettings(cfg.getSettings(), cfg.getForce()); + applySettings(cfg.getSettingsKeys(), cfg.getSettings(), cfg.getForce()); return true; } @@ -261,14 +261,14 @@ bool FileSink::deserialize(const QByteArray& data) (void) data; if (m_settings.deserialize(data)) { - MsgConfigureFileSink *msg = MsgConfigureFileSink::create(m_settings, true); + MsgConfigureFileSink *msg = MsgConfigureFileSink::create(QStringList(), m_settings, true); m_inputMessageQueue.push(msg); return true; } else { m_settings.resetToDefaults(); - MsgConfigureFileSink *msg = MsgConfigureFileSink::create(m_settings, true); + MsgConfigureFileSink *msg = MsgConfigureFileSink::create(QStringList(), m_settings, true); m_inputMessageQueue.push(msg); return false; } @@ -322,48 +322,11 @@ DeviceSampleSource *FileSink::getLocalDevice(uint32_t index) return nullptr; } -void FileSink::applySettings(const FileSinkSettings& settings, bool force) +void FileSink::applySettings(const QStringList& settingsKeys, const FileSinkSettings& settings, bool force) { - qDebug() << "FileSink::applySettings:" - << "m_inputFrequencyOffset: " << settings.m_inputFrequencyOffset - << "m_log2Decim: " << settings.m_log2Decim - << "m_fileRecordName: " << settings.m_fileRecordName - << "force: " << force; + qDebug() << "FileSink::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 (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 { @@ -374,34 +337,40 @@ void FileSink::applySettings(const FileSinkSettings& settings, bool force) m_settings.m_streamIndex = settings.m_streamIndex; // make sure ChannelAPI::getStreamIndex() is consistent emit streamIndexChanged(settings.m_streamIndex); } - - reverseAPIKeys.append("streamIndex"); } if (m_running) { - FileSinkBaseband::MsgConfigureFileSinkBaseband *msg = FileSinkBaseband::MsgConfigureFileSinkBaseband::create(settings, force); + FileSinkBaseband::MsgConfigureFileSinkBaseband *msg = FileSinkBaseband::MsgConfigureFileSinkBaseband::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; + if (force) { + m_settings = settings; + } else { + m_settings.applySettings(settingsKeys, settings); + } } void FileSink::record(bool record) @@ -470,13 +439,13 @@ int FileSink::webapiSettingsPutPatch( FileSinkSettings settings = m_settings; webapiUpdateChannelSettings(settings, channelSettingsKeys, response); - MsgConfigureFileSink *msg = MsgConfigureFileSink::create(settings, force); + MsgConfigureFileSink *msg = MsgConfigureFileSink::create(channelSettingsKeys, settings, force); m_inputMessageQueue.push(msg); qDebug("FileSink::webapiSettingsPutPatch: forward to GUI: %p", m_guiMessageQueue); if (m_guiMessageQueue) // forward to GUI if any { - MsgConfigureFileSink *msgToGUI = MsgConfigureFileSink::create(settings, force); + MsgConfigureFileSink *msgToGUI = MsgConfigureFileSink::create(channelSettingsKeys, settings, force); m_guiMessageQueue->push(msgToGUI); } @@ -697,7 +666,7 @@ void FileSink::webapiFormatChannelReport(SWGSDRangel::SWGChannelReport& response } } -void FileSink::webapiReverseSendSettings(QList& channelSettingsKeys, const FileSinkSettings& settings, bool force) +void FileSink::webapiReverseSendSettings(const QList& channelSettingsKeys, const FileSinkSettings& settings, bool force) { SWGSDRangel::SWGChannelSettings *swgChannelSettings = new SWGSDRangel::SWGChannelSettings(); webapiFormatChannelSettings(channelSettingsKeys, swgChannelSettings, settings, force); @@ -724,7 +693,7 @@ void FileSink::webapiReverseSendSettings(QList& channelSettingsKeys, co void FileSink::sendChannelSettings( const QList& pipes, - QList& channelSettingsKeys, + const QList& channelSettingsKeys, const FileSinkSettings& settings, bool force) { @@ -748,7 +717,7 @@ void FileSink::sendChannelSettings( } void FileSink::webapiFormatChannelSettings( - QList& channelSettingsKeys, + const QList& channelSettingsKeys, SWGSDRangel::SWGChannelSettings *swgChannelSettings, const FileSinkSettings& settings, bool force diff --git a/plugins/channelrx/filesink/filesink.h b/plugins/channelrx/filesink/filesink.h index 16079ce5a..e1c4522cf 100644 --- a/plugins/channelrx/filesink/filesink.h +++ b/plugins/channelrx/filesink/filesink.h @@ -46,20 +46,23 @@ public: public: const FileSinkSettings& getSettings() const { return m_settings; } + const QStringList& getSettingsKeys() const { return m_settingsKeys; } bool getForce() const { return m_force; } - static MsgConfigureFileSink* create(const FileSinkSettings& settings, bool force) + static MsgConfigureFileSink* create(const QStringList& settingsKeys, const FileSinkSettings& settings, bool force) { - return new MsgConfigureFileSink(settings, force); + return new MsgConfigureFileSink(settingsKeys, settings, force); } private: FileSinkSettings m_settings; + QStringList m_settingsKeys; bool m_force; - MsgConfigureFileSink(const FileSinkSettings& settings, bool force) : + MsgConfigureFileSink(const QStringList& settingsKeys, const FileSinkSettings& 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 FileSinkSettings& settings, bool force = false); + void applySettings(const QStringList& settingsKeys, const FileSinkSettings& 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 FileSinkSettings& settings, bool force); + void webapiReverseSendSettings(const QList& channelSettingsKeys, const FileSinkSettings& settings, bool force); void sendChannelSettings( const QList& pipes, - QList& channelSettingsKeys, + const QList& channelSettingsKeys, const FileSinkSettings& settings, bool force ); void webapiFormatChannelSettings( - QList& channelSettingsKeys, + const QList& channelSettingsKeys, SWGSDRangel::SWGChannelSettings *swgChannelSettings, const FileSinkSettings& settings, bool force diff --git a/plugins/channelrx/filesink/filesinkbaseband.cpp b/plugins/channelrx/filesink/filesinkbaseband.cpp index 2e2e1c689..e1f97d427 100644 --- a/plugins/channelrx/filesink/filesinkbaseband.cpp +++ b/plugins/channelrx/filesink/filesinkbaseband.cpp @@ -153,7 +153,7 @@ bool FileSinkBaseband::handleMessage(const Message& cmd) MsgConfigureFileSinkBaseband& cfg = (MsgConfigureFileSinkBaseband&) cmd; qDebug() << "FileSinkBaseband::handleMessage: MsgConfigureFileSinkBaseband"; - applySettings(cfg.getSettings(), cfg.getForce()); + applySettings(cfg.getSettingsKeys(), cfg.getSettings(), cfg.getForce()); return true; } @@ -197,17 +197,12 @@ bool FileSinkBaseband::handleMessage(const Message& cmd) } } -void FileSinkBaseband::applySettings(const FileSinkSettings& settings, bool force) +void FileSinkBaseband::applySettings(const QStringList& settingsKeys, const FileSinkSettings& settings, bool force) { - qDebug() << "FileSinkBaseband::applySettings:" - << "m_log2Decim:" << settings.m_log2Decim - << "m_inputFrequencyOffset:" << settings.m_inputFrequencyOffset - << "m_fileRecordName: " << settings.m_fileRecordName - << "m_centerFrequency: " << m_centerFrequency - << "force: " << force; + qDebug() << "FileSinkBaseband::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<glSpectrumGUI->updateSettings(); m_channelMarker.updateSettings(static_cast(m_settings.m_channelMarker)); displaySettings(); + applySettings(QStringList(), true); blockApplySettings(false); return true; } @@ -230,7 +231,7 @@ FileSinkGUI::FileSinkGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Baseban displaySettings(); makeUIConnections(); - applySettings(true); + applySettings(QStringList(), true); DialPopup::addPopupsToChildDials(this); m_resizer.enableChildMouseTracking(); } @@ -246,13 +247,13 @@ void FileSinkGUI::blockApplySettings(bool block) m_doApplySettings = !block; } -void FileSinkGUI::applySettings(bool force) +void FileSinkGUI::applySettings(const QStringList& settingsKeys, bool force) { if (m_doApplySettings) { setTitleColor(m_channelMarker.getColor()); - FileSink::MsgConfigureFileSink* message = FileSink::MsgConfigureFileSink::create(m_settings, force); + FileSink::MsgConfigureFileSink* message = FileSink::MsgConfigureFileSink::create(settingsKeys, m_settings, force); m_fileSink->getInputMessageQueue()->push(message); } } @@ -331,7 +332,7 @@ void FileSinkGUI::channelMarkerChangedByCursor() ui->deltaFrequency->setValue(m_channelMarker.getCenterFrequency()); m_settings.m_inputFrequencyOffset = m_channelMarker.getCenterFrequency(); setPosFromFrequency(); - applySettings(); + applySettings(QStringList("inputFrequencyOffset")); } void FileSinkGUI::channelMarkerHighlightedByCursor() @@ -358,7 +359,7 @@ void FileSinkGUI::onWidgetRolled(QWidget* widget, bool rollDown) (void) rollDown; getRollupContents()->saveState(m_rollupState); - applySettings(); + applySettings(QStringList()); } void FileSinkGUI::onMenuDialogCalled(const QPoint &p) @@ -403,7 +404,14 @@ void FileSinkGUI::onMenuDialogCalled(const QPoint &p) updateIndexLabel(); } - applySettings(); + applySettings(QStringList() << "rgbColor" + << "title" + << "useReverseAPI" + << "reverseAPIAddress" + << "reverseAPIPort" + << "reverseAPIDeviceIndex" + << "reverseAPIChannelIndex" + << "streamIndex"); } resetContextMenuType(); @@ -417,7 +425,7 @@ void FileSinkGUI::on_deltaFrequency_changed(qint64 value) m_settings.m_inputFrequencyOffset = m_channelMarker.getCenterFrequency(); updateAbsoluteCenterFrequency(); setPosFromFrequency(); - applySettings(); + applySettings(QStringList("inputFrequencyOffset")); } } @@ -427,7 +435,7 @@ void FileSinkGUI::on_decimationFactor_currentIndexChanged(int index) applyDecimation(); displayRate(); displayPos(); - applySettings(); + applySettings(QStringList("log2Decim")); if (m_fixedPosition) { setFrequencyFromPos(); @@ -446,7 +454,7 @@ void FileSinkGUI::on_fixedPosition_toggled(bool checked) if (m_fixedPosition) { setFrequencyFromPos(); - applySettings(); + applySettings(QStringList("inputFrequencyOffset")); } } @@ -458,7 +466,7 @@ void FileSinkGUI::on_position_valueChanged(int value) if (m_fixedPosition) { setFrequencyFromPos(); - applySettings(); + applySettings(QStringList("inputFrequencyOffset")); } } @@ -476,35 +484,35 @@ void FileSinkGUI::on_spectrumSquelch_toggled(bool checked) ui->squelchedRecording->blockSignals(false); } - applySettings(); + applySettings(QStringList("spectrumSquelchMode")); } void FileSinkGUI::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 FileSinkGUI::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 FileSinkGUI::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 FileSinkGUI::on_squelchedRecording_toggled(bool checked) { ui->record->setEnabled(!checked); m_settings.m_squelchRecordingEnable = checked; - applySettings(); + applySettings(QStringList("squelchRecordingEnable")); } void FileSinkGUI::on_record_toggled(bool checked) @@ -534,7 +542,7 @@ void FileSinkGUI::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/filesink/filesinkgui.h b/plugins/channelrx/filesink/filesinkgui.h index 25c85541d..7fa8608da 100644 --- a/plugins/channelrx/filesink/filesinkgui.h +++ b/plugins/channelrx/filesink/filesinkgui.h @@ -94,7 +94,7 @@ private: virtual ~FileSinkGUI(); 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/filesink/filesinksettings.cpp b/plugins/channelrx/filesink/filesinksettings.cpp index b3d626ed1..e0c89c08e 100644 --- a/plugins/channelrx/filesink/filesinksettings.cpp +++ b/plugins/channelrx/filesink/filesinksettings.cpp @@ -173,6 +173,129 @@ bool FileSinkSettings::deserialize(const QByteArray& data) } } +void FileSinkSettings::applySettings(const QStringList& settingsKeys, const FileSinkSettings& settings) +{ + if (settingsKeys.contains("inputFrequencyOffset")) { + m_inputFrequencyOffset = settings.m_inputFrequencyOffset; + } + if (settingsKeys.contains("fileRecordName")) { + m_fileRecordName = settings.m_fileRecordName; + } + if (settingsKeys.contains("rgbColor")) { + m_rgbColor = settings.m_rgbColor; + } + if (settingsKeys.contains("title")) { + m_title = settings.m_title; + } + if (settingsKeys.contains("log2Decim")) { + m_log2Decim = settings.m_log2Decim; + } + if (settingsKeys.contains("spectrumSquelchMode")) { + m_spectrumSquelchMode = settings.m_spectrumSquelchMode; + } + if (settingsKeys.contains("spectrumSquelch")) { + m_spectrumSquelch = settings.m_spectrumSquelch; + } + if (settingsKeys.contains("preRecordTime")) { + m_preRecordTime = settings.m_preRecordTime; + } + if (settingsKeys.contains("squelchPostRecordTime")) { + m_squelchPostRecordTime = settings.m_squelchPostRecordTime; + } + if (settingsKeys.contains("squelchRecordingEnable")) { + m_squelchRecordingEnable = settings.m_squelchRecordingEnable; + } + if (settingsKeys.contains("streamIndex")) { + m_streamIndex = settings.m_streamIndex; + } + if (settingsKeys.contains("useReverseAPI")) { + m_useReverseAPI = settings.m_useReverseAPI; + } + if (settingsKeys.contains("reverseAPIAddress")) { + m_reverseAPIAddress = settings.m_reverseAPIAddress; + } + if (settingsKeys.contains("reverseAPIPort")) { + m_reverseAPIPort = settings.m_reverseAPIPort; + } + if (settingsKeys.contains("reverseAPIDeviceIndex")) { + m_reverseAPIDeviceIndex = settings.m_reverseAPIDeviceIndex; + } + if (settingsKeys.contains("reverseAPIChannelIndex")) { + m_reverseAPIChannelIndex = settings.m_reverseAPIChannelIndex; + } + if (settingsKeys.contains("workspaceIndex")) { + m_workspaceIndex = settings.m_workspaceIndex; + } + if (settingsKeys.contains("geometryBytes")) { + m_geometryBytes = settings.m_geometryBytes; + } + if (settingsKeys.contains("hidden")) { + m_hidden = settings.m_hidden; + } +} + +QString FileSinkSettings::getDebugString(const QStringList& settingsKeys, bool force) const +{ + std::ostringstream ostr; + + if (settingsKeys.contains("inputFrequencyOffset") || force) { + ostr << " m_inputFrequencyOffset: " << m_inputFrequencyOffset; + } + if (settingsKeys.contains("fileRecordName") || force) { + ostr << " m_fileRecordName: " << m_fileRecordName.toStdString(); + } + if (settingsKeys.contains("rgbColor") || force) { + ostr << " m_rgbColor: " << m_rgbColor; + } + if (settingsKeys.contains("title") || force) { + ostr << " m_title: " << m_title.toStdString(); + } + if (settingsKeys.contains("log2Decim") || force) { + ostr << " m_log2Decim: " << m_log2Decim; + } + if (settingsKeys.contains("spectrumSquelchMode") || force) { + ostr << " m_spectrumSquelchMode: " << m_spectrumSquelchMode; + } + if (settingsKeys.contains("spectrumSquelch") || force) { + ostr << " m_spectrumSquelch: " << m_spectrumSquelch; + } + if (settingsKeys.contains("preRecordTime") || force) { + ostr << " m_preRecordTime: " << m_preRecordTime; + } + if (settingsKeys.contains("squelchPostRecordTime") || force) { + ostr << " m_squelchPostRecordTime: " << m_squelchPostRecordTime; + } + if (settingsKeys.contains("squelchRecordingEnable") || force) { + ostr << " m_squelchRecordingEnable: " << m_squelchRecordingEnable; + } + if (settingsKeys.contains("streamIndex") || force) { + ostr << " m_streamIndex: " << m_streamIndex; + } + if (settingsKeys.contains("useReverseAPI") || force) { + ostr << " m_useReverseAPI: " << m_useReverseAPI; + } + if (settingsKeys.contains("reverseAPIAddress") || force) { + ostr << " m_reverseAPIAddress: " << m_reverseAPIAddress.toStdString(); + } + if (settingsKeys.contains("reverseAPIPort") || force) { + ostr << " m_reverseAPIPort: " << m_reverseAPIPort; + } + if (settingsKeys.contains("reverseAPIDeviceIndex") || force) { + ostr << " m_reverseAPIDeviceIndex: " << m_reverseAPIDeviceIndex; + } + if (settingsKeys.contains("reverseAPIChannelIndex") || force) { + ostr << " m_reverseAPIChannelIndex: " << m_reverseAPIChannelIndex; + } + if (settingsKeys.contains("workspaceIndex") || force) { + ostr << " m_workspaceIndex: " << m_workspaceIndex; + } + if (settingsKeys.contains("hidden") || force) { + ostr << " m_hidden: " << m_hidden; + } + + return QString(ostr.str().c_str()); +} + unsigned int FileSinkSettings::getNbFixedShiftIndexes(int log2Decim) { int decim = (1<addChannelSink(this); m_deviceAPI->addChannelSinkAPI(this); @@ -144,7 +144,7 @@ void FreqTracker::start() m_basebandSink->reset(); m_thread->start(); - FreqTrackerBaseband::MsgConfigureFreqTrackerBaseband *msg = FreqTrackerBaseband::MsgConfigureFreqTrackerBaseband::create(m_settings, true); + FreqTrackerBaseband::MsgConfigureFreqTrackerBaseband *msg = FreqTrackerBaseband::MsgConfigureFreqTrackerBaseband::create(QStringList(), m_settings, true); m_basebandSink->getInputMessageQueue()->push(msg); m_running = true; @@ -187,7 +187,7 @@ bool FreqTracker::handleMessage(const Message& cmd) { MsgConfigureFreqTracker& cfg = (MsgConfigureFreqTracker&) cmd; qDebug() << "FreqTracker::handleMessage: MsgConfigureFreqTracker"; - applySettings(cfg.getSettings(), cfg.getForce()); + applySettings(cfg.getSettingsKeys(), cfg.getSettings(), cfg.getForce()); return true; } @@ -196,7 +196,7 @@ bool FreqTracker::handleMessage(const Message& cmd) FreqTrackerReport::MsgSinkFrequencyOffsetNotification& cfg = (FreqTrackerReport::MsgSinkFrequencyOffsetNotification&) cmd; FreqTrackerSettings settings = m_settings; settings.m_inputFrequencyOffset = cfg.getFrequencyOffset(); - applySettings(settings, false); + applySettings(QStringList("inputFrequencyOffset"), settings, false); if (getMessageQueueToGUI()) { @@ -216,88 +216,22 @@ void FreqTracker::setCenterFrequency(qint64 frequency) { FreqTrackerSettings settings = m_settings; settings.m_inputFrequencyOffset = frequency; - applySettings(settings, false); + applySettings(QStringList("inputFrequencyOffset"), settings, false); if (m_guiMessageQueue) // forward to GUI if any { - MsgConfigureFreqTracker *msgToGUI = MsgConfigureFreqTracker::create(settings, false); + MsgConfigureFreqTracker *msgToGUI = MsgConfigureFreqTracker::create(QStringList("inputFrequencyOffset"), settings, false); m_guiMessageQueue->push(msgToGUI); } } -void FreqTracker::applySettings(const FreqTrackerSettings& settings, bool force) +void FreqTracker::applySettings(const QStringList& settingsKeys, const FreqTrackerSettings& settings, bool force) { - if (!settings.m_tracking) - { - qDebug() << "FreqTracker::applySettings:" - << " m_inputFrequencyOffset: " << settings.m_inputFrequencyOffset - << " m_rfBandwidth: " << settings.m_rfBandwidth - << " m_log2Decim: " << settings.m_log2Decim - << " m_squelch: " << settings.m_squelch - << " m_rgbColor: " << settings.m_rgbColor - << " m_title: " << settings.m_title - << " m_alphaEMA: " << settings.m_alphaEMA - << " m_tracking: " << settings.m_tracking - << " m_trackerType: " << settings.m_trackerType - << " m_pllPskOrder: " << settings.m_pllPskOrder - << " m_rrc: " << settings.m_rrc - << " m_rrcRolloff: " << settings.m_rrcRolloff - << " m_streamIndex: " << settings.m_streamIndex - << " m_spanLog2: " << settings.m_spanLog2 - << " 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; + if (!settings.m_tracking) { + qDebug() << "FreqTracker::applySettings:" << settings.getDebugString(settingsKeys, force); } - QList reverseAPIKeys; - - if ((m_settings.m_inputFrequencyOffset != settings.m_inputFrequencyOffset) || force) { - reverseAPIKeys.append("inputFrequencyOffset"); - } - if ((m_settings.m_log2Decim != settings.m_log2Decim) || force) { - reverseAPIKeys.append("log2Decim"); - } - if ((m_settings.m_rfBandwidth != settings.m_rfBandwidth) || force) { - reverseAPIKeys.append("rfBandwidth"); - } - if ((m_settings.m_squelch != settings.m_squelch) || force) { - reverseAPIKeys.append("squelch"); - } - if ((m_settings.m_rgbColor != settings.m_rgbColor) || force) { - reverseAPIKeys.append("rgbColor"); - } - if ((m_settings.m_title != settings.m_title) || force) { - reverseAPIKeys.append("title"); - } - if ((m_settings.m_alphaEMA != settings.m_alphaEMA) || force) { - reverseAPIKeys.append("alphaEMA"); - } - if ((m_settings.m_spanLog2 != settings.m_spanLog2) || force) { - reverseAPIKeys.append("spanLog2"); - } - if ((m_settings.m_tracking != settings.m_tracking) || force) { - reverseAPIKeys.append("tracking"); - } - if ((m_settings.m_trackerType != settings.m_trackerType) || force) { - reverseAPIKeys.append("trackerType"); - } - if ((m_settings.m_pllPskOrder != settings.m_pllPskOrder) || force) { - reverseAPIKeys.append("pllPskOrder"); - } - if ((m_settings.m_rrc != settings.m_rrc) || force) { - reverseAPIKeys.append("rrc"); - } - if ((m_settings.m_rrcRolloff != settings.m_rrcRolloff) || force) { - reverseAPIKeys.append("rrcRolloff"); - } - if ((m_settings.m_squelchGate != settings.m_squelchGate) || force) { - reverseAPIKeys.append("squelchGate"); - } - - 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 { @@ -308,34 +242,36 @@ void FreqTracker::applySettings(const FreqTrackerSettings& settings, bool force) m_settings.m_streamIndex = settings.m_streamIndex; // make sure ChannelAPI::getStreamIndex() is consistent emit streamIndexChanged(settings.m_streamIndex); } - - reverseAPIKeys.append("streamIndex"); } if (m_running) { - FreqTrackerBaseband::MsgConfigureFreqTrackerBaseband *msg = FreqTrackerBaseband::MsgConfigureFreqTrackerBaseband::create(settings, force); + FreqTrackerBaseband::MsgConfigureFreqTrackerBaseband *msg = FreqTrackerBaseband::MsgConfigureFreqTrackerBaseband::create(settingsKeys, settings, force); m_basebandSink->getInputMessageQueue()->push(msg); } - if (settings.m_useReverseAPI) + if (settingsKeys.contains("useReverseAPI") && (m_settings.m_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; + if (force) { + m_settings = settings; + } else { + m_settings.applySettings(settingsKeys, settings); + } } @@ -348,14 +284,14 @@ bool FreqTracker::deserialize(const QByteArray& data) { if (m_settings.deserialize(data)) { - MsgConfigureFreqTracker *msg = MsgConfigureFreqTracker::create(m_settings, true); + MsgConfigureFreqTracker *msg = MsgConfigureFreqTracker::create(QStringList(), m_settings, true); m_inputMessageQueue.push(msg); return true; } else { m_settings.resetToDefaults(); - MsgConfigureFreqTracker *msg = MsgConfigureFreqTracker::create(m_settings, true); + MsgConfigureFreqTracker *msg = MsgConfigureFreqTracker::create(QStringList(), m_settings, true); m_inputMessageQueue.push(msg); return false; } @@ -391,13 +327,13 @@ int FreqTracker::webapiSettingsPutPatch( FreqTrackerSettings settings = m_settings; webapiUpdateChannelSettings(settings, channelSettingsKeys, response); - MsgConfigureFreqTracker *msg = MsgConfigureFreqTracker::create(settings, force); + MsgConfigureFreqTracker *msg = MsgConfigureFreqTracker::create(channelSettingsKeys, settings, force); m_inputMessageQueue.push(msg); qDebug("FreqTracker::webapiSettingsPutPatch: forward to GUI: %p", m_guiMessageQueue); if (m_guiMessageQueue) // forward to GUI if any { - MsgConfigureFreqTracker *msgToGUI = MsgConfigureFreqTracker::create(settings, force); + MsgConfigureFreqTracker *msgToGUI = MsgConfigureFreqTracker::create(channelSettingsKeys, settings, force); m_guiMessageQueue->push(msgToGUI); } @@ -593,7 +529,7 @@ void FreqTracker::webapiFormatChannelReport(SWGSDRangel::SWGChannelReport& respo response.getFreqTrackerReport()->setTrackingDeltaFrequency(getAvgDeltaFreq()); } -void FreqTracker::webapiReverseSendSettings(QList& channelSettingsKeys, const FreqTrackerSettings& settings, bool force) +void FreqTracker::webapiReverseSendSettings(const QList& channelSettingsKeys, const FreqTrackerSettings& settings, bool force) { SWGSDRangel::SWGChannelSettings *swgChannelSettings = new SWGSDRangel::SWGChannelSettings(); webapiFormatChannelSettings(channelSettingsKeys, swgChannelSettings, settings, force); @@ -620,7 +556,7 @@ void FreqTracker::webapiReverseSendSettings(QList& channelSettingsKeys, void FreqTracker::sendChannelSettings( const QList& pipes, - QList& channelSettingsKeys, + const QList& channelSettingsKeys, const FreqTrackerSettings& settings, bool force) { @@ -644,7 +580,7 @@ void FreqTracker::sendChannelSettings( } void FreqTracker::webapiFormatChannelSettings( - QList& channelSettingsKeys, + const QList& channelSettingsKeys, SWGSDRangel::SWGChannelSettings *swgChannelSettings, const FreqTrackerSettings& settings, bool force) diff --git a/plugins/channelrx/freqtracker/freqtracker.h b/plugins/channelrx/freqtracker/freqtracker.h index 451ebf44f..d384a3a33 100644 --- a/plugins/channelrx/freqtracker/freqtracker.h +++ b/plugins/channelrx/freqtracker/freqtracker.h @@ -46,20 +46,23 @@ public: public: const FreqTrackerSettings& getSettings() const { return m_settings; } + const QStringList& getSettingsKeys() const { return m_settingsKeys; } bool getForce() const { return m_force; } - static MsgConfigureFreqTracker* create(const FreqTrackerSettings& settings, bool force) + static MsgConfigureFreqTracker* create(const QStringList& settingsKeys, const FreqTrackerSettings& settings, bool force) { - return new MsgConfigureFreqTracker(settings, force); + return new MsgConfigureFreqTracker(settingsKeys, settings, force); } private: FreqTrackerSettings m_settings; + QStringList m_settingsKeys; bool m_force; - MsgConfigureFreqTracker(const FreqTrackerSettings& settings, bool force) : + MsgConfigureFreqTracker(const QStringList& settingsKeys, const FreqTrackerSettings& settings, bool force) : Message(), m_settings(settings), + m_settingsKeys(settingsKeys), m_force(force) { } }; @@ -159,17 +162,17 @@ private: QNetworkRequest m_networkRequest; virtual bool handleMessage(const Message& cmd); - void applySettings(const FreqTrackerSettings& settings, bool force = false); + void applySettings(const QStringList& settingsKeys, const FreqTrackerSettings& settings, bool force = false); void webapiFormatChannelReport(SWGSDRangel::SWGChannelReport& response); - void webapiReverseSendSettings(QList& channelSettingsKeys, const FreqTrackerSettings& settings, bool force); + void webapiReverseSendSettings(const QList& channelSettingsKeys, const FreqTrackerSettings& settings, bool force); void sendChannelSettings( const QList& pipes, - QList& channelSettingsKeys, + const QList& channelSettingsKeys, const FreqTrackerSettings& settings, bool force ); void webapiFormatChannelSettings( - QList& channelSettingsKeys, + const QList& channelSettingsKeys, SWGSDRangel::SWGChannelSettings *swgChannelSettings, const FreqTrackerSettings& settings, bool force diff --git a/plugins/channelrx/freqtracker/freqtrackerbaseband.cpp b/plugins/channelrx/freqtracker/freqtrackerbaseband.cpp index 0f297759c..ec4d9a8a0 100644 --- a/plugins/channelrx/freqtracker/freqtrackerbaseband.cpp +++ b/plugins/channelrx/freqtracker/freqtrackerbaseband.cpp @@ -105,7 +105,7 @@ bool FreqTrackerBaseband::handleMessage(const Message& cmd) MsgConfigureFreqTrackerBaseband& cfg = (MsgConfigureFreqTrackerBaseband&) cmd; qDebug() << "FreqTrackerBaseband::handleMessage: MsgConfigureFreqTrackerBaseband"; - applySettings(cfg.getSettings(), cfg.getForce()); + applySettings(cfg.getSettingsKeys(), cfg.getSettings(), cfg.getForce()); return true; } @@ -132,10 +132,10 @@ bool FreqTrackerBaseband::handleMessage(const Message& cmd) } } -void FreqTrackerBaseband::applySettings(const FreqTrackerSettings& settings, bool force) +void FreqTrackerBaseband::applySettings(const QStringList& settingsKeys, const FreqTrackerSettings& settings, bool force) { - if ((m_settings.m_inputFrequencyOffset != settings.m_inputFrequencyOffset) - || (m_settings.m_log2Decim != settings.m_log2Decim)|| force) + if ((settingsKeys.contains("inputFrequencyOffset") && (m_settings.m_inputFrequencyOffset != settings.m_inputFrequencyOffset)) + || (settingsKeys.contains("log2Decim") && (m_settings.m_log2Decim != settings.m_log2Decim)) || force) { m_channelizer->setChannelization(m_basebandSampleRate/(1<deltaFrequency->setValue(m_channelMarker.getCenterFrequency()); m_settings.m_inputFrequencyOffset = m_channelMarker.getCenterFrequency(); - applySettings(); + applySettings(QStringList("inputFrequencyOffset")); } void FreqTrackerGUI::channelMarkerHighlightedByCursor() @@ -154,7 +154,7 @@ void FreqTrackerGUI::on_deltaFrequency_changed(qint64 value) m_channelMarker.setCenterFrequency(value); m_settings.m_inputFrequencyOffset = m_channelMarker.getCenterFrequency(); updateAbsoluteCenterFrequency(); - applySettings(); + applySettings(QStringList("inputFrequencyOffset")); } void FreqTrackerGUI::on_log2Decim_currentIndexChanged(int index) @@ -169,7 +169,7 @@ void FreqTrackerGUI::on_log2Decim_currentIndexChanged(int index) ui->rfBW->setMaximum(sinkSampleRate/100); } - applySettings(); + applySettings(QStringList("log2Decim")); } void FreqTrackerGUI::on_rfBW_valueChanged(int value) @@ -177,7 +177,7 @@ void FreqTrackerGUI::on_rfBW_valueChanged(int value) ui->rfBWText->setText(QString("%1 kHz").arg(value / 10.0, 0, 'f', 1)); m_channelMarker.setBandwidth(value * 100); m_settings.m_rfBandwidth = value * 100; - applySettings(); + applySettings(QStringList("rfBandwidth")); } void FreqTrackerGUI::on_tracking_toggled(bool checked) @@ -189,7 +189,7 @@ void FreqTrackerGUI::on_tracking_toggled(bool checked) } m_settings.m_tracking = checked; - applySettings(); + applySettings(QStringList("tracking")); } void FreqTrackerGUI::on_alphaEMA_valueChanged(int value) @@ -197,13 +197,13 @@ void FreqTrackerGUI::on_alphaEMA_valueChanged(int value) m_settings.m_alphaEMA = value / 100.0; QString alphaEMAStr = QString::number(m_settings.m_alphaEMA, 'f', 2); ui->alphaEMAText->setText(alphaEMAStr); - applySettings(); + applySettings(QStringList("alphaEMA")); } void FreqTrackerGUI::on_trackerType_currentIndexChanged(int index) { m_settings.m_trackerType = (FreqTrackerSettings::TrackerType) index; - applySettings(); + applySettings(QStringList("trackerType")); } void FreqTrackerGUI::on_pllPskOrder_currentIndexChanged(int index) @@ -213,13 +213,13 @@ void FreqTrackerGUI::on_pllPskOrder_currentIndexChanged(int index) } m_settings.m_pllPskOrder = 1< 100 ? 100 : value; QString rolloffStr = QString::number(value/100.0, 'f', 2); ui->rrcRolloffText->setText(rolloffStr); - applySettings(); + applySettings(QStringList("rrcRolloff")); } void FreqTrackerGUI::on_squelch_valueChanged(int value) { ui->squelchText->setText(QString("%1 dB").arg(value)); m_settings.m_squelch = value; - applySettings(); + applySettings(QStringList("squelch")); } void FreqTrackerGUI::on_squelchGate_valueChanged(int value) { ui->squelchGateText->setText(QString("%1").arg(value * 10.0f, 0, 'f', 0)); m_settings.m_squelchGate = value; - applySettings(); + applySettings(QStringList("squelchGate")); } void FreqTrackerGUI::on_spanLog2_valueChanged(int value) @@ -259,7 +259,7 @@ void FreqTrackerGUI::onWidgetRolled(QWidget* widget, bool rollDown) (void) rollDown; getRollupContents()->saveState(m_rollupState); - applySettings(); + applySettings(QStringList()); } void FreqTrackerGUI::onMenuDialogCalled(const QPoint &p) @@ -304,7 +304,8 @@ void FreqTrackerGUI::onMenuDialogCalled(const QPoint &p) updateIndexLabel(); } - applySettings(); + applySettings(QStringList({"rgbColor", "title", "useReverseAPI", "reverseAPIAddress", + "reverseAPIPort", "reverseAPIDeviceIndex", "reverseAPIChannelIndex", "streamIndex"})); } resetContextMenuType(); @@ -375,7 +376,7 @@ FreqTrackerGUI::FreqTrackerGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, B displaySettings(); makeUIConnections(); - applySettings(true); + applySettings(QStringList(), true); DialPopup::addPopupsToChildDials(this); m_resizer.enableChildMouseTracking(); } @@ -390,11 +391,11 @@ void FreqTrackerGUI::blockApplySettings(bool block) m_doApplySettings = !block; } -void FreqTrackerGUI::applySettings(bool force) +void FreqTrackerGUI::applySettings(const QStringList& settingsKeys, bool force) { if (m_doApplySettings) { - FreqTracker::MsgConfigureFreqTracker* message = FreqTracker::MsgConfigureFreqTracker::create( m_settings, force); + FreqTracker::MsgConfigureFreqTracker* message = FreqTracker::MsgConfigureFreqTracker::create(settingsKeys, m_settings, force); m_freqTracker->getInputMessageQueue()->push(message); } } @@ -403,7 +404,7 @@ void FreqTrackerGUI::applySpectrumBandwidth(int spanLog2, bool force) { displaySpectrumBandwidth(spanLog2); m_settings.m_spanLog2 = spanLog2; - applySettings(force); + applySettings(QStringList("spanLog2"), force); } void FreqTrackerGUI::displaySettings() diff --git a/plugins/channelrx/freqtracker/freqtrackergui.h b/plugins/channelrx/freqtracker/freqtrackergui.h index a2d15a571..828d15e45 100644 --- a/plugins/channelrx/freqtracker/freqtrackergui.h +++ b/plugins/channelrx/freqtracker/freqtrackergui.h @@ -89,7 +89,7 @@ private: virtual ~FreqTrackerGUI(); void blockApplySettings(bool block); - void applySettings(bool force = false); + void applySettings(const QStringList& settingsKeys, bool force = false); void applySpectrumBandwidth(int spanLog2, bool force = false); void displaySettings(); void displaySpectrumBandwidth(int spanLog2); diff --git a/plugins/channelrx/freqtracker/freqtrackersettings.cpp b/plugins/channelrx/freqtracker/freqtrackersettings.cpp index 62e15e527..94723b0cc 100644 --- a/plugins/channelrx/freqtracker/freqtrackersettings.cpp +++ b/plugins/channelrx/freqtracker/freqtrackersettings.cpp @@ -190,3 +190,150 @@ bool FreqTrackerSettings::deserialize(const QByteArray& data) return false; } } + +void FreqTrackerSettings::applySettings(const QStringList& settingsKeys, const FreqTrackerSettings& settings) +{ + if (settingsKeys.contains("inputFrequencyOffset")) { + m_inputFrequencyOffset = settings.m_inputFrequencyOffset; + } + if (settingsKeys.contains("rfBandwidth")) { + m_rfBandwidth = settings.m_rfBandwidth; + } + if (settingsKeys.contains("log2Decim")) { + m_log2Decim = settings.m_log2Decim; + } + if (settingsKeys.contains("squelch")) { + m_squelch = settings.m_squelch; + } + if (settingsKeys.contains("rgbColor")) { + m_rgbColor = settings.m_rgbColor; + } + if (settingsKeys.contains("title")) { + m_title = settings.m_title; + } + if (settingsKeys.contains("spanLog2")) { + m_spanLog2 = settings.m_spanLog2; + } + if (settingsKeys.contains("alphaEMA")) { + m_alphaEMA = settings.m_alphaEMA; + } + if (settingsKeys.contains("tracking")) { + m_tracking = settings.m_tracking; + } + if (settingsKeys.contains("trackerType")) { + m_trackerType = settings.m_trackerType; + } + if (settingsKeys.contains("pllPskOrder")) { + m_pllPskOrder = settings.m_pllPskOrder; + } + if (settingsKeys.contains("rrc")) { + m_rrc = settings.m_rrc; + } + if (settingsKeys.contains("rrcRolloff")) { + m_rrcRolloff = settings.m_rrcRolloff; + } + if (settingsKeys.contains("squelchGate")) { + m_squelchGate = settings.m_squelchGate; + } + if (settingsKeys.contains("streamIndex")) { + m_streamIndex = settings.m_streamIndex; + } + if (settingsKeys.contains("useReverseAPI")) { + m_useReverseAPI = settings.m_useReverseAPI; + } + if (settingsKeys.contains("reverseAPIAddress")) { + m_reverseAPIAddress = settings.m_reverseAPIAddress; + } + if (settingsKeys.contains("reverseAPIPort")) { + m_reverseAPIPort = settings.m_reverseAPIPort; + } + if (settingsKeys.contains("reverseAPIDeviceIndex")) { + m_reverseAPIDeviceIndex = settings.m_reverseAPIDeviceIndex; + } + if (settingsKeys.contains("reverseAPIChannelIndex")) { + m_reverseAPIChannelIndex = settings.m_reverseAPIChannelIndex; + } + if (settingsKeys.contains("workspaceIndex")) { + m_workspaceIndex = settings.m_workspaceIndex; + } + if (settingsKeys.contains("geometryBytes")) { + m_geometryBytes = settings.m_geometryBytes; + } + if (settingsKeys.contains("hidden")) { + m_hidden = settings.m_hidden; + } +} + +QString FreqTrackerSettings::getDebugString(const QStringList& settingsKeys, bool force) const +{ + std::ostringstream ostr; + + if (settingsKeys.contains("inputFrequencyOffset") || force) { + ostr << " m_inputFrequencyOffset: " << m_inputFrequencyOffset; + } + if (settingsKeys.contains("rfBandwidth") || force) { + ostr << " m_rfBandwidth: " << m_rfBandwidth; + } + if (settingsKeys.contains("log2Decim") || force) { + ostr << " m_log2Decim: " << m_log2Decim; + } + if (settingsKeys.contains("squelch") || force) { + ostr << " m_squelch: " << m_squelch; + } + if (settingsKeys.contains("rgbColor") || force) { + ostr << " m_rgbColor: " << m_rgbColor; + } + if (settingsKeys.contains("title") || force) { + ostr << " m_title: " << m_title.toStdString(); + } + if (settingsKeys.contains("spanLog2") || force) { + ostr << " m_spanLog2: " << m_spanLog2; + } + if (settingsKeys.contains("alphaEMA") || force) { + ostr << " m_alphaEMA: " << m_alphaEMA; + } + if (settingsKeys.contains("tracking") || force) { + ostr << " m_tracking: " << m_tracking; + } + if (settingsKeys.contains("trackerType") || force) { + ostr << " m_trackerType: " << m_trackerType; + } + if (settingsKeys.contains("pllPskOrder") || force) { + ostr << " m_pllPskOrder: " << m_pllPskOrder; + } + if (settingsKeys.contains("rrc") || force) { + ostr << " m_rrc: " << m_rrc; + } + if (settingsKeys.contains("rrcRolloff") || force) { + ostr << " m_rrcRolloff: " << m_rrcRolloff; + } + if (settingsKeys.contains("squelchGate") || force) { + ostr << " m_squelchGate: " << m_squelchGate; + } + if (settingsKeys.contains("streamIndex") || force) { + ostr << " m_streamIndex: " << m_streamIndex; + } + if (settingsKeys.contains("useReverseAPI") || force) { + ostr << " m_useReverseAPI: " << m_useReverseAPI; + } + if (settingsKeys.contains("reverseAPIAddress") || force) { + ostr << " m_reverseAPIAddress: " << m_reverseAPIAddress.toStdString(); + } + if (settingsKeys.contains("reverseAPIPort") || force) { + ostr << " m_reverseAPIPort: " << m_reverseAPIPort; + } + if (settingsKeys.contains("reverseAPIDeviceIndex") || force) { + ostr << " m_reverseAPIDeviceIndex: " << m_reverseAPIDeviceIndex; + } + if (settingsKeys.contains("reverseAPIChannelIndex") || force) { + ostr << " m_reverseAPIChannelIndex: " << m_reverseAPIChannelIndex; + } + if (settingsKeys.contains("workspaceIndex") || force) { + ostr << " m_workspaceIndex: " << m_workspaceIndex; + } + if (settingsKeys.contains("hidden") || force) { + ostr << " m_hidden: " << m_hidden; + } + + return QString(ostr.str().c_str()); +} diff --git a/plugins/channelrx/freqtracker/freqtrackersettings.h b/plugins/channelrx/freqtracker/freqtrackersettings.h index fcdb76ba9..a2cc936dc 100644 --- a/plugins/channelrx/freqtracker/freqtrackersettings.h +++ b/plugins/channelrx/freqtracker/freqtrackersettings.h @@ -71,6 +71,8 @@ struct FreqTrackerSettings void setSpectrumGUI(Serializable *spectrumGUI) { m_spectrumGUI = spectrumGUI; } QByteArray serialize() const; bool deserialize(const QByteArray& data); + void applySettings(const QStringList& settingsKeys, const FreqTrackerSettings& settings); + QString getDebugString(const QStringList& settingsKeys, bool force=false) const; }; diff --git a/plugins/channelrx/freqtracker/freqtrackersink.cpp b/plugins/channelrx/freqtracker/freqtrackersink.cpp index 7323eeb13..2940da900 100644 --- a/plugins/channelrx/freqtracker/freqtrackersink.cpp +++ b/plugins/channelrx/freqtracker/freqtrackersink.cpp @@ -247,38 +247,17 @@ void FreqTrackerSink::applyChannelSettings(int sinkSampleRate, int channelSample m_undersampleCount = 0; } -void FreqTrackerSink::applySettings(const FreqTrackerSettings& settings, bool force) +void FreqTrackerSink::applySettings(const QStringList& settingsKeys, const FreqTrackerSettings& settings, bool force) { - if (!settings.m_tracking) - { - qDebug() << "FreqTrackerSink::applySettings:" - << " m_inputFrequencyOffset: " << settings.m_inputFrequencyOffset - << " m_rfBandwidth: " << settings.m_rfBandwidth - << " m_log2Decim: " << settings.m_log2Decim - << " m_squelch: " << settings.m_squelch - << " m_rgbColor: " << settings.m_rgbColor - << " m_title: " << settings.m_title - << " m_alphaEMA: " << settings.m_alphaEMA - << " m_tracking: " << settings.m_tracking - << " m_trackerType: " << settings.m_trackerType - << " m_pllPskOrder: " << settings.m_pllPskOrder - << " m_rrc: " << settings.m_rrc - << " m_rrcRolloff: " << settings.m_rrcRolloff - << " 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; + if (!settings.m_tracking) { + qDebug() << "FreqTrackerSink::applySettings:" << settings.getDebugString(settingsKeys, force); } - - if ((m_settings.m_squelch != settings.m_squelch) || force) { + if ((settingsKeys.contains("m_squelch") && (m_settings.m_squelch != settings.m_squelch)) || force) { m_squelchLevel = CalcDb::powerFromdB(settings.m_squelch); } - if ((m_settings.m_tracking != settings.m_tracking) || force) + if ((settingsKeys.contains("m_tracking") && (m_settings.m_tracking != settings.m_tracking)) || force) { m_avgDeltaFreq = 0.0; m_lastCorrAbs = 0; @@ -290,7 +269,7 @@ void FreqTrackerSink::applySettings(const FreqTrackerSettings& settings, bool fo } } - if ((m_settings.m_trackerType != settings.m_trackerType) || force) + if ((settingsKeys.contains("m_trackerType") && (m_settings.m_trackerType != settings.m_trackerType)) || force) { m_lastCorrAbs = 0; m_avgDeltaFreq = 0.0; @@ -308,7 +287,7 @@ void FreqTrackerSink::applySettings(const FreqTrackerSettings& settings, bool fo } } - if ((m_settings.m_pllPskOrder != settings.m_pllPskOrder) || force) + if ((settingsKeys.contains("m_pllPskOrder") && (m_settings.m_pllPskOrder != settings.m_pllPskOrder)) || force) { if (settings.m_pllPskOrder < 32) { m_pll.setPskOrder(settings.m_pllPskOrder); @@ -317,9 +296,9 @@ void FreqTrackerSink::applySettings(const FreqTrackerSettings& settings, bool fo bool useInterpolator = false; - if ((m_settings.m_rrcRolloff != settings.m_rrcRolloff) - || (m_settings.m_rfBandwidth != settings.m_rfBandwidth) - || (m_settings.m_squelchGate != settings.m_squelchGate) || force) { + if ((settingsKeys.contains("m_rrcRolloff") && (m_settings.m_rrcRolloff != settings.m_rrcRolloff)) + || (settingsKeys.contains("m_rfBandwidth") && (m_settings.m_rfBandwidth != settings.m_rfBandwidth)) + || (settingsKeys.contains("m_squelchGate") && (m_settings.m_squelchGate != settings.m_squelchGate)) || force) { useInterpolator = true; } @@ -331,7 +310,11 @@ void FreqTrackerSink::applySettings(const FreqTrackerSettings& settings, bool fo m_undersampleCount = 0; } - m_settings = settings; + if (force) { + m_settings = settings; + } else { + m_settings.applySettings(settingsKeys, settings); + } if (useInterpolator) { setInterpolator(); diff --git a/plugins/channelrx/freqtracker/freqtrackersink.h b/plugins/channelrx/freqtracker/freqtrackersink.h index 5a686883f..d9b2f6edb 100644 --- a/plugins/channelrx/freqtracker/freqtrackersink.h +++ b/plugins/channelrx/freqtracker/freqtrackersink.h @@ -45,7 +45,7 @@ public: virtual void feed(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end); void setSpectrumSink(SpectrumVis* spectrumSink) { m_spectrumSink = spectrumSink; } - void applySettings(const FreqTrackerSettings& settings, bool force = false); + void applySettings(const QStringList& settingsKeys, const FreqTrackerSettings& settings, bool force = false); void applyChannelSettings(int sinkSampleRate, int channelSampleRate, int channelFrequencyOffset, bool force = false); void setMessageQueueToInput(MessageQueue *messageQueue) { m_messageQueueToInput = messageQueue;} diff --git a/plugins/channelrx/heatmap/heatmap.cpp b/plugins/channelrx/heatmap/heatmap.cpp index 3e5c68334..12f2e40b6 100644 --- a/plugins/channelrx/heatmap/heatmap.cpp +++ b/plugins/channelrx/heatmap/heatmap.cpp @@ -51,7 +51,7 @@ HeatMap::HeatMap(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); @@ -125,7 +125,7 @@ void HeatMap::start() DSPSignalNotification *dspMsg = new DSPSignalNotification(m_basebandSampleRate, m_centerFrequency); m_basebandSink->getInputMessageQueue()->push(dspMsg); - HeatMapBaseband::MsgConfigureHeatMapBaseband *msg = HeatMapBaseband::MsgConfigureHeatMapBaseband::create(m_settings, true); + HeatMapBaseband::MsgConfigureHeatMapBaseband *msg = HeatMapBaseband::MsgConfigureHeatMapBaseband::create(QStringList(), m_settings, true); m_basebandSink->getInputMessageQueue()->push(msg); } @@ -143,7 +143,7 @@ bool HeatMap::handleMessage(const Message& cmd) { MsgConfigureHeatMap& cfg = (MsgConfigureHeatMap&) cmd; qDebug() << "HeatMap::handleMessage: MsgConfigureHeatMap"; - applySettings(cfg.getSettings(), cfg.getForce()); + applySettings(cfg.getSettingsKeys(), cfg.getSettings(), cfg.getForce()); return true; } @@ -178,35 +178,20 @@ void HeatMap::setCenterFrequency(qint64 frequency) { HeatMapSettings settings = m_settings; settings.m_inputFrequencyOffset = frequency; - applySettings(settings, false); + applySettings(QStringList("inputFrequencyOffset"), settings, false); if (m_guiMessageQueue) // forward to GUI if any { - MsgConfigureHeatMap *msgToGUI = MsgConfigureHeatMap::create(settings, false); + MsgConfigureHeatMap *msgToGUI = MsgConfigureHeatMap::create(QStringList("inputFrequencyOffset"), settings, false); m_guiMessageQueue->push(msgToGUI); } } -void HeatMap::applySettings(const HeatMapSettings& settings, bool force) +void HeatMap::applySettings(const QStringList& settingsKeys, const HeatMapSettings& settings, bool force) { - qDebug() << "HeatMap::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() << "HeatMap::applySettings:" << settings.getDebugString(settingsKeys, force); - QList reverseAPIKeys; - - if ((settings.m_inputFrequencyOffset != m_settings.m_inputFrequencyOffset) || force) { - reverseAPIKeys.append("inputFrequencyOffset"); - } - if ((settings.m_rfBandwidth != m_settings.m_rfBandwidth) || force) { - reverseAPIKeys.append("rfBandwidth"); - } - 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 { @@ -217,24 +202,26 @@ void HeatMap::applySettings(const HeatMapSettings& settings, bool force) m_settings.m_streamIndex = settings.m_streamIndex; // make sure ChannelAPI::getStreamIndex() is consistent emit streamIndexChanged(settings.m_streamIndex); } - - reverseAPIKeys.append("streamIndex"); } - HeatMapBaseband::MsgConfigureHeatMapBaseband *msg = HeatMapBaseband::MsgConfigureHeatMapBaseband::create(settings, force); + HeatMapBaseband::MsgConfigureHeatMapBaseband *msg = HeatMapBaseband::MsgConfigureHeatMapBaseband::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 HeatMap::serialize() const @@ -246,14 +233,14 @@ bool HeatMap::deserialize(const QByteArray& data) { if (m_settings.deserialize(data)) { - MsgConfigureHeatMap *msg = MsgConfigureHeatMap::create(m_settings, true); + MsgConfigureHeatMap *msg = MsgConfigureHeatMap::create(QStringList(), m_settings, true); m_inputMessageQueue.push(msg); return true; } else { m_settings.resetToDefaults(); - MsgConfigureHeatMap *msg = MsgConfigureHeatMap::create(m_settings, true); + MsgConfigureHeatMap *msg = MsgConfigureHeatMap::create(QStringList(), m_settings, true); m_inputMessageQueue.push(msg); return false; } @@ -289,13 +276,13 @@ int HeatMap::webapiSettingsPutPatch( HeatMapSettings settings = m_settings; webapiUpdateChannelSettings(settings, channelSettingsKeys, response); - MsgConfigureHeatMap *msg = MsgConfigureHeatMap::create(settings, force); + MsgConfigureHeatMap *msg = MsgConfigureHeatMap::create(channelSettingsKeys, settings, force); m_inputMessageQueue.push(msg); qDebug("HeatMap::webapiSettingsPutPatch: forward to GUI: %p", m_guiMessageQueue); if (m_guiMessageQueue) // forward to GUI if any { - MsgConfigureHeatMap *msgToGUI = MsgConfigureHeatMap::create(settings, force); + MsgConfigureHeatMap *msgToGUI = MsgConfigureHeatMap::create(channelSettingsKeys, settings, force); m_guiMessageQueue->push(msgToGUI); } @@ -446,7 +433,7 @@ void HeatMap::webapiFormatChannelSettings(SWGSDRangel::SWGChannelSettings& respo } } -void HeatMap::webapiReverseSendSettings(QList& channelSettingsKeys, const HeatMapSettings& settings, bool force) +void HeatMap::webapiReverseSendSettings(const QList& channelSettingsKeys, const HeatMapSettings& settings, bool force) { SWGSDRangel::SWGChannelSettings *swgChannelSettings = new SWGSDRangel::SWGChannelSettings(); webapiFormatChannelSettings(channelSettingsKeys, swgChannelSettings, settings, force); @@ -472,7 +459,7 @@ void HeatMap::webapiReverseSendSettings(QList& channelSettingsKeys, con } void HeatMap::webapiFormatChannelSettings( - QList& channelSettingsKeys, + const QList& channelSettingsKeys, SWGSDRangel::SWGChannelSettings *swgChannelSettings, const HeatMapSettings& settings, bool force @@ -572,4 +559,3 @@ void HeatMap::handleIndexInDeviceSetChanged(int index) .arg(index); m_basebandSink->setFifoLabel(fifoLabel); } - diff --git a/plugins/channelrx/heatmap/heatmap.h b/plugins/channelrx/heatmap/heatmap.h index 34e074f28..fccea7329 100644 --- a/plugins/channelrx/heatmap/heatmap.h +++ b/plugins/channelrx/heatmap/heatmap.h @@ -52,20 +52,23 @@ public: public: const HeatMapSettings& getSettings() const { return m_settings; } + const QStringList& getSettingsKeys() const { return m_settingsKeys; } bool getForce() const { return m_force; } - static MsgConfigureHeatMap* create(const HeatMapSettings& settings, bool force) + static MsgConfigureHeatMap* create(const QStringList& settingsKeys, const HeatMapSettings& settings, bool force) { - return new MsgConfigureHeatMap(settings, force); + return new MsgConfigureHeatMap(settingsKeys, settings, force); } private: HeatMapSettings m_settings; + QStringList m_settingsKeys; bool m_force; - MsgConfigureHeatMap(const HeatMapSettings& settings, bool force) : + MsgConfigureHeatMap(const QStringList& settingsKeys, const HeatMapSettings& settings, bool force) : Message(), m_settings(settings), + m_settingsKeys(settingsKeys), m_force(force) { } }; @@ -160,10 +163,10 @@ private: QNetworkRequest m_networkRequest; virtual bool handleMessage(const Message& cmd); - void applySettings(const HeatMapSettings& settings, bool force = false); - void webapiReverseSendSettings(QList& channelSettingsKeys, const HeatMapSettings& settings, bool force); + void applySettings(const QStringList& settingsKeys, const HeatMapSettings& settings, bool force = false); + void webapiReverseSendSettings(const QList& channelSettingsKeys, const HeatMapSettings& settings, bool force); void webapiFormatChannelSettings( - QList& channelSettingsKeys, + const QList& channelSettingsKeys, SWGSDRangel::SWGChannelSettings *swgChannelSettings, const HeatMapSettings& settings, bool force @@ -175,4 +178,3 @@ private slots: }; #endif // INCLUDE_HEATMAP_H - diff --git a/plugins/channelrx/heatmap/heatmapbaseband.cpp b/plugins/channelrx/heatmap/heatmapbaseband.cpp index db6add661..7bcfb177e 100644 --- a/plugins/channelrx/heatmap/heatmapbaseband.cpp +++ b/plugins/channelrx/heatmap/heatmapbaseband.cpp @@ -134,7 +134,7 @@ bool HeatMapBaseband::handleMessage(const Message& cmd) MsgConfigureHeatMapBaseband& cfg = (MsgConfigureHeatMapBaseband&) cmd; qDebug() << "HeatMapBaseband::handleMessage: MsgConfigureHeatMapBaseband"; - applySettings(cfg.getSettings(), cfg.getForce()); + applySettings(cfg.getSettingsKeys(), cfg.getSettings(), cfg.getForce()); return true; } @@ -154,19 +154,24 @@ bool HeatMapBaseband::handleMessage(const Message& cmd) } } -void HeatMapBaseband::applySettings(const HeatMapSettings& settings, bool force) +void HeatMapBaseband::applySettings(const QStringList& settingsKeys, const HeatMapSettings& 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 HeatMapBaseband::setBasebandSampleRate(int sampleRate) @@ -174,4 +179,3 @@ void HeatMapBaseband::setBasebandSampleRate(int sampleRate) m_channelizer->setBasebandSampleRate(sampleRate); m_sink.applyChannelSettings(m_channelizer->getChannelSampleRate(), m_channelizer->getChannelFrequencyOffset()); } - diff --git a/plugins/channelrx/heatmap/heatmapbaseband.h b/plugins/channelrx/heatmap/heatmapbaseband.h index ef2bcb1e7..8ff45e425 100644 --- a/plugins/channelrx/heatmap/heatmapbaseband.h +++ b/plugins/channelrx/heatmap/heatmapbaseband.h @@ -44,20 +44,23 @@ public: public: const HeatMapSettings& getSettings() const { return m_settings; } + const QStringList& getSettingsKeys() const { return m_settingsKeys; } bool getForce() const { return m_force; } - static MsgConfigureHeatMapBaseband* create(const HeatMapSettings& settings, bool force) + static MsgConfigureHeatMapBaseband* create(const QStringList& settingsKeys, const HeatMapSettings& settings, bool force) { - return new MsgConfigureHeatMapBaseband(settings, force); + return new MsgConfigureHeatMapBaseband(settingsKeys, settings, force); } private: HeatMapSettings m_settings; + QStringList m_settingsKeys; bool m_force; - MsgConfigureHeatMapBaseband(const HeatMapSettings& settings, bool force) : + MsgConfigureHeatMapBaseband(const QStringList& settingsKeys, const HeatMapSettings& settings, bool force) : Message(), m_settings(settings), + m_settingsKeys(settingsKeys), m_force(force) { } }; @@ -98,7 +101,7 @@ private: bool handleMessage(const Message& cmd); void calculateOffset(HeatMapSink *sink); - void applySettings(const HeatMapSettings& settings, bool force = false); + void applySettings(const QStringList& settingsKeys, const HeatMapSettings& settings, bool force = false); private slots: void handleInputMessages(); @@ -106,4 +109,3 @@ private slots: }; #endif // INCLUDE_HEATMAPBASEBAND_H - diff --git a/plugins/channelrx/heatmap/heatmapgui.cpp b/plugins/channelrx/heatmap/heatmapgui.cpp index 68ec743dd..462f686d3 100644 --- a/plugins/channelrx/heatmap/heatmapgui.cpp +++ b/plugins/channelrx/heatmap/heatmapgui.cpp @@ -63,7 +63,7 @@ void HeatMapGUI::resetToDefaults() { m_settings.resetToDefaults(); displaySettings(); - applySettings(true); + applySettings(QStringList(), true); } QByteArray HeatMapGUI::serialize() const @@ -75,7 +75,7 @@ bool HeatMapGUI::deserialize(const QByteArray& data) { if(m_settings.deserialize(data)) { displaySettings(); - applySettings(true); + applySettings(QStringList(), true); return true; } else { resetToDefaults(); @@ -128,7 +128,7 @@ void HeatMapGUI::channelMarkerChangedByCursor() { ui->deltaFrequency->setValue(m_channelMarker.getCenterFrequency()); m_settings.m_inputFrequencyOffset = m_channelMarker.getCenterFrequency(); - applySettings(); + applySettings(QStringList("inputFrequencyOffset")); } void HeatMapGUI::channelMarkerHighlightedByCursor() @@ -141,7 +141,7 @@ void HeatMapGUI::on_deltaFrequency_changed(qint64 value) m_channelMarker.setCenterFrequency(value); m_settings.m_inputFrequencyOffset = m_channelMarker.getCenterFrequency(); updateAbsoluteCenterFrequency(); - applySettings(); + applySettings(QStringList("inputFrequencyOffset")); } void HeatMapGUI::on_rfBW_valueChanged(int value) @@ -150,7 +150,7 @@ void HeatMapGUI::on_rfBW_valueChanged(int value) ui->rfBWText->setText(QString("%1k").arg(value / 10.0, 0, 'f', 1)); m_channelMarker.setBandwidth(bw); m_settings.m_rfBandwidth = bw; - applySettings(); + applySettings(QStringList("rfBandwidth")); } void HeatMapGUI::on_minPower_valueChanged(double value) @@ -160,7 +160,7 @@ void HeatMapGUI::on_minPower_valueChanged(double value) if (m_powerYAxis) { m_powerYAxis->setMin(m_settings.m_minPower); } - applySettings(); + applySettings(QStringList("minPower")); } void HeatMapGUI::on_maxPower_valueChanged(double value) @@ -170,7 +170,7 @@ void HeatMapGUI::on_maxPower_valueChanged(double value) if (m_powerYAxis) { m_powerYAxis->setMax(m_settings.m_maxPower); } - applySettings(); + applySettings(QStringList("maxPower")); } void HeatMapGUI::on_colorMap_currentIndexChanged(int index) @@ -181,14 +181,14 @@ void HeatMapGUI::on_colorMap_currentIndexChanged(int index) m_colorMap = ColorMap::getColorMap(m_settings.m_colorMapName); } plotMap(); - applySettings(); + applySettings(QStringList("colorMapName")); } void HeatMapGUI::on_pulseTH_valueChanged(int value) { m_settings.m_pulseThreshold = (float)value; ui->pulseTHText->setText(QString::number(value)); - applySettings(); + applySettings(QStringList("pulseThreshold")); } const QStringList HeatMapGUI::m_averagePeriodTexts = { @@ -199,7 +199,7 @@ void HeatMapGUI::on_averagePeriod_valueChanged(int value) { m_settings.m_averagePeriodUS = (int)std::pow(10.0f, (float)value); ui->averagePeriodText->setText(m_averagePeriodTexts[value-1]); - applySettings(); + applySettings(QStringList("averagePeriodUS")); } const QStringList HeatMapGUI::m_sampleRateTexts = { @@ -213,7 +213,7 @@ void HeatMapGUI::on_sampleRate_valueChanged(int value) ui->averagePeriod->setMinimum(std::max(1, static_cast (m_averagePeriodTexts.size()) - value)); ui->rfBW->setMaximum(m_settings.m_sampleRate/100); m_scopeVis->setLiveRate(m_settings.m_sampleRate); - applySettings(); + applySettings(QStringList("sampleRate")); } void HeatMapGUI::on_mode_currentIndexChanged(int index) @@ -238,7 +238,7 @@ void HeatMapGUI::on_mode_currentIndexChanged(int index) } plotMap(); } - applySettings(); + applySettings(QStringList("mode")); } } @@ -265,7 +265,7 @@ void HeatMapGUI::on_displayChart_clicked(bool checked) { m_settings.m_displayChart = checked; displayPowerChart(); - applySettings(); + applySettings(QStringList("displayChart")); } void HeatMapGUI::on_clearHeatMap_clicked() @@ -434,7 +434,7 @@ void HeatMapGUI::on_txPosition_clicked(bool checked) { m_settings.m_txPosValid = checked; displayTXPosition(checked); - applySettings(); + applySettings(QStringList("txPosValid")); } void HeatMapGUI::on_txLatitude_editingFinished() @@ -442,7 +442,7 @@ void HeatMapGUI::on_txLatitude_editingFinished() m_settings.m_txLatitude = ui->txLatitude->text().toFloat(); updateRange(); sendTxToMap(); - applySettings(); + applySettings(QStringList("txLatitude")); } void HeatMapGUI::on_txLongitude_editingFinished() @@ -450,14 +450,14 @@ void HeatMapGUI::on_txLongitude_editingFinished() m_settings.m_txLongitude = ui->txLongitude->text().toFloat(); updateRange(); sendTxToMap(); - applySettings(); + applySettings(QStringList("txLongitude")); } void HeatMapGUI::on_txPower_valueChanged(double value) { m_settings.m_txPower = (float)value; sendTxToMap(); - applySettings(); + applySettings(QStringList("txPower")); } void HeatMapGUI::on_txPositionSet_clicked(bool checked) @@ -470,7 +470,7 @@ void HeatMapGUI::on_txPositionSet_clicked(bool checked) m_settings.m_txLongitude = m_longitude; updateRange(); sendTxToMap(); - applySettings(); + applySettings(QStringList({"txPositionSet", "txLatitude", "txLongitude"})); } void HeatMapGUI::onWidgetRolled(QWidget* widget, bool rollDown) @@ -479,7 +479,7 @@ void HeatMapGUI::onWidgetRolled(QWidget* widget, bool rollDown) (void) rollDown; getRollupContents()->saveState(m_rollupState); - applySettings(); + applySettings(QStringList()); } void HeatMapGUI::onMenuDialogCalled(const QPoint &p) @@ -524,7 +524,16 @@ void HeatMapGUI::onMenuDialogCalled(const QPoint &p) updateIndexLabel(); } - applySettings(); + applySettings(QStringList({ + "rgbColor", + "title", + "useReverseAPI", + "reverseAPIAddress", + "reverseAPIPort", + "reverseAPIDeviceIndex", + "reverseAPIChannelIndex", + "streamIndex" + })); } resetContextMenuType(); @@ -639,7 +648,7 @@ HeatMapGUI::HeatMapGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, BasebandS displaySettings(); makeUIConnections(); - applySettings(true); + applySettings(QStringList({}), true); DialPopup::addPopupsToChildDials(this); m_resizer.enableChildMouseTracking(); @@ -660,11 +669,11 @@ void HeatMapGUI::blockApplySettings(bool block) m_doApplySettings = !block; } -void HeatMapGUI::applySettings(bool force) +void HeatMapGUI::applySettings(const QStringList& settingsKeys, bool force) { if (m_doApplySettings) { - HeatMap::MsgConfigureHeatMap* message = HeatMap::MsgConfigureHeatMap::create(m_settings, force); + HeatMap::MsgConfigureHeatMap* message = HeatMap::MsgConfigureHeatMap::create(settingsKeys, m_settings, force); m_heatMap->getInputMessageQueue()->push(message); } } @@ -1581,77 +1590,77 @@ void HeatMapGUI::on_displayAverage_clicked(bool checked) { m_settings.m_displayAverage = checked; m_powerAverageSeries->setVisible(checked); - applySettings(); + applySettings(QStringList("displayAverage")); } void HeatMapGUI::on_displayMax_clicked(bool checked) { m_settings.m_displayMax = checked; m_powerMaxPeakSeries->setVisible(checked); - applySettings(); + applySettings(QStringList("displayMax")); } void HeatMapGUI::on_displayMin_clicked(bool checked) { m_settings.m_displayMin = checked; m_powerMinPeakSeries->setVisible(checked); - applySettings(); + applySettings(QStringList("displayMin")); } void HeatMapGUI::on_displayPulseAverage_clicked(bool checked) { m_settings.m_displayPulseAverage = checked; m_powerPulseAverageSeries->setVisible(checked); - applySettings(); + applySettings(QStringList("displayPulseAverage")); } void HeatMapGUI::on_displayPathLoss_clicked(bool checked) { m_settings.m_displayPathLoss = checked; m_powerPathLossSeries->setVisible(checked); - applySettings(); + applySettings(QStringList("displayPathLoss")); } void HeatMapGUI::on_displayMins_valueChanged(int value) { m_settings.m_displayMins = value; updateAxis(); - applySettings(); + applySettings(QStringList("displayMins")); } void HeatMapGUI::on_recordAverage_clicked(bool checked) { m_settings.m_recordAverage = checked; resizeMap(0, 0); - applySettings(); + applySettings(QStringList("recordAverage")); } void HeatMapGUI::on_recordMax_clicked(bool checked) { m_settings.m_recordMax = checked; resizeMap(0, 0); - applySettings(); + applySettings(QStringList("recordMax")); } void HeatMapGUI::on_recordMin_clicked(bool checked) { m_settings.m_recordMin = checked; resizeMap(0, 0); - applySettings(); + applySettings(QStringList("recordMin")); } void HeatMapGUI::on_recordPulseAverage_clicked(bool checked) { m_settings.m_recordPulseAverage = checked; resizeMap(0, 0); - applySettings(); + applySettings(QStringList("recordPulseAverage")); } void HeatMapGUI::on_recordPathLoss_clicked(bool checked) { m_settings.m_recordPathLoss = checked; resizeMap(0, 0); - applySettings(); + applySettings(QStringList("recordPathLoss")); } QString HeatMapGUI::formatCoord(float coord) const diff --git a/plugins/channelrx/heatmap/heatmapgui.h b/plugins/channelrx/heatmap/heatmapgui.h index 70c508ad7..3e1fccf78 100644 --- a/plugins/channelrx/heatmap/heatmapgui.h +++ b/plugins/channelrx/heatmap/heatmapgui.h @@ -140,7 +140,7 @@ private: virtual ~HeatMapGUI(); 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(); @@ -222,4 +222,3 @@ private slots: }; #endif // INCLUDE_HEATMAPGUI_H - diff --git a/plugins/channelrx/heatmap/heatmapsettings.cpp b/plugins/channelrx/heatmap/heatmapsettings.cpp index 97e356315..b8e720a9d 100644 --- a/plugins/channelrx/heatmap/heatmapsettings.cpp +++ b/plugins/channelrx/heatmap/heatmapsettings.cpp @@ -208,3 +208,227 @@ bool HeatMapSettings::deserialize(const QByteArray& data) } } +void HeatMapSettings::applySettings(const QStringList& settingsKeys, const HeatMapSettings& settings) +{ + if (settingsKeys.contains("inputFrequencyOffset")) { + m_inputFrequencyOffset = settings.m_inputFrequencyOffset; + } + if (settingsKeys.contains("rfBandwidth")) { + m_rfBandwidth = settings.m_rfBandwidth; + } + if (settingsKeys.contains("minPower")) { + m_minPower = settings.m_minPower; + } + if (settingsKeys.contains("maxPower")) { + m_maxPower = settings.m_maxPower; + } + if (settingsKeys.contains("colorMapName")) { + m_colorMapName = settings.m_colorMapName; + } + if (settingsKeys.contains("mode")) { + m_mode = settings.m_mode; + } + if (settingsKeys.contains("pulseThreshold")) { + m_pulseThreshold = settings.m_pulseThreshold; + } + if (settingsKeys.contains("averagePeriodUS")) { + m_averagePeriodUS = settings.m_averagePeriodUS; + } + if (settingsKeys.contains("sampleRate")) { + m_sampleRate = settings.m_sampleRate; + } + if (settingsKeys.contains("txPosValid")) { + m_txPosValid = settings.m_txPosValid; + } + if (settingsKeys.contains("txLatitude")) { + m_txLatitude = settings.m_txLatitude; + } + if (settingsKeys.contains("txLongitude")) { + m_txLongitude = settings.m_txLongitude; + } + if (settingsKeys.contains("txPower")) { + m_txPower = settings.m_txPower; + } + if (settingsKeys.contains("displayChart")) { + m_displayChart = settings.m_displayChart; + } + if (settingsKeys.contains("displayAverage")) { + m_displayAverage = settings.m_displayAverage; + } + if (settingsKeys.contains("displayMax")) { + m_displayMax = settings.m_displayMax; + } + if (settingsKeys.contains("displayMin")) { + m_displayMin = settings.m_displayMin; + } + if (settingsKeys.contains("displayPulseAverage")) { + m_displayPulseAverage = settings.m_displayPulseAverage; + } + if (settingsKeys.contains("displayPathLoss")) { + m_displayPathLoss = settings.m_displayPathLoss; + } + if (settingsKeys.contains("displayMins")) { + m_displayMins = settings.m_displayMins; + } + if (settingsKeys.contains("recordAverage")) { + m_recordAverage = settings.m_recordAverage; + } + if (settingsKeys.contains("recordMax")) { + m_recordMax = settings.m_recordMax; + } + if (settingsKeys.contains("recordMin")) { + m_recordMin = settings.m_recordMin; + } + if (settingsKeys.contains("recordPulseAverage")) { + m_recordPulseAverage = settings.m_recordPulseAverage; + } + if (settingsKeys.contains("recordPathLoss")) { + m_recordPathLoss = settings.m_recordPathLoss; + } + if (settingsKeys.contains("rgbColor")) { + m_rgbColor = settings.m_rgbColor; + } + if (settingsKeys.contains("title")) { + m_title = settings.m_title; + } + if (settingsKeys.contains("streamIndex")) { + m_streamIndex = settings.m_streamIndex; + } + if (settingsKeys.contains("useReverseAPI")) { + m_useReverseAPI = settings.m_useReverseAPI; + } + if (settingsKeys.contains("reverseAPIAddress")) { + m_reverseAPIAddress = settings.m_reverseAPIAddress; + } + if (settingsKeys.contains("reverseAPIPort")) { + m_reverseAPIPort = settings.m_reverseAPIPort; + } + if (settingsKeys.contains("reverseAPIDeviceIndex")) { + m_reverseAPIDeviceIndex = settings.m_reverseAPIDeviceIndex; + } + if (settingsKeys.contains("reverseAPIChannelIndex")) { + m_reverseAPIChannelIndex = settings.m_reverseAPIChannelIndex; + } + if (settingsKeys.contains("workspaceIndex")) { + m_workspaceIndex = settings.m_workspaceIndex; + } + if (settingsKeys.contains("geometryBytes")) { + m_geometryBytes = settings.m_geometryBytes; + } + if (settingsKeys.contains("hidden")) { + m_hidden = settings.m_hidden; + } +} + +QString HeatMapSettings::getDebugString(const QStringList& settingsKeys, bool force) const +{ + std::ostringstream ostr; + + if (settingsKeys.contains("inputFrequencyOffset") || force) { + ostr << " m_inputFrequencyOffset: " << m_inputFrequencyOffset; + } + if (settingsKeys.contains("rfBandwidth") || force) { + ostr << " m_rfBandwidth: " << m_rfBandwidth; + } + if (settingsKeys.contains("minPower") || force) { + ostr << " m_minPower: " << m_minPower; + } + if (settingsKeys.contains("maxPower") || force) { + ostr << " m_maxPower: " << m_maxPower; + } + if (settingsKeys.contains("colorMapName") || force) { + ostr << " m_colorMapName: " << m_colorMapName.toStdString(); + } + if (settingsKeys.contains("mode") || force) { + ostr << " m_mode: " << m_mode; + } + if (settingsKeys.contains("pulseThreshold") || force) { + ostr << " m_pulseThreshold: " << m_pulseThreshold; + } + if (settingsKeys.contains("averagePeriodUS") || force) { + ostr << " m_averagePeriodUS: " << m_averagePeriodUS; + } + if (settingsKeys.contains("sampleRate") || force) { + ostr << " m_sampleRate: " << m_sampleRate; + } + if (settingsKeys.contains("txPosValid") || force) { + ostr << " m_txPosValid: " << m_txPosValid; + } + if (settingsKeys.contains("txLatitude") || force) { + ostr << " m_txLatitude: " << m_txLatitude; + } + if (settingsKeys.contains("txLongitude") || force) { + ostr << " m_txLongitude: " << m_txLongitude; + } + if (settingsKeys.contains("txPower") || force) { + ostr << " m_txPower: " << m_txPower; + } + if (settingsKeys.contains("displayChart") || force) { + ostr << " m_displayChart: " << m_displayChart; + } + if (settingsKeys.contains("displayAverage") || force) { + ostr << " m_displayAverage: " << m_displayAverage; + } + if (settingsKeys.contains("displayMax") || force) { + ostr << " m_displayMax: " << m_displayMax; + } + if (settingsKeys.contains("displayMin") || force) { + ostr << " m_displayMin: " << m_displayMin; + } + if (settingsKeys.contains("displayPulseAverage") || force) { + ostr << " m_displayPulseAverage: " << m_displayPulseAverage; + } + if (settingsKeys.contains("displayPathLoss") || force) { + ostr << " m_displayPathLoss: " << m_displayPathLoss; + } + if (settingsKeys.contains("displayMins") || force) { + ostr << " m_displayMins: " << m_displayMins; + } + if (settingsKeys.contains("recordAverage") || force) { + ostr << " m_recordAverage: " << m_recordAverage; + } + if (settingsKeys.contains("recordMax") || force) { + ostr << " m_recordMax: " << m_recordMax; + } + if (settingsKeys.contains("recordMin") || force) { + ostr << " m_recordMin: " << m_recordMin; + } + if (settingsKeys.contains("recordPulseAverage") || force) { + ostr << " m_recordPulseAverage: " << m_recordPulseAverage; + } + if (settingsKeys.contains("recordPathLoss") || force) { + ostr << " m_recordPathLoss: " << m_recordPathLoss; + } + if (settingsKeys.contains("rgbColor") || force) { + ostr << " m_rgbColor: " << m_rgbColor; + } + if (settingsKeys.contains("title") || force) { + ostr << " m_title: " << m_title.toStdString(); + } + if (settingsKeys.contains("streamIndex") || force) { + ostr << " m_streamIndex: " << m_streamIndex; + } + if (settingsKeys.contains("useReverseAPI") || force) { + ostr << " m_useReverseAPI: " << m_useReverseAPI; + } + if (settingsKeys.contains("reverseAPIAddress") || force) { + ostr << " m_reverseAPIAddress: " << m_reverseAPIAddress.toStdString(); + } + if (settingsKeys.contains("reverseAPIPort") || force) { + ostr << " m_reverseAPIPort: " << m_reverseAPIPort; + } + if (settingsKeys.contains("reverseAPIDeviceIndex") || force) { + ostr << " m_reverseAPIDeviceIndex: " << m_reverseAPIDeviceIndex; + } + if (settingsKeys.contains("reverseAPIChannelIndex") || force) { + ostr << " m_reverseAPIChannelIndex: " << m_reverseAPIChannelIndex; + } + if (settingsKeys.contains("workspaceIndex") || force) { + ostr << " m_workspaceIndex: " << m_workspaceIndex; + } + if (settingsKeys.contains("hidden") || force) { + ostr << " m_hidden: " << m_hidden; + } + + return QString(ostr.str().c_str()); +} diff --git a/plugins/channelrx/heatmap/heatmapsettings.h b/plugins/channelrx/heatmap/heatmapsettings.h index 5acb28008..339ad2e15 100644 --- a/plugins/channelrx/heatmap/heatmapsettings.h +++ b/plugins/channelrx/heatmap/heatmapsettings.h @@ -85,7 +85,8 @@ struct HeatMapSettings void setScopeGUI(Serializable *scopeGUI) { m_scopeGUI = scopeGUI; } QByteArray serialize() const; bool deserialize(const QByteArray& data); + void applySettings(const QStringList& settingsKeys, const HeatMapSettings& settings); + QString getDebugString(const QStringList& settingsKeys, bool force=false) const; }; #endif /* INCLUDE_HEATMAPSETTINGS_H */ - diff --git a/plugins/channelrx/heatmap/heatmapsink.cpp b/plugins/channelrx/heatmap/heatmapsink.cpp index 202e9fb7f..d4166c323 100644 --- a/plugins/channelrx/heatmap/heatmapsink.cpp +++ b/plugins/channelrx/heatmap/heatmapsink.cpp @@ -39,7 +39,7 @@ HeatMapSink::HeatMapSink() : resetMagLevels(); m_sampleBuffer.resize(m_sampleBufferSize); - applySettings(m_settings, true); + applySettings(QStringList(), m_settings, true); applyChannelSettings(m_channelSampleRate, m_channelFrequencyOffset, true); } @@ -170,17 +170,13 @@ void HeatMapSink::applyChannelSettings(int channelSampleRate, int channelFrequen m_channelFrequencyOffset = channelFrequencyOffset; } -void HeatMapSink::applySettings(const HeatMapSettings& settings, bool force) +void HeatMapSink::applySettings(const QStringList& settingsKeys, const HeatMapSettings& settings, bool force) { - qDebug() << "HeatMapSink::applySettings:" - << " sampleRate: " << settings.m_sampleRate - << " averagePeriodUS: " << settings.m_averagePeriodUS - << " pulseThreshold: " << settings.m_pulseThreshold - << " force: " << force; + qDebug() << "HeatMapSink::applySettings:" << settings.getDebugString(settingsKeys, force); - if ((settings.m_rfBandwidth != m_settings.m_rfBandwidth) - || (settings.m_averagePeriodUS != m_settings.m_averagePeriodUS) - || (settings.m_sampleRate != m_settings.m_sampleRate) + if ((settingsKeys.contains("rfBandwidth") && (settings.m_rfBandwidth != m_settings.m_rfBandwidth)) + || (settingsKeys.contains("averagePeriodUS") && (settings.m_averagePeriodUS != m_settings.m_averagePeriodUS)) + || (settingsKeys.contains("sampleRate") && (settings.m_sampleRate != m_settings.m_sampleRate)) || force) { m_interpolator.create(16, m_channelSampleRate, settings.m_rfBandwidth / 2.2); @@ -188,8 +184,8 @@ void HeatMapSink::applySettings(const HeatMapSettings& settings, bool force) m_interpolatorDistanceRemain = m_interpolatorDistance; } - if ((settings.m_averagePeriodUS != m_settings.m_averagePeriodUS) - || (settings.m_sampleRate != m_settings.m_sampleRate) + if ((settingsKeys.contains("averagePeriodUS") && (settings.m_averagePeriodUS != m_settings.m_averagePeriodUS)) + || (settingsKeys.contains("sampleRate") && (settings.m_sampleRate != m_settings.m_sampleRate)) || force) { m_averageCnt = (int)((settings.m_averagePeriodUS * (qint64)settings.m_sampleRate / 1e6)); @@ -211,12 +207,15 @@ void HeatMapSink::applySettings(const HeatMapSettings& settings, bool force) } } - if ((settings.m_pulseThreshold != m_settings.m_pulseThreshold) || force) + if ((settingsKeys.contains("pulseThreshold") && (settings.m_pulseThreshold != m_settings.m_pulseThreshold)) || force) { m_pulseThresholdLinear = std::pow(10.0, settings.m_pulseThreshold / 20.0); qDebug() << "m_pulseThresholdLinear" << m_pulseThresholdLinear; } - m_settings = settings; + if (force) { + m_settings = settings; + } else { + m_settings.applySettings(settingsKeys, settings); + } } - diff --git a/plugins/channelrx/heatmap/heatmapsink.h b/plugins/channelrx/heatmap/heatmapsink.h index 66f364315..8de1cf2cc 100644 --- a/plugins/channelrx/heatmap/heatmapsink.h +++ b/plugins/channelrx/heatmap/heatmapsink.h @@ -48,7 +48,7 @@ public: void setScopeSink(ScopeVis* scopeSink) { m_scopeSink = scopeSink; } void applyChannelSettings(int channelSampleRate, int channelFrequencyOffset, bool force = false); - void applySettings(const HeatMapSettings& settings, bool force = false); + void applySettings(const QStringList& settingsKeys, const HeatMapSettings& settings, bool force = false); void setMessageQueueToChannel(MessageQueue *messageQueue) { m_messageQueueToChannel = messageQueue; } void setChannel(ChannelAPI *channel) { m_channel = channel; } @@ -150,4 +150,3 @@ private: }; #endif // INCLUDE_HEATMAPSINK_H - diff --git a/plugins/channelrx/noisefigure/noisefigure.cpp b/plugins/channelrx/noisefigure/noisefigure.cpp index 9f2774ce0..af767931a 100644 --- a/plugins/channelrx/noisefigure/noisefigure.cpp +++ b/plugins/channelrx/noisefigure/noisefigure.cpp @@ -67,7 +67,7 @@ NoiseFigure::NoiseFigure(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); @@ -128,11 +128,11 @@ void NoiseFigure::setCenterFrequency(qint64 frequency) { NoiseFigureSettings settings = m_settings; settings.m_inputFrequencyOffset = frequency; - applySettings(settings, false); + applySettings(QStringList("inputFrequencyOffset"), settings, false); if (m_guiMessageQueue) // forward to GUI if any { - MsgConfigureNoiseFigure *msgToGUI = MsgConfigureNoiseFigure::create(settings, false); + MsgConfigureNoiseFigure *msgToGUI = MsgConfigureNoiseFigure::create(QStringList("inputFrequencyOffset"), settings, false); m_guiMessageQueue->push(msgToGUI); } } @@ -154,7 +154,7 @@ void NoiseFigure::start() DSPSignalNotification *dspMsg = new DSPSignalNotification(m_basebandSampleRate, m_centerFrequency); m_basebandSink->getInputMessageQueue()->push(dspMsg); - NoiseFigureBaseband::MsgConfigureNoiseFigureBaseband *msg = NoiseFigureBaseband::MsgConfigureNoiseFigureBaseband::create(m_settings, true); + NoiseFigureBaseband::MsgConfigureNoiseFigureBaseband *msg = NoiseFigureBaseband::MsgConfigureNoiseFigureBaseband::create(QStringList(), m_settings, true); m_basebandSink->getInputMessageQueue()->push(msg); } @@ -448,7 +448,7 @@ bool NoiseFigure::handleMessage(const Message& cmd) { MsgConfigureNoiseFigure& cfg = (MsgConfigureNoiseFigure&) cmd; qDebug() << "NoiseFigure::handleMessage: MsgConfigureNoiseFigure"; - applySettings(cfg.getSettings(), cfg.getForce()); + applySettings(cfg.getSettingsKeys(), cfg.getSettings(), cfg.getForce()); return true; } @@ -518,40 +518,16 @@ bool NoiseFigure::handleMessage(const Message& cmd) } } -void NoiseFigure::applySettings(const NoiseFigureSettings& settings, bool force) +void NoiseFigure::applySettings(const QStringList& settingsKeys, const NoiseFigureSettings& settings, bool force) { - qDebug() << "NoiseFigure::applySettings:" - << " m_inputFrequencyOffset: " << settings.m_inputFrequencyOffset - << " m_fftSize: " << settings.m_fftSize - << " m_fftCount: " << settings.m_fftCount - << " m_sweepSpec: " << settings.m_sweepSpec - << " m_startValue: " << settings.m_startValue - << " m_stopValue: " << settings.m_stopValue - << " m_steps: " << settings.m_steps - << " m_step: " << settings.m_step - << " m_sweepList: " << settings.m_sweepList - << " m_setting: " << settings.m_setting - << " m_visaDevice: " << settings.m_visaDevice - << " m_powerOnSCPI: " << settings.m_powerOnSCPI - << " m_powerOffSCPI: " << settings.m_powerOffSCPI - << " m_powerOnCommand: " << settings.m_powerOnCommand - << " m_powerOffCommand: " << settings.m_powerOffCommand - << " m_powerDelay: " << settings.m_powerDelay - << " m_enr: " << settings.m_enr - << " 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() << "NoiseFigure::applySettings:" << settings.getDebugString(settingsKeys, force); QList reverseAPIKeys; if ((settings.m_inputFrequencyOffset != m_settings.m_inputFrequencyOffset) || force) { reverseAPIKeys.append("inputFrequencyOffset"); } - 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 { @@ -566,16 +542,16 @@ void NoiseFigure::applySettings(const NoiseFigureSettings& settings, bool force) reverseAPIKeys.append("streamIndex"); } - NoiseFigureBaseband::MsgConfigureNoiseFigureBaseband *msg = NoiseFigureBaseband::MsgConfigureNoiseFigureBaseband::create(settings, force); + NoiseFigureBaseband::MsgConfigureNoiseFigureBaseband *msg = NoiseFigureBaseband::MsgConfigureNoiseFigureBaseband::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); } @@ -591,14 +567,14 @@ bool NoiseFigure::deserialize(const QByteArray& data) { if (m_settings.deserialize(data)) { - MsgConfigureNoiseFigure *msg = MsgConfigureNoiseFigure::create(m_settings, true); + MsgConfigureNoiseFigure *msg = MsgConfigureNoiseFigure::create(QStringList(), m_settings, true); m_inputMessageQueue.push(msg); return true; } else { m_settings.resetToDefaults(); - MsgConfigureNoiseFigure *msg = MsgConfigureNoiseFigure::create(m_settings, true); + MsgConfigureNoiseFigure *msg = MsgConfigureNoiseFigure::create(QStringList(), m_settings, true); m_inputMessageQueue.push(msg); return false; } @@ -634,13 +610,13 @@ int NoiseFigure::webapiSettingsPutPatch( NoiseFigureSettings settings = m_settings; webapiUpdateChannelSettings(settings, channelSettingsKeys, response); - MsgConfigureNoiseFigure *msg = MsgConfigureNoiseFigure::create(settings, force); + MsgConfigureNoiseFigure *msg = MsgConfigureNoiseFigure::create(channelSettingsKeys, settings, force); m_inputMessageQueue.push(msg); qDebug("NoiseFigure::webapiSettingsPutPatch: forward to GUI: %p", m_guiMessageQueue); if (m_guiMessageQueue) // forward to GUI if any { - MsgConfigureNoiseFigure *msgToGUI = MsgConfigureNoiseFigure::create(settings, force); + MsgConfigureNoiseFigure *msgToGUI = MsgConfigureNoiseFigure::create(channelSettingsKeys, settings, force); m_guiMessageQueue->push(msgToGUI); } @@ -784,7 +760,7 @@ void NoiseFigure::webapiFormatChannelSettings(SWGSDRangel::SWGChannelSettings& r } } -void NoiseFigure::webapiReverseSendSettings(QList& channelSettingsKeys, const NoiseFigureSettings& settings, bool force) +void NoiseFigure::webapiReverseSendSettings(const QList& channelSettingsKeys, const NoiseFigureSettings& settings, bool force) { SWGSDRangel::SWGChannelSettings *swgChannelSettings = new SWGSDRangel::SWGChannelSettings(); webapiFormatChannelSettings(channelSettingsKeys, swgChannelSettings, settings, force); @@ -810,7 +786,7 @@ void NoiseFigure::webapiReverseSendSettings(QList& channelSettingsKeys, } void NoiseFigure::webapiFormatChannelSettings( - QList& channelSettingsKeys, + const QList& channelSettingsKeys, SWGSDRangel::SWGChannelSettings *swgChannelSettings, const NoiseFigureSettings& settings, bool force diff --git a/plugins/channelrx/noisefigure/noisefigure.h b/plugins/channelrx/noisefigure/noisefigure.h index bc9335db7..80c5858ba 100644 --- a/plugins/channelrx/noisefigure/noisefigure.h +++ b/plugins/channelrx/noisefigure/noisefigure.h @@ -50,20 +50,23 @@ public: public: const NoiseFigureSettings& getSettings() const { return m_settings; } + const QStringList& getSettingsKeys() const { return m_settingsKeys; } bool getForce() const { return m_force; } - static MsgConfigureNoiseFigure* create(const NoiseFigureSettings& settings, bool force) + static MsgConfigureNoiseFigure* create(const QStringList& settingsKeys, const NoiseFigureSettings& settings, bool force) { - return new MsgConfigureNoiseFigure(settings, force); + return new MsgConfigureNoiseFigure(settingsKeys, settings, force); } private: NoiseFigureSettings m_settings; + QStringList m_settingsKeys; bool m_force; - MsgConfigureNoiseFigure(const NoiseFigureSettings& settings, bool force) : + MsgConfigureNoiseFigure(const QStringList& settingsKeys, const NoiseFigureSettings& settings, bool force) : Message(), m_settings(settings), + m_settingsKeys(settingsKeys), m_force(force) { } }; @@ -260,10 +263,10 @@ private: QNetworkRequest m_networkRequest; virtual bool handleMessage(const Message& cmd); - void applySettings(const NoiseFigureSettings& settings, bool force = false); - void webapiReverseSendSettings(QList& channelSettingsKeys, const NoiseFigureSettings& settings, bool force); + void applySettings(const QStringList& settingsKeys, const NoiseFigureSettings& settings, bool force = false); + void webapiReverseSendSettings(const QList& channelSettingsKeys, const NoiseFigureSettings& settings, bool force); void webapiFormatChannelSettings( - QList& channelSettingsKeys, + const QList& channelSettingsKeys, SWGSDRangel::SWGChannelSettings *swgChannelSettings, const NoiseFigureSettings& settings, bool force diff --git a/plugins/channelrx/noisefigure/noisefigurebaseband.cpp b/plugins/channelrx/noisefigure/noisefigurebaseband.cpp index b0268d77a..e915adb48 100644 --- a/plugins/channelrx/noisefigure/noisefigurebaseband.cpp +++ b/plugins/channelrx/noisefigure/noisefigurebaseband.cpp @@ -133,7 +133,7 @@ bool NoiseFigureBaseband::handleMessage(const Message& cmd) MsgConfigureNoiseFigureBaseband& cfg = (MsgConfigureNoiseFigureBaseband&) cmd; qDebug() << "NoiseFigureBaseband::handleMessage: MsgConfigureNoiseFigureBaseband"; - applySettings(cfg.getSettings(), cfg.getForce()); + applySettings(cfg.getSettingsKeys(), cfg.getSettings(), cfg.getForce()); return true; } @@ -154,11 +154,15 @@ bool NoiseFigureBaseband::handleMessage(const Message& cmd) } } -void NoiseFigureBaseband::applySettings(const NoiseFigureSettings& settings, bool force) +void NoiseFigureBaseband::applySettings(const QStringList& settingsKeys, const NoiseFigureSettings& 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); + } } void NoiseFigureBaseband::setBasebandSampleRate(int sampleRate) diff --git a/plugins/channelrx/noisefigure/noisefigurebaseband.h b/plugins/channelrx/noisefigure/noisefigurebaseband.h index 816485b19..f820ffc6d 100644 --- a/plugins/channelrx/noisefigure/noisefigurebaseband.h +++ b/plugins/channelrx/noisefigure/noisefigurebaseband.h @@ -42,20 +42,23 @@ public: public: const NoiseFigureSettings& getSettings() const { return m_settings; } + const QStringList& getSettingsKeys() const { return m_settingsKeys; } bool getForce() const { return m_force; } - static MsgConfigureNoiseFigureBaseband* create(const NoiseFigureSettings& settings, bool force) + static MsgConfigureNoiseFigureBaseband* create(const QStringList& settingsKeys, const NoiseFigureSettings& settings, bool force) { - return new MsgConfigureNoiseFigureBaseband(settings, force); + return new MsgConfigureNoiseFigureBaseband(settingsKeys, settings, force); } private: NoiseFigureSettings m_settings; + QStringList m_settingsKeys; bool m_force; - MsgConfigureNoiseFigureBaseband(const NoiseFigureSettings& settings, bool force) : + MsgConfigureNoiseFigureBaseband(const QStringList& settingsKeys, const NoiseFigureSettings& settings, bool force) : Message(), m_settings(settings), + m_settingsKeys(settingsKeys), m_force(force) { } }; @@ -89,7 +92,7 @@ private: bool handleMessage(const Message& cmd); void calculateOffset(NoiseFigureSink *sink); - void applySettings(const NoiseFigureSettings& settings, bool force = false); + void applySettings(const QStringList& settingsKeys, const NoiseFigureSettings& settings, bool force = false); private slots: void handleInputMessages(); diff --git a/plugins/channelrx/noisefigure/noisefiguregui.cpp b/plugins/channelrx/noisefigure/noisefiguregui.cpp index 98996df9c..6708ad91f 100644 --- a/plugins/channelrx/noisefigure/noisefiguregui.cpp +++ b/plugins/channelrx/noisefigure/noisefiguregui.cpp @@ -220,7 +220,7 @@ void NoiseFigureGUI::resetToDefaults() { m_settings.resetToDefaults(); displaySettings(); - applySettings(true); + applySettings(QStringList(), true); } QByteArray NoiseFigureGUI::serialize() const @@ -232,7 +232,7 @@ bool NoiseFigureGUI::deserialize(const QByteArray& data) { if(m_settings.deserialize(data)) { displaySettings(); - applySettings(true); + applySettings(QStringList(), true); return true; } else { resetToDefaults(); @@ -312,7 +312,7 @@ void NoiseFigureGUI::channelMarkerChangedByCursor() { ui->deltaFrequency->setValue(m_channelMarker.getCenterFrequency()); m_settings.m_inputFrequencyOffset = m_channelMarker.getCenterFrequency(); - applySettings(); + applySettings(QStringList("inputFrequencyOffset")); } void NoiseFigureGUI::channelMarkerHighlightedByCursor() @@ -325,20 +325,20 @@ void NoiseFigureGUI::on_deltaFrequency_changed(qint64 value) m_channelMarker.setCenterFrequency(value); m_settings.m_inputFrequencyOffset = m_channelMarker.getCenterFrequency(); updateAbsoluteCenterFrequency(); - applySettings(); + applySettings(QStringList("inputFrequencyOffset")); } void NoiseFigureGUI::on_fftCount_valueChanged(int value) { m_settings.m_fftCount = 10000 * value; ui->fftCountText->setText(QString("%1k").arg(m_settings.m_fftCount / 1000)); - applySettings(); + applySettings(QStringList("fftCount")); } void NoiseFigureGUI::on_setting_currentTextChanged(const QString& text) { m_settings.m_setting = text; - applySettings(); + applySettings(QStringList("setting")); } void NoiseFigureGUI::updateFreqWidgets() @@ -361,44 +361,44 @@ void NoiseFigureGUI::on_frequencySpec_currentIndexChanged(int index) { m_settings.m_sweepSpec = (NoiseFigureSettings::SweepSpec)index; updateFreqWidgets(); - applySettings(); + applySettings(QStringList("sweepSpec")); } void NoiseFigureGUI::on_start_valueChanged(double value) { m_settings.m_startValue = value; - applySettings(); + applySettings(QStringList("startValue")); } void NoiseFigureGUI::on_stop_valueChanged(double value) { m_settings.m_stopValue = value; - applySettings(); + applySettings(QStringList("stopValue")); } void NoiseFigureGUI::on_steps_valueChanged(int value) { m_settings.m_steps = value; - applySettings(); + applySettings(QStringList("steps")); } void NoiseFigureGUI::on_step_valueChanged(double value) { m_settings.m_step = value; - applySettings(); + applySettings(QStringList("step")); } void NoiseFigureGUI::on_list_editingFinished() { m_settings.m_sweepList = ui->list->text().trimmed(); - applySettings(); + applySettings(QStringList("sweepList")); } void NoiseFigureGUI::on_fftSize_currentIndexChanged(int index) { m_settings.m_fftSize = 1 << (index + 6); updateBW(); - applySettings(); + applySettings(QStringList("fftSize")); } void NoiseFigureGUI::on_startStop_clicked() @@ -517,7 +517,7 @@ void NoiseFigureGUI::on_enr_clicked() NoiseFigureENRDialog dialog(&m_settings); if (dialog.exec() == QDialog::Accepted) { - applySettings(); + applySettings(QStringList({"enrSettings", "interpolation"})); } } @@ -526,7 +526,7 @@ void NoiseFigureGUI::on_control_clicked() NoiseFigureControlDialog dialog(&m_settings); if (dialog.exec() == QDialog::Accepted) { - applySettings(); + applySettings(QStringList({"controlSettings", "powerDelay", "visaDevice", "powerOnCommand", "powerOffCommand", "powerOnSCPI", "powerOffSCPI"})); } } @@ -536,7 +536,7 @@ void NoiseFigureGUI::onWidgetRolled(QWidget* widget, bool rollDown) (void) rollDown; getRollupContents()->saveState(m_rollupState); - applySettings(); + applySettings(QStringList()); } void NoiseFigureGUI::onMenuDialogCalled(const QPoint &p) @@ -581,7 +581,7 @@ void NoiseFigureGUI::onMenuDialogCalled(const QPoint &p) updateIndexLabel(); } - applySettings(); + applySettings(QStringList({"useReverseAPI", "reverseAPIAddress", "reverseAPIPort", "reverseAPIDeviceIndex", "reverseAPIChannelIndex", "streamIndex"})); } resetContextMenuType(); @@ -668,7 +668,7 @@ NoiseFigureGUI::NoiseFigureGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, B displaySettings(); makeUIConnections(); - applySettings(true); + applySettings(QStringList(), true); m_resizer.enableChildMouseTracking(); } @@ -700,11 +700,11 @@ void NoiseFigureGUI::blockApplySettings(bool block) m_doApplySettings = !block; } -void NoiseFigureGUI::applySettings(bool force) +void NoiseFigureGUI::applySettings(const QStringList& settingsKeys, bool force) { if (m_doApplySettings) { - NoiseFigure::MsgConfigureNoiseFigure* message = NoiseFigure::MsgConfigureNoiseFigure::create( m_settings, force); + NoiseFigure::MsgConfigureNoiseFigure* message = NoiseFigure::MsgConfigureNoiseFigure::create(settingsKeys, m_settings, force); m_noiseFigure->getInputMessageQueue()->push(message); } } diff --git a/plugins/channelrx/noisefigure/noisefiguregui.h b/plugins/channelrx/noisefigure/noisefiguregui.h index 8aa01ec22..d59b0efe2 100644 --- a/plugins/channelrx/noisefigure/noisefiguregui.h +++ b/plugins/channelrx/noisefigure/noisefiguregui.h @@ -102,7 +102,7 @@ private: virtual ~NoiseFigureGUI(); 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/noisefigure/noisefiguresettings.cpp b/plugins/channelrx/noisefigure/noisefiguresettings.cpp index 9960098a3..715902204 100644 --- a/plugins/channelrx/noisefigure/noisefiguresettings.cpp +++ b/plugins/channelrx/noisefigure/noisefiguresettings.cpp @@ -253,3 +253,180 @@ void NoiseFigureSettings::deserializeENRs(const QByteArray& data, QList& (*stream) >> enrs; delete stream; } + +void NoiseFigureSettings::applySettings(const QStringList& settingsKeys, const NoiseFigureSettings& settings) +{ + if (settingsKeys.contains("inputFrequencyOffset")) { + m_inputFrequencyOffset = settings.m_inputFrequencyOffset; + } + if (settingsKeys.contains("fftSize")) { + m_fftSize = settings.m_fftSize; + } + if (settingsKeys.contains("fftCount")) { + m_fftCount = settings.m_fftCount; + } + if (settingsKeys.contains("sweepSpec")) { + m_sweepSpec = settings.m_sweepSpec; + } + if (settingsKeys.contains("startValue")) { + m_startValue = settings.m_startValue; + } + if (settingsKeys.contains("stopValue")) { + m_stopValue = settings.m_stopValue; + } + if (settingsKeys.contains("steps")) { + m_steps = settings.m_steps; + } + if (settingsKeys.contains("step")) { + m_step = settings.m_step; + } + if (settingsKeys.contains("sweepList")) { + m_sweepList = settings.m_sweepList; + } + if (settingsKeys.contains("visaDevice")) { + m_visaDevice = settings.m_visaDevice; + } + if (settingsKeys.contains("powerOnSCPI")) { + m_powerOnSCPI = settings.m_powerOnSCPI; + } + if (settingsKeys.contains("powerOffSCPI")) { + m_powerOffSCPI = settings.m_powerOffSCPI; + } + if (settingsKeys.contains("powerOnCommand")) { + m_powerOnCommand = settings.m_powerOnCommand; + } + if (settingsKeys.contains("powerOffCommand")) { + m_powerOffCommand = settings.m_powerOffCommand; + } + if (settingsKeys.contains("powerDelay")) { + m_powerDelay = settings.m_powerDelay; + } + if (settingsKeys.contains("interpolation")) { + m_interpolation = settings.m_interpolation; + } + if (settingsKeys.contains("setting")) { + m_setting = settings.m_setting; + } + if (settingsKeys.contains("rgbColor")) { + m_rgbColor = settings.m_rgbColor; + } + if (settingsKeys.contains("title")) { + m_title = settings.m_title; + } + if (settingsKeys.contains("streamIndex")) { + m_streamIndex = settings.m_streamIndex; + } + if (settingsKeys.contains("useReverseAPI")) { + m_useReverseAPI = settings.m_useReverseAPI; + } + if (settingsKeys.contains("reverseAPIAddress")) { + m_reverseAPIAddress = settings.m_reverseAPIAddress; + } + if (settingsKeys.contains("reverseAPIPort")) { + m_reverseAPIPort = settings.m_reverseAPIPort; + } + if (settingsKeys.contains("reverseAPIDeviceIndex")) { + m_reverseAPIDeviceIndex = settings.m_reverseAPIDeviceIndex; + } + if (settingsKeys.contains("reverseAPIChannelIndex")) { + m_reverseAPIChannelIndex = settings.m_reverseAPIChannelIndex; + } + if (settingsKeys.contains("workspaceIndex")) { + m_workspaceIndex = settings.m_workspaceIndex; + } + if (settingsKeys.contains("geometryBytes")) { + m_geometryBytes = settings.m_geometryBytes; + } + if (settingsKeys.contains("hidden")) { + m_hidden = settings.m_hidden; + } +} + +QString NoiseFigureSettings::getDebugString(const QStringList& settingsKeys, bool force) const +{ + std::ostringstream ostr; + + if (settingsKeys.contains("inputFrequencyOffset") || force) { + ostr << " m_inputFrequencyOffset: " << m_inputFrequencyOffset; + } + if (settingsKeys.contains("fftSize") || force) { + ostr << " m_fftSize: " << m_fftSize; + } + if (settingsKeys.contains("fftCount") || force) { + ostr << " m_fftCount: " << m_fftCount; + } + if (settingsKeys.contains("sweepSpec") || force) { + ostr << " m_sweepSpec: " << m_sweepSpec; + } + if (settingsKeys.contains("startValue") || force) { + ostr << " m_startValue: " << m_startValue; + } + if (settingsKeys.contains("stopValue") || force) { + ostr << " m_stopValue: " << m_stopValue; + } + if (settingsKeys.contains("steps") || force) { + ostr << " m_steps: " << m_steps; + } + if (settingsKeys.contains("step") || force) { + ostr << " m_step: " << m_step; + } + if (settingsKeys.contains("sweepList") || force) { + ostr << " m_sweepList: " << m_sweepList.toStdString(); + } + if (settingsKeys.contains("visaDevice") || force) { + ostr << " m_visaDevice: " << m_visaDevice.toStdString(); + } + if (settingsKeys.contains("powerOnSCPI") || force) { + ostr << " m_powerOnSCPI: " << m_powerOnSCPI.toStdString(); + } + if (settingsKeys.contains("powerOffSCPI") || force) { + ostr << " m_powerOffSCPI: " << m_powerOffSCPI.toStdString(); + } + if (settingsKeys.contains("powerOnCommand") || force) { + ostr << " m_powerOnCommand: " << m_powerOnCommand.toStdString(); + } + if (settingsKeys.contains("powerOffCommand") || force) { + ostr << " m_powerOffCommand: " << m_powerOffCommand.toStdString(); + } + if (settingsKeys.contains("powerDelay") || force) { + ostr << " m_powerDelay: " << m_powerDelay; + } + if (settingsKeys.contains("interpolation") || force) { + ostr << " m_interpolation: " << m_interpolation; + } + if (settingsKeys.contains("setting") || force) { + ostr << " m_setting: " << m_setting.toStdString(); + } + if (settingsKeys.contains("rgbColor") || force) { + ostr << " m_rgbColor: " << m_rgbColor; + } + if (settingsKeys.contains("title") || force) { + ostr << " m_title: " << m_title.toStdString(); + } + if (settingsKeys.contains("streamIndex") || force) { + ostr << " m_streamIndex: " << m_streamIndex; + } + if (settingsKeys.contains("useReverseAPI") || force) { + ostr << " m_useReverseAPI: " << m_useReverseAPI; + } + if (settingsKeys.contains("reverseAPIAddress") || force) { + ostr << " m_reverseAPIAddress: " << m_reverseAPIAddress.toStdString(); + } + if (settingsKeys.contains("reverseAPIPort") || force) { + ostr << " m_reverseAPIPort: " << m_reverseAPIPort; + } + if (settingsKeys.contains("reverseAPIDeviceIndex") || force) { + ostr << " m_reverseAPIDeviceIndex: " << m_reverseAPIDeviceIndex; + } + if (settingsKeys.contains("reverseAPIChannelIndex") || force) { + ostr << " m_reverseAPIChannelIndex: " << m_reverseAPIChannelIndex; + } + if (settingsKeys.contains("workspaceIndex") || force) { + ostr << " m_workspaceIndex: " << m_workspaceIndex; + } + if (settingsKeys.contains("hidden") || force) { + ostr << " m_hidden: " << m_hidden; + } + + return QString(ostr.str().c_str()); +} diff --git a/plugins/channelrx/noisefigure/noisefiguresettings.h b/plugins/channelrx/noisefigure/noisefiguresettings.h index f5004caa4..9c0e47b13 100644 --- a/plugins/channelrx/noisefigure/noisefiguresettings.h +++ b/plugins/channelrx/noisefigure/noisefiguresettings.h @@ -103,6 +103,8 @@ struct NoiseFigureSettings bool deserialize(const QByteArray& data); QByteArray serializeENRs(QList enrs) const; void deserializeENRs(const QByteArray& data, QList& enrs); + void applySettings(const QStringList& settingsKeys, const NoiseFigureSettings& settings); + QString getDebugString(const QStringList& settingsKeys, bool force=false) const; }; #endif /* INCLUDE_NOISEFIGURESETTINGS_H */ diff --git a/plugins/channelrx/noisefigure/noisefiguresink.cpp b/plugins/channelrx/noisefigure/noisefiguresink.cpp index 76c0e4c2a..966a3004e 100644 --- a/plugins/channelrx/noisefigure/noisefiguresink.cpp +++ b/plugins/channelrx/noisefigure/noisefiguresink.cpp @@ -40,7 +40,7 @@ NoiseFigureSink::NoiseFigureSink() : { m_magsq = 0.0; - applySettings(m_settings, true); + applySettings(QStringList(), m_settings, true); applyChannelSettings(m_channelSampleRate, 0, true); } @@ -129,12 +129,11 @@ void NoiseFigureSink::applyChannelSettings(int channelSampleRate, int channelFre m_channelSampleRate = channelSampleRate; } -void NoiseFigureSink::applySettings(const NoiseFigureSettings& settings, bool force) +void NoiseFigureSink::applySettings(const QStringList& settingsKeys, const NoiseFigureSettings& settings, bool force) { - qDebug() << "NoiseFigureSink::applySettings:" - << " force: " << force; + qDebug() << "NoiseFigureSink::applySettings:" << settings.getDebugString(settingsKeys, force); - 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) { @@ -144,11 +143,15 @@ void NoiseFigureSink::applySettings(const NoiseFigureSettings& settings, bool fo m_fftCounter = 0; } - if ((settings.m_fftCount != m_settings.m_fftCount) || force) + if ((settingsKeys.contains("fftCount") && (settings.m_fftCount != m_settings.m_fftCount)) || force) { m_powerSum = 0.0; m_count = 0; } - m_settings = settings; + if (force) { + m_settings = settings; + } else { + m_settings.applySettings(settingsKeys, settings); + } } diff --git a/plugins/channelrx/noisefigure/noisefiguresink.h b/plugins/channelrx/noisefigure/noisefiguresink.h index 666215d36..8cbca8c70 100644 --- a/plugins/channelrx/noisefigure/noisefiguresink.h +++ b/plugins/channelrx/noisefigure/noisefiguresink.h @@ -44,7 +44,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 NoiseFigureSettings& settings, bool force = false); + void applySettings(const QStringList& settingsKeys, const NoiseFigureSettings& settings, bool force = false); void setMessageQueueToChannel(MessageQueue *messageQueue) { m_messageQueueToChannel = messageQueue; } void setChannel(ChannelAPI *channel) { m_channel = channel; } void startMeasurement() { m_enabled = true; } diff --git a/plugins/channelrx/radioastronomy/radioastronomysettings.cpp b/plugins/channelrx/radioastronomy/radioastronomysettings.cpp index bc3f280d6..6982f239f 100644 --- a/plugins/channelrx/radioastronomy/radioastronomysettings.cpp +++ b/plugins/channelrx/radioastronomy/radioastronomysettings.cpp @@ -509,4 +509,665 @@ bool RadioAstronomySettings::deserialize(const QByteArray& data) } } +void RadioAstronomySettings::applySettings(const QStringList& settingsKeys, const RadioAstronomySettings& settings) +{ + if (settingsKeys.contains("inputFrequencyOffset")) { + m_inputFrequencyOffset = settings.m_inputFrequencyOffset; + } + if (settingsKeys.contains("sampleRate")) { + m_sampleRate = settings.m_sampleRate; + } + if (settingsKeys.contains("rfBandwidth")) { + m_rfBandwidth = settings.m_rfBandwidth; + } + if (settingsKeys.contains("integration")) { + m_integration = settings.m_integration; + } + if (settingsKeys.contains("fftSize")) { + m_fftSize = settings.m_fftSize; + } + if (settingsKeys.contains("fftWindow")) { + m_fftWindow = settings.m_fftWindow; + } + if (settingsKeys.contains("filterFreqs")) { + m_filterFreqs = settings.m_filterFreqs; + } + if (settingsKeys.contains("starTracker")) { + m_starTracker = settings.m_starTracker; + } + if (settingsKeys.contains("rotator")) { + m_rotator = settings.m_rotator; + } + if (settingsKeys.contains("tempRX")) { + m_tempRX = settings.m_tempRX; + } + if (settingsKeys.contains("tempCMB")) { + m_tempCMB = settings.m_tempCMB; + } + if (settingsKeys.contains("tempGal")) { + m_tempGal = settings.m_tempGal; + } + if (settingsKeys.contains("tempSP")) { + m_tempSP = settings.m_tempSP; + } + if (settingsKeys.contains("tempAtm")) { + m_tempAtm = settings.m_tempAtm; + } + if (settingsKeys.contains("tempAir")) { + m_tempAir = settings.m_tempAir; + } + if (settingsKeys.contains("zenithOpacity")) { + m_zenithOpacity = settings.m_zenithOpacity; + } + if (settingsKeys.contains("elevation")) { + m_elevation = settings.m_elevation; + } + if (settingsKeys.contains("tempGalLink")) { + m_tempGalLink = settings.m_tempGalLink; + } + if (settingsKeys.contains("tempAtmLink")) { + m_tempAtmLink = settings.m_tempAtmLink; + } + if (settingsKeys.contains("tempAirLink")) { + m_tempAirLink = settings.m_tempAirLink; + } + if (settingsKeys.contains("elevationLink")) { + m_elevationLink = settings.m_elevationLink; + } + if (settingsKeys.contains("gainVariation")) { + m_gainVariation = settings.m_gainVariation; + } + if (settingsKeys.contains("sourceType")) { + m_sourceType = settings.m_sourceType; + } + if (settingsKeys.contains("omegaS")) { + m_omegaS = settings.m_omegaS; + } + if (settingsKeys.contains("omegaSUnits")) { + m_omegaSUnits = settings.m_omegaSUnits; + } + if (settingsKeys.contains("omegaAUnits")) { + m_omegaAUnits = settings.m_omegaAUnits; + } + if (settingsKeys.contains("spectrumPeaks")) { + m_spectrumPeaks = settings.m_spectrumPeaks; + } + if (settingsKeys.contains("spectrumMarkers")) { + m_spectrumMarkers = settings.m_spectrumMarkers; + } + if (settingsKeys.contains("spectrumTemp")) { + m_spectrumTemp = settings.m_spectrumTemp; + } + if (settingsKeys.contains("spectrumReverseXAxis")) { + m_spectrumReverseXAxis = settings.m_spectrumReverseXAxis; + } + if (settingsKeys.contains("spectrumRefLine")) { + m_spectrumRefLine = settings.m_spectrumRefLine; + } + if (settingsKeys.contains("spectrumLAB")) { + m_spectrumLAB = settings.m_spectrumLAB; + } + if (settingsKeys.contains("spectrumDistance")) { + m_spectrumDistance = settings.m_spectrumDistance; + } + if (settingsKeys.contains("spectrumLegend")) { + m_spectrumLegend = settings.m_spectrumLegend; + } + if (settingsKeys.contains("spectrumReference")) { + m_spectrumReference = settings.m_spectrumReference; + } + if (settingsKeys.contains("spectrumRange")) { + m_spectrumRange = settings.m_spectrumRange; + } + if (settingsKeys.contains("spectrumSpan")) { + m_spectrumSpan = settings.m_spectrumSpan; + } + if (settingsKeys.contains("spectrumCenterFreqOffset")) { + m_spectrumCenterFreqOffset = settings.m_spectrumCenterFreqOffset; + } + if (settingsKeys.contains("spectrumAutoscale")) { + m_spectrumAutoscale = settings.m_spectrumAutoscale; + } + if (settingsKeys.contains("spectrumYScale")) { + m_spectrumYScale = settings.m_spectrumYScale; + } + if (settingsKeys.contains("spectrumBaseline")) { + m_spectrumBaseline = settings.m_spectrumBaseline; + } + if (settingsKeys.contains("recalibrate")) { + m_recalibrate = settings.m_recalibrate; + } + if (settingsKeys.contains("tCalHot")) { + m_tCalHot = settings.m_tCalHot; + } + if (settingsKeys.contains("tCalCold")) { + m_tCalCold = settings.m_tCalCold; + } + if (settingsKeys.contains("line")) { + m_line = settings.m_line; + } + if (settingsKeys.contains("lineCustomFrequency")) { + m_lineCustomFrequency = settings.m_lineCustomFrequency; + } + if (settingsKeys.contains("refFrame")) { + m_refFrame = settings.m_refFrame; + } + if (settingsKeys.contains("sunDistanceToGC")) { + m_sunDistanceToGC = settings.m_sunDistanceToGC; + } + if (settingsKeys.contains("sunOrbitalVelocity")) { + m_sunOrbitalVelocity = settings.m_sunOrbitalVelocity; + } + if (settingsKeys.contains("powerPeaks")) { + m_powerPeaks = settings.m_powerPeaks; + } + if (settingsKeys.contains("powerMarkers")) { + m_powerMarkers = settings.m_powerMarkers; + } + if (settingsKeys.contains("powerAvg")) { + m_powerAvg = settings.m_powerAvg; + } + if (settingsKeys.contains("powerLegend")) { + m_powerLegend = settings.m_powerLegend; + } + if (settingsKeys.contains("powerShowTsys0")) { + m_powerShowTsys0 = settings.m_powerShowTsys0; + } + if (settingsKeys.contains("powerShowAirTemp")) { + m_powerShowAirTemp = settings.m_powerShowAirTemp; + } + if (settingsKeys.contains("powerShowGaussian")) { + m_powerShowGaussian = settings.m_powerShowGaussian; + } + if (settingsKeys.contains("powerShowFiltered")) { + m_powerShowFiltered = settings.m_powerShowFiltered; + } + if (settingsKeys.contains("powerShowMeasurement")) { + m_powerShowMeasurement = settings.m_powerShowMeasurement; + } + if (settingsKeys.contains("powerReference")) { + m_powerReference = settings.m_powerReference; + } + if (settingsKeys.contains("powerRange")) { + m_powerRange = settings.m_powerRange; + } + if (settingsKeys.contains("powerAutoscale")) { + m_powerAutoscale = settings.m_powerAutoscale; + } + if (settingsKeys.contains("powerYData")) { + m_powerYData = settings.m_powerYData; + } + if (settingsKeys.contains("powerYUnits")) { + m_powerYUnits = settings.m_powerYUnits; + } + if (settingsKeys.contains("powerFilter")) { + m_powerFilter = settings.m_powerFilter; + } + if (settingsKeys.contains("powerFilterN")) { + m_powerFilterN = settings.m_powerFilterN; + } + if (settingsKeys.contains("power2DLinkSweep")) { + m_power2DLinkSweep = settings.m_power2DLinkSweep; + } + if (settingsKeys.contains("power2DSweepType")) { + m_power2DSweepType = settings.m_power2DSweepType; + } + if (settingsKeys.contains("power2DWidth")) { + m_power2DWidth = settings.m_power2DWidth; + } + if (settingsKeys.contains("power2DHeight")) { + m_power2DHeight = settings.m_power2DHeight; + } + if (settingsKeys.contains("power2DXMin")) { + m_power2DXMin = settings.m_power2DXMin; + } + if (settingsKeys.contains("power2DXMax")) { + m_power2DXMax = settings.m_power2DXMax; + } + if (settingsKeys.contains("power2DYMin")) { + m_power2DYMin = settings.m_power2DYMin; + } + if (settingsKeys.contains("power2DYMax")) { + m_power2DYMax = settings.m_power2DYMax; + } + if (settingsKeys.contains("powerColourAutoscale")) { + m_powerColourAutoscale = settings.m_powerColourAutoscale; + } + if (settingsKeys.contains("powerColourScaleMin")) { + m_powerColourScaleMin = settings.m_powerColourScaleMin; + } + if (settingsKeys.contains("powerColourScaleMax")) { + m_powerColourScaleMax = settings.m_powerColourScaleMax; + } + if (settingsKeys.contains("powerColourPalette")) { + m_powerColourPalette = settings.m_powerColourPalette; + } + if (settingsKeys.contains("runMode")) { + m_runMode = settings.m_runMode; + } + if (settingsKeys.contains("sweepStartAtTime")) { + m_sweepStartAtTime = settings.m_sweepStartAtTime; + } + if (settingsKeys.contains("sweepStartDateTime")) { + m_sweepStartDateTime = settings.m_sweepStartDateTime; + } + if (settingsKeys.contains("sweepType")) { + m_sweepType = settings.m_sweepType; + } + if (settingsKeys.contains("sweep1Start")) { + m_sweep1Start = settings.m_sweep1Start; + } + if (settingsKeys.contains("sweep1Stop")) { + m_sweep1Stop = settings.m_sweep1Stop; + } + if (settingsKeys.contains("sweep1Step")) { + m_sweep1Step = settings.m_sweep1Step; + } + if (settingsKeys.contains("sweep1Delay")) { + m_sweep1Delay = settings.m_sweep1Delay; + } + if (settingsKeys.contains("sweep2Start")) { + m_sweep2Start = settings.m_sweep2Start; + } + if (settingsKeys.contains("sweep2Stop")) { + m_sweep2Stop = settings.m_sweep2Stop; + } + if (settingsKeys.contains("sweep2Step")) { + m_sweep2Step = settings.m_sweep2Step; + } + if (settingsKeys.contains("sweep2Delay")) { + m_sweep2Delay = settings.m_sweep2Delay; + } + if (settingsKeys.contains("gpioEnabled")) { + m_gpioEnabled = settings.m_gpioEnabled; + } + if (settingsKeys.contains("gpioPin")) { + m_gpioPin = settings.m_gpioPin; + } + if (settingsKeys.contains("gpioSense")) { + m_gpioSense = settings.m_gpioSense; + } + if (settingsKeys.contains("startCalCommand")) { + m_startCalCommand = settings.m_startCalCommand; + } + if (settingsKeys.contains("stopCalCommand")) { + m_stopCalCommand = settings.m_stopCalCommand; + } + if (settingsKeys.contains("calCommandDelay")) { + m_calCommandDelay = settings.m_calCommandDelay; + } + if (settingsKeys.contains("sensorMeasurePeriod")) { + m_sensorMeasurePeriod = settings.m_sensorMeasurePeriod; + } + if (settingsKeys.contains("spectrumAutoSaveCSVFilename")) { + m_spectrumAutoSaveCSVFilename = settings.m_spectrumAutoSaveCSVFilename; + } + if (settingsKeys.contains("powerAutoSaveCSVFilename")) { + m_powerAutoSaveCSVFilename = settings.m_powerAutoSaveCSVFilename; + } + if (settingsKeys.contains("rgbColor")) { + m_rgbColor = settings.m_rgbColor; + } + if (settingsKeys.contains("title")) { + m_title = settings.m_title; + } + if (settingsKeys.contains("streamIndex")) { + m_streamIndex = settings.m_streamIndex; + } + if (settingsKeys.contains("useReverseAPI")) { + m_useReverseAPI = settings.m_useReverseAPI; + } + if (settingsKeys.contains("reverseAPIAddress")) { + m_reverseAPIAddress = settings.m_reverseAPIAddress; + } + if (settingsKeys.contains("reverseAPIPort")) { + m_reverseAPIPort = settings.m_reverseAPIPort; + } + if (settingsKeys.contains("reverseAPIDeviceIndex")) { + m_reverseAPIDeviceIndex = settings.m_reverseAPIDeviceIndex; + } + if (settingsKeys.contains("reverseAPIChannelIndex")) { + m_reverseAPIChannelIndex = settings.m_reverseAPIChannelIndex; + } + if (settingsKeys.contains("workspaceIndex")) { + m_workspaceIndex = settings.m_workspaceIndex; + } + if (settingsKeys.contains("geometryBytes")) { + m_geometryBytes = settings.m_geometryBytes; + } + if (settingsKeys.contains("hidden")) { + m_hidden = settings.m_hidden; + } +} +QString RadioAstronomySettings::getDebugString(const QStringList& settingsKeys, bool force) const +{ + std::ostringstream ostr; + + if (settingsKeys.contains("inputFrequencyOffset") || force) { + ostr << " m_inputFrequencyOffset: " << m_inputFrequencyOffset; + } + if (settingsKeys.contains("sampleRate") || force) { + ostr << " m_sampleRate: " << m_sampleRate; + } + if (settingsKeys.contains("rfBandwidth") || force) { + ostr << " m_rfBandwidth: " << m_rfBandwidth; + } + if (settingsKeys.contains("integration") || force) { + ostr << " m_integration: " << m_integration; + } + if (settingsKeys.contains("fftSize") || force) { + ostr << " m_fftSize: " << m_fftSize; + } + if (settingsKeys.contains("fftWindow") || force) { + ostr << " m_fftWindow: " << m_fftWindow; + } + if (settingsKeys.contains("filterFreqs") || force) { + ostr << " m_filterFreqs: " << m_filterFreqs.toStdString(); + } + if (settingsKeys.contains("starTracker") || force) { + ostr << " m_starTracker: " << m_starTracker.toStdString(); + } + if (settingsKeys.contains("rotator") || force) { + ostr << " m_rotator: " << m_rotator.toStdString(); + } + if (settingsKeys.contains("tempRX") || force) { + ostr << " m_tempRX: " << m_tempRX; + } + if (settingsKeys.contains("tempCMB") || force) { + ostr << " m_tempCMB: " << m_tempCMB; + } + if (settingsKeys.contains("tempGal") || force) { + ostr << " m_tempGal: " << m_tempGal; + } + if (settingsKeys.contains("tempSP") || force) { + ostr << " m_tempSP: " << m_tempSP; + } + if (settingsKeys.contains("tempAtm") || force) { + ostr << " m_tempAtm: " << m_tempAtm; + } + if (settingsKeys.contains("tempAir") || force) { + ostr << " m_tempAir: " << m_tempAir; + } + if (settingsKeys.contains("zenithOpacity") || force) { + ostr << " m_zenithOpacity: " << m_zenithOpacity; + } + if (settingsKeys.contains("elevation") || force) { + ostr << " m_elevation: " << m_elevation; + } + if (settingsKeys.contains("tempGalLink") || force) { + ostr << " m_tempGalLink: " << m_tempGalLink; + } + if (settingsKeys.contains("tempAtmLink") || force) { + ostr << " m_tempAtmLink: " << m_tempAtmLink; + } + if (settingsKeys.contains("tempAirLink") || force) { + ostr << " m_tempAirLink: " << m_tempAirLink; + } + if (settingsKeys.contains("elevationLink") || force) { + ostr << " m_elevationLink: " << m_elevationLink; + } + if (settingsKeys.contains("gainVariation") || force) { + ostr << " m_gainVariation: " << m_gainVariation; + } + if (settingsKeys.contains("sourceType") || force) { + ostr << " m_sourceType: " << m_sourceType; + } + if (settingsKeys.contains("omegaS") || force) { + ostr << " m_omegaS: " << m_omegaS; + } + if (settingsKeys.contains("omegaSUnits") || force) { + ostr << " m_omegaSUnits: " << m_omegaSUnits; + } + if (settingsKeys.contains("omegaAUnits") || force) { + ostr << " m_omegaAUnits: " << m_omegaAUnits; + } + if (settingsKeys.contains("spectrumPeaks") || force) { + ostr << " m_spectrumPeaks: " << m_spectrumPeaks; + } + if (settingsKeys.contains("spectrumMarkers") || force) { + ostr << " m_spectrumMarkers: " << m_spectrumMarkers; + } + if (settingsKeys.contains("spectrumTemp") || force) { + ostr << " m_spectrumTemp: " << m_spectrumTemp; + } + if (settingsKeys.contains("spectrumReverseXAxis") || force) { + ostr << " m_spectrumReverseXAxis: " << m_spectrumReverseXAxis; + } + if (settingsKeys.contains("spectrumRefLine") || force) { + ostr << " m_spectrumRefLine: " << m_spectrumRefLine; + } + if (settingsKeys.contains("spectrumLAB") || force) { + ostr << " m_spectrumLAB: " << m_spectrumLAB; + } + if (settingsKeys.contains("spectrumDistance") || force) { + ostr << " m_spectrumDistance: " << m_spectrumDistance; + } + if (settingsKeys.contains("spectrumLegend") || force) { + ostr << " m_spectrumLegend: " << m_spectrumLegend; + } + if (settingsKeys.contains("spectrumReference") || force) { + ostr << " m_spectrumReference: " << m_spectrumReference; + } + if (settingsKeys.contains("spectrumRange") || force) { + ostr << " m_spectrumRange: " << m_spectrumRange; + } + if (settingsKeys.contains("spectrumSpan") || force) { + ostr << " m_spectrumSpan: " << m_spectrumSpan; + } + if (settingsKeys.contains("spectrumCenterFreqOffset") || force) { + ostr << " m_spectrumCenterFreqOffset: " << m_spectrumCenterFreqOffset; + } + if (settingsKeys.contains("spectrumAutoscale") || force) { + ostr << " m_spectrumAutoscale: " << m_spectrumAutoscale; + } + if (settingsKeys.contains("spectrumYScale") || force) { + ostr << " m_spectrumYScale: " << m_spectrumYScale; + } + if (settingsKeys.contains("spectrumBaseline") || force) { + ostr << " m_spectrumBaseline: " << m_spectrumBaseline; + } + if (settingsKeys.contains("recalibrate") || force) { + ostr << " m_recalibrate: " << m_recalibrate; + } + if (settingsKeys.contains("tCalHot") || force) { + ostr << " m_tCalHot: " << m_tCalHot; + } + if (settingsKeys.contains("tCalCold") || force) { + ostr << " m_tCalCold: " << m_tCalCold; + } + if (settingsKeys.contains("line") || force) { + ostr << " m_line: " << m_line; + } + if (settingsKeys.contains("lineCustomFrequency") || force) { + ostr << " m_lineCustomFrequency: " << m_lineCustomFrequency; + } + if (settingsKeys.contains("refFrame") || force) { + ostr << " m_refFrame: " << m_refFrame; + } + if (settingsKeys.contains("sunDistanceToGC") || force) { + ostr << " m_sunDistanceToGC: " << m_sunDistanceToGC; + } + if (settingsKeys.contains("sunOrbitalVelocity") || force) { + ostr << " m_sunOrbitalVelocity: " << m_sunOrbitalVelocity; + } + if (settingsKeys.contains("powerPeaks") || force) { + ostr << " m_powerPeaks: " << m_powerPeaks; + } + if (settingsKeys.contains("powerMarkers") || force) { + ostr << " m_powerMarkers: " << m_powerMarkers; + } + if (settingsKeys.contains("powerAvg") || force) { + ostr << " m_powerAvg: " << m_powerAvg; + } + if (settingsKeys.contains("powerLegend") || force) { + ostr << " m_powerLegend: " << m_powerLegend; + } + if (settingsKeys.contains("powerShowTsys0") || force) { + ostr << " m_powerShowTsys0: " << m_powerShowTsys0; + } + if (settingsKeys.contains("powerShowAirTemp") || force) { + ostr << " m_powerShowAirTemp: " << m_powerShowAirTemp; + } + if (settingsKeys.contains("powerShowGaussian") || force) { + ostr << " m_powerShowGaussian: " << m_powerShowGaussian; + } + if (settingsKeys.contains("powerShowFiltered") || force) { + ostr << " m_powerShowFiltered: " << m_powerShowFiltered; + } + if (settingsKeys.contains("powerShowMeasurement") || force) { + ostr << " m_powerShowMeasurement: " << m_powerShowMeasurement; + } + if (settingsKeys.contains("powerReference") || force) { + ostr << " m_powerReference: " << m_powerReference; + } + if (settingsKeys.contains("powerRange") || force) { + ostr << " m_powerRange: " << m_powerRange; + } + if (settingsKeys.contains("powerAutoscale") || force) { + ostr << " m_powerAutoscale: " << m_powerAutoscale; + } + if (settingsKeys.contains("powerYData") || force) { + ostr << " m_powerYData: " << m_powerYData; + } + if (settingsKeys.contains("powerYUnits") || force) { + ostr << " m_powerYUnits: " << m_powerYUnits; + } + if (settingsKeys.contains("powerFilter") || force) { + ostr << " m_powerFilter: " << m_powerFilter; + } + if (settingsKeys.contains("powerFilterN") || force) { + ostr << " m_powerFilterN: " << m_powerFilterN; + } + if (settingsKeys.contains("power2DLinkSweep") || force) { + ostr << " m_power2DLinkSweep: " << m_power2DLinkSweep; + } + if (settingsKeys.contains("power2DSweepType") || force) { + ostr << " m_power2DSweepType: " << m_power2DSweepType; + } + if (settingsKeys.contains("power2DWidth") || force) { + ostr << " m_power2DWidth: " << m_power2DWidth; + } + if (settingsKeys.contains("power2DHeight") || force) { + ostr << " m_power2DHeight: " << m_power2DHeight; + } + if (settingsKeys.contains("power2DXMin") || force) { + ostr << " m_power2DXMin: " << m_power2DXMin; + } + if (settingsKeys.contains("power2DXMax") || force) { + ostr << " m_power2DXMax: " << m_power2DXMax; + } + if (settingsKeys.contains("power2DYMin") || force) { + ostr << " m_power2DYMin: " << m_power2DYMin; + } + if (settingsKeys.contains("power2DYMax") || force) { + ostr << " m_power2DYMax: " << m_power2DYMax; + } + if (settingsKeys.contains("powerColourAutoscale") || force) { + ostr << " m_powerColourAutoscale: " << m_powerColourAutoscale; + } + if (settingsKeys.contains("powerColourScaleMin") || force) { + ostr << " m_powerColourScaleMin: " << m_powerColourScaleMin; + } + if (settingsKeys.contains("powerColourScaleMax") || force) { + ostr << " m_powerColourScaleMax: " << m_powerColourScaleMax; + } + if (settingsKeys.contains("powerColourPalette") || force) { + ostr << " m_powerColourPalette: " << m_powerColourPalette.toStdString(); + } + if (settingsKeys.contains("runMode") || force) { + ostr << " m_runMode: " << m_runMode; + } + if (settingsKeys.contains("sweepStartAtTime") || force) { + ostr << " m_sweepStartAtTime: " << m_sweepStartAtTime; + } + if (settingsKeys.contains("sweepStartDateTime") || force) { + ostr << " m_sweepStartDateTime: " << m_sweepStartDateTime.toString().toStdString(); + } + if (settingsKeys.contains("sweepType") || force) { + ostr << " m_sweepType: " << m_sweepType; + } + if (settingsKeys.contains("sweep1Start") || force) { + ostr << " m_sweep1Start: " << m_sweep1Start; + } + if (settingsKeys.contains("sweep1Stop") || force) { + ostr << " m_sweep1Stop: " << m_sweep1Stop; + } + if (settingsKeys.contains("sweep1Step") || force) { + ostr << " m_sweep1Step: " << m_sweep1Step; + } + if (settingsKeys.contains("sweep1Delay") || force) { + ostr << " m_sweep1Delay: " << m_sweep1Delay; + } + if (settingsKeys.contains("sweep2Start") || force) { + ostr << " m_sweep2Start: " << m_sweep2Start; + } + if (settingsKeys.contains("sweep2Stop") || force) { + ostr << " m_sweep2Stop: " << m_sweep2Stop; + } + if (settingsKeys.contains("sweep2Step") || force) { + ostr << " m_sweep2Step: " << m_sweep2Step; + } + if (settingsKeys.contains("sweep2Delay") || force) { + ostr << " m_sweep2Delay: " << m_sweep2Delay; + } + if (settingsKeys.contains("gpioEnabled") || force) { + ostr << " m_gpioEnabled: " << m_gpioEnabled; + } + if (settingsKeys.contains("gpioPin") || force) { + ostr << " m_gpioPin: " << m_gpioPin; + } + if (settingsKeys.contains("gpioSense") || force) { + ostr << " m_gpioSense: " << m_gpioSense; + } + if (settingsKeys.contains("startCalCommand") || force) { + ostr << " m_startCalCommand: " << m_startCalCommand.toStdString(); + } + if (settingsKeys.contains("stopCalCommand") || force) { + ostr << " m_stopCalCommand: " << m_stopCalCommand.toStdString(); + } + if (settingsKeys.contains("calCommandDelay") || force) { + ostr << " m_calCommandDelay: " << m_calCommandDelay; + } + if (settingsKeys.contains("sensorMeasurePeriod") || force) { + ostr << " m_sensorMeasurePeriod: " << m_sensorMeasurePeriod; + } + if (settingsKeys.contains("spectrumAutoSaveCSVFilename") || force) { + ostr << " m_spectrumAutoSaveCSVFilename: " << m_spectrumAutoSaveCSVFilename.toStdString(); + } + if (settingsKeys.contains("powerAutoSaveCSVFilename") || force) { + ostr << " m_powerAutoSaveCSVFilename: " << m_powerAutoSaveCSVFilename.toStdString(); + } + if (settingsKeys.contains("rgbColor") || force) { + ostr << " m_rgbColor: " << m_rgbColor; + } + if (settingsKeys.contains("title") || force) { + ostr << " m_title: " << m_title.toStdString(); + } + if (settingsKeys.contains("streamIndex") || force) { + ostr << " m_streamIndex: " << m_streamIndex; + } + if (settingsKeys.contains("useReverseAPI") || force) { + ostr << " m_useReverseAPI: " << m_useReverseAPI; + } + if (settingsKeys.contains("reverseAPIAddress") || force) { + ostr << " m_reverseAPIAddress: " << m_reverseAPIAddress.toStdString(); + } + if (settingsKeys.contains("reverseAPIPort") || force) { + ostr << " m_reverseAPIPort: " << m_reverseAPIPort; + } + if (settingsKeys.contains("reverseAPIDeviceIndex") || force) { + ostr << " m_reverseAPIDeviceIndex: " << m_reverseAPIDeviceIndex; + } + if (settingsKeys.contains("reverseAPIChannelIndex") || force) { + ostr << " m_reverseAPIChannelIndex: " << m_reverseAPIChannelIndex; + } + if (settingsKeys.contains("workspaceIndex") || force) { + ostr << " m_workspaceIndex: " << m_workspaceIndex; + } + if (settingsKeys.contains("hidden") || force) { + ostr << " m_hidden: " << m_hidden; + } + + return QString(ostr.str().c_str()); +} diff --git a/plugins/channelrx/radioastronomy/radioastronomysettings.h b/plugins/channelrx/radioastronomy/radioastronomysettings.h index a85587de0..eacd13cac 100644 --- a/plugins/channelrx/radioastronomy/radioastronomysettings.h +++ b/plugins/channelrx/radioastronomy/radioastronomysettings.h @@ -231,6 +231,8 @@ struct RadioAstronomySettings void setRollupState(Serializable *rollupState) { m_rollupState = rollupState; } QByteArray serialize() const; bool deserialize(const QByteArray& data); + void applySettings(const QStringList& settingsKeys, const RadioAstronomySettings& settings); + QString getDebugString(const QStringList& settingsKeys, bool force=false) const; }; #endif /* INCLUDE_RADIOASTRONOMYSETTINGS_H */ diff --git a/plugins/channelrx/radioclock/radioclocksettings.cpp b/plugins/channelrx/radioclock/radioclocksettings.cpp index 1b0a3485a..1c2cf0eef 100644 --- a/plugins/channelrx/radioclock/radioclocksettings.cpp +++ b/plugins/channelrx/radioclock/radioclocksettings.cpp @@ -166,4 +166,119 @@ bool RadioClockSettings::deserialize(const QByteArray& data) } } +void RadioClockSettings::applySettings(const QStringList& settingsKeys, const RadioClockSettings& settings) +{ + if (settingsKeys.contains("frequencyMode")) { + m_frequencyMode = settings.m_frequencyMode; + } + if (settingsKeys.contains("inputFrequencyOffset")) { + m_inputFrequencyOffset = settings.m_inputFrequencyOffset; + } + if (settingsKeys.contains("frequency")) { + m_frequency = settings.m_frequency; + } + if (settingsKeys.contains("rfBandwidth")) { + m_rfBandwidth = settings.m_rfBandwidth; + } + if (settingsKeys.contains("threshold")) { + m_threshold = settings.m_threshold; + } + if (settingsKeys.contains("modulation")) { + m_modulation = settings.m_modulation; + } + if (settingsKeys.contains("timezone")) { + m_timezone = settings.m_timezone; + } + if (settingsKeys.contains("rgbColor")) { + m_rgbColor = settings.m_rgbColor; + } + if (settingsKeys.contains("title")) { + m_title = settings.m_title; + } + if (settingsKeys.contains("streamIndex")) { + m_streamIndex = settings.m_streamIndex; + } + if (settingsKeys.contains("useReverseAPI")) { + m_useReverseAPI = settings.m_useReverseAPI; + } + if (settingsKeys.contains("reverseAPIAddress")) { + m_reverseAPIAddress = settings.m_reverseAPIAddress; + } + if (settingsKeys.contains("reverseAPIPort")) { + m_reverseAPIPort = settings.m_reverseAPIPort; + } + if (settingsKeys.contains("reverseAPIDeviceIndex")) { + m_reverseAPIDeviceIndex = settings.m_reverseAPIDeviceIndex; + } + if (settingsKeys.contains("reverseAPIChannelIndex")) { + m_reverseAPIChannelIndex = settings.m_reverseAPIChannelIndex; + } + if (settingsKeys.contains("workspaceIndex")) { + m_workspaceIndex = settings.m_workspaceIndex; + } + if (settingsKeys.contains("geometryBytes")) { + m_geometryBytes = settings.m_geometryBytes; + } + if (settingsKeys.contains("hidden")) { + m_hidden = settings.m_hidden; + } +} +QString RadioClockSettings::getDebugString(const QStringList& settingsKeys, bool force) const +{ + std::ostringstream ostr; + + if (settingsKeys.contains("frequencyMode") || force) { + ostr << " m_frequencyMode: " << m_frequencyMode; + } + if (settingsKeys.contains("inputFrequencyOffset") || force) { + ostr << " m_inputFrequencyOffset: " << m_inputFrequencyOffset; + } + if (settingsKeys.contains("frequency") || force) { + ostr << " m_frequency: " << m_frequency; + } + if (settingsKeys.contains("rfBandwidth") || force) { + ostr << " m_rfBandwidth: " << m_rfBandwidth; + } + if (settingsKeys.contains("threshold") || force) { + ostr << " m_threshold: " << m_threshold; + } + if (settingsKeys.contains("modulation") || force) { + ostr << " m_modulation: " << m_modulation; + } + if (settingsKeys.contains("timezone") || force) { + ostr << " m_timezone: " << m_timezone; + } + if (settingsKeys.contains("rgbColor") || force) { + ostr << " m_rgbColor: " << m_rgbColor; + } + if (settingsKeys.contains("title") || force) { + ostr << " m_title: " << m_title.toStdString(); + } + if (settingsKeys.contains("streamIndex") || force) { + ostr << " m_streamIndex: " << m_streamIndex; + } + if (settingsKeys.contains("useReverseAPI") || force) { + ostr << " m_useReverseAPI: " << m_useReverseAPI; + } + if (settingsKeys.contains("reverseAPIAddress") || force) { + ostr << " m_reverseAPIAddress: " << m_reverseAPIAddress.toStdString(); + } + if (settingsKeys.contains("reverseAPIPort") || force) { + ostr << " m_reverseAPIPort: " << m_reverseAPIPort; + } + if (settingsKeys.contains("reverseAPIDeviceIndex") || force) { + ostr << " m_reverseAPIDeviceIndex: " << m_reverseAPIDeviceIndex; + } + if (settingsKeys.contains("reverseAPIChannelIndex") || force) { + ostr << " m_reverseAPIChannelIndex: " << m_reverseAPIChannelIndex; + } + if (settingsKeys.contains("workspaceIndex") || force) { + ostr << " m_workspaceIndex: " << m_workspaceIndex; + } + if (settingsKeys.contains("hidden") || force) { + ostr << " m_hidden: " << m_hidden; + } + + return QString(ostr.str().c_str()); +} diff --git a/plugins/channelrx/radioclock/radioclocksettings.h b/plugins/channelrx/radioclock/radioclocksettings.h index aa944aa53..95b9c03f9 100644 --- a/plugins/channelrx/radioclock/radioclocksettings.h +++ b/plugins/channelrx/radioclock/radioclocksettings.h @@ -76,6 +76,8 @@ struct RadioClockSettings void setScopeGUI(Serializable *scopeGUI) { m_scopeGUI = scopeGUI; } QByteArray serialize() const; bool deserialize(const QByteArray& data); + void applySettings(const QStringList& settingsKeys, const RadioClockSettings& settings); + QString getDebugString(const QStringList& settingsKeys, bool force=false) const; enum DST { UNKNOWN, diff --git a/plugins/channelrx/remotesink/remotesinksettings.cpp b/plugins/channelrx/remotesink/remotesinksettings.cpp index c874fa691..df79c103a 100644 --- a/plugins/channelrx/remotesink/remotesinksettings.cpp +++ b/plugins/channelrx/remotesink/remotesinksettings.cpp @@ -175,7 +175,119 @@ bool RemoteSinkSettings::deserialize(const QByteArray& data) } } +void RemoteSinkSettings::applySettings(const QStringList& settingsKeys, const RemoteSinkSettings& settings) +{ + if (settingsKeys.contains("nbFECBlocks")) { + m_nbFECBlocks = settings.m_nbFECBlocks; + } + if (settingsKeys.contains("nbTxBytes")) { + m_nbTxBytes = settings.m_nbTxBytes; + } + if (settingsKeys.contains("deviceCenterFrequency")) { + m_deviceCenterFrequency = settings.m_deviceCenterFrequency; + } + if (settingsKeys.contains("dataAddress")) { + m_dataAddress = settings.m_dataAddress; + } + if (settingsKeys.contains("dataPort")) { + m_dataPort = settings.m_dataPort; + } + if (settingsKeys.contains("rgbColor")) { + m_rgbColor = settings.m_rgbColor; + } + if (settingsKeys.contains("title")) { + m_title = settings.m_title; + } + if (settingsKeys.contains("log2Decim")) { + m_log2Decim = settings.m_log2Decim; + } + if (settingsKeys.contains("filterChainHash")) { + m_filterChainHash = settings.m_filterChainHash; + } + if (settingsKeys.contains("streamIndex")) { + m_streamIndex = settings.m_streamIndex; + } + if (settingsKeys.contains("useReverseAPI")) { + m_useReverseAPI = settings.m_useReverseAPI; + } + if (settingsKeys.contains("reverseAPIAddress")) { + m_reverseAPIAddress = settings.m_reverseAPIAddress; + } + if (settingsKeys.contains("reverseAPIPort")) { + m_reverseAPIPort = settings.m_reverseAPIPort; + } + if (settingsKeys.contains("reverseAPIDeviceIndex")) { + m_reverseAPIDeviceIndex = settings.m_reverseAPIDeviceIndex; + } + if (settingsKeys.contains("reverseAPIChannelIndex")) { + m_reverseAPIChannelIndex = settings.m_reverseAPIChannelIndex; + } + if (settingsKeys.contains("workspaceIndex")) { + m_workspaceIndex = settings.m_workspaceIndex; + } + if (settingsKeys.contains("geometryBytes")) { + m_geometryBytes = settings.m_geometryBytes; + } + if (settingsKeys.contains("hidden")) { + m_hidden = settings.m_hidden; + } +} +QString RemoteSinkSettings::getDebugString(const QStringList& settingsKeys, bool force) const +{ + std::ostringstream ostr; + if (settingsKeys.contains("nbFECBlocks") || force) { + ostr << " m_nbFECBlocks: " << m_nbFECBlocks; + } + if (settingsKeys.contains("nbTxBytes") || force) { + ostr << " m_nbTxBytes: " << m_nbTxBytes; + } + if (settingsKeys.contains("deviceCenterFrequency") || force) { + ostr << " m_deviceCenterFrequency: " << m_deviceCenterFrequency; + } + if (settingsKeys.contains("dataAddress") || force) { + ostr << " m_dataAddress: " << m_dataAddress.toStdString(); + } + if (settingsKeys.contains("dataPort") || force) { + ostr << " m_dataPort: " << m_dataPort; + } + if (settingsKeys.contains("rgbColor") || force) { + ostr << " m_rgbColor: " << m_rgbColor; + } + if (settingsKeys.contains("title") || force) { + ostr << " m_title: " << m_title.toStdString(); + } + if (settingsKeys.contains("log2Decim") || force) { + ostr << " m_log2Decim: " << m_log2Decim; + } + if (settingsKeys.contains("filterChainHash") || force) { + ostr << " m_filterChainHash: " << m_filterChainHash; + } + if (settingsKeys.contains("streamIndex") || force) { + ostr << " m_streamIndex: " << m_streamIndex; + } + if (settingsKeys.contains("useReverseAPI") || force) { + ostr << " m_useReverseAPI: " << m_useReverseAPI; + } + if (settingsKeys.contains("reverseAPIAddress") || force) { + ostr << " m_reverseAPIAddress: " << m_reverseAPIAddress.toStdString(); + } + if (settingsKeys.contains("reverseAPIPort") || force) { + ostr << " m_reverseAPIPort: " << m_reverseAPIPort; + } + if (settingsKeys.contains("reverseAPIDeviceIndex") || force) { + ostr << " m_reverseAPIDeviceIndex: " << m_reverseAPIDeviceIndex; + } + if (settingsKeys.contains("reverseAPIChannelIndex") || force) { + ostr << " m_reverseAPIChannelIndex: " << m_reverseAPIChannelIndex; + } + if (settingsKeys.contains("workspaceIndex") || force) { + ostr << " m_workspaceIndex: " << m_workspaceIndex; + } + if (settingsKeys.contains("hidden") || force) { + ostr << " m_hidden: " << m_hidden; + } - + return QString(ostr.str().c_str()); +} diff --git a/plugins/channelrx/remotesink/remotesinksettings.h b/plugins/channelrx/remotesink/remotesinksettings.h index aaf694fbf..30b2ad72c 100644 --- a/plugins/channelrx/remotesink/remotesinksettings.h +++ b/plugins/channelrx/remotesink/remotesinksettings.h @@ -63,6 +63,8 @@ struct RemoteSinkSettings void setRollupState(Serializable *rollupState) { m_rollupState = rollupState; } QByteArray serialize() const; bool deserialize(const QByteArray& data); + void applySettings(const QStringList& settingsKeys, const RemoteSinkSettings& settings); + QString getDebugString(const QStringList& settingsKeys, bool force=false) const; }; #endif /* INCLUDE_REMOTECHANNELSINKSETTINGS_H_ */ diff --git a/plugins/channelrx/sigmffilesink/sigmffilesinksettings.cpp b/plugins/channelrx/sigmffilesink/sigmffilesinksettings.cpp index 653c6c8bd..0b2cc9746 100644 --- a/plugins/channelrx/sigmffilesink/sigmffilesinksettings.cpp +++ b/plugins/channelrx/sigmffilesink/sigmffilesinksettings.cpp @@ -207,4 +207,137 @@ int SigMFFileSinkSettings::getOffsetFromFixedShiftIndex(int sampleRate, int log2 return ((shiftIndex - mid) * sampleRate) / (2*decim); } +void SigMFFileSinkSettings::applySettings(const QStringList& settingsKeys, const SigMFFileSinkSettings& settings) +{ + if (settingsKeys.contains("ncoMode")) { + m_ncoMode = settings.m_ncoMode; + } + if (settingsKeys.contains("inputFrequencyOffset")) { + m_inputFrequencyOffset = settings.m_inputFrequencyOffset; + } + if (settingsKeys.contains("fileRecordName")) { + m_fileRecordName = settings.m_fileRecordName; + } + if (settingsKeys.contains("rgbColor")) { + m_rgbColor = settings.m_rgbColor; + } + if (settingsKeys.contains("title")) { + m_title = settings.m_title; + } + if (settingsKeys.contains("log2Decim")) { + m_log2Decim = settings.m_log2Decim; + } + if (settingsKeys.contains("spectrumSquelchMode")) { + m_spectrumSquelchMode = settings.m_spectrumSquelchMode; + } + if (settingsKeys.contains("spectrumSquelch")) { + m_spectrumSquelch = settings.m_spectrumSquelch; + } + if (settingsKeys.contains("preRecordTime")) { + m_preRecordTime = settings.m_preRecordTime; + } + if (settingsKeys.contains("squelchPostRecordTime")) { + m_squelchPostRecordTime = settings.m_squelchPostRecordTime; + } + if (settingsKeys.contains("squelchRecordingEnable")) { + m_squelchRecordingEnable = settings.m_squelchRecordingEnable; + } + if (settingsKeys.contains("log2RecordSampleSize")) { + m_log2RecordSampleSize = settings.m_log2RecordSampleSize; + } + if (settingsKeys.contains("streamIndex")) { + m_streamIndex = settings.m_streamIndex; + } + if (settingsKeys.contains("useReverseAPI")) { + m_useReverseAPI = settings.m_useReverseAPI; + } + if (settingsKeys.contains("reverseAPIAddress")) { + m_reverseAPIAddress = settings.m_reverseAPIAddress; + } + if (settingsKeys.contains("reverseAPIPort")) { + m_reverseAPIPort = settings.m_reverseAPIPort; + } + if (settingsKeys.contains("reverseAPIDeviceIndex")) { + m_reverseAPIDeviceIndex = settings.m_reverseAPIDeviceIndex; + } + if (settingsKeys.contains("reverseAPIChannelIndex")) { + m_reverseAPIChannelIndex = settings.m_reverseAPIChannelIndex; + } + if (settingsKeys.contains("workspaceIndex")) { + m_workspaceIndex = settings.m_workspaceIndex; + } + if (settingsKeys.contains("geometryBytes")) { + m_geometryBytes = settings.m_geometryBytes; + } + if (settingsKeys.contains("hidden")) { + m_hidden = settings.m_hidden; + } +} +QString SigMFFileSinkSettings::getDebugString(const QStringList& settingsKeys, bool force) const +{ + std::ostringstream ostr; + + if (settingsKeys.contains("ncoMode") || force) { + ostr << " m_ncoMode: " << m_ncoMode; + } + if (settingsKeys.contains("inputFrequencyOffset") || force) { + ostr << " m_inputFrequencyOffset: " << m_inputFrequencyOffset; + } + if (settingsKeys.contains("fileRecordName") || force) { + ostr << " m_fileRecordName: " << m_fileRecordName.toStdString(); + } + if (settingsKeys.contains("rgbColor") || force) { + ostr << " m_rgbColor: " << m_rgbColor; + } + if (settingsKeys.contains("title") || force) { + ostr << " m_title: " << m_title.toStdString(); + } + if (settingsKeys.contains("log2Decim") || force) { + ostr << " m_log2Decim: " << m_log2Decim; + } + if (settingsKeys.contains("spectrumSquelchMode") || force) { + ostr << " m_spectrumSquelchMode: " << m_spectrumSquelchMode; + } + if (settingsKeys.contains("spectrumSquelch") || force) { + ostr << " m_spectrumSquelch: " << m_spectrumSquelch; + } + if (settingsKeys.contains("preRecordTime") || force) { + ostr << " m_preRecordTime: " << m_preRecordTime; + } + if (settingsKeys.contains("squelchPostRecordTime") || force) { + ostr << " m_squelchPostRecordTime: " << m_squelchPostRecordTime; + } + if (settingsKeys.contains("squelchRecordingEnable") || force) { + ostr << " m_squelchRecordingEnable: " << m_squelchRecordingEnable; + } + if (settingsKeys.contains("log2RecordSampleSize") || force) { + ostr << " m_log2RecordSampleSize: " << m_log2RecordSampleSize; + } + if (settingsKeys.contains("streamIndex") || force) { + ostr << " m_streamIndex: " << m_streamIndex; + } + if (settingsKeys.contains("useReverseAPI") || force) { + ostr << " m_useReverseAPI: " << m_useReverseAPI; + } + if (settingsKeys.contains("reverseAPIAddress") || force) { + ostr << " m_reverseAPIAddress: " << m_reverseAPIAddress.toStdString(); + } + if (settingsKeys.contains("reverseAPIPort") || force) { + ostr << " m_reverseAPIPort: " << m_reverseAPIPort; + } + if (settingsKeys.contains("reverseAPIDeviceIndex") || force) { + ostr << " m_reverseAPIDeviceIndex: " << m_reverseAPIDeviceIndex; + } + if (settingsKeys.contains("reverseAPIChannelIndex") || force) { + ostr << " m_reverseAPIChannelIndex: " << m_reverseAPIChannelIndex; + } + if (settingsKeys.contains("workspaceIndex") || force) { + ostr << " m_workspaceIndex: " << m_workspaceIndex; + } + if (settingsKeys.contains("hidden") || force) { + ostr << " m_hidden: " << m_hidden; + } + + return QString(ostr.str().c_str()); +} diff --git a/plugins/channelrx/sigmffilesink/sigmffilesinksettings.h b/plugins/channelrx/sigmffilesink/sigmffilesinksettings.h index 3ce6fce24..c6100b472 100644 --- a/plugins/channelrx/sigmffilesink/sigmffilesinksettings.h +++ b/plugins/channelrx/sigmffilesink/sigmffilesinksettings.h @@ -61,6 +61,8 @@ struct SigMFFileSinkSettings void setRollupState(Serializable *rollupState) { m_rollupState = rollupState; } QByteArray serialize() const; bool deserialize(const QByteArray& data); + void applySettings(const QStringList& settingsKeys, const SigMFFileSinkSettings& settings); + QString getDebugString(const QStringList& settingsKeys, bool force=false) const; static unsigned int getNbFixedShiftIndexes(int log2Decim); static int getHalfBand(int sampleRate, int log2Decim); diff --git a/plugins/channelrx/udpsink/udpsinksettings.cpp b/plugins/channelrx/udpsink/udpsinksettings.cpp index 66dc833db..1adf2cae3 100644 --- a/plugins/channelrx/udpsink/udpsinksettings.cpp +++ b/plugins/channelrx/udpsink/udpsinksettings.cpp @@ -216,3 +216,179 @@ bool UDPSinkSettings::deserialize(const QByteArray& data) } } +void UDPSinkSettings::applySettings(const QStringList& settingsKeys, const UDPSinkSettings& settings) +{ + if (settingsKeys.contains("outputSampleRate")) { + m_outputSampleRate = settings.m_outputSampleRate; + } + if (settingsKeys.contains("sampleFormat")) { + m_sampleFormat = settings.m_sampleFormat; + } + if (settingsKeys.contains("inputFrequencyOffset")) { + m_inputFrequencyOffset = settings.m_inputFrequencyOffset; + } + if (settingsKeys.contains("rfBandwidth")) { + m_rfBandwidth = settings.m_rfBandwidth; + } + if (settingsKeys.contains("fmDeviation")) { + m_fmDeviation = settings.m_fmDeviation; + } + if (settingsKeys.contains("channelMute")) { + m_channelMute = settings.m_channelMute; + } + if (settingsKeys.contains("gain")) { + m_gain = settings.m_gain; + } + if (settingsKeys.contains("squelchdB")) { + m_squelchdB = settings.m_squelchdB; + } + if (settingsKeys.contains("squelchGate")) { + m_squelchGate = settings.m_squelchGate; + } + if (settingsKeys.contains("squelchEnabled")) { + m_squelchEnabled = settings.m_squelchEnabled; + } + if (settingsKeys.contains("agc")) { + m_agc = settings.m_agc; + } + if (settingsKeys.contains("audioActive")) { + m_audioActive = settings.m_audioActive; + } + if (settingsKeys.contains("audioStereo")) { + m_audioStereo = settings.m_audioStereo; + } + if (settingsKeys.contains("volume")) { + m_volume = settings.m_volume; + } + if (settingsKeys.contains("rgbColor")) { + m_rgbColor = settings.m_rgbColor; + } + if (settingsKeys.contains("udpAddress")) { + m_udpAddress = settings.m_udpAddress; + } + if (settingsKeys.contains("udpPort")) { + m_udpPort = settings.m_udpPort; + } + if (settingsKeys.contains("audioPort")) { + m_audioPort = settings.m_audioPort; + } + if (settingsKeys.contains("title")) { + m_title = settings.m_title; + } + if (settingsKeys.contains("streamIndex")) { + m_streamIndex = settings.m_streamIndex; + } + if (settingsKeys.contains("useReverseAPI")) { + m_useReverseAPI = settings.m_useReverseAPI; + } + if (settingsKeys.contains("reverseAPIAddress")) { + m_reverseAPIAddress = settings.m_reverseAPIAddress; + } + if (settingsKeys.contains("reverseAPIPort")) { + m_reverseAPIPort = settings.m_reverseAPIPort; + } + if (settingsKeys.contains("reverseAPIDeviceIndex")) { + m_reverseAPIDeviceIndex = settings.m_reverseAPIDeviceIndex; + } + if (settingsKeys.contains("reverseAPIChannelIndex")) { + m_reverseAPIChannelIndex = settings.m_reverseAPIChannelIndex; + } + if (settingsKeys.contains("workspaceIndex")) { + m_workspaceIndex = settings.m_workspaceIndex; + } + if (settingsKeys.contains("geometryBytes")) { + m_geometryBytes = settings.m_geometryBytes; + } + if (settingsKeys.contains("hidden")) { + m_hidden = settings.m_hidden; + } +} + +QString UDPSinkSettings::getDebugString(const QStringList& settingsKeys, bool force) const +{ + std::ostringstream ostr; + + if (settingsKeys.contains("outputSampleRate") || force) { + ostr << " m_outputSampleRate: " << m_outputSampleRate; + } + if (settingsKeys.contains("sampleFormat") || force) { + ostr << " m_sampleFormat: " << m_sampleFormat; + } + if (settingsKeys.contains("inputFrequencyOffset") || force) { + ostr << " m_inputFrequencyOffset: " << m_inputFrequencyOffset; + } + if (settingsKeys.contains("rfBandwidth") || force) { + ostr << " m_rfBandwidth: " << m_rfBandwidth; + } + if (settingsKeys.contains("fmDeviation") || force) { + ostr << " m_fmDeviation: " << m_fmDeviation; + } + if (settingsKeys.contains("channelMute") || force) { + ostr << " m_channelMute: " << m_channelMute; + } + if (settingsKeys.contains("gain") || force) { + ostr << " m_gain: " << m_gain; + } + if (settingsKeys.contains("squelchdB") || force) { + ostr << " m_squelchdB: " << m_squelchdB; + } + if (settingsKeys.contains("squelchGate") || force) { + ostr << " m_squelchGate: " << m_squelchGate; + } + if (settingsKeys.contains("squelchEnabled") || force) { + ostr << " m_squelchEnabled: " << m_squelchEnabled; + } + if (settingsKeys.contains("agc") || force) { + ostr << " m_agc: " << m_agc; + } + if (settingsKeys.contains("audioActive") || force) { + ostr << " m_audioActive: " << m_audioActive; + } + if (settingsKeys.contains("audioStereo") || force) { + ostr << " m_audioStereo: " << m_audioStereo; + } + if (settingsKeys.contains("volume") || force) { + ostr << " m_volume: " << m_volume; + } + if (settingsKeys.contains("rgbColor") || force) { + ostr << " m_rgbColor: " << m_rgbColor; + } + if (settingsKeys.contains("udpAddress") || force) { + ostr << " m_udpAddress: " << m_udpAddress.toStdString(); + } + if (settingsKeys.contains("udpPort") || force) { + ostr << " m_udpPort: " << m_udpPort; + } + if (settingsKeys.contains("audioPort") || force) { + ostr << " m_audioPort: " << m_audioPort; + } + if (settingsKeys.contains("title") || force) { + ostr << " m_title: " << m_title.toStdString(); + } + if (settingsKeys.contains("streamIndex") || force) { + ostr << " m_streamIndex: " << m_streamIndex; + } + if (settingsKeys.contains("useReverseAPI") || force) { + ostr << " m_useReverseAPI: " << m_useReverseAPI; + } + if (settingsKeys.contains("reverseAPIAddress") || force) { + ostr << " m_reverseAPIAddress: " << m_reverseAPIAddress.toStdString(); + } + if (settingsKeys.contains("reverseAPIPort") || force) { + ostr << " m_reverseAPIPort: " << m_reverseAPIPort; + } + if (settingsKeys.contains("reverseAPIDeviceIndex") || force) { + ostr << " m_reverseAPIDeviceIndex: " << m_reverseAPIDeviceIndex; + } + if (settingsKeys.contains("reverseAPIChannelIndex") || force) { + ostr << " m_reverseAPIChannelIndex: " << m_reverseAPIChannelIndex; + } + if (settingsKeys.contains("workspaceIndex") || force) { + ostr << " m_workspaceIndex: " << m_workspaceIndex; + } + if (settingsKeys.contains("hidden") || force) { + ostr << " m_hidden: " << m_hidden; + } + + return QString(ostr.str().c_str()); +} diff --git a/plugins/channelrx/udpsink/udpsinksettings.h b/plugins/channelrx/udpsink/udpsinksettings.h index 367576c5c..2e96b3db8 100644 --- a/plugins/channelrx/udpsink/udpsinksettings.h +++ b/plugins/channelrx/udpsink/udpsinksettings.h @@ -87,6 +87,8 @@ struct UDPSinkSettings void setSpectrumGUI(Serializable *spectrumGUI) { m_spectrumGUI = spectrumGUI; } QByteArray serialize() const; bool deserialize(const QByteArray& data); + void applySettings(const QStringList& settingsKeys, const UDPSinkSettings& settings); + QString getDebugString(const QStringList& settingsKeys, bool force=false) const; }; diff --git a/plugins/channelrx/wdsprx/wdsprxsettings.cpp b/plugins/channelrx/wdsprx/wdsprxsettings.cpp index 32dbf3dcb..b69622198 100644 --- a/plugins/channelrx/wdsprx/wdsprxsettings.cpp +++ b/plugins/channelrx/wdsprx/wdsprxsettings.cpp @@ -562,3 +562,396 @@ bool WDSPRxSettings::deserialize(const QByteArray& data) return false; } } + +void WDSPRxSettings::applySettings(const QStringList& settingsKeys, const WDSPRxSettings& settings) +{ + if (settingsKeys.contains("demod")) { + m_demod = settings.m_demod; + } + if (settingsKeys.contains("inputFrequencyOffset")) { + m_inputFrequencyOffset = settings.m_inputFrequencyOffset; + } + if (settingsKeys.contains("volume")) { + m_volume = settings.m_volume; + } + if (settingsKeys.contains("audioBinaural")) { + m_audioBinaural = settings.m_audioBinaural; + } + if (settingsKeys.contains("audioFlipChannels")) { + m_audioFlipChannels = settings.m_audioFlipChannels; + } + if (settingsKeys.contains("audioPan")) { + m_audioPan = settings.m_audioPan; + } + if (settingsKeys.contains("dsb")) { + m_dsb = settings.m_dsb; + } + if (settingsKeys.contains("audioMute")) { + m_audioMute = settings.m_audioMute; + } + if (settingsKeys.contains("dbOrS")) { + m_dbOrS = settings.m_dbOrS; + } + if (settingsKeys.contains("agc")) { + m_agc = settings.m_agc; + } + if (settingsKeys.contains("agcMode")) { + m_agcMode = settings.m_agcMode; + } + if (settingsKeys.contains("agcGain")) { + m_agcGain = settings.m_agcGain; + } + if (settingsKeys.contains("agcSlope")) { + m_agcSlope = settings.m_agcSlope; + } + if (settingsKeys.contains("agcHangThreshold")) { + m_agcHangThreshold = settings.m_agcHangThreshold; + } + if (settingsKeys.contains("dnb")) { + m_dnb = settings.m_dnb; + } + if (settingsKeys.contains("nbScheme")) { + m_nbScheme = settings.m_nbScheme; + } + if (settingsKeys.contains("nb2Mode")) { + m_nb2Mode = settings.m_nb2Mode; + } + if (settingsKeys.contains("nbSlewTime")) { + m_nbSlewTime = settings.m_nbSlewTime; + } + if (settingsKeys.contains("nbLeadTime")) { + m_nbLeadTime = settings.m_nbLeadTime; + } + if (settingsKeys.contains("nbLagTime")) { + m_nbLagTime = settings.m_nbLagTime; + } + if (settingsKeys.contains("nbThreshold")) { + m_nbThreshold = settings.m_nbThreshold; + } + if (settingsKeys.contains("nbAvgTime")) { + m_nbAvgTime = settings.m_nbAvgTime; + } + if (settingsKeys.contains("dnr")) { + m_dnr = settings.m_dnr; + } + if (settingsKeys.contains("snb")) { + m_snb = settings.m_snb; + } + if (settingsKeys.contains("anf")) { + m_anf = settings.m_anf; + } + if (settingsKeys.contains("nrScheme")) { + m_nrScheme = settings.m_nrScheme; + } + if (settingsKeys.contains("nr2Gain")) { + m_nr2Gain = settings.m_nr2Gain; + } + if (settingsKeys.contains("nr2NPE")) { + m_nr2NPE = settings.m_nr2NPE; + } + if (settingsKeys.contains("nrPosition")) { + m_nrPosition = settings.m_nrPosition; + } + if (settingsKeys.contains("nr2ArtifactReduction")) { + m_nr2ArtifactReduction = settings.m_nr2ArtifactReduction; + } + if (settingsKeys.contains("amFadeLevel")) { + m_amFadeLevel = settings.m_amFadeLevel; + } + if (settingsKeys.contains("cwPeaking")) { + m_cwPeaking = settings.m_cwPeaking; + } + if (settingsKeys.contains("cwPeakFrequency")) { + m_cwPeakFrequency = settings.m_cwPeakFrequency; + } + if (settingsKeys.contains("cwBandwidth")) { + m_cwBandwidth = settings.m_cwBandwidth; + } + if (settingsKeys.contains("cwGain")) { + m_cwGain = settings.m_cwGain; + } + if (settingsKeys.contains("fmDeviation")) { + m_fmDeviation = settings.m_fmDeviation; + } + if (settingsKeys.contains("fmAFLow")) { + m_fmAFLow = settings.m_fmAFLow; + } + if (settingsKeys.contains("fmAFHigh")) { + m_fmAFHigh = settings.m_fmAFHigh; + } + if (settingsKeys.contains("fmAFLimiter")) { + m_fmAFLimiter = settings.m_fmAFLimiter; + } + if (settingsKeys.contains("fmAFLimiterGain")) { + m_fmAFLimiterGain = settings.m_fmAFLimiterGain; + } + if (settingsKeys.contains("fmCTCSSNotch")) { + m_fmCTCSSNotch = settings.m_fmCTCSSNotch; + } + if (settingsKeys.contains("fmCTCSSNotchFrequency")) { + m_fmCTCSSNotchFrequency = settings.m_fmCTCSSNotchFrequency; + } + if (settingsKeys.contains("squelch")) { + m_squelch = settings.m_squelch; + } + if (settingsKeys.contains("squelchThreshold")) { + m_squelchThreshold = settings.m_squelchThreshold; + } + if (settingsKeys.contains("squelchMode")) { + m_squelchMode = settings.m_squelchMode; + } + if (settingsKeys.contains("ssqlTauMute")) { + m_ssqlTauMute = settings.m_ssqlTauMute; + } + if (settingsKeys.contains("ssqlTauUnmute")) { + m_ssqlTauUnmute = settings.m_ssqlTauUnmute; + } + if (settingsKeys.contains("amsqMaxTail")) { + m_amsqMaxTail = settings.m_amsqMaxTail; + } + if (settingsKeys.contains("equalizer")) { + m_equalizer = settings.m_equalizer; + } + if (settingsKeys.contains("rit")) { + m_rit = settings.m_rit; + } + if (settingsKeys.contains("ritFrequency")) { + m_ritFrequency = settings.m_ritFrequency; + } + if (settingsKeys.contains("rgbColor")) { + m_rgbColor = settings.m_rgbColor; + } + if (settingsKeys.contains("title")) { + m_title = settings.m_title; + } + if (settingsKeys.contains("audioDeviceName")) { + m_audioDeviceName = settings.m_audioDeviceName; + } + if (settingsKeys.contains("streamIndex")) { + m_streamIndex = settings.m_streamIndex; + } + if (settingsKeys.contains("useReverseAPI")) { + m_useReverseAPI = settings.m_useReverseAPI; + } + if (settingsKeys.contains("reverseAPIAddress")) { + m_reverseAPIAddress = settings.m_reverseAPIAddress; + } + if (settingsKeys.contains("reverseAPIPort")) { + m_reverseAPIPort = settings.m_reverseAPIPort; + } + if (settingsKeys.contains("reverseAPIDeviceIndex")) { + m_reverseAPIDeviceIndex = settings.m_reverseAPIDeviceIndex; + } + if (settingsKeys.contains("reverseAPIChannelIndex")) { + m_reverseAPIChannelIndex = settings.m_reverseAPIChannelIndex; + } + if (settingsKeys.contains("workspaceIndex")) { + m_workspaceIndex = settings.m_workspaceIndex; + } + if (settingsKeys.contains("geometryBytes")) { + m_geometryBytes = settings.m_geometryBytes; + } + if (settingsKeys.contains("hidden")) { + m_hidden = settings.m_hidden; + } + if (settingsKeys.contains("profileIndex")) { + m_profileIndex = settings.m_profileIndex; + } +} + +QString WDSPRxSettings::getDebugString(const QStringList& settingsKeys, bool force) const +{ + std::ostringstream ostr; + + if (settingsKeys.contains("demod") || force) { + ostr << " m_demod: " << m_demod; + } + if (settingsKeys.contains("inputFrequencyOffset") || force) { + ostr << " m_inputFrequencyOffset: " << m_inputFrequencyOffset; + } + if (settingsKeys.contains("volume") || force) { + ostr << " m_volume: " << m_volume; + } + if (settingsKeys.contains("audioBinaural") || force) { + ostr << " m_audioBinaural: " << m_audioBinaural; + } + if (settingsKeys.contains("audioFlipChannels") || force) { + ostr << " m_audioFlipChannels: " << m_audioFlipChannels; + } + if (settingsKeys.contains("audioPan") || force) { + ostr << " m_audioPan: " << m_audioPan; + } + if (settingsKeys.contains("dsb") || force) { + ostr << " m_dsb: " << m_dsb; + } + if (settingsKeys.contains("audioMute") || force) { + ostr << " m_audioMute: " << m_audioMute; + } + if (settingsKeys.contains("dbOrS") || force) { + ostr << " m_dbOrS: " << m_dbOrS; + } + if (settingsKeys.contains("agc") || force) { + ostr << " m_agc: " << m_agc; + } + if (settingsKeys.contains("agcMode") || force) { + ostr << " m_agcMode: " << m_agcMode; + } + if (settingsKeys.contains("agcGain") || force) { + ostr << " m_agcGain: " << m_agcGain; + } + if (settingsKeys.contains("agcSlope") || force) { + ostr << " m_agcSlope: " << m_agcSlope; + } + if (settingsKeys.contains("agcHangThreshold") || force) { + ostr << " m_agcHangThreshold: " << m_agcHangThreshold; + } + if (settingsKeys.contains("dnb") || force) { + ostr << " m_dnb: " << m_dnb; + } + if (settingsKeys.contains("nbScheme") || force) { + ostr << " m_nbScheme: " << m_nbScheme; + } + if (settingsKeys.contains("nb2Mode") || force) { + ostr << " m_nb2Mode: " << m_nb2Mode; + } + if (settingsKeys.contains("nbSlewTime") || force) { + ostr << " m_nbSlewTime: " << m_nbSlewTime; + } + if (settingsKeys.contains("nbLeadTime") || force) { + ostr << " m_nbLeadTime: " << m_nbLeadTime; + } + if (settingsKeys.contains("nbLagTime") || force) { + ostr << " m_nbLagTime: " << m_nbLagTime; + } + if (settingsKeys.contains("nbThreshold") || force) { + ostr << " m_nbThreshold: " << m_nbThreshold; + } + if (settingsKeys.contains("nbAvgTime") || force) { + ostr << " m_nbAvgTime: " << m_nbAvgTime; + } + if (settingsKeys.contains("dnr") || force) { + ostr << " m_dnr: " << m_dnr; + } + if (settingsKeys.contains("snb") || force) { + ostr << " m_snb: " << m_snb; + } + if (settingsKeys.contains("anf") || force) { + ostr << " m_anf: " << m_anf; + } + if (settingsKeys.contains("nrScheme") || force) { + ostr << " m_nrScheme: " << m_nrScheme; + } + if (settingsKeys.contains("nr2Gain") || force) { + ostr << " m_nr2Gain: " << m_nr2Gain; + } + if (settingsKeys.contains("nr2NPE") || force) { + ostr << " m_nr2NPE: " << m_nr2NPE; + } + if (settingsKeys.contains("nrPosition") || force) { + ostr << " m_nrPosition: " << m_nrPosition; + } + if (settingsKeys.contains("nr2ArtifactReduction") || force) { + ostr << " m_nr2ArtifactReduction: " << m_nr2ArtifactReduction; + } + if (settingsKeys.contains("amFadeLevel") || force) { + ostr << " m_amFadeLevel: " << m_amFadeLevel; + } + if (settingsKeys.contains("cwPeaking") || force) { + ostr << " m_cwPeaking: " << m_cwPeaking; + } + if (settingsKeys.contains("cwPeakFrequency") || force) { + ostr << " m_cwPeakFrequency: " << m_cwPeakFrequency; + } + if (settingsKeys.contains("cwBandwidth") || force) { + ostr << " m_cwBandwidth: " << m_cwBandwidth; + } + if (settingsKeys.contains("cwGain") || force) { + ostr << " m_cwGain: " << m_cwGain; + } + if (settingsKeys.contains("fmDeviation") || force) { + ostr << " m_fmDeviation: " << m_fmDeviation; + } + if (settingsKeys.contains("fmAFLow") || force) { + ostr << " m_fmAFLow: " << m_fmAFLow; + } + if (settingsKeys.contains("fmAFHigh") || force) { + ostr << " m_fmAFHigh: " << m_fmAFHigh; + } + if (settingsKeys.contains("fmAFLimiter") || force) { + ostr << " m_fmAFLimiter: " << m_fmAFLimiter; + } + if (settingsKeys.contains("fmAFLimiterGain") || force) { + ostr << " m_fmAFLimiterGain: " << m_fmAFLimiterGain; + } + if (settingsKeys.contains("fmCTCSSNotch") || force) { + ostr << " m_fmCTCSSNotch: " << m_fmCTCSSNotch; + } + if (settingsKeys.contains("fmCTCSSNotchFrequency") || force) { + ostr << " m_fmCTCSSNotchFrequency: " << m_fmCTCSSNotchFrequency; + } + if (settingsKeys.contains("squelch") || force) { + ostr << " m_squelch: " << m_squelch; + } + if (settingsKeys.contains("squelchThreshold") || force) { + ostr << " m_squelchThreshold: " << m_squelchThreshold; + } + if (settingsKeys.contains("squelchMode") || force) { + ostr << " m_squelchMode: " << m_squelchMode; + } + if (settingsKeys.contains("ssqlTauMute") || force) { + ostr << " m_ssqlTauMute: " << m_ssqlTauMute; + } + if (settingsKeys.contains("ssqlTauUnmute") || force) { + ostr << " m_ssqlTauUnmute: " << m_ssqlTauUnmute; + } + if (settingsKeys.contains("amsqMaxTail") || force) { + ostr << " m_amsqMaxTail: " << m_amsqMaxTail; + } + if (settingsKeys.contains("equalizer") || force) { + ostr << " m_equalizer: " << m_equalizer; + } + if (settingsKeys.contains("rit") || force) { + ostr << " m_rit: " << m_rit; + } + if (settingsKeys.contains("ritFrequency") || force) { + ostr << " m_ritFrequency: " << m_ritFrequency; + } + if (settingsKeys.contains("rgbColor") || force) { + ostr << " m_rgbColor: " << m_rgbColor; + } + if (settingsKeys.contains("title") || force) { + ostr << " m_title: " << m_title.toStdString(); + } + if (settingsKeys.contains("audioDeviceName") || force) { + ostr << " m_audioDeviceName: " << m_audioDeviceName.toStdString(); + } + if (settingsKeys.contains("streamIndex") || force) { + ostr << " m_streamIndex: " << m_streamIndex; + } + if (settingsKeys.contains("useReverseAPI") || force) { + ostr << " m_useReverseAPI: " << m_useReverseAPI; + } + if (settingsKeys.contains("reverseAPIAddress") || force) { + ostr << " m_reverseAPIAddress: " << m_reverseAPIAddress.toStdString(); + } + if (settingsKeys.contains("reverseAPIPort") || force) { + ostr << " m_reverseAPIPort: " << m_reverseAPIPort; + } + if (settingsKeys.contains("reverseAPIDeviceIndex") || force) { + ostr << " m_reverseAPIDeviceIndex: " << m_reverseAPIDeviceIndex; + } + if (settingsKeys.contains("reverseAPIChannelIndex") || force) { + ostr << " m_reverseAPIChannelIndex: " << m_reverseAPIChannelIndex; + } + if (settingsKeys.contains("workspaceIndex") || force) { + ostr << " m_workspaceIndex: " << m_workspaceIndex; + } + if (settingsKeys.contains("hidden") || force) { + ostr << " m_hidden: " << m_hidden; + } + if (settingsKeys.contains("profileIndex") || force) { + ostr << " m_profileIndex: " << m_profileIndex; + } + + return QString(ostr.str().c_str()); +} diff --git a/plugins/channelrx/wdsprx/wdsprxsettings.h b/plugins/channelrx/wdsprx/wdsprxsettings.h index 737adedbe..d65f39449 100644 --- a/plugins/channelrx/wdsprx/wdsprxsettings.h +++ b/plugins/channelrx/wdsprx/wdsprxsettings.h @@ -298,6 +298,8 @@ struct WDSPRxSettings void setRollupState(Serializable *rollupState) { m_rollupState = rollupState; } QByteArray serialize() const; bool deserialize(const QByteArray& data); + void applySettings(const QStringList& settingsKeys, const WDSPRxSettings& settings); + QString getDebugString(const QStringList& settingsKeys, bool force=false) const; static const int m_minPowerThresholdDB; static const float m_mminPowerThresholdDBf; diff --git a/sdrbase/CMakeLists.txt b/sdrbase/CMakeLists.txt index 92e04f596..0aaafa68f 100644 --- a/sdrbase/CMakeLists.txt +++ b/sdrbase/CMakeLists.txt @@ -276,6 +276,7 @@ set(sdrbase_SOURCES #util/spinlock.cpp util/spyserverlist.cpp util/stix.cpp + util/stringlist.cpp util/rtty.cpp util/uid.cpp util/units.cpp @@ -540,6 +541,7 @@ set(sdrbase_HEADERS #util/spinlock.h util/spyserverlist.h util/stix.h + util/stringlist.h util/uid.h util/units.h util/timeutil.h diff --git a/sdrbase/util/stringlist.cpp b/sdrbase/util/stringlist.cpp new file mode 100644 index 000000000..41e79f30b --- /dev/null +++ b/sdrbase/util/stringlist.cpp @@ -0,0 +1,19 @@ +#include "stringlist.h" + +bool StringListUtil::containsAll(const QStringList &haystack, const QStringList &needles) +{ + for (const auto &s : needles) { + if (!haystack.contains(s)) // optionally add Qt::CaseSensitivity + return false; + } + return true; +} + +bool StringListUtil::containsAny(const QStringList &haystack, const QStringList &needles) +{ + for (const auto &s : needles) { + if (haystack.contains(s)) // optionally add Qt::CaseSensitivity + return true; + } + return false; +} diff --git a/sdrbase/util/stringlist.h b/sdrbase/util/stringlist.h new file mode 100644 index 000000000..99fcc46cb --- /dev/null +++ b/sdrbase/util/stringlist.h @@ -0,0 +1,13 @@ +#ifndef SDRBASE_UTIL_STRINGLIST_H_ +#define SDRBASE_UTIL_STRINGLIST_H_ + +#include + +namespace StringListUtil { + +static bool containsAll(const QStringList &haystack, const QStringList &needles); +static bool containsAny(const QStringList &haystack, const QStringList &needles); + +} // namespace StringListUtil + +#endif // SDRBASE_UTIL_STRINGLIST_H_