1
0
mirror of https://github.com/f4exb/sdrangel.git synced 2025-07-31 05:02:24 -04:00

FCDPro+: open/close new style

This commit is contained in:
f4exb 2017-04-14 03:29:50 +02:00
parent f456293b84
commit 1e086fb303
3 changed files with 43 additions and 20 deletions

View File

@ -36,6 +36,9 @@ FCDProPlusGui::FCDProPlusGui(DeviceSourceAPI *deviceAPI, QWidget* parent) :
m_sampleSource(NULL), m_sampleSource(NULL),
m_lastEngineState((DSPDeviceSourceEngine::State)-1) m_lastEngineState((DSPDeviceSourceEngine::State)-1)
{ {
m_sampleSource = new FCDProPlusInput(m_deviceAPI);
m_deviceAPI->setSource(m_sampleSource);
ui->setupUi(this); ui->setupUi(this);
ui->centerFrequency->setColorMapper(ColorMapper(ColorMapper::ReverseGold)); ui->centerFrequency->setColorMapper(ColorMapper(ColorMapper::ReverseGold));
@ -59,9 +62,6 @@ FCDProPlusGui::FCDProPlusGui(DeviceSourceAPI *deviceAPI, QWidget* parent) :
displaySettings(); displaySettings();
m_sampleSource = new FCDProPlusInput(m_deviceAPI);
m_deviceAPI->setSource(m_sampleSource);
char recFileNameCStr[30]; char recFileNameCStr[30];
sprintf(recFileNameCStr, "test_%d.sdriq", m_deviceAPI->getDeviceUID()); sprintf(recFileNameCStr, "test_%d.sdriq", m_deviceAPI->getDeviceUID());
m_fileSink = new FileRecord(std::string(recFileNameCStr)); m_fileSink = new FileRecord(std::string(recFileNameCStr));

View File

@ -38,33 +38,46 @@ FCDProPlusInput::FCDProPlusInput(DeviceSourceAPI *deviceAPI) :
m_dev(0), m_dev(0),
m_settings(), m_settings(),
m_FCDThread(0), m_FCDThread(0),
m_deviceDescription(fcd_traits<ProPlus>::displayedName) m_deviceDescription(fcd_traits<ProPlus>::displayedName),
m_running(false)
{ {
openDevice();
} }
FCDProPlusInput::~FCDProPlusInput() 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) bool FCDProPlusInput::start(int device)
{ {
qDebug() << "FCDProPlusInput::start with device #" << device;
QMutexLocker mutexLocker(&m_mutex); // QMutexLocker mutexLocker(&m_mutex);
if (m_FCDThread) if (!m_dev) {
{ return false;
return false; }
}
m_dev = fcdOpen(fcd_traits<ProPlus>::vendorId, fcd_traits<ProPlus>::productId, device); if (m_running) stop();
if (m_dev == 0) qDebug() << "FCDProPlusInput::start";
{
qCritical("FCDProPlusInput::start: could not open FCD");
return false;
}
/* Apply settings before streaming to avoid bus contention; /* Apply settings before streaming to avoid bus contention;
* there is very little spare bandwidth on a full speed USB device. * there is very little spare bandwidth on a full speed USB device.
@ -87,13 +100,21 @@ bool FCDProPlusInput::start(int device)
m_FCDThread->startWork(); m_FCDThread->startWork();
mutexLocker.unlock(); // mutexLocker.unlock();
applySettings(m_settings, true); applySettings(m_settings, true);
qDebug("FCDProPlusInput::started"); qDebug("FCDProPlusInput::started");
m_running = true;
return true; return true;
} }
void FCDProPlusInput::closeDevice()
{
fcdClose(m_dev);
m_dev = 0;
}
void FCDProPlusInput::stop() void FCDProPlusInput::stop()
{ {
QMutexLocker mutexLocker(&m_mutex); QMutexLocker mutexLocker(&m_mutex);
@ -106,8 +127,7 @@ void FCDProPlusInput::stop()
m_FCDThread = 0; m_FCDThread = 0;
} }
fcdClose(m_dev); m_running = false;
m_dev = 0;
} }
const QString& FCDProPlusInput::getDeviceDescription() const const QString& FCDProPlusInput::getDeviceDescription() const

View File

@ -76,6 +76,8 @@ public:
void set_lo_ppm(); void set_lo_ppm();
private: private:
bool openDevice();
void closeDevice();
void applySettings(const FCDProPlusSettings& settings, bool force); void applySettings(const FCDProPlusSettings& settings, bool force);
DeviceSourceAPI *m_deviceAPI; DeviceSourceAPI *m_deviceAPI;
@ -84,6 +86,7 @@ private:
FCDProPlusSettings m_settings; FCDProPlusSettings m_settings;
FCDProPlusThread* m_FCDThread; FCDProPlusThread* m_FCDThread;
QString m_deviceDescription; QString m_deviceDescription;
bool m_running;
}; };
#endif // INCLUDE_FCD_H #endif // INCLUDE_FCD_H