Deep redesign: Better support for FCD dongles #3: Fixed frequency change at startup (apply settings with force). Aligned startup code with BladeRF's one (startWork method in thread)

This commit is contained in:
f4exb 2015-09-03 08:39:57 +02:00
parent 6910ea7e22
commit 01feb31a9e
4 changed files with 28 additions and 9 deletions

View File

@ -143,8 +143,6 @@ bool FCDInput::start(int device)
return false;
}
m_deviceDescription = QString("Funcube Dongle");
qDebug("FCDInput::start");
return true;
}
@ -198,7 +196,7 @@ void FCDInput::applySettings(const Settings& settings, bool force)
{
bool signalChange = false;
if ((m_settings.centerFrequency != settings.centerFrequency))
if ((m_settings.centerFrequency != settings.centerFrequency) || force)
{
qDebug() << "FCDInput::applySettings: fc: " << settings.centerFrequency;
m_settings.centerFrequency = settings.centerFrequency;

View File

@ -145,11 +145,14 @@ bool FCDInput::start(int device)
return false;
}
m_deviceDescription = QString("Funcube Dongle");
/* Apply settings before streaming to avoid bus contention;
* there is very little spare bandwidth on a full speed USB device.
* Failure is harmless if no device is found */
* Failure is harmless if no device is found
* ... This is rubbish...*/
applySettings(m_settings, true);
//applySettings(m_settings, true);
if(!m_sampleFifo.setSize(96000*4))
{
@ -163,7 +166,10 @@ bool FCDInput::start(int device)
return false;
}
m_deviceDescription = QString("Funcube Dongle");
m_FCDThread->startWork();
mutexLocker.unlock();
applySettings(m_settings, true);
qDebug("FCDInput::started");
return true;
@ -221,7 +227,7 @@ void FCDInput::applySettings(const Settings& settings, bool force)
{
bool signalChange = false;
if ((m_settings.centerFrequency != settings.centerFrequency))
if ((m_settings.centerFrequency != settings.centerFrequency) || force)
{
qDebug() << "FCDInput::applySettings: fc: " << settings.centerFrequency;
m_settings.centerFrequency = settings.centerFrequency;

View File

@ -36,6 +36,20 @@ FCDThread::~FCDThread()
{
}
void FCDThread::startWork()
{
m_startWaitMutex.lock();
start();
while(!m_running)
{
m_startWaiter.wait(&m_startWaitMutex, 100);
}
m_startWaitMutex.unlock();
}
void FCDThread::stopWork()
{
m_running = false;

View File

@ -35,10 +35,11 @@ public:
FCDThread(SampleFifo* sampleFifo, QObject* parent = NULL);
~FCDThread();
void startWork();
void stopWork();
bool OpenSource(const char *filename);
void CloseSource();
int work(int n_items);
private:
snd_pcm_format_t fcd_format;
snd_pcm_t* fcd_handle;
@ -51,6 +52,6 @@ private:
SampleFifo* m_sampleFifo;
void run();
int work(int n_items);
};
#endif // INCLUDE_FCDTHREAD_H