mirror of
https://github.com/f4exb/sdrangel.git
synced 2025-02-03 09:44:01 -05:00
SoapySDR support: input: AGC GUI
This commit is contained in:
parent
59c8ecd2d0
commit
f97091e0f3
@ -221,6 +221,12 @@ void SoapySDRInput::getGlobalGainRange(int& min, int& max)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool SoapySDRInput::isAGCSupported()
|
||||||
|
{
|
||||||
|
const DeviceSoapySDRParams::ChannelSettings* channelSettings = m_deviceShared.m_deviceParams->getRxChannelSettings(m_deviceShared.m_channel);
|
||||||
|
return channelSettings->m_hasAGC;
|
||||||
|
}
|
||||||
|
|
||||||
const std::vector<std::string>& SoapySDRInput::getAntennas()
|
const std::vector<std::string>& SoapySDRInput::getAntennas()
|
||||||
{
|
{
|
||||||
const DeviceSoapySDRParams::ChannelSettings* channelSettings = m_deviceShared.m_deviceParams->getRxChannelSettings(m_deviceShared.m_channel);
|
const DeviceSoapySDRParams::ChannelSettings* channelSettings = m_deviceShared.m_deviceParams->getRxChannelSettings(m_deviceShared.m_channel);
|
||||||
@ -933,6 +939,22 @@ bool SoapySDRInput::applySettings(const SoapySDRInputSettings& settings, bool fo
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ((m_settings.m_autoGain != settings.m_autoGain) || force)
|
||||||
|
{
|
||||||
|
if (dev != 0)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
dev->setGainMode(SOAPY_SDR_RX, requestedChannel, settings.m_autoGain);
|
||||||
|
qDebug("SoapySDRInput::applySettings: %s AGC", settings.m_autoGain ? "set" : "unset");
|
||||||
|
}
|
||||||
|
catch (const std::exception &ex)
|
||||||
|
{
|
||||||
|
qCritical("SoapySDRInput::applySettings: cannot %s AGC", settings.m_autoGain ? "set" : "unset");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (forwardChangeOwnDSP)
|
if (forwardChangeOwnDSP)
|
||||||
{
|
{
|
||||||
int sampleRate = settings.m_devSampleRate/(1<<settings.m_log2Decim);
|
int sampleRate = settings.m_devSampleRate/(1<<settings.m_log2Decim);
|
||||||
|
@ -148,6 +148,7 @@ public:
|
|||||||
|
|
||||||
void getFrequencyRange(uint64_t& min, uint64_t& max);
|
void getFrequencyRange(uint64_t& min, uint64_t& max);
|
||||||
void getGlobalGainRange(int& min, int& max);
|
void getGlobalGainRange(int& min, int& max);
|
||||||
|
bool isAGCSupported();
|
||||||
const std::vector<std::string>& getAntennas();
|
const std::vector<std::string>& getAntennas();
|
||||||
const SoapySDR::RangeList& getRateRanges();
|
const SoapySDR::RangeList& getRateRanges();
|
||||||
const SoapySDR::RangeList& getBandwidthRanges();
|
const SoapySDR::RangeList& getBandwidthRanges();
|
||||||
|
@ -15,6 +15,7 @@
|
|||||||
///////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
#include <QMessageBox>
|
#include <QMessageBox>
|
||||||
|
#include <QCheckBox>
|
||||||
|
|
||||||
#include "dsp/dspengine.h"
|
#include "dsp/dspengine.h"
|
||||||
#include "dsp/dspcommands.h"
|
#include "dsp/dspcommands.h"
|
||||||
@ -44,7 +45,8 @@ SoapySDRInputGui::SoapySDRInputGui(DeviceUISet *deviceUISet, QWidget* parent) :
|
|||||||
m_antennas(0),
|
m_antennas(0),
|
||||||
m_sampleRateGUI(0),
|
m_sampleRateGUI(0),
|
||||||
m_bandwidthGUI(0),
|
m_bandwidthGUI(0),
|
||||||
m_gainSliderGUI(0)
|
m_gainSliderGUI(0),
|
||||||
|
m_autoGain(0)
|
||||||
{
|
{
|
||||||
m_sampleSource = (SoapySDRInput*) m_deviceUISet->m_deviceSourceAPI->getSampleSource();
|
m_sampleSource = (SoapySDRInput*) m_deviceUISet->m_deviceSourceAPI->getSampleSource();
|
||||||
ui->setupUi(this);
|
ui->setupUi(this);
|
||||||
@ -197,6 +199,21 @@ void SoapySDRInputGui::createGlobalGainControl()
|
|||||||
m_gainSliderGUI->setUnits(QString(""));
|
m_gainSliderGUI->setUnits(QString(""));
|
||||||
|
|
||||||
QVBoxLayout *layout = (QVBoxLayout *) ui->scrollAreaWidgetContents->layout();
|
QVBoxLayout *layout = (QVBoxLayout *) ui->scrollAreaWidgetContents->layout();
|
||||||
|
|
||||||
|
QFrame *line = new QFrame(this);
|
||||||
|
line->setFrameShape(QFrame::HLine);
|
||||||
|
line->setFrameShadow(QFrame::Sunken);
|
||||||
|
layout->addWidget(line);
|
||||||
|
|
||||||
|
if (m_sampleSource->isAGCSupported())
|
||||||
|
{
|
||||||
|
m_autoGain = new QCheckBox(this);
|
||||||
|
m_autoGain->setText(QString("AGC"));
|
||||||
|
layout->addWidget(m_autoGain);
|
||||||
|
|
||||||
|
connect(m_autoGain, SIGNAL(toggled(bool)), this, SLOT(autoGainChanged(bool)));
|
||||||
|
}
|
||||||
|
|
||||||
layout->addWidget(m_gainSliderGUI);
|
layout->addWidget(m_gainSliderGUI);
|
||||||
|
|
||||||
connect(m_gainSliderGUI, SIGNAL(valueChanged(double)), this, SLOT(globalGainChanged(double)));
|
connect(m_gainSliderGUI, SIGNAL(valueChanged(double)), this, SLOT(globalGainChanged(double)));
|
||||||
@ -376,6 +393,12 @@ void SoapySDRInputGui::globalGainChanged(double gain)
|
|||||||
sendSettings();
|
sendSettings();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SoapySDRInputGui::autoGainChanged(bool set)
|
||||||
|
{
|
||||||
|
m_settings.m_autoGain = set;
|
||||||
|
sendSettings();
|
||||||
|
}
|
||||||
|
|
||||||
void SoapySDRInputGui::individualGainChanged(QString name, double value)
|
void SoapySDRInputGui::individualGainChanged(QString name, double value)
|
||||||
{
|
{
|
||||||
m_settings.m_individualGains[name] = value;
|
m_settings.m_individualGains[name] = value;
|
||||||
@ -478,6 +501,9 @@ void SoapySDRInputGui::displaySettings()
|
|||||||
if (m_gainSliderGUI) {
|
if (m_gainSliderGUI) {
|
||||||
m_gainSliderGUI->setValue(m_settings.m_globalGain);
|
m_gainSliderGUI->setValue(m_settings.m_globalGain);
|
||||||
}
|
}
|
||||||
|
if (m_autoGain) {
|
||||||
|
m_autoGain->setChecked(m_settings.m_autoGain);
|
||||||
|
}
|
||||||
|
|
||||||
ui->dcOffset->setChecked(m_settings.m_dcBlock);
|
ui->dcOffset->setChecked(m_settings.m_dcBlock);
|
||||||
ui->iqImbalance->setChecked(m_settings.m_iqCorrection);
|
ui->iqImbalance->setChecked(m_settings.m_iqCorrection);
|
||||||
|
@ -19,7 +19,6 @@
|
|||||||
|
|
||||||
#include <QTimer>
|
#include <QTimer>
|
||||||
#include <QWidget>
|
#include <QWidget>
|
||||||
#include <QComboBox>
|
|
||||||
|
|
||||||
#include "plugin/plugininstancegui.h"
|
#include "plugin/plugininstancegui.h"
|
||||||
#include "util/messagequeue.h"
|
#include "util/messagequeue.h"
|
||||||
@ -31,6 +30,7 @@ class ItemSettingGUI;
|
|||||||
class StringRangeGUI;
|
class StringRangeGUI;
|
||||||
class DynamicItemSettingGUI;
|
class DynamicItemSettingGUI;
|
||||||
class IntervalSliderGUI;
|
class IntervalSliderGUI;
|
||||||
|
class QCheckBox;
|
||||||
|
|
||||||
namespace Ui {
|
namespace Ui {
|
||||||
class SoapySDRInputGui;
|
class SoapySDRInputGui;
|
||||||
@ -86,6 +86,7 @@ private:
|
|||||||
std::vector<DynamicItemSettingGUI*> m_tunableElementsGUIs;
|
std::vector<DynamicItemSettingGUI*> m_tunableElementsGUIs;
|
||||||
IntervalSliderGUI *m_gainSliderGUI;
|
IntervalSliderGUI *m_gainSliderGUI;
|
||||||
std::vector<DynamicItemSettingGUI*> m_individualGainsGUIs;
|
std::vector<DynamicItemSettingGUI*> m_individualGainsGUIs;
|
||||||
|
QCheckBox *m_autoGain;
|
||||||
|
|
||||||
void displaySettings();
|
void displaySettings();
|
||||||
void displayTunableElementsControlSettings();
|
void displayTunableElementsControlSettings();
|
||||||
@ -103,6 +104,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 autoGainChanged(bool set);
|
||||||
void individualGainChanged(QString name, double value);
|
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);
|
||||||
|
@ -365,13 +365,6 @@
|
|||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
|
||||||
<widget class="Line" name="line_freq">
|
|
||||||
<property name="orientation">
|
|
||||||
<enum>Qt::Horizontal</enum>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
<item>
|
||||||
<widget class="QScrollArea" name="scrollArea">
|
<widget class="QScrollArea" name="scrollArea">
|
||||||
<property name="verticalScrollBarPolicy">
|
<property name="verticalScrollBarPolicy">
|
||||||
@ -386,7 +379,7 @@
|
|||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>318</width>
|
<width>318</width>
|
||||||
<height>51</height>
|
<height>53</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QVBoxLayout" name="verticalLayout_3">
|
<layout class="QVBoxLayout" name="verticalLayout_3">
|
||||||
|
@ -40,6 +40,7 @@ void SoapySDRInputSettings::resetToDefaults()
|
|||||||
m_antenna = "NONE";
|
m_antenna = "NONE";
|
||||||
m_bandwidth = 1000000;
|
m_bandwidth = 1000000;
|
||||||
m_globalGain = 0;
|
m_globalGain = 0;
|
||||||
|
m_autoGain = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
QByteArray SoapySDRInputSettings::serialize() const
|
QByteArray SoapySDRInputSettings::serialize() const
|
||||||
@ -59,6 +60,7 @@ QByteArray SoapySDRInputSettings::serialize() const
|
|||||||
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));
|
s.writeBlob(13, serializeNamedElementMap(m_individualGains));
|
||||||
|
s.writeBool(14, m_autoGain);
|
||||||
|
|
||||||
return s.final();
|
return s.final();
|
||||||
}
|
}
|
||||||
@ -94,6 +96,7 @@ bool SoapySDRInputSettings::deserialize(const QByteArray& data)
|
|||||||
d.readS32(12, &m_globalGain, 0);
|
d.readS32(12, &m_globalGain, 0);
|
||||||
d.readBlob(13, &blob);
|
d.readBlob(13, &blob);
|
||||||
deserializeNamedElementMap(blob, m_individualGains);
|
deserializeNamedElementMap(blob, m_individualGains);
|
||||||
|
d.readBool(14, &m_autoGain, false);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -43,6 +43,7 @@ struct SoapySDRInputSettings {
|
|||||||
QMap<QString, double> m_tunableElements;
|
QMap<QString, double> m_tunableElements;
|
||||||
qint32 m_globalGain;
|
qint32 m_globalGain;
|
||||||
QMap<QString, double> m_individualGains;
|
QMap<QString, double> m_individualGains;
|
||||||
|
bool m_autoGain;
|
||||||
|
|
||||||
SoapySDRInputSettings();
|
SoapySDRInputSettings();
|
||||||
void resetToDefaults();
|
void resetToDefaults();
|
||||||
|
Loading…
Reference in New Issue
Block a user