From ba220b717a1ce135ccc756d1382b4bb38ee50f47 Mon Sep 17 00:00:00 2001 From: Christian Daniel Date: Mon, 4 Nov 2013 22:01:28 +0100 Subject: NFMDemod: ported to reworked API - credits go to Dimitri "horizon" Stolnikov --- plugins/channel/CMakeLists.txt | 2 +- plugins/channel/nfm/nfmdemod.cpp | 4 +- plugins/channel/nfm/nfmdemodgui.cpp | 53 ++++- plugins/channel/nfm/nfmdemodgui.h | 14 +- plugins/channel/nfm/nfmdemodgui.ui | 411 ++++++++++++++++++++---------------- plugins/channel/nfm/nfmplugin.cpp | 18 +- plugins/channel/nfm/nfmplugin.h | 4 +- 7 files changed, 290 insertions(+), 216 deletions(-) diff --git a/plugins/channel/CMakeLists.txt b/plugins/channel/CMakeLists.txt index 19c7962..e59574e 100644 --- a/plugins/channel/CMakeLists.txt +++ b/plugins/channel/CMakeLists.txt @@ -1,5 +1,5 @@ project(demod) -#add_subdirectory(nfm) +add_subdirectory(nfm) add_subdirectory(tcpsrc) #add_subdirectory(tetra) diff --git a/plugins/channel/nfm/nfmdemod.cpp b/plugins/channel/nfm/nfmdemod.cpp index fde579b..843a6aa 100644 --- a/plugins/channel/nfm/nfmdemod.cpp +++ b/plugins/channel/nfm/nfmdemod.cpp @@ -140,6 +140,8 @@ bool NFMDemod::handleMessage(Message* cmd) cmd->completed(); return true; } else { - return false; + if(m_sampleSink != NULL) + return m_sampleSink->handleMessage(cmd); + else return false; } } diff --git a/plugins/channel/nfm/nfmdemodgui.cpp b/plugins/channel/nfm/nfmdemodgui.cpp index d507cfd..53f2de0 100644 --- a/plugins/channel/nfm/nfmdemodgui.cpp +++ b/plugins/channel/nfm/nfmdemodgui.cpp @@ -11,6 +11,7 @@ #include "gui/glspectrum.h" #include "plugin/pluginapi.h" #include "util/simpleserializer.h" +#include "gui/basicchannelsettingswidget.h" const int NFMDemodGUI::m_rfBW[] = { 5000, 6250, 8330, 10000, 12500, 15000, 20000, 25000, 40000 @@ -18,22 +19,18 @@ const int NFMDemodGUI::m_rfBW[] = { NFMDemodGUI* NFMDemodGUI::create(PluginAPI* pluginAPI) { - QDockWidget* dock = pluginAPI->createMainWindowDock(Qt::RightDockWidgetArea, tr("NFM Demodulator")); - dock->setObjectName(QString::fromUtf8("NFM Demodulator")); - NFMDemodGUI* gui = new NFMDemodGUI(pluginAPI, dock); - dock->setWidget(gui); + NFMDemodGUI* gui = new NFMDemodGUI(pluginAPI); return gui; } void NFMDemodGUI::destroy() { - delete m_dockWidget; + delete this; } -void NFMDemodGUI::setWidgetName(const QString& name) +void NFMDemodGUI::setName(const QString& name) { - qDebug("NFM: %s", qPrintable(name)); - m_dockWidget->setObjectName(name); + setObjectName(name); } void NFMDemodGUI::resetToDefaults() @@ -42,6 +39,7 @@ void NFMDemodGUI::resetToDefaults() ui->afBW->setValue(3); ui->volume->setValue(20); ui->squelch->setValue(-40); + ui->spectrumGUI->resetToDefaults(); applySettings(); } @@ -53,6 +51,8 @@ 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.writeU32(7, m_channelMarker->getColor().rgb()); return s.final(); } @@ -66,6 +66,8 @@ bool NFMDemodGUI::deserialize(const QByteArray& data) } if(d.getVersion() == 1) { + QByteArray bytetmp; + quint32 u32tmp; qint32 tmp; d.readS32(1, &tmp, 0); m_channelMarker->setCenterFrequency(tmp); @@ -77,6 +79,10 @@ 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); + if(d.readU32(7, &u32tmp)) + m_channelMarker->setColor(u32tmp); applySettings(); return true; } else { @@ -120,13 +126,34 @@ void NFMDemodGUI::on_squelch_valueChanged(int value) applySettings(); } -NFMDemodGUI::NFMDemodGUI(PluginAPI* pluginAPI, QDockWidget* dockWidget, QWidget* parent) : - PluginGUI(parent), + +void NFMDemodGUI::onWidgetRolled(QWidget* widget, bool rollDown) +{ + /* + if((widget == ui->spectrumContainer) && (m_nfmDemod != NULL)) + m_nfmDemod->setSpectrum(m_threadedSampleSink->getMessageQueue(), rollDown); + */ +} + +void NFMDemodGUI::onMenuDoubleClicked() +{ + if(!m_basicSettingsShown) { + m_basicSettingsShown = true; + BasicChannelSettingsWidget* bcsw = new BasicChannelSettingsWidget(m_channelMarker, this); + bcsw->show(); + } +} + +NFMDemodGUI::NFMDemodGUI(PluginAPI* pluginAPI, QWidget* parent) : + RollupWidget(parent), ui(new Ui::NFMDemodGUI), m_pluginAPI(pluginAPI), - m_dockWidget(dockWidget) + m_basicSettingsShown(false) { ui->setupUi(this); + setAttribute(Qt::WA_DeleteOnClose, true); + connect(this, SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); + connect(this, SIGNAL(menuDoubleClickEvent()), this, SLOT(onMenuDoubleClicked())); m_audioFifo = new AudioFifo(4, 44100 / 4); m_spectrumVis = new SpectrumVis(ui->glSpectrum); @@ -150,11 +177,14 @@ NFMDemodGUI::NFMDemodGUI(PluginAPI* pluginAPI, QDockWidget* dockWidget, QWidget* connect(m_channelMarker, SIGNAL(changed()), this, SLOT(viewChanged())); m_pluginAPI->addChannelMarker(m_channelMarker); + ui->spectrumGUI->setBuddies(m_threadedSampleSink->getMessageQueue(), m_spectrumVis, ui->glSpectrum); + applySettings(); } NFMDemodGUI::~NFMDemodGUI() { + m_pluginAPI->removeChannelInstance(this); m_pluginAPI->removeAudioSource(m_audioFifo); m_pluginAPI->removeSampleSink(m_threadedSampleSink); delete m_threadedSampleSink; @@ -168,6 +198,7 @@ NFMDemodGUI::~NFMDemodGUI() void NFMDemodGUI::applySettings() { + setTitleColor(m_channelMarker->getColor()); m_channelizer->configure(m_threadedSampleSink->getMessageQueue(), 44100, m_channelMarker->getCenterFrequency()); diff --git a/plugins/channel/nfm/nfmdemodgui.h b/plugins/channel/nfm/nfmdemodgui.h index 1381b5a..edfb808 100644 --- a/plugins/channel/nfm/nfmdemodgui.h +++ b/plugins/channel/nfm/nfmdemodgui.h @@ -1,10 +1,9 @@ #ifndef INCLUDE_NFMDEMODGUI_H #define INCLUDE_NFMDEMODGUI_H +#include "gui/rollupwidget.h" #include "plugin/plugingui.h" -class QDockWidget; - class PluginAPI; class ChannelMarker; @@ -18,14 +17,14 @@ namespace Ui { class NFMDemodGUI; } -class NFMDemodGUI : public PluginGUI { +class NFMDemodGUI : public RollupWidget, public PluginGUI { Q_OBJECT public: static NFMDemodGUI* create(PluginAPI* pluginAPI); void destroy(); - void setWidgetName(const QString& name); + void setName(const QString& name); void resetToDefaults(); QByteArray serialize() const; @@ -39,12 +38,14 @@ private slots: void on_afBW_valueChanged(int value); void on_volume_valueChanged(int value); void on_squelch_valueChanged(int value); + void onWidgetRolled(QWidget* widget, bool rollDown); + void onMenuDoubleClicked(); private: Ui::NFMDemodGUI* ui; PluginAPI* m_pluginAPI; - QDockWidget* m_dockWidget; ChannelMarker* m_channelMarker; + bool m_basicSettingsShown; AudioFifo* m_audioFifo; ThreadedSampleSink* m_threadedSampleSink; @@ -52,10 +53,9 @@ private: NFMDemod* m_nfmDemod; SpectrumVis* m_spectrumVis; - static const QString m_demodName; static const int m_rfBW[]; - explicit NFMDemodGUI(PluginAPI* pluginAPI, QDockWidget* dockWidget, QWidget* parent = NULL); + explicit NFMDemodGUI(PluginAPI* pluginAPI, QWidget* parent = NULL); ~NFMDemodGUI(); void applySettings(); diff --git a/plugins/channel/nfm/nfmdemodgui.ui b/plugins/channel/nfm/nfmdemodgui.ui index 5087276..64cc449 100644 --- a/plugins/channel/nfm/nfmdemodgui.ui +++ b/plugins/channel/nfm/nfmdemodgui.ui @@ -1,202 +1,229 @@ NFMDemodGUI - + 0 0 - 208 - 226 + 302 + 410 - Form + NFM Demodulator - - - 3 + + + + 35 + 35 + 242 + 96 + - - 0 + + Settings - - - - - 200 - 150 - - - - - - - - 2 - - - 3 - - - - - 8 - - - 1 - - - 4 - - - Qt::Horizontal - - - - - - - RF Bandwidth - - - - - - - AF Bandwidth - - - - - - - Squelch - - - - - - - Volume - - - - - - - - 50 - 0 - - - - 12.5kHz - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - 1 - - - 20 - - - 1 - - - 3 - - - Qt::Horizontal - - - - - - - 100 - - - 20 - - - Qt::Horizontal - - - - - - - -100 - - - 0 - - - -40 - - - Qt::Horizontal - - - - - - - - 50 - 0 - - - - 3 kHz - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - 50 - 0 - - - - 2.0 - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - 50 - 0 - - - - -40dB - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - + + + 2 + + + 3 + + + + + RF Bandwidth + + + + + + + 8 + + + 1 + + + 4 + + + Qt::Horizontal + + + + + + + + 50 + 0 + + + + 12.5kHz + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + AF Bandwidth + + + + + + + 1 + + + 20 + + + 1 + + + 3 + + + Qt::Horizontal + + + + + + + + 50 + 0 + + + + 3 kHz + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + Volume + + + + + + + 100 + + + 20 + + + Qt::Horizontal + + + + + + + + 50 + 0 + + + + 2.0 + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + Squelch + + + + + + + -100 + + + 0 + + + -40 + + + Qt::Horizontal + + + + + + + + 50 + 0 + + + + -40dB + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + + 40 + 140 + 218 + 184 + + + + Channel Spectrum + + + + 2 + + + 3 + + + + + + 200 + 150 + + + + + + + + + @@ -205,6 +232,18 @@
gui/glspectrum.h
1
+ + GLSpectrumGUI + QWidget +
gui/glspectrumgui.h
+ 1 +
+ + RollupWidget + QWidget +
gui/rollupwidget.h
+ 1 +
diff --git a/plugins/channel/nfm/nfmplugin.cpp b/plugins/channel/nfm/nfmplugin.cpp index f252a3a..57b5b92 100644 --- a/plugins/channel/nfm/nfmplugin.cpp +++ b/plugins/channel/nfm/nfmplugin.cpp @@ -28,16 +28,17 @@ void NFMPlugin::initPlugin(PluginAPI* pluginAPI) m_pluginAPI = pluginAPI; // register NFM demodulator - QAction* action = new QAction(tr("&NFM"), this); + QAction* action = new QAction(tr("&NFM Demodulator"), this); connect(action, SIGNAL(triggered()), this, SLOT(createInstanceNFM())); - m_pluginAPI->registerDemodulator("de.maintech.sdrangelove.demod.nfm", this, action); + m_pluginAPI->registerChannel("de.maintech.sdrangelove.channel.nfm", this, action); } -PluginGUI* NFMPlugin::createDemod(const QString& demodName) +PluginGUI* NFMPlugin::createChannel(const QString& channelName) { - if(demodName == "de.maintech.sdrangelove.demod.nfm") { - PluginGUI* gui = NFMDemodGUI::create(m_pluginAPI); - m_pluginAPI->registerDemodulatorInstance("de.maintech.sdrangelove.demod.nfm", gui); + if(channelName == "de.maintech.sdrangelove.channel.nfm") { + NFMDemodGUI* gui = NFMDemodGUI::create(m_pluginAPI); + m_pluginAPI->registerChannelInstance("de.maintech.sdrangelove.channel.nfm", gui); + m_pluginAPI->addChannelRollup(gui); return gui; } else { return NULL; @@ -46,6 +47,7 @@ PluginGUI* NFMPlugin::createDemod(const QString& demodName) void NFMPlugin::createInstanceNFM() { - m_pluginAPI->registerDemodulatorInstance("de.maintech.sdrangelove.demod.nfm", NFMDemodGUI::create(m_pluginAPI)); + NFMDemodGUI* gui = NFMDemodGUI::create(m_pluginAPI); + m_pluginAPI->registerChannelInstance("de.maintech.sdrangelove.channel.nfm", gui); + m_pluginAPI->addChannelRollup(gui); } - diff --git a/plugins/channel/nfm/nfmplugin.h b/plugins/channel/nfm/nfmplugin.h index 78db600..0cd345b 100644 --- a/plugins/channel/nfm/nfmplugin.h +++ b/plugins/channel/nfm/nfmplugin.h @@ -7,7 +7,7 @@ class NFMPlugin : public QObject, PluginInterface { Q_OBJECT Q_INTERFACES(PluginInterface) - Q_PLUGIN_METADATA(IID "de.maintech.sdrangelove.demod.nfm") + Q_PLUGIN_METADATA(IID "de.maintech.sdrangelove.channel.nfm") public: explicit NFMPlugin(QObject* parent = NULL); @@ -15,7 +15,7 @@ public: const PluginDescriptor& getPluginDescriptor() const; void initPlugin(PluginAPI* pluginAPI); - PluginGUI* createDemod(const QString& demodName); + PluginGUI* createChannel(const QString& channelName); private: static const PluginDescriptor m_pluginDescriptor; -- cgit v1.2.3