diff --git a/plugins/channelrx/demodwfm/wfmdemodgui.cpp b/plugins/channelrx/demodwfm/wfmdemodgui.cpp index 8bd8b3789..85d638155 100644 --- a/plugins/channelrx/demodwfm/wfmdemodgui.cpp +++ b/plugins/channelrx/demodwfm/wfmdemodgui.cpp @@ -58,81 +58,26 @@ void WFMDemodGUI::setCenterFrequency(qint64 centerFrequency) void WFMDemodGUI::resetToDefaults() { - blockApplySettings(true); - - ui->rfBW->setCurrentIndex(6); - ui->afBW->setValue(3); - ui->volume->setValue(20); - ui->squelch->setValue(-40); - ui->deltaFrequency->setValue(0); - - blockApplySettings(false); - applySettings(); + m_settings.resetToDefaults(); + displaySettings(); + applySettings(); } QByteArray WFMDemodGUI::serialize() const { - SimpleSerializer s(1); - s.writeS32(1, m_channelMarker.getCenterFrequency()); - s.writeS32(2, ui->rfBW->currentIndex()); - s.writeS32(3, ui->afBW->value()); - s.writeS32(4, ui->volume->value()); - s.writeS32(5, ui->squelch->value()); - s.writeU32(7, m_channelMarker.getColor().rgb()); - return s.final(); + return m_settings.serialize(); } bool WFMDemodGUI::deserialize(const QByteArray& data) { - SimpleDeserializer d(data); - - if (!d.isValid()) - { - resetToDefaults(); - return false; - } - - if (d.getVersion() == 1) - { - QByteArray bytetmp; - quint32 u32tmp; - qint32 tmp; - - blockApplySettings(true); - m_channelMarker.blockSignals(true); - - d.readS32(1, &tmp, 0); - m_channelMarker.setCenterFrequency(tmp); - - d.readS32(2, &tmp, 6); - ui->rfBW->setCurrentIndex(tmp); - m_channelMarker.setBandwidth(m_rfBW[tmp]); - - d.readS32(3, &tmp, 3); - ui->afBW->setValue(tmp); - - d.readS32(4, &tmp, 20); - ui->volume->setValue(tmp); - - d.readS32(5, &tmp, -40); - ui->squelch->setValue(tmp); - - if(d.readU32(7, &u32tmp)) - { - m_channelMarker.setColor(u32tmp); - } - - blockApplySettings(false); - m_channelMarker.blockSignals(false); - - applySettings(); - return true; - } - else - { - resetToDefaults(); - return false; - } + if(m_settings.deserialize(data)) { + displaySettings(); + applySettings(true); + return true; + } else { + resetToDefaults(); + return false; + } } bool WFMDemodGUI::handleMessage(const Message& message __attribute__((unused))) @@ -148,35 +93,41 @@ void WFMDemodGUI::viewChanged() void WFMDemodGUI::on_deltaFrequency_changed(qint64 value) { m_channelMarker.setCenterFrequency(value); + m_settings.m_inputFrequencyOffset = m_channelMarker.getCenterFrequency(); + applySettings(); } void WFMDemodGUI::on_rfBW_currentIndexChanged(int index) { - m_channelMarker.setBandwidth(m_rfBW[index]); - applySettings(); + m_channelMarker.setBandwidth(WFMDemodSettings::getRFBW(index)); + m_settings.m_rfBandwidth = WFMDemodSettings::getRFBW(index); + applySettings(); } void WFMDemodGUI::on_afBW_valueChanged(int value) { - ui->afBWText->setText(QString("%1 kHz").arg(value)); + ui->afBWText->setText(QString("%1 kHz").arg(value)); + m_settings.m_afBandwidth = value * 1000.0; applySettings(); } void WFMDemodGUI::on_volume_valueChanged(int value) { - ui->volumeText->setText(QString("%1").arg(value / 10.0, 0, 'f', 1)); + ui->volumeText->setText(QString("%1").arg(value / 10.0, 0, 'f', 1)); + m_settings.m_volume = value / 10.0; applySettings(); } void WFMDemodGUI::on_squelch_valueChanged(int value) { ui->squelchText->setText(QString("%1 dB").arg(value)); + m_settings.m_squelch = value; applySettings(); } void WFMDemodGUI::on_audioMute_toggled(bool checked) { - m_audioMute = checked; + m_settings.m_audioMute = checked; applySettings(); } @@ -230,10 +181,11 @@ WFMDemodGUI::WFMDemodGUI(PluginAPI* pluginAPI, DeviceSourceAPI *deviceAPI, QWidg connect(&m_pluginAPI->getMainWindow()->getMasterTimer(), SIGNAL(timeout()), this, SLOT(tick())); //m_channelMarker = new ChannelMarker(this); - m_channelMarker.setColor(Qt::blue); - m_channelMarker.setBandwidth(m_rfBW[4]); + m_channelMarker.setBandwidth(WFMDemodSettings::getRFBW(4)); m_channelMarker.setCenterFrequency(0); m_channelMarker.setVisible(true); + m_channelMarker.setColor(m_settings.m_rgbColor); + setTitleColor(m_channelMarker.getColor()); connect(&m_channelMarker, SIGNAL(changed()), this, SLOT(viewChanged())); @@ -241,7 +193,8 @@ WFMDemodGUI::WFMDemodGUI(PluginAPI* pluginAPI, DeviceSourceAPI *deviceAPI, QWidg m_deviceAPI->addChannelMarker(&m_channelMarker); m_deviceAPI->addRollupWidget(this); - applySettings(); + displaySettings(); + applySettings(true); } WFMDemodGUI::~WFMDemodGUI() @@ -260,27 +213,56 @@ void WFMDemodGUI::blockApplySettings(bool block) m_doApplySettings = !block; } -void WFMDemodGUI::applySettings() +void WFMDemodGUI::applySettings(bool force) { if (m_doApplySettings) { setTitleColor(m_channelMarker.getColor()); m_channelizer->configure(m_channelizer->getInputMessageQueue(), - requiredBW(m_rfBW[ui->rfBW->currentIndex()]), // TODO: this is where requested sample rate is specified + requiredBW(WFMDemodSettings::getRFBW(ui->rfBW->currentIndex())), // TODO: this is where requested sample rate is specified m_channelMarker.getCenterFrequency()); ui->deltaFrequency->setValue(m_channelMarker.getCenterFrequency()); m_wfmDemod->configure(m_wfmDemod->getInputMessageQueue(), - m_rfBW[ui->rfBW->currentIndex()], - ui->afBW->value() * 1000.0, - ui->volume->value() / 10.0, - ui->squelch->value(), - ui->audioMute->isChecked()); + m_settings.m_rfBandwidth, + m_settings.m_afBandwidth, + m_settings.m_volume, + m_settings.m_squelch, + m_settings.m_audioMute); } } +void WFMDemodGUI::displaySettings() +{ + blockApplySettings(true); + + ui->deltaFrequency->setValue(m_settings.m_inputFrequencyOffset); + + ui->rfBW->setCurrentIndex(WFMDemodSettings::getRFBWIndex(m_settings.m_rfBandwidth)); + m_channelMarker.setBandwidth(m_settings.m_rfBandwidth); + + ui->afBW->setValue(m_settings.m_afBandwidth/1000.0); + ui->afBWText->setText(QString("%1 kHz").arg(m_settings.m_afBandwidth/1000.0)); + + ui->volume->setValue(m_settings.m_volume * 10.0); + ui->volumeText->setText(QString("%1").arg(m_settings.m_volume, 0, 'f', 1)); + + ui->squelch->setValue(m_settings.m_squelch); + ui->squelchText->setText(QString("%1 dB").arg(m_settings.m_squelch)); + + m_channelMarker.blockSignals(true); + m_channelMarker.setCenterFrequency(m_settings.m_inputFrequencyOffset); + m_channelMarker.setUDPAddress(m_settings.m_udpAddress); + m_channelMarker.setUDPSendPort(m_settings.m_udpPort); + m_channelMarker.setColor(m_settings.m_rgbColor); + setTitleColor(m_settings.m_rgbColor); + m_channelMarker.blockSignals(false); + + blockApplySettings(false); +} + void WFMDemodGUI::leaveEvent(QEvent*) { blockApplySettings(true); diff --git a/plugins/channelrx/demodwfm/wfmdemodgui.h b/plugins/channelrx/demodwfm/wfmdemodgui.h index b322d702f..59ff2a8c0 100644 --- a/plugins/channelrx/demodwfm/wfmdemodgui.h +++ b/plugins/channelrx/demodwfm/wfmdemodgui.h @@ -7,6 +7,8 @@ #include "dsp/movingaverage.h" #include "util/messagequeue.h" +#include "wfmdemodsettings.h" + class PluginAPI; class DeviceSourceAPI; @@ -55,6 +57,7 @@ private: PluginAPI* m_pluginAPI; DeviceSourceAPI* m_deviceAPI; ChannelMarker m_channelMarker; + WFMDemodSettings m_settings; bool m_basicSettingsShown; bool m_doApplySettings; bool m_audioMute; @@ -73,7 +76,8 @@ private: virtual ~WFMDemodGUI(); void blockApplySettings(bool block); - void applySettings(); + void applySettings(bool force = false); + void displaySettings(); void leaveEvent(QEvent*); void enterEvent(QEvent*); diff --git a/plugins/channelrx/demodwfm/wfmdemodgui.ui b/plugins/channelrx/demodwfm/wfmdemodgui.ui index 1ddd0c1f5..1bee28707 100644 --- a/plugins/channelrx/demodwfm/wfmdemodgui.ui +++ b/plugins/channelrx/demodwfm/wfmdemodgui.ui @@ -367,7 +367,7 @@ - -40dB + -40 dB Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter diff --git a/plugins/channelrx/demodwfm/wfmdemodsettings.cpp b/plugins/channelrx/demodwfm/wfmdemodsettings.cpp index c308dbe09..5d41f1b5a 100644 --- a/plugins/channelrx/demodwfm/wfmdemodsettings.cpp +++ b/plugins/channelrx/demodwfm/wfmdemodsettings.cpp @@ -42,6 +42,7 @@ void WFMDemodSettings::resetToDefaults() m_afBandwidth = 15000; m_volume = 2.0; m_squelch = -60.0; + m_audioMute = false; m_audioSampleRate = DSPEngine::instance()->getAudioSampleRate(); m_copyAudioToUDP = false; m_udpAddress = "127.0.0.1"; diff --git a/plugins/channelrx/demodwfm/wfmdemodsettings.h b/plugins/channelrx/demodwfm/wfmdemodsettings.h index 713964145..ee5d0e276 100644 --- a/plugins/channelrx/demodwfm/wfmdemodsettings.h +++ b/plugins/channelrx/demodwfm/wfmdemodsettings.h @@ -28,6 +28,7 @@ struct WFMDemodSettings Real m_afBandwidth; Real m_volume; Real m_squelch; + bool m_audioMute; quint32 m_audioSampleRate; bool m_copyAudioToUDP; QString m_udpAddress;