diff --git a/plugins/channelrx/demodadsb/adsbdemod.h b/plugins/channelrx/demodadsb/adsbdemod.h index 104259541..d0fa33348 100644 --- a/plugins/channelrx/demodadsb/adsbdemod.h +++ b/plugins/channelrx/demodadsb/adsbdemod.h @@ -115,7 +115,7 @@ public: void getMagSqLevels(double& avg, double& peak, int& nbSamples) { m_basebandSink->getMagSqLevels(avg, peak, nbSamples); } void setMessageQueueToGUI(MessageQueue* queue) override { - BasebandSampleSink::setMessageQueueToGUI(queue); + ChannelAPI::setMessageQueueToGUI(queue); m_basebandSink->setMessageQueueToGUI(queue); } diff --git a/plugins/channelrx/demodfreedv/freedvdemod.h b/plugins/channelrx/demodfreedv/freedvdemod.h index f3bbcf37f..64763cd22 100644 --- a/plugins/channelrx/demodfreedv/freedvdemod.h +++ b/plugins/channelrx/demodfreedv/freedvdemod.h @@ -112,7 +112,7 @@ public: float getFrequencyOffset() const { return m_basebandSink->getFrequencyOffset(); } bool isSync() const { return m_basebandSink->isSync(); } void setMessageQueueToGUI(MessageQueue* queue) override { - BasebandSampleSink::setMessageQueueToGUI(queue); + ChannelAPI::setMessageQueueToGUI(queue); m_basebandSink->setMessageQueueToGUI(queue); } diff --git a/plugins/channelrx/demodnfm/nfmdemod.h b/plugins/channelrx/demodnfm/nfmdemod.h index 8709dbc3f..474defdea 100644 --- a/plugins/channelrx/demodnfm/nfmdemod.h +++ b/plugins/channelrx/demodnfm/nfmdemod.h @@ -116,7 +116,7 @@ public: bool getSquelchOpen() const { return m_basebandSink->getSquelchOpen(); } void getMagSqLevels(double& avg, double& peak, int& nbSamples) { m_basebandSink->getMagSqLevels(avg, peak, nbSamples); } void setMessageQueueToGUI(MessageQueue* queue) override { - BasebandSampleSink::setMessageQueueToGUI(queue); + ChannelAPI::setMessageQueueToGUI(queue); m_basebandSink->setMessageQueueToGUI(queue); } int getAudioSampleRate() const { return m_basebandSink->getAudioSampleRate(); } diff --git a/plugins/channelrx/demodpacket/packetdemod.h b/plugins/channelrx/demodpacket/packetdemod.h index 3bff4f0ef..87570da94 100644 --- a/plugins/channelrx/demodpacket/packetdemod.h +++ b/plugins/channelrx/demodpacket/packetdemod.h @@ -115,7 +115,7 @@ public: m_basebandSink->getMagSqLevels(avg, peak, nbSamples); } /* void setMessageQueueToGUI(MessageQueue* queue) override { - BasebandSampleSink::setMessageQueueToGUI(queue); + ChannelAPI::setMessageQueueToGUI(queue); m_basebandSink->setMessageQueueToGUI(queue); }*/ diff --git a/plugins/channelrx/demodssb/ssbdemod.h b/plugins/channelrx/demodssb/ssbdemod.h index 1280318da..19d969225 100644 --- a/plugins/channelrx/demodssb/ssbdemod.h +++ b/plugins/channelrx/demodssb/ssbdemod.h @@ -92,7 +92,7 @@ public: } void setMessageQueueToGUI(MessageQueue* queue) override { - BasebandSampleSink::setMessageQueueToGUI(queue); + ChannelAPI::setMessageQueueToGUI(queue); m_basebandSink->setMessageQueueToGUI(queue); } uint32_t getAudioSampleRate() const { return m_basebandSink->getAudioSampleRate(); } diff --git a/plugins/channelrx/demodvor/vordemod.h b/plugins/channelrx/demodvor/vordemod.h index 97c2d1fa5..2d80b1603 100644 --- a/plugins/channelrx/demodvor/vordemod.h +++ b/plugins/channelrx/demodvor/vordemod.h @@ -121,7 +121,7 @@ public: m_basebandSink->getMagSqLevels(avg, peak, nbSamples); } void setMessageQueueToGUI(MessageQueue* queue) override { - BasebandSampleSink::setMessageQueueToGUI(queue); + ChannelAPI::setMessageQueueToGUI(queue); m_basebandSink->setMessageQueueToGUI(queue); } diff --git a/plugins/channelrx/sigmffilesink/sigmffilesink.cpp b/plugins/channelrx/sigmffilesink/sigmffilesink.cpp index 118813fc2..1d46b384a 100644 --- a/plugins/channelrx/sigmffilesink/sigmffilesink.cpp +++ b/plugins/channelrx/sigmffilesink/sigmffilesink.cpp @@ -86,7 +86,7 @@ SigMFFileSink::~SigMFFileSink() void SigMFFileSink::setMessageQueueToGUI(MessageQueue* queue) { - BasebandSampleSink::setMessageQueueToGUI(queue); + ChannelAPI::setMessageQueueToGUI(queue); m_basebandSink->setMessageQueueToGUI(queue); } diff --git a/plugins/channeltx/filesource/filesource.cpp b/plugins/channeltx/filesource/filesource.cpp index dc2264ad9..9f2c1d70d 100644 --- a/plugins/channeltx/filesource/filesource.cpp +++ b/plugins/channeltx/filesource/filesource.cpp @@ -613,7 +613,7 @@ void FileSource::getMagSqLevels(double& avg, double& peak, int& nbSamples) const } void FileSource::setMessageQueueToGUI(MessageQueue* queue) { - BasebandSampleSource::setMessageQueueToGUI(queue); + ChannelAPI::setMessageQueueToGUI(queue); m_basebandSource->setMessageQueueToGUI(queue); } diff --git a/plugins/channeltx/modatv/atvmod.cpp b/plugins/channeltx/modatv/atvmod.cpp index 653771816..699fbd854 100644 --- a/plugins/channeltx/modatv/atvmod.cpp +++ b/plugins/channeltx/modatv/atvmod.cpp @@ -762,6 +762,6 @@ void ATVMod::getCameraNumbers(std::vector& numbers) } void ATVMod::setMessageQueueToGUI(MessageQueue* queue) { - BasebandSampleSource::setMessageQueueToGUI(queue); + ChannelAPI::setMessageQueueToGUI(queue); m_basebandSource->setMessageQueueToGUI(queue); } diff --git a/sdrbase/channel/channelapi.cpp b/sdrbase/channel/channelapi.cpp index b16f8b4e1..03b360373 100644 --- a/sdrbase/channel/channelapi.cpp +++ b/sdrbase/channel/channelapi.cpp @@ -22,6 +22,7 @@ #include "maincore.h" ChannelAPI::ChannelAPI(const QString& uri, StreamType streamType) : + m_guiMessageQueue(nullptr), m_streamType(streamType), m_name(uri), m_uri(uri), diff --git a/sdrbase/channel/channelapi.h b/sdrbase/channel/channelapi.h index c9b984211..2ebf71076 100644 --- a/sdrbase/channel/channelapi.h +++ b/sdrbase/channel/channelapi.h @@ -30,6 +30,7 @@ #include "pipes/pipeendpoint.h" class DeviceAPI; +class MessageQueue; namespace SWGSDRangel { @@ -61,6 +62,9 @@ public: virtual QByteArray serialize() const = 0; virtual bool deserialize(const QByteArray& data) = 0; + virtual void setMessageQueueToGUI(MessageQueue *queue) { m_guiMessageQueue = queue; } + MessageQueue *getMessageQueueToGUI() { return m_guiMessageQueue; } + /** * API adapter for the channel settings GET requests */ @@ -125,6 +129,9 @@ public: virtual int getNbSourceStreams() const = 0; virtual qint64 getStreamCenterFrequency(int streamIndex, bool sinkElseSource) const = 0; +protected: + MessageQueue *m_guiMessageQueue; //!< Input message queue to the GUI + private: StreamType m_streamType; /** Unique identifier in a device set used for sorting. Used when there is no GUI. diff --git a/sdrbase/dsp/basebandsamplesink.cpp b/sdrbase/dsp/basebandsamplesink.cpp index faa5ca718..8d572436e 100644 --- a/sdrbase/dsp/basebandsamplesink.cpp +++ b/sdrbase/dsp/basebandsamplesink.cpp @@ -19,8 +19,7 @@ #include "basebandsamplesink.h" -BasebandSampleSink::BasebandSampleSink() : - m_guiMessageQueue(0) +BasebandSampleSink::BasebandSampleSink() { connect(&m_inputMessageQueue, SIGNAL(messageEnqueued()), this, SLOT(handleInputMessages())); } diff --git a/sdrbase/dsp/basebandsamplesink.h b/sdrbase/dsp/basebandsamplesink.h index b539e5d95..48cc4a0cd 100644 --- a/sdrbase/dsp/basebandsamplesink.h +++ b/sdrbase/dsp/basebandsamplesink.h @@ -38,8 +38,6 @@ public: virtual bool handleMessage(const Message& cmd) = 0; //!< Processing of a message. Returns true if message has actually been processed MessageQueue *getInputMessageQueue() { return &m_inputMessageQueue; } //!< Get the queue for asynchronous inbound communication - virtual void setMessageQueueToGUI(MessageQueue *queue) { m_guiMessageQueue = queue; } - MessageQueue *getMessageQueueToGUI() { return m_guiMessageQueue; } virtual void feed(const Complex *begin, unsigned int length) //!< Special feed directly with complex array { @@ -49,7 +47,6 @@ public: protected: MessageQueue m_inputMessageQueue; //!< Queue for asynchronous inbound communication - MessageQueue *m_guiMessageQueue; //!< Input message queue to the GUI protected slots: void handleInputMessages(); diff --git a/sdrbase/dsp/basebandsamplesource.cpp b/sdrbase/dsp/basebandsamplesource.cpp index ed1bb4720..7fc02f241 100644 --- a/sdrbase/dsp/basebandsamplesource.cpp +++ b/sdrbase/dsp/basebandsamplesource.cpp @@ -19,8 +19,7 @@ #include "dsp/basebandsamplesource.h" #include "util/message.h" -BasebandSampleSource::BasebandSampleSource() : - m_guiMessageQueue(nullptr) +BasebandSampleSource::BasebandSampleSource() { connect(&m_inputMessageQueue, SIGNAL(messageEnqueued()), this, SLOT(handleInputMessages())); } diff --git a/sdrbase/dsp/basebandsamplesource.h b/sdrbase/dsp/basebandsamplesource.h index 2a7eaa8db..0d4fb8206 100644 --- a/sdrbase/dsp/basebandsamplesource.h +++ b/sdrbase/dsp/basebandsamplesource.h @@ -39,12 +39,9 @@ public: virtual bool handleMessage(const Message& cmd) = 0; //!< Processing of a message. Returns true if message has actually been processed MessageQueue *getInputMessageQueue() { return &m_inputMessageQueue; } //!< Get the queue for asynchronous inbound communication - virtual void setMessageQueueToGUI(MessageQueue *queue) { m_guiMessageQueue = queue; } - MessageQueue *getMessageQueueToGUI() { return m_guiMessageQueue; } protected: MessageQueue m_inputMessageQueue; //!< Queue for asynchronous inbound communication - MessageQueue *m_guiMessageQueue; //!< Input message queue to the GUI protected slots: void handleInputMessages(); diff --git a/sdrbase/dsp/spectrumvis.h b/sdrbase/dsp/spectrumvis.h index 69d724d10..cbe1facc1 100644 --- a/sdrbase/dsp/spectrumvis.h +++ b/sdrbase/dsp/spectrumvis.h @@ -132,6 +132,9 @@ public: virtual void stop(); virtual bool handleMessage(const Message& message); + void setMessageQueueToGUI(MessageQueue *queue) { m_guiMessageQueue = queue; } + MessageQueue *getMessageQueueToGUI() { return m_guiMessageQueue; } + int webapiSpectrumSettingsGet(SWGSDRangel::SWGGLSpectrum& response, QString& errorMessage) const; int webapiSpectrumSettingsPutPatch( bool force, @@ -207,6 +210,8 @@ private: Real m_powFFTDiv; static const Real m_mult; + MessageQueue *m_guiMessageQueue; //!< Input message queue to the GUI + QMutex m_mutex; void setRunning(bool running) { m_running = running; }