mirror of https://github.com/f4exb/sdrangel.git
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…
Reference in New Issue