1
0
mirror of https://github.com/f4exb/sdrangel.git synced 2025-02-03 09:44:01 -05:00

Deep redesign: debug phase #2: App starting

This commit is contained in:
f4exb 2015-08-18 02:47:14 +02:00
parent d23da25354
commit d6ae378e52
34 changed files with 154 additions and 129 deletions

View File

@ -153,6 +153,7 @@ private:
AudioFifo* m_audioFifo;
};
/*
class SDRANGELOVE_API DSPConfigureSpectrumVis : public Message {
MESSAGE_CLASS_DECLARATION
@ -172,7 +173,7 @@ private:
int m_fftSize;
int m_overlapPercent;
FFTWindow::Function m_window;
};
};*/
class SDRANGELOVE_API DSPConfigureCorrection : public Message {
MESSAGE_CLASS_DECLARATION

View File

@ -127,7 +127,7 @@ private slots:
void handleData(); //!< Handle data when samples from source FIFO are ready to be processed
void handleSourceMessages(); //!< Handle source message output
void handleInputMessages(); //!< Handle input message queue
void handleSynchronousMessages(const Message& message); //!< Handle synchronous messages with the thread
void handleSynchronousMessages(); //!< Handle synchronous messages with the thread
};
#endif // INCLUDE_DSPENGINE_H

View File

@ -5,12 +5,35 @@
#include "dsp/fftengine.h"
#include "fftwindow.h"
#include "util/export.h"
#include "util/message.h"
class GLSpectrum;
class MessageQueue;
class SDRANGELOVE_API SpectrumVis : public SampleSink {
public:
class SDRANGELOVE_API MsgConfigureSpectrumVis : public Message {
MESSAGE_CLASS_DECLARATION
public:
MsgConfigureSpectrumVis(int fftSize, int overlapPercent, FFTWindow::Function window) :
Message(),
m_fftSize(fftSize),
m_overlapPercent(overlapPercent),
m_window(window)
{ }
int getFFTSize() const { return m_fftSize; }
int getOverlapPercent() const { return m_overlapPercent; }
FFTWindow::Function getWindow() const { return m_window; }
private:
int m_fftSize;
int m_overlapPercent;
FFTWindow::Function m_window;
};
SpectrumVis(GLSpectrum* glSpectrum = NULL);
virtual ~SpectrumVis();

View File

@ -21,6 +21,7 @@
#include <QMainWindow>
#include <QTimer>
#include "settings/settings.h"
#include "util/messagequeue.h"
#include "util/export.h"
class QLabel;
@ -36,7 +37,6 @@ class SampleSource;
class PluginAPI;
class PluginGUI;
class ChannelMarker;
class MessageQueue;
class PluginManager;
class PluginInterface;
@ -51,7 +51,7 @@ public:
explicit MainWindow(QWidget* parent = 0);
~MainWindow();
MessageQueue* getMessageQueue() { return m_messageQueue; }
MessageQueue* getInputMessageQueue() { return &m_inputMessageQueue; }
void addChannelCreateAction(QAction* action);
void addChannelRollup(QWidget* widget);
@ -73,7 +73,7 @@ private:
AudioDeviceInfo* m_audioDeviceInfo;
MessageQueue* m_messageQueue;
MessageQueue m_inputMessageQueue;
Settings m_settings;

View File

@ -120,8 +120,8 @@ private:
SampleSourceRegistrations m_sampleSourceRegistrations;
SampleSourceDevices m_sampleSourceDevices;
QString m_sampleSource;
PluginGUI* m_sampleSourceInstance;
QString m_sampleSourceName;
PluginGUI* m_sampleSourcePluginGUI;
void loadPlugins(const QDir& dir);
void renameChannelInstances();

View File

@ -9,6 +9,7 @@
class Message;
class SDRANGELOVE_API SampleSink : public QObject {
Q_OBJECT
public:
SampleSink();
virtual ~SampleSink();
@ -22,9 +23,11 @@ public:
MessageQueue *getOutputMessageQueue() { return &m_outputMessageQueue; } //!< Get the queue for asynchronous outbound communication
protected:
void handleInputMessages();
MessageQueue m_inputMessageQueue; //!< Queue for asynchronous inbound communication
MessageQueue m_outputMessageQueue; //!< Queue for asynchronous outbound communication
protected slots:
void handleInputMessages();
};
#endif // INCLUDE_SAMPLESINK_H

View File

@ -45,7 +45,7 @@ public:
void start(); //!< this thread start()
void stop(); //!< this thread exit() and wait()
bool sendWaitSink(const Message& cmd); //!< Send message to sink synchronously
bool sendWaitSink(Message& cmd); //!< Send message to sink synchronously
void feed(SampleVector::const_iterator& begin, SampleVector::const_iterator& end, bool positiveOnly); //!< Feed sink with samples
QString getSampleSinkObjectName() const;
@ -56,7 +56,9 @@ protected:
private:
void run(); //!< this thread run() method
void handleSynchronousMessages(const Message& message); //!< Handle synchronous messages with the thread
private slots:
void handleSynchronousMessages(); //!< Handle synchronous messages with the thread
};
#endif // INCLUDE_THREADEDSAMPLESINK_H

