diff --git a/plugins/samplesource/rtlsdr/rtlsdrgui.cpp b/plugins/samplesource/rtlsdr/rtlsdrgui.cpp
index 70d2d2b9e..24f7a1676 100644
--- a/plugins/samplesource/rtlsdr/rtlsdrgui.cpp
+++ b/plugins/samplesource/rtlsdr/rtlsdrgui.cpp
@@ -62,6 +62,18 @@ void RTLSDRGui::setCenterFrequency(qint64 centerFrequency)
sendSettings();
}
+void RTLSDRGui::on_dcOffset_toggled(bool checked)
+{
+ m_settings.m_dcBlock = checked;
+ sendSettings();
+}
+
+void RTLSDRGui::on_iqImbalance_toggled(bool checked)
+{
+ m_settings.m_iqImbalance = checked;
+ sendSettings();
+}
+
QByteArray RTLSDRGui::serialize() const
{
return m_settings.serialize();
@@ -115,6 +127,8 @@ void RTLSDRGui::handleSourceMessages()
void RTLSDRGui::displaySettings()
{
ui->centerFrequency->setValue(m_settings.m_centerFrequency / 1000);
+ ui->dcOffset->setChecked(m_settings.m_dcBlock);
+ ui->iqImbalance->setChecked(m_settings.m_iqImbalance);
ui->samplerateText->setText(tr("%1k").arg(m_settings.m_devSampleRate / 1000));
unsigned int sampleRateIndex = RTLSDRSampleRates::getRateIndex(m_settings.m_devSampleRate);
ui->samplerate->setValue(sampleRateIndex);
diff --git a/plugins/samplesource/rtlsdr/rtlsdrgui.h b/plugins/samplesource/rtlsdr/rtlsdrgui.h
index cf3a61b9c..14de077e0 100644
--- a/plugins/samplesource/rtlsdr/rtlsdrgui.h
+++ b/plugins/samplesource/rtlsdr/rtlsdrgui.h
@@ -44,6 +44,8 @@ private:
private slots:
void on_centerFrequency_changed(quint64 value);
+ void on_dcOffset_toggled(bool checked);
+ void on_iqImbalance_toggled(bool checked);
void on_decim_valueChanged(int value);
void on_ppm_valueChanged(int value);
void on_gain_valueChanged(int value);
diff --git a/plugins/samplesource/rtlsdr/rtlsdrgui.ui b/plugins/samplesource/rtlsdr/rtlsdrgui.ui
index 536be0eca..71f2ec58a 100644
--- a/plugins/samplesource/rtlsdr/rtlsdrgui.ui
+++ b/plugins/samplesource/rtlsdr/rtlsdrgui.ui
@@ -6,8 +6,8 @@
0
0
- 198
- 173
+ 247
+ 189
@@ -36,7 +36,7 @@
2
-
-
+
-
@@ -96,6 +96,80 @@
+ -
+
+
+ 3
+
+
-
+
+
+ -99
+
+
+ 1
+
+
+ Qt::Horizontal
+
+
+
+ -
+
+
+
+ 40
+ 0
+
+
+
+ 0
+
+
+ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
+
+
+
+ -
+
+
+ LO ppm
+
+
+
+
+
+ -
+
+
-
+
+
+ Automatic DC offset removal
+
+
+ DC offset
+
+
+
+ -
+
+
+ Automatic IQ imbalance correction
+
+
+ IQ imbalance
+
+
+
+ -
+
+
+ Auto corr
+
+
+
+
+
-
@@ -104,10 +178,26 @@
-
-
+
3
+
-
+
+
+
+ 40
+ 0
+
+
+
+ 1024k
+
+
+ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
+
+
+
-
@@ -125,7 +215,7 @@
-
-
+
0
@@ -137,8 +227,38 @@
+
+
+ -
+
+
+ 3
+
+
-
+
+
+ Dec.
+
+
+
+ -
+
+
+ 4
+
+
+ 1
+
+
+ 4
+
+
+ Qt::Horizontal
+
+
+
-
-
+
40
@@ -146,7 +266,7 @@
- 1024k
+ 16
Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
@@ -163,12 +283,12 @@
-
-
+
3
-
-
+
0
@@ -225,110 +345,7 @@
-
-
-
- 3
-
-
-
-
-
- -99
-
-
- 1
-
-
- Qt::Horizontal
-
-
-
- -
-
-
-
- 40
- 0
-
-
-
- 0
-
-
- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
-
-
-
- -
-
-
- ppm
-
-
-
-
-
- -
-
-
- Qt::Horizontal
-
-
-
- -
-
-
- 3
-
-
-
-
-
- Dec.
-
-
-
- -
-
-
- 4
-
-
- 1
-
-
- 4
-
-
- Qt::Horizontal
-
-
-
- -
-
-
-
- 40
- 0
-
-
-
- 16
-
-
- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
-
-
-
-
-
- -
-
-
- Qt::Horizontal
-
-
-
- -
-
+
-
@@ -364,7 +381,7 @@
ButtonSwitch
QToolButton
-
+
diff --git a/plugins/samplesource/rtlsdr/rtlsdrinput.cpp b/plugins/samplesource/rtlsdr/rtlsdrinput.cpp
index 854bb00cf..fdeb0843c 100644
--- a/plugins/samplesource/rtlsdr/rtlsdrinput.cpp
+++ b/plugins/samplesource/rtlsdr/rtlsdrinput.cpp
@@ -297,6 +297,18 @@ bool RTLSDRInput::applySettings(const RTLSDRSettings& settings, bool force)
}
}
+ 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 (forwardChange)
{
int sampleRate = m_settings.m_devSampleRate/(1<registerSampleSource("org.osmocom.sdr.samplesource.rtl-sdr", this);
+ m_pluginAPI->registerSampleSource(m_deviceTypeID, this);
}
PluginInterface::SampleSourceDevices RTLSDRPlugin::enumSampleSources()
@@ -47,10 +49,10 @@ PluginInterface::SampleSourceDevices RTLSDRPlugin::enumSampleSources()
if(rtlsdr_get_device_usb_strings((uint32_t)i, vendor, product, serial) != 0)
continue;
- QString displayedName(QString("RTL-SDR #%1 (%2 #%3)").arg(i + 1).arg(product).arg(serial));
+ QString displayedName(QString("RTL-SDR #%1 %2").arg(i).arg(serial));
result.append(SampleSourceDevice(displayedName,
- "org.osmocom.sdr.samplesource.rtl-sdr",
+ m_deviceTypeID,
QString(serial),
i));
}
@@ -59,7 +61,7 @@ PluginInterface::SampleSourceDevices RTLSDRPlugin::enumSampleSources()
PluginGUI* RTLSDRPlugin::createSampleSourcePluginGUI(const QString& sourceId)
{
- if(sourceId == "org.osmocom.sdr.samplesource.rtl-sdr") {
+ if(sourceId == m_deviceTypeID) {
RTLSDRGui* gui = new RTLSDRGui(m_pluginAPI);
m_pluginAPI->setInputGUI(gui);
return gui;
diff --git a/plugins/samplesource/rtlsdr/rtlsdrplugin.h b/plugins/samplesource/rtlsdr/rtlsdrplugin.h
index 0ba636809..fe58f66dd 100644
--- a/plugins/samplesource/rtlsdr/rtlsdrplugin.h
+++ b/plugins/samplesource/rtlsdr/rtlsdrplugin.h
@@ -4,10 +4,12 @@
#include
#include "plugin/plugininterface.h"
+#define RTLSDR_DEVICE_TYPE_ID "sdrangel.samplesource.rtlsdr"
+
class RTLSDRPlugin : public QObject, public PluginInterface {
Q_OBJECT
Q_INTERFACES(PluginInterface)
- Q_PLUGIN_METADATA(IID "org.osmocom.sdr.samplesource.rtl-sdr")
+ Q_PLUGIN_METADATA(IID RTLSDR_DEVICE_TYPE_ID)
public:
explicit RTLSDRPlugin(QObject* parent = NULL);
@@ -18,6 +20,8 @@ public:
virtual SampleSourceDevices enumSampleSources();
virtual PluginGUI* createSampleSourcePluginGUI(const QString& sourceId);
+ static const QString m_deviceTypeID;
+
private:
static const PluginDescriptor m_pluginDescriptor;