diff --git a/devices/plutosdr/deviceplutosdrbox.cpp b/devices/plutosdr/deviceplutosdrbox.cpp index 7f3038722..67ca717ce 100644 --- a/devices/plutosdr/deviceplutosdrbox.cpp +++ b/devices/plutosdr/deviceplutosdrbox.cpp @@ -626,6 +626,37 @@ void DevicePlutoSDRBox::getXO() } } +bool DevicePlutoSDRBox::getRxGain(int& gaindB, unsigned int chan) +{ + chan = chan % 2; + char buff[30]; + snprintf(buff, sizeof(buff), "in_voltage%d_hardwaregain", chan); + std::string gainStr; + get_param(DEVICE_PHY, buff, gainStr); + + std::regex gain_regex("(.+)\\.(.+) dB"); + std::smatch gain_match; + std::regex_search(gainStr, gain_match, gain_regex); + + if (gain_match.size() == 3) + { + try + { + gaindB = boost::lexical_cast(gain_match[1]); + return true; + } + catch (const boost::bad_lexical_cast &e) + { + qWarning("DevicePlutoSDRBox::getRxGain: bad conversion to numeric"); + return false; + } + } + else + { + return false; + } +} + bool DevicePlutoSDRBox::getRxRSSI(std::string& rssiStr, unsigned int chan) { chan = chan % 2; diff --git a/devices/plutosdr/deviceplutosdrbox.h b/devices/plutosdr/deviceplutosdrbox.h index 7a3542c18..9c58d429a 100644 --- a/devices/plutosdr/deviceplutosdrbox.h +++ b/devices/plutosdr/deviceplutosdrbox.h @@ -93,6 +93,7 @@ public: void setFIR(uint32_t sampleRate, uint32_t intdec, DeviceUse use, uint32_t bw, int gain); void setFIREnable(bool enable); void setLOPPMTenths(int ppmTenths); + bool getRxGain(int& gaindB, unsigned int chan); bool getRxRSSI(std::string& rssiStr, unsigned int chan); bool getTxRSSI(std::string& rssiStr, unsigned int chan); bool fetchTemp(); diff --git a/plugins/samplesource/plutosdrinput/plutosdrinput.cpp b/plugins/samplesource/plutosdrinput/plutosdrinput.cpp index 3d6b26651..e677dda06 100644 --- a/plugins/samplesource/plutosdrinput/plutosdrinput.cpp +++ b/plugins/samplesource/plutosdrinput/plutosdrinput.cpp @@ -538,6 +538,15 @@ void PlutoSDRInput::getRSSI(std::string& rssiStr) } } +void PlutoSDRInput::getGain(int& gaindB) +{ + DevicePlutoSDRBox *plutoBox = m_deviceShared.m_deviceParams->getBox(); + + if (!plutoBox->getRxGain(gaindB, 0)) { + gaindB = 0; + } +} + bool PlutoSDRInput::fetchTemperature() { DevicePlutoSDRBox *plutoBox = m_deviceShared.m_deviceParams->getBox(); diff --git a/plugins/samplesource/plutosdrinput/plutosdrinput.h b/plugins/samplesource/plutosdrinput/plutosdrinput.h index 634ccc249..3c664037d 100644 --- a/plugins/samplesource/plutosdrinput/plutosdrinput.h +++ b/plugins/samplesource/plutosdrinput/plutosdrinput.h @@ -90,6 +90,7 @@ public: uint32_t getADCSampleRate() const { return m_deviceSampleRates.m_addaConnvRate; } uint32_t getFIRSampleRate() const { return m_deviceSampleRates.m_hb1Rate; } void getRSSI(std::string& rssiStr); + void getGain(int& gainStr); bool fetchTemperature(); float getTemperature(); diff --git a/plugins/samplesource/plutosdrinput/plutosdrinputgui.cpp b/plugins/samplesource/plutosdrinput/plutosdrinputgui.cpp index 65aacfbd5..402df2112 100644 --- a/plugins/samplesource/plutosdrinput/plutosdrinputgui.cpp +++ b/plugins/samplesource/plutosdrinput/plutosdrinputgui.cpp @@ -386,6 +386,9 @@ void PlutoSDRInputGui::updateStatus() std::string rssiStr; ((PlutoSDRInput *) m_sampleSource)->getRSSI(rssiStr); ui->rssiText->setText(tr("-%1").arg(QString::fromStdString(rssiStr))); + int gaindB; + ((PlutoSDRInput *) m_sampleSource)->getGain(gaindB); + ui->actualGainText->setText(tr("%1").arg(gaindB)); } if (m_statusCounter % 10 == 0) // 5s diff --git a/plugins/samplesource/plutosdrinput/plutosdrinputgui.ui b/plugins/samplesource/plutosdrinput/plutosdrinputgui.ui index 2ea09a0ec..abdb83670 100644 --- a/plugins/samplesource/plutosdrinput/plutosdrinputgui.ui +++ b/plugins/samplesource/plutosdrinput/plutosdrinputgui.ui @@ -848,6 +848,25 @@ + + + + + 24 + 0 + + + + Actual gain (dB) + + + 00 + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + diff --git a/plugins/samplesource/plutosdrinput/plutosdrinputplugin.cpp b/plugins/samplesource/plutosdrinput/plutosdrinputplugin.cpp index 8dcdf86ff..b50916ae0 100644 --- a/plugins/samplesource/plutosdrinput/plutosdrinputplugin.cpp +++ b/plugins/samplesource/plutosdrinput/plutosdrinputplugin.cpp @@ -28,7 +28,7 @@ class DeviceSourceAPI; const PluginDescriptor PlutoSDRInputPlugin::m_pluginDescriptor = { QString("PlutoSDR Input"), - QString("3.7.3"), + QString("3.7.4"), QString("(c) Edouard Griffiths, F4EXB"), QString("https://github.com/f4exb/sdrangel"), true,