diff --git a/plugins/channelrx/demodnfm/nfmdemod.cpp b/plugins/channelrx/demodnfm/nfmdemod.cpp index a53b5673e..eaa51b01b 100644 --- a/plugins/channelrx/demodnfm/nfmdemod.cpp +++ b/plugins/channelrx/demodnfm/nfmdemod.cpp @@ -361,6 +361,8 @@ bool NFMDemod::handleMessage(const Message& cmd) settings.m_inputFrequencyOffset = m_settings.m_inputFrequencyOffset; qDebug() << "NFMDemod::handleMessage: MsgConfigureNFMDemod:" + << " m_absoluteFrequencyOffset: " << m_absoluteFrequencyOffset + << " m_inputFrequencyOffset: " << settings.m_inputFrequencyOffset << " m_rfBandwidth: " << settings.m_rfBandwidth << " m_afBandwidth: " << settings.m_afBandwidth << " m_fmDeviation: " << settings.m_fmDeviation @@ -486,51 +488,84 @@ int NFMDemod::webapiSettingsGet( QString& errorMessage __attribute__((unused))) { response.setNfmDemodSettings(new SWGSDRangel::SWGNFMDemodSettings()); - response.getNfmDemodSettings()->setAfBandwidth(m_settings.m_afBandwidth); - response.getNfmDemodSettings()->setAudioMute(m_settings.m_audioMute ? 1 : 0); - response.getNfmDemodSettings()->setAudioSampleRate(m_settings.m_audioSampleRate); - response.getNfmDemodSettings()->setCopyAudioToUdp(m_settings.m_copyAudioToUDP ? 1 : 0); - response.getNfmDemodSettings()->setCtcssIndex(m_settings.m_ctcssIndex); - response.getNfmDemodSettings()->setCtcssOn(m_settings.m_ctcssOn ? 1 : 0); - response.getNfmDemodSettings()->setDeltaSquelch(m_settings.m_deltaSquelch ? 1 : 0); - response.getNfmDemodSettings()->setFmDeviation(m_settings.m_fmDeviation); - response.getNfmDemodSettings()->setInputFrequencyOffset(m_settings.m_inputFrequencyOffset); - response.getNfmDemodSettings()->setInputSampleRate(m_settings.m_inputSampleRate); - response.getNfmDemodSettings()->setRfBandwidth(m_settings.m_rfBandwidth); - response.getNfmDemodSettings()->setRgbColor(m_settings.m_rgbColor); - response.getNfmDemodSettings()->setSquelch(m_settings.m_squelch); - response.getNfmDemodSettings()->setSquelchGate(m_settings.m_squelchGate); - *response.getNfmDemodSettings()->getTitle() = m_settings.m_title; - *response.getNfmDemodSettings()->getUdpAddress() = m_settings.m_udpAddress; - response.getNfmDemodSettings()->setUdpPort(m_settings.m_udpPort); - response.getNfmDemodSettings()->setVolume(m_settings.m_volume); + NFMDemodSettings settings = m_settings; + settings.m_inputFrequencyOffset = m_absoluteFrequencyOffset; + webapiFormatChannelSettings(response, settings); return 200; } int NFMDemod::webapiSettingsPutPatch( bool force, + const QStringList& channelSettingsKeys, SWGSDRangel::SWGChannelSettings& response, QString& errorMessage __attribute__((unused))) { - NFMDemodSettings settings; - settings.m_afBandwidth = response.getNfmDemodSettings()->getAfBandwidth(); - settings.m_audioMute = response.getNfmDemodSettings()->getAudioMute() != 0; - settings.m_audioSampleRate = response.getNfmDemodSettings()->getAudioSampleRate(); - settings.m_copyAudioToUDP = response.getNfmDemodSettings()->getCopyAudioToUdp() != 0; - settings.m_ctcssIndex = response.getNfmDemodSettings()->getCtcssIndex(); - settings.m_ctcssOn = response.getNfmDemodSettings()->getCtcssOn() != 0; - settings.m_deltaSquelch = response.getNfmDemodSettings()->getDeltaSquelch() != 0; - settings.m_fmDeviation = response.getNfmDemodSettings()->getFmDeviation(); - settings.m_inputFrequencyOffset = response.getNfmDemodSettings()->getInputFrequencyOffset(); - settings.m_inputSampleRate = response.getNfmDemodSettings()->getInputSampleRate(); - settings.m_rfBandwidth = response.getNfmDemodSettings()->getRfBandwidth(); - settings.m_rgbColor = response.getNfmDemodSettings()->getRgbColor(); - settings.m_squelch = response.getNfmDemodSettings()->getSquelch(); - settings.m_squelchGate = response.getNfmDemodSettings()->getSquelchGate(); - settings.m_title = *response.getNfmDemodSettings()->getTitle(); - settings.m_udpAddress = *response.getNfmDemodSettings()->getUdpAddress(); - settings.m_udpPort = response.getNfmDemodSettings()->getUdpPort(); - settings.m_volume = response.getNfmDemodSettings()->getVolume(); + NFMDemodSettings settings = m_settings; + bool frequencyOffsetChanged; + + if (channelSettingsKeys.contains("afBandwidth")) { + settings.m_afBandwidth = response.getNfmDemodSettings()->getAfBandwidth(); + } + if (channelSettingsKeys.contains("audioMute")) { + settings.m_audioMute = response.getNfmDemodSettings()->getAudioMute() != 0; + } + if (channelSettingsKeys.contains("audioSampleRate")) { + settings.m_audioSampleRate = response.getNfmDemodSettings()->getAudioSampleRate(); + } + if (channelSettingsKeys.contains("copyAudioToUDP")) { + settings.m_copyAudioToUDP = response.getNfmDemodSettings()->getCopyAudioToUdp() != 0; + } + if (channelSettingsKeys.contains("ctcssIndex")) { + settings.m_ctcssIndex = response.getNfmDemodSettings()->getCtcssIndex(); + } + if (channelSettingsKeys.contains("ctcssOn")) { + settings.m_ctcssOn = response.getNfmDemodSettings()->getCtcssOn() != 0; + } + if (channelSettingsKeys.contains("deltaSquelch")) { + settings.m_deltaSquelch = response.getNfmDemodSettings()->getDeltaSquelch() != 0; + } + if (channelSettingsKeys.contains("fmDeviation")) { + settings.m_fmDeviation = response.getNfmDemodSettings()->getFmDeviation(); + } + if (channelSettingsKeys.contains("inputFrequencyOffset")) + { + settings.m_inputFrequencyOffset = response.getNfmDemodSettings()->getInputFrequencyOffset(); + frequencyOffsetChanged = true; + } +// if (channelSettingsKeys.contains("inputSampleRate")) { +// settings.m_inputSampleRate = response.getNfmDemodSettings()->getInputSampleRate(); +// } + if (channelSettingsKeys.contains("rfBandwidth")) { + settings.m_rfBandwidth = response.getNfmDemodSettings()->getRfBandwidth(); + } + if (channelSettingsKeys.contains("rgbColor")) { + settings.m_rgbColor = response.getNfmDemodSettings()->getRgbColor(); + } + if (channelSettingsKeys.contains("squelch")) { + settings.m_squelch = response.getNfmDemodSettings()->getSquelch(); + } + if (channelSettingsKeys.contains("squelchGate")) { + settings.m_squelchGate = response.getNfmDemodSettings()->getSquelchGate(); + } + if (channelSettingsKeys.contains("title")) { + settings.m_title = *response.getNfmDemodSettings()->getTitle(); + } + if (channelSettingsKeys.contains("udpAddress")) { + settings.m_udpAddress = *response.getNfmDemodSettings()->getUdpAddress(); + } + if (channelSettingsKeys.contains("udpPort")) { + settings.m_udpPort = response.getNfmDemodSettings()->getUdpPort(); + } + if (channelSettingsKeys.contains("volume")) { + settings.m_volume = response.getNfmDemodSettings()->getVolume(); + } + + if (frequencyOffsetChanged) + { + MsgConfigureChannelizer* channelConfigMsg = MsgConfigureChannelizer::create( + 48000, settings.m_inputFrequencyOffset); + m_inputMessageQueue.push(channelConfigMsg); + } MsgConfigureNFMDemod *msg = MsgConfigureNFMDemod::create(settings, force); m_inputMessageQueue.push(msg); @@ -541,5 +576,40 @@ int NFMDemod::webapiSettingsPutPatch( m_guiMessageQueue->push(msgToGUI); } + webapiFormatChannelSettings(response, settings); + return 200; } + +void NFMDemod::webapiFormatChannelSettings(SWGSDRangel::SWGChannelSettings& response, const NFMDemodSettings& settings) +{ + response.getNfmDemodSettings()->setAfBandwidth(settings.m_afBandwidth); + response.getNfmDemodSettings()->setAudioMute(settings.m_audioMute ? 1 : 0); + response.getNfmDemodSettings()->setAudioSampleRate(settings.m_audioSampleRate); + response.getNfmDemodSettings()->setCopyAudioToUdp(settings.m_copyAudioToUDP ? 1 : 0); + response.getNfmDemodSettings()->setCtcssIndex(settings.m_ctcssIndex); + response.getNfmDemodSettings()->setCtcssOn(settings.m_ctcssOn ? 1 : 0); + response.getNfmDemodSettings()->setDeltaSquelch(settings.m_deltaSquelch ? 1 : 0); + response.getNfmDemodSettings()->setFmDeviation(settings.m_fmDeviation); + response.getNfmDemodSettings()->setInputFrequencyOffset(settings.m_inputFrequencyOffset); + response.getNfmDemodSettings()->setInputSampleRate(settings.m_inputSampleRate); + response.getNfmDemodSettings()->setRfBandwidth(settings.m_rfBandwidth); + response.getNfmDemodSettings()->setRgbColor(settings.m_rgbColor); + response.getNfmDemodSettings()->setSquelch(settings.m_squelch); + response.getNfmDemodSettings()->setSquelchGate(settings.m_squelchGate); + response.getNfmDemodSettings()->setUdpPort(settings.m_udpPort); + response.getNfmDemodSettings()->setVolume(settings.m_volume); + + if (response.getNfmDemodSettings()->getTitle()) { + *response.getNfmDemodSettings()->getTitle() = settings.m_title; + } else { + response.getNfmDemodSettings()->setTitle(new QString(settings.m_title)); + } + + if (response.getNfmDemodSettings()->getUdpAddress()) { + *response.getNfmDemodSettings()->getUdpAddress() = settings.m_udpAddress; + } else { + response.getNfmDemodSettings()->setUdpAddress(new QString(settings.m_udpAddress)); + } +} + diff --git a/plugins/channelrx/demodnfm/nfmdemod.h b/plugins/channelrx/demodnfm/nfmdemod.h index 03b382027..328bd9a84 100644 --- a/plugins/channelrx/demodnfm/nfmdemod.h +++ b/plugins/channelrx/demodnfm/nfmdemod.h @@ -132,6 +132,7 @@ public: virtual int webapiSettingsPutPatch( bool force, + const QStringList& channelSettingsKeys, SWGSDRangel::SWGChannelSettings& response, QString& errorMessage); @@ -221,6 +222,7 @@ private: // void apply(bool force = false); void applySettings(const NFMDemodSettings& settings, bool force = false); + void webapiFormatChannelSettings(SWGSDRangel::SWGChannelSettings& response, const NFMDemodSettings& settings); }; #endif // INCLUDE_NFMDEMOD_H diff --git a/plugins/channeltx/modnfm/nfmmod.cpp b/plugins/channeltx/modnfm/nfmmod.cpp index 8b56d167d..9d24a501c 100644 --- a/plugins/channeltx/modnfm/nfmmod.cpp +++ b/plugins/channeltx/modnfm/nfmmod.cpp @@ -532,6 +532,7 @@ int NFMMod::webapiSettingsGet( int NFMMod::webapiSettingsPutPatch( bool force, + const QStringList& channelSettingsKeys, SWGSDRangel::SWGChannelSettings& response, QString& errorMessage __attribute__((unused))) { diff --git a/plugins/channeltx/modnfm/nfmmod.h b/plugins/channeltx/modnfm/nfmmod.h index afbab4d3c..e93fc353a 100644 --- a/plugins/channeltx/modnfm/nfmmod.h +++ b/plugins/channeltx/modnfm/nfmmod.h @@ -254,6 +254,7 @@ public: virtual int webapiSettingsPutPatch( bool force, + const QStringList& channelSettingsKeys, SWGSDRangel::SWGChannelSettings& response, QString& errorMessage); diff --git a/sdrbase/channel/channelsinkapi.h b/sdrbase/channel/channelsinkapi.h index 8e9c7e1fa..9df096e2c 100644 --- a/sdrbase/channel/channelsinkapi.h +++ b/sdrbase/channel/channelsinkapi.h @@ -53,6 +53,7 @@ public: virtual int webapiSettingsPutPatch( bool force __attribute__((unused)), + const QStringList& channelSettingsKeys __attribute__((unused)), SWGSDRangel::SWGChannelSettings& response __attribute__((unused)), QString& errorMessage) { errorMessage = "Not implemented"; return 501; } diff --git a/sdrbase/channel/channelsourceapi.h b/sdrbase/channel/channelsourceapi.h index 54956d022..7ed402448 100644 --- a/sdrbase/channel/channelsourceapi.h +++ b/sdrbase/channel/channelsourceapi.h @@ -52,6 +52,7 @@ public: virtual int webapiSettingsPutPatch( bool force __attribute__((unused)), + const QStringList& channelSettingsKeys __attribute__((unused)), SWGSDRangel::SWGChannelSettings& response __attribute__((unused)), QString& errorMessage) { errorMessage = "Not implemented"; return 501; } diff --git a/sdrbase/webapi/webapiadapterinterface.h b/sdrbase/webapi/webapiadapterinterface.h index f90b6d1d9..25ddc1c0a 100644 --- a/sdrbase/webapi/webapiadapterinterface.h +++ b/sdrbase/webapi/webapiadapterinterface.h @@ -487,6 +487,7 @@ public: int deviceSetIndex __attribute__((unused)), int channelIndex __attribute__((unused)), bool force __attribute__((unused)), + const QStringList& channelSettingsKeys __attribute__((unused)), SWGSDRangel::SWGChannelSettings& response __attribute__((unused)), SWGSDRangel::SWGErrorResponse& error) { diff --git a/sdrbase/webapi/webapirequestmapper.cpp b/sdrbase/webapi/webapirequestmapper.cpp index 37c453791..ad74ab74e 100644 --- a/sdrbase/webapi/webapirequestmapper.cpp +++ b/sdrbase/webapi/webapirequestmapper.cpp @@ -1175,13 +1175,15 @@ void WebAPIRequestMapper::devicesetChannelSettingsService( { SWGSDRangel::SWGChannelSettings normalResponse; resetChannelSettings(normalResponse); + QStringList channelSettingsKeys; - if (validateChannelSettings(normalResponse, jsonObject)) + if (validateChannelSettings(normalResponse, jsonObject, channelSettingsKeys)) { int status = m_adapter->devicesetChannelSettingsPutPatch( deviceSetIndex, channelIndex, (request.getMethod() == "PUT"), // force settings on PUT + channelSettingsKeys, normalResponse, errorResponse); response.setStatus(status); @@ -1427,7 +1429,10 @@ bool WebAPIRequestMapper::validateDeviceSettings(SWGSDRangel::SWGDeviceSettings& } } -bool WebAPIRequestMapper::validateChannelSettings(SWGSDRangel::SWGChannelSettings& channelSettings, QJsonObject& jsonObject) +bool WebAPIRequestMapper::validateChannelSettings( + SWGSDRangel::SWGChannelSettings& channelSettings, + QJsonObject& jsonObject, + QStringList& channelSettingsKeys) { if (jsonObject.contains("tx")) { channelSettings.setTx(jsonObject["tx"].toInt()); @@ -1448,6 +1453,7 @@ bool WebAPIRequestMapper::validateChannelSettings(SWGSDRangel::SWGChannelSetting if (channelSettings.getTx() == 0) { QJsonObject nfmDemodSettingsJsonObject = jsonObject["NFMDemodSettings"].toObject(); + channelSettingsKeys = nfmDemodSettingsJsonObject.keys(); channelSettings.setNfmDemodSettings(new SWGSDRangel::SWGNFMDemodSettings()); channelSettings.getNfmDemodSettings()->fromJsonObject(nfmDemodSettingsJsonObject); return true; @@ -1461,6 +1467,7 @@ bool WebAPIRequestMapper::validateChannelSettings(SWGSDRangel::SWGChannelSetting if (channelSettings.getTx() != 0) { QJsonObject nfmModSettingsJsonObject = jsonObject["NFMModSettings"].toObject(); + channelSettingsKeys = nfmModSettingsJsonObject.keys(); channelSettings.setNfmModSettings(new SWGSDRangel::SWGNFMModSettings()); channelSettings.getNfmModSettings()->fromJsonObject(nfmModSettingsJsonObject); return true; diff --git a/sdrbase/webapi/webapirequestmapper.h b/sdrbase/webapi/webapirequestmapper.h index a85f7c0ce..39b24124e 100644 --- a/sdrbase/webapi/webapirequestmapper.h +++ b/sdrbase/webapi/webapirequestmapper.h @@ -71,7 +71,7 @@ private: bool validatePresetExport(SWGSDRangel::SWGPresetExport& presetExport); bool validateDeviceListItem(SWGSDRangel::SWGDeviceListItem& deviceListItem, QJsonObject& jsonObject); bool validateDeviceSettings(SWGSDRangel::SWGDeviceSettings& deviceSettings, QJsonObject& jsonObject); - bool validateChannelSettings(SWGSDRangel::SWGChannelSettings& deviceSettings, QJsonObject& jsonObject); + bool validateChannelSettings(SWGSDRangel::SWGChannelSettings& deviceSettings, QJsonObject& jsonObject, QStringList& channelSettingsKeys); bool parseJsonBody(QString& jsonStr, QJsonObject& jsonObject, qtwebapp::HttpResponse& response); diff --git a/sdrgui/webapi/webapiadaptergui.cpp b/sdrgui/webapi/webapiadaptergui.cpp index 45a7225eb..ee909f180 100644 --- a/sdrgui/webapi/webapiadaptergui.cpp +++ b/sdrgui/webapi/webapiadaptergui.cpp @@ -720,6 +720,7 @@ int WebAPIAdapterGUI::devicesetDeviceSettingsGet( } else { + error.init(); *error.getMessage() = QString("DeviceSet error"); return 500; } @@ -781,6 +782,7 @@ int WebAPIAdapterGUI::devicesetDeviceSettingsPutPatch( } else { + error.init(); *error.getMessage() = QString("DeviceSet error"); return 500; } @@ -815,6 +817,7 @@ int WebAPIAdapterGUI::devicesetDeviceRunGet( } else { + error.init(); *error.getMessage() = QString("DeviceSet error"); return 500; } @@ -849,6 +852,7 @@ int WebAPIAdapterGUI::devicesetDeviceRunPost( } else { + error.init(); *error.getMessage() = QString("DeviceSet error"); return 500; } @@ -883,6 +887,7 @@ int WebAPIAdapterGUI::devicesetDeviceRunDelete( } else { + error.init(); *error.getMessage() = QString("DeviceSet error"); return 500; } @@ -1102,6 +1107,7 @@ int WebAPIAdapterGUI::devicesetChannelSettingsGet( } else { + error.init(); *error.getMessage() = QString("DeviceSet error"); return 500; } @@ -1115,11 +1121,12 @@ int WebAPIAdapterGUI::devicesetChannelSettingsGet( } int WebAPIAdapterGUI::devicesetChannelSettingsPutPatch( - int deviceSetIndex, - int channelIndex, - bool force, - SWGSDRangel::SWGChannelSettings& response, - SWGSDRangel::SWGErrorResponse& error) + int deviceSetIndex, + int channelIndex, + bool force, + const QStringList& channelSettingsKeys, + SWGSDRangel::SWGChannelSettings& response, + SWGSDRangel::SWGErrorResponse& error) { if ((deviceSetIndex >= 0) && (deviceSetIndex < (int) m_mainWindow.m_deviceUIs.size())) { @@ -1142,7 +1149,7 @@ int WebAPIAdapterGUI::devicesetChannelSettingsPutPatch( if (channelType == *response.getChannelType()) { - return channelAPI->webapiSettingsPutPatch(force, response, *error.getMessage()); + return channelAPI->webapiSettingsPutPatch(force, channelSettingsKeys, response, *error.getMessage()); } else { @@ -1172,7 +1179,7 @@ int WebAPIAdapterGUI::devicesetChannelSettingsPutPatch( if (channelType == *response.getChannelType()) { - return channelAPI->webapiSettingsPutPatch(force, response, *error.getMessage()); + return channelAPI->webapiSettingsPutPatch(force, channelSettingsKeys, response, *error.getMessage()); } else { @@ -1187,6 +1194,7 @@ int WebAPIAdapterGUI::devicesetChannelSettingsPutPatch( } else { + error.init(); *error.getMessage() = QString("DeviceSet error"); return 500; } diff --git a/sdrgui/webapi/webapiadaptergui.h b/sdrgui/webapi/webapiadaptergui.h index 8dd8ff019..e1c6d44c8 100644 --- a/sdrgui/webapi/webapiadaptergui.h +++ b/sdrgui/webapi/webapiadaptergui.h @@ -168,6 +168,7 @@ public: int deviceSetIndex, int channelIndex, bool force, + const QStringList& channelSettingsKeys, SWGSDRangel::SWGChannelSettings& response, SWGSDRangel::SWGErrorResponse& error); diff --git a/sdrsrv/webapi/webapiadaptersrv.cpp b/sdrsrv/webapi/webapiadaptersrv.cpp index 1c40db15a..3b57e96db 100644 --- a/sdrsrv/webapi/webapiadaptersrv.cpp +++ b/sdrsrv/webapi/webapiadaptersrv.cpp @@ -1082,6 +1082,156 @@ int WebAPIAdapterSrv::devicesetChannelDelete( } } +int WebAPIAdapterSrv::devicesetChannelSettingsGet( + int deviceSetIndex, + int channelIndex, + SWGSDRangel::SWGChannelSettings& response, + SWGSDRangel::SWGErrorResponse& error) +{ + if ((deviceSetIndex >= 0) && (deviceSetIndex < (int) m_mainCore.m_deviceSets.size())) + { + DeviceSet *deviceSet = m_mainCore.m_deviceSets[deviceSetIndex]; + + if (deviceSet->m_deviceSourceEngine) // Rx + { + ChannelSinkAPI *channelAPI = deviceSet->m_deviceSourceAPI->getChanelAPIAt(channelIndex); + + if (channelAPI == 0) + { + error.init(); + *error.getMessage() = QString("There is no channel with index %1").arg(channelIndex); + return 404; + } + else + { + response.setChannelType(new QString()); + channelAPI->getIdentifier(*response.getChannelType()); + response.setTx(0); + return channelAPI->webapiSettingsGet(response, *error.getMessage()); + } + } + else if (deviceSet->m_deviceSinkEngine) // Tx + { + ChannelSourceAPI *channelAPI = deviceSet->m_deviceSinkAPI->getChanelAPIAt(channelIndex); + + if (channelAPI == 0) + { + error.init(); + *error.getMessage() = QString("There is no channel with index %1").arg(channelIndex); + return 404; + } + else + { + response.setChannelType(new QString()); + channelAPI->getIdentifier(*response.getChannelType()); + response.setTx(1); + return channelAPI->webapiSettingsGet(response, *error.getMessage()); + } + } + else + { + error.init(); + *error.getMessage() = QString("DeviceSet error"); + return 500; + } + } + else + { + error.init(); + *error.getMessage() = QString("There is no device set with index %1").arg(deviceSetIndex); + return 404; + } +} + +int WebAPIAdapterSrv::devicesetChannelSettingsPutPatch( + int deviceSetIndex, + int channelIndex, + bool force, + const QStringList& channelSettingsKeys, + SWGSDRangel::SWGChannelSettings& response, + SWGSDRangel::SWGErrorResponse& error) +{ + if ((deviceSetIndex >= 0) && (deviceSetIndex < (int) m_mainCore.m_deviceSets.size())) + { + DeviceSet *deviceSet = m_mainCore.m_deviceSets[deviceSetIndex]; + + if (deviceSet->m_deviceSourceEngine) // Rx + { + ChannelSinkAPI *channelAPI = deviceSet->m_deviceSourceAPI->getChanelAPIAt(channelIndex); + + if (channelAPI == 0) + { + error.init(); + *error.getMessage() = QString("There is no channel with index %1").arg(channelIndex); + return 404; + } + else + { + QString channelType; + channelAPI->getIdentifier(channelType); + + if (channelType == *response.getChannelType()) + { + return channelAPI->webapiSettingsPutPatch(force, channelSettingsKeys, response, *error.getMessage()); + } + else + { + error.init(); + *error.getMessage() = QString("There is no channel type %1 at index %2. Found %3.") + .arg(*response.getChannelType()) + .arg(channelIndex) + .arg(channelType); + return 404; + } + } + } + else if (deviceSet->m_deviceSinkEngine) // Tx + { + ChannelSourceAPI *channelAPI = deviceSet->m_deviceSinkAPI->getChanelAPIAt(channelIndex); + + if (channelAPI == 0) + { + error.init(); + *error.getMessage() = QString("There is no channel with index %1").arg(channelIndex); + return 404; + } + else + { + QString channelType; + channelAPI->getIdentifier(channelType); + + if (channelType == *response.getChannelType()) + { + return channelAPI->webapiSettingsPutPatch(force, channelSettingsKeys, response, *error.getMessage()); + } + else + { + error.init(); + *error.getMessage() = QString("There is no channel type %1 at index %2. Found %3.") + .arg(*response.getChannelType()) + .arg(channelIndex) + .arg(channelType); + return 404; + } + } + } + else + { + error.init(); + *error.getMessage() = QString("DeviceSet error"); + return 500; + } + } + else + { + error.init(); + *error.getMessage() = QString("There is no device set with index %1").arg(deviceSetIndex); + + return 404; + } + +} + void WebAPIAdapterSrv::getDeviceSetList(SWGSDRangel::SWGDeviceSetList* deviceSetList) { deviceSetList->init(); diff --git a/sdrsrv/webapi/webapiadaptersrv.h b/sdrsrv/webapi/webapiadaptersrv.h index b8291bb83..2369e46c1 100644 --- a/sdrsrv/webapi/webapiadaptersrv.h +++ b/sdrsrv/webapi/webapiadaptersrv.h @@ -158,6 +158,20 @@ public: SWGSDRangel::SWGSuccessResponse& response, SWGSDRangel::SWGErrorResponse& error); + virtual int devicesetChannelSettingsGet( + int deviceSetIndex, + int channelIndex, + SWGSDRangel::SWGChannelSettings& response, + SWGSDRangel::SWGErrorResponse& error); + + virtual int devicesetChannelSettingsPutPatch( + int deviceSetIndex, + int channelIndex, + bool force, + const QStringList& channelSettingsKeys, + SWGSDRangel::SWGChannelSettings& response, + SWGSDRangel::SWGErrorResponse& error); + private: MainCore& m_mainCore;