diff --git a/plugins/samplesink/bladerfoutput/bladerfoutput.cpp b/plugins/samplesink/bladerfoutput/bladerfoutput.cpp index 36d95f1d2..5aac4c161 100644 --- a/plugins/samplesink/bladerfoutput/bladerfoutput.cpp +++ b/plugins/samplesink/bladerfoutput/bladerfoutput.cpp @@ -216,30 +216,37 @@ bool BladerfOutput::handleMessage(const Message& message) bool BladerfOutput::applySettings(const BladeRFOutputSettings& settings, bool force) { - bool forwardChange = false; + bool forwardChange = false; + bool suspendOwnThread = false; + bool threadWasRunning = false; // QMutexLocker mutexLocker(&m_mutex); qDebug() << "BladerfOutput::applySettings: m_dev: " << m_dev; + if ((m_settings.m_devSampleRate != settings.m_devSampleRate) || + (m_settings.m_log2Interp != settings.m_log2Interp) || force) + { + suspendOwnThread = true; + } + + if (suspendOwnThread) + { + if (m_bladerfThread) + { + if (m_bladerfThread->isRunning()) + { + m_bladerfThread->stopWork(); + threadWasRunning = true; + } + } + } + if ((m_settings.m_devSampleRate != settings.m_devSampleRate) || (m_settings.m_log2Interp != settings.m_log2Interp) || force) { - bool wasRunning = false; - - if ((m_bladerfThread != 0) && (m_bladerfThread->isRunning())) - { - m_bladerfThread->stopWork(); - wasRunning = true; - } - // FIFO size: // 1 s length up to interpolation by 16 // 2 s for interpolation by 32 m_sampleSourceFifo.resize(settings.m_devSampleRate/(1<<(settings.m_log2Interp <= 4 ? settings.m_log2Interp : 4))); - - if (wasRunning) - { - m_bladerfThread->startWork(); - } } if ((m_settings.m_devSampleRate != settings.m_devSampleRate) || force) @@ -416,6 +423,11 @@ bool BladerfOutput::applySettings(const BladeRFOutputSettings& settings, bool fo } } + if (threadWasRunning) + { + m_bladerfThread->startWork(); + } + m_settings.m_centerFrequency = settings.m_centerFrequency; m_settings.m_bandwidth = settings.m_bandwidth; m_settings.m_xb200Filter = settings.m_xb200Filter; diff --git a/plugins/samplesink/hackrfoutput/hackrfoutput.cpp b/plugins/samplesink/hackrfoutput/hackrfoutput.cpp index c228ca4e5..0a171d06a 100644 --- a/plugins/samplesink/hackrfoutput/hackrfoutput.cpp +++ b/plugins/samplesink/hackrfoutput/hackrfoutput.cpp @@ -222,7 +222,7 @@ bool HackRFOutput::applySettings(const HackRFOutputSettings& settings, bool forc qDebug() << "HackRFOutput::applySettings"; if ((m_settings.m_devSampleRate != settings.m_devSampleRate) || - (m_settings.m_log2Interp != settings.m_log2Interp) || force) + (m_settings.m_log2Interp != settings.m_log2Interp) || force) { suspendThread = true; }