diff --git a/plugins/channel/ssb/ssbdemodgui.cpp b/plugins/channel/ssb/ssbdemodgui.cpp index 6dae073d0..520f7aadd 100644 --- a/plugins/channel/ssb/ssbdemodgui.cpp +++ b/plugins/channel/ssb/ssbdemodgui.cpp @@ -41,6 +41,7 @@ void SSBDemodGUI::resetToDefaults() ui->BW->setValue(30); ui->volume->setValue(40); ui->deltaFrequency->setValue(0); + ui->spanLog2->setValue(3); applySettings(); } @@ -53,6 +54,7 @@ QByteArray SSBDemodGUI::serialize() const s.writeS32(3, ui->volume->value()); s.writeBlob(4, ui->spectrumGUI->serialize()); s.writeU32(5, m_channelMarker->getColor().rgb()); + s.writeS32(6, ui->spanLog2->value()); return s.final(); } @@ -81,6 +83,9 @@ bool SSBDemodGUI::deserialize(const QByteArray& data) ui->spectrumGUI->deserialize(bytetmp); if(d.readU32(5, &u32tmp)) m_channelMarker->setColor(u32tmp); + d.readS32(6, &tmp, 20); + ui->spanLog2->setValue(tmp); + setNewRate(tmp); applySettings(); return true; } else { @@ -122,7 +127,7 @@ void SSBDemodGUI::on_deltaFrequency_changed(quint64 value) void SSBDemodGUI::on_BW_valueChanged(int value) { QString s = QString::number(value/10.0, 'f', 1); - ui->BWText->setText(s); + ui->BWText->setText(tr("%1k").arg(s)); m_channelMarker->setBandwidth(value * 100 * 2); if (value < 0) { @@ -164,7 +169,7 @@ void SSBDemodGUI::on_lowCut_valueChanged(int value) int lowCutoff = getEffectiveLowCutoff(value * 100); m_channelMarker->setLowCutoff(lowCutoff); QString s = QString::number(lowCutoff/1000.0, 'f', 1); - ui->lowCutText->setText(s); + ui->lowCutText->setText(tr("%1k").arg(s)); ui->lowCut->setValue(lowCutoff/100); applySettings(); } @@ -175,6 +180,14 @@ void SSBDemodGUI::on_volume_valueChanged(int value) applySettings(); } +void SSBDemodGUI::on_spanLog2_valueChanged(int value) +{ + if (setNewRate(value)) { + applySettings(); + } + +} + void SSBDemodGUI::onWidgetRolled(QWidget* widget, bool rollDown) { /* @@ -196,7 +209,8 @@ SSBDemodGUI::SSBDemodGUI(PluginAPI* pluginAPI, QWidget* parent) : RollupWidget(parent), ui(new Ui::SSBDemodGUI), m_pluginAPI(pluginAPI), - m_basicSettingsShown(false) + m_basicSettingsShown(false), + m_rate(6000) { ui->setupUi(this); setAttribute(Qt::WA_DeleteOnClose, true); @@ -211,14 +225,14 @@ SSBDemodGUI::SSBDemodGUI(PluginAPI* pluginAPI, QWidget* parent) : m_pluginAPI->addAudioSource(m_audioFifo); m_pluginAPI->addSampleSink(m_threadedSampleSink); - ui->glSpectrum->setCenterFrequency(3000); - ui->glSpectrum->setSampleRate(6000); + ui->glSpectrum->setCenterFrequency(m_rate/2); + ui->glSpectrum->setSampleRate(m_rate); ui->glSpectrum->setDisplayWaterfall(true); ui->glSpectrum->setDisplayMaxHold(true); m_channelMarker = new ChannelMarker(this); m_channelMarker->setColor(Qt::green); - m_channelMarker->setBandwidth(6000); + m_channelMarker->setBandwidth(m_rate); m_channelMarker->setSidebands(ChannelMarker::usb); m_channelMarker->setCenterFrequency(0); m_channelMarker->setVisible(true); @@ -244,6 +258,37 @@ SSBDemodGUI::~SSBDemodGUI() delete ui; } +bool SSBDemodGUI::setNewRate(int spanLog2) +{ + if ((spanLog2 < 0) || (spanLog2 > 5)) { + return false; + } + + m_rate = 48000 / (1<BW->value() < -m_rate/100) { + ui->BW->setValue(-m_rate/100); + } else if (ui->BW->value() > m_rate/100) { + ui->BW->setValue(m_rate/100); + } + + if (ui->lowCut->value() < -m_rate/100) { + ui->lowCut->setValue(-m_rate/100); + } else if (ui->lowCut->value() > m_rate/100) { + ui->lowCut->setValue(m_rate/100); + } + + ui->BW->setMinimum(-m_rate/100); + ui->lowCut->setMinimum(-m_rate/100); + ui->BW->setMaximum(m_rate/100); + ui->lowCut->setMaximum(m_rate/100); + + QString s = QString::number(m_rate/1000.0, 'f', 1); + ui->spanText->setText(tr("%1k").arg(s)); + + return true; +} + void SSBDemodGUI::applySettings() { setTitleColor(m_channelMarker->getColor()); diff --git a/plugins/channel/ssb/ssbdemodgui.h b/plugins/channel/ssb/ssbdemodgui.h index 3cd40f6bc..3b24be9ba 100644 --- a/plugins/channel/ssb/ssbdemodgui.h +++ b/plugins/channel/ssb/ssbdemodgui.h @@ -40,6 +40,7 @@ private slots: void on_BW_valueChanged(int value); void on_lowCut_valueChanged(int value); void on_volume_valueChanged(int value); + void on_spanLog2_valueChanged(int value); void onWidgetRolled(QWidget* widget, bool rollDown); void onMenuDoubleClicked(); @@ -48,6 +49,7 @@ private: PluginAPI* m_pluginAPI; ChannelMarker* m_channelMarker; bool m_basicSettingsShown; + int m_rate; AudioFifo* m_audioFifo; ThreadedSampleSink* m_threadedSampleSink; @@ -59,6 +61,7 @@ private: ~SSBDemodGUI(); int getEffectiveLowCutoff(int lowCutoff); + bool setNewRate(int spanLog2); void applySettings(); void leaveEvent(QEvent*); diff --git a/plugins/channel/ssb/ssbdemodgui.ui b/plugins/channel/ssb/ssbdemodgui.ui index f4429d219..8557447e0 100644 --- a/plugins/channel/ssb/ssbdemodgui.ui +++ b/plugins/channel/ssb/ssbdemodgui.ui @@ -7,7 +7,7 @@ 0 0 302 - 410 + 510 @@ -41,7 +41,7 @@ 3 - + -60 @@ -60,7 +60,7 @@ - + @@ -76,7 +76,7 @@ - + @@ -85,14 +85,14 @@ - 3.0 + 3.0k Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - + 100 @@ -136,24 +136,38 @@ - - + + - Bandwidth + Hz - + Volume - - + + - Hz + Bandwidth + + + + + + + Span + + + + + + + Low cutoff @@ -167,14 +181,7 @@ - - - - Low cutoff - - - - + -60 @@ -193,7 +200,7 @@ - + @@ -202,13 +209,51 @@ - 0.3 + 0.3k Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + 6.0k + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + 1 + + + 5 + + + 1 + + + 3 + + + 3 + + + Qt::Horizontal + + + true + + + true + + + @@ -217,7 +262,7 @@ 40 140 218 - 184 + 284 @@ -244,7 +289,7 @@ 200 - 150 + 250