From d6ae378e52f7ef1b0e681819d4517063e4d81719 Mon Sep 17 00:00:00 2001 From: f4exb Date: Tue, 18 Aug 2015 02:47:14 +0200 Subject: [PATCH] Deep redesign: debug phase #2: App starting --- include-gpl/dsp/dspcommands.h | 3 +- include-gpl/dsp/dspengine.h | 2 +- include-gpl/dsp/spectrumvis.h | 23 ++++++ include-gpl/mainwindow.h | 6 +- include-gpl/plugin/pluginmanager.h | 4 +- include/dsp/samplesink.h | 5 +- include/dsp/threadedsamplesink.h | 6 +- include/plugin/plugininterface.h | 2 +- include/util/syncmessenger.h | 6 +- .../samplesource/bladerf/bladerfplugin.cpp | 2 +- plugins/samplesource/bladerf/bladerfplugin.h | 2 +- plugins/samplesource/fcd/fcdplugin.cpp | 2 +- plugins/samplesource/fcd/fcdplugin.h | 2 +- .../filesource/filesourceplugin.cpp | 2 +- .../filesource/filesourceplugin.h | 2 +- .../samplesource/gnuradio/gnuradioplugin.cpp | 2 +- .../samplesource/gnuradio/gnuradioplugin.h | 2 +- .../samplesource/osmosdr/osmosdrplugin.cpp | 2 +- plugins/samplesource/osmosdr/osmosdrplugin.h | 2 +- plugins/samplesource/rtlsdr/rtlsdrplugin.cpp | 2 +- plugins/samplesource/rtlsdr/rtlsdrplugin.h | 2 +- plugins/samplesource/v4l-msi/v4lplugin.cpp | 2 +- plugins/samplesource/v4l-msi/v4lplugin.h | 2 +- plugins/samplesource/v4l-rtl/v4lplugin.cpp | 2 +- plugins/samplesource/v4l-rtl/v4lplugin.h | 2 +- sdrbase/dsp/dspcommands.cpp | 2 +- sdrbase/dsp/dspengine.cpp | 77 +++++++------------ sdrbase/dsp/samplesink.cpp | 2 +- sdrbase/dsp/spectrumvis.cpp | 8 +- sdrbase/dsp/threadedsamplesink.cpp | 18 ++++- sdrbase/mainwindow.cpp | 8 +- sdrbase/plugin/pluginapi.cpp | 2 +- sdrbase/plugin/pluginmanager.cpp | 72 +++++++++-------- sdrbase/util/syncmessenger.cpp | 5 +- 34 files changed, 154 insertions(+), 129 deletions(-) diff --git a/include-gpl/dsp/dspcommands.h b/include-gpl/dsp/dspcommands.h index 382d35f00..072d50d6d 100644 --- a/include-gpl/dsp/dspcommands.h +++ b/include-gpl/dsp/dspcommands.h @@ -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 diff --git a/include-gpl/dsp/dspengine.h b/include-gpl/dsp/dspengine.h index 38e14769e..77d1fc1e7 100644 --- a/include-gpl/dsp/dspengine.h +++ b/include-gpl/dsp/dspengine.h @@ -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 diff --git a/include-gpl/dsp/spectrumvis.h b/include-gpl/dsp/spectrumvis.h index 0837c61ef..2e1b5e897 100644 --- a/include-gpl/dsp/spectrumvis.h +++ b/include-gpl/dsp/spectrumvis.h @@ -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(); diff --git a/include-gpl/mainwindow.h b/include-gpl/mainwindow.h index bc5c6f202..a1fba92c1 100644 --- a/include-gpl/mainwindow.h +++ b/include-gpl/mainwindow.h @@ -21,6 +21,7 @@ #include #include #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; diff --git a/include-gpl/plugin/pluginmanager.h b/include-gpl/plugin/pluginmanager.h index 1a7966fd5..dc51c0398 100644 --- a/include-gpl/plugin/pluginmanager.h +++ b/include-gpl/plugin/pluginmanager.h @@ -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(); diff --git a/include/dsp/samplesink.h b/include/dsp/samplesink.h index 5b1e9cf1a..6d05820a9 100644 --- a/include/dsp/samplesink.h +++ b/include/dsp/samplesink.h @@ -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 diff --git a/include/dsp/threadedsamplesink.h b/include/dsp/threadedsamplesink.h index 374d5bf81..a3461b219 100644 --- a/include/dsp/threadedsamplesink.h +++ b/include/dsp/threadedsamplesink.h @@ -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 diff --git a/include/plugin/plugininterface.h b/include/plugin/plugininterface.h index edf3f47d9..6cb2109fe 100644 --- a/include/plugin/plugininterface.h +++ b/include/plugin/plugininterface.h @@ -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"); diff --git a/include/util/syncmessenger.h b/include/util/syncmessenger.h index b030784bf..196a45232 100644 --- a/include/util/syncmessenger.h +++ b/include/util/syncmessenger.h @@ -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; }; diff --git a/plugins/samplesource/bladerf/bladerfplugin.cpp b/plugins/samplesource/bladerf/bladerfplugin.cpp index 2a91340f6..07faa42f4 100644 --- a/plugins/samplesource/bladerf/bladerfplugin.cpp +++ b/plugins/samplesource/bladerf/bladerfplugin.cpp @@ -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); diff --git a/plugins/samplesource/bladerf/bladerfplugin.h b/plugins/samplesource/bladerf/bladerfplugin.h index 29b0afbc4..c2b22ae41 100644 --- a/plugins/samplesource/bladerf/bladerfplugin.h +++ b/plugins/samplesource/bladerf/bladerfplugin.h @@ -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; diff --git a/plugins/samplesource/fcd/fcdplugin.cpp b/plugins/samplesource/fcd/fcdplugin.cpp index c6c7ea92b..00a74e3a8 100644 --- a/plugins/samplesource/fcd/fcdplugin.cpp +++ b/plugins/samplesource/fcd/fcdplugin.cpp @@ -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); diff --git a/plugins/samplesource/fcd/fcdplugin.h b/plugins/samplesource/fcd/fcdplugin.h index e9818d812..e8ef29757 100644 --- a/plugins/samplesource/fcd/fcdplugin.h +++ b/plugins/samplesource/fcd/fcdplugin.h @@ -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; diff --git a/plugins/samplesource/filesource/filesourceplugin.cpp b/plugins/samplesource/filesource/filesourceplugin.cpp index 1e95f018a..36c3dfaad 100644 --- a/plugins/samplesource/filesource/filesourceplugin.cpp +++ b/plugins/samplesource/filesource/filesourceplugin.cpp @@ -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); diff --git a/plugins/samplesource/filesource/filesourceplugin.h b/plugins/samplesource/filesource/filesourceplugin.h index a08be1cf1..3ec8e13a2 100644 --- a/plugins/samplesource/filesource/filesourceplugin.h +++ b/plugins/samplesource/filesource/filesourceplugin.h @@ -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; diff --git a/plugins/samplesource/gnuradio/gnuradioplugin.cpp b/plugins/samplesource/gnuradio/gnuradioplugin.cpp index 045b65cf7..6702ad330 100644 --- a/plugins/samplesource/gnuradio/gnuradioplugin.cpp +++ b/plugins/samplesource/gnuradio/gnuradioplugin.cpp @@ -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); diff --git a/plugins/samplesource/gnuradio/gnuradioplugin.h b/plugins/samplesource/gnuradio/gnuradioplugin.h index 0ff434708..a8ca7cc1e 100644 --- a/plugins/samplesource/gnuradio/gnuradioplugin.h +++ b/plugins/samplesource/gnuradio/gnuradioplugin.h @@ -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; diff --git a/plugins/samplesource/osmosdr/osmosdrplugin.cpp b/plugins/samplesource/osmosdr/osmosdrplugin.cpp index 183642d19..907500a79 100644 --- a/plugins/samplesource/osmosdr/osmosdrplugin.cpp +++ b/plugins/samplesource/osmosdr/osmosdrplugin.cpp @@ -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); diff --git a/plugins/samplesource/osmosdr/osmosdrplugin.h b/plugins/samplesource/osmosdr/osmosdrplugin.h index 47f04e72a..6cebebfbf 100644 --- a/plugins/samplesource/osmosdr/osmosdrplugin.h +++ b/plugins/samplesource/osmosdr/osmosdrplugin.h @@ -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; diff --git a/plugins/samplesource/rtlsdr/rtlsdrplugin.cpp b/plugins/samplesource/rtlsdr/rtlsdrplugin.cpp index c49bbef5d..badbde7be 100644 --- a/plugins/samplesource/rtlsdr/rtlsdrplugin.cpp +++ b/plugins/samplesource/rtlsdr/rtlsdrplugin.cpp @@ -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); diff --git a/plugins/samplesource/rtlsdr/rtlsdrplugin.h b/plugins/samplesource/rtlsdr/rtlsdrplugin.h index bd6b9072c..203889e98 100644 --- a/plugins/samplesource/rtlsdr/rtlsdrplugin.h +++ b/plugins/samplesource/rtlsdr/rtlsdrplugin.h @@ -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; diff --git a/plugins/samplesource/v4l-msi/v4lplugin.cpp b/plugins/samplesource/v4l-msi/v4lplugin.cpp index 1d9546075..7d2d663e0 100644 --- a/plugins/samplesource/v4l-msi/v4lplugin.cpp +++ b/plugins/samplesource/v4l-msi/v4lplugin.cpp @@ -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); diff --git a/plugins/samplesource/v4l-msi/v4lplugin.h b/plugins/samplesource/v4l-msi/v4lplugin.h index 5352d4ab9..c4665a93c 100644 --- a/plugins/samplesource/v4l-msi/v4lplugin.h +++ b/plugins/samplesource/v4l-msi/v4lplugin.h @@ -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; diff --git a/plugins/samplesource/v4l-rtl/v4lplugin.cpp b/plugins/samplesource/v4l-rtl/v4lplugin.cpp index 4412f19d1..a39b40be7 100644 --- a/plugins/samplesource/v4l-rtl/v4lplugin.cpp +++ b/plugins/samplesource/v4l-rtl/v4lplugin.cpp @@ -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); diff --git a/plugins/samplesource/v4l-rtl/v4lplugin.h b/plugins/samplesource/v4l-rtl/v4lplugin.h index 5352d4ab9..c4665a93c 100644 --- a/plugins/samplesource/v4l-rtl/v4lplugin.h +++ b/plugins/samplesource/v4l-rtl/v4lplugin.h @@ -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; diff --git a/sdrbase/dsp/dspcommands.cpp b/sdrbase/dsp/dspcommands.cpp index 364a04e13..ba39c2ac2 100644 --- a/sdrbase/dsp/dspcommands.cpp +++ b/sdrbase/dsp/dspcommands.cpp @@ -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) diff --git a/sdrbase/dsp/dspengine.cpp b/sdrbase/dsp/dspengine.cpp index 660c8e7ae..fbfe32e89 100644 --- a/sdrbase/dsp/dspengine.cpp +++ b/sdrbase/dsp/dspengine.cpp @@ -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)) { diff --git a/sdrbase/dsp/samplesink.cpp b/sdrbase/dsp/samplesink.cpp index 87a0bd64c..242c32e83 100644 --- a/sdrbase/dsp/samplesink.cpp +++ b/sdrbase/dsp/samplesink.cpp @@ -3,7 +3,7 @@ SampleSink::SampleSink() { - connect(&m_inputMessageQueue, SIGNAL(messageEnqueued()), this, SLOT(handleInputMessage())); + connect(&m_inputMessageQueue, SIGNAL(messageEnqueued()), this, SLOT(handleInputMessages())); } SampleSink::~SampleSink() diff --git a/sdrbase/dsp/spectrumvis.cpp b/sdrbase/dsp/spectrumvis.cpp index 5f85f50b3..22f1b1d38 100644 --- a/sdrbase/dsp/spectrumvis.cpp +++ b/sdrbase/dsp/spectrumvis.cpp @@ -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; } diff --git a/sdrbase/dsp/threadedsamplesink.cpp b/sdrbase/dsp/threadedsamplesink.cpp index 913726b12..d539de251 100644 --- a/sdrbase/dsp/threadedsamplesink.cpp +++ b/sdrbase/dsp/threadedsamplesink.cpp @@ -1,6 +1,7 @@ #include #include #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(); } diff --git a/sdrbase/mainwindow.cpp b/sdrbase/mainwindow.cpp index 18341643b..15d920e9a 100644 --- a/sdrbase/mainwindow.cpp +++ b/sdrbase/mainwindow.cpp @@ -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; diff --git a/sdrbase/plugin/pluginapi.cpp b/sdrbase/plugin/pluginapi.cpp index c580d8456..78966fc5d 100644 --- a/sdrbase/plugin/pluginapi.cpp +++ b/sdrbase/plugin/pluginapi.cpp @@ -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) diff --git a/sdrbase/plugin/pluginmanager.cpp b/sdrbase/plugin/pluginmanager.cpp index 5d57264df..b82fd2a93 100644 --- a/sdrbase/plugin/pluginmanager.cpp +++ b/sdrbase/plugin/pluginmanager.cpp @@ -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; } diff --git a/sdrbase/util/syncmessenger.cpp b/sdrbase/util/syncmessenger.cpp index 3e151ed76..2a8ea69eb 100644 --- a/sdrbase/util/syncmessenger.cpp +++ b/sdrbase/util/syncmessenger.cpp @@ -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)) {