View File

@ -40,7 +40,7 @@ public:
virtual PluginGUI* createChannel(const QString& channelName) { return NULL; }
virtual SampleSourceDevices enumSampleSources() { return SampleSourceDevices(); }
virtual PluginGUI* createSampleSource(const QString& sourceName, const QByteArray& address) { return NULL; }
virtual PluginGUI* createSampleSourcePluginGUI(const QString& sourceName, const QByteArray& address) { return NULL; }
};
Q_DECLARE_INTERFACE(PluginInterface, "de.maintech.SDRangelove.PluginInterface/0.1");

View File

@ -36,16 +36,18 @@ public:
SyncMessenger();
~SyncMessenger();
int sendWait(const Message& message, unsigned long msPollTime = 100); //!< Send message and waits for its process completion
int sendWait(Message& message, unsigned long msPollTime = 100); //!< Send message and waits for its process completion
Message* getMessage() const { return m_message; }
void done(int result = 0); //!< Processing of the message is complete
signals:
void messageSent(const Message& message);
void messageSent();
protected:
QWaitCondition m_waitCondition;
QMutex m_mutex;
QAtomicInt m_complete;
Message *m_message;
int m_result;
};

View File

@ -64,7 +64,7 @@ PluginInterface::SampleSourceDevices BlderfPlugin::enumSampleSources()
return result;
}
PluginGUI* BlderfPlugin::createSampleSource(const QString& sourceName, const QByteArray& address)
PluginGUI* BlderfPlugin::createSampleSourcePluginGUI(const QString& sourceName, const QByteArray& address)
{
if(sourceName == "org.osmocom.sdr.samplesource.bladerf") {
BladerfGui* gui = new BladerfGui(m_pluginAPI);

View File

@ -32,7 +32,7 @@ public:
void initPlugin(PluginAPI* pluginAPI);
SampleSourceDevices enumSampleSources();
PluginGUI* createSampleSource(const QString& sourceName, const QByteArray& address);
PluginGUI* createSampleSourcePluginGUI(const QString& sourceName, const QByteArray& address);
private:
static const PluginDescriptor m_pluginDescriptor;

View File

@ -43,7 +43,7 @@ PluginInterface::SampleSourceDevices FCDPlugin::enumSampleSources()
return result;
}
PluginGUI* FCDPlugin::createSampleSource(const QString& sourceName, const QByteArray& address)
PluginGUI* FCDPlugin::createSampleSourcePluginGUI(const QString& sourceName, const QByteArray& address)
{
if(sourceName == "org.osmocom.sdr.samplesource.fcd") {
FCDGui* gui = new FCDGui(m_pluginAPI);

View File

@ -16,7 +16,7 @@ public:
void initPlugin(PluginAPI* pluginAPI);
SampleSourceDevices enumSampleSources();
PluginGUI* createSampleSource(const QString& sourceName, const QByteArray& address);
PluginGUI* createSampleSourcePluginGUI(const QString& sourceName, const QByteArray& address);
private:
static const PluginDescriptor m_pluginDescriptor;

View File

@ -65,7 +65,7 @@ PluginInterface::SampleSourceDevices FileSourcePlugin::enumSampleSources()
return result;
}
PluginGUI* FileSourcePlugin::createSampleSource(const QString& sourceName, const QByteArray& address)
PluginGUI* FileSourcePlugin::createSampleSourcePluginGUI(const QString& sourceName, const QByteArray& address)
{
if(sourceName == "org.osmocom.sdr.samplesource.filesource") {
FileSourceGui* gui = new FileSourceGui(m_pluginAPI);

View File

@ -32,7 +32,7 @@ public:
void initPlugin(PluginAPI* pluginAPI);
SampleSourceDevices enumSampleSources();
PluginGUI* createSampleSource(const QString& sourceName, const QByteArray& address);
PluginGUI* createSampleSourcePluginGUI(const QString& sourceName, const QByteArray& address);
private:
static const PluginDescriptor m_pluginDescriptor;

View File

@ -40,7 +40,7 @@ PluginInterface::SampleSourceDevices GNURadioPlugin::enumSampleSources()
return result;
}
PluginGUI* GNURadioPlugin::createSampleSource(const QString& sourceName, const QByteArray& address)
PluginGUI* GNURadioPlugin::createSampleSourcePluginGUI(const QString& sourceName, const QByteArray& address)
{
if(sourceName == "org.osmocom.sdr.samplesource.gr-osmosdr") {
GNURadioGui* gui = new GNURadioGui(m_pluginAPI);

View File

@ -16,7 +16,7 @@ public:
void initPlugin(PluginAPI* pluginAPI);
SampleSourceDevices enumSampleSources();
PluginGUI* createSampleSource(const QString& sourceName, const QByteArray& address);
PluginGUI* createSampleSourcePluginGUI(const QString& sourceName, const QByteArray& address);
private:
static const PluginDescriptor m_pluginDescriptor;

View File

@ -57,7 +57,7 @@ PluginInterface::SampleSourceDevices OsmoSDRPlugin::enumSampleSources()
return result;
}
PluginGUI* OsmoSDRPlugin::createSampleSource(const QString& sourceName, const QByteArray& address)
PluginGUI* OsmoSDRPlugin::createSampleSourcePluginGUI(const QString& sourceName, const QByteArray& address)
{
if(sourceName == "org.osmocom.sdr.samplesource.osmo-sdr") {
OsmoSDRGui* gui = new OsmoSDRGui(m_pluginAPI);

View File

@ -16,7 +16,7 @@ public:
void initPlugin(PluginAPI* pluginAPI);
SampleSourceDevices enumSampleSources();
PluginGUI* createSampleSource(const QString& sourceName, const QByteArray& address);
PluginGUI* createSampleSourcePluginGUI(const QString& sourceName, const QByteArray& address);
private:
static const PluginDescriptor m_pluginDescriptor;

View File

@ -55,7 +55,7 @@ PluginInterface::SampleSourceDevices RTLSDRPlugin::enumSampleSources()
return result;
}
PluginGUI* RTLSDRPlugin::createSampleSource(const QString& sourceName, const QByteArray& address)
PluginGUI* RTLSDRPlugin::createSampleSourcePluginGUI(const QString& sourceName, const QByteArray& address)
{
if(sourceName == "org.osmocom.sdr.samplesource.rtl-sdr") {
RTLSDRGui* gui = new RTLSDRGui(m_pluginAPI);

View File

@ -16,7 +16,7 @@ public:
void initPlugin(PluginAPI* pluginAPI);
SampleSourceDevices enumSampleSources();
PluginGUI* createSampleSource(const QString& sourceName, const QByteArray& address);
PluginGUI* createSampleSourcePluginGUI(const QString& sourceName, const QByteArray& address);
private:
static const PluginDescriptor m_pluginDescriptor;

View File

@ -43,7 +43,7 @@ PluginInterface::SampleSourceDevices V4LPlugin::enumSampleSources()
return result;
}
PluginGUI* V4LPlugin::createSampleSource(const QString& sourceName, const QByteArray& address)
PluginGUI* V4LPlugin::createSampleSourcePluginGUI(const QString& sourceName, const QByteArray& address)
{
if(sourceName == "org.osmocom.sdr.samplesource.v4l") {
V4LGui* gui = new V4LGui(m_pluginAPI);

View File

@ -16,7 +16,7 @@ public:
void initPlugin(PluginAPI* pluginAPI);
SampleSourceDevices enumSampleSources();
PluginGUI* createSampleSource(const QString& sourceName, const QByteArray& address);
PluginGUI* createSampleSourcePluginGUI(const QString& sourceName, const QByteArray& address);
private:
static const PluginDescriptor m_pluginDescriptor;

View File

@ -44,7 +44,7 @@ PluginInterface::SampleSourceDevices V4LPlugin::enumSampleSources()
return result;
}
PluginGUI* V4LPlugin::createSampleSource(const QString& sourceName, const QByteArray& address)
PluginGUI* V4LPlugin::createSampleSourcePluginGUI(const QString& sourceName, const QByteArray& address)
{
if(sourceName == "org.osmocom.sdr.samplesource.v4l") {
V4LGui* gui = new V4LGui(m_pluginAPI);

View File

@ -16,7 +16,7 @@ public:
void initPlugin(PluginAPI* pluginAPI);
SampleSourceDevices enumSampleSources();
PluginGUI* createSampleSource(const QString& sourceName, const QByteArray& address);
PluginGUI* createSampleSourcePluginGUI(const QString& sourceName, const QByteArray& address);
private:
static const PluginDescriptor m_pluginDescriptor;

View File

@ -31,7 +31,7 @@ MESSAGE_CLASS_DEFINITION(DSPAddThreadedSink, Message)
MESSAGE_CLASS_DEFINITION(DSPRemoveThreadedSink, Message)
MESSAGE_CLASS_DEFINITION(DSPAddAudioSink, Message)
MESSAGE_CLASS_DEFINITION(DSPRemoveAudioSink, Message)
MESSAGE_CLASS_DEFINITION(DSPConfigureSpectrumVis, Message)
//MESSAGE_CLASS_DEFINITION(DSPConfigureSpectrumVis, Message)
MESSAGE_CLASS_DEFINITION(DSPConfigureCorrection, Message)
MESSAGE_CLASS_DEFINITION(DSPEngineReport, Message)
MESSAGE_CLASS_DEFINITION(DSPConfigureScopeVis, Message)

View File

@ -59,11 +59,11 @@ void DSPEngine::run()
qDebug() << "DSPEngine::run";
connect(&m_inputMessageQueue, SIGNAL(messageEnqueued()), this, SLOT(handleInputMessages()), Qt::QueuedConnection);
connect(&m_syncMessenger, SIGNAL(messageSent(const Message&)), this, SLOT(handleSynchronousMessages(const Message&)), Qt::QueuedConnection);
connect(&m_syncMessenger, SIGNAL(messageSent()), this, SLOT(handleSynchronousMessages()), Qt::QueuedConnection);
m_state = StIdle;
//handleInputMessages();
m_syncMessenger.done(); // Release start() that is waiting in main trhead
exec();
}
@ -87,7 +87,7 @@ bool DSPEngine::initAcquisition()
qDebug() << "DSPEngine::initAcquisition";
DSPAcquisitionInit cmd;
return m_syncMessenger.sendWait(cmd) == StReady;
return m_syncMessenger.sendWait(cmd) == StReady;
}
bool DSPEngine::startAcquisition()
@ -189,8 +189,6 @@ void DSPEngine::dcOffset(SampleVector::iterator begin, SampleVector::iterator en
int qo = 0;
Sample corr((qint16)m_iOffset, (qint16)m_qOffset);
qDebug() << "DSPEngine::dcOffset";
// sum and correct in one pass
for(SampleVector::iterator it = begin; it < end; it++)
{
@ -212,8 +210,6 @@ void DSPEngine::imbalance(SampleVector::iterator begin, SampleVector::iterator e
int qMin = 0;
int qMax = 0;
qDebug() << "DSPEngine::imbalance";
// find value ranges for both I and Q
// both intervals should be same same size (for a perfect circle)
for (SampleVector::iterator it = begin; it < end; it++)
@ -258,8 +254,6 @@ void DSPEngine::imbalance(SampleVector::iterator begin, SampleVector::iterator e
void DSPEngine::work()
{
qDebug() << "DSPEngine::work";
SampleFifo* sampleFifo = m_sampleSource->getSampleFifo();
std::size_t samplesDone = 0;
bool positiveOnly = false;
@ -503,90 +497,77 @@ void DSPEngine::handleSetSource(SampleSource* source)
void DSPEngine::handleData()
{
qDebug() << "DSPEngine::handleData";
if(m_state == StRunning)
{
work();
}
}
void DSPEngine::handleSynchronousMessages(const Message& message)
void DSPEngine::handleSynchronousMessages()
{
qDebug() << "DSPEngine::handleSynchronousMessages";
Message *message = m_syncMessenger.getMessage();
if (DSPExit::match(message))
if (DSPExit::match(*message))
{
gotoIdle();
m_state = StNotStarted;
exit();
m_syncMessenger.done(m_state);
}
else if (DSPAcquisitionInit::match(message))
else if (DSPAcquisitionInit::match(*message))
{
m_state = gotoIdle();
if(m_state == StIdle) {
m_state = gotoInit(); // State goes ready if init is performed
}
m_syncMessenger.done(m_state);
}
else if (DSPAcquisitionStart::match(message))
else if (DSPAcquisitionStart::match(*message))
{
if(m_state == StReady) {
m_state = gotoRunning();
}
m_syncMessenger.done(m_state);
}
else if (DSPAcquisitionStop::match(message))
else if (DSPAcquisitionStop::match(*message))
{
m_state = gotoIdle();
m_syncMessenger.done(m_state);
}
else if (DSPGetSourceDeviceDescription::match(message))
else if (DSPGetSourceDeviceDescription::match(*message))
{
((DSPGetSourceDeviceDescription&) message).setDeviceDescription(m_deviceDescription);
m_syncMessenger.done(m_state);
((DSPGetSourceDeviceDescription*) message)->setDeviceDescription(m_deviceDescription);
}
else if (DSPGetErrorMessage::match(message))
else if (DSPGetErrorMessage::match(*message))
{
((DSPGetErrorMessage&) message).setErrorMessage(m_errorMessage);
m_syncMessenger.done(m_state);
((DSPGetErrorMessage*) message)->setErrorMessage(m_errorMessage);
}
else if (DSPSetSource::match(message)) {
handleSetSource(((DSPSetSource&) message).getSampleSource());
m_syncMessenger.done(m_state);
else if (DSPSetSource::match(*message)) {
handleSetSource(((DSPSetSource*) message)->getSampleSource());
}
else if (DSPAddSink::match(message))
else if (DSPAddSink::match(*message))
{
SampleSink* sink = ((DSPAddSink&)message).getSampleSink();
SampleSink* sink = ((DSPAddSink*) message)->getSampleSink();
m_sampleSinks.push_back(sink);
m_syncMessenger.done(m_state);
}
else if (DSPRemoveSink::match(message))
else if (DSPRemoveSink::match(*message))
{
SampleSink* sink = ((DSPRemoveSink&)message).getSampleSink();
SampleSink* sink = ((DSPRemoveSink*) message)->getSampleSink();
if(m_state == StRunning) {
sink->stop();
}
m_sampleSinks.remove(sink);
m_syncMessenger.done(m_state);
}
else if (DSPAddThreadedSink::match(message))
else if (DSPAddThreadedSink::match(*message))
{
SampleSink* sink = ((DSPAddThreadedSink&) message).getSampleSink();
SampleSink* sink = ((DSPAddThreadedSink*) message)->getSampleSink();
ThreadedSampleSink *threadedSink = new ThreadedSampleSink(sink);
m_threadedSampleSinks.push_back(threadedSink);
threadedSink->start();
m_syncMessenger.done(m_state);
}
else if (DSPRemoveThreadedSink::match(message))
else if (DSPRemoveThreadedSink::match(*message))
{
SampleSink* sink = ((DSPRemoveThreadedSink&) message).getSampleSink();
SampleSink* sink = ((DSPRemoveThreadedSink*) message)->getSampleSink();
ThreadedSampleSinks::iterator threadedSinkIt = m_threadedSampleSinks.begin();
for (; threadedSinkIt != m_threadedSampleSinks.end(); ++threadedSinkIt)
@ -608,15 +589,13 @@ void DSPEngine::handleSynchronousMessages(const Message& message)
delete (*threadedSinkIt);
}
}
else if (DSPAddAudioSink::match(message))
else if (DSPAddAudioSink::match(*message))
{
m_audioSink.addFifo(((DSPAddAudioSink&) message).getAudioFifo());
m_syncMessenger.done(m_state);
m_audioSink.addFifo(((DSPAddAudioSink*) message)->getAudioFifo());
}
else if (DSPRemoveAudioSink::match(message))
else if (DSPRemoveAudioSink::match(*message))
{
m_audioSink.removeFifo(((DSPRemoveAudioSink&) message).getAudioFifo());
m_syncMessenger.done(m_state);
m_audioSink.removeFifo(((DSPRemoveAudioSink*) message)->getAudioFifo());
}
m_syncMessenger.done(m_state);
@ -630,7 +609,7 @@ void DSPEngine::handleInputMessages()
while ((message = m_inputMessageQueue.pop()) != 0)
{
qDebug("DSPEngine::handleInputMessages: Message: %s", message->getIdentifier());
qDebug(" - message: %s", message->getIdentifier());
if (DSPConfigureCorrection::match(*message))
{

View File

@ -3,7 +3,7 @@
SampleSink::SampleSink()
{
connect(&m_inputMessageQueue, SIGNAL(messageEnqueued()), this, SLOT(handleInputMessage()));
connect(&m_inputMessageQueue, SIGNAL(messageEnqueued()), this, SLOT(handleInputMessages()));
}
SampleSink::~SampleSink()

View File

@ -12,6 +12,8 @@ double log2f(double n)
}
#endif
MESSAGE_CLASS_DEFINITION(SpectrumVis::MsgConfigureSpectrumVis, Message)
SpectrumVis::SpectrumVis(GLSpectrum* glSpectrum) :
SampleSink(),
m_fft(FFTEngine::create()),
@ -32,7 +34,7 @@ SpectrumVis::~SpectrumVis()
void SpectrumVis::configure(MessageQueue* msgQueue, int fftSize, int overlapPercent, FFTWindow::Function window)
{
DSPConfigureSpectrumVis* cmd = new DSPConfigureSpectrumVis(fftSize, overlapPercent, window);
MsgConfigureSpectrumVis* cmd = new MsgConfigureSpectrumVis(fftSize, overlapPercent, window);
msgQueue->push(cmd);
}
@ -138,9 +140,9 @@ void SpectrumVis::stop()
bool SpectrumVis::handleMessage(const Message& message)
{
if (DSPConfigureSpectrumVis::match(message))
if (MsgConfigureSpectrumVis::match(message))
{
DSPConfigureSpectrumVis& conf = (DSPConfigureSpectrumVis&) message;
MsgConfigureSpectrumVis& conf = (MsgConfigureSpectrumVis&) message;
handleConfigure(conf.getFFTSize(), conf.getOverlapPercent(), conf.getWindow());
return true;
}

View File

@ -1,6 +1,7 @@
#include <QThread>
#include <QDebug>
#include "dsp/threadedsamplesink.h"
#include "dsp/dspcommands.h"
#include "util/message.h"
ThreadedSampleSink::ThreadedSampleSink(SampleSink* sampleSink) :
@ -16,18 +17,24 @@ ThreadedSampleSink::~ThreadedSampleSink()
void ThreadedSampleSink::start()
{
qDebug() << "ThreadedSampleSink::start";
DSPPing cmd;
QThread::start();
m_syncMessenger.sendWait(cmd);
}
void ThreadedSampleSink::stop()
{
qDebug() << "ThreadedSampleSink::stop";
exit();
wait();
}
void ThreadedSampleSink::run()
{
connect(&m_syncMessenger, SIGNAL(messageSent(const Message&)), this, SLOT(handleSynchronousMessages(const Message&)), Qt::QueuedConnection);
qDebug() << "ThreadedSampleSink::run";
connect(&m_syncMessenger, SIGNAL(messageSent()), this, SLOT(handleSynchronousMessages()), Qt::QueuedConnection);
m_syncMessenger.done(); // Release start() that is waiting in calling trhead
exec();
}
@ -36,14 +43,17 @@ void ThreadedSampleSink::feed(SampleVector::const_iterator& begin, SampleVector:
m_sampleSink->feed(begin, end, positiveOnly);
}
bool ThreadedSampleSink::sendWaitSink(const Message& cmd)
bool ThreadedSampleSink::sendWaitSink(Message& cmd)
{
m_syncMessenger.sendWait(cmd);
}
void ThreadedSampleSink::handleSynchronousMessages(const Message& message)
void ThreadedSampleSink::handleSynchronousMessages()
{
m_sampleSink->handleMessage(message); // just delegate to the sink
qDebug() << "ThreadedSampleSink::handleSynchronousMessages";
Message *message = m_syncMessenger.getMessage();
qDebug() << " - message: " << message->getIdentifier();
m_sampleSink->handleMessage(*message); // just delegate to the sink
m_syncMessenger.done();
}

View File

@ -43,7 +43,6 @@ MainWindow::MainWindow(QWidget* parent) :
QMainWindow(parent),
ui(new Ui::MainWindow),
m_audioDeviceInfo(new AudioDeviceInfo),
m_messageQueue(new MessageQueue),
m_settings(),
m_dspEngine(DSPEngine::instance()),
m_lastEngineState((DSPEngine::State)-1),
@ -85,7 +84,7 @@ MainWindow::MainWindow(QWidget* parent) :
ui->menu_Window->addAction(ui->presetDock->toggleViewAction());
ui->menu_Window->addAction(ui->channelDock->toggleViewAction());
connect(m_messageQueue, SIGNAL(messageEnqueued()), this, SLOT(handleMessages()), Qt::QueuedConnection);
connect(&m_inputMessageQueue, SIGNAL(messageEnqueued()), this, SLOT(handleMessages()), Qt::QueuedConnection);
//connect(m_dspEngine->getReportQueue(), SIGNAL(messageEnqueued()), this, SLOT(handleDSPMessages()), Qt::QueuedConnection);
connect(&m_statusTimer, SIGNAL(timeout()), this, SLOT(updateStatus()));
@ -108,7 +107,7 @@ MainWindow::MainWindow(QWidget* parent) :
m_dspEngine->addSink(m_fileSink);
ui->glSpectrum->connectTimer(m_masterTimer);
ui->glSpectrumGUI->setBuddies(m_dspEngine->getInputMessageQueue(), m_spectrumVis, ui->glSpectrum);
ui->glSpectrumGUI->setBuddies(m_spectrumVis->getInputMessageQueue(), m_spectrumVis, ui->glSpectrum);
loadSettings();
@ -141,7 +140,6 @@ MainWindow::~MainWindow()
m_dspEngine->stop();
delete m_messageQueue;
delete ui;
}
@ -345,7 +343,7 @@ void MainWindow::handleMessages()
{
Message* message;
while ((message = m_messageQueue->pop()) != 0)
while ((message = m_inputMessageQueue.pop()) != 0)
{
qDebug("Message: %s", message->getIdentifier());
std::cerr << "MainWindow::handleMessages: " << message->getIdentifier() << std::endl;

View File

@ -16,7 +16,7 @@ QDockWidget* PluginAPI::createMainWindowDock(Qt::DockWidgetArea dockWidgetArea,
MessageQueue* PluginAPI::getMainWindowMessageQueue()
{
return m_mainWindow->getMessageQueue();
return m_mainWindow->getInputMessageQueue();
}
void PluginAPI::setInputGUI(QWidget* inputGUI)

View File

@ -16,8 +16,8 @@ PluginManager::PluginManager(MainWindow* mainWindow, DSPEngine* dspEngine, QObje
m_pluginAPI(this, mainWindow, dspEngine),
m_mainWindow(mainWindow),
m_dspEngine(dspEngine),
m_sampleSource(),
m_sampleSourceInstance(NULL)
m_sampleSourceName(),
m_sampleSourcePluginGUI(NULL)
{
}
@ -123,12 +123,16 @@ void PluginManager::loadSettings(const Preset* preset)
renameChannelInstances();
if(m_sampleSourceInstance != NULL) {
qDebug() << "m_sampleSourceInstance->deserializeGeneral (" << m_sampleSourceInstance->getName().toStdString().c_str() << ")";
m_sampleSourceInstance->deserializeGeneral(preset->getSourceGeneralConfig());
if(m_sampleSource == preset->getSource()) {
qDebug() << "m_sampleSourceInstance->deserialize";
m_sampleSourceInstance->deserialize(preset->getSourceConfig());
if(m_sampleSourcePluginGUI != 0)
{
/* FIXME: remove in pluginGUI and preset
qDebug() << "m_sampleSourcePluginGUI->deserializeGeneral (" << m_sampleSourcePluginGUI->getName().toStdString().c_str() << ")";
m_sampleSourcePluginGUI->deserializeGeneral(preset->getSourceGeneralConfig());
*/
if(m_sampleSourceName == preset->getSource())
{
qDebug() << "m_sampleSourcePluginGUI->deserialize (" << m_sampleSourceName .toStdString().c_str() << ")";
m_sampleSourcePluginGUI->deserialize(preset->getSourceConfig());
}
}
}
@ -148,9 +152,9 @@ bool PluginManager::ChannelInstanceRegistration::operator<(const ChannelInstance
void PluginManager::saveSettings(Preset* preset)
{
if(m_sampleSourceInstance != NULL) {
preset->setSourceConfig(m_sampleSource, m_sampleSourceInstance->serializeGeneral(), m_sampleSourceInstance->serialize());
preset->setCenterFrequency(m_sampleSourceInstance->getCenterFrequency());
if(m_sampleSourcePluginGUI != NULL) {
preset->setSourceConfig(m_sampleSourceName, m_sampleSourcePluginGUI->serializeGeneral(), m_sampleSourcePluginGUI->serialize());
preset->setCenterFrequency(m_sampleSourcePluginGUI->getCenterFrequency());
} else {
preset->setSourceConfig(QString::null, QByteArray(), QByteArray());
}
@ -169,21 +173,21 @@ void PluginManager::freeAll()
reg.m_gui->destroy();
}
if(m_sampleSourceInstance != NULL) {
if(m_sampleSourcePluginGUI != NULL) {
m_dspEngine->setSource(NULL);
m_sampleSourceInstance->destroy();
m_sampleSourceInstance = NULL;
m_sampleSource.clear();
m_sampleSourcePluginGUI->destroy();
m_sampleSourcePluginGUI = NULL;
m_sampleSourceName.clear();
}
}
bool PluginManager::handleMessage(const Message& message)
{
if (m_sampleSourceInstance != 0)
if (m_sampleSourcePluginGUI != 0)
{
if ((message.getDestination() == 0) || (message.getDestination() == m_sampleSourceInstance))
if ((message.getDestination() == 0) || (message.getDestination() == m_sampleSourcePluginGUI))
{
if (m_sampleSourceInstance->handleMessage(message))
if (m_sampleSourcePluginGUI->handleMessage(message))
{
return true;
}
@ -227,18 +231,18 @@ int PluginManager::selectSampleSource(int index)
m_dspEngine->stopAcquistion();
if(m_sampleSourceInstance != NULL) {
if(m_sampleSourcePluginGUI != NULL) {
m_dspEngine->stopAcquistion();
m_dspEngine->setSource(NULL);
m_sampleSourceInstance->destroy();
m_sampleSourceInstance = NULL;
m_sampleSource.clear();
m_sampleSourcePluginGUI->destroy();
m_sampleSourcePluginGUI = NULL;
m_sampleSourceName.clear();
}
if(index == -1) {
if(!m_sampleSource.isEmpty()) {
if(!m_sampleSourceName.isEmpty()) {
for(int i = 0; i < m_sampleSourceDevices.count(); i++) {
if(m_sampleSourceDevices[i].m_sourceName == m_sampleSource) {
if(m_sampleSourceDevices[i].m_sourceName == m_sampleSourceName) {
index = i;
break;
}
@ -252,9 +256,9 @@ int PluginManager::selectSampleSource(int index)
if(index == -1)
return -1;
m_sampleSource = m_sampleSourceDevices[index].m_sourceName;
qDebug() << "m_sampleSource at index " << index << " is " << m_sampleSource.toStdString().c_str();
m_sampleSourceInstance = m_sampleSourceDevices[index].m_plugin->createSampleSource(m_sampleSource, m_sampleSourceDevices[index].m_address);
m_sampleSourceName = m_sampleSourceDevices[index].m_sourceName;
qDebug() << "m_sampleSource at index " << index << " is " << m_sampleSourceName.toStdString().c_str();
m_sampleSourcePluginGUI = m_sampleSourceDevices[index].m_plugin->createSampleSourcePluginGUI(m_sampleSourceName, m_sampleSourceDevices[index].m_address);
return index;
}
@ -266,12 +270,12 @@ int PluginManager::selectSampleSource(const QString& source)
m_dspEngine->stopAcquistion();
if(m_sampleSourceInstance != NULL) {
if(m_sampleSourcePluginGUI != NULL) {
m_dspEngine->stopAcquistion();
m_dspEngine->setSource(NULL);
m_sampleSourceInstance->destroy();
m_sampleSourceInstance = NULL;
m_sampleSource.clear();
m_sampleSourcePluginGUI->destroy();
m_sampleSourcePluginGUI = NULL;
m_sampleSourceName.clear();
}
qDebug("finding sample source [%s]", qPrintable(source));
@ -289,9 +293,9 @@ int PluginManager::selectSampleSource(const QString& source)
if(index == -1)
return -1;
m_sampleSource = m_sampleSourceDevices[index].m_sourceName;
qDebug() << "m_sampleSource at index " << index << " is " << m_sampleSource.toStdString().c_str();
m_sampleSourceInstance = m_sampleSourceDevices[index].m_plugin->createSampleSource(m_sampleSource, m_sampleSourceDevices[index].m_address);
m_sampleSourceName = m_sampleSourceDevices[index].m_sourceName;
qDebug() << "m_sampleSource at index " << index << " is " << m_sampleSourceName.toStdString().c_str();
m_sampleSourcePluginGUI = m_sampleSourceDevices[index].m_plugin->createSampleSourcePluginGUI(m_sampleSourceName, m_sampleSourceDevices[index].m_address);
return index;
}

View File

@ -28,12 +28,13 @@ SyncMessenger::SyncMessenger() :
SyncMessenger::~SyncMessenger()
{}
int SyncMessenger::sendWait(const Message& message, unsigned long msPollTime)
int SyncMessenger::sendWait(Message& message, unsigned long msPollTime)
{
m_message = &message;
m_mutex.lock();
m_complete.testAndSetAcquire(0, 1);
emit messageSent(message);
emit messageSent();
while (!m_complete.testAndSetAcquire(0, 1))
{