mirror of
https://github.com/f4exb/sdrangel.git
synced 2025-05-23 18:52:28 -04:00
SoapySDR support: input: individual gains GUIs
This commit is contained in:
parent
d4e73086d0
commit
cfeaca424e
@ -876,6 +876,31 @@ bool SoapySDRInput::applySettings(const SoapySDRInputSettings& settings, bool fo
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (const auto &oname : m_settings.m_individualGains.keys())
|
||||||
|
{
|
||||||
|
auto nvalue = settings.m_individualGains.find(oname);
|
||||||
|
|
||||||
|
if (nvalue != settings.m_individualGains.end() && (m_settings.m_individualGains[oname] != *nvalue))
|
||||||
|
{
|
||||||
|
if (dev != 0)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
dev->setGain(SOAPY_SDR_RX, requestedChannel, oname.toStdString(), *nvalue);
|
||||||
|
qDebug("SoapySDRInput::applySettings: individual gain %s set to %lf",
|
||||||
|
oname.toStdString().c_str(), *nvalue);
|
||||||
|
}
|
||||||
|
catch (const std::exception &ex)
|
||||||
|
{
|
||||||
|
qCritical("SoapySDRInput::applySettings: cannot set individual gain %s to %lf: %s",
|
||||||
|
oname.toStdString().c_str(), *nvalue, ex.what());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
m_settings.m_individualGains[oname] = *nvalue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (forwardChangeOwnDSP)
|
if (forwardChangeOwnDSP)
|
||||||
{
|
{
|
||||||
int sampleRate = settings.m_devSampleRate/(1<<settings.m_log2Decim);
|
int sampleRate = settings.m_devSampleRate/(1<<settings.m_log2Decim);
|
||||||
|
@ -200,6 +200,26 @@ void SoapySDRInputGui::createGlobalGainControl()
|
|||||||
connect(m_gainSliderGUI, SIGNAL(valueChanged(double)), this, SLOT(globalGainChanged(double)));
|
connect(m_gainSliderGUI, SIGNAL(valueChanged(double)), this, SLOT(globalGainChanged(double)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SoapySDRInputGui::createIndividualGainsControl(const std::vector<DeviceSoapySDRParams::GainSetting>& individualGainsList)
|
||||||
|
{
|
||||||
|
if (individualGainsList.size() == 0) { // Leave early if list of individual gains is empty
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::vector<DeviceSoapySDRParams::GainSetting>::const_iterator it = individualGainsList.begin();
|
||||||
|
|
||||||
|
for (int i = 0; it != individualGainsList.end(); ++it, i++)
|
||||||
|
{
|
||||||
|
IntervalSliderGUI *gainGUI = new IntervalSliderGUI(this);
|
||||||
|
gainGUI->setInterval(it->m_range.minimum(), it->m_range.maximum());
|
||||||
|
gainGUI->setLabel(QString("%1 gain").arg(it->m_name.c_str()));
|
||||||
|
gainGUI->setUnits(QString(""));
|
||||||
|
DynamicItemSettingGUI *gui = new DynamicItemSettingGUI(gainGUI, QString(it->m_name.c_str()));
|
||||||
|
m_individualGainsGUIs.push_back(gui);
|
||||||
|
connect(m_individualGainsGUIs.back(), SIGNAL(valueChanged(QString, double)), this, SLOT(individualGainChanged(QString, double)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void SoapySDRInputGui::setName(const QString& name)
|
void SoapySDRInputGui::setName(const QString& name)
|
||||||
{
|
{
|
||||||
setObjectName(name);
|
setObjectName(name);
|
||||||
@ -334,6 +354,12 @@ void SoapySDRInputGui::globalGainChanged(double gain)
|
|||||||
sendSettings();
|
sendSettings();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SoapySDRInputGui::individualGainChanged(QString name, double value)
|
||||||
|
{
|
||||||
|
m_settings.m_individualGains[name] = value;
|
||||||
|
sendSettings();
|
||||||
|
}
|
||||||
|
|
||||||
void SoapySDRInputGui::on_centerFrequency_changed(quint64 value)
|
void SoapySDRInputGui::on_centerFrequency_changed(quint64 value)
|
||||||
{
|
{
|
||||||
m_settings.m_centerFrequency = value * 1000;
|
m_settings.m_centerFrequency = value * 1000;
|
||||||
@ -441,6 +467,7 @@ void SoapySDRInputGui::displaySettings()
|
|||||||
ui->LOppmText->setText(QString("%1").arg(QString::number(m_settings.m_LOppmTenths/10.0, 'f', 1)));
|
ui->LOppmText->setText(QString("%1").arg(QString::number(m_settings.m_LOppmTenths/10.0, 'f', 1)));
|
||||||
|
|
||||||
displayTunableElementsControlSettings();
|
displayTunableElementsControlSettings();
|
||||||
|
displayIndividualGainsControlSettings();
|
||||||
|
|
||||||
blockApplySettings(false);
|
blockApplySettings(false);
|
||||||
}
|
}
|
||||||
@ -457,6 +484,18 @@ void SoapySDRInputGui::displayTunableElementsControlSettings()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SoapySDRInputGui::displayIndividualGainsControlSettings()
|
||||||
|
{
|
||||||
|
for (const auto &it : m_individualGainsGUIs)
|
||||||
|
{
|
||||||
|
QMap<QString, double>::const_iterator elIt = m_settings.m_individualGains.find(it->getName());
|
||||||
|
|
||||||
|
if (elIt != m_settings.m_individualGains.end()) {
|
||||||
|
it->setValue(*elIt);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void SoapySDRInputGui::sendSettings()
|
void SoapySDRInputGui::sendSettings()
|
||||||
{
|
{
|
||||||
if (!m_updateTimer.isActive()) {
|
if (!m_updateTimer.isActive()) {
|
||||||
|
@ -64,6 +64,7 @@ private:
|
|||||||
void createAntennasControl(const std::vector<std::string>& antennaList);
|
void createAntennasControl(const std::vector<std::string>& antennaList);
|
||||||
void createTunableElementsControl(const std::vector<DeviceSoapySDRParams::FrequencySetting>& tunableElementsList);
|
void createTunableElementsControl(const std::vector<DeviceSoapySDRParams::FrequencySetting>& tunableElementsList);
|
||||||
void createGlobalGainControl();
|
void createGlobalGainControl();
|
||||||
|
void createIndividualGainsControl(const std::vector<DeviceSoapySDRParams::GainSetting>& individualGainsList);
|
||||||
|
|
||||||
Ui::SoapySDRInputGui* ui;
|
Ui::SoapySDRInputGui* ui;
|
||||||
|
|
||||||
@ -84,9 +85,11 @@ private:
|
|||||||
ItemSettingGUI *m_bandwidthGUI;
|
ItemSettingGUI *m_bandwidthGUI;
|
||||||
std::vector<DynamicItemSettingGUI*> m_tunableElementsGUIs;
|
std::vector<DynamicItemSettingGUI*> m_tunableElementsGUIs;
|
||||||
IntervalSliderGUI *m_gainSliderGUI;
|
IntervalSliderGUI *m_gainSliderGUI;
|
||||||
|
std::vector<DynamicItemSettingGUI*> m_individualGainsGUIs;
|
||||||
|
|
||||||
void displaySettings();
|
void displaySettings();
|
||||||
void displayTunableElementsControlSettings();
|
void displayTunableElementsControlSettings();
|
||||||
|
void displayIndividualGainsControlSettings();
|
||||||
void sendSettings();
|
void sendSettings();
|
||||||
void updateSampleRateAndFrequency();
|
void updateSampleRateAndFrequency();
|
||||||
void updateFrequencyLimits();
|
void updateFrequencyLimits();
|
||||||
@ -100,6 +103,7 @@ private slots:
|
|||||||
void bandwidthChanged(double bandwidth);
|
void bandwidthChanged(double bandwidth);
|
||||||
void tunableElementChanged(QString name, double value);
|
void tunableElementChanged(QString name, double value);
|
||||||
void globalGainChanged(double gain);
|
void globalGainChanged(double gain);
|
||||||
|
void individualGainChanged(QString name, double value);
|
||||||
void on_centerFrequency_changed(quint64 value);
|
void on_centerFrequency_changed(quint64 value);
|
||||||
void on_LOppm_valueChanged(int value);
|
void on_LOppm_valueChanged(int value);
|
||||||
void on_dcOffset_toggled(bool checked);
|
void on_dcOffset_toggled(bool checked);
|
||||||
|
@ -58,6 +58,7 @@ QByteArray SoapySDRInputSettings::serialize() const
|
|||||||
s.writeU32(10, m_bandwidth);
|
s.writeU32(10, m_bandwidth);
|
||||||
s.writeBlob(11, serializeNamedElementMap(m_tunableElements));
|
s.writeBlob(11, serializeNamedElementMap(m_tunableElements));
|
||||||
s.writeS32(12, m_globalGain);
|
s.writeS32(12, m_globalGain);
|
||||||
|
s.writeBlob(13, serializeNamedElementMap(m_individualGains));
|
||||||
|
|
||||||
return s.final();
|
return s.final();
|
||||||
}
|
}
|
||||||
@ -91,6 +92,8 @@ bool SoapySDRInputSettings::deserialize(const QByteArray& data)
|
|||||||
d.readBlob(11, &blob);
|
d.readBlob(11, &blob);
|
||||||
deserializeNamedElementMap(blob, m_tunableElements);
|
deserializeNamedElementMap(blob, m_tunableElements);
|
||||||
d.readS32(12, &m_globalGain, 0);
|
d.readS32(12, &m_globalGain, 0);
|
||||||
|
d.readBlob(13, &blob);
|
||||||
|
deserializeNamedElementMap(blob, m_individualGains);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -42,6 +42,7 @@ struct SoapySDRInputSettings {
|
|||||||
quint32 m_bandwidth;
|
quint32 m_bandwidth;
|
||||||
QMap<QString, double> m_tunableElements;
|
QMap<QString, double> m_tunableElements;
|
||||||
qint32 m_globalGain;
|
qint32 m_globalGain;
|
||||||
|
QMap<QString, double> m_individualGains;
|
||||||
|
|
||||||
SoapySDRInputSettings();
|
SoapySDRInputSettings();
|
||||||
void resetToDefaults();
|
void resetToDefaults();
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
#include "intervalslidergui.h"
|
#include "intervalslidergui.h"
|
||||||
|
|
||||||
IntervalSliderGUI::IntervalSliderGUI(QWidget* parent) :
|
IntervalSliderGUI::IntervalSliderGUI(QWidget* parent) :
|
||||||
QWidget(parent),
|
ItemSettingGUI(parent),
|
||||||
ui(new Ui::IntervalSliderGUI),
|
ui(new Ui::IntervalSliderGUI),
|
||||||
m_minimum(0),
|
m_minimum(0),
|
||||||
m_maximum(0)
|
m_maximum(0)
|
||||||
@ -67,5 +67,5 @@ void IntervalSliderGUI::setValue(double value)
|
|||||||
void IntervalSliderGUI::on_intervalSlider_valueChanged(int value)
|
void IntervalSliderGUI::on_intervalSlider_valueChanged(int value)
|
||||||
{
|
{
|
||||||
ui->valueText->setText(QString("%1").arg(value));
|
ui->valueText->setText(QString("%1").arg(value));
|
||||||
emit valueChanged(value);
|
emit ItemSettingGUI::valueChanged(value);
|
||||||
}
|
}
|
||||||
|
@ -20,11 +20,13 @@
|
|||||||
#include <QWidget>
|
#include <QWidget>
|
||||||
#include <QString>
|
#include <QString>
|
||||||
|
|
||||||
|
#include "itemsettinggui.h"
|
||||||
|
|
||||||
namespace Ui {
|
namespace Ui {
|
||||||
class IntervalSliderGUI;
|
class IntervalSliderGUI;
|
||||||
}
|
}
|
||||||
|
|
||||||
class IntervalSliderGUI : public QWidget
|
class IntervalSliderGUI : public ItemSettingGUI
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
@ -37,9 +39,6 @@ public:
|
|||||||
virtual double getCurrentValue();
|
virtual double getCurrentValue();
|
||||||
virtual void setValue(double value);
|
virtual void setValue(double value);
|
||||||
|
|
||||||
signals:
|
|
||||||
void valueChanged(double value);
|
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void on_intervalSlider_valueChanged(int value);
|
void on_intervalSlider_valueChanged(int value);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user