From 6800bc769ee186927feb6cbb1b840131940d1bc5 Mon Sep 17 00:00:00 2001 From: f4exb Date: Tue, 16 Jan 2018 01:01:24 +0100 Subject: [PATCH] RTL-SDR: implemented tuner bandwidth control --- debian/changelog | 3 +- .../hackrfinput/hackrfinputplugin.cpp | 2 +- plugins/samplesource/rtlsdr/rtlsdrgui.cpp | 10 ++++ plugins/samplesource/rtlsdr/rtlsdrgui.h | 1 + plugins/samplesource/rtlsdr/rtlsdrgui.ui | 46 ++++++++++++++++++- plugins/samplesource/rtlsdr/rtlsdrinput.cpp | 17 +++++++ .../samplesource/rtlsdr/rtlsdrsettings.cpp | 3 ++ plugins/samplesource/rtlsdr/rtlsdrsettings.h | 1 + 8 files changed, 79 insertions(+), 4 deletions(-) diff --git a/debian/changelog b/debian/changelog index bd7a7c408..74af1c415 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,7 +1,8 @@ sdrangel (3.11.0-1) unstable; urgency=medium * AirspyHF: support - * RTL-SDR: refactored 8 bit samples shifting during decimation + * Refactored 8 bit samples shifting during decimation (RTL-SDR and HackRF Rx) + * RTL-SDR: implemented RF filter control (tuner bandwidth) * GUI: show REST API URL in about dialog -- Edouard Griffiths, F4EXB Sat, 13 Jan 2018 12:14:18 +0100 diff --git a/plugins/samplesource/hackrfinput/hackrfinputplugin.cpp b/plugins/samplesource/hackrfinput/hackrfinputplugin.cpp index 258c1719f..19bdbb9db 100644 --- a/plugins/samplesource/hackrfinput/hackrfinputplugin.cpp +++ b/plugins/samplesource/hackrfinput/hackrfinputplugin.cpp @@ -32,7 +32,7 @@ const PluginDescriptor HackRFInputPlugin::m_pluginDescriptor = { QString("HackRF Input"), - QString("3.9.0"), + QString("3.11.0"), QString("(c) Edouard Griffiths, F4EXB"), QString("https://github.com/f4exb/sdrangel"), true, diff --git a/plugins/samplesource/rtlsdr/rtlsdrgui.cpp b/plugins/samplesource/rtlsdr/rtlsdrgui.cpp index 863760caa..7b97cc9c8 100644 --- a/plugins/samplesource/rtlsdr/rtlsdrgui.cpp +++ b/plugins/samplesource/rtlsdr/rtlsdrgui.cpp @@ -49,6 +49,9 @@ RTLSDRGui::RTLSDRGui(DeviceUISet *deviceUISet, QWidget* parent) : ui->sampleRate->setColorMapper(ColorMapper(ColorMapper::GrayGreenYellow)); ui->sampleRate->setValueRange(7, RTLSDRInput::sampleRateHighRangeMin, RTLSDRInput::sampleRateHighRangeMax); + ui->rfBW->setColorMapper(ColorMapper(ColorMapper::GrayYellow)); + ui->rfBW->setValueRange(4, 350, 8000); + connect(&m_updateTimer, SIGNAL(timeout()), this, SLOT(updateHardware())); connect(&m_statusTimer, SIGNAL(timeout()), this, SLOT(updateStatus())); m_statusTimer.start(500); @@ -247,6 +250,7 @@ void RTLSDRGui::displaySettings() updateFrequencyLimits(); ui->centerFrequency->setValue(m_settings.m_centerFrequency / 1000); ui->sampleRate->setValue(m_settings.m_devSampleRate); + ui->rfBW->setValue(m_settings.m_rfBandwidth / 1000); ui->dcOffset->setChecked(m_settings.m_dcBlock); ui->iqImbalance->setChecked(m_settings.m_iqImbalance); ui->ppm->setValue(m_settings.m_loPpmCorrection); @@ -435,6 +439,12 @@ void RTLSDRGui::on_sampleRate_changed(quint64 value) sendSettings(); } +void RTLSDRGui::on_rfBW_changed(quint64 value) +{ + m_settings.m_rfBandwidth = value * 1000; + sendSettings(); +} + void RTLSDRGui::on_lowSampleRate_toggled(bool checked) { if (checked) { diff --git a/plugins/samplesource/rtlsdr/rtlsdrgui.h b/plugins/samplesource/rtlsdr/rtlsdrgui.h index a7d6bf37a..f2c838618 100644 --- a/plugins/samplesource/rtlsdr/rtlsdrgui.h +++ b/plugins/samplesource/rtlsdr/rtlsdrgui.h @@ -78,6 +78,7 @@ private slots: void handleInputMessages(); void on_centerFrequency_changed(quint64 value); void on_sampleRate_changed(quint64 value); + void on_rfBW_changed(quint64 value); void on_lowSampleRate_toggled(bool checked); void on_dcOffset_toggled(bool checked); void on_iqImbalance_toggled(bool checked); diff --git a/plugins/samplesource/rtlsdr/rtlsdrgui.ui b/plugins/samplesource/rtlsdr/rtlsdrgui.ui index 358850187..5cfd01cb9 100644 --- a/plugins/samplesource/rtlsdr/rtlsdrgui.ui +++ b/plugins/samplesource/rtlsdr/rtlsdrgui.ui @@ -471,7 +471,7 @@ RTLSDR special direct sampling mode (HF Bands) - No-mod Direct Sampling + No-mod DS @@ -488,6 +488,48 @@ + + + + RFBW + + + + + + + + 0 + 0 + + + + + 32 + 16 + + + + + DejaVu Sans Mono + 12 + + + + PointingHandCursor + + + RF filter bandwidth (kHz) + + + + + + + kHz + + + @@ -572,7 +614,7 @@ - + Qt::Vertical diff --git a/plugins/samplesource/rtlsdr/rtlsdrinput.cpp b/plugins/samplesource/rtlsdr/rtlsdrinput.cpp index d85bddd35..8236ec205 100644 --- a/plugins/samplesource/rtlsdr/rtlsdrinput.cpp +++ b/plugins/samplesource/rtlsdr/rtlsdrinput.cpp @@ -515,6 +515,23 @@ bool RTLSDRInput::applySettings(const RTLSDRSettings& settings, bool force) } } + if ((m_settings.m_rfBandwidth != settings.m_rfBandwidth) || force) + { + m_settings.m_rfBandwidth = settings.m_rfBandwidth; + + if (m_dev != 0) + { + if (rtlsdr_set_tuner_bandwidth( m_dev, m_settings.m_rfBandwidth) != 0) + { + qCritical("RTLSDRInput::applySettings: could not set RF bandwidth to %u", m_settings.m_rfBandwidth); + } + else + { + qDebug() << "RTLSDRInput::applySettings: set RF bandwidth to " << m_settings.m_rfBandwidth; + } + } + } + if (forwardChange) { int sampleRate = m_settings.m_devSampleRate/(1<