mirror of
				https://github.com/f4exb/sdrangel.git
				synced 2025-10-31 13:00:26 -04:00 
			
		
		
		
	FCDPro+: open/close new style
This commit is contained in:
		
							parent
							
								
									f456293b84
								
							
						
					
					
						commit
						1e086fb303
					
				| @ -36,6 +36,9 @@ FCDProPlusGui::FCDProPlusGui(DeviceSourceAPI *deviceAPI, QWidget* parent) : | ||||
| 	m_sampleSource(NULL), | ||||
| 	m_lastEngineState((DSPDeviceSourceEngine::State)-1) | ||||
| { | ||||
|     m_sampleSource = new FCDProPlusInput(m_deviceAPI); | ||||
|     m_deviceAPI->setSource(m_sampleSource); | ||||
| 
 | ||||
| 	ui->setupUi(this); | ||||
| 
 | ||||
| 	ui->centerFrequency->setColorMapper(ColorMapper(ColorMapper::ReverseGold)); | ||||
| @ -59,9 +62,6 @@ FCDProPlusGui::FCDProPlusGui(DeviceSourceAPI *deviceAPI, QWidget* parent) : | ||||
| 
 | ||||
| 	displaySettings(); | ||||
| 
 | ||||
| 	m_sampleSource = new FCDProPlusInput(m_deviceAPI); | ||||
| 	m_deviceAPI->setSource(m_sampleSource); | ||||
| 
 | ||||
| 	char recFileNameCStr[30]; | ||||
|     sprintf(recFileNameCStr, "test_%d.sdriq", m_deviceAPI->getDeviceUID()); | ||||
|     m_fileSink = new FileRecord(std::string(recFileNameCStr)); | ||||
|  | ||||
| @ -38,33 +38,46 @@ FCDProPlusInput::FCDProPlusInput(DeviceSourceAPI *deviceAPI) : | ||||
| 	m_dev(0), | ||||
| 	m_settings(), | ||||
| 	m_FCDThread(0), | ||||
| 	m_deviceDescription(fcd_traits<ProPlus>::displayedName) | ||||
| 	m_deviceDescription(fcd_traits<ProPlus>::displayedName), | ||||
| 	m_running(false) | ||||
| { | ||||
|     openDevice(); | ||||
| } | ||||
| 
 | ||||
| FCDProPlusInput::~FCDProPlusInput() | ||||
| { | ||||
| 	stop(); | ||||
|     if (m_running) stop(); | ||||
|     closeDevice(); | ||||
| } | ||||
| 
 | ||||
| bool FCDProPlusInput::openDevice() | ||||
| { | ||||
|     int device = m_deviceAPI->getSampleSourceSequence(); | ||||
|     qDebug() << "FCDProPlusInput::openDevice with device #" << device; | ||||
| 
 | ||||
|     m_dev = fcdOpen(fcd_traits<ProPlus>::vendorId, fcd_traits<ProPlus>::productId, device); | ||||
| 
 | ||||
|     if (m_dev == 0) | ||||
|     { | ||||
|         qCritical("FCDProPlusInput::start: could not open FCD"); | ||||
|         return false; | ||||
|     } | ||||
| 
 | ||||
|     return true; | ||||
| } | ||||
| 
 | ||||
| bool FCDProPlusInput::start(int device) | ||||
| { | ||||
| 	qDebug() << "FCDProPlusInput::start with device #" << device; | ||||
| 
 | ||||
| 	QMutexLocker mutexLocker(&m_mutex); | ||||
| //	QMutexLocker mutexLocker(&m_mutex);
 | ||||
| 
 | ||||
| 	if (m_FCDThread) | ||||
| 	{ | ||||
| 		return false; | ||||
| 	} | ||||
|     if (!m_dev) { | ||||
|         return false; | ||||
|     } | ||||
| 
 | ||||
| 	m_dev = fcdOpen(fcd_traits<ProPlus>::vendorId, fcd_traits<ProPlus>::productId, device); | ||||
|     if (m_running) stop(); | ||||
| 
 | ||||
| 	if (m_dev == 0) | ||||
| 	{ | ||||
| 		qCritical("FCDProPlusInput::start: could not open FCD"); | ||||
| 		return false; | ||||
| 	} | ||||
|     qDebug() << "FCDProPlusInput::start"; | ||||
| 
 | ||||
| 	/* Apply settings before streaming to avoid bus contention;
 | ||||
| 	 * there is very little spare bandwidth on a full speed USB device. | ||||
| @ -87,13 +100,21 @@ bool FCDProPlusInput::start(int device) | ||||
| 
 | ||||
| 	m_FCDThread->startWork(); | ||||
| 
 | ||||
| 	mutexLocker.unlock(); | ||||
| //	mutexLocker.unlock();
 | ||||
| 	applySettings(m_settings, true); | ||||
| 
 | ||||
| 	qDebug("FCDProPlusInput::started"); | ||||
| 	m_running = true; | ||||
| 
 | ||||
| 	return true; | ||||
| } | ||||
| 
 | ||||
| void FCDProPlusInput::closeDevice() | ||||
| { | ||||
|     fcdClose(m_dev); | ||||
|     m_dev = 0; | ||||
| } | ||||
| 
 | ||||
| void FCDProPlusInput::stop() | ||||
| { | ||||
| 	QMutexLocker mutexLocker(&m_mutex); | ||||
| @ -106,8 +127,7 @@ void FCDProPlusInput::stop() | ||||
| 		m_FCDThread = 0; | ||||
| 	} | ||||
| 
 | ||||
| 	fcdClose(m_dev); | ||||
| 	m_dev = 0; | ||||
| 	m_running = false; | ||||
| } | ||||
| 
 | ||||
| const QString& FCDProPlusInput::getDeviceDescription() const | ||||
|  | ||||
| @ -76,6 +76,8 @@ public: | ||||
| 	void set_lo_ppm(); | ||||
| 
 | ||||
| private: | ||||
|     bool openDevice(); | ||||
|     void closeDevice(); | ||||
| 	void applySettings(const FCDProPlusSettings& settings, bool force); | ||||
| 
 | ||||
| 	DeviceSourceAPI *m_deviceAPI; | ||||
| @ -84,6 +86,7 @@ private: | ||||
| 	FCDProPlusSettings m_settings; | ||||
| 	FCDProPlusThread* m_FCDThread; | ||||
| 	QString m_deviceDescription; | ||||
| 	bool m_running; | ||||
| }; | ||||
| 
 | ||||
| #endif // INCLUDE_FCD_H
 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user