plutosdr: grab the RF bandwidth range from the device

This will use the RF bandwidth from the device, which is different
between AD9363 and AD9364.

Things are now managed like the device likes - analog low pass bandwidth
is RF (complex) bandwidth, not baseband single I or Q bandwidth.

Signed-off-by: Robin Getz <robin.getz@analog.com>
This commit is contained in:
Robin Getz 2019-02-01 16:42:08 -05:00
parent 1480b393fb
commit 95edff4985
8 changed files with 75 additions and 2 deletions

View File

@ -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() bool DevicePlutoSDRBox::fetchTemp()
{ {
std::string temp_mC_str; std::string temp_mC_str;

View File

@ -107,6 +107,8 @@ public:
bool getTxRSSI(std::string& rssiStr, unsigned int chan); bool getTxRSSI(std::string& rssiStr, unsigned int chan);
void getRxLORange(uint64_t& minLimit, uint64_t& maxLimit); void getRxLORange(uint64_t& minLimit, uint64_t& maxLimit);
void getTxLORange(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(); bool fetchTemp();
float getTemp() const { return m_temp; } float getTemp() const { return m_temp; }
bool getRateGovernors(std::string& rateGovernors); bool getRateGovernors(std::string& rateGovernors);

View File

@ -600,6 +600,16 @@ void PlutoSDROutput::getLORange(qint64& minLimit, qint64& maxLimit)
maxLimit = max; 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() bool PlutoSDROutput::fetchTemperature()
{ {
DevicePlutoSDRBox *plutoBox = m_deviceShared.m_deviceParams->getBox(); DevicePlutoSDRBox *plutoBox = m_deviceShared.m_deviceParams->getBox();

View File

@ -123,6 +123,7 @@ public:
uint32_t getFIRSampleRate() const { return m_deviceSampleRates.m_hb1Rate; } uint32_t getFIRSampleRate() const { return m_deviceSampleRates.m_hb1Rate; }
void getRSSI(std::string& rssiStr); void getRSSI(std::string& rssiStr);
void getLORange(qint64& minLimit, qint64& maxLimit); void getLORange(qint64& minLimit, qint64& maxLimit);
void getbbLPRange(quint32& minLimit, quint32& maxLimit);
bool fetchTemperature(); bool fetchTemperature();
float getTemperature(); float getTemperature();

View File

@ -53,7 +53,10 @@ PlutoSDROutputGUI::PlutoSDROutputGUI(DeviceUISet *deviceUISet, QWidget* parent)
ui->sampleRate->setValueRange(8, DevicePlutoSDR::srLowLimitFreq, DevicePlutoSDR::srHighLimitFreq); ui->sampleRate->setValueRange(8, DevicePlutoSDR::srLowLimitFreq, DevicePlutoSDR::srHighLimitFreq);
ui->lpf->setColorMapper(ColorMapper(ColorMapper::GrayYellow)); 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->setColorMapper(ColorMapper(ColorMapper::GrayYellow));
ui->lpFIR->setValueRange(5, 1U, 56000U); // will be dynamically recalculated ui->lpFIR->setValueRange(5, 1U, 56000U); // will be dynamically recalculated

View File

@ -685,6 +685,16 @@ void PlutoSDRInput::getLORange(qint64& minLimit, qint64& maxLimit)
maxLimit = max; 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) void PlutoSDRInput::getGain(int& gaindB)
{ {
DevicePlutoSDRBox *plutoBox = m_deviceShared.m_deviceParams->getBox(); DevicePlutoSDRBox *plutoBox = m_deviceShared.m_deviceParams->getBox();

View File

@ -144,6 +144,7 @@ public:
uint32_t getFIRSampleRate() const { return m_deviceSampleRates.m_hb1Rate; } uint32_t getFIRSampleRate() const { return m_deviceSampleRates.m_hb1Rate; }
void getRSSI(std::string& rssiStr); void getRSSI(std::string& rssiStr);
void getLORange(qint64& minLimit, qint64& maxLimit); void getLORange(qint64& minLimit, qint64& maxLimit);
void getbbLPRange(quint32& minLimit, quint32& maxLimit);
void getGain(int& gainStr); void getGain(int& gainStr);
bool fetchTemperature(); bool fetchTemperature();
float getTemperature(); float getTemperature();

View File

@ -53,7 +53,10 @@ PlutoSDRInputGui::PlutoSDRInputGui(DeviceUISet *deviceUISet, QWidget* parent) :
ui->sampleRate->setValueRange(8, DevicePlutoSDR::srLowLimitFreq, DevicePlutoSDR::srHighLimitFreq); ui->sampleRate->setValueRange(8, DevicePlutoSDR::srLowLimitFreq, DevicePlutoSDR::srHighLimitFreq);
ui->lpf->setColorMapper(ColorMapper(ColorMapper::GrayYellow)); 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->setColorMapper(ColorMapper(ColorMapper::GrayYellow));
ui->lpFIR->setValueRange(5, 1U, 56000U); // will be dynamically recalculated ui->lpFIR->setValueRange(5, 1U, 56000U); // will be dynamically recalculated