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
gui/buttonswitch.h
- + 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;