From 05914cc0bad994953568b86ae7b1a044344a871c Mon Sep 17 00:00:00 2001 From: Jon Beniston Date: Fri, 25 Aug 2023 15:04:57 +0100 Subject: [PATCH] Fix RTLSDR E4000 gain and bandwidth settings. Add tuner type to GUI. --- external/CMakeLists.txt | 6 +++++- plugins/samplesource/rtlsdr/rtlsdrgui.cpp | 10 +++++++++ plugins/samplesource/rtlsdr/rtlsdrgui.ui | 16 +++++++++++--- plugins/samplesource/rtlsdr/rtlsdrinput.cpp | 24 +++++++++++++++++++-- plugins/samplesource/rtlsdr/rtlsdrinput.h | 3 +++ 5 files changed, 53 insertions(+), 6 deletions(-) diff --git a/external/CMakeLists.txt b/external/CMakeLists.txt index 99bcd7f4a..005886f18 100644 --- a/external/CMakeLists.txt +++ b/external/CMakeLists.txt @@ -1091,7 +1091,11 @@ if (WIN32 OR APPLE) endif () # Disable pkg-config to allow LIBUSB_INCLUDE_DIRS to be used set(DISABLE_PKGCONFIG "-DCMAKE_DISABLE_FIND_PACKAGE_PkgConfig=ON") - # needs libusb + # If we want to use https://github.com/librtlsdr/librtlsdr instead of https://github.com/osmocom/rtl-sdr.git + # - Don't use DISABLE_PKGCONFIG + # - Use -DLIBUSB_INCLUDE_DIR instead of -DLIBUSB_INCLUDE_DIRS + # - Build target is rtl_sdr rather than rtlsdr + # - Use tag development otherwise it will not build with MSVC ExternalProject_Add(rtlsdr GIT_REPOSITORY https://github.com/osmocom/rtl-sdr.git GIT_TAG ${RTLSDR_TAG} diff --git a/plugins/samplesource/rtlsdr/rtlsdrgui.cpp b/plugins/samplesource/rtlsdr/rtlsdrgui.cpp index 7141df793..654f681ff 100644 --- a/plugins/samplesource/rtlsdr/rtlsdrgui.cpp +++ b/plugins/samplesource/rtlsdr/rtlsdrgui.cpp @@ -68,6 +68,14 @@ RTLSDRGui::RTLSDRGui(DeviceUISet *deviceUISet, QWidget* parent) : m_gains = m_sampleSource->getGains(); displayGains(); + rtlsdr_tuner tunerType = m_sampleSource->getTunerType(); + // Disable widgets not relevent for this tuner + bool offsetTuningEnabled = (tunerType != RTLSDR_TUNER_R820T) && (tunerType != RTLSDR_TUNER_R828D); + if (!offsetTuningEnabled) { + ui->offsetTuning->setEnabled(false); + } + ui->tunerType->setText("Tuner: " + m_sampleSource->getTunerName()); + connect(&m_inputMessageQueue, SIGNAL(messageEnqueued()), this, SLOT(handleInputMessages()), Qt::QueuedConnection); m_sampleSource->setMessageQueueToGUI(&m_inputMessageQueue); } @@ -474,6 +482,7 @@ void RTLSDRGui::on_checkBox_stateChanged(int state) if (state == Qt::Checked) { ui->gain->setEnabled(false); + ui->offsetTuning->setEnabled(false); m_settings.m_noModMode = true; updateFrequencyLimits(); ui->centerFrequency->setValue(7000); @@ -482,6 +491,7 @@ void RTLSDRGui::on_checkBox_stateChanged(int state) else { ui->gain->setEnabled(true); + ui->offsetTuning->setEnabled(true); m_settings.m_noModMode = false; updateFrequencyLimits(); ui->centerFrequency->setValue(434000); diff --git a/plugins/samplesource/rtlsdr/rtlsdrgui.ui b/plugins/samplesource/rtlsdr/rtlsdrgui.ui index 97977c5b7..190f2236a 100644 --- a/plugins/samplesource/rtlsdr/rtlsdrgui.ui +++ b/plugins/samplesource/rtlsdr/rtlsdrgui.ui @@ -500,12 +500,12 @@ - + - RTLSDR special direct sampling mode (HF Bands) + Tuner type - No-mod DS + Tuner: Unknown @@ -522,6 +522,16 @@ + + + + RTLSDR special direct sampling mode (HF Bands) + + + DS + + + diff --git a/plugins/samplesource/rtlsdr/rtlsdrinput.cpp b/plugins/samplesource/rtlsdr/rtlsdrinput.cpp index 06561caaa..a2cf99ea5 100644 --- a/plugins/samplesource/rtlsdr/rtlsdrinput.cpp +++ b/plugins/samplesource/rtlsdr/rtlsdrinput.cpp @@ -57,6 +57,7 @@ RTLSDRInput::RTLSDRInput(DeviceAPI *deviceAPI) : m_dev(0), m_rtlSDRThread(nullptr), m_deviceDescription("RTLSDR"), + m_tunerType(RTLSDR_TUNER_UNKNOWN), m_running(false) { m_sampleFifo.setLabel(m_deviceDescription); @@ -155,7 +156,9 @@ bool RTLSDRInput::openDevice() return false; } - qInfo("RTLSDRInput::openDevice: open: %s %s, SN: %s", vendor, product, serial); + m_tunerType = rtlsdr_get_tuner_type(m_dev); + + qInfo("RTLSDRInput::openDevice: open: %s %s, SN: %s Tuner: %s", vendor, product, serial, getTunerName()); m_deviceDescription = QString("%1 (SN %2)").arg(product).arg(serial); if ((res = rtlsdr_set_sample_rate(m_dev, 1152000)) < 0) @@ -504,7 +507,8 @@ bool RTLSDRInput::applySettings(const RTLSDRSettings& settings, const QList& getGains() const { return m_gains; } + rtlsdr_tuner getTunerType() const { return m_tunerType; } + QString getTunerName() const; void set_ds_mode(int on); static const quint64 frequencyLowRangeMin; @@ -152,6 +154,7 @@ private: RTLSDRThread* m_rtlSDRThread; QString m_deviceDescription; std::vector m_gains; + rtlsdr_tuner m_tunerType; bool m_running; QNetworkAccessManager *m_networkManager; QNetworkRequest m_networkRequest;