diff --git a/plugins/samplesource/limesdrinput/limesdrinputgui.cpp b/plugins/samplesource/limesdrinput/limesdrinputgui.cpp
index 36f852422..bda27f04b 100644
--- a/plugins/samplesource/limesdrinput/limesdrinputgui.cpp
+++ b/plugins/samplesource/limesdrinput/limesdrinputgui.cpp
@@ -268,10 +268,30 @@ void LimeSDRInputGUI::displaySettings()
ui->lpFIR->setValue(m_settings.m_lpfFIRBW / 1000);
ui->gain->setValue(m_settings.m_gain);
- ui->gainText->setText(tr("%1dB").arg(m_settings.m_gain));
+ ui->gainText->setText(tr("%1").arg(m_settings.m_gain));
ui->antenna->setCurrentIndex((int) m_settings.m_antennaPath);
+ ui->gainMode->setCurrentIndex((int) m_settings.m_gainMode);
+ ui->lnaGain->setValue(m_settings.m_lnaGain);
+ ui->tiaGain->setCurrentIndex(m_settings.m_tiaGain - 1);
+ ui->pgaGain->setValue(m_settings.m_pgaGain);
+
+ if (m_settings.m_gainMode == LimeSDRInputSettings::GAIN_AUTO)
+ {
+ ui->gain->setEnabled(true);
+ ui->lnaGain->setEnabled(false);
+ ui->tiaGain->setEnabled(false);
+ ui->pgaGain->setEnabled(false);
+ }
+ else
+ {
+ ui->gain->setEnabled(false);
+ ui->lnaGain->setEnabled(true);
+ ui->tiaGain->setEnabled(true);
+ ui->pgaGain->setEnabled(true);
+ }
+
setNCODisplay();
ui->ncoEnable->setChecked(m_settings.m_ncoEnable);
@@ -477,10 +497,52 @@ void LimeSDRInputGUI::on_lpFIR_changed(quint64 value)
}
}
+void LimeSDRInputGUI::on_gainMode_currentIndexChanged(int index)
+{
+ m_settings.m_gainMode = (LimeSDRInputSettings::GainMode) index;
+
+ if (index == 0)
+ {
+ ui->gain->setEnabled(true);
+ ui->lnaGain->setEnabled(false);
+ ui->tiaGain->setEnabled(false);
+ ui->pgaGain->setEnabled(false);
+ }
+ else
+ {
+ ui->gain->setEnabled(false);
+ ui->lnaGain->setEnabled(true);
+ ui->tiaGain->setEnabled(true);
+ ui->pgaGain->setEnabled(true);
+ }
+
+ sendSettings();
+}
+
void LimeSDRInputGUI::on_gain_valueChanged(int value)
{
m_settings.m_gain = value;
- ui->gainText->setText(tr("%1dB").arg(m_settings.m_gain));
+ ui->gainText->setText(tr("%1").arg(m_settings.m_gain));
+ sendSettings();
+}
+
+void LimeSDRInputGUI::on_lnaGain_valueChanged(int value)
+{
+ m_settings.m_lnaGain = value;
+ ui->lnaGainText->setText(tr("%1").arg(m_settings.m_lnaGain));
+ sendSettings();
+}
+
+void LimeSDRInputGUI::on_tiaGain_currentIndexChanged(int index)
+{
+ m_settings.m_tiaGain = index + 1;
+ sendSettings();
+}
+
+void LimeSDRInputGUI::on_pgaGain_valueChanged(int value)
+{
+ m_settings.m_pgaGain = value;
+ ui->pgaGainText->setText(tr("%1").arg(m_settings.m_pgaGain));
sendSettings();
}
diff --git a/plugins/samplesource/limesdrinput/limesdrinputgui.h b/plugins/samplesource/limesdrinput/limesdrinputgui.h
index 1b330d5e1..558482211 100644
--- a/plugins/samplesource/limesdrinput/limesdrinputgui.h
+++ b/plugins/samplesource/limesdrinput/limesdrinputgui.h
@@ -87,7 +87,11 @@ private slots:
void on_lpf_changed(quint64 value);
void on_lpFIREnable_toggled(bool checked);
void on_lpFIR_changed(quint64 value);
+ void on_gainMode_currentIndexChanged(int index);
void on_gain_valueChanged(int value);
+ void on_lnaGain_valueChanged(int value);
+ void on_tiaGain_currentIndexChanged(int index);
+ void on_pgaGain_valueChanged(int value);
void on_antenna_currentIndexChanged(int index);
void updateHardware();
diff --git a/plugins/samplesource/limesdrinput/limesdrinputgui.ui b/plugins/samplesource/limesdrinput/limesdrinputgui.ui
index c2213cabc..044f578d6 100644
--- a/plugins/samplesource/limesdrinput/limesdrinputgui.ui
+++ b/plugins/samplesource/limesdrinput/limesdrinputgui.ui
@@ -6,7 +6,7 @@
0
0
- 350
+ 374
290
@@ -550,19 +550,6 @@
- -
-
-
- Qt::Horizontal
-
-
-
- 40
- 20
-
-
-
-
-
@@ -619,19 +606,38 @@
2
-
-
-
- Gain
+
+
+
+ 54
+ 16777215
+
+
+ Automatic or Manual gain selection
+
+
-
+
+ Aut
+
+
+ -
+
+ Man
+
+
-
-
-
- Global gain setting (dB)
+
+
+
+ 24
+ 24
+
-
- 0
+
+ Automatic global gain (dB)
70
@@ -642,30 +648,188 @@
20
-
- Qt::Horizontal
-
-
- 40
+ 18
0
+
+
+ 18
+ 16777215
+
+
- Global gain (dB)
+ Automatic global gain
- 20dB
+ 20
Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
+ -
+
+
+ Qt::Vertical
+
+
+
+ -
+
+
+
+ 24
+ 24
+
+
+
+ Manual LNA gain
+
+
+ 1
+
+
+ 30
+
+
+ 1
+
+
+ 15
+
+
+
+ -
+
+
+
+ 18
+ 0
+
+
+
+
+ 18
+ 16777215
+
+
+
+ Manual LNA gain (dB)
+
+
+ 15
+
+
+ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
+
+
+
+ -
+
+
+
+ 40
+ 16777215
+
+
+
+ Manual TIA gain (dB)
+
+
+ 1
+
+
-
+
+ 1
+
+
+ -
+
+ 2
+
+
+ -
+
+ 3
+
+
+
+
+ -
+
+
+
+ 24
+ 24
+
+
+
+ Manual PGA gain
+
+
+ 32
+
+
+ 1
+
+
+ 16
+
+
+
+ -
+
+
+
+ 18
+ 0
+
+
+
+
+ 18
+ 16777215
+
+
+
+ Manual PGA gain (dB)
+
+
+ 16
+
+
+ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ 40
+ 20
+
+
+
+
+ -
+
+
+ Qt::Vertical
+
+
+
-
diff --git a/plugins/samplesource/limesdrinput/limesdrinputsettings.cpp b/plugins/samplesource/limesdrinput/limesdrinputsettings.cpp
index d2486de92..7bd9606f5 100644
--- a/plugins/samplesource/limesdrinput/limesdrinputsettings.cpp
+++ b/plugins/samplesource/limesdrinput/limesdrinputsettings.cpp
@@ -37,6 +37,10 @@ void LimeSDRInputSettings::resetToDefaults()
m_ncoEnable = false;
m_ncoFrequency = 0;
m_antennaPath = PATH_RFE_NONE;
+ m_gainMode = GAIN_AUTO;
+ m_lnaGain = 15;
+ m_tiaGain = 2;
+ m_pgaGain = 16;
}
QByteArray LimeSDRInputSettings::serialize() const
@@ -55,6 +59,10 @@ QByteArray LimeSDRInputSettings::serialize() const
s.writeBool(11, m_ncoEnable);
s.writeS32(12, m_ncoFrequency);
s.writeS32(13, (int) m_antennaPath);
+ s.writeS32(14, (int) m_gainMode);
+ s.writeU32(15, m_lnaGain);
+ s.writeU32(16, m_tiaGain);
+ s.writeU32(17, m_pgaGain);
return s.final();
}
@@ -86,6 +94,11 @@ bool LimeSDRInputSettings::deserialize(const QByteArray& data)
d.readS32(12, &m_ncoFrequency, 0);
d.readS32(13, &intval, 0);
m_antennaPath = (PathRFE) intval;
+ d.readS32(14, &intval, 0);
+ m_gainMode = (GainMode) intval;
+ d.readU32(15, &m_lnaGain, 15);
+ d.readU32(16, &m_tiaGain, 2);
+ d.readU32(17, &m_pgaGain, 16);
return true;
}
diff --git a/plugins/samplesource/limesdrinput/limesdrinputsettings.h b/plugins/samplesource/limesdrinput/limesdrinputsettings.h
index 09d685f1e..cb5f858f5 100644
--- a/plugins/samplesource/limesdrinput/limesdrinputsettings.h
+++ b/plugins/samplesource/limesdrinput/limesdrinputsettings.h
@@ -42,6 +42,11 @@ struct LimeSDRInputSettings
PATH_RFE_LB2
};
+ typedef enum {
+ GAIN_AUTO,
+ GAIN_MANUAL
+ } GainMode;
+
// global settings to be saved
uint64_t m_centerFrequency;
int m_devSampleRate;
@@ -57,6 +62,10 @@ struct LimeSDRInputSettings
bool m_ncoEnable; //!< Enable TSP NCO and mixing
int m_ncoFrequency; //!< Actual NCO frequency (the resulting frequency with mixing is displayed)
PathRFE m_antennaPath;
+ GainMode m_gainMode; //!< Gain mode: auto or manual
+ uint32_t m_lnaGain; //!< Manual LAN gain
+ uint32_t m_tiaGain; //!< Manual TIA gain
+ uint32_t m_pgaGain; //!< Manual PGA gain
LimeSDRInputSettings();
void resetToDefaults();