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 @@
1
+
+ ButtonSwitch
+ QToolButton
+
+
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;
}