1
0
mirror of https://github.com/f4exb/sdrangel.git synced 2026-07-25 19:44:12 -04:00
Files
sdrangel/devices/plutosdr/deviceplutosdr.cpp
T
Robin Getz 72d612d986 plutosdr: Update RX gain limits dynamically from hardware
Query the PlutoSDR hardware for the current RX gain range and use it
to configure the GUI gain control dynamically.

The AD936x gain limits vary with LO frequency. Previously the GUI used
a fixed gain range, allowing users to select values that the hardware
would reject after changing bands. The gain slider now refreshes its
minimum, maximum, and step size whenever the device center frequency is
updated.

Also change the gain setting serialization to use a signed integer so
negative gain values are preserved for operating modes that support
them.

Changes include:
- Add DevicePlutoSDRBox::getGainRange() to read
  in_voltage0_hardwaregain_available.
- Expose gain range through PlutoSDRInput.
- Refresh GUI gain limits when the device frequency changes.
- Avoid unnecessary widget updates when limits are unchanged.
- Store/restore gain as a signed value.
- Add default RX gain limit constants for fallback when the device
  cannot provide its range.

Signed-off-by: Robin Getz <rgetz503@gmail.com>
2026-07-19 17:48:53 -04:00

74 lines
3.2 KiB
C++

///////////////////////////////////////////////////////////////////////////////////
// Copyright (C) 2012 maintech GmbH, Otto-Hahn-Str. 15, 97204 Hoechberg, Germany //
// written by Christian Daniel //
// Copyright (C) 2015-2017, 2019 Edouard Griffiths, F4EXB <f4exb06@gmail.com> //
// //
// This program is free software; you can redistribute it and/or modify //
// it under the terms of the GNU General Public License as published by //
// the Free Software Foundation as version 3 of the License, or //
// (at your option) any later version. //
// //
// This program is distributed in the hope that it will be useful, //
// but WITHOUT ANY WARRANTY; without even the implied warranty of //
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
// GNU General Public License V3 for more details. //
// //
// You should have received a copy of the GNU General Public License //
// along with this program. If not, see <http://www.gnu.org/licenses/>. //
///////////////////////////////////////////////////////////////////////////////////
#include "deviceplutosdr.h"
const uint64_t DevicePlutoSDR::rxLOLowLimitFreq = 70000000UL; // 70 MHz: take AD9364 specs
const uint64_t DevicePlutoSDR::rxLOHighLimitFreq = 6000000000UL; // 6 GHz: take AD9364 specs
const uint64_t DevicePlutoSDR::txLOLowLimitFreq = 46875000UL; // 46.875 MHz: take AD9364 specs
const uint64_t DevicePlutoSDR::txLOHighLimitFreq = 6000000000UL; // 6 GHz: take AD9364 specs
const uint32_t DevicePlutoSDR::srLowLimitFreq = (25000000U/12U)+3U; // 25/12 MS/s without FIR interpolation/decimation (+3 so it is the next multiple of 4)
const uint32_t DevicePlutoSDR::srHighLimitFreq = 20000000U; // 20 MS/s: take AD9363 speces
const uint32_t DevicePlutoSDR::bbLPRxLowLimitFreq = 200000U; // 200 kHz
const uint32_t DevicePlutoSDR::bbLPRxHighLimitFreq = 14000000U; // 14 MHz
const uint32_t DevicePlutoSDR::bbLPTxLowLimitFreq = 625000U; // 625 kHz
const uint32_t DevicePlutoSDR::bbLPTxHighLimitFreq = 16000000U; // 16 MHz
const int32_t DevicePlutoSDR::rxMinGain = 0; // 0 dB
const int32_t DevicePlutoSDR::rxMaxGain = 77; // 77 dB
const float DevicePlutoSDR::firBWLowLimitFactor = 0.05f;
const float DevicePlutoSDR::firBWHighLimitFactor = 0.9f;
DevicePlutoSDR::DevicePlutoSDR()
{
}
DevicePlutoSDR::~DevicePlutoSDR()
{
}
DevicePlutoSDR& DevicePlutoSDR::instance()
{
static DevicePlutoSDR inst;
return inst;
}
DevicePlutoSDRBox* DevicePlutoSDR::getDeviceFromURI(const std::string& uri)
{
return new DevicePlutoSDRBox(uri);
}
DevicePlutoSDRBox* DevicePlutoSDR::getDeviceFromSerial(const std::string& serial)
{
const std::string *uri = m_scan.getURIFromSerial(serial);
if (uri) {
return new DevicePlutoSDRBox(*uri);
} else {
return 0;
}
}