mirror of
				https://github.com/f4exb/sdrangel.git
				synced 2025-11-03 13:11:20 -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_airspyHFWorker = new AirspyHFWorker(m_dev, &m_sampleFifo);
 | 
					    m_airspyHFWorkerThread = new QThread(this);
 | 
				
			||||||
    m_airspyHFWorker->moveToThread(&m_airspyHFWorkerThread);
 | 
					    m_airspyHFWorker = new AirspyHFWorker(m_dev, &m_sampleFifo);
 | 
				
			||||||
 | 
					    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,12 +222,13 @@ 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_airspyHFWorker = nullptr;
 | 
					        m_airspyHFWorkerThread = nullptr;
 | 
				
			||||||
	}
 | 
					        m_airspyHFWorker = nullptr;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	m_running = false;
 | 
						m_running = false;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user