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>
pull/283/head
Robin Getz 2019-02-01 16:42:08 -05:00
rodzic 1480b393fb
commit 95edff4985
8 zmienionych plików z 75 dodań i 2 usunięć

Wyświetl plik

@ -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;

Wyświetl plik

@ -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);

Wyświetl plik

@ -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();

Wyświetl plik

@ -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();

Wyświetl plik

@ -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

Wyświetl plik

@ -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();

Wyświetl plik

@ -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();

Wyświetl plik

@ -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