1
0
mirror of https://github.com/f4exb/sdrangel.git synced 2026-06-01 21:54:55 -04:00

Perseus: refactored PerseusInputThread to PerseusInputWorker object moved to thread. Equivalent to FileInput changes

This commit is contained in:
f4exb
2020-07-12 00:35:37 +02:00
parent 46bca49042
commit 3ff933152a
5 changed files with 84 additions and 83 deletions
+34 -19
View File
@@ -33,7 +33,7 @@
#include "perseus/deviceperseus.h"
#include "perseusinput.h"
#include "perseusthread.h"
#include "perseusworker.h"
MESSAGE_CLASS_DEFINITION(PerseusInput::MsgConfigurePerseus, Message)
MESSAGE_CLASS_DEFINITION(PerseusInput::MsgFileRecord, Message)
@@ -41,10 +41,10 @@ MESSAGE_CLASS_DEFINITION(PerseusInput::MsgStartStop, Message)
PerseusInput::PerseusInput(DeviceAPI *deviceAPI) :
m_deviceAPI(deviceAPI),
m_fileSink(0),
m_fileSink(nullptr),
m_deviceDescription("PerseusInput"),
m_running(false),
m_perseusThread(nullptr),
m_perseusWorker(nullptr),
m_perseusDescriptor(0)
{
openDevice();
@@ -77,19 +77,21 @@ void PerseusInput::init()
bool PerseusInput::start()
{
if (m_running) stop();
if (m_running) {
stop();
}
// start / stop streaming is done in the thread.
m_perseusThread = new PerseusThread(m_perseusDescriptor, &m_sampleFifo);
qDebug("PerseusInput::start: thread created");
m_perseusWorker = new PerseusWorker(m_perseusDescriptor, &m_sampleFifo);
m_perseusWorker->moveToThread(&m_perseusWorkerThread);
qDebug("PerseusInput::start: worker created");
m_perseusWorker->setIQOrder(m_settings.m_iqOrder);
m_perseusWorker->setLog2Decimation(m_settings.m_log2Decim);
startWorker();
applySettings(m_settings, true);
m_perseusThread->setIQOrder(m_settings.m_iqOrder);
m_perseusThread->setLog2Decimation(m_settings.m_log2Decim);
m_perseusThread->startWork();
m_running = true;
return true;
@@ -97,16 +99,29 @@ bool PerseusInput::start()
void PerseusInput::stop()
{
if (m_perseusThread)
if (m_perseusWorker)
{
m_perseusThread->stopWork();
delete m_perseusThread;
m_perseusThread = nullptr;
stopWorker();
delete m_perseusWorker;
m_perseusWorker = nullptr;
}
m_running = false;
}
void PerseusInput::startWorker()
{
m_perseusWorker->startWork();
m_perseusWorkerThread.start();
}
void PerseusInput::stopWorker()
{
m_perseusWorker->stopWork();
m_perseusWorkerThread.quit();
m_perseusWorkerThread.wait();
}
QByteArray PerseusInput::serialize() const
{
return m_settings.serialize();
@@ -342,9 +357,9 @@ bool PerseusInput::applySettings(const PerseusSettings& settings, bool force)
reverseAPIKeys.append("log2Decim");
forwardChange = true;
if (m_perseusThread)
if (m_perseusWorker)
{
m_perseusThread->setLog2Decimation(settings.m_log2Decim);
m_perseusWorker->setLog2Decimation(settings.m_log2Decim);
qDebug("PerseusInput: set decimation to %d", (1<<settings.m_log2Decim));
}
}
@@ -353,8 +368,8 @@ bool PerseusInput::applySettings(const PerseusSettings& settings, bool force)
{
reverseAPIKeys.append("iqOrder");
if (m_perseusThread) {
m_perseusThread->setIQOrder(settings.m_iqOrder);
if (m_perseusWorker) {
m_perseusWorker->setIQOrder(settings.m_iqOrder);
}
}