mirror of
https://github.com/f4exb/sdrangel.git
synced 2025-02-03 09:44:01 -05:00
AirspyHF: Update threading model
This commit is contained in:
parent
53df5fe5d7
commit
63282ebfcd
@ -50,6 +50,7 @@ AirspyHFInput::AirspyHFInput(DeviceAPI *deviceAPI) :
|
|||||||
m_settings(),
|
m_settings(),
|
||||||
m_dev(nullptr),
|
m_dev(nullptr),
|
||||||
m_airspyHFWorker(nullptr),
|
m_airspyHFWorker(nullptr),
|
||||||
|
m_airspyHFWorkerThread(nullptr),
|
||||||
m_deviceDescription("AirspyHF"),
|
m_deviceDescription("AirspyHF"),
|
||||||
m_running(false)
|
m_running(false)
|
||||||
{
|
{
|
||||||
@ -174,10 +175,15 @@ bool AirspyHFInput::start()
|
|||||||
stop();
|
stop();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
m_airspyHFWorkerThread = new QThread(this);
|
||||||
m_airspyHFWorker = new AirspyHFWorker(m_dev, &m_sampleFifo);
|
m_airspyHFWorker = new AirspyHFWorker(m_dev, &m_sampleFifo);
|
||||||
m_airspyHFWorker->moveToThread(&m_airspyHFWorkerThread);
|
m_airspyHFWorker->moveToThread(m_airspyHFWorkerThread);
|
||||||
int sampleRateIndex = m_settings.m_devSampleRateIndex;
|
int sampleRateIndex = m_settings.m_devSampleRateIndex;
|
||||||
|
|
||||||
|
QObject::connect(m_airspyHFWorkerThread, &QThread::started, m_airspyHFWorker, &AirspyHFWorker::startWork);
|
||||||
|
QObject::connect(m_airspyHFWorkerThread, &QThread::finished, m_airspyHFWorker, &QObject::deleteLater);
|
||||||
|
QObject::connect(m_airspyHFWorkerThread, &QThread::finished, m_airspyHFWorkerThread, &QThread::deleteLater);
|
||||||
|
|
||||||
if (m_settings.m_devSampleRateIndex >= m_sampleRates.size()) {
|
if (m_settings.m_devSampleRateIndex >= m_sampleRates.size()) {
|
||||||
sampleRateIndex = m_sampleRates.size() - 1;
|
sampleRateIndex = m_sampleRates.size() - 1;
|
||||||
}
|
}
|
||||||
@ -190,40 +196,15 @@ bool AirspyHFInput::start()
|
|||||||
m_airspyHFWorker->setIQOrder(m_settings.m_iqOrder);
|
m_airspyHFWorker->setIQOrder(m_settings.m_iqOrder);
|
||||||
mutexLocker.unlock();
|
mutexLocker.unlock();
|
||||||
|
|
||||||
if (startWorker())
|
m_airspyHFWorkerThread->start();
|
||||||
{
|
|
||||||
qDebug("AirspyHFInput::startInput: started");
|
qDebug("AirspyHFInput::startInput: started");
|
||||||
applySettings(m_settings, true);
|
applySettings(m_settings, true);
|
||||||
m_running = true;
|
m_running = true;
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
m_running = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return m_running;
|
return m_running;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool AirspyHFInput::startWorker()
|
|
||||||
{
|
|
||||||
if (m_airspyHFWorker->startWork())
|
|
||||||
{
|
|
||||||
m_airspyHFWorkerThread.start();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void AirspyHFInput::stopWorker()
|
|
||||||
{
|
|
||||||
m_airspyHFWorker->stopWork();
|
|
||||||
m_airspyHFWorkerThread.quit();
|
|
||||||
m_airspyHFWorkerThread.wait();
|
|
||||||
}
|
|
||||||
|
|
||||||
void AirspyHFInput::closeDevice()
|
void AirspyHFInput::closeDevice()
|
||||||
{
|
{
|
||||||
if (m_dev)
|
if (m_dev)
|
||||||
@ -241,10 +222,11 @@ void AirspyHFInput::stop()
|
|||||||
qDebug("AirspyHFInput::stop");
|
qDebug("AirspyHFInput::stop");
|
||||||
QMutexLocker mutexLocker(&m_mutex);
|
QMutexLocker mutexLocker(&m_mutex);
|
||||||
|
|
||||||
if (m_airspyHFWorker)
|
if (m_airspyHFWorkerThread)
|
||||||
{
|
{
|
||||||
stopWorker();
|
m_airspyHFWorkerThread->quit();
|
||||||
delete m_airspyHFWorker;
|
m_airspyHFWorkerThread->wait();
|
||||||
|
m_airspyHFWorkerThread = nullptr;
|
||||||
m_airspyHFWorker = nullptr;
|
m_airspyHFWorker = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -142,15 +142,13 @@ private:
|
|||||||
AirspyHFSettings m_settings;
|
AirspyHFSettings m_settings;
|
||||||
airspyhf_device_t* m_dev;
|
airspyhf_device_t* m_dev;
|
||||||
AirspyHFWorker* m_airspyHFWorker;
|
AirspyHFWorker* m_airspyHFWorker;
|
||||||
QThread m_airspyHFWorkerThread;
|
QThread *m_airspyHFWorkerThread;
|
||||||
QString m_deviceDescription;
|
QString m_deviceDescription;
|
||||||
std::vector<uint32_t> m_sampleRates;
|
std::vector<uint32_t> m_sampleRates;
|
||||||
bool m_running;
|
bool m_running;
|
||||||
QNetworkAccessManager *m_networkManager;
|
QNetworkAccessManager *m_networkManager;
|
||||||
QNetworkRequest m_networkRequest;
|
QNetworkRequest m_networkRequest;
|
||||||
|
|
||||||
bool startWorker();
|
|
||||||
void stopWorker();
|
|
||||||
bool openDevice();
|
bool openDevice();
|
||||||
void closeDevice();
|
void closeDevice();
|
||||||
bool applySettings(const AirspyHFSettings& settings, bool force);
|
bool applySettings(const AirspyHFSettings& settings, bool force);
|
||||||
|
Loading…
Reference in New Issue
Block a user