1
0
mirror of https://github.com/f4exb/sdrangel.git synced 2026-06-18 13:48:37 -04:00

SoapySDR support: output: global gain GUI

This commit is contained in:
f4exb
2018-11-07 13:08:35 +01:00
parent d7be0927b1
commit d4e73086d0
7 changed files with 83 additions and 5 deletions
@@ -164,7 +164,7 @@ void SoapySDROutput::getFrequencyRange(uint64_t& min, uint64_t& max)
DeviceSoapySDRParams::FrequencySetting freqSettings = channelSettings->m_frequencySettings[0];
SoapySDR::RangeList rangeList = freqSettings.m_ranges;
if (rangeList.size() > 0) // TODO: handle multiple ranges
if (rangeList.size() > 0)
{
SoapySDR::Range range = rangeList[0];
min = range.minimum();
@@ -183,6 +183,23 @@ void SoapySDROutput::getFrequencyRange(uint64_t& min, uint64_t& max)
}
}
void SoapySDROutput::getGlobalGainRange(int& min, int& max)
{
const DeviceSoapySDRParams::ChannelSettings* channelSettings = m_deviceShared.m_deviceParams->getTxChannelSettings(m_deviceShared.m_channel);
if (channelSettings)
{
min = channelSettings->m_gainRange.minimum();
max = channelSettings->m_gainRange.maximum();
}
else
{
min = 0;
max = 0;
}
}
const SoapySDR::RangeList& SoapySDROutput::getRateRanges()
{
const DeviceSoapySDRParams::ChannelSettings* channelSettings = m_deviceShared.m_deviceParams->getTxChannelSettings(m_deviceShared.m_channel);
@@ -207,6 +224,12 @@ const std::vector<DeviceSoapySDRParams::FrequencySetting>& SoapySDROutput::getTu
return channelSettings->m_frequencySettings;
}
const std::vector<DeviceSoapySDRParams::GainSetting>& SoapySDROutput::getIndividualGainsRanges()
{
const DeviceSoapySDRParams::ChannelSettings* channelSettings = m_deviceShared.m_deviceParams->getTxChannelSettings(m_deviceShared.m_channel);
return channelSettings->m_gainSettings;
}
void SoapySDROutput::init()
{
applySettings(m_settings, true);
@@ -791,6 +814,23 @@ bool SoapySDROutput::applySettings(const SoapySDROutputSettings& settings, bool
}
}
if ((m_settings.m_globalGain != settings.m_globalGain) || force)
{
if (dev != 0)
{
try
{
dev->setGain(SOAPY_SDR_TX, requestedChannel, settings.m_globalGain);
qDebug("SoapySDROutput::applySettings: set global gain to %d", settings.m_globalGain);
}
catch (const std::exception &ex)
{
qCritical("SoapySDROutput::applySettings: cannot set global gain to %d: %s",
settings.m_globalGain, ex.what());
}
}
}
if (forwardChangeOwnDSP)
{
int sampleRate = settings.m_devSampleRate/(1<<settings.m_log2Interp);
@@ -836,7 +876,8 @@ bool SoapySDROutput::applySettings(const SoapySDROutputSettings& settings, bool
<< " m_LOppmTenths: " << m_settings.m_LOppmTenths
<< " m_log2Interp: " << m_settings.m_log2Interp
<< " m_devSampleRate: " << m_settings.m_devSampleRate
<< " m_bandwidth: " << m_settings.m_bandwidth;
<< " m_bandwidth: " << m_settings.m_bandwidth
<< " m_globalGain: " << m_settings.m_globalGain;
return true;
}