From ccffb5101de6e6814b4b30a4a7c7030614d79cc2 Mon Sep 17 00:00:00 2001 From: f4exb Date: Wed, 27 Dec 2017 01:46:33 +0100 Subject: [PATCH] Web API: /sdrangel/deviceset/{deviceSetIndex}/device/settings PUT, PATCH with all settings parameters optional --- .../limesdroutput/limesdroutput.cpp | 88 +++++++++---- .../samplesink/limesdroutput/limesdroutput.h | 2 + .../limesdrinput/limesdrinput.cpp | 124 ++++++++++++------ .../samplesource/limesdrinput/limesdrinput.h | 2 + plugins/samplesource/rtlsdr/rtlsdrinput.cpp | 88 +++++++++---- plugins/samplesource/rtlsdr/rtlsdrinput.h | 2 + sdrbase/dsp/devicesamplesink.h | 1 + sdrbase/dsp/devicesamplesource.h | 1 + sdrbase/webapi/webapiadapterinterface.h | 1 + sdrbase/webapi/webapirequestmapper.cpp | 13 +- sdrbase/webapi/webapirequestmapper.h | 2 +- sdrgui/webapi/webapiadaptergui.cpp | 5 +- sdrgui/webapi/webapiadaptergui.h | 1 + sdrsrv/webapi/webapiadaptersrv.cpp | 5 +- sdrsrv/webapi/webapiadaptersrv.h | 1 + 15 files changed, 236 insertions(+), 100 deletions(-) diff --git a/plugins/samplesink/limesdroutput/limesdroutput.cpp b/plugins/samplesink/limesdroutput/limesdroutput.cpp index eb03d9eba..1fafbcd83 100644 --- a/plugins/samplesink/limesdroutput/limesdroutput.cpp +++ b/plugins/samplesink/limesdroutput/limesdroutput.cpp @@ -1061,41 +1061,57 @@ int LimeSDROutput::webapiSettingsGet( QString& errorMessage __attribute__((unused))) { response.setLimeSdrOutputSettings(new SWGSDRangel::SWGLimeSdrOutputSettings()); - response.getLimeSdrOutputSettings()->setAntennaPath((int) m_settings.m_antennaPath); - response.getLimeSdrOutputSettings()->setCenterFrequency(m_settings.m_centerFrequency); - response.getLimeSdrOutputSettings()->setDevSampleRate(m_settings.m_devSampleRate); - response.getLimeSdrOutputSettings()->setExtClock(m_settings.m_extClock ? 1 : 0); - response.getLimeSdrOutputSettings()->setExtClockFreq(m_settings.m_extClockFreq); - response.getLimeSdrOutputSettings()->setGain(m_settings.m_gain); - response.getLimeSdrOutputSettings()->setLog2HardInterp(m_settings.m_log2HardInterp); - response.getLimeSdrOutputSettings()->setLog2SoftInterp(m_settings.m_log2SoftInterp); - response.getLimeSdrOutputSettings()->setLpfBw(m_settings.m_lpfBW); - response.getLimeSdrOutputSettings()->setLpfFirEnable(m_settings.m_lpfFIREnable ? 1 : 0); - response.getLimeSdrOutputSettings()->setLpfFirbw(m_settings.m_lpfFIRBW); - response.getLimeSdrOutputSettings()->setNcoEnable(m_settings.m_ncoEnable ? 1 : 0); - response.getLimeSdrOutputSettings()->setNcoFrequency(m_settings.m_ncoFrequency); + webapiFormatDeviceSettings(response, m_settings); return 200; } int LimeSDROutput::webapiSettingsPutPatch( bool force, + const QStringList& deviceSettingsKeys, SWGSDRangel::SWGDeviceSettings& response, // query + response QString& errorMessage __attribute__((unused))) { - LimeSDROutputSettings settings; - settings.m_antennaPath = (LimeSDROutputSettings::PathRFE) response.getLimeSdrOutputSettings()->getAntennaPath(); - settings.m_centerFrequency = response.getLimeSdrOutputSettings()->getCenterFrequency(); - settings.m_devSampleRate = response.getLimeSdrOutputSettings()->getDevSampleRate(); - settings.m_extClock = response.getLimeSdrOutputSettings()->getExtClock() != 0; - settings.m_extClockFreq = response.getLimeSdrOutputSettings()->getExtClockFreq(); - settings.m_gain = response.getLimeSdrOutputSettings()->getGain(); - settings.m_log2HardInterp = response.getLimeSdrOutputSettings()->getLog2HardInterp(); - settings.m_log2SoftInterp = response.getLimeSdrOutputSettings()->getLog2SoftInterp(); - settings.m_lpfBW = response.getLimeSdrOutputSettings()->getLpfBw(); - settings.m_lpfFIREnable = response.getLimeSdrOutputSettings()->getLpfFirEnable() != 0; - settings.m_lpfFIRBW = response.getLimeSdrOutputSettings()->getLpfFirbw(); - settings.m_ncoEnable = response.getLimeSdrOutputSettings()->getNcoEnable() != 0; - settings.m_ncoFrequency = response.getLimeSdrOutputSettings()->getNcoFrequency(); + LimeSDROutputSettings settings = m_settings; + + if (deviceSettingsKeys.contains("antennaPath")) { + settings.m_antennaPath = (LimeSDROutputSettings::PathRFE) response.getLimeSdrOutputSettings()->getAntennaPath(); + } + if (deviceSettingsKeys.contains("centerFrequency")) { + settings.m_centerFrequency = response.getLimeSdrOutputSettings()->getCenterFrequency(); + } + if (deviceSettingsKeys.contains("devSampleRate")) { + settings.m_devSampleRate = response.getLimeSdrOutputSettings()->getDevSampleRate(); + } + if (deviceSettingsKeys.contains("extClock")) { + settings.m_extClock = response.getLimeSdrOutputSettings()->getExtClock() != 0; + } + if (deviceSettingsKeys.contains("extClockFreq")) { + settings.m_extClockFreq = response.getLimeSdrOutputSettings()->getExtClockFreq(); + } + if (deviceSettingsKeys.contains("gain")) { + settings.m_gain = response.getLimeSdrOutputSettings()->getGain(); + } + if (deviceSettingsKeys.contains("log2HardInterp")) { + settings.m_log2HardInterp = response.getLimeSdrOutputSettings()->getLog2HardInterp(); + } + if (deviceSettingsKeys.contains("log2SoftInterp")) { + settings.m_log2SoftInterp = response.getLimeSdrOutputSettings()->getLog2SoftInterp(); + } + if (deviceSettingsKeys.contains("lpfBW")) { + settings.m_lpfBW = response.getLimeSdrOutputSettings()->getLpfBw(); + } + if (deviceSettingsKeys.contains("lpfFIREnable")) { + settings.m_lpfFIREnable = response.getLimeSdrOutputSettings()->getLpfFirEnable() != 0; + } + if (deviceSettingsKeys.contains("lpfFIRBW")) { + settings.m_lpfFIRBW = response.getLimeSdrOutputSettings()->getLpfFirbw(); + } + if (deviceSettingsKeys.contains("ncoEnable")) { + settings.m_ncoEnable = response.getLimeSdrOutputSettings()->getNcoEnable() != 0; + } + if (deviceSettingsKeys.contains("ncoFrequency")) { + settings.m_ncoFrequency = response.getLimeSdrOutputSettings()->getNcoFrequency(); + } MsgConfigureLimeSDR *msg = MsgConfigureLimeSDR::create(settings, force); m_inputMessageQueue.push(msg); @@ -1106,9 +1122,27 @@ int LimeSDROutput::webapiSettingsPutPatch( m_guiMessageQueue->push(msgToGUI); } + webapiFormatDeviceSettings(response, settings); return 200; } +void LimeSDROutput::webapiFormatDeviceSettings(SWGSDRangel::SWGDeviceSettings& response, const LimeSDROutputSettings& settings) +{ + response.getLimeSdrOutputSettings()->setAntennaPath((int) settings.m_antennaPath); + response.getLimeSdrOutputSettings()->setCenterFrequency(settings.m_centerFrequency); + response.getLimeSdrOutputSettings()->setDevSampleRate(settings.m_devSampleRate); + response.getLimeSdrOutputSettings()->setExtClock(settings.m_extClock ? 1 : 0); + response.getLimeSdrOutputSettings()->setExtClockFreq(settings.m_extClockFreq); + response.getLimeSdrOutputSettings()->setGain(settings.m_gain); + response.getLimeSdrOutputSettings()->setLog2HardInterp(settings.m_log2HardInterp); + response.getLimeSdrOutputSettings()->setLog2SoftInterp(settings.m_log2SoftInterp); + response.getLimeSdrOutputSettings()->setLpfBw(settings.m_lpfBW); + response.getLimeSdrOutputSettings()->setLpfFirEnable(settings.m_lpfFIREnable ? 1 : 0); + response.getLimeSdrOutputSettings()->setLpfFirbw(settings.m_lpfFIRBW); + response.getLimeSdrOutputSettings()->setNcoEnable(settings.m_ncoEnable ? 1 : 0); + response.getLimeSdrOutputSettings()->setNcoFrequency(settings.m_ncoFrequency); +} + int LimeSDROutput::webapiRunGet( SWGSDRangel::SWGDeviceState& response, QString& errorMessage __attribute__((unused))) diff --git a/plugins/samplesink/limesdroutput/limesdroutput.h b/plugins/samplesink/limesdroutput/limesdroutput.h index e80be20e7..5d7cfade2 100644 --- a/plugins/samplesink/limesdroutput/limesdroutput.h +++ b/plugins/samplesink/limesdroutput/limesdroutput.h @@ -205,6 +205,7 @@ public: virtual int webapiSettingsPutPatch( bool force, + const QStringList& deviceSettingsKeys, SWGSDRangel::SWGDeviceSettings& response, // query + response QString& errorMessage); @@ -244,6 +245,7 @@ private: void suspendTxBuddies(); void resumeTxBuddies(); bool applySettings(const LimeSDROutputSettings& settings, bool force = false, bool forceNCOFrequency = false); + void webapiFormatDeviceSettings(SWGSDRangel::SWGDeviceSettings& response, const LimeSDROutputSettings& settings); }; #endif /* PLUGINS_SAMPLESOURCE_LIMESDROUTPUT_LIMESDROUTPUT_H_ */ diff --git a/plugins/samplesource/limesdrinput/limesdrinput.cpp b/plugins/samplesource/limesdrinput/limesdrinput.cpp index 422ecc2d0..35986729d 100644 --- a/plugins/samplesource/limesdrinput/limesdrinput.cpp +++ b/plugins/samplesource/limesdrinput/limesdrinput.cpp @@ -1214,53 +1214,75 @@ int LimeSDRInput::webapiSettingsGet( QString& errorMessage __attribute__((unused))) { response.setLimeSdrInputSettings(new SWGSDRangel::SWGLimeSdrInputSettings()); - response.getLimeSdrInputSettings()->setAntennaPath((int) m_settings.m_antennaPath); - response.getLimeSdrInputSettings()->setCenterFrequency(m_settings.m_centerFrequency); - response.getLimeSdrInputSettings()->setDcBlock(m_settings.m_dcBlock ? 1 : 0); - response.getLimeSdrInputSettings()->setDevSampleRate(m_settings.m_devSampleRate); - response.getLimeSdrInputSettings()->setExtClock(m_settings.m_extClock ? 1 : 0); - response.getLimeSdrInputSettings()->setExtClockFreq(m_settings.m_extClockFreq); - response.getLimeSdrInputSettings()->setGain(m_settings.m_gain); - response.getLimeSdrInputSettings()->setGainMode((int) m_settings.m_gainMode); - response.getLimeSdrInputSettings()->setIqCorrection(m_settings.m_iqCorrection ? 1 : 0); - response.getLimeSdrInputSettings()->setLnaGain(m_settings.m_lnaGain); - response.getLimeSdrInputSettings()->setLog2HardDecim(m_settings.m_log2HardDecim); - response.getLimeSdrInputSettings()->setLog2SoftDecim(m_settings.m_log2SoftDecim); - response.getLimeSdrInputSettings()->setLpfBw(m_settings.m_lpfBW); - response.getLimeSdrInputSettings()->setLpfFirEnable(m_settings.m_lpfFIREnable ? 1 : 0); - response.getLimeSdrInputSettings()->setLpfFirbw(m_settings.m_lpfFIRBW); - response.getLimeSdrInputSettings()->setNcoEnable(m_settings.m_ncoEnable ? 1 : 0); - response.getLimeSdrInputSettings()->setNcoFrequency(m_settings.m_ncoFrequency); - response.getLimeSdrInputSettings()->setPgaGain(m_settings.m_pgaGain); - response.getLimeSdrInputSettings()->setTiaGain(m_settings.m_tiaGain); + webapiFormatDeviceSettings(response, m_settings); return 200; } int LimeSDRInput::webapiSettingsPutPatch( bool force, + const QStringList& deviceSettingsKeys, SWGSDRangel::SWGDeviceSettings& response, // query + response QString& errorMessage __attribute__((unused))) { - LimeSDRInputSettings settings; - settings.m_antennaPath = (LimeSDRInputSettings::PathRFE) response.getLimeSdrInputSettings()->getAntennaPath(); - settings.m_centerFrequency = response.getLimeSdrInputSettings()->getCenterFrequency(); - settings.m_dcBlock = response.getLimeSdrInputSettings()->getDcBlock() != 0; - settings.m_devSampleRate = response.getLimeSdrInputSettings()->getDevSampleRate(); - settings.m_extClock = response.getLimeSdrInputSettings()->getExtClock() != 0; - settings.m_extClockFreq = response.getLimeSdrInputSettings()->getExtClockFreq(); - settings.m_gain = response.getLimeSdrInputSettings()->getGain(); - settings.m_gainMode = (LimeSDRInputSettings::GainMode) response.getLimeSdrInputSettings()->getGainMode(); - settings.m_iqCorrection = response.getLimeSdrInputSettings()->getIqCorrection() != 0; - settings.m_lnaGain = response.getLimeSdrInputSettings()->getLnaGain(); - settings.m_log2HardDecim = response.getLimeSdrInputSettings()->getLog2HardDecim(); - settings.m_log2SoftDecim = response.getLimeSdrInputSettings()->getLog2SoftDecim(); - settings.m_lpfBW = response.getLimeSdrInputSettings()->getLpfBw(); - settings.m_lpfFIREnable = response.getLimeSdrInputSettings()->getLpfFirEnable() != 0; - settings.m_lpfFIRBW = response.getLimeSdrInputSettings()->getLpfFirbw(); - settings.m_ncoEnable = response.getLimeSdrInputSettings()->getNcoEnable() != 0; - settings.m_ncoFrequency = response.getLimeSdrInputSettings()->getNcoFrequency(); - settings.m_pgaGain = response.getLimeSdrInputSettings()->getPgaGain(); - settings.m_tiaGain = response.getLimeSdrInputSettings()->getTiaGain(); + LimeSDRInputSettings settings = m_settings; + + if (deviceSettingsKeys.contains("antennaPath")) { + settings.m_antennaPath = (LimeSDRInputSettings::PathRFE) response.getLimeSdrInputSettings()->getAntennaPath(); + } + if (deviceSettingsKeys.contains("centerFrequency")) { + settings.m_centerFrequency = response.getLimeSdrInputSettings()->getCenterFrequency(); + } + if (deviceSettingsKeys.contains("dcBlock")) { + settings.m_dcBlock = response.getLimeSdrInputSettings()->getDcBlock() != 0; + } + if (deviceSettingsKeys.contains("devSampleRate")) { + settings.m_devSampleRate = response.getLimeSdrInputSettings()->getDevSampleRate(); + } + if (deviceSettingsKeys.contains("extClock")) { + settings.m_extClock = response.getLimeSdrInputSettings()->getExtClock() != 0; + } + if (deviceSettingsKeys.contains("extClockFreq")) { + settings.m_extClockFreq = response.getLimeSdrInputSettings()->getExtClockFreq(); + } + if (deviceSettingsKeys.contains("gain")) { + settings.m_gain = response.getLimeSdrInputSettings()->getGain(); + } + if (deviceSettingsKeys.contains("gainMode")) { + settings.m_gainMode = (LimeSDRInputSettings::GainMode) response.getLimeSdrInputSettings()->getGainMode(); + } + if (deviceSettingsKeys.contains("iqCorrection")) { + settings.m_iqCorrection = response.getLimeSdrInputSettings()->getIqCorrection() != 0; + } + if (deviceSettingsKeys.contains("lnaGain")) { + settings.m_lnaGain = response.getLimeSdrInputSettings()->getLnaGain(); + } + if (deviceSettingsKeys.contains("log2HardDecim")) { + settings.m_log2HardDecim = response.getLimeSdrInputSettings()->getLog2HardDecim(); + } + if (deviceSettingsKeys.contains("log2SoftDecim")) { + settings.m_log2SoftDecim = response.getLimeSdrInputSettings()->getLog2SoftDecim(); + } + if (deviceSettingsKeys.contains("lpfBW")) { + settings.m_lpfBW = response.getLimeSdrInputSettings()->getLpfBw(); + } + if (deviceSettingsKeys.contains("lpfFIREnable")) { + settings.m_lpfFIREnable = response.getLimeSdrInputSettings()->getLpfFirEnable() != 0; + } + if (deviceSettingsKeys.contains("lpfFIRBW")) { + settings.m_lpfFIRBW = response.getLimeSdrInputSettings()->getLpfFirbw(); + } + if (deviceSettingsKeys.contains("ncoEnable")) { + settings.m_ncoEnable = response.getLimeSdrInputSettings()->getNcoEnable() != 0; + } + if (deviceSettingsKeys.contains("ncoFrequency")) { + settings.m_ncoFrequency = response.getLimeSdrInputSettings()->getNcoFrequency(); + } + if (deviceSettingsKeys.contains("pgaGain")) { + settings.m_pgaGain = response.getLimeSdrInputSettings()->getPgaGain(); + } + if (deviceSettingsKeys.contains("tiaGain")) { + settings.m_tiaGain = response.getLimeSdrInputSettings()->getTiaGain(); + } MsgConfigureLimeSDR *msg = MsgConfigureLimeSDR::create(settings, force); m_inputMessageQueue.push(msg); @@ -1271,9 +1293,33 @@ int LimeSDRInput::webapiSettingsPutPatch( m_guiMessageQueue->push(msgToGUI); } + webapiFormatDeviceSettings(response, settings); return 200; } +void LimeSDRInput::webapiFormatDeviceSettings(SWGSDRangel::SWGDeviceSettings& response, const LimeSDRInputSettings& settings) +{ + response.getLimeSdrInputSettings()->setAntennaPath((int) settings.m_antennaPath); + response.getLimeSdrInputSettings()->setCenterFrequency(settings.m_centerFrequency); + response.getLimeSdrInputSettings()->setDcBlock(settings.m_dcBlock ? 1 : 0); + response.getLimeSdrInputSettings()->setDevSampleRate(settings.m_devSampleRate); + response.getLimeSdrInputSettings()->setExtClock(settings.m_extClock ? 1 : 0); + response.getLimeSdrInputSettings()->setExtClockFreq(settings.m_extClockFreq); + response.getLimeSdrInputSettings()->setGain(settings.m_gain); + response.getLimeSdrInputSettings()->setGainMode((int) settings.m_gainMode); + response.getLimeSdrInputSettings()->setIqCorrection(settings.m_iqCorrection ? 1 : 0); + response.getLimeSdrInputSettings()->setLnaGain(settings.m_lnaGain); + response.getLimeSdrInputSettings()->setLog2HardDecim(settings.m_log2HardDecim); + response.getLimeSdrInputSettings()->setLog2SoftDecim(settings.m_log2SoftDecim); + response.getLimeSdrInputSettings()->setLpfBw(settings.m_lpfBW); + response.getLimeSdrInputSettings()->setLpfFirEnable(settings.m_lpfFIREnable ? 1 : 0); + response.getLimeSdrInputSettings()->setLpfFirbw(settings.m_lpfFIRBW); + response.getLimeSdrInputSettings()->setNcoEnable(settings.m_ncoEnable ? 1 : 0); + response.getLimeSdrInputSettings()->setNcoFrequency(settings.m_ncoFrequency); + response.getLimeSdrInputSettings()->setPgaGain(settings.m_pgaGain); + response.getLimeSdrInputSettings()->setTiaGain(settings.m_tiaGain); +} + int LimeSDRInput::webapiRunGet( SWGSDRangel::SWGDeviceState& response, QString& errorMessage __attribute__((unused))) diff --git a/plugins/samplesource/limesdrinput/limesdrinput.h b/plugins/samplesource/limesdrinput/limesdrinput.h index 8de2d601a..903048ac8 100644 --- a/plugins/samplesource/limesdrinput/limesdrinput.h +++ b/plugins/samplesource/limesdrinput/limesdrinput.h @@ -225,6 +225,7 @@ public: virtual int webapiSettingsPutPatch( bool force, + const QStringList& deviceSettingsKeys, SWGSDRangel::SWGDeviceSettings& response, // query + response QString& errorMessage); @@ -264,6 +265,7 @@ private: void suspendTxBuddies(); void resumeTxBuddies(); bool applySettings(const LimeSDRInputSettings& settings, bool force = false, bool forceNCOFrequency = false); + void webapiFormatDeviceSettings(SWGSDRangel::SWGDeviceSettings& response, const LimeSDRInputSettings& settings); }; #endif /* PLUGINS_SAMPLESOURCE_LIMESDRINPUT_LIMESDRINPUT_H_ */ diff --git a/plugins/samplesource/rtlsdr/rtlsdrinput.cpp b/plugins/samplesource/rtlsdr/rtlsdrinput.cpp index 68f9877e2..d08544994 100644 --- a/plugins/samplesource/rtlsdr/rtlsdrinput.cpp +++ b/plugins/samplesource/rtlsdr/rtlsdrinput.cpp @@ -495,41 +495,57 @@ int RTLSDRInput::webapiSettingsGet( QString& errorMessage __attribute__((unused))) { response.setRtlSdrSettings(new SWGSDRangel::SWGRtlSdrSettings()); - response.getRtlSdrSettings()->setAgc(m_settings.m_agc ? 1 : 0); - response.getRtlSdrSettings()->setCenterFrequency(m_settings.m_centerFrequency); - response.getRtlSdrSettings()->setDcBlock(m_settings.m_dcBlock ? 1 : 0); - response.getRtlSdrSettings()->setDevSampleRate(m_settings.m_devSampleRate); - response.getRtlSdrSettings()->setFcPos((int) m_settings.m_fcPos); - response.getRtlSdrSettings()->setGain(m_settings.m_gain); - response.getRtlSdrSettings()->setIqImbalance(m_settings.m_iqImbalance ? 1 : 0); - response.getRtlSdrSettings()->setLoPpmCorrection(m_settings.m_loPpmCorrection); - response.getRtlSdrSettings()->setLog2Decim(m_settings.m_log2Decim); - response.getRtlSdrSettings()->setLowSampleRate(m_settings.m_lowSampleRate ? 1 : 0); - response.getRtlSdrSettings()->setNoModMode(m_settings.m_noModMode ? 1 : 0); - response.getRtlSdrSettings()->setTransverterDeltaFrequency(m_settings.m_transverterDeltaFrequency); - response.getRtlSdrSettings()->setTransverterMode(m_settings.m_transverterMode ? 1 : 0); + webapiFormatDeviceSettings(response, m_settings); return 200; } int RTLSDRInput::webapiSettingsPutPatch( bool force, + const QStringList& deviceSettingsKeys, SWGSDRangel::SWGDeviceSettings& response, // query + response QString& errorMessage __attribute__((unused))) { - RTLSDRSettings settings; - settings.m_agc = response.getRtlSdrSettings()->getAgc() != 0; - settings.m_centerFrequency = response.getRtlSdrSettings()->getCenterFrequency(); - settings.m_dcBlock = response.getRtlSdrSettings()->getDcBlock() != 0; - settings.m_devSampleRate = response.getRtlSdrSettings()->getDevSampleRate(); - settings.m_fcPos = (RTLSDRSettings::fcPos_t) response.getRtlSdrSettings()->getFcPos(); - settings.m_gain = response.getRtlSdrSettings()->getGain(); - settings.m_iqImbalance = response.getRtlSdrSettings()->getIqImbalance() != 0; - settings.m_loPpmCorrection = response.getRtlSdrSettings()->getLoPpmCorrection(); - settings.m_log2Decim = response.getRtlSdrSettings()->getLog2Decim(); - settings.m_lowSampleRate = response.getRtlSdrSettings()->getLowSampleRate() != 0; - settings.m_noModMode = response.getRtlSdrSettings()->getNoModMode() != 0; - settings.m_transverterDeltaFrequency = response.getRtlSdrSettings()->getTransverterDeltaFrequency(); - settings.m_transverterMode = response.getRtlSdrSettings()->getTransverterMode() != 0; + RTLSDRSettings settings = m_settings; + + if (deviceSettingsKeys.contains("agc")) { + settings.m_agc = response.getRtlSdrSettings()->getAgc() != 0; + } + if (deviceSettingsKeys.contains("centerFrequency")) { + settings.m_centerFrequency = response.getRtlSdrSettings()->getCenterFrequency(); + } + if (deviceSettingsKeys.contains("dcBlock")) { + settings.m_dcBlock = response.getRtlSdrSettings()->getDcBlock() != 0; + } + if (deviceSettingsKeys.contains("devSampleRate")) { + settings.m_devSampleRate = response.getRtlSdrSettings()->getDevSampleRate(); + } + if (deviceSettingsKeys.contains("fcPos")) { + settings.m_fcPos = (RTLSDRSettings::fcPos_t) response.getRtlSdrSettings()->getFcPos(); + } + if (deviceSettingsKeys.contains("gain")) { + settings.m_gain = response.getRtlSdrSettings()->getGain(); + } + if (deviceSettingsKeys.contains("iqImbalance")) { + settings.m_iqImbalance = response.getRtlSdrSettings()->getIqImbalance() != 0; + } + if (deviceSettingsKeys.contains("loPpmCorrection")) { + settings.m_loPpmCorrection = response.getRtlSdrSettings()->getLoPpmCorrection(); + } + if (deviceSettingsKeys.contains("log2Decim")) { + settings.m_log2Decim = response.getRtlSdrSettings()->getLog2Decim(); + } + if (deviceSettingsKeys.contains("lowSampleRate")) { + settings.m_lowSampleRate = response.getRtlSdrSettings()->getLowSampleRate() != 0; + } + if (deviceSettingsKeys.contains("noModMode")) { + settings.m_noModMode = response.getRtlSdrSettings()->getNoModMode() != 0; + } + if (deviceSettingsKeys.contains("transverterDeltaFrequency")) { + settings.m_transverterDeltaFrequency = response.getRtlSdrSettings()->getTransverterDeltaFrequency(); + } + if (deviceSettingsKeys.contains("transverterMode")) { + settings.m_transverterMode = response.getRtlSdrSettings()->getTransverterMode() != 0; + } MsgConfigureRTLSDR *msg = MsgConfigureRTLSDR::create(settings, force); m_inputMessageQueue.push(msg); @@ -540,9 +556,27 @@ int RTLSDRInput::webapiSettingsPutPatch( m_guiMessageQueue->push(msgToGUI); } + webapiFormatDeviceSettings(response, settings); return 200; } +void RTLSDRInput::webapiFormatDeviceSettings(SWGSDRangel::SWGDeviceSettings& response, const RTLSDRSettings& settings) +{ + response.getRtlSdrSettings()->setAgc(settings.m_agc ? 1 : 0); + response.getRtlSdrSettings()->setCenterFrequency(settings.m_centerFrequency); + response.getRtlSdrSettings()->setDcBlock(settings.m_dcBlock ? 1 : 0); + response.getRtlSdrSettings()->setDevSampleRate(settings.m_devSampleRate); + response.getRtlSdrSettings()->setFcPos((int) settings.m_fcPos); + response.getRtlSdrSettings()->setGain(settings.m_gain); + response.getRtlSdrSettings()->setIqImbalance(settings.m_iqImbalance ? 1 : 0); + response.getRtlSdrSettings()->setLoPpmCorrection(settings.m_loPpmCorrection); + response.getRtlSdrSettings()->setLog2Decim(settings.m_log2Decim); + response.getRtlSdrSettings()->setLowSampleRate(settings.m_lowSampleRate ? 1 : 0); + response.getRtlSdrSettings()->setNoModMode(settings.m_noModMode ? 1 : 0); + response.getRtlSdrSettings()->setTransverterDeltaFrequency(settings.m_transverterDeltaFrequency); + response.getRtlSdrSettings()->setTransverterMode(settings.m_transverterMode ? 1 : 0); +} + int RTLSDRInput::webapiRunGet( SWGSDRangel::SWGDeviceState& response, QString& errorMessage __attribute__((unused))) diff --git a/plugins/samplesource/rtlsdr/rtlsdrinput.h b/plugins/samplesource/rtlsdr/rtlsdrinput.h index 429b84f8e..e7d6144f5 100644 --- a/plugins/samplesource/rtlsdr/rtlsdrinput.h +++ b/plugins/samplesource/rtlsdr/rtlsdrinput.h @@ -112,6 +112,7 @@ public: virtual int webapiSettingsPutPatch( bool force, + const QStringList& deviceSettingsKeys, SWGSDRangel::SWGDeviceSettings& response, // query + response QString& errorMessage); @@ -150,6 +151,7 @@ private: bool openDevice(); void closeDevice(); bool applySettings(const RTLSDRSettings& settings, bool force); + void webapiFormatDeviceSettings(SWGSDRangel::SWGDeviceSettings& response, const RTLSDRSettings& settings); }; #endif // INCLUDE_RTLSDRINPUT_H diff --git a/sdrbase/dsp/devicesamplesink.h b/sdrbase/dsp/devicesamplesink.h index 3c6685eea..0ba4ed9aa 100644 --- a/sdrbase/dsp/devicesamplesink.h +++ b/sdrbase/dsp/devicesamplesink.h @@ -55,6 +55,7 @@ public: virtual int webapiSettingsPutPatch( bool force __attribute__((unused)), //!< true to force settings = put + const QStringList& deviceSettingsKeys __attribute__((unused)), SWGSDRangel::SWGDeviceSettings& response __attribute__((unused)), QString& errorMessage) { errorMessage = "Not implemented"; return 501; } diff --git a/sdrbase/dsp/devicesamplesource.h b/sdrbase/dsp/devicesamplesource.h index 6ba02ca33..8e32a5fc9 100644 --- a/sdrbase/dsp/devicesamplesource.h +++ b/sdrbase/dsp/devicesamplesource.h @@ -55,6 +55,7 @@ public: virtual int webapiSettingsPutPatch( bool force __attribute__((unused)), //!< true to force settings = put + const QStringList& deviceSettingsKeys __attribute__((unused)), SWGSDRangel::SWGDeviceSettings& response __attribute__((unused)), QString& errorMessage) { errorMessage = "Not implemented"; return 501; } diff --git a/sdrbase/webapi/webapiadapterinterface.h b/sdrbase/webapi/webapiadapterinterface.h index 25ddc1c0a..537d86ab6 100644 --- a/sdrbase/webapi/webapiadapterinterface.h +++ b/sdrbase/webapi/webapiadapterinterface.h @@ -384,6 +384,7 @@ public: virtual int devicesetDeviceSettingsPutPatch( int deviceSetIndex __attribute__((unused)), bool force __attribute__((unused)), //!< true to force settings = put else patch + const QStringList& channelSettingsKeys __attribute__((unused)), SWGSDRangel::SWGDeviceSettings& response __attribute__((unused)), SWGSDRangel::SWGErrorResponse& error) { diff --git a/sdrbase/webapi/webapirequestmapper.cpp b/sdrbase/webapi/webapirequestmapper.cpp index 60bed0b36..310f248f6 100644 --- a/sdrbase/webapi/webapirequestmapper.cpp +++ b/sdrbase/webapi/webapirequestmapper.cpp @@ -892,12 +892,14 @@ void WebAPIRequestMapper::devicesetDeviceSettingsService(const std::string& inde { SWGSDRangel::SWGDeviceSettings normalResponse; resetDeviceSettings(normalResponse); + QStringList deviceSettingsKeys; - if (validateDeviceSettings(normalResponse, jsonObject)) + if (validateDeviceSettings(normalResponse, jsonObject, deviceSettingsKeys)) { int status = m_adapter->devicesetDeviceSettingsPutPatch( deviceSetIndex, (request.getMethod() == "PUT"), // force settings on PUT + deviceSettingsKeys, normalResponse, errorResponse); response.setStatus(status); @@ -1351,7 +1353,10 @@ bool WebAPIRequestMapper::validateDeviceListItem(SWGSDRangel::SWGDeviceListItem& return identified; } -bool WebAPIRequestMapper::validateDeviceSettings(SWGSDRangel::SWGDeviceSettings& deviceSettings, QJsonObject& jsonObject) +bool WebAPIRequestMapper::validateDeviceSettings( + SWGSDRangel::SWGDeviceSettings& deviceSettings, + QJsonObject& jsonObject, + QStringList& deviceSettingsKeys) { if (jsonObject.contains("tx")) { deviceSettings.setTx(jsonObject["tx"].toInt()); @@ -1372,6 +1377,7 @@ bool WebAPIRequestMapper::validateDeviceSettings(SWGSDRangel::SWGDeviceSettings& if (jsonObject.contains("fileSourceSettings") && jsonObject["fileSourceSettings"].isObject()) { QJsonObject fileSourceSettingsJsonObject = jsonObject["fileSourceSettings"].toObject(); + deviceSettingsKeys = fileSourceSettingsJsonObject.keys(); deviceSettings.setFileSourceSettings(new SWGSDRangel::SWGFileSourceSettings()); deviceSettings.getFileSourceSettings()->fromJsonObject(fileSourceSettingsJsonObject); return true; @@ -1386,6 +1392,7 @@ bool WebAPIRequestMapper::validateDeviceSettings(SWGSDRangel::SWGDeviceSettings& if (jsonObject.contains("rtlSdrSettings") && jsonObject["rtlSdrSettings"].isObject()) { QJsonObject rtlSdrSettingsJsonObject = jsonObject["rtlSdrSettings"].toObject(); + deviceSettingsKeys = rtlSdrSettingsJsonObject.keys(); deviceSettings.setRtlSdrSettings(new SWGSDRangel::SWGRtlSdrSettings()); deviceSettings.getRtlSdrSettings()->fromJsonObject(rtlSdrSettingsJsonObject); return true; @@ -1400,6 +1407,7 @@ bool WebAPIRequestMapper::validateDeviceSettings(SWGSDRangel::SWGDeviceSettings& if (jsonObject.contains("limeSdrInputSettings") && jsonObject["limeSdrInputSettings"].isObject()) { QJsonObject limeSdrInputSettingsJsonObject = jsonObject["limeSdrInputSettings"].toObject(); + deviceSettingsKeys = limeSdrInputSettingsJsonObject.keys(); deviceSettings.setLimeSdrInputSettings(new SWGSDRangel::SWGLimeSdrInputSettings()); deviceSettings.getLimeSdrInputSettings()->fromJsonObject(limeSdrInputSettingsJsonObject); return true; @@ -1414,6 +1422,7 @@ bool WebAPIRequestMapper::validateDeviceSettings(SWGSDRangel::SWGDeviceSettings& if (jsonObject.contains("limeSdrOutputSettings") && jsonObject["limeSdrOutputSettings"].isObject()) { QJsonObject limeSdrOutputSettingsJsonObject = jsonObject["limeSdrOutputSettings"].toObject(); + deviceSettingsKeys = limeSdrOutputSettingsJsonObject.keys(); deviceSettings.setLimeSdrOutputSettings(new SWGSDRangel::SWGLimeSdrOutputSettings()); deviceSettings.getLimeSdrOutputSettings()->fromJsonObject(limeSdrOutputSettingsJsonObject); return true; diff --git a/sdrbase/webapi/webapirequestmapper.h b/sdrbase/webapi/webapirequestmapper.h index cffb96b12..bca2bada1 100644 --- a/sdrbase/webapi/webapirequestmapper.h +++ b/sdrbase/webapi/webapirequestmapper.h @@ -70,7 +70,7 @@ private: bool validatePresetIdentifer(SWGSDRangel::SWGPresetIdentifier& presetIdentifier); bool validatePresetExport(SWGSDRangel::SWGPresetExport& presetExport); bool validateDeviceListItem(SWGSDRangel::SWGDeviceListItem& deviceListItem, QJsonObject& jsonObject); - bool validateDeviceSettings(SWGSDRangel::SWGDeviceSettings& deviceSettings, QJsonObject& jsonObject); + bool validateDeviceSettings(SWGSDRangel::SWGDeviceSettings& deviceSettings, QJsonObject& jsonObject, QStringList& deviceSettingsKeys); bool validateChannelSettings(SWGSDRangel::SWGChannelSettings& deviceSettings, QJsonObject& jsonObject, QStringList& channelSettingsKeys); void appendSettingsSubKeys( diff --git a/sdrgui/webapi/webapiadaptergui.cpp b/sdrgui/webapi/webapiadaptergui.cpp index ee909f180..f26bff9ec 100644 --- a/sdrgui/webapi/webapiadaptergui.cpp +++ b/sdrgui/webapi/webapiadaptergui.cpp @@ -737,6 +737,7 @@ int WebAPIAdapterGUI::devicesetDeviceSettingsGet( int WebAPIAdapterGUI::devicesetDeviceSettingsPutPatch( int deviceSetIndex, bool force, + const QStringList& deviceSettingsKeys, SWGSDRangel::SWGDeviceSettings& response, SWGSDRangel::SWGErrorResponse& error) { @@ -759,7 +760,7 @@ int WebAPIAdapterGUI::devicesetDeviceSettingsPutPatch( else { DeviceSampleSource *source = deviceSet->m_deviceSourceAPI->getSampleSource(); - return source->webapiSettingsPutPatch(force, response, *error.getMessage()); + return source->webapiSettingsPutPatch(force, deviceSettingsKeys, response, *error.getMessage()); } } else if (deviceSet->m_deviceSinkEngine) // Tx @@ -777,7 +778,7 @@ int WebAPIAdapterGUI::devicesetDeviceSettingsPutPatch( else { DeviceSampleSink *sink = deviceSet->m_deviceSinkAPI->getSampleSink(); - return sink->webapiSettingsPutPatch(force, response, *error.getMessage()); + return sink->webapiSettingsPutPatch(force, deviceSettingsKeys, response, *error.getMessage()); } } else diff --git a/sdrgui/webapi/webapiadaptergui.h b/sdrgui/webapi/webapiadaptergui.h index e1c6d44c8..cfb20265d 100644 --- a/sdrgui/webapi/webapiadaptergui.h +++ b/sdrgui/webapi/webapiadaptergui.h @@ -128,6 +128,7 @@ public: virtual int devicesetDeviceSettingsPutPatch( int deviceSetIndex, bool force, + const QStringList& deviceSettingsKeys, SWGSDRangel::SWGDeviceSettings& response, SWGSDRangel::SWGErrorResponse& error); diff --git a/sdrsrv/webapi/webapiadaptersrv.cpp b/sdrsrv/webapi/webapiadaptersrv.cpp index 3b57e96db..b01ab6d6f 100644 --- a/sdrsrv/webapi/webapiadaptersrv.cpp +++ b/sdrsrv/webapi/webapiadaptersrv.cpp @@ -866,6 +866,7 @@ int WebAPIAdapterSrv::devicesetDeviceSettingsGet( int WebAPIAdapterSrv::devicesetDeviceSettingsPutPatch( int deviceSetIndex, bool force, + const QStringList& deviceSettingsKeys, SWGSDRangel::SWGDeviceSettings& response, SWGSDRangel::SWGErrorResponse& error) { @@ -888,7 +889,7 @@ int WebAPIAdapterSrv::devicesetDeviceSettingsPutPatch( else { DeviceSampleSource *source = deviceSet->m_deviceSourceAPI->getSampleSource(); - return source->webapiSettingsPutPatch(force, response, *error.getMessage()); + return source->webapiSettingsPutPatch(force, deviceSettingsKeys, response, *error.getMessage()); } } else if (deviceSet->m_deviceSinkEngine) // Tx @@ -906,7 +907,7 @@ int WebAPIAdapterSrv::devicesetDeviceSettingsPutPatch( else { DeviceSampleSink *sink = deviceSet->m_deviceSinkAPI->getSampleSink(); - return sink->webapiSettingsPutPatch(force, response, *error.getMessage()); + return sink->webapiSettingsPutPatch(force, deviceSettingsKeys, response, *error.getMessage()); } } else diff --git a/sdrsrv/webapi/webapiadaptersrv.h b/sdrsrv/webapi/webapiadaptersrv.h index 2369e46c1..46ab59b70 100644 --- a/sdrsrv/webapi/webapiadaptersrv.h +++ b/sdrsrv/webapi/webapiadaptersrv.h @@ -143,6 +143,7 @@ public: virtual int devicesetDeviceSettingsPutPatch( int deviceSetIndex, bool force, + const QStringList& deviceSettingsKeys, SWGSDRangel::SWGDeviceSettings& response, SWGSDRangel::SWGErrorResponse& error);