From c00acc658512f1c01929521a5e3b735c72fdae67 Mon Sep 17 00:00:00 2001 From: f4exb Date: Tue, 4 Jul 2017 23:48:24 +0200 Subject: [PATCH] LimeSDR input: individual manually set gains: GUI part --- .../limesdrinput/limesdrinputgui.cpp | 66 +++++- .../limesdrinput/limesdrinputgui.h | 4 + .../limesdrinput/limesdrinputgui.ui | 220 +++++++++++++++--- .../limesdrinput/limesdrinputsettings.cpp | 13 ++ .../limesdrinput/limesdrinputsettings.h | 9 + 5 files changed, 282 insertions(+), 30 deletions(-) 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();