From 252156ccbfba727f04964dbdf64b2c8599a09031 Mon Sep 17 00:00:00 2001 From: f4exb Date: Fri, 10 Jul 2020 00:08:42 +0200 Subject: [PATCH] GLSpectrum: synchronize spectrum running with the GUI spectrum freeze button. Fixes issue #561 --- sdrbase/dsp/spectrumvis.cpp | 26 +++++++++++++++++--------- sdrbase/dsp/spectrumvis.h | 1 + sdrgui/gui/glspectrumgui.cpp | 8 ++++++++ 3 files changed, 26 insertions(+), 9 deletions(-) diff --git a/sdrbase/dsp/spectrumvis.cpp b/sdrbase/dsp/spectrumvis.cpp index bb617f61f..38bc951ab 100644 --- a/sdrbase/dsp/spectrumvis.cpp +++ b/sdrbase/dsp/spectrumvis.cpp @@ -626,12 +626,24 @@ void SpectrumVis::feed(const SampleVector::const_iterator& cbegin, const SampleV void SpectrumVis::start() { - m_running = true; + setRunning(true); + + if (getMessageQueueToGUI()) // propagate to GUI if any + { + MsgStartStop *msg = MsgStartStop::create(true); + getMessageQueueToGUI()->push(msg); + } } void SpectrumVis::stop() { - m_running = false; + setRunning(false); + + if (getMessageQueueToGUI()) // propagate to GUI if any + { + MsgStartStop *msg = MsgStartStop::create(false); + getMessageQueueToGUI()->push(msg); + } } bool SpectrumVis::handleMessage(const Message& message) @@ -670,14 +682,10 @@ bool SpectrumVis::handleMessage(const Message& message) handleConfigureWSSpectrum(conf.getAddress(), conf.getPort()); return true; } - else if (MsgStartStop::match(message)) { + else if (MsgStartStop::match(message)) + { MsgStartStop& cmd = (MsgStartStop&) message; - - if (cmd.getStartStop()) { - start(); - } else { - stop(); - } + setRunning(cmd.getStartStop()); return true; } diff --git a/sdrbase/dsp/spectrumvis.h b/sdrbase/dsp/spectrumvis.h index 5e6749826..8351cbc10 100644 --- a/sdrbase/dsp/spectrumvis.h +++ b/sdrbase/dsp/spectrumvis.h @@ -199,6 +199,7 @@ private: QMutex m_mutex; + void setRunning(bool running) { m_running = running; } void applySettings(const GLSpectrumSettings& settings, bool force = false); void handleConfigureDSP(uint64_t centerFrequency, int sampleRate); void handleScalef(Real scalef); diff --git a/sdrgui/gui/glspectrumgui.cpp b/sdrgui/gui/glspectrumgui.cpp index f42bda634..4318cc7ac 100644 --- a/sdrgui/gui/glspectrumgui.cpp +++ b/sdrgui/gui/glspectrumgui.cpp @@ -492,6 +492,14 @@ bool GLSpectrumGUI::handleMessage(const Message& message) setAveragingToolitp(); return true; } + else if (SpectrumVis::MsgStartStop::match(message)) + { + const SpectrumVis::MsgStartStop& msg = (SpectrumVis::MsgStartStop&) message; + ui->freeze->blockSignals(true); + ui->freeze->doToggle(!msg.getStartStop()); // this is a freeze so stop is true + ui->freeze->blockSignals(false); + return true; + } return false; }