diff --git a/plugins/samplesource/rtlsdr/rtlsdrgui.cpp b/plugins/samplesource/rtlsdr/rtlsdrgui.cpp index e7a9212ab..c1daae896 100644 --- a/plugins/samplesource/rtlsdr/rtlsdrgui.cpp +++ b/plugins/samplesource/rtlsdr/rtlsdrgui.cpp @@ -449,6 +449,12 @@ void RTLSDRGui::on_sampleRateMode_toggled(bool checked) displaySampleRate(); } +void RTLSDRGui::on_biasT_stateChanged(int state) +{ + m_settings.m_biasTee = (state == Qt::Checked); + sendSettings(); +} + void RTLSDRGui::updateHardware() { if (m_doApplySettings) diff --git a/plugins/samplesource/rtlsdr/rtlsdrgui.h b/plugins/samplesource/rtlsdr/rtlsdrgui.h index 28f16cdfd..ff1f813cd 100644 --- a/plugins/samplesource/rtlsdr/rtlsdrgui.h +++ b/plugins/samplesource/rtlsdr/rtlsdrgui.h @@ -97,6 +97,7 @@ private slots: void on_record_toggled(bool checked); void on_transverter_clicked(); void on_sampleRateMode_toggled(bool checked); + void on_biasT_stateChanged(int state); void openDeviceSettingsDialog(const QPoint& p); void openFileRecordDialog(const QPoint& p); void updateHardware(); diff --git a/plugins/samplesource/rtlsdr/rtlsdrgui.ui b/plugins/samplesource/rtlsdr/rtlsdrgui.ui index 2b4c55c55..f259bfc53 100644 --- a/plugins/samplesource/rtlsdr/rtlsdrgui.ui +++ b/plugins/samplesource/rtlsdr/rtlsdrgui.ui @@ -243,7 +243,7 @@ - Auto corr + Auto @@ -260,7 +260,7 @@ - + @@ -291,14 +291,14 @@ - + Fp - + @@ -317,6 +317,19 @@ + + + + Activate antenna bias tee + + + Qt::RightToLeft + + + Bias T + + + diff --git a/plugins/samplesource/rtlsdr/rtlsdrinput.cpp b/plugins/samplesource/rtlsdr/rtlsdrinput.cpp index 64e79afea..421b89311 100644 --- a/plugins/samplesource/rtlsdr/rtlsdrinput.cpp +++ b/plugins/samplesource/rtlsdr/rtlsdrinput.cpp @@ -562,6 +562,20 @@ bool RTLSDRInput::applySettings(const RTLSDRSettings& settings, bool force) } } + if ((m_settings.m_biasTee != settings.m_biasTee) || force) + { + reverseAPIKeys.append("biasTee"); + + if(m_dev != 0) + { + if (rtlsdr_set_bias_tee(m_dev, settings.m_biasTee ? 1 : 0) != 0) { + qCritical("RTLSDRInput::applySettings: rtlsdr_set_bias_tee() failed"); + } else { + qDebug("RTLSDRInput::applySettings: rtlsdr_set_bias_tee() to %d", settings.m_biasTee ? 1 : 0); + } + } + } + if (settings.m_useReverseAPI) { bool fullUpdate = ((m_settings.m_useReverseAPI != settings.m_useReverseAPI) && settings.m_useReverseAPI) || @@ -676,6 +690,9 @@ void RTLSDRInput::webapiUpdateDeviceSettings( if (deviceSettingsKeys.contains("rfBandwidth")) { settings.m_rfBandwidth = response.getRtlSdrSettings()->getRfBandwidth(); } + if (deviceSettingsKeys.contains("biasTee")) { + settings.m_biasTee = response.getRtlSdrSettings()->getBiasTee() != 0; + } if (deviceSettingsKeys.contains("fileRecordName")) { settings.m_fileRecordName = *response.getRtlSdrSettings()->getFileRecordName(); } @@ -708,6 +725,7 @@ void RTLSDRInput::webapiFormatDeviceSettings(SWGSDRangel::SWGDeviceSettings& res response.getRtlSdrSettings()->setLowSampleRate(settings.m_lowSampleRate ? 1 : 0); response.getRtlSdrSettings()->setNoModMode(settings.m_noModMode ? 1 : 0); response.getRtlSdrSettings()->setOffsetTuning(settings.m_offsetTuning ? 1 : 0); + response.getRtlSdrSettings()->setBiasTee(settings.m_biasTee ? 1 : 0); response.getRtlSdrSettings()->setTransverterDeltaFrequency(settings.m_transverterDeltaFrequency); response.getRtlSdrSettings()->setTransverterMode(settings.m_transverterMode ? 1 : 0); response.getRtlSdrSettings()->setRfBandwidth(settings.m_rfBandwidth); @@ -870,6 +888,9 @@ void RTLSDRInput::webapiReverseSendSettings(QList& deviceSettingsKeys, if (deviceSettingsKeys.contains("rfBandwidth") || force) { swgRtlSdrSettings->setRfBandwidth(settings.m_rfBandwidth); } + if (deviceSettingsKeys.contains("biasTee") || force) { + swgRtlSdrSettings->setBiasTee(settings.m_biasTee ? 1 : 0); + } if (deviceSettingsKeys.contains("fileRecordName") || force) { swgRtlSdrSettings->setFileRecordName(new QString(settings.m_fileRecordName)); } diff --git a/plugins/samplesource/rtlsdr/rtlsdrsettings.cpp b/plugins/samplesource/rtlsdr/rtlsdrsettings.cpp index c1dc27102..da9b9cc3e 100644 --- a/plugins/samplesource/rtlsdr/rtlsdrsettings.cpp +++ b/plugins/samplesource/rtlsdr/rtlsdrsettings.cpp @@ -43,6 +43,7 @@ void RTLSDRSettings::resetToDefaults() m_rfBandwidth = 2500 * 1000; // Hz m_fileRecordName = ""; m_offsetTuning = false; + m_biasTee = false; m_useReverseAPI = false; m_reverseAPIAddress = "127.0.0.1"; m_reverseAPIPort = 8888; @@ -72,6 +73,7 @@ QByteArray RTLSDRSettings::serialize() const s.writeU32(18, m_reverseAPIPort); s.writeU32(19, m_reverseAPIDeviceIndex); s.writeBool(20, m_iqOrder); + s.writeBool(21, m_biasTee); return s.final(); } @@ -119,6 +121,7 @@ bool RTLSDRSettings::deserialize(const QByteArray& data) d.readU32(19, &utmp, 0); m_reverseAPIDeviceIndex = utmp > 99 ? 99 : utmp; d.readBool(20, &m_iqOrder, true); + d.readBool(21, &m_biasTee, false); return true; } diff --git a/plugins/samplesource/rtlsdr/rtlsdrsettings.h b/plugins/samplesource/rtlsdr/rtlsdrsettings.h index beac7cb37..8abfb8b6f 100644 --- a/plugins/samplesource/rtlsdr/rtlsdrsettings.h +++ b/plugins/samplesource/rtlsdr/rtlsdrsettings.h @@ -44,6 +44,7 @@ struct RTLSDRSettings { quint32 m_rfBandwidth; //!< RF filter bandwidth in Hz QString m_fileRecordName; bool m_offsetTuning; + bool m_biasTee; bool m_useReverseAPI; QString m_reverseAPIAddress; uint16_t m_reverseAPIPort;