diff --git a/devices/plutosdr/deviceplutosdrbox.cpp b/devices/plutosdr/deviceplutosdrbox.cpp index 62ccb8c1c..d758daee9 100644 --- a/devices/plutosdr/deviceplutosdrbox.cpp +++ b/devices/plutosdr/deviceplutosdrbox.cpp @@ -755,6 +755,49 @@ void DevicePlutoSDRBox::getTxLORange(uint64_t& minLimit, uint64_t& maxLimit) } } +void DevicePlutoSDRBox::getbbLPRxRange(uint32_t& minLimit, uint32_t& maxLimit) +{ + // values are returned in Hz of RF (complex channel) bandwidth + qint32 stepLimit; + std::string rangeStr; + + char buff[50]; + snprintf(buff, sizeof(buff), "in_voltage_rf_bandwidth_available"); + + if (get_param(DEVICE_PHY, buff, rangeStr)) + { + std::istringstream instream(rangeStr.substr(1, rangeStr.size() - 2)); + instream >> minLimit >> stepLimit >> maxLimit; + } + else + { + minLimit = DevicePlutoSDR::bbLPRxLowLimitFreq; + maxLimit = DevicePlutoSDR::bbLPRxHighLimitFreq; + } +} + +void DevicePlutoSDRBox::getbbLPTxRange(uint32_t& minLimit, uint32_t& maxLimit) +{ + // values are returned in Hz + qint32 stepLimit; + std::string rangeStr; + + char buff[50]; + snprintf(buff, sizeof(buff), "out_voltage_rf_bandwidth_available"); + + if (get_param(DEVICE_PHY, buff, rangeStr)) + { + std::istringstream instream(rangeStr.substr(1, rangeStr.size() - 2)); + instream >> minLimit >> stepLimit >> maxLimit; + } + else + { + minLimit = DevicePlutoSDR::bbLPTxLowLimitFreq; + maxLimit = DevicePlutoSDR::bbLPTxHighLimitFreq; + } +} + + bool DevicePlutoSDRBox::fetchTemp() { std::string temp_mC_str; diff --git a/devices/plutosdr/deviceplutosdrbox.h b/devices/plutosdr/deviceplutosdrbox.h index 16abfb4f3..2b2c5c938 100644 --- a/devices/plutosdr/deviceplutosdrbox.h +++ b/devices/plutosdr/deviceplutosdrbox.h @@ -107,6 +107,8 @@ public: bool getTxRSSI(std::string& rssiStr, unsigned int chan); void getRxLORange(uint64_t& minLimit, uint64_t& maxLimit); void getTxLORange(uint64_t& minLimit, uint64_t& maxLimit); + void getbbLPRxRange(uint32_t& minLimit, uint32_t& maxLimit); + void getbbLPTxRange(uint32_t& minLimit, uint32_t& maxLimit); bool fetchTemp(); float getTemp() const { return m_temp; } bool getRateGovernors(std::string& rateGovernors); diff --git a/plugins/samplesink/plutosdroutput/plutosdroutput.cpp b/plugins/samplesink/plutosdroutput/plutosdroutput.cpp index f1d2025ab..14370e3fd 100644 --- a/plugins/samplesink/plutosdroutput/plutosdroutput.cpp +++ b/plugins/samplesink/plutosdroutput/plutosdroutput.cpp @@ -600,6 +600,16 @@ void PlutoSDROutput::getLORange(qint64& minLimit, qint64& maxLimit) maxLimit = max; } +void PlutoSDROutput::getbbLPRange(quint32& minLimit, quint32& maxLimit) +{ + uint32_t min, max; + DevicePlutoSDRBox *plutoBox = m_deviceShared.m_deviceParams->getBox(); + + plutoBox->getbbLPTxRange(min, max); + minLimit = min; + maxLimit = max; +} + bool PlutoSDROutput::fetchTemperature() { DevicePlutoSDRBox *plutoBox = m_deviceShared.m_deviceParams->getBox(); diff --git a/plugins/samplesink/plutosdroutput/plutosdroutput.h b/plugins/samplesink/plutosdroutput/plutosdroutput.h index 502ef9384..e59cccf38 100644 --- a/plugins/samplesink/plutosdroutput/plutosdroutput.h +++ b/plugins/samplesink/plutosdroutput/plutosdroutput.h @@ -123,6 +123,7 @@ public: uint32_t getFIRSampleRate() const { return m_deviceSampleRates.m_hb1Rate; } void getRSSI(std::string& rssiStr); void getLORange(qint64& minLimit, qint64& maxLimit); + void getbbLPRange(quint32& minLimit, quint32& maxLimit); bool fetchTemperature(); float getTemperature(); diff --git a/plugins/samplesink/plutosdroutput/plutosdroutputgui.cpp b/plugins/samplesink/plutosdroutput/plutosdroutputgui.cpp index d56ddb27c..665a33a13 100644 --- a/plugins/samplesink/plutosdroutput/plutosdroutputgui.cpp +++ b/plugins/samplesink/plutosdroutput/plutosdroutputgui.cpp @@ -53,7 +53,10 @@ PlutoSDROutputGUI::PlutoSDROutputGUI(DeviceUISet *deviceUISet, QWidget* parent) ui->sampleRate->setValueRange(8, DevicePlutoSDR::srLowLimitFreq, DevicePlutoSDR::srHighLimitFreq); ui->lpf->setColorMapper(ColorMapper(ColorMapper::GrayYellow)); - ui->lpf->setValueRange(5, DevicePlutoSDR::bbLPTxLowLimitFreq/1000, DevicePlutoSDR::bbLPTxHighLimitFreq/1000); + + quint32 minLimit, maxLimit; + ((PlutoSDROutput *) m_sampleSink)->getbbLPRange(minLimit, maxLimit); + ui->lpf->setValueRange(5, minLimit/1000, maxLimit/1000); ui->lpFIR->setColorMapper(ColorMapper(ColorMapper::GrayYellow)); ui->lpFIR->setValueRange(5, 1U, 56000U); // will be dynamically recalculated diff --git a/plugins/samplesource/plutosdrinput/plutosdrinput.cpp b/plugins/samplesource/plutosdrinput/plutosdrinput.cpp index 48fe76894..938baec68 100644 --- a/plugins/samplesource/plutosdrinput/plutosdrinput.cpp +++ b/plugins/samplesource/plutosdrinput/plutosdrinput.cpp @@ -685,6 +685,16 @@ void PlutoSDRInput::getLORange(qint64& minLimit, qint64& maxLimit) maxLimit = max; } +void PlutoSDRInput::getbbLPRange(quint32& minLimit, quint32& maxLimit) +{ + uint32_t min, max; + DevicePlutoSDRBox *plutoBox = m_deviceShared.m_deviceParams->getBox(); + + plutoBox->getbbLPRxRange(min, max); + minLimit = min; + maxLimit = max; +} + void PlutoSDRInput::getGain(int& gaindB) { DevicePlutoSDRBox *plutoBox = m_deviceShared.m_deviceParams->getBox(); diff --git a/plugins/samplesource/plutosdrinput/plutosdrinput.h b/plugins/samplesource/plutosdrinput/plutosdrinput.h index c369ad064..86ea4482a 100644 --- a/plugins/samplesource/plutosdrinput/plutosdrinput.h +++ b/plugins/samplesource/plutosdrinput/plutosdrinput.h @@ -144,6 +144,7 @@ public: uint32_t getFIRSampleRate() const { return m_deviceSampleRates.m_hb1Rate; } void getRSSI(std::string& rssiStr); void getLORange(qint64& minLimit, qint64& maxLimit); + void getbbLPRange(quint32& minLimit, quint32& maxLimit); void getGain(int& gainStr); bool fetchTemperature(); float getTemperature(); diff --git a/plugins/samplesource/plutosdrinput/plutosdrinputgui.cpp b/plugins/samplesource/plutosdrinput/plutosdrinputgui.cpp index a1ac9a20c..84dbac04e 100644 --- a/plugins/samplesource/plutosdrinput/plutosdrinputgui.cpp +++ b/plugins/samplesource/plutosdrinput/plutosdrinputgui.cpp @@ -53,7 +53,10 @@ PlutoSDRInputGui::PlutoSDRInputGui(DeviceUISet *deviceUISet, QWidget* parent) : ui->sampleRate->setValueRange(8, DevicePlutoSDR::srLowLimitFreq, DevicePlutoSDR::srHighLimitFreq); ui->lpf->setColorMapper(ColorMapper(ColorMapper::GrayYellow)); - ui->lpf->setValueRange(5, DevicePlutoSDR::bbLPRxLowLimitFreq/1000, DevicePlutoSDR::bbLPRxHighLimitFreq/1000); + + quint32 minLimit, maxLimit; + ((PlutoSDRInput *) m_sampleSource)->getbbLPRange(minLimit, maxLimit); + ui->lpf->setValueRange(5, minLimit/1000, maxLimit/1000); ui->lpFIR->setColorMapper(ColorMapper(ColorMapper::GrayYellow)); ui->lpFIR->setValueRange(5, 1U, 56000U); // will be dynamically recalculated