diff --git a/CMakeLists.txt b/CMakeLists.txt index bbdfb8f5f..ee7eed07d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -309,7 +309,7 @@ endif() include(FindCompiler) if (C_CLANG OR C_GCC) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Wvla -ffast-math -ftree-vectorize ${EXTRA_FLAGS}") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Wvla -Woverloaded-virtual -ffast-math -ftree-vectorize ${EXTRA_FLAGS}") elseif (C_MSVC) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -w -MP ${EXTRA_FLAGS}") endif() diff --git a/plugins/channelrx/chanalyzer/chanalyzer.h b/plugins/channelrx/chanalyzer/chanalyzer.h index 03a5ba572..d208dff1e 100644 --- a/plugins/channelrx/chanalyzer/chanalyzer.h +++ b/plugins/channelrx/chanalyzer/chanalyzer.h @@ -71,7 +71,8 @@ public: Real getPllDeltaPhase() const { return m_basebandSink->getPllDeltaPhase(); } Real getPllPhase() const { return m_basebandSink->getPllPhase(); } - virtual void feed(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end, bool positiveOnly); + using BasebandSampleSink::feed; + virtual void feed(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end, bool po); virtual void start(); virtual void stop(); virtual bool handleMessage(const Message& cmd); diff --git a/plugins/channelrx/demodadsb/adsbdemod.h b/plugins/channelrx/demodadsb/adsbdemod.h index 31bbc60fb..2bebbbb81 100644 --- a/plugins/channelrx/demodadsb/adsbdemod.h +++ b/plugins/channelrx/demodadsb/adsbdemod.h @@ -67,7 +67,8 @@ public: virtual ~ADSBDemod(); virtual void destroy() { delete this; } - virtual void feed(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end, bool positive); + using BasebandSampleSink::feed; + virtual void feed(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end, bool po); virtual void start(); virtual void stop(); virtual bool handleMessage(const Message& cmd); diff --git a/plugins/channelrx/demodam/amdemod.h b/plugins/channelrx/demodam/amdemod.h index 280f24aa0..e9d6eef10 100644 --- a/plugins/channelrx/demodam/amdemod.h +++ b/plugins/channelrx/demodam/amdemod.h @@ -65,7 +65,8 @@ public: virtual ~AMDemod(); virtual void destroy() { delete this; } - virtual void feed(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end, bool po); + using BasebandSampleSink::feed; + virtual void feed(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end, bool po); virtual void start(); virtual void stop(); virtual bool handleMessage(const Message& cmd); diff --git a/plugins/channelrx/demodatv/atvdemod.h b/plugins/channelrx/demodatv/atvdemod.h index 560bc26be..7c414df92 100644 --- a/plugins/channelrx/demodatv/atvdemod.h +++ b/plugins/channelrx/demodatv/atvdemod.h @@ -64,7 +64,8 @@ public: virtual ~ATVDemod(); virtual void destroy() { delete this; } - virtual void feed(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end, bool po); + using BasebandSampleSink::feed; + virtual void feed(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end, bool po); virtual void start(); virtual void stop(); virtual bool handleMessage(const Message& cmd); diff --git a/plugins/channelrx/demodbfm/bfmdemod.h b/plugins/channelrx/demodbfm/bfmdemod.h index f0428a022..8025bca2f 100644 --- a/plugins/channelrx/demodbfm/bfmdemod.h +++ b/plugins/channelrx/demodbfm/bfmdemod.h @@ -73,7 +73,8 @@ public: SpectrumVis *getSpectrumVis() { return &m_spectrumVis; } void setBasebandMessageQueueToGUI(MessageQueue *messageQueue) { m_basebandSink->setMessageQueueToGUI(messageQueue); } - virtual void feed(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end, bool po); + using BasebandSampleSink::feed; + virtual void feed(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end, bool po); virtual void start(); virtual void stop(); virtual bool handleMessage(const Message& cmd); diff --git a/plugins/channelrx/demodchirpchat/chirpchatdemod.h b/plugins/channelrx/demodchirpchat/chirpchatdemod.h index 9d6ab9cfb..2401606d0 100644 --- a/plugins/channelrx/demodchirpchat/chirpchatdemod.h +++ b/plugins/channelrx/demodchirpchat/chirpchatdemod.h @@ -203,7 +203,8 @@ public: virtual void destroy() { delete this; } SpectrumVis *getSpectrumVis() { return &m_spectrumVis; } - virtual void feed(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end, bool pO); + using BasebandSampleSink::feed; + virtual void feed(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end, bool po); virtual void start(); virtual void stop(); virtual bool handleMessage(const Message& cmd); diff --git a/plugins/channelrx/demoddatv/datvdemod.h b/plugins/channelrx/demoddatv/datvdemod.h index 4bf76f4cd..a6cd67116 100644 --- a/plugins/channelrx/demoddatv/datvdemod.h +++ b/plugins/channelrx/demoddatv/datvdemod.h @@ -49,7 +49,8 @@ public: virtual QByteArray serialize() const { return QByteArray(); } virtual bool deserialize(const QByteArray& data) { (void) data; return false; } - virtual void feed(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end, bool po); + using BasebandSampleSink::feed; + virtual void feed(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end, bool po); virtual void start(); virtual void stop(); virtual bool handleMessage(const Message& cmd); diff --git a/plugins/channelrx/demoddsd/dsddemod.h b/plugins/channelrx/demoddsd/dsddemod.h index 2a99ffa7c..d27cc2e41 100644 --- a/plugins/channelrx/demoddsd/dsddemod.h +++ b/plugins/channelrx/demoddsd/dsddemod.h @@ -66,7 +66,8 @@ public: virtual ~DSDDemod(); virtual void destroy() { delete this; } - virtual void feed(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end, bool po); + using BasebandSampleSink::feed; + virtual void feed(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end, bool po); virtual void start(); virtual void stop(); virtual bool handleMessage(const Message& cmd); diff --git a/plugins/channelrx/demodfreedv/freedvdemod.h b/plugins/channelrx/demodfreedv/freedvdemod.h index 65697ea92..5e2815654 100644 --- a/plugins/channelrx/demodfreedv/freedvdemod.h +++ b/plugins/channelrx/demodfreedv/freedvdemod.h @@ -79,7 +79,8 @@ public: virtual void destroy() { delete this; } SpectrumVis *getSpectrumVis() { return &m_spectrumVis; } - virtual void feed(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end, bool positiveOnly); + using BasebandSampleSink::feed; + virtual void feed(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end, bool po); virtual void start(); virtual void stop(); virtual bool handleMessage(const Message& cmd); diff --git a/plugins/channelrx/demodnfm/nfmdemod.h b/plugins/channelrx/demodnfm/nfmdemod.h index d9b824bad..00216ea59 100644 --- a/plugins/channelrx/demodnfm/nfmdemod.h +++ b/plugins/channelrx/demodnfm/nfmdemod.h @@ -65,7 +65,8 @@ public: virtual ~NFMDemod(); virtual void destroy() { delete this; } - virtual void feed(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end, bool positive); + using BasebandSampleSink::feed; + virtual void feed(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end, bool po); virtual void start(); virtual void stop(); virtual bool handleMessage(const Message& cmd); diff --git a/plugins/channelrx/demodssb/ssbdemod.h b/plugins/channelrx/demodssb/ssbdemod.h index 849fc92c0..4fa933b9d 100644 --- a/plugins/channelrx/demodssb/ssbdemod.h +++ b/plugins/channelrx/demodssb/ssbdemod.h @@ -68,7 +68,8 @@ public: virtual void destroy() { delete this; } SpectrumVis *getSpectrumVis() { return &m_spectrumVis; } - virtual void feed(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end, bool positiveOnly); + using BasebandSampleSink::feed; + virtual void feed(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end, bool po); virtual void start(); virtual void stop(); virtual bool handleMessage(const Message& cmd); diff --git a/plugins/channelrx/demodwfm/wfmdemod.h b/plugins/channelrx/demodwfm/wfmdemod.h index 71ac9f15c..dd6ec9548 100644 --- a/plugins/channelrx/demodwfm/wfmdemod.h +++ b/plugins/channelrx/demodwfm/wfmdemod.h @@ -64,6 +64,7 @@ public: virtual ~WFMDemod(); virtual void destroy() { delete this; } + using BasebandSampleSink::feed; virtual void feed(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end, bool po); virtual void start(); virtual void stop(); diff --git a/plugins/channelrx/filesink/filesink.h b/plugins/channelrx/filesink/filesink.h index e60107e96..73831ad66 100644 --- a/plugins/channelrx/filesink/filesink.h +++ b/plugins/channelrx/filesink/filesink.h @@ -66,6 +66,7 @@ public: virtual ~FileSink(); virtual void destroy() { delete this; } + using BasebandSampleSink::feed; virtual void feed(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end, bool po); virtual void start(); virtual void stop(); diff --git a/plugins/channelrx/freqtracker/freqtracker.h b/plugins/channelrx/freqtracker/freqtracker.h index c374384ae..317c90238 100644 --- a/plugins/channelrx/freqtracker/freqtracker.h +++ b/plugins/channelrx/freqtracker/freqtracker.h @@ -64,7 +64,8 @@ public: virtual ~FreqTracker(); virtual void destroy() { delete this; } - virtual void feed(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end, bool po); + using BasebandSampleSink::feed; + virtual void feed(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end, bool po); virtual void start(); virtual void stop(); virtual bool handleMessage(const Message& cmd); diff --git a/plugins/channelrx/localsink/localsink.h b/plugins/channelrx/localsink/localsink.h index d2eca5839..564c23b43 100644 --- a/plugins/channelrx/localsink/localsink.h +++ b/plugins/channelrx/localsink/localsink.h @@ -86,6 +86,7 @@ public: virtual ~LocalSink(); virtual void destroy() { delete this; } + using BasebandSampleSink::feed; virtual void feed(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end, bool po); virtual void start(); virtual void stop(); diff --git a/plugins/channelrx/remotesink/remotesink.h b/plugins/channelrx/remotesink/remotesink.h index 424a00860..95cffed7c 100644 --- a/plugins/channelrx/remotesink/remotesink.h +++ b/plugins/channelrx/remotesink/remotesink.h @@ -65,6 +65,7 @@ public: virtual ~RemoteSink(); virtual void destroy() { delete this; } + using BasebandSampleSink::feed; virtual void feed(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end, bool po); virtual void start(); virtual void stop(); diff --git a/plugins/channelrx/sigmffilesink/sigmffilesink.h b/plugins/channelrx/sigmffilesink/sigmffilesink.h index 0a0be2956..d4d5def70 100644 --- a/plugins/channelrx/sigmffilesink/sigmffilesink.h +++ b/plugins/channelrx/sigmffilesink/sigmffilesink.h @@ -66,6 +66,7 @@ public: virtual ~SigMFFileSink(); virtual void destroy() { delete this; } + using BasebandSampleSink::feed; virtual void feed(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end, bool po); virtual void start(); virtual void stop(); diff --git a/plugins/channelrx/udpsink/udpsink.h b/plugins/channelrx/udpsink/udpsink.h index b52472835..69cd4b82b 100644 --- a/plugins/channelrx/udpsink/udpsink.h +++ b/plugins/channelrx/udpsink/udpsink.h @@ -72,7 +72,8 @@ public: double getInMagSq() const { return m_basebandSink->getInMagSq(); } bool getSquelchOpen() const { return m_basebandSink->getSquelchOpen(); } - virtual void feed(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end, bool positiveOnly); + using BasebandSampleSink::feed; + virtual void feed(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end, bool po); virtual void start(); virtual void stop(); virtual bool handleMessage(const Message& cmd); diff --git a/sdrbase/dsp/filerecordinterface.cpp b/sdrbase/dsp/filerecordinterface.cpp index 0ee8ed118..ed46dc25c 100644 --- a/sdrbase/dsp/filerecordinterface.cpp +++ b/sdrbase/dsp/filerecordinterface.cpp @@ -21,9 +21,10 @@ #include "filerecordinterface.h" -FileRecordInterface::FileRecordInterface() : - BasebandSampleSink() -{} +FileRecordInterface::FileRecordInterface() +{ + connect(&m_inputMessageQueue, SIGNAL(messageEnqueued()), this, SLOT(handleInputMessages())); +} FileRecordInterface::~FileRecordInterface() {} @@ -72,3 +73,16 @@ FileRecordInterface::RecordType FileRecordInterface::guessTypeFromFileName(const return RecordTypeUndefined; } } + +void FileRecordInterface::handleInputMessages() +{ + Message* message; + + while ((message = m_inputMessageQueue.pop()) != 0) + { + if (handleMessage(*message)) + { + delete message; + } + } +} diff --git a/sdrbase/dsp/filerecordinterface.h b/sdrbase/dsp/filerecordinterface.h index e1c228a77..67cbd3bf3 100644 --- a/sdrbase/dsp/filerecordinterface.h +++ b/sdrbase/dsp/filerecordinterface.h @@ -21,11 +21,15 @@ #define INCLUDE_FILERECORD_INTERFACE_H #include +#include -#include "dsp/basebandsamplesink.h" +#include "dsp/dsptypes.h" +#include "util/message.h" +#include "util/messagequeue.h" #include "export.h" -class SDRBASE_API FileRecordInterface : public BasebandSampleSink { +class SDRBASE_API FileRecordInterface : public QObject { + Q_OBJECT public: enum RecordType { @@ -42,6 +46,10 @@ public: virtual void feed(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end, bool positiveOnly) = 0; 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 setFileName(const QString &filename) = 0; virtual void startRecording() = 0; virtual void stopRecording() = 0; @@ -49,7 +57,15 @@ public: static QString genUniqueFileName(unsigned int deviceUID, int istream = -1); static RecordType guessTypeFromFileName(const QString& fileName, QString& fileBase); + +protected: + MessageQueue m_inputMessageQueue; //!< Queue for asynchronous inbound communication + MessageQueue *m_guiMessageQueue; //!< Input message queue to the GUI + +protected slots: + void handleInputMessages(); + }; -#endif // INCLUDE_FILERECORD_INTERFACE_H \ No newline at end of file +#endif // INCLUDE_FILERECORD_INTERFACE_H diff --git a/sdrgui/dsp/scopevis.h b/sdrgui/dsp/scopevis.h index b8b5df5f6..337a74fca 100644 --- a/sdrgui/dsp/scopevis.h +++ b/sdrgui/dsp/scopevis.h @@ -239,6 +239,7 @@ public: const std::vector& getTracesData() const { return m_traces.m_tracesData; } uint32_t getNbTriggers() const { return m_triggerConditions.size(); } + using BasebandSampleSink::feed; virtual void feed(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end, bool positiveOnly); virtual void start(); virtual void stop(); diff --git a/sdrgui/dsp/scopevisxy.h b/sdrgui/dsp/scopevisxy.h index cf876586e..b5b6ec915 100644 --- a/sdrgui/dsp/scopevisxy.h +++ b/sdrgui/dsp/scopevisxy.h @@ -34,6 +34,7 @@ public: ScopeVisXY(TVScreen *tvScreen); virtual ~ScopeVisXY(); + using BasebandSampleSink::feed; virtual void feed(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end, bool positiveOnly); virtual void start(); virtual void stop(); diff --git a/sdrgui/dsp/spectrumscopecombovis.h b/sdrgui/dsp/spectrumscopecombovis.h index d2b0194d2..d5ba4d46e 100644 --- a/sdrgui/dsp/spectrumscopecombovis.h +++ b/sdrgui/dsp/spectrumscopecombovis.h @@ -14,6 +14,7 @@ public: SpectrumScopeComboVis(SpectrumVis* spectrumVis, ScopeVis* scopeVis); virtual ~SpectrumScopeComboVis(); + using BasebandSampleSink::feed; virtual void feed(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end, bool positiveOnly); virtual void start(); virtual void stop();