mirror of
https://github.com/f4exb/sdrangel.git
synced 2025-09-01 04:37:52 -04:00
KiwiSDR: updated threading model. Part of #1346
This commit is contained in:
parent
250144bb0e
commit
79b7e16c29
@ -23,6 +23,7 @@
|
|||||||
#include <QNetworkReply>
|
#include <QNetworkReply>
|
||||||
#include <QNetworkAccessManager>
|
#include <QNetworkAccessManager>
|
||||||
#include <QBuffer>
|
#include <QBuffer>
|
||||||
|
#include <QThread>
|
||||||
|
|
||||||
#include "SWGDeviceSettings.h"
|
#include "SWGDeviceSettings.h"
|
||||||
#include "SWGDeviceState.h"
|
#include "SWGDeviceState.h"
|
||||||
@ -44,6 +45,7 @@ KiwiSDRInput::KiwiSDRInput(DeviceAPI *deviceAPI) :
|
|||||||
m_deviceAPI(deviceAPI),
|
m_deviceAPI(deviceAPI),
|
||||||
m_settings(),
|
m_settings(),
|
||||||
m_kiwiSDRWorker(nullptr),
|
m_kiwiSDRWorker(nullptr),
|
||||||
|
m_kiwiSDRWorkerThread(nullptr),
|
||||||
m_deviceDescription("KiwiSDR"),
|
m_deviceDescription("KiwiSDR"),
|
||||||
m_running(false),
|
m_running(false),
|
||||||
m_masterTimer(deviceAPI->getMasterTimer())
|
m_masterTimer(deviceAPI->getMasterTimer())
|
||||||
@ -93,22 +95,28 @@ bool KiwiSDRInput::start()
|
|||||||
{
|
{
|
||||||
QMutexLocker mutexLocker(&m_mutex);
|
QMutexLocker mutexLocker(&m_mutex);
|
||||||
|
|
||||||
if (m_running) stop();
|
if (m_running) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_kiwiSDRWorkerThread = new QThread();
|
||||||
m_kiwiSDRWorker = new KiwiSDRWorker(&m_sampleFifo);
|
m_kiwiSDRWorker = new KiwiSDRWorker(&m_sampleFifo);
|
||||||
m_kiwiSDRWorker->moveToThread(&m_kiwiSDRWorkerThread);
|
m_kiwiSDRWorker->moveToThread(m_kiwiSDRWorkerThread);
|
||||||
m_kiwiSDRWorkerThread.start();
|
|
||||||
|
QObject::connect(m_kiwiSDRWorkerThread, &QThread::finished, m_kiwiSDRWorker, &QObject::deleteLater);
|
||||||
|
QObject::connect(m_kiwiSDRWorkerThread, &QThread::finished, m_kiwiSDRWorkerThread, &QThread::deleteLater);
|
||||||
|
|
||||||
connect(this, &KiwiSDRInput::setWorkerCenterFrequency, m_kiwiSDRWorker, &KiwiSDRWorker::onCenterFrequencyChanged);
|
connect(this, &KiwiSDRInput::setWorkerCenterFrequency, m_kiwiSDRWorker, &KiwiSDRWorker::onCenterFrequencyChanged);
|
||||||
connect(this, &KiwiSDRInput::setWorkerServerAddress, m_kiwiSDRWorker, &KiwiSDRWorker::onServerAddressChanged);
|
connect(this, &KiwiSDRInput::setWorkerServerAddress, m_kiwiSDRWorker, &KiwiSDRWorker::onServerAddressChanged);
|
||||||
connect(this, &KiwiSDRInput::setWorkerGain, m_kiwiSDRWorker, &KiwiSDRWorker::onGainChanged);
|
connect(this, &KiwiSDRInput::setWorkerGain, m_kiwiSDRWorker, &KiwiSDRWorker::onGainChanged);
|
||||||
connect(m_kiwiSDRWorker, &KiwiSDRWorker::updateStatus, this, &KiwiSDRInput::setWorkerStatus);
|
connect(m_kiwiSDRWorker, &KiwiSDRWorker::updateStatus, this, &KiwiSDRInput::setWorkerStatus);
|
||||||
|
|
||||||
mutexLocker.unlock();
|
m_kiwiSDRWorkerThread->start();
|
||||||
|
|
||||||
applySettings(m_settings, true);
|
|
||||||
m_running = true;
|
m_running = true;
|
||||||
|
|
||||||
|
mutexLocker.unlock();
|
||||||
|
applySettings(m_settings, true);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -116,14 +124,18 @@ void KiwiSDRInput::stop()
|
|||||||
{
|
{
|
||||||
QMutexLocker mutexLocker(&m_mutex);
|
QMutexLocker mutexLocker(&m_mutex);
|
||||||
|
|
||||||
|
if (!m_running) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
setWorkerStatus(0);
|
setWorkerStatus(0);
|
||||||
|
|
||||||
if (m_kiwiSDRWorker)
|
if (m_kiwiSDRWorkerThread)
|
||||||
{
|
{
|
||||||
m_kiwiSDRWorkerThread.quit();
|
m_kiwiSDRWorkerThread->quit();
|
||||||
m_kiwiSDRWorkerThread.wait();
|
m_kiwiSDRWorkerThread->wait();
|
||||||
m_kiwiSDRWorker->deleteLater();
|
|
||||||
m_kiwiSDRWorker = nullptr;
|
m_kiwiSDRWorker = nullptr;
|
||||||
|
m_kiwiSDRWorkerThread = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_running = false;
|
m_running = false;
|
||||||
|
@ -22,7 +22,6 @@
|
|||||||
#include <QString>
|
#include <QString>
|
||||||
#include <QByteArray>
|
#include <QByteArray>
|
||||||
#include <QTimer>
|
#include <QTimer>
|
||||||
#include <QThread>
|
|
||||||
#include <QNetworkRequest>
|
#include <QNetworkRequest>
|
||||||
|
|
||||||
#include <dsp/devicesamplesource.h>
|
#include <dsp/devicesamplesource.h>
|
||||||
@ -32,6 +31,7 @@ class DeviceAPI;
|
|||||||
class KiwiSDRWorker;
|
class KiwiSDRWorker;
|
||||||
class QNetworkAccessManager;
|
class QNetworkAccessManager;
|
||||||
class QNetworkReply;
|
class QNetworkReply;
|
||||||
|
class QThread;
|
||||||
|
|
||||||
class KiwiSDRInput : public DeviceSampleSource {
|
class KiwiSDRInput : public DeviceSampleSource {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
@ -154,7 +154,7 @@ private:
|
|||||||
QMutex m_mutex;
|
QMutex m_mutex;
|
||||||
KiwiSDRSettings m_settings;
|
KiwiSDRSettings m_settings;
|
||||||
KiwiSDRWorker* m_kiwiSDRWorker;
|
KiwiSDRWorker* m_kiwiSDRWorker;
|
||||||
QThread m_kiwiSDRWorkerThread;
|
QThread *m_kiwiSDRWorkerThread;
|
||||||
QString m_deviceDescription;
|
QString m_deviceDescription;
|
||||||
bool m_running;
|
bool m_running;
|
||||||
const QTimer& m_masterTimer;
|
const QTimer& m_masterTimer;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user