SDRAngel  4.11.5
Developer docs for <a href="https://github.com/f4exb/sdrangel">SDRangel<\a>, an Open Source Qt5 / OpenGL 3.0+ SDR and signal analyzer frontend to various hardware.
Public Member Functions | Private Slots | Private Member Functions | Private Attributes | List of all members
SoapySDROutputGui Class Reference

#include <soapysdroutputgui.h>

+ Inheritance diagram for SoapySDROutputGui:
+ Collaboration diagram for SoapySDROutputGui:

Public Member Functions

 SoapySDROutputGui (DeviceUISet *deviceUISet, QWidget *parent=0)
 
virtual ~SoapySDROutputGui ()
 
virtual void destroy ()
 
void setName (const QString &name)
 
QString getName () const
 
void resetToDefaults ()
 
virtual qint64 getCenterFrequency () const
 
virtual void setCenterFrequency (qint64 centerFrequency)
 
virtual QByteArray serialize () const
 
virtual bool deserialize (const QByteArray &data)
 
virtual MessageQueuegetInputMessageQueue ()
 
virtual bool handleMessage (const Message &message)
 
- Public Member Functions inherited from PluginInstanceGUI
 PluginInstanceGUI ()
 
virtual ~PluginInstanceGUI ()
 

Private Slots

void handleInputMessages ()
 
void antennasChanged ()
 
void sampleRateChanged (double sampleRate)
 
void bandwidthChanged (double bandwidth)
 
void tunableElementChanged (QString name, double value)
 
void globalGainChanged (double gain)
 
void autoGainChanged (bool set)
 
void individualGainChanged (QString name, double value)
 
void autoDCCorrectionChanged (bool set)
 
void autoIQCorrectionChanged (bool set)
 
void dcCorrectionModuleChanged (double value)
 
void dcCorrectionArgumentChanged (double value)
 
void iqCorrectionModuleChanged (double value)
 
void iqCorrectionArgumentChanged (double value)
 
void streamArgChanged (QString itemName, QVariant value)
 
void deviceArgChanged (QString itemName, QVariant value)
 
void on_centerFrequency_changed (quint64 value)
 
void on_LOppm_valueChanged (int value)
 
void on_interp_currentIndexChanged (int index)
 
void on_transverter_clicked ()
 
void on_startStop_toggled (bool checked)
 
void updateHardware ()
 
void updateStatus ()
 
void openDeviceSettingsDialog (const QPoint &p)
 

Private Member Functions

void createRangesControl (ItemSettingGUI **settingGUI, const SoapySDR::RangeList &rangeList, const QString &text, const QString &unit)
 
void createAntennasControl (const std::vector< std::string > &antennaList)
 
void createTunableElementsControl (const std::vector< DeviceSoapySDRParams::FrequencySetting > &tunableElementsList)
 
void createGlobalGainControl ()
 
void createIndividualGainsControl (const std::vector< DeviceSoapySDRParams::GainSetting > &individualGainsList)
 
void createCorrectionsControl ()
 
void createArgumentsControl (const SoapySDR::ArgInfoList &argInfoList, bool deviceArguments)
 
void blockApplySettings (bool block)
 
void displaySettings ()
 
void displayTunableElementsControlSettings ()
 
void displayIndividualGainsControlSettings ()
 
void displayCorrectionsSettings ()
 
void displayStreamArgsSettings ()
 
void displayDeviceArgsSettings ()
 
void sendSettings ()
 
void updateSampleRateAndFrequency ()
 
void updateFrequencyLimits ()
 
void setCenterFrequencySetting (uint64_t kHzValue)
 

Private Attributes

Ui::SoapySDROutputGui * ui
 
DeviceUISetm_deviceUISet
 
bool m_forceSettings
 
bool m_doApplySettings
 
SoapySDROutputSettings m_settings
 
QTimer m_updateTimer
 
QTimer m_statusTimer
 
SoapySDROutputm_sampleSink
 
int m_sampleRate
 
quint64 m_deviceCenterFrequency
 Center frequency in device. More...
 
int m_lastEngineState
 
MessageQueue m_inputMessageQueue
 
StringRangeGUIm_antennas
 
ItemSettingGUIm_sampleRateGUI
 
ItemSettingGUIm_bandwidthGUI
 
std::vector< DynamicItemSettingGUI * > m_tunableElementsGUIs
 
IntervalSliderGUIm_gainSliderGUI
 
std::vector< DynamicItemSettingGUI * > m_individualGainsGUIs
 
QCheckBox * m_autoGain
 
ComplexFactorGUIm_dcCorrectionGUI
 
ComplexFactorGUIm_iqCorrectionGUI
 
QCheckBox * m_autoDCCorrection
 
QCheckBox * m_autoIQCorrection
 
std::vector< DynamicArgSettingGUI * > m_streamArgsGUIs
 
std::vector< DynamicArgSettingGUI * > m_deviceArgsGUIs
 

Detailed Description

Definition at line 44 of file soapysdroutputgui.h.

Constructor & Destructor Documentation

◆ SoapySDROutputGui()

SoapySDROutputGui::SoapySDROutputGui ( DeviceUISet deviceUISet,
QWidget *  parent = 0 
)
explicit

Definition at line 41 of file soapysdroutputgui.cpp.

References bandwidthChanged(), createAntennasControl(), createArgumentsControl(), createCorrectionsControl(), createGlobalGainControl(), createIndividualGainsControl(), createRangesControl(), createTunableElementsControl(), displaySettings(), SoapySDROutput::getAntennas(), SoapySDROutput::getBandwidthRanges(), SoapySDROutput::getDeviceArgInfoList(), SoapySDROutput::getFrequencyRange(), SoapySDROutput::getIndividualGainsRanges(), SoapySDROutput::getRateRanges(), DeviceAPI::getSampleSink(), SoapySDROutput::getStreamArgInfoList(), SoapySDROutput::getTunableElements(), ColorMapper::GrayGold, handleInputMessages(), SoapySDROutput::initDeviceArgSettings(), SoapySDROutput::initGainSettings(), SoapySDROutput::initStreamArgSettings(), SoapySDROutput::initTunableElementsSettings(), m_bandwidthGUI, DeviceUISet::m_deviceAPI, m_deviceUISet, m_inputMessageQueue, m_sampleRateGUI, m_sampleSink, m_settings, m_statusTimer, m_updateTimer, openDeviceSettingsDialog(), sampleRateChanged(), sendSettings(), SoapySDROutput::setMessageQueueToGUI(), ui, updateHardware(), and updateStatus().

41  :
42  QWidget(parent),
43  ui(new Ui::SoapySDROutputGui),
44  m_deviceUISet(deviceUISet),
45  m_forceSettings(true),
46  m_doApplySettings(true),
47  m_sampleSink(0),
48  m_sampleRate(0),
50  m_antennas(0),
51  m_sampleRateGUI(0),
52  m_bandwidthGUI(0),
53  m_gainSliderGUI(0),
54  m_autoGain(0),
59 {
61  ui->setupUi(this);
62 
63  ui->centerFrequency->setColorMapper(ColorMapper(ColorMapper::GrayGold));
64  uint64_t f_min, f_max;
65  m_sampleSink->getFrequencyRange(f_min, f_max);
66  ui->centerFrequency->setValueRange(7, f_min/1000, f_max/1000);
67 
81 
82  if (m_sampleRateGUI) {
83  connect(m_sampleRateGUI, SIGNAL(valueChanged(double)), this, SLOT(sampleRateChanged(double)));
84  }
85  if (m_bandwidthGUI) {
86  connect(m_bandwidthGUI, SIGNAL(valueChanged(double)), this, SLOT(bandwidthChanged(double)));
87  }
88 
89  connect(&m_updateTimer, SIGNAL(timeout()), this, SLOT(updateHardware()));
90  connect(&m_statusTimer, SIGNAL(timeout()), this, SLOT(updateStatus()));
91  m_statusTimer.start(500);
92 
93  CRightClickEnabler *startStopRightClickEnabler = new CRightClickEnabler(ui->startStop);
94  connect(startStopRightClickEnabler, SIGNAL(rightClick(const QPoint &)), this, SLOT(openDeviceSettingsDialog(const QPoint &)));
95 
97 
98  connect(&m_inputMessageQueue, SIGNAL(messageEnqueued()), this, SLOT(handleInputMessages()), Qt::QueuedConnection);
100 
101  sendSettings();
102 }
MessageQueue m_inputMessageQueue
void sampleRateChanged(double sampleRate)
SoapySDROutput * m_sampleSink
virtual void setMessageQueueToGUI(MessageQueue *queue)
void initStreamArgSettings(SoapySDROutputSettings &settings)
DeviceUISet * m_deviceUISet
void bandwidthChanged(double bandwidth)
SoapySDROutputSettings m_settings
const SoapySDR::RangeList & getBandwidthRanges()
void createIndividualGainsControl(const std::vector< DeviceSoapySDRParams::GainSetting > &individualGainsList)
void initDeviceArgSettings(SoapySDROutputSettings &settings)
const std::vector< DeviceSoapySDRParams::FrequencySetting > & getTunableElements()
DeviceSampleSink * getSampleSink()
Return pointer to the device sample sink (single Tx) or nullptr.
Definition: deviceapi.cpp:222
Ui::SoapySDROutputGui * ui
const SoapySDR::RangeList & getRateRanges()
QCheckBox * m_autoGain
void createTunableElementsControl(const std::vector< DeviceSoapySDRParams::FrequencySetting > &tunableElementsList)
void openDeviceSettingsDialog(const QPoint &p)
engine is before initialization
Definition: deviceapi.h:53
void createRangesControl(ItemSettingGUI **settingGUI, const SoapySDR::RangeList &rangeList, const QString &text, const QString &unit)
StringRangeGUI * m_antennas
DeviceAPI * m_deviceAPI
Definition: deviceuiset.h:48
ItemSettingGUI * m_sampleRateGUI
const SoapySDR::ArgInfoList & getDeviceArgInfoList()
void getFrequencyRange(uint64_t &min, uint64_t &max)
void initGainSettings(SoapySDROutputSettings &settings)
const std::vector< DeviceSoapySDRParams::GainSetting > & getIndividualGainsRanges()
QCheckBox * m_autoDCCorrection
const std::vector< std::string > & getAntennas()
void initTunableElementsSettings(SoapySDROutputSettings &settings)
ComplexFactorGUI * m_iqCorrectionGUI
const SoapySDR::ArgInfoList & getStreamArgInfoList()
ItemSettingGUI * m_bandwidthGUI
QCheckBox * m_autoIQCorrection
IntervalSliderGUI * m_gainSliderGUI
ComplexFactorGUI * m_dcCorrectionGUI
void createArgumentsControl(const SoapySDR::ArgInfoList &argInfoList, bool deviceArguments)
void createAntennasControl(const std::vector< std::string > &antennaList)
unsigned __int64 uint64_t
Definition: rtptypes_win.h:48
+ Here is the call graph for this function:

◆ ~SoapySDROutputGui()

SoapySDROutputGui::~SoapySDROutputGui ( )
virtual

Definition at line 104 of file soapysdroutputgui.cpp.

References ui.

105 {
106  delete ui;
107 }
Ui::SoapySDROutputGui * ui

Member Function Documentation

◆ antennasChanged

void SoapySDROutputGui::antennasChanged ( )
privateslot

Definition at line 553 of file soapysdroutputgui.cpp.

References StringRangeGUI::getCurrentValue(), SoapySDROutputSettings::m_antenna, m_antennas, m_settings, and sendSettings().

Referenced by createAntennasControl().

554 {
555  const std::string& antennaStr = m_antennas->getCurrentValue();
556  m_settings.m_antenna = QString(antennaStr.c_str());
557  sendSettings();
558 }
const std::string & getCurrentValue()
SoapySDROutputSettings m_settings
StringRangeGUI * m_antennas
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ autoDCCorrectionChanged

void SoapySDROutputGui::autoDCCorrectionChanged ( bool  set)
privateslot

Definition at line 590 of file soapysdroutputgui.cpp.

References SoapySDROutputSettings::m_autoDCCorrection, m_settings, and sendSettings().

Referenced by createCorrectionsControl().

591 {
593  sendSettings();
594 }
SoapySDROutputSettings m_settings
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ autoGainChanged

void SoapySDROutputGui::autoGainChanged ( bool  set)
privateslot

Definition at line 578 of file soapysdroutputgui.cpp.

References SoapySDROutputSettings::m_autoGain, m_settings, and sendSettings().

Referenced by createGlobalGainControl().

579 {
580  m_settings.m_autoGain = set;
581  sendSettings();
582 }
SoapySDROutputSettings m_settings
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ autoIQCorrectionChanged

void SoapySDROutputGui::autoIQCorrectionChanged ( bool  set)
privateslot

Definition at line 596 of file soapysdroutputgui.cpp.

References SoapySDROutputSettings::m_autoIQCorrection, m_settings, and sendSettings().

Referenced by createCorrectionsControl().

597 {
599  sendSettings();
600 }
SoapySDROutputSettings m_settings
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ bandwidthChanged

void SoapySDROutputGui::bandwidthChanged ( double  bandwidth)
privateslot

Definition at line 560 of file soapysdroutputgui.cpp.

References SoapySDROutputSettings::m_bandwidth, m_settings, and sendSettings().

Referenced by SoapySDROutputGui().

561 {
562  m_settings.m_bandwidth = round(bandwidth);
563  sendSettings();
564 }
SoapySDROutputSettings m_settings
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ blockApplySettings()

void SoapySDROutputGui::blockApplySettings ( bool  block)
inlineprivate

Definition at line 104 of file soapysdroutputgui.h.

Referenced by displaySettings(), and handleMessage().

104 { m_doApplySettings = !block; }
+ Here is the caller graph for this function:

◆ createAntennasControl()

void SoapySDROutputGui::createAntennasControl ( const std::vector< std::string > &  antennaList)
private

Definition at line 168 of file soapysdroutputgui.cpp.

References StringRangeGUI::addItem(), antennasChanged(), m_antennas, StringRangeGUI::setLabel(), StringRangeGUI::setUnits(), and ui.

Referenced by SoapySDROutputGui().

169 {
170  if (antennaList.size() == 0) { // return early if the antenna list is empty
171  return;
172  }
173 
174  m_antennas = new StringRangeGUI(this);
175  m_antennas->setLabel(QString("RF out"));
176  m_antennas->setUnits(QString("Port"));
177 
178  for (const auto &it : antennaList) {
179  m_antennas->addItem(QString(it.c_str()), it);
180  }
181 
182  QVBoxLayout *layout = (QVBoxLayout *) ui->scrollAreaWidgetContents->layout();
183  layout->addWidget(m_antennas);
184 
185  connect(m_antennas, SIGNAL(valueChanged()), this, SLOT(antennasChanged()));
186 }
Ui::SoapySDROutputGui * ui
StringRangeGUI * m_antennas
void setLabel(const QString &text)
void addItem(const QString &itemStr, const std::string &itemValue)
void setUnits(const QString &units)
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ createArgumentsControl()

void SoapySDROutputGui::createArgumentsControl ( const SoapySDR::ArgInfoList &  argInfoList,
bool  deviceArguments 
)
private

Definition at line 322 of file soapysdroutputgui.cpp.

References ArgInfoGUI::addFloatValue(), ArgInfoGUI::addIntValue(), ArgInfoGUI::addStringValue(), ArgInfoGUI::ArgInfoBinary, ArgInfoGUI::ArgInfoContinuous, ArgInfoGUI::ArgInfoDiscrete, ArgInfoGUI::ArgInfoValueBool, ArgInfoGUI::ArgInfoValueFloat, ArgInfoGUI::ArgInfoValueInt, ArgInfoGUI::ArgInfoValueString, deviceArgChanged(), i, m_deviceArgsGUIs, m_streamArgsGUIs, ArgInfoGUI::setLabel(), ArgInfoGUI::setRange(), ArgInfoGUI::setToolTip(), ArgInfoGUI::setUnits(), streamArgChanged(), and ui.

Referenced by SoapySDROutputGui().

323 {
324  if (argInfoList.size() == 0) { // return early if list is empty
325  return;
326  }
327 
328  QVBoxLayout *layout = (QVBoxLayout *) ui->scrollAreaWidgetContents->layout();
329 
330  QFrame *line = new QFrame(this);
331  line->setFrameShape(QFrame::HLine);
332  line->setFrameShadow(QFrame::Sunken);
333  layout->addWidget(line);
334 
335  std::vector<SoapySDR::ArgInfo>::const_iterator it = argInfoList.begin();
336 
337  for (; it != argInfoList.end(); ++it)
338  {
340  ArgInfoGUI *argGUI;
341 
342  if (it->type == SoapySDR::ArgInfo::BOOL) {
343  valueType = ArgInfoGUI::ArgInfoValueBool;
344  } else if (it->type == SoapySDR::ArgInfo::INT) {
345  valueType = ArgInfoGUI::ArgInfoValueInt;
346  } else if (it->type == SoapySDR::ArgInfo::FLOAT) {
347  valueType = ArgInfoGUI::ArgInfoValueFloat;
348  } else if (it->type == SoapySDR::ArgInfo::STRING) {
349  valueType = ArgInfoGUI::ArgInfoValueString;
350  } else {
351  continue;
352  }
353 
354  if (valueType == ArgInfoGUI::ArgInfoValueBool)
355  {
357  }
358  else if (it->options.size() == 0)
359  {
360  argGUI = new ArgInfoGUI(ArgInfoGUI::ArgInfoContinuous, valueType, this);
361  }
362  else
363  {
364  argGUI = new ArgInfoGUI(ArgInfoGUI::ArgInfoDiscrete, valueType, this);
365  std::vector<std::string>::const_iterator optionIt = it->options.begin();
366  std::vector<std::string>::const_iterator optionNameIt = it->optionNames.begin();
367 
368  for (int i = 0; optionIt != it->options.end(); ++optionIt, i++)
369  {
370  QString name(optionNameIt == it->optionNames.end() ? optionIt->c_str() : optionNameIt->c_str());
371 
372  if (optionNameIt != it->optionNames.end()) {
373  ++optionNameIt;
374  }
375 
376  if (valueType == ArgInfoGUI::ArgInfoValueInt) {
377  argGUI->addIntValue(name, atoi(optionIt->c_str()));
378  } else if (valueType == ArgInfoGUI::ArgInfoValueFloat) {
379  argGUI->addFloatValue(name, atof(optionIt->c_str()));
380  } else if (valueType == ArgInfoGUI::ArgInfoValueString) {
381  argGUI->addStringValue(name, QString(optionIt->c_str()));
382  }
383  }
384  }
385 
386  if ((it->range.minimum() != 0) || (it->range.maximum() != 0)) {
387  argGUI->setRange(it->range.minimum(), it->range.maximum());
388  }
389 
390  argGUI->setLabel(QString(it->name.size() == 0 ? it->key.c_str() : it->name.c_str()));
391  argGUI->setUnits(QString(it->units.c_str()));
392 
393  if (it->description.size() != 0) {
394  argGUI->setToolTip(QString(it->description.c_str()));
395  }
396 
397  layout->addWidget(argGUI);
398 
399  DynamicArgSettingGUI *gui = new DynamicArgSettingGUI(argGUI, QString(it->key.c_str()));
400 
401  // This could be made more elegant but let's make it more simple
402  if (deviceArguments)
403  {
404  m_deviceArgsGUIs.push_back(gui);
405  connect(gui, SIGNAL(valueChanged(QString, QVariant)), this, SLOT(deviceArgChanged(QString, QVariant)));
406  }
407  else
408  {
409  m_streamArgsGUIs.push_back(gui);
410  connect(gui, SIGNAL(valueChanged(QString, QVariant)), this, SLOT(streamArgChanged(QString, QVariant)));
411  }
412  }
413 }
void streamArgChanged(QString itemName, QVariant value)
std::vector< DynamicArgSettingGUI * > m_deviceArgsGUIs
void setUnits(const QString &units)
Definition: arginfogui.cpp:95
void setRange(double min, double max)
Definition: arginfogui.cpp:72
Ui::SoapySDROutputGui * ui
int32_t i
Definition: decimators.h:244
int BOOL
Definition: fcdhid.h:37
void addIntValue(const QString &text, int value)
Definition: arginfogui.cpp:155
void addFloatValue(const QString &text, double value)
Definition: arginfogui.cpp:186
void setToolTip(const QString &text)
Definition: arginfogui.cpp:84
std::vector< DynamicArgSettingGUI * > m_streamArgsGUIs
void deviceArgChanged(QString itemName, QVariant value)
void setLabel(const QString &text)
Definition: arginfogui.cpp:79
void addStringValue(const QString &text, const QString &value)
Definition: arginfogui.cpp:219
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ createCorrectionsControl()

void SoapySDROutputGui::createCorrectionsControl ( )
private

Definition at line 267 of file soapysdroutputgui.cpp.

References autoDCCorrectionChanged(), autoIQCorrectionChanged(), dcCorrectionArgumentChanged(), dcCorrectionModuleChanged(), SoapySDROutput::hasDCAutoCorrection(), SoapySDROutput::hasDCCorrectionValue(), SoapySDROutput::hasIQAutoCorrection(), SoapySDROutput::hasIQCorrectionValue(), iqCorrectionArgumentChanged(), iqCorrectionModuleChanged(), m_autoDCCorrection, m_autoIQCorrection, m_dcCorrectionGUI, m_iqCorrectionGUI, m_sampleSink, ComplexFactorGUI::setAutomaticEnable(), ComplexFactorGUI::setLabel(), and ui.

Referenced by SoapySDROutputGui().

268 {
269  QVBoxLayout *layout = (QVBoxLayout *) ui->scrollAreaWidgetContents->layout();
270 
271  if (m_sampleSink->hasDCCorrectionValue()) // complex GUI
272  {
274  m_dcCorrectionGUI->setLabel(QString("DC"));
276  layout->addWidget(m_dcCorrectionGUI);
277 
278  connect(m_dcCorrectionGUI, SIGNAL(moduleChanged(double)), this, SLOT(dcCorrectionModuleChanged(double)));
279  connect(m_dcCorrectionGUI, SIGNAL(argumentChanged(double)), this, SLOT(dcCorrectionArgumentChanged(double)));
280 
282  connect(m_dcCorrectionGUI, SIGNAL(automaticChanged(bool)), this, SLOT(autoDCCorrectionChanged(bool)));
283  }
284  }
285  else if (m_sampleSink->hasDCAutoCorrection()) // simple checkbox
286  {
287  m_autoDCCorrection = new QCheckBox(this);
288  m_autoDCCorrection->setText(QString("Auto DC corr"));
289  m_autoDCCorrection->setToolTip(QString("Automatic hardware DC offset correction"));
290  m_autoDCCorrection->setStyleSheet("QCheckBox::indicator::unchecked {background: rgb(79,79,79);} QCheckBox::indicator::checked {background: rgb(255, 157, 38);}");
291  layout->addWidget(m_autoDCCorrection);
292 
293  connect(m_autoDCCorrection, SIGNAL(toggled(bool)), this, SLOT(autoDCCorrectionChanged(bool)));
294  }
295 
296  if (m_sampleSink->hasIQCorrectionValue()) // complex GUI
297  {
299  m_iqCorrectionGUI->setLabel(QString("IQ"));
301  layout->addWidget(m_iqCorrectionGUI);
302 
303  connect(m_iqCorrectionGUI, SIGNAL(moduleChanged(double)), this, SLOT(iqCorrectionModuleChanged(double)));
304  connect(m_iqCorrectionGUI, SIGNAL(argumentChanged(double)), this, SLOT(iqCorrectionArgumentChanged(double)));
305 
307  connect(m_iqCorrectionGUI, SIGNAL(automaticChanged(bool)), this, SLOT(autoIQCorrectionChanged(bool)));
308  }
309  }
310  else if (m_sampleSink->hasIQAutoCorrection()) // simple checkbox
311  {
312  m_autoIQCorrection = new QCheckBox(this);
313  m_autoIQCorrection->setText(QString("Auto IQ corr"));
314  m_autoIQCorrection->setToolTip(QString("Automatic hardware IQ imbalance correction"));
315  m_autoIQCorrection->setStyleSheet("QCheckBox::indicator::unchecked {background: rgb(79,79,79);} QCheckBox::indicator::checked {background: rgb(255, 157, 38);}");
316  layout->addWidget(m_autoIQCorrection);
317 
318  connect(m_autoIQCorrection, SIGNAL(toggled(bool)), this, SLOT(autoIQCorrectionChanged(bool)));
319  }
320 }
void autoDCCorrectionChanged(bool set)
SoapySDROutput * m_sampleSink
bool hasIQAutoCorrection()
bool hasIQCorrectionValue()
void autoIQCorrectionChanged(bool set)
bool hasDCAutoCorrection()
Ui::SoapySDROutputGui * ui
void dcCorrectionModuleChanged(double value)
void setLabel(const QString &text)
void setAutomaticEnable(bool enable)
void iqCorrectionModuleChanged(double value)
QCheckBox * m_autoDCCorrection
void dcCorrectionArgumentChanged(double value)
ComplexFactorGUI * m_iqCorrectionGUI
QCheckBox * m_autoIQCorrection
ComplexFactorGUI * m_dcCorrectionGUI
bool hasDCCorrectionValue()
void iqCorrectionArgumentChanged(double value)
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ createGlobalGainControl()

void SoapySDROutputGui::createGlobalGainControl ( )
private

Definition at line 214 of file soapysdroutputgui.cpp.

References autoGainChanged(), SoapySDROutput::getGlobalGainRange(), globalGainChanged(), SoapySDROutput::isAGCSupported(), m_autoGain, m_gainSliderGUI, m_sampleSink, leansdr::max(), leansdr::min(), IntervalSliderGUI::setInterval(), IntervalSliderGUI::setLabel(), IntervalSliderGUI::setUnits(), and ui.

Referenced by SoapySDROutputGui().

215 {
217  int min, max;
218  m_sampleSink->getGlobalGainRange(min, max);
219  m_gainSliderGUI->setInterval(min, max);
220  m_gainSliderGUI->setLabel(QString("Global gain"));
221  m_gainSliderGUI->setUnits(QString(""));
222 
223  QVBoxLayout *layout = (QVBoxLayout *) ui->scrollAreaWidgetContents->layout();
224 
225  QFrame *line = new QFrame(this);
226  line->setFrameShape(QFrame::HLine);
227  line->setFrameShadow(QFrame::Sunken);
228  layout->addWidget(line);
229 
231  {
232  m_autoGain = new QCheckBox(this);
233  m_autoGain->setText(QString("AGC"));
234  m_autoGain->setStyleSheet("QCheckBox::indicator::unchecked {background: rgb(79,79,79);} QCheckBox::indicator::checked {background: rgb(255, 157, 38);}");
235  layout->addWidget(m_autoGain);
236 
237  connect(m_autoGain, SIGNAL(toggled(bool)), this, SLOT(autoGainChanged(bool)));
238  }
239 
240  layout->addWidget(m_gainSliderGUI);
241 
242  connect(m_gainSliderGUI, SIGNAL(valueChanged(double)), this, SLOT(globalGainChanged(double)));
243 }
SoapySDROutput * m_sampleSink
void setUnits(const QString &units)
void getGlobalGainRange(int &min, int &max)
Ui::SoapySDROutputGui * ui
QCheckBox * m_autoGain
void globalGainChanged(double gain)
void setInterval(double minimum, double maximum)
void autoGainChanged(bool set)
void setLabel(const QString &text)
IntervalSliderGUI * m_gainSliderGUI
T max(const T &x, const T &y)
Definition: framework.h:446
T min(const T &x, const T &y)
Definition: framework.h:440
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ createIndividualGainsControl()

void SoapySDROutputGui::createIndividualGainsControl ( const std::vector< DeviceSoapySDRParams::GainSetting > &  individualGainsList)
private

Definition at line 245 of file soapysdroutputgui.cpp.

References arg(), i, individualGainChanged(), m_individualGainsGUIs, IntervalSliderGUI::setInterval(), IntervalSliderGUI::setLabel(), IntervalSliderGUI::setUnits(), and ui.

Referenced by SoapySDROutputGui().

246 {
247  if (individualGainsList.size() == 0) { // Leave early if list of individual gains is empty
248  return;
249  }
250 
251  QVBoxLayout *layout = (QVBoxLayout *) ui->scrollAreaWidgetContents->layout();
252  std::vector<DeviceSoapySDRParams::GainSetting>::const_iterator it = individualGainsList.begin();
253 
254  for (int i = 0; it != individualGainsList.end(); ++it, i++)
255  {
256  IntervalSliderGUI *gainGUI = new IntervalSliderGUI(this);
257  gainGUI->setInterval(it->m_range.minimum(), it->m_range.maximum());
258  gainGUI->setLabel(QString("%1 gain").arg(it->m_name.c_str()));
259  gainGUI->setUnits(QString(""));
260  DynamicItemSettingGUI *gui = new DynamicItemSettingGUI(gainGUI, QString(it->m_name.c_str()));
261  layout->addWidget(gainGUI);
262  m_individualGainsGUIs.push_back(gui);
263  connect(m_individualGainsGUIs.back(), SIGNAL(valueChanged(QString, double)), this, SLOT(individualGainChanged(QString, double)));
264  }
265 }
void setUnits(const QString &units)
void individualGainChanged(QString name, double value)
std::vector< DynamicItemSettingGUI * > m_individualGainsGUIs
Ui::SoapySDROutputGui * ui
Fixed< IntType, IntBits > arg(const std::complex< Fixed< IntType, IntBits > > &val)
Definition: fixed.h:2401
void setInterval(double minimum, double maximum)
int32_t i
Definition: decimators.h:244
void setLabel(const QString &text)
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ createRangesControl()

void SoapySDROutputGui::createRangesControl ( ItemSettingGUI **  settingGUI,
const SoapySDR::RangeList &  rangeList,
const QString &  text,
const QString &  unit 
)
private

Definition at line 114 of file soapysdroutputgui.cpp.

References IntervalRangeGUI::addInterval(), DiscreteRangeGUI::addItem(), arg(), IntervalRangeGUI::reset(), DiscreteRangeGUI::setLabel(), IntervalRangeGUI::setLabel(), DiscreteRangeGUI::setUnits(), IntervalRangeGUI::setUnits(), and ui.

Referenced by createTunableElementsControl(), and SoapySDROutputGui().

119 {
120  if (rangeList.size() == 0) { // return early if the range list is empty
121  return;
122  }
123 
124  bool rangeDiscrete = true; // discretes values
125  bool rangeInterval = true; // intervals
126 
127  for (const auto &it : rangeList)
128  {
129  if (it.minimum() != it.maximum()) {
130  rangeDiscrete = false;
131  } else {
132  rangeInterval = false;
133  }
134  }
135 
136  if (rangeDiscrete)
137  {
138  DiscreteRangeGUI *rangeGUI = new DiscreteRangeGUI(this);
139  rangeGUI->setLabel(text);
140  rangeGUI->setUnits(QString("k%1").arg(unit));
141 
142  for (const auto &it : rangeList) {
143  rangeGUI->addItem(QString("%1").arg(QString::number(it.minimum()/1000.0, 'f', 0)), it.minimum());
144  }
145 
146  *settingGUI = rangeGUI;
147  QVBoxLayout *layout = (QVBoxLayout *) ui->scrollAreaWidgetContents->layout();
148  layout->addWidget(rangeGUI);
149  }
150  else if (rangeInterval)
151  {
152  IntervalRangeGUI *rangeGUI = new IntervalRangeGUI(this);
153  rangeGUI->setLabel(text);
154  rangeGUI->setUnits(unit);
155 
156  for (const auto &it : rangeList) {
157  rangeGUI->addInterval(it.minimum(), it.maximum());
158  }
159 
160  rangeGUI->reset();
161 
162  *settingGUI = rangeGUI;
163  QVBoxLayout *layout = (QVBoxLayout *) ui->scrollAreaWidgetContents->layout();
164  layout->addWidget(rangeGUI);
165  }
166 }
void setLabel(const QString &text)
Ui::SoapySDROutputGui * ui
Fixed< IntType, IntBits > arg(const std::complex< Fixed< IntType, IntBits > > &val)
Definition: fixed.h:2401
void setLabel(const QString &text)
void addItem(const QString &itemStr, double itemValue)
void setUnits(const QString &units)
void addInterval(double minimum, double maximum)
void setUnits(const QString &units)
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ createTunableElementsControl()

void SoapySDROutputGui::createTunableElementsControl ( const std::vector< DeviceSoapySDRParams::FrequencySetting > &  tunableElementsList)
private

Definition at line 188 of file soapysdroutputgui.cpp.

References arg(), createRangesControl(), i, m_tunableElementsGUIs, and tunableElementChanged().

Referenced by SoapySDROutputGui().

189 {
190  if (tunableElementsList.size() <= 1) { // This list is created for other elements than the main one (RF) which is always at index 0
191  return;
192  }
193 
194  std::vector<DeviceSoapySDRParams::FrequencySetting>::const_iterator it = tunableElementsList.begin() + 1;
195 
196  for (int i = 0; it != tunableElementsList.end(); ++it, i++)
197  {
198  if (it->m_ranges.size() == 0) { // skip empty ranges lists
199  continue;
200  }
201 
202  ItemSettingGUI *rangeGUI;
204  &rangeGUI,
205  it->m_ranges,
206  QString("%1 freq").arg(it->m_name.c_str()),
207  QString((it->m_name == "CORR") ? "ppm" : "Hz"));
208  DynamicItemSettingGUI *gui = new DynamicItemSettingGUI(rangeGUI, QString(it->m_name.c_str()));
209  m_tunableElementsGUIs.push_back(gui);
210  connect(m_tunableElementsGUIs.back(), SIGNAL(valueChanged(QString, double)), this, SLOT(tunableElementChanged(QString, double)));
211  }
212 }
std::vector< DynamicItemSettingGUI * > m_tunableElementsGUIs
Fixed< IntType, IntBits > arg(const std::complex< Fixed< IntType, IntBits > > &val)
Definition: fixed.h:2401
void createRangesControl(ItemSettingGUI **settingGUI, const SoapySDR::RangeList &rangeList, const QString &text, const QString &unit)
int32_t i
Definition: decimators.h:244
void tunableElementChanged(QString name, double value)
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ dcCorrectionArgumentChanged

void SoapySDROutputGui::dcCorrectionArgumentChanged ( double  value)
privateslot

Definition at line 609 of file soapysdroutputgui.cpp.

References abs(), SoapySDROutputSettings::m_dcCorrection, M_PI, m_settings, and sendSettings().

Referenced by createCorrectionsControl().

610 {
611  double angleInRadians = (value / 180.0) * M_PI;
612  std::complex<double> dcCorrection = std::polar<double>(abs(m_settings.m_dcCorrection), angleInRadians);
613  m_settings.m_dcCorrection = dcCorrection;
614  sendSettings();
615 }
SoapySDROutputSettings m_settings
Fixed< IntType, IntBits > abs(Fixed< IntType, IntBits > const &x)
Definition: fixed.h:2313
#define M_PI
Definition: rdsdemod.cpp:27
std::complex< double > m_dcCorrection
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ dcCorrectionModuleChanged

void SoapySDROutputGui::dcCorrectionModuleChanged ( double  value)
privateslot

Definition at line 602 of file soapysdroutputgui.cpp.

References arg(), SoapySDROutputSettings::m_dcCorrection, m_settings, and sendSettings().

Referenced by createCorrectionsControl().

603 {
604  std::complex<double> dcCorrection = std::polar<double>(value, arg(m_settings.m_dcCorrection));
605  m_settings.m_dcCorrection = dcCorrection;
606  sendSettings();
607 }
SoapySDROutputSettings m_settings
Fixed< IntType, IntBits > arg(const std::complex< Fixed< IntType, IntBits > > &val)
Definition: fixed.h:2401
std::complex< double > m_dcCorrection
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ deserialize()

bool SoapySDROutputGui::deserialize ( const QByteArray &  data)
virtual

Implements PluginInstanceGUI.

Definition at line 449 of file soapysdroutputgui.cpp.

References SoapySDROutputSettings::deserialize(), displaySettings(), m_forceSettings, m_settings, resetToDefaults(), and sendSettings().

450 {
451  if(m_settings.deserialize(data))
452  {
453  displaySettings();
454  m_forceSettings = true;
455  sendSettings();
456  return true;
457  }
458  else
459  {
460  resetToDefaults();
461  return false;
462  }
463 }
SoapySDROutputSettings m_settings
bool deserialize(const QByteArray &data)
+ Here is the call graph for this function:

◆ destroy()

void SoapySDROutputGui::destroy ( )
virtual

Implements PluginInstanceGUI.

Definition at line 109 of file soapysdroutputgui.cpp.

110 {
111  delete this;
112 }

◆ deviceArgChanged

void SoapySDROutputGui::deviceArgChanged ( QString  itemName,
QVariant  value 
)
privateslot

Definition at line 638 of file soapysdroutputgui.cpp.

References SoapySDROutputSettings::m_deviceArgSettings, m_settings, and sendSettings().

Referenced by createArgumentsControl().

639 {
640  m_settings.m_deviceArgSettings[itemName] = value;
641  sendSettings();
642 }
SoapySDROutputSettings m_settings
QMap< QString, QVariant > m_deviceArgSettings
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ displayCorrectionsSettings()

void SoapySDROutputGui::displayCorrectionsSettings ( )
private

Definition at line 752 of file soapysdroutputgui.cpp.

References abs(), arg(), SoapySDROutputSettings::m_autoDCCorrection, m_autoDCCorrection, SoapySDROutputSettings::m_autoIQCorrection, m_autoIQCorrection, SoapySDROutputSettings::m_dcCorrection, m_dcCorrectionGUI, SoapySDROutputSettings::m_iqCorrection, m_iqCorrectionGUI, M_PI, m_settings, ComplexFactorGUI::setArgument(), ComplexFactorGUI::setAutomatic(), and ComplexFactorGUI::setModule().

Referenced by displaySettings().

753 {
754  if (m_dcCorrectionGUI)
755  {
759  }
760 
761  if (m_iqCorrectionGUI)
762  {
766  }
767 
768  if (m_autoDCCorrection) {
770  }
771 
772  if (m_autoIQCorrection) {
774  }
775 }
SoapySDROutputSettings m_settings
Fixed< IntType, IntBits > abs(Fixed< IntType, IntBits > const &x)
Definition: fixed.h:2313
#define M_PI
Definition: rdsdemod.cpp:27
Fixed< IntType, IntBits > arg(const std::complex< Fixed< IntType, IntBits > > &val)
Definition: fixed.h:2401
void setArgument(double value)
void setAutomatic(bool automatic)
std::complex< double > m_iqCorrection
QCheckBox * m_autoDCCorrection
void setModule(double value)
std::complex< double > m_dcCorrection
ComplexFactorGUI * m_iqCorrectionGUI
QCheckBox * m_autoIQCorrection
ComplexFactorGUI * m_dcCorrectionGUI
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ displayDeviceArgsSettings()

void SoapySDROutputGui::displayDeviceArgsSettings ( )
private

Definition at line 791 of file soapysdroutputgui.cpp.

References SoapySDROutputSettings::m_deviceArgSettings, m_deviceArgsGUIs, and m_settings.

Referenced by displaySettings(), and handleMessage().

792 {
793  for (const auto &it : m_deviceArgsGUIs)
794  {
795  QMap<QString, QVariant>::iterator elIt = m_settings.m_deviceArgSettings.find(it->getName());
796 
797  if (elIt != m_settings.m_deviceArgSettings.end())
798  {
799  it->setValue(elIt.value());
800  *elIt = it->getValue();
801  }
802  }
803 }
std::vector< DynamicArgSettingGUI * > m_deviceArgsGUIs
SoapySDROutputSettings m_settings
QMap< QString, QVariant > m_deviceArgSettings
+ Here is the caller graph for this function:

◆ displayIndividualGainsControlSettings()

void SoapySDROutputGui::displayIndividualGainsControlSettings ( )
private

Definition at line 738 of file soapysdroutputgui.cpp.

References SoapySDROutputSettings::m_individualGains, m_individualGainsGUIs, and m_settings.

Referenced by displaySettings().

739 {
740  for (const auto &it : m_individualGainsGUIs)
741  {
742  QMap<QString, double>::iterator elIt = m_settings.m_individualGains.find(it->getName());
743 
744  if (elIt != m_settings.m_individualGains.end())
745  {
746  it->setValue(*elIt);
747  *elIt = it->getValue();
748  }
749  }
750 }
std::vector< DynamicItemSettingGUI * > m_individualGainsGUIs
SoapySDROutputSettings m_settings
QMap< QString, double > m_individualGains
+ Here is the caller graph for this function:

◆ displaySettings()

void SoapySDROutputGui::displaySettings ( )
private

Definition at line 684 of file soapysdroutputgui.cpp.

References arg(), blockApplySettings(), displayCorrectionsSettings(), displayDeviceArgsSettings(), displayIndividualGainsControlSettings(), displayStreamArgsSettings(), displayTunableElementsControlSettings(), ItemSettingGUI::getCurrentValue(), IntervalSliderGUI::getCurrentValue(), SoapySDROutputSettings::m_antenna, m_antennas, SoapySDROutputSettings::m_autoGain, m_autoGain, SoapySDROutputSettings::m_bandwidth, m_bandwidthGUI, SoapySDROutputSettings::m_centerFrequency, SoapySDROutputSettings::m_devSampleRate, m_gainSliderGUI, SoapySDROutputSettings::m_globalGain, SoapySDROutputSettings::m_log2Interp, SoapySDROutputSettings::m_LOppmTenths, m_sampleRateGUI, m_settings, ItemSettingGUI::setValue(), StringRangeGUI::setValue(), IntervalSliderGUI::setValue(), and ui.

Referenced by deserialize(), handleMessage(), resetToDefaults(), setCenterFrequency(), and SoapySDROutputGui().

685 {
686  blockApplySettings(true);
687 
688  ui->centerFrequency->setValue(m_settings.m_centerFrequency / 1000);
689 
690  if (m_antennas) {
691  m_antennas->setValue(m_settings.m_antenna.toStdString());
692  }
693  if (m_sampleRateGUI)
694  {
697  }
698  if (m_bandwidthGUI)
699  {
702  }
703  if (m_gainSliderGUI)
704  {
707  }
708  if (m_autoGain) {
709  m_autoGain->setChecked(m_settings.m_autoGain);
710  }
711 
712  ui->interp->setCurrentIndex(m_settings.m_log2Interp);
713 
714  ui->LOppm->setValue(m_settings.m_LOppmTenths);
715  ui->LOppmText->setText(QString("%1").arg(QString::number(m_settings.m_LOppmTenths/10.0, 'f', 1)));
716 
722 
723  blockApplySettings(false);
724 }
void setValue(const std::string &value)
virtual void setValue(double value)=0
void displayTunableElementsControlSettings()
SoapySDROutputSettings m_settings
Ui::SoapySDROutputGui * ui
QCheckBox * m_autoGain
Fixed< IntType, IntBits > arg(const std::complex< Fixed< IntType, IntBits > > &val)
Definition: fixed.h:2401
StringRangeGUI * m_antennas
void displayIndividualGainsControlSettings()
ItemSettingGUI * m_sampleRateGUI
virtual double getCurrentValue()
virtual double getCurrentValue()=0
void blockApplySettings(bool block)
ItemSettingGUI * m_bandwidthGUI
IntervalSliderGUI * m_gainSliderGUI
virtual void setValue(double value)
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ displayStreamArgsSettings()

void SoapySDROutputGui::displayStreamArgsSettings ( )
private

Definition at line 777 of file soapysdroutputgui.cpp.

References m_settings, SoapySDROutputSettings::m_streamArgSettings, and m_streamArgsGUIs.

Referenced by displaySettings().

778 {
779  for (const auto &it : m_streamArgsGUIs)
780  {
781  QMap<QString, QVariant>::iterator elIt = m_settings.m_streamArgSettings.find(it->getName());
782 
783  if (elIt != m_settings.m_streamArgSettings.end())
784  {
785  it->setValue(elIt.value());
786  *elIt = it->getValue();
787  }
788  }
789 }
SoapySDROutputSettings m_settings
QMap< QString, QVariant > m_streamArgSettings
std::vector< DynamicArgSettingGUI * > m_streamArgsGUIs
+ Here is the caller graph for this function:

◆ displayTunableElementsControlSettings()

void SoapySDROutputGui::displayTunableElementsControlSettings ( )
private

Definition at line 726 of file soapysdroutputgui.cpp.

References m_settings, SoapySDROutputSettings::m_tunableElements, and m_tunableElementsGUIs.

Referenced by displaySettings().

727 {
728  for (const auto &it : m_tunableElementsGUIs)
729  {
730  QMap<QString, double>::const_iterator elIt = m_settings.m_tunableElements.find(it->getName());
731 
732  if (elIt != m_settings.m_tunableElements.end()) {
733  it->setValue(*elIt);
734  }
735  }
736 }
QMap< QString, double > m_tunableElements
std::vector< DynamicItemSettingGUI * > m_tunableElementsGUIs
SoapySDROutputSettings m_settings
+ Here is the caller graph for this function:

◆ getCenterFrequency()

qint64 SoapySDROutputGui::getCenterFrequency ( ) const
virtual

Implements PluginInstanceGUI.

Definition at line 432 of file soapysdroutputgui.cpp.

References SoapySDROutputSettings::m_centerFrequency, and m_settings.

433 {
435 }
SoapySDROutputSettings m_settings

◆ getInputMessageQueue()

virtual MessageQueue* SoapySDROutputGui::getInputMessageQueue ( )
inlinevirtual

Implements PluginInstanceGUI.

Definition at line 60 of file soapysdroutputgui.h.

60 { return &m_inputMessageQueue; }
MessageQueue m_inputMessageQueue

◆ getName()

QString SoapySDROutputGui::getName ( ) const
virtual

Implements PluginInstanceGUI.

Definition at line 420 of file soapysdroutputgui.cpp.

421 {
422  return objectName();
423 }

◆ globalGainChanged

void SoapySDROutputGui::globalGainChanged ( double  gain)
privateslot

Definition at line 572 of file soapysdroutputgui.cpp.

References SoapySDROutputSettings::m_globalGain, m_settings, and sendSettings().

Referenced by createGlobalGainControl().

573 {
574  m_settings.m_globalGain = round(gain);
575  sendSettings();
576 }
SoapySDROutputSettings m_settings
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ handleInputMessages

void SoapySDROutputGui::handleInputMessages ( )
privateslot

Definition at line 519 of file soapysdroutputgui.cpp.

References DSPSignalNotification::getCenterFrequency(), Message::getIdentifier(), DSPSignalNotification::getSampleRate(), handleMessage(), m_deviceCenterFrequency, m_inputMessageQueue, m_sampleRate, Message::match(), MessageQueue::pop(), and updateSampleRateAndFrequency().

Referenced by SoapySDROutputGui().

520 {
521  Message* message;
522 
523  while ((message = m_inputMessageQueue.pop()) != 0)
524  {
525  qDebug("SoapySDROutputGui::handleInputMessages: message: %s", message->getIdentifier());
526 
527  if (DSPSignalNotification::match(*message))
528  {
529  DSPSignalNotification* notif = (DSPSignalNotification*) message;
530  m_sampleRate = notif->getSampleRate();
532  qDebug("SoapySDROutputGui::handleInputMessages: DSPSignalNotification: SampleRate:%d, CenterFrequency:%llu", notif->getSampleRate(), notif->getCenterFrequency());
534 
535  delete message;
536  }
537  else
538  {
539  if (handleMessage(*message))
540  {
541  delete message;
542  }
543  }
544  }
545 }
MessageQueue m_inputMessageQueue
Message * pop()
Pop message from queue.
qint64 getCenterFrequency() const
Definition: dspcommands.h:329
virtual bool handleMessage(const Message &message)
static bool match(const Message *message)
Definition: message.cpp:45
quint64 m_deviceCenterFrequency
Center frequency in device.
int getSampleRate() const
Definition: dspcommands.h:328
virtual const char * getIdentifier() const
Definition: message.cpp:35
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ handleMessage()

bool SoapySDROutputGui::handleMessage ( const Message message)
virtual

Implements PluginInstanceGUI.

Definition at line 466 of file soapysdroutputgui.cpp.

References blockApplySettings(), displayDeviceArgsSettings(), displaySettings(), DeviceSoapySDRShared::MsgReportDeviceArgsChange::getDeviceArgSettings(), SoapySDROutput::MsgReportGainChange::getGlobalGain(), SoapySDROutput::MsgReportGainChange::getIndividualGains(), SoapySDROutput::MsgConfigureSoapySDROutput::getSettings(), SoapySDROutput::MsgReportGainChange::getSettings(), SoapySDROutput::MsgStartStop::getStartStop(), SoapySDROutputSettings::m_deviceArgSettings, SoapySDROutputSettings::m_globalGain, SoapySDROutputSettings::m_individualGains, m_settings, Message::match(), and ui.

Referenced by handleInputMessages().

467 {
469  {
471  m_settings = cfg.getSettings();
472  blockApplySettings(true);
473  displaySettings();
474  blockApplySettings(false);
475 
476  return true;
477  }
479  {
481  const SoapySDROutputSettings& gainSettings = report.getSettings();
482 
483  if (report.getGlobalGain()) {
484  m_settings.m_globalGain = gainSettings.m_globalGain;
485  }
486  if (report.getIndividualGains()) {
488  }
489 
490  blockApplySettings(true);
491  displaySettings();
492  blockApplySettings(false);
493 
494  return true;
495  }
497  {
501 
502  return true;
503  }
504  else if (SoapySDROutput::MsgStartStop::match(message))
505  {
507  blockApplySettings(true);
508  ui->startStop->setChecked(notif.getStartStop());
509  blockApplySettings(false);
510 
511  return true;
512  }
513  else
514  {
515  return false;
516  }
517 }
const QMap< QString, QVariant > & getDeviceArgSettings() const
SoapySDROutputSettings m_settings
Ui::SoapySDROutputGui * ui
const SoapySDROutputSettings & getSettings() const
QMap< QString, double > m_individualGains
static bool match(const Message *message)
Definition: message.cpp:45
const SoapySDROutputSettings & getSettings() const
void blockApplySettings(bool block)
QMap< QString, QVariant > m_deviceArgSettings
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ individualGainChanged

void SoapySDROutputGui::individualGainChanged ( QString  name,
double  value 
)
privateslot

Definition at line 584 of file soapysdroutputgui.cpp.

References SoapySDROutputSettings::m_individualGains, m_settings, and sendSettings().

Referenced by createIndividualGainsControl().

585 {
586  m_settings.m_individualGains[name] = value;
587  sendSettings();
588 }
SoapySDROutputSettings m_settings
QMap< QString, double > m_individualGains
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ iqCorrectionArgumentChanged

void SoapySDROutputGui::iqCorrectionArgumentChanged ( double  value)
privateslot

Definition at line 624 of file soapysdroutputgui.cpp.

References abs(), SoapySDROutputSettings::m_iqCorrection, M_PI, m_settings, and sendSettings().

Referenced by createCorrectionsControl().

625 {
626  double angleInRadians = (value / 180.0) * M_PI;
627  std::complex<double> iqCorrection = std::polar<double>(abs(m_settings.m_iqCorrection), angleInRadians);
628  m_settings.m_iqCorrection = iqCorrection;
629  sendSettings();
630 }
SoapySDROutputSettings m_settings
Fixed< IntType, IntBits > abs(Fixed< IntType, IntBits > const &x)
Definition: fixed.h:2313
#define M_PI
Definition: rdsdemod.cpp:27
std::complex< double > m_iqCorrection
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ iqCorrectionModuleChanged

void SoapySDROutputGui::iqCorrectionModuleChanged ( double  value)
privateslot

Definition at line 617 of file soapysdroutputgui.cpp.

References arg(), SoapySDROutputSettings::m_iqCorrection, m_settings, and sendSettings().

Referenced by createCorrectionsControl().

618 {
619  std::complex<double> iqCorrection = std::polar<double>(value, arg(m_settings.m_iqCorrection));
620  m_settings.m_iqCorrection = iqCorrection;
621  sendSettings();
622 }
SoapySDROutputSettings m_settings
Fixed< IntType, IntBits > arg(const std::complex< Fixed< IntType, IntBits > > &val)
Definition: fixed.h:2401
std::complex< double > m_iqCorrection
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ on_centerFrequency_changed

void SoapySDROutputGui::on_centerFrequency_changed ( quint64  value)
privateslot

Definition at line 644 of file soapysdroutputgui.cpp.

References SoapySDROutputSettings::m_centerFrequency, m_settings, and sendSettings().

645 {
646  m_settings.m_centerFrequency = value * 1000;
647  sendSettings();
648 }
SoapySDROutputSettings m_settings
+ Here is the call graph for this function:

◆ on_interp_currentIndexChanged

void SoapySDROutputGui::on_interp_currentIndexChanged ( int  index)
privateslot

Definition at line 650 of file soapysdroutputgui.cpp.

References SoapySDROutputSettings::m_log2Interp, m_settings, and sendSettings().

651 {
652  if ((index <0) || (index > 6))
653  return;
654  m_settings.m_log2Interp = index;
655  sendSettings();
656 }
SoapySDROutputSettings m_settings
+ Here is the call graph for this function:

◆ on_LOppm_valueChanged

void SoapySDROutputGui::on_LOppm_valueChanged ( int  value)
privateslot

Definition at line 668 of file soapysdroutputgui.cpp.

References arg(), SoapySDROutputSettings::m_LOppmTenths, m_settings, sendSettings(), and ui.

669 {
670  ui->LOppmText->setText(QString("%1").arg(QString::number(value/10.0, 'f', 1)));
671  m_settings.m_LOppmTenths = value;
672  sendSettings();
673 }
SoapySDROutputSettings m_settings
Ui::SoapySDROutputGui * ui
Fixed< IntType, IntBits > arg(const std::complex< Fixed< IntType, IntBits > > &val)
Definition: fixed.h:2401
+ Here is the call graph for this function:

◆ on_startStop_toggled

void SoapySDROutputGui::on_startStop_toggled ( bool  checked)
privateslot

Definition at line 675 of file soapysdroutputgui.cpp.

References SoapySDROutput::MsgStartStop::create(), DeviceSampleSink::getInputMessageQueue(), m_doApplySettings, m_sampleSink, and MessageQueue::push().

676 {
677  if (m_doApplySettings)
678  {
681  }
682 }
void push(Message *message, bool emitSignal=true)
Push message onto queue.
SoapySDROutput * m_sampleSink
MessageQueue * getInputMessageQueue()
static MsgStartStop * create(bool startStop)
+ Here is the call graph for this function:

◆ on_transverter_clicked

void SoapySDROutputGui::on_transverter_clicked ( )
privateslot

Definition at line 658 of file soapysdroutputgui.cpp.

References m_settings, SoapySDROutputSettings::m_transverterDeltaFrequency, SoapySDROutputSettings::m_transverterMode, sendSettings(), setCenterFrequencySetting(), ui, and updateFrequencyLimits().

659 {
660  m_settings.m_transverterMode = ui->transverter->getDeltaFrequencyAcive();
661  m_settings.m_transverterDeltaFrequency = ui->transverter->getDeltaFrequency();
662  qDebug("SoapySDROutputGui::on_transverter_clicked: %lld Hz %s", m_settings.m_transverterDeltaFrequency, m_settings.m_transverterMode ? "on" : "off");
664  setCenterFrequencySetting(ui->centerFrequency->getValueNew());
665  sendSettings();
666 }
void setCenterFrequencySetting(uint64_t kHzValue)
SoapySDROutputSettings m_settings
Ui::SoapySDROutputGui * ui
+ Here is the call graph for this function:

◆ openDeviceSettingsDialog

void SoapySDROutputGui::openDeviceSettingsDialog ( const QPoint &  p)
privateslot

Definition at line 885 of file soapysdroutputgui.cpp.

References BasicDeviceSettingsDialog::getReverseAPIAddress(), BasicDeviceSettingsDialog::getReverseAPIDeviceIndex(), BasicDeviceSettingsDialog::getReverseAPIPort(), SoapySDROutputSettings::m_reverseAPIAddress, SoapySDROutputSettings::m_reverseAPIDeviceIndex, SoapySDROutputSettings::m_reverseAPIPort, m_settings, SoapySDROutputSettings::m_useReverseAPI, sendSettings(), BasicDeviceSettingsDialog::setReverseAPIAddress(), BasicDeviceSettingsDialog::setReverseAPIDeviceIndex(), BasicDeviceSettingsDialog::setReverseAPIPort(), BasicDeviceSettingsDialog::setUseReverseAPI(), and BasicDeviceSettingsDialog::useReverseAPI().

Referenced by SoapySDROutputGui().

886 {
887  BasicDeviceSettingsDialog dialog(this);
888  dialog.setUseReverseAPI(m_settings.m_useReverseAPI);
889  dialog.setReverseAPIAddress(m_settings.m_reverseAPIAddress);
890  dialog.setReverseAPIPort(m_settings.m_reverseAPIPort);
891  dialog.setReverseAPIDeviceIndex(m_settings.m_reverseAPIDeviceIndex);
892 
893  dialog.move(p);
894  dialog.exec();
895 
896  m_settings.m_useReverseAPI = dialog.useReverseAPI();
897  m_settings.m_reverseAPIAddress = dialog.getReverseAPIAddress();
898  m_settings.m_reverseAPIPort = dialog.getReverseAPIPort();
899  m_settings.m_reverseAPIDeviceIndex = dialog.getReverseAPIDeviceIndex();
900 
901  sendSettings();
902 }
SoapySDROutputSettings m_settings
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ resetToDefaults()

void SoapySDROutputGui::resetToDefaults ( )
virtual

Implements PluginInstanceGUI.

Definition at line 425 of file soapysdroutputgui.cpp.

References displaySettings(), m_settings, SoapySDROutputSettings::resetToDefaults(), and sendSettings().

Referenced by deserialize().

426 {
428  displaySettings();
429  sendSettings();
430 }
SoapySDROutputSettings m_settings
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ sampleRateChanged

void SoapySDROutputGui::sampleRateChanged ( double  sampleRate)
privateslot

Definition at line 547 of file soapysdroutputgui.cpp.

References SoapySDROutputSettings::m_devSampleRate, m_settings, and sendSettings().

Referenced by SoapySDROutputGui().

548 {
549  m_settings.m_devSampleRate = round(sampleRate);
550  sendSettings();
551 }
SoapySDROutputSettings m_settings
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ sendSettings()

void SoapySDROutputGui::sendSettings ( )
private

◆ serialize()

QByteArray SoapySDROutputGui::serialize ( ) const
virtual

Implements PluginInstanceGUI.

Definition at line 444 of file soapysdroutputgui.cpp.

References m_settings, and SoapySDROutputSettings::serialize().

445 {
446  return m_settings.serialize();
447 }
SoapySDROutputSettings m_settings
+ Here is the call graph for this function:

◆ setCenterFrequency()

void SoapySDROutputGui::setCenterFrequency ( qint64  centerFrequency)
virtual

Implements PluginInstanceGUI.

Definition at line 437 of file soapysdroutputgui.cpp.

References displaySettings(), SoapySDROutputSettings::m_centerFrequency, m_settings, and sendSettings().

438 {
439  m_settings.m_centerFrequency = centerFrequency;
440  displaySettings();
441  sendSettings();
442 }
SoapySDROutputSettings m_settings
+ Here is the call graph for this function:

◆ setCenterFrequencySetting()

void SoapySDROutputGui::setCenterFrequencySetting ( uint64_t  kHzValue)
private

Definition at line 836 of file soapysdroutputgui.cpp.

References arg(), SoapySDROutputSettings::m_centerFrequency, m_settings, and ui.

Referenced by on_transverter_clicked().

837 {
838  int64_t centerFrequency = kHzValue*1000;
839 
840  m_settings.m_centerFrequency = centerFrequency < 0 ? 0 : (uint64_t) centerFrequency;
841  ui->centerFrequency->setToolTip(QString("Main center frequency in kHz (LO: %1 kHz)").arg(centerFrequency/1000));
842 }
SoapySDROutputSettings m_settings
__int64 int64_t
Definition: rtptypes_win.h:47
Ui::SoapySDROutputGui * ui
Fixed< IntType, IntBits > arg(const std::complex< Fixed< IntType, IntBits > > &val)
Definition: fixed.h:2401
unsigned __int64 uint64_t
Definition: rtptypes_win.h:48
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ setName()

void SoapySDROutputGui::setName ( const QString &  name)
virtual

Implements PluginInstanceGUI.

Definition at line 415 of file soapysdroutputgui.cpp.

416 {
417  setObjectName(name);
418 }

◆ streamArgChanged

void SoapySDROutputGui::streamArgChanged ( QString  itemName,
QVariant  value 
)
privateslot

Definition at line 632 of file soapysdroutputgui.cpp.

References m_settings, SoapySDROutputSettings::m_streamArgSettings, and sendSettings().

Referenced by createArgumentsControl().

633 {
634  m_settings.m_streamArgSettings[itemName] = value;
635  sendSettings();
636 }
SoapySDROutputSettings m_settings
QMap< QString, QVariant > m_streamArgSettings
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ tunableElementChanged

void SoapySDROutputGui::tunableElementChanged ( QString  name,
double  value 
)
privateslot

Definition at line 566 of file soapysdroutputgui.cpp.

References m_settings, SoapySDROutputSettings::m_tunableElements, and sendSettings().

Referenced by createTunableElementsControl().

567 {
568  m_settings.m_tunableElements[name] = value;
569  sendSettings();
570 }
QMap< QString, double > m_tunableElements
SoapySDROutputSettings m_settings
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ updateFrequencyLimits()

void SoapySDROutputGui::updateFrequencyLimits ( )
private

Definition at line 819 of file soapysdroutputgui.cpp.

References SoapySDROutput::getFrequencyRange(), m_sampleSink, m_settings, SoapySDROutputSettings::m_transverterDeltaFrequency, SoapySDROutputSettings::m_transverterMode, and ui.

Referenced by on_transverter_clicked().

820 {
821  // values in kHz
822  uint64_t f_min, f_max;
823  qint64 deltaFrequency = m_settings.m_transverterMode ? m_settings.m_transverterDeltaFrequency/1000 : 0;
824  m_sampleSink->getFrequencyRange(f_min, f_max);
825  qint64 minLimit = f_min/1000 + deltaFrequency;
826  qint64 maxLimit = f_max/1000 + deltaFrequency;
827 
828  minLimit = minLimit < 0 ? 0 : minLimit > 9999999 ? 9999999 : minLimit;
829  maxLimit = maxLimit < 0 ? 0 : maxLimit > 9999999 ? 9999999 : maxLimit;
830 
831  qDebug("SoapySDRInputGui::updateFrequencyLimits: delta: %lld min: %lld max: %lld", deltaFrequency, minLimit, maxLimit);
832 
833  ui->centerFrequency->setValueRange(7, minLimit, maxLimit);
834 }
SoapySDROutput * m_sampleSink
SoapySDROutputSettings m_settings
Ui::SoapySDROutputGui * ui
void getFrequencyRange(uint64_t &min, uint64_t &max)
unsigned __int64 uint64_t
Definition: rtptypes_win.h:48
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ updateHardware

void SoapySDROutputGui::updateHardware ( )
privateslot

Definition at line 844 of file soapysdroutputgui.cpp.

References SoapySDROutput::MsgConfigureSoapySDROutput::create(), DeviceSampleSink::getInputMessageQueue(), m_doApplySettings, m_forceSettings, m_sampleSink, m_settings, m_updateTimer, and MessageQueue::push().

Referenced by SoapySDROutputGui().

845 {
846  if (m_doApplySettings)
847  {
848  qDebug() << "SoapySDROutputGui::updateHardware";
851  m_forceSettings = false;
852  m_updateTimer.stop();
853  }
854 }
static MsgConfigureSoapySDROutput * create(const SoapySDROutputSettings &settings, bool force)
void push(Message *message, bool emitSignal=true)
Push message onto queue.
SoapySDROutput * m_sampleSink
SoapySDROutputSettings m_settings
MessageQueue * getInputMessageQueue()
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ updateSampleRateAndFrequency()

void SoapySDROutputGui::updateSampleRateAndFrequency ( )
private

Definition at line 812 of file soapysdroutputgui.cpp.

References arg(), DeviceUISet::getSpectrum(), m_deviceCenterFrequency, m_deviceUISet, m_sampleRate, GLSpectrum::setCenterFrequency(), GLSpectrum::setSampleRate(), and ui.

Referenced by handleInputMessages().

813 {
816  ui->deviceRateText->setText(tr("%1k").arg(QString::number(m_sampleRate / 1000.0f, 'g', 5)));
817 }
void setSampleRate(qint32 sampleRate)
Definition: glspectrum.cpp:211
DeviceUISet * m_deviceUISet
Ui::SoapySDROutputGui * ui
Fixed< IntType, IntBits > arg(const std::complex< Fixed< IntType, IntBits > > &val)
Definition: fixed.h:2401
GLSpectrum * getSpectrum()
Direct spectrum getter.
Definition: deviceuiset.h:57
quint64 m_deviceCenterFrequency
Center frequency in device.
void setCenterFrequency(qint64 frequency)
Definition: glspectrum.cpp:175
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ updateStatus

void SoapySDROutputGui::updateStatus ( )
privateslot

Definition at line 856 of file soapysdroutputgui.cpp.

References DeviceAPI::errorMessage(), DeviceUISet::m_deviceAPI, m_deviceUISet, m_lastEngineState, DeviceAPI::state(), DeviceAPI::StError, DeviceAPI::StIdle, DeviceAPI::StNotStarted, DeviceAPI::StRunning, and ui.

Referenced by SoapySDROutputGui().

857 {
858  int state = m_deviceUISet->m_deviceAPI->state();
859 
860  if(m_lastEngineState != state)
861  {
862  switch(state)
863  {
865  ui->startStop->setStyleSheet("QToolButton { background:rgb(79,79,79); }");
866  break;
867  case DeviceAPI::StIdle:
868  ui->startStop->setStyleSheet("QToolButton { background-color : blue; }");
869  break;
871  ui->startStop->setStyleSheet("QToolButton { background-color : green; }");
872  break;
873  case DeviceAPI::StError:
874  ui->startStop->setStyleSheet("QToolButton { background-color : red; }");
875  QMessageBox::information(this, tr("Message"), m_deviceUISet->m_deviceAPI->errorMessage());
876  break;
877  default:
878  break;
879  }
880 
881  m_lastEngineState = state;
882  }
883 }
DeviceUISet * m_deviceUISet
QString errorMessage()
Last error message from the device engine.
Definition: deviceapi.cpp:290
Ui::SoapySDROutputGui * ui
engine is before initialization
Definition: deviceapi.h:53
EngineState state() const
Return the state of the device engine corresponding to the stream type.
Definition: deviceapi.cpp:277
DeviceAPI * m_deviceAPI
Definition: deviceuiset.h:48
engine is idle
Definition: deviceapi.h:54
engine is running
Definition: deviceapi.h:56
engine is in error
Definition: deviceapi.h:57
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

Member Data Documentation

◆ m_antennas

StringRangeGUI* SoapySDROutputGui::m_antennas
private

Definition at line 90 of file soapysdroutputgui.h.

Referenced by antennasChanged(), createAntennasControl(), and displaySettings().

◆ m_autoDCCorrection

QCheckBox* SoapySDROutputGui::m_autoDCCorrection
private

Definition at line 99 of file soapysdroutputgui.h.

Referenced by createCorrectionsControl(), and displayCorrectionsSettings().

◆ m_autoGain

QCheckBox* SoapySDROutputGui::m_autoGain
private

Definition at line 96 of file soapysdroutputgui.h.

Referenced by createGlobalGainControl(), and displaySettings().

◆ m_autoIQCorrection

QCheckBox* SoapySDROutputGui::m_autoIQCorrection
private

Definition at line 100 of file soapysdroutputgui.h.

Referenced by createCorrectionsControl(), and displayCorrectionsSettings().

◆ m_bandwidthGUI

ItemSettingGUI* SoapySDROutputGui::m_bandwidthGUI
private

Definition at line 92 of file soapysdroutputgui.h.

Referenced by displaySettings(), and SoapySDROutputGui().

◆ m_dcCorrectionGUI

ComplexFactorGUI* SoapySDROutputGui::m_dcCorrectionGUI
private

Definition at line 97 of file soapysdroutputgui.h.

Referenced by createCorrectionsControl(), and displayCorrectionsSettings().

◆ m_deviceArgsGUIs

std::vector<DynamicArgSettingGUI*> SoapySDROutputGui::m_deviceArgsGUIs
private

Definition at line 102 of file soapysdroutputgui.h.

Referenced by createArgumentsControl(), and displayDeviceArgsSettings().

◆ m_deviceCenterFrequency

quint64 SoapySDROutputGui::m_deviceCenterFrequency
private

Center frequency in device.

Definition at line 86 of file soapysdroutputgui.h.

Referenced by handleInputMessages(), and updateSampleRateAndFrequency().

◆ m_deviceUISet

DeviceUISet* SoapySDROutputGui::m_deviceUISet
private

◆ m_doApplySettings

bool SoapySDROutputGui::m_doApplySettings
private

Definition at line 80 of file soapysdroutputgui.h.

Referenced by on_startStop_toggled(), and updateHardware().

◆ m_forceSettings

bool SoapySDROutputGui::m_forceSettings
private

Definition at line 79 of file soapysdroutputgui.h.

Referenced by deserialize(), and updateHardware().

◆ m_gainSliderGUI

IntervalSliderGUI* SoapySDROutputGui::m_gainSliderGUI
private

Definition at line 94 of file soapysdroutputgui.h.

Referenced by createGlobalGainControl(), and displaySettings().

◆ m_individualGainsGUIs

std::vector<DynamicItemSettingGUI*> SoapySDROutputGui::m_individualGainsGUIs
private

◆ m_inputMessageQueue

MessageQueue SoapySDROutputGui::m_inputMessageQueue
private

Definition at line 88 of file soapysdroutputgui.h.

Referenced by handleInputMessages(), and SoapySDROutputGui().

◆ m_iqCorrectionGUI

ComplexFactorGUI* SoapySDROutputGui::m_iqCorrectionGUI
private

Definition at line 98 of file soapysdroutputgui.h.

Referenced by createCorrectionsControl(), and displayCorrectionsSettings().

◆ m_lastEngineState

int SoapySDROutputGui::m_lastEngineState
private

Definition at line 87 of file soapysdroutputgui.h.

Referenced by updateStatus().

◆ m_sampleRate

int SoapySDROutputGui::m_sampleRate
private

Definition at line 85 of file soapysdroutputgui.h.

Referenced by handleInputMessages(), and updateSampleRateAndFrequency().

◆ m_sampleRateGUI

ItemSettingGUI* SoapySDROutputGui::m_sampleRateGUI
private

Definition at line 91 of file soapysdroutputgui.h.

Referenced by displaySettings(), and SoapySDROutputGui().

◆ m_sampleSink

SoapySDROutput* SoapySDROutputGui::m_sampleSink
private

◆ m_settings

SoapySDROutputSettings SoapySDROutputGui::m_settings
private

◆ m_statusTimer

QTimer SoapySDROutputGui::m_statusTimer
private

Definition at line 83 of file soapysdroutputgui.h.

Referenced by SoapySDROutputGui().

◆ m_streamArgsGUIs

std::vector<DynamicArgSettingGUI*> SoapySDROutputGui::m_streamArgsGUIs
private

Definition at line 101 of file soapysdroutputgui.h.

Referenced by createArgumentsControl(), and displayStreamArgsSettings().

◆ m_tunableElementsGUIs

std::vector<DynamicItemSettingGUI*> SoapySDROutputGui::m_tunableElementsGUIs
private

◆ m_updateTimer

QTimer SoapySDROutputGui::m_updateTimer
private

Definition at line 82 of file soapysdroutputgui.h.

Referenced by sendSettings(), SoapySDROutputGui(), and updateHardware().

◆ ui

Ui::SoapySDROutputGui* SoapySDROutputGui::ui
private

The documentation for this class was generated from the following files: