diff --git a/plugins/samplesink/soapysdroutput/soapysdroutput.cpp b/plugins/samplesink/soapysdroutput/soapysdroutput.cpp index 761a9f125..eb34bd45e 100644 --- a/plugins/samplesink/soapysdroutput/soapysdroutput.cpp +++ b/plugins/samplesink/soapysdroutput/soapysdroutput.cpp @@ -38,6 +38,7 @@ SoapySDROutput::SoapySDROutput(DeviceSinkAPI *deviceAPI) : { openDevice(); initGainSettings(m_settings); + initStreamArgSettings(m_settings); } SoapySDROutput::~SoapySDROutput() @@ -1000,6 +1001,32 @@ bool SoapySDROutput::applySettings(const SoapySDROutputSettings& settings, bool } } + for (const auto &oname : m_settings.m_streamArgSettings.keys()) + { + auto nvalue = settings.m_streamArgSettings.find(oname); + + if (nvalue != settings.m_streamArgSettings.end() && ((m_settings.m_streamArgSettings[oname] != *nvalue) || force)) + { + if (dev != 0) + { + try + { + dev->writeSetting(SOAPY_SDR_TX, requestedChannel, oname.toStdString(), nvalue->toString().toStdString()); + qDebug("SoapySDRInput::applySettings: stream argument %s set to %s", + oname.toStdString().c_str(), nvalue->toString().toStdString().c_str()); + individualGainsChanged = true; + } + catch (const std::exception &ex) + { + qCritical("SoapySDRInput::applySettings: cannot set stream argument %s to %s: %s", + oname.toStdString().c_str(), nvalue->toString().toStdString().c_str(), ex.what()); + } + } + + m_settings.m_streamArgSettings[oname] = *nvalue; + } + } + if (forwardChangeOwnDSP) { int sampleRate = settings.m_devSampleRate/(1<key.c_str())); m_streamArgsGUIs.push_back(gui); - connect(gui, SIGNAL(valueChanged(QString, value)), this, SLOT(streamArgChanged(QString, QVariant))); + connect(gui, SIGNAL(valueChanged(QString, QVariant)), this, SLOT(streamArgChanged(QString, QVariant))); } } diff --git a/plugins/samplesource/soapysdrinput/soapysdrinput.cpp b/plugins/samplesource/soapysdrinput/soapysdrinput.cpp index 711489128..4fabed3d7 100644 --- a/plugins/samplesource/soapysdrinput/soapysdrinput.cpp +++ b/plugins/samplesource/soapysdrinput/soapysdrinput.cpp @@ -42,6 +42,7 @@ SoapySDRInput::SoapySDRInput(DeviceSourceAPI *deviceAPI) : { openDevice(); initGainSettings(m_settings); + initStreamArgSettings(m_settings); m_fileSink = new FileRecord(QString("test_%1.sdriq").arg(m_deviceAPI->getDeviceUID())); m_deviceAPI->addSink(m_fileSink); @@ -1046,6 +1047,32 @@ bool SoapySDRInput::applySettings(const SoapySDRInputSettings& settings, bool fo } } + for (const auto &oname : m_settings.m_streamArgSettings.keys()) + { + auto nvalue = settings.m_streamArgSettings.find(oname); + + if (nvalue != settings.m_streamArgSettings.end() && ((m_settings.m_streamArgSettings[oname] != *nvalue) || force)) + { + if (dev != 0) + { + try + { + dev->writeSetting(SOAPY_SDR_RX, requestedChannel, oname.toStdString(), nvalue->toString().toStdString()); + qDebug("SoapySDRInput::applySettings: stream argument %s set to %s", + oname.toStdString().c_str(), nvalue->toString().toStdString().c_str()); + individualGainsChanged = true; + } + catch (const std::exception &ex) + { + qCritical("SoapySDRInput::applySettings: cannot set stream argument %s to %s: %s", + oname.toStdString().c_str(), nvalue->toString().toStdString().c_str(), ex.what()); + } + } + + m_settings.m_streamArgSettings[oname] = *nvalue; + } + } + if (forwardChangeOwnDSP) { int sampleRate = settings.m_devSampleRate/(1<key.c_str())); m_streamArgsGUIs.push_back(gui); - connect(gui, SIGNAL(valueChanged(QString, value)), this, SLOT(streamArgChanged(QString, QVariant))); + connect(gui, SIGNAL(valueChanged(QString, QVariant)), this, SLOT(streamArgChanged(QString, QVariant))); } }