From 7b851e83268e7db4c071945f98d98042b3e23eb2 Mon Sep 17 00:00:00 2001 From: f4exb Date: Tue, 8 Aug 2017 21:30:04 +0200 Subject: [PATCH] HackRF output: suspend thread when baseband sample rate changes --- .../samplesink/hackrfoutput/hackrfoutput.cpp | 27 ++++++++++++++++++- .../hackrfoutput/hackrfoutputthread.cpp | 1 + 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/plugins/samplesink/hackrfoutput/hackrfoutput.cpp b/plugins/samplesink/hackrfoutput/hackrfoutput.cpp index 078f44975..32ab87fa9 100644 --- a/plugins/samplesink/hackrfoutput/hackrfoutput.cpp +++ b/plugins/samplesink/hackrfoutput/hackrfoutput.cpp @@ -214,11 +214,31 @@ bool HackRFOutput::applySettings(const HackRFOutputSettings& settings, bool forc { // QMutexLocker mutexLocker(&m_mutex); - bool forwardChange = false; + bool forwardChange = false; + bool suspendThread = false; + bool threadWasRunning = false; hackrf_error rc; qDebug() << "HackRFOutput::applySettings"; + if ((m_settings.m_devSampleRate != settings.m_devSampleRate) || + (m_settings.m_log2Interp != settings.m_log2Interp) || force) + { + suspendThread = true; + } + + if (suspendThread) + { + if (m_hackRFThread) + { + if (m_hackRFThread->isRunning()) + { + m_hackRFThread->stopWork(); + threadWasRunning = true; + } + } + } + if ((m_settings.m_devSampleRate != settings.m_devSampleRate) || (m_settings.m_log2Interp != settings.m_log2Interp) || force) { forwardChange = true; @@ -339,6 +359,11 @@ bool HackRFOutput::applySettings(const HackRFOutputSettings& settings, bool forc } } + if (threadWasRunning) + { + m_hackRFThread->startWork(); + } + m_settings.m_devSampleRate = settings.m_devSampleRate; m_settings.m_log2Interp = settings.m_log2Interp; m_settings.m_centerFrequency = settings.m_centerFrequency; diff --git a/plugins/samplesink/hackrfoutput/hackrfoutputthread.cpp b/plugins/samplesink/hackrfoutput/hackrfoutputthread.cpp index 66a9eb845..12f497976 100644 --- a/plugins/samplesink/hackrfoutput/hackrfoutputthread.cpp +++ b/plugins/samplesink/hackrfoutput/hackrfoutputthread.cpp @@ -47,6 +47,7 @@ void HackRFOutputThread::startWork() void HackRFOutputThread::stopWork() { + if (!m_running) return; qDebug("HackRFOutputThread::stopWork"); m_running = false; wait();