diff --git a/plugins/samplesource/fcdproplus/fcdproplusgui.cpp b/plugins/samplesource/fcdproplus/fcdproplusgui.cpp index dc800148f..42c46f243 100644 --- a/plugins/samplesource/fcdproplus/fcdproplusgui.cpp +++ b/plugins/samplesource/fcdproplus/fcdproplusgui.cpp @@ -104,6 +104,8 @@ bool FCDProPlusGui::handleMessage(const Message& message) void FCDProPlusGui::displaySettings() { ui->centerFrequency->setValue(m_settings.m_centerFrequency / 1000); + ui->dcOffset->setChecked(m_settings.m_dcBlock); + ui->iqImbalance->setChecked(m_settings.m_iqImbalance); ui->checkBoxG->setChecked(m_settings.m_lnaGain); ui->checkBoxB->setChecked(m_settings.m_biasT); ui->mixGain->setChecked(m_settings.m_mixGain); @@ -127,6 +129,18 @@ void FCDProPlusGui::on_centerFrequency_changed(quint64 value) sendSettings(); } +void FCDProPlusGui::on_dcOffset_toggled(bool checked) +{ + m_settings.m_dcBlock = checked; + sendSettings(); +} + +void FCDProPlusGui::on_iqImbalance_toggled(bool checked) +{ + m_settings.m_iqImbalance = checked; + sendSettings(); +} + void FCDProPlusGui::updateHardware() { FCDProPlusInput::MsgConfigureFCD* message = FCDProPlusInput::MsgConfigureFCD::create(m_settings); diff --git a/plugins/samplesource/fcdproplus/fcdproplusgui.h b/plugins/samplesource/fcdproplus/fcdproplusgui.h index 6a03a0ce5..3c7e168e4 100644 --- a/plugins/samplesource/fcdproplus/fcdproplusgui.h +++ b/plugins/samplesource/fcdproplus/fcdproplusgui.h @@ -45,6 +45,8 @@ private: private slots: void on_centerFrequency_changed(quint64 value); + void on_dcOffset_toggled(bool checked); + void on_iqImbalance_toggled(bool checked); void on_checkBoxG_stateChanged(int state); void on_checkBoxB_stateChanged(int state); void on_mixGain_stateChanged(int state); diff --git a/plugins/samplesource/fcdproplus/fcdproplusgui.ui b/plugins/samplesource/fcdproplus/fcdproplusgui.ui index e3e3ae962..4fc330c0a 100644 --- a/plugins/samplesource/fcdproplus/fcdproplusgui.ui +++ b/plugins/samplesource/fcdproplus/fcdproplusgui.ui @@ -6,8 +6,8 @@ 0 0 - 190 - 137 + 249 + 159 @@ -93,6 +93,74 @@ + + + + + + LO ppm + + + + + + + LO ppm correction + + + -100 + + + 100 + + + 1 + + + Qt::Horizontal + + + + + + + 0.0 + + + + + + + + + + + Auto corr + + + + + + + Automatic DC offset removal + + + DC offset + + + + + + + Automatic IQ imbalance correction + + + IQ imbalance + + + + + @@ -137,7 +205,7 @@ - + IF gain @@ -166,44 +234,14 @@ - + - + - LO ppm + RF filt - - - - LO ppm correction - - - -100 - - - 100 - - - 1 - - - Qt::Horizontal - - - - - - - 0.0 - - - - - - - @@ -211,6 +249,13 @@ + + + + IF filt + + + @@ -218,6 +263,19 @@ + + + + Qt::Horizontal + + + + 40 + 20 + + + + @@ -229,6 +287,11 @@
gui/valuedial.h
1 + + ButtonSwitch + QToolButton +
gui/buttonswitch.h
+
diff --git a/plugins/samplesource/fcdproplus/fcdproplusinput.cpp b/plugins/samplesource/fcdproplus/fcdproplusinput.cpp index ae125764d..b0120919d 100644 --- a/plugins/samplesource/fcdproplus/fcdproplusinput.cpp +++ b/plugins/samplesource/fcdproplus/fcdproplusinput.cpp @@ -229,6 +229,18 @@ void FCDProPlusInput::applySettings(const FCDProPlusSettings& settings, bool for } } + if ((m_settings.m_dcBlock != settings.m_dcBlock) || force) + { + m_settings.m_dcBlock = settings.m_dcBlock; + DSPEngine::instance()->configureCorrections(m_settings.m_dcBlock, m_settings.m_iqImbalance); + } + + if ((m_settings.m_iqImbalance != settings.m_iqImbalance) || force) + { + m_settings.m_iqImbalance = settings.m_iqImbalance; + DSPEngine::instance()->configureCorrections(m_settings.m_dcBlock, m_settings.m_iqImbalance); + } + if (signalChange) { DSPSignalNotification *notif = new DSPSignalNotification(fcd_traits::sampleRate, m_settings.m_centerFrequency); diff --git a/plugins/samplesource/fcdproplus/fcdproplussettings.cpp b/plugins/samplesource/fcdproplus/fcdproplussettings.cpp index 911877280..abfec244b 100644 --- a/plugins/samplesource/fcdproplus/fcdproplussettings.cpp +++ b/plugins/samplesource/fcdproplus/fcdproplussettings.cpp @@ -48,6 +48,8 @@ QByteArray FCDProPlusSettings::serialize() const s.writeS32(5, m_rfFilterIndex); s.writeBool(6, m_dcBlock); s.writeBool(7, m_iqImbalance); + s.writeS32(8, m_LOppmTenths); + s.writeU32(9, m_ifGain); return s.final(); } @@ -73,6 +75,8 @@ bool FCDProPlusSettings::deserialize(const QByteArray& data) d.readS32(5, &m_rfFilterIndex, 0); d.readBool(6, &m_dcBlock, false); d.readBool(7, &m_iqImbalance, false); + d.readS32(8, &m_LOppmTenths, 0); + d.readU32(9, &m_ifGain, 0); return true; }