diff --git a/plugins/samplesink/soapysdroutput/soapysdroutput.cpp b/plugins/samplesink/soapysdroutput/soapysdroutput.cpp index a821007b8..9e56248a6 100644 --- a/plugins/samplesink/soapysdroutput/soapysdroutput.cpp +++ b/plugins/samplesink/soapysdroutput/soapysdroutput.cpp @@ -1281,8 +1281,8 @@ int SoapySDROutput::webapiSettingsPutPatch( { auto ovalue = settings.m_tunableElements.find(*itArg->getKey()); - if ((ovalue != settings.m_tunableElements.end()) && (m_settings.m_tunableElements[*itArg->getKey()] != *ovalue)) { - m_settings.m_tunableElements[*itArg->getKey()] = *ovalue; + if ((ovalue != settings.m_tunableElements.end()) && (atof(itArg->getValueString()->toStdString().c_str()) != *ovalue)) { + m_settings.m_tunableElements[*itArg->getKey()] = atof(itArg->getValueString()->toStdString().c_str()); } } } @@ -1299,8 +1299,8 @@ int SoapySDROutput::webapiSettingsPutPatch( { auto ovalue = settings.m_individualGains.find(*itArg->getKey()); - if ((ovalue != settings.m_individualGains.end()) && (m_settings.m_individualGains[*itArg->getKey()] != *ovalue)) { - m_settings.m_individualGains[*itArg->getKey()] = *ovalue; + if ((ovalue != settings.m_individualGains.end()) && (atof(itArg->getValueString()->toStdString().c_str()) != *ovalue)) { + m_settings.m_individualGains[*itArg->getKey()] = atof(itArg->getValueString()->toStdString().c_str()); } } } @@ -1331,10 +1331,10 @@ int SoapySDROutput::webapiSettingsPutPatch( for (const auto itArg : *streamArgSettings) { - auto ovalue = settings.m_streamArgSettings.find(*itArg->getKey()); + QMap::iterator itSettings = settings.m_streamArgSettings.find(*itArg->getKey()); - if ((ovalue != settings.m_streamArgSettings.end()) && (m_settings.m_streamArgSettings[*itArg->getKey()] != *ovalue)) { - m_settings.m_streamArgSettings[*itArg->getKey()] = *ovalue; + if (itSettings != settings.m_streamArgSettings.end()) { + itSettings.value() = webapiVariantFromArgValue(itArg); } } } @@ -1345,10 +1345,10 @@ int SoapySDROutput::webapiSettingsPutPatch( for (const auto itArg : *deviceArgSettings) { - auto ovalue = settings.m_deviceArgSettings.find(*itArg->getKey()); + QMap::iterator itSettings = settings.m_deviceArgSettings.find(*itArg->getKey()); - if ((ovalue != settings.m_deviceArgSettings.end()) && (m_settings.m_deviceArgSettings[*itArg->getKey()] != *ovalue)) { - m_settings.m_deviceArgSettings[*itArg->getKey()] = *ovalue; + if (itSettings != settings.m_deviceArgSettings.end()) { + itSettings.value() = webapiVariantFromArgValue(itArg); } } } diff --git a/plugins/samplesink/soapysdroutput/soapysdroutput.h b/plugins/samplesink/soapysdroutput/soapysdroutput.h index df2945549..0facbc805 100644 --- a/plugins/samplesink/soapysdroutput/soapysdroutput.h +++ b/plugins/samplesink/soapysdroutput/soapysdroutput.h @@ -191,6 +191,7 @@ private: void updateGains(SoapySDR::Device *dev, int requestedChannel, SoapySDROutputSettings& settings); void webapiFormatDeviceSettings(SWGSDRangel::SWGDeviceSettings& response, const SoapySDROutputSettings& settings); void webapiFormatDeviceReport(SWGSDRangel::SWGDeviceReport& response); + QVariant webapiVariantFromArgValue(SWGSDRangel::SWGArgValue *argValue); void webapiFormatArgValue(const QVariant& v, SWGSDRangel::SWGArgValue *argValue); void webapiFormatArgInfo(const SoapySDR::ArgInfo& arg, SWGSDRangel::SWGArgInfo *argInfo); }; diff --git a/plugins/samplesource/soapysdrinput/soapysdrinput.cpp b/plugins/samplesource/soapysdrinput/soapysdrinput.cpp index 2942dec7f..5d0d96b03 100644 --- a/plugins/samplesource/soapysdrinput/soapysdrinput.cpp +++ b/plugins/samplesource/soapysdrinput/soapysdrinput.cpp @@ -1345,8 +1345,8 @@ int SoapySDRInput::webapiSettingsPutPatch( { auto ovalue = settings.m_tunableElements.find(*itArg->getKey()); - if ((ovalue != settings.m_tunableElements.end()) && (m_settings.m_tunableElements[*itArg->getKey()] != *ovalue)) { - m_settings.m_tunableElements[*itArg->getKey()] = *ovalue; + if ((ovalue != settings.m_tunableElements.end()) && (atof(itArg->getValueString()->toStdString().c_str()) != *ovalue)) { + m_settings.m_tunableElements[*itArg->getKey()] = atof(itArg->getValueString()->toStdString().c_str()); } } } @@ -1363,8 +1363,8 @@ int SoapySDRInput::webapiSettingsPutPatch( { auto ovalue = settings.m_individualGains.find(*itArg->getKey()); - if ((ovalue != settings.m_individualGains.end()) && (m_settings.m_individualGains[*itArg->getKey()] != *ovalue)) { - m_settings.m_individualGains[*itArg->getKey()] = *ovalue; + if ((ovalue != settings.m_individualGains.end()) && (atof(itArg->getValueString()->toStdString().c_str()) != *ovalue)) { + m_settings.m_individualGains[*itArg->getKey()] = atof(itArg->getValueString()->toStdString().c_str()); } } } @@ -1395,10 +1395,10 @@ int SoapySDRInput::webapiSettingsPutPatch( for (const auto itArg : *streamArgSettings) { - auto ovalue = settings.m_streamArgSettings.find(*itArg->getKey()); + QMap::iterator itSettings = settings.m_streamArgSettings.find(*itArg->getKey()); - if ((ovalue != settings.m_streamArgSettings.end()) && (m_settings.m_streamArgSettings[*itArg->getKey()] != *ovalue)) { - m_settings.m_streamArgSettings[*itArg->getKey()] = *ovalue; + if (itSettings != settings.m_streamArgSettings.end()) { + itSettings.value() = webapiVariantFromArgValue(itArg); } } } @@ -1409,10 +1409,10 @@ int SoapySDRInput::webapiSettingsPutPatch( for (const auto itArg : *deviceArgSettings) { - auto ovalue = settings.m_deviceArgSettings.find(*itArg->getKey()); + QMap::iterator itSettings = settings.m_deviceArgSettings.find(*itArg->getKey()); - if ((ovalue != settings.m_deviceArgSettings.end()) && (m_settings.m_deviceArgSettings[*itArg->getKey()] != *ovalue)) { - m_settings.m_deviceArgSettings[*itArg->getKey()] = *ovalue; + if (itSettings != settings.m_deviceArgSettings.end()) { + itSettings.value() = webapiVariantFromArgValue(itArg); } } } @@ -1680,6 +1680,19 @@ void SoapySDRInput::webapiFormatDeviceReport(SWGSDRangel::SWGDeviceReport& respo } } +QVariant SoapySDRInput::webapiVariantFromArgValue(SWGSDRangel::SWGArgValue *argValue) +{ + if (*argValue->getValueType() == "bool") { + return QVariant((bool) (*argValue->getValueString() == "1")); + } else if (*argValue->getValueType() == "int") { + return QVariant((int) (atoi(argValue->getValueString()->toStdString().c_str()))); + } else if (*argValue->getValueType() == "float") { + return QVariant((double) (atof(argValue->getValueString()->toStdString().c_str()))); + } else { + return QVariant(QString(*argValue->getValueString())); + } +} + void SoapySDRInput::webapiFormatArgValue(const QVariant& v, SWGSDRangel::SWGArgValue *argValue) { if (v.type() == QVariant::Bool) diff --git a/plugins/samplesource/soapysdrinput/soapysdrinput.h b/plugins/samplesource/soapysdrinput/soapysdrinput.h index 6249e4d3a..c7aa959a5 100644 --- a/plugins/samplesource/soapysdrinput/soapysdrinput.h +++ b/plugins/samplesource/soapysdrinput/soapysdrinput.h @@ -214,6 +214,7 @@ private: void updateGains(SoapySDR::Device *dev, int requestedChannel, SoapySDRInputSettings& settings); void webapiFormatDeviceSettings(SWGSDRangel::SWGDeviceSettings& response, const SoapySDRInputSettings& settings); void webapiFormatDeviceReport(SWGSDRangel::SWGDeviceReport& response); + QVariant webapiVariantFromArgValue(SWGSDRangel::SWGArgValue *argValue); void webapiFormatArgValue(const QVariant& v, SWGSDRangel::SWGArgValue *argValue); void webapiFormatArgInfo(const SoapySDR::ArgInfo& arg, SWGSDRangel::SWGArgInfo *argInfo); };