1
0
mirror of https://github.com/f4exb/sdrangel.git synced 2024-11-10 18:43:28 -05:00

RTLSDR: make sure start and stop are effective once only. PArt of #2159

This commit is contained in:
f4exb 2024-08-17 11:22:09 +02:00 committed by Edouard Griffiths
parent f6b3b22e4f
commit beaf2932ba

View File

@ -78,6 +78,7 @@ RTLSDRInput::RTLSDRInput(DeviceAPI *deviceAPI) :
RTLSDRInput::~RTLSDRInput() RTLSDRInput::~RTLSDRInput()
{ {
qDebug("RTLSDRInput::~RTLSDRInput");
QObject::disconnect( QObject::disconnect(
m_networkManager, m_networkManager,
&QNetworkAccessManager::finished, &QNetworkAccessManager::finished,
@ -91,6 +92,7 @@ RTLSDRInput::~RTLSDRInput()
} }
closeDevice(); closeDevice();
qDebug("RTLSDRInput::~RTLSDRInput: end");
} }
void RTLSDRInput::destroy() void RTLSDRInput::destroy()
@ -231,11 +233,15 @@ bool RTLSDRInput::start()
{ {
QMutexLocker mutexLocker(&m_mutex); QMutexLocker mutexLocker(&m_mutex);
if (m_running) {
return true;
}
if (!m_dev) { if (!m_dev) {
return false; return false;
} }
if (m_running) stop(); qDebug("RTLSDRInput::start");
m_rtlSDRThread = new RTLSDRThread(m_dev, &m_sampleFifo, &m_replayBuffer); m_rtlSDRThread = new RTLSDRThread(m_dev, &m_sampleFifo, &m_replayBuffer);
m_rtlSDRThread->setSamplerate(m_settings.m_devSampleRate); m_rtlSDRThread->setSamplerate(m_settings.m_devSampleRate);
@ -243,11 +249,11 @@ bool RTLSDRInput::start()
m_rtlSDRThread->setFcPos((int) m_settings.m_fcPos); m_rtlSDRThread->setFcPos((int) m_settings.m_fcPos);
m_rtlSDRThread->setIQOrder(m_settings.m_iqOrder); m_rtlSDRThread->setIQOrder(m_settings.m_iqOrder);
m_rtlSDRThread->startWork(); m_rtlSDRThread->startWork();
m_running = true;
mutexLocker.unlock(); mutexLocker.unlock();
applySettings(m_settings, QList<QString>(), true); applySettings(m_settings, QList<QString>(), true);
m_running = true;
return true; return true;
} }
@ -267,6 +273,12 @@ void RTLSDRInput::stop()
{ {
QMutexLocker mutexLocker(&m_mutex); QMutexLocker mutexLocker(&m_mutex);
if (!m_running) {
return;
}
qDebug("RTLSDRInput::stop");
if (m_rtlSDRThread) if (m_rtlSDRThread)
{ {
m_rtlSDRThread->stopWork(); m_rtlSDRThread->stopWork();