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;