diff --git a/CMakeLists.txt b/CMakeLists.txt
index a7486057e..dc35c3c63 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -63,6 +63,7 @@ set(sdrbase_SOURCES
sdrbase/dsp/pidcontroller.cpp
sdrbase/dsp/samplefifo.cpp
sdrbase/dsp/samplesink.cpp
+ sdrbase/dsp/nullsink.cpp
sdrbase/dsp/scopevis.cpp
sdrbase/dsp/spectrumvis.cpp
sdrbase/dsp/threadedsamplesink.cpp
@@ -132,6 +133,7 @@ set(sdrbase_HEADERS
sdrbase/dsp/pidcontroller.h
include/dsp/samplefifo.h
include/dsp/samplesink.h
+ include-gpl/dsp/nullsink.h
include-gpl/dsp/scopevis.h
include-gpl/dsp/spectrumvis.h
include/dsp/threadedsamplesink.h
diff --git a/Readme.md b/Readme.md
index a7d258f04..4440f07df 100644
--- a/Readme.md
+++ b/Readme.md
@@ -46,11 +46,11 @@ There is no installation procedure the executable is at the root of the build di
For Debian 8
============
-Debian 7 "wheezy" uses Qt4. Qt5 is available from the "wheezy-backports" repo, but this will remove Qt4.
+Debian 7 "wheezy" uses Qt4. Qt5 is available from the "wheezy-backports" repo, but this will remove Qt4. Debian 8 "jessie" uses Qt5.
`sudo apt-get install cmake g++ pkg-config libfftw3-dev libusb-1.0-0-dev libusb-dev qt5-default qtbase5-dev qtchooser libqt5multimedia5-plugins qtmultimedia5-dev qttools5-dev qttools5-dev-tools libqt5opengl5-dev qtbase5-dev librtlsdr-dev`
-`mkdir out && cd out && cmake ../ && make`
+`mkdir build && cd build && cmake ../ && make`
The same remarks as for Ubuntu apply...
@@ -70,12 +70,15 @@ Done since the fork
- Added a preset update button (the diskette with the yellow corner) to be able to save the current settings on an existing preset
- Added variable decimation in log2 increments from 2^0=1 to 2^4=16 allowing to see the full 2048 kHz of spectrum if so you wish
- Better handling of rtlsdr GUI display when settings change (initial load, load of presets)
-
+ - Added display and precise control of the shift frequency from center frequency of the NFM receivers.
+ - Removed useless spectrum visualizer in NFM receivers. Created a null sink class to fit corresponding parameter in NFMDemod class constructor.
+
+
=====
To Do
=====
- - Display center frequency of the receiver in scope. Presently there is no way to set the frequency precisely
+
- AM demod. What about the air band?!
- Add the possibility to change the brightness and/or color of the grid. Sometimes it is barely visible yet useful
- Possibility to completely undock the receiver in a separate window. Useful when there are many receivers
diff --git a/include-gpl/dsp/nullsink.h b/include-gpl/dsp/nullsink.h
new file mode 100644
index 000000000..2f4ae0816
--- /dev/null
+++ b/include-gpl/dsp/nullsink.h
@@ -0,0 +1,20 @@
+#ifndef INCLUDE_NULLSINK_H
+#define INCLUDE_NULLSINK_H
+
+#include "dsp/samplesink.h"
+#include "util/export.h"
+
+class MessageQueue;
+
+class SDRANGELOVE_API NullSink : public SampleSink {
+public:
+
+ NullSink();
+
+ void feed(SampleVector::const_iterator begin, SampleVector::const_iterator end, bool positiveOnly);
+ void start();
+ void stop();
+ bool handleMessage(Message* message);
+};
+
+#endif // INCLUDE_NULLSINK_H
diff --git a/plugins/channel/nfm/nfmdemodgui.cpp b/plugins/channel/nfm/nfmdemodgui.cpp
index ecc25482b..fcdc472f0 100644
--- a/plugins/channel/nfm/nfmdemodgui.cpp
+++ b/plugins/channel/nfm/nfmdemodgui.cpp
@@ -5,7 +5,7 @@
#include "dsp/threadedsamplesink.h"
#include "dsp/channelizer.h"
#include "nfmdemod.h"
-#include "dsp/spectrumvis.h"
+#include "dsp/nullsink.h"
#include "gui/glspectrum.h"
#include "plugin/pluginapi.h"
#include "util/simpleserializer.h"
@@ -40,7 +40,6 @@ void NFMDemodGUI::resetToDefaults()
ui->volume->setValue(20);
ui->squelch->setValue(-40);
ui->deltaFrequency->setValue(0);
- ui->spectrumGUI->resetToDefaults();
applySettings();
}
@@ -52,7 +51,7 @@ QByteArray NFMDemodGUI::serialize() const
s.writeS32(3, ui->afBW->value());
s.writeS32(4, ui->volume->value());
s.writeS32(5, ui->squelch->value());
- s.writeBlob(6, ui->spectrumGUI->serialize());
+ //s.writeBlob(6, ui->spectrumGUI->serialize());
s.writeU32(7, m_channelMarker->getColor().rgb());
return s.final();
}
@@ -80,8 +79,8 @@ bool NFMDemodGUI::deserialize(const QByteArray& data)
ui->volume->setValue(tmp);
d.readS32(5, &tmp, -40);
ui->squelch->setValue(tmp);
- d.readBlob(6, &bytetmp);
- ui->spectrumGUI->deserialize(bytetmp);
+ //d.readBlob(6, &bytetmp);
+ //ui->spectrumGUI->deserialize(bytetmp);
if(d.readU32(7, &u32tmp))
m_channelMarker->setColor(u32tmp);
applySettings();
@@ -177,19 +176,13 @@ NFMDemodGUI::NFMDemodGUI(PluginAPI* pluginAPI, QWidget* parent) :
connect(this, SIGNAL(menuDoubleClickEvent()), this, SLOT(onMenuDoubleClicked()));
m_audioFifo = new AudioFifo(4, 48000);
- m_spectrumVis = new SpectrumVis(ui->glSpectrum);
- m_nfmDemod = new NFMDemod(m_audioFifo, m_spectrumVis);
+ m_nullSink = new NullSink();
+ m_nfmDemod = new NFMDemod(m_audioFifo, m_nullSink);
m_channelizer = new Channelizer(m_nfmDemod);
m_threadedSampleSink = new ThreadedSampleSink(m_channelizer);
m_pluginAPI->addAudioSource(m_audioFifo);
m_pluginAPI->addSampleSink(m_threadedSampleSink);
- ui->glSpectrum->setCenterFrequency(0);
- ui->glSpectrum->setSampleRate(48000);
- ui->glSpectrum->setDisplayWaterfall(true);
- ui->glSpectrum->setDisplayMaxHold(true);
- m_spectrumVis->configure(m_threadedSampleSink->getMessageQueue(), 64, 10, FFTWindow::BlackmanHarris);
-
m_channelMarker = new ChannelMarker(this);
m_channelMarker->setColor(Qt::red);
m_channelMarker->setBandwidth(12500);
@@ -198,8 +191,6 @@ NFMDemodGUI::NFMDemodGUI(PluginAPI* pluginAPI, QWidget* parent) :
connect(m_channelMarker, SIGNAL(changed()), this, SLOT(viewChanged()));
m_pluginAPI->addChannelMarker(m_channelMarker);
- ui->spectrumGUI->setBuddies(m_threadedSampleSink->getMessageQueue(), m_spectrumVis, ui->glSpectrum);
-
applySettings();
}
@@ -211,7 +202,7 @@ NFMDemodGUI::~NFMDemodGUI()
delete m_threadedSampleSink;
delete m_channelizer;
delete m_nfmDemod;
- delete m_spectrumVis;
+ delete m_nullSink;
delete m_audioFifo;
delete m_channelMarker;
delete ui;
diff --git a/plugins/channel/nfm/nfmdemodgui.h b/plugins/channel/nfm/nfmdemodgui.h
index ff26c5151..66a263c72 100644
--- a/plugins/channel/nfm/nfmdemodgui.h
+++ b/plugins/channel/nfm/nfmdemodgui.h
@@ -11,7 +11,7 @@ class AudioFifo;
class ThreadedSampleSink;
class Channelizer;
class NFMDemod;
-class SpectrumVis;
+class NullSink;
namespace Ui {
class NFMDemodGUI;
@@ -53,7 +53,7 @@ private:
ThreadedSampleSink* m_threadedSampleSink;
Channelizer* m_channelizer;
NFMDemod* m_nfmDemod;
- SpectrumVis* m_spectrumVis;
+ NullSink *m_nullSink;
static const int m_rfBW[];
diff --git a/plugins/channel/nfm/nfmdemodgui.ui b/plugins/channel/nfm/nfmdemodgui.ui
index 381f38ecd..8380d0f3d 100644
--- a/plugins/channel/nfm/nfmdemodgui.ui
+++ b/plugins/channel/nfm/nfmdemodgui.ui
@@ -7,7 +7,7 @@
0
0
302
- 410
+ 138
@@ -244,70 +244,8 @@
-
-
-
- 40
- 140
- 218
- 184
-
-
-
- Channel Spectrum
-
-
-
- 2
-
-
- 3
-
-
- 3
-
-
- 3
-
-
- 3
-
- -
-
-
- true
-
-
-
- 200
- 150
-
-
-
-
- -
-
-
- true
-
-
-
-
-
-
- GLSpectrum
- QWidget
-
- 1
-
-
- GLSpectrumGUI
- QWidget
-
- 1
-
RollupWidget
QWidget
diff --git a/sdrbase/dsp/nullsink.cpp b/sdrbase/dsp/nullsink.cpp
new file mode 100644
index 000000000..d5c142742
--- /dev/null
+++ b/sdrbase/dsp/nullsink.cpp
@@ -0,0 +1,43 @@
+#include "dsp/nullsink.h"
+#include "dsp/dspcommands.h"
+#include "util/messagequeue.h"
+
+NullSink::NullSink()
+{
+}
+
+void NullSink::feed(SampleVector::const_iterator begin, SampleVector::const_iterator end, bool positiveOnly)
+{
+}
+
+void NullSink::start()
+{
+}
+
+void NullSink::stop()
+{
+}
+
+bool NullSink::handleMessage(Message* message)
+{
+ message->completed();
+ return true;
+ /*
+ if(DSPSignalNotification::match(message)) {
+ DSPSignalNotification* signal = (DSPSignalNotification*)message;
+ m_sampleRate = signal->getSampleRate();
+ message->completed();
+ return true;
+ } else if(DSPConfigureScopeVis::match(message)) {
+ DSPConfigureScopeVis* conf = (DSPConfigureScopeVis*)message;
+ m_triggerState = Untriggered;
+ m_triggerChannel = (TriggerChannel)conf->getTriggerChannel();
+ m_triggerLevelHigh = conf->getTriggerLevelHigh() * 32767;
+ m_triggerLevelLow = conf->getTriggerLevelLow() * 32767;
+ message->completed();
+ return true;
+ } else {
+ return false;
+ }
+ */
+}