From 1255784b7fdd772fa2e991037c3e606ba40f9b3d Mon Sep 17 00:00:00 2001 From: f4exb Date: Thu, 25 Jul 2019 13:57:24 +0200 Subject: [PATCH] PlutoSDR input: implement control of hardware DC and IQ corrections --- devices/plutosdr/deviceplutosdrbox.cpp | 16 ----- devices/plutosdr/deviceplutosdrbox.h | 1 - .../plutosdrinput/plutosdrinput.cpp | 51 +++++++++++++++ .../plutosdrinput/plutosdrinputgui.cpp | 22 +++++++ .../plutosdrinput/plutosdrinputgui.h | 3 + .../plutosdrinput/plutosdrinputsettings.cpp | 10 +++ .../plutosdrinput/plutosdrinputsettings.h | 3 + sdrbase/resources/webapi/doc/html2/index.html | 13 +++- .../webapi/doc/swagger/include/PlutoSdr.yaml | 6 ++ .../resources/webapi/doc/swagger/swagger.yaml | 2 +- .../api/swagger/include/PlutoSdr.yaml | 6 ++ swagger/sdrangel/api/swagger/swagger.yaml | 2 +- swagger/sdrangel/code/html2/index.html | 13 +++- .../code/qt5/client/SWGAMBEDevice.cpp | 2 +- .../sdrangel/code/qt5/client/SWGAMBEDevice.h | 2 +- .../code/qt5/client/SWGAMBEDevices.cpp | 2 +- .../sdrangel/code/qt5/client/SWGAMBEDevices.h | 2 +- .../code/qt5/client/SWGAMDemodReport.cpp | 2 +- .../code/qt5/client/SWGAMDemodReport.h | 2 +- .../code/qt5/client/SWGAMDemodSettings.cpp | 2 +- .../code/qt5/client/SWGAMDemodSettings.h | 2 +- .../code/qt5/client/SWGAMModReport.cpp | 2 +- .../sdrangel/code/qt5/client/SWGAMModReport.h | 2 +- .../code/qt5/client/SWGAMModSettings.cpp | 2 +- .../code/qt5/client/SWGAMModSettings.h | 2 +- .../code/qt5/client/SWGATVModReport.cpp | 2 +- .../code/qt5/client/SWGATVModReport.h | 2 +- .../code/qt5/client/SWGATVModSettings.cpp | 2 +- .../code/qt5/client/SWGATVModSettings.h | 2 +- .../code/qt5/client/SWGAirspyHFReport.cpp | 2 +- .../code/qt5/client/SWGAirspyHFReport.h | 2 +- .../code/qt5/client/SWGAirspyHFSettings.cpp | 2 +- .../code/qt5/client/SWGAirspyHFSettings.h | 2 +- .../code/qt5/client/SWGAirspyReport.cpp | 2 +- .../code/qt5/client/SWGAirspyReport.h | 2 +- .../code/qt5/client/SWGAirspySettings.cpp | 2 +- .../code/qt5/client/SWGAirspySettings.h | 2 +- .../sdrangel/code/qt5/client/SWGArgInfo.cpp | 2 +- swagger/sdrangel/code/qt5/client/SWGArgInfo.h | 2 +- .../sdrangel/code/qt5/client/SWGArgValue.cpp | 2 +- .../sdrangel/code/qt5/client/SWGArgValue.h | 2 +- .../code/qt5/client/SWGAudioDevices.cpp | 2 +- .../code/qt5/client/SWGAudioDevices.h | 2 +- .../code/qt5/client/SWGAudioInputDevice.cpp | 2 +- .../code/qt5/client/SWGAudioInputDevice.h | 2 +- .../code/qt5/client/SWGAudioOutputDevice.cpp | 2 +- .../code/qt5/client/SWGAudioOutputDevice.h | 2 +- .../code/qt5/client/SWGBFMDemodReport.cpp | 2 +- .../code/qt5/client/SWGBFMDemodReport.h | 2 +- .../code/qt5/client/SWGBFMDemodSettings.cpp | 2 +- .../code/qt5/client/SWGBFMDemodSettings.h | 2 +- .../sdrangel/code/qt5/client/SWGBandwidth.cpp | 2 +- .../sdrangel/code/qt5/client/SWGBandwidth.h | 2 +- .../qt5/client/SWGBladeRF1InputSettings.cpp | 2 +- .../qt5/client/SWGBladeRF1InputSettings.h | 2 +- .../qt5/client/SWGBladeRF1OutputSettings.cpp | 2 +- .../qt5/client/SWGBladeRF1OutputSettings.h | 2 +- .../qt5/client/SWGBladeRF2InputReport.cpp | 2 +- .../code/qt5/client/SWGBladeRF2InputReport.h | 2 +- .../qt5/client/SWGBladeRF2InputSettings.cpp | 2 +- .../qt5/client/SWGBladeRF2InputSettings.h | 2 +- .../qt5/client/SWGBladeRF2OutputReport.cpp | 2 +- .../code/qt5/client/SWGBladeRF2OutputReport.h | 2 +- .../qt5/client/SWGBladeRF2OutputSettings.cpp | 2 +- .../qt5/client/SWGBladeRF2OutputSettings.h | 2 +- .../code/qt5/client/SWGCWKeyerSettings.cpp | 2 +- .../code/qt5/client/SWGCWKeyerSettings.h | 2 +- .../sdrangel/code/qt5/client/SWGChannel.cpp | 2 +- swagger/sdrangel/code/qt5/client/SWGChannel.h | 2 +- .../code/qt5/client/SWGChannelListItem.cpp | 2 +- .../code/qt5/client/SWGChannelListItem.h | 2 +- .../code/qt5/client/SWGChannelReport.cpp | 2 +- .../code/qt5/client/SWGChannelReport.h | 2 +- .../code/qt5/client/SWGChannelSettings.cpp | 2 +- .../code/qt5/client/SWGChannelSettings.h | 2 +- .../code/qt5/client/SWGChannelsDetail.cpp | 2 +- .../code/qt5/client/SWGChannelsDetail.h | 2 +- .../sdrangel/code/qt5/client/SWGComplex.cpp | 2 +- swagger/sdrangel/code/qt5/client/SWGComplex.h | 2 +- .../code/qt5/client/SWGDSDDemodReport.cpp | 2 +- .../code/qt5/client/SWGDSDDemodReport.h | 2 +- .../code/qt5/client/SWGDSDDemodSettings.cpp | 2 +- .../code/qt5/client/SWGDSDDemodSettings.h | 2 +- .../code/qt5/client/SWGDVSerialDevice.cpp | 2 +- .../code/qt5/client/SWGDVSerialDevice.h | 2 +- .../code/qt5/client/SWGDVSerialDevices.cpp | 2 +- .../code/qt5/client/SWGDVSerialDevices.h | 2 +- .../code/qt5/client/SWGDeviceListItem.cpp | 2 +- .../code/qt5/client/SWGDeviceListItem.h | 2 +- .../code/qt5/client/SWGDeviceReport.cpp | 2 +- .../code/qt5/client/SWGDeviceReport.h | 2 +- .../sdrangel/code/qt5/client/SWGDeviceSet.cpp | 2 +- .../sdrangel/code/qt5/client/SWGDeviceSet.h | 2 +- .../code/qt5/client/SWGDeviceSetApi.cpp | 2 +- .../code/qt5/client/SWGDeviceSetApi.h | 2 +- .../code/qt5/client/SWGDeviceSetList.cpp | 2 +- .../code/qt5/client/SWGDeviceSetList.h | 2 +- .../code/qt5/client/SWGDeviceSettings.cpp | 2 +- .../code/qt5/client/SWGDeviceSettings.h | 2 +- .../code/qt5/client/SWGDeviceState.cpp | 2 +- .../sdrangel/code/qt5/client/SWGDeviceState.h | 2 +- .../code/qt5/client/SWGErrorResponse.cpp | 2 +- .../code/qt5/client/SWGErrorResponse.h | 2 +- .../code/qt5/client/SWGFCDProPlusSettings.cpp | 2 +- .../code/qt5/client/SWGFCDProPlusSettings.h | 2 +- .../code/qt5/client/SWGFCDProSettings.cpp | 2 +- .../code/qt5/client/SWGFCDProSettings.h | 2 +- .../code/qt5/client/SWGFileInputReport.cpp | 2 +- .../code/qt5/client/SWGFileInputReport.h | 2 +- .../code/qt5/client/SWGFileInputSettings.cpp | 2 +- .../code/qt5/client/SWGFileInputSettings.h | 2 +- .../code/qt5/client/SWGFileSourceReport.cpp | 2 +- .../code/qt5/client/SWGFileSourceReport.h | 2 +- .../code/qt5/client/SWGFileSourceSettings.cpp | 2 +- .../code/qt5/client/SWGFileSourceSettings.h | 2 +- .../code/qt5/client/SWGFreeDVDemodReport.cpp | 2 +- .../code/qt5/client/SWGFreeDVDemodReport.h | 2 +- .../qt5/client/SWGFreeDVDemodSettings.cpp | 2 +- .../code/qt5/client/SWGFreeDVDemodSettings.h | 2 +- .../code/qt5/client/SWGFreeDVModReport.cpp | 2 +- .../code/qt5/client/SWGFreeDVModReport.h | 2 +- .../code/qt5/client/SWGFreeDVModSettings.cpp | 2 +- .../code/qt5/client/SWGFreeDVModSettings.h | 2 +- .../code/qt5/client/SWGFreqTrackerReport.cpp | 2 +- .../code/qt5/client/SWGFreqTrackerReport.h | 2 +- .../qt5/client/SWGFreqTrackerSettings.cpp | 2 +- .../code/qt5/client/SWGFreqTrackerSettings.h | 2 +- .../sdrangel/code/qt5/client/SWGFrequency.cpp | 2 +- .../sdrangel/code/qt5/client/SWGFrequency.h | 2 +- .../code/qt5/client/SWGFrequencyBand.cpp | 2 +- .../code/qt5/client/SWGFrequencyBand.h | 2 +- .../code/qt5/client/SWGFrequencyRange.cpp | 2 +- .../code/qt5/client/SWGFrequencyRange.h | 2 +- swagger/sdrangel/code/qt5/client/SWGGain.cpp | 2 +- swagger/sdrangel/code/qt5/client/SWGGain.h | 2 +- .../qt5/client/SWGHackRFInputSettings.cpp | 2 +- .../code/qt5/client/SWGHackRFInputSettings.h | 2 +- .../qt5/client/SWGHackRFOutputSettings.cpp | 2 +- .../code/qt5/client/SWGHackRFOutputSettings.h | 2 +- .../sdrangel/code/qt5/client/SWGHelpers.cpp | 2 +- swagger/sdrangel/code/qt5/client/SWGHelpers.h | 2 +- .../code/qt5/client/SWGHttpRequest.cpp | 2 +- .../sdrangel/code/qt5/client/SWGHttpRequest.h | 2 +- .../code/qt5/client/SWGInstanceApi.cpp | 2 +- .../sdrangel/code/qt5/client/SWGInstanceApi.h | 2 +- .../client/SWGInstanceChannelsResponse.cpp | 2 +- .../qt5/client/SWGInstanceChannelsResponse.h | 2 +- .../qt5/client/SWGInstanceDevicesResponse.cpp | 2 +- .../qt5/client/SWGInstanceDevicesResponse.h | 2 +- .../qt5/client/SWGInstanceSummaryResponse.cpp | 2 +- .../qt5/client/SWGInstanceSummaryResponse.h | 2 +- .../code/qt5/client/SWGKiwiSDRReport.cpp | 2 +- .../code/qt5/client/SWGKiwiSDRReport.h | 2 +- .../code/qt5/client/SWGKiwiSDRSettings.cpp | 2 +- .../code/qt5/client/SWGKiwiSDRSettings.h | 2 +- .../code/qt5/client/SWGLimeSdrInputReport.cpp | 2 +- .../code/qt5/client/SWGLimeSdrInputReport.h | 2 +- .../qt5/client/SWGLimeSdrInputSettings.cpp | 2 +- .../code/qt5/client/SWGLimeSdrInputSettings.h | 2 +- .../qt5/client/SWGLimeSdrOutputReport.cpp | 2 +- .../code/qt5/client/SWGLimeSdrOutputReport.h | 2 +- .../qt5/client/SWGLimeSdrOutputSettings.cpp | 2 +- .../qt5/client/SWGLimeSdrOutputSettings.h | 2 +- .../code/qt5/client/SWGLocalInputReport.cpp | 2 +- .../code/qt5/client/SWGLocalInputReport.h | 2 +- .../code/qt5/client/SWGLocalInputSettings.cpp | 2 +- .../code/qt5/client/SWGLocalInputSettings.h | 2 +- .../code/qt5/client/SWGLocalOutputReport.cpp | 2 +- .../code/qt5/client/SWGLocalOutputReport.h | 2 +- .../qt5/client/SWGLocalOutputSettings.cpp | 2 +- .../code/qt5/client/SWGLocalOutputSettings.h | 2 +- .../code/qt5/client/SWGLocalSinkSettings.cpp | 2 +- .../code/qt5/client/SWGLocalSinkSettings.h | 2 +- .../qt5/client/SWGLocalSourceSettings.cpp | 2 +- .../code/qt5/client/SWGLocalSourceSettings.h | 2 +- .../qt5/client/SWGLocationInformation.cpp | 2 +- .../code/qt5/client/SWGLocationInformation.h | 2 +- .../code/qt5/client/SWGLoggingInfo.cpp | 2 +- .../sdrangel/code/qt5/client/SWGLoggingInfo.h | 2 +- .../code/qt5/client/SWGModelFactory.h | 2 +- .../code/qt5/client/SWGNFMDemodReport.cpp | 2 +- .../code/qt5/client/SWGNFMDemodReport.h | 2 +- .../code/qt5/client/SWGNFMDemodSettings.cpp | 2 +- .../code/qt5/client/SWGNFMDemodSettings.h | 2 +- .../code/qt5/client/SWGNFMModReport.cpp | 2 +- .../code/qt5/client/SWGNFMModReport.h | 2 +- .../code/qt5/client/SWGNFMModSettings.cpp | 2 +- .../code/qt5/client/SWGNFMModSettings.h | 2 +- .../sdrangel/code/qt5/client/SWGNamedEnum.cpp | 2 +- .../sdrangel/code/qt5/client/SWGNamedEnum.h | 2 +- swagger/sdrangel/code/qt5/client/SWGObject.h | 2 +- .../code/qt5/client/SWGPerseusReport.cpp | 2 +- .../code/qt5/client/SWGPerseusReport.h | 2 +- .../code/qt5/client/SWGPerseusSettings.cpp | 2 +- .../code/qt5/client/SWGPerseusSettings.h | 2 +- .../qt5/client/SWGPlutoSdrInputReport.cpp | 2 +- .../code/qt5/client/SWGPlutoSdrInputReport.h | 2 +- .../qt5/client/SWGPlutoSdrInputSettings.cpp | 65 ++++++++++++++++++- .../qt5/client/SWGPlutoSdrInputSettings.h | 20 +++++- .../qt5/client/SWGPlutoSdrOutputReport.cpp | 2 +- .../code/qt5/client/SWGPlutoSdrOutputReport.h | 2 +- .../qt5/client/SWGPlutoSdrOutputSettings.cpp | 2 +- .../qt5/client/SWGPlutoSdrOutputSettings.h | 2 +- .../code/qt5/client/SWGPresetExport.cpp | 2 +- .../code/qt5/client/SWGPresetExport.h | 2 +- .../code/qt5/client/SWGPresetGroup.cpp | 2 +- .../sdrangel/code/qt5/client/SWGPresetGroup.h | 2 +- .../code/qt5/client/SWGPresetIdentifier.cpp | 2 +- .../code/qt5/client/SWGPresetIdentifier.h | 2 +- .../code/qt5/client/SWGPresetImport.cpp | 2 +- .../code/qt5/client/SWGPresetImport.h | 2 +- .../code/qt5/client/SWGPresetItem.cpp | 2 +- .../sdrangel/code/qt5/client/SWGPresetItem.h | 2 +- .../code/qt5/client/SWGPresetTransfer.cpp | 2 +- .../code/qt5/client/SWGPresetTransfer.h | 2 +- .../sdrangel/code/qt5/client/SWGPresets.cpp | 2 +- swagger/sdrangel/code/qt5/client/SWGPresets.h | 2 +- .../sdrangel/code/qt5/client/SWGRDSReport.cpp | 2 +- .../sdrangel/code/qt5/client/SWGRDSReport.h | 2 +- .../client/SWGRDSReport_altFrequencies.cpp | 2 +- .../qt5/client/SWGRDSReport_altFrequencies.h | 2 +- swagger/sdrangel/code/qt5/client/SWGRange.cpp | 2 +- swagger/sdrangel/code/qt5/client/SWGRange.h | 2 +- .../code/qt5/client/SWGRangeFloat.cpp | 2 +- .../sdrangel/code/qt5/client/SWGRangeFloat.h | 2 +- .../code/qt5/client/SWGRemoteInputReport.cpp | 2 +- .../code/qt5/client/SWGRemoteInputReport.h | 2 +- .../qt5/client/SWGRemoteInputSettings.cpp | 2 +- .../code/qt5/client/SWGRemoteInputSettings.h | 2 +- .../code/qt5/client/SWGRemoteOutputReport.cpp | 2 +- .../code/qt5/client/SWGRemoteOutputReport.h | 2 +- .../qt5/client/SWGRemoteOutputSettings.cpp | 2 +- .../code/qt5/client/SWGRemoteOutputSettings.h | 2 +- .../code/qt5/client/SWGRemoteSinkSettings.cpp | 2 +- .../code/qt5/client/SWGRemoteSinkSettings.h | 2 +- .../code/qt5/client/SWGRemoteSourceReport.cpp | 2 +- .../code/qt5/client/SWGRemoteSourceReport.h | 2 +- .../qt5/client/SWGRemoteSourceSettings.cpp | 2 +- .../code/qt5/client/SWGRemoteSourceSettings.h | 2 +- .../code/qt5/client/SWGRtlSdrReport.cpp | 2 +- .../code/qt5/client/SWGRtlSdrReport.h | 2 +- .../code/qt5/client/SWGRtlSdrSettings.cpp | 2 +- .../code/qt5/client/SWGRtlSdrSettings.h | 2 +- .../code/qt5/client/SWGSDRPlayReport.cpp | 2 +- .../code/qt5/client/SWGSDRPlayReport.h | 2 +- .../code/qt5/client/SWGSDRPlaySettings.cpp | 2 +- .../code/qt5/client/SWGSDRPlaySettings.h | 2 +- .../code/qt5/client/SWGSSBDemodReport.cpp | 2 +- .../code/qt5/client/SWGSSBDemodReport.h | 2 +- .../code/qt5/client/SWGSSBDemodSettings.cpp | 2 +- .../code/qt5/client/SWGSSBDemodSettings.h | 2 +- .../code/qt5/client/SWGSSBModReport.cpp | 2 +- .../code/qt5/client/SWGSSBModReport.h | 2 +- .../code/qt5/client/SWGSSBModSettings.cpp | 2 +- .../code/qt5/client/SWGSSBModSettings.h | 2 +- .../code/qt5/client/SWGSampleRate.cpp | 2 +- .../sdrangel/code/qt5/client/SWGSampleRate.h | 2 +- .../code/qt5/client/SWGSamplingDevice.cpp | 2 +- .../code/qt5/client/SWGSamplingDevice.h | 2 +- .../client/SWGSoapySDRFrequencySetting.cpp | 2 +- .../qt5/client/SWGSoapySDRFrequencySetting.h | 2 +- .../qt5/client/SWGSoapySDRGainSetting.cpp | 2 +- .../code/qt5/client/SWGSoapySDRGainSetting.h | 2 +- .../qt5/client/SWGSoapySDRInputSettings.cpp | 2 +- .../qt5/client/SWGSoapySDRInputSettings.h | 2 +- .../qt5/client/SWGSoapySDROutputSettings.cpp | 2 +- .../qt5/client/SWGSoapySDROutputSettings.h | 2 +- .../code/qt5/client/SWGSoapySDRReport.cpp | 2 +- .../code/qt5/client/SWGSoapySDRReport.h | 2 +- .../code/qt5/client/SWGSuccessResponse.cpp | 2 +- .../code/qt5/client/SWGSuccessResponse.h | 2 +- .../code/qt5/client/SWGTestMISettings.cpp | 2 +- .../code/qt5/client/SWGTestMISettings.h | 2 +- .../qt5/client/SWGTestMiStreamSettings.cpp | 2 +- .../code/qt5/client/SWGTestMiStreamSettings.h | 2 +- .../code/qt5/client/SWGTestSourceSettings.cpp | 2 +- .../code/qt5/client/SWGTestSourceSettings.h | 2 +- .../code/qt5/client/SWGUDPSinkReport.cpp | 2 +- .../code/qt5/client/SWGUDPSinkReport.h | 2 +- .../code/qt5/client/SWGUDPSinkSettings.cpp | 2 +- .../code/qt5/client/SWGUDPSinkSettings.h | 2 +- .../code/qt5/client/SWGUDPSourceReport.cpp | 2 +- .../code/qt5/client/SWGUDPSourceReport.h | 2 +- .../code/qt5/client/SWGUDPSourceSettings.cpp | 2 +- .../code/qt5/client/SWGUDPSourceSettings.h | 2 +- .../code/qt5/client/SWGWFMDemodReport.cpp | 2 +- .../code/qt5/client/SWGWFMDemodReport.h | 2 +- .../code/qt5/client/SWGWFMDemodSettings.cpp | 2 +- .../code/qt5/client/SWGWFMDemodSettings.h | 2 +- .../code/qt5/client/SWGWFMModReport.cpp | 2 +- .../code/qt5/client/SWGWFMModReport.h | 2 +- .../code/qt5/client/SWGWFMModSettings.cpp | 2 +- .../code/qt5/client/SWGWFMModSettings.h | 2 +- .../code/qt5/client/SWGXtrxInputReport.cpp | 2 +- .../code/qt5/client/SWGXtrxInputReport.h | 2 +- .../code/qt5/client/SWGXtrxInputSettings.cpp | 2 +- .../code/qt5/client/SWGXtrxInputSettings.h | 2 +- .../code/qt5/client/SWGXtrxOutputReport.cpp | 2 +- .../code/qt5/client/SWGXtrxOutputReport.h | 2 +- .../code/qt5/client/SWGXtrxOutputSettings.cpp | 2 +- .../code/qt5/client/SWGXtrxOutputSettings.h | 2 +- 301 files changed, 494 insertions(+), 311 deletions(-) diff --git a/devices/plutosdr/deviceplutosdrbox.cpp b/devices/plutosdr/deviceplutosdrbox.cpp index a9de7604f..07edd34be 100644 --- a/devices/plutosdr/deviceplutosdrbox.cpp +++ b/devices/plutosdr/deviceplutosdrbox.cpp @@ -61,7 +61,6 @@ DevicePlutoSDRBox::DevicePlutoSDRBox(const std::string& uri) : if (m_valid) { getXO(); - setTracking(); // int nb_channels = iio_device_get_channels_count(m_devRx); // for (int i = 0; i < nb_channels; i++) { // iio_channel_disable(iio_device_get_channel(m_devRx, i)); @@ -827,18 +826,3 @@ bool DevicePlutoSDRBox::getRateGovernors(std::string& rateGovernors) { return get_param(DEVICE_PHY, "trx_rate_governor", rateGovernors); } - -void DevicePlutoSDRBox::setTracking() -{ - // in_voltage_quadrature_tracking_en - char buff[100]; - std::vector params; - snprintf(buff, sizeof(buff), "in_voltage_quadrature_tracking_en=1"); - params.push_back(std::string(buff)); - snprintf(buff, sizeof(buff), "in_voltage_bb_dc_offset_tracking_en=1"); - params.push_back(std::string(buff)); - snprintf(buff, sizeof(buff), "in_voltage_rf_dc_offset_tracking_en=1"); - params.push_back(std::string(buff)); - set_params(DEVICE_PHY, params); -} - diff --git a/devices/plutosdr/deviceplutosdrbox.h b/devices/plutosdr/deviceplutosdrbox.h index 501eb9083..ae7021e5a 100644 --- a/devices/plutosdr/deviceplutosdrbox.h +++ b/devices/plutosdr/deviceplutosdrbox.h @@ -133,7 +133,6 @@ private: void formatFIRHeader(std::ostringstream& str, uint32_t intdec); void formatFIRCoefficients(std::ostringstream& str, uint32_t nbTaps, double normalizedBW); void getXO(); - void setTracking(); }; #endif /* DEVICES_PLUTOSDR_DEVICEPLUTOSDRBOX_H_ */ diff --git a/plugins/samplesource/plutosdrinput/plutosdrinput.cpp b/plugins/samplesource/plutosdrinput/plutosdrinput.cpp index b68077d1b..5e45fda51 100644 --- a/plugins/samplesource/plutosdrinput/plutosdrinput.cpp +++ b/plugins/samplesource/plutosdrinput/plutosdrinput.cpp @@ -371,6 +371,9 @@ bool PlutoSDRInput::applySettings(const PlutoSDRInputSettings& settings, bool fo << " m_LOppmTenths: " << m_settings.m_LOppmTenths << " m_dcBlock: " << m_settings.m_dcBlock << " m_iqCorrection: " << m_settings.m_iqCorrection + << " m_hwBBDCBlock: " << m_settings.m_hwBBDCBlock + << " m_hwRFDCBlock: " << m_settings.m_hwRFDCBlock + << " m_hwIQCorrection: " << m_settings.m_hwIQCorrection << " m_lpfFIREnable: " << m_settings.m_lpfFIREnable << " m_lpfFIRBW: " << loc.toString(m_settings.m_lpfFIRBW) << " m_lpfFIRlog2Decim: " << m_settings.m_lpfFIRlog2Decim @@ -400,6 +403,15 @@ bool PlutoSDRInput::applySettings(const PlutoSDRInputSettings& settings, bool fo if ((m_settings.m_iqCorrection != settings.m_iqCorrection) || force) { reverseAPIKeys.append("iqCorrection"); } + if ((m_settings.m_hwBBDCBlock != settings.m_hwBBDCBlock) || force) { + reverseAPIKeys.append("hwBBDCBlock"); + } + if ((m_settings.m_hwRFDCBlock != settings.m_hwRFDCBlock) || force) { + reverseAPIKeys.append("hwRFDCBlock"); + } + if ((m_settings.m_hwIQCorrection != settings.m_hwIQCorrection) || force) { + reverseAPIKeys.append("hwIQCorrection"); + } if ((m_settings.m_lpfFIREnable != settings.m_lpfFIREnable) || force) { reverseAPIKeys.append("lpfFIREnable"); } @@ -592,6 +604,24 @@ bool PlutoSDRInput::applySettings(const PlutoSDRInputSettings& settings, bool fo paramsToSet = true; } + if ((m_settings.m_hwBBDCBlock != settings.m_hwBBDCBlock) || force) + { + params.push_back(QString(tr("in_voltage_bb_dc_offset_tracking_en=%1").arg(settings.m_hwBBDCBlock ? 1 : 0)).toStdString()); + paramsToSet = true; + } + + if ((m_settings.m_hwRFDCBlock != settings.m_hwRFDCBlock) || force) + { + params.push_back(QString(tr("in_voltage_rf_dc_offset_tracking_en=%1").arg(settings.m_hwRFDCBlock ? 1 : 0)).toStdString()); + paramsToSet = true; + } + + if ((m_settings.m_hwIQCorrection != settings.m_hwIQCorrection) || force) + { + params.push_back(QString(tr("in_voltage_quadrature_tracking_en=%1").arg(settings.m_hwIQCorrection ? 1 : 0)).toStdString()); + paramsToSet = true; + } + if (paramsToSet) { plutoBox->set_params(DevicePlutoSDRBox::DEVICE_PHY, params); @@ -798,6 +828,15 @@ int PlutoSDRInput::webapiSettingsPutPatch( if (deviceSettingsKeys.contains("iqCorrection")) { settings.m_iqCorrection = response.getPlutoSdrInputSettings()->getIqCorrection() != 0; } + if (deviceSettingsKeys.contains("hwBBDCBlock")) { + settings.m_hwBBDCBlock = response.getPlutoSdrInputSettings()->getHwBbdcBlock() != 0; + } + if (deviceSettingsKeys.contains("hwRFDCBlock")) { + settings.m_hwBBDCBlock = response.getPlutoSdrInputSettings()->getHwRfdcBlock() != 0; + } + if (deviceSettingsKeys.contains("hwIQCorrection")) { + settings.m_hwBBDCBlock = response.getPlutoSdrInputSettings()->getHwIqCorrection() != 0; + } if (deviceSettingsKeys.contains("log2Decim")) { settings.m_log2Decim = response.getPlutoSdrInputSettings()->getLog2Decim(); } @@ -875,6 +914,9 @@ void PlutoSDRInput::webapiFormatDeviceSettings(SWGSDRangel::SWGDeviceSettings& r response.getPlutoSdrInputSettings()->setFcPos((int) settings.m_fcPos); response.getPlutoSdrInputSettings()->setDcBlock(settings.m_dcBlock ? 1 : 0); response.getPlutoSdrInputSettings()->setIqCorrection(settings.m_iqCorrection ? 1 : 0); + response.getPlutoSdrInputSettings()->setHwBbdcBlock(settings.m_hwBBDCBlock ? 1 : 0); + response.getPlutoSdrInputSettings()->setHwRfdcBlock(settings.m_hwRFDCBlock ? 1 : 0); + response.getPlutoSdrInputSettings()->setHwIqCorrection(settings.m_hwIQCorrection ? 1 : 0); response.getPlutoSdrInputSettings()->setLog2Decim(settings.m_log2Decim); response.getPlutoSdrInputSettings()->setLpfBw(settings.m_lpfBW); response.getPlutoSdrInputSettings()->setGain(settings.m_gain); @@ -955,6 +997,15 @@ void PlutoSDRInput::webapiReverseSendSettings(QList& deviceSettingsKeys if (deviceSettingsKeys.contains("iqCorrection") || force) { swgPlutoSdrInputSettings->setIqCorrection(settings.m_iqCorrection ? 1 : 0); } + if (deviceSettingsKeys.contains("hwBBDCBlock") || force) { + swgPlutoSdrInputSettings->setHwBbdcBlock(settings.m_hwBBDCBlock ? 1 : 0); + } + if (deviceSettingsKeys.contains("hwRFDCBlock") || force) { + swgPlutoSdrInputSettings->setHwRfdcBlock(settings.m_hwRFDCBlock ? 1 : 0); + } + if (deviceSettingsKeys.contains("hwIQCorrection") || force) { + swgPlutoSdrInputSettings->setHwIqCorrection(settings.m_hwIQCorrection ? 1 : 0); + } if (deviceSettingsKeys.contains("log2Decim") || force) { swgPlutoSdrInputSettings->setLog2Decim(settings.m_log2Decim); } diff --git a/plugins/samplesource/plutosdrinput/plutosdrinputgui.cpp b/plugins/samplesource/plutosdrinput/plutosdrinputgui.cpp index ca05c13d8..9f50fd108 100644 --- a/plugins/samplesource/plutosdrinput/plutosdrinputgui.cpp +++ b/plugins/samplesource/plutosdrinput/plutosdrinputgui.cpp @@ -226,6 +226,25 @@ void PlutoSDRInputGui::on_iqImbalance_toggled(bool checked) sendSettings(); } +void PlutoSDRInputGui::on_rfDCOffset_toggled(bool checked) +{ + m_settings.m_hwRFDCBlock = checked; + sendSettings(); +} + +void PlutoSDRInputGui::on_bbDCOffset_toggled(bool checked) +{ + m_settings.m_hwBBDCBlock = checked; + sendSettings(); +} + +void PlutoSDRInputGui::on_hwIQImbalance_toggled(bool checked) +{ + m_settings.m_hwIQCorrection = checked; + sendSettings(); +} + + void PlutoSDRInputGui::on_swDecim_currentIndexChanged(int index) { m_settings.m_log2Decim = index > 6 ? 6 : index; @@ -378,6 +397,9 @@ void PlutoSDRInputGui::displaySettings() ui->dcOffset->setChecked(m_settings.m_dcBlock); ui->iqImbalance->setChecked(m_settings.m_iqCorrection); + ui->bbDCOffset->setChecked(m_settings.m_hwBBDCBlock); + ui->rfDCOffset->setChecked(m_settings.m_hwRFDCBlock); + ui->hwIQImbalance->setChecked(m_settings.m_hwIQCorrection); ui->loPPM->setValue(m_settings.m_LOppmTenths); ui->loPPMText->setText(QString("%1").arg(QString::number(m_settings.m_LOppmTenths/10.0, 'f', 1))); diff --git a/plugins/samplesource/plutosdrinput/plutosdrinputgui.h b/plugins/samplesource/plutosdrinput/plutosdrinputgui.h index 39916821a..2c06a90ea 100644 --- a/plugins/samplesource/plutosdrinput/plutosdrinputgui.h +++ b/plugins/samplesource/plutosdrinput/plutosdrinputgui.h @@ -85,6 +85,9 @@ private slots: void on_centerFrequency_changed(quint64 value); void on_loPPM_valueChanged(int value); void on_dcOffset_toggled(bool checked); + void on_rfDCOffset_toggled(bool checked); + void on_bbDCOffset_toggled(bool checked); + void on_hwIQImbalance_toggled(bool checked); void on_iqImbalance_toggled(bool checked); void on_swDecim_currentIndexChanged(int index); void on_fcPos_currentIndexChanged(int index); diff --git a/plugins/samplesource/plutosdrinput/plutosdrinputsettings.cpp b/plugins/samplesource/plutosdrinput/plutosdrinputsettings.cpp index 163e38d4b..c238be8b6 100644 --- a/plugins/samplesource/plutosdrinput/plutosdrinputsettings.cpp +++ b/plugins/samplesource/plutosdrinput/plutosdrinputsettings.cpp @@ -35,6 +35,9 @@ void PlutoSDRInputSettings::resetToDefaults() m_devSampleRate = 2500 * 1000; m_dcBlock = false; m_iqCorrection = false; + m_hwBBDCBlock = true; + m_hwRFDCBlock = true; + m_hwIQCorrection = true; m_lpfBW = 1500000; m_lpfFIREnable = false; m_lpfFIRBW = 500000U; @@ -76,6 +79,9 @@ QByteArray PlutoSDRInputSettings::serialize() const s.writeString(19, m_reverseAPIAddress); s.writeU32(20, m_reverseAPIPort); s.writeU32(21, m_reverseAPIDeviceIndex); + s.writeBool(22, m_hwBBDCBlock); + s.writeBool(23, m_hwRFDCBlock); + s.writeBool(24, m_hwIQCorrection); return s.final(); } @@ -144,6 +150,10 @@ bool PlutoSDRInputSettings::deserialize(const QByteArray& data) d.readU32(21, &uintval, 0); m_reverseAPIDeviceIndex = uintval > 99 ? 99 : uintval; + d.readBool(22, &m_hwBBDCBlock, true); + d.readBool(23, &m_hwRFDCBlock, true); + d.readBool(24, &m_hwIQCorrection, true); + return true; } else diff --git a/plugins/samplesource/plutosdrinput/plutosdrinputsettings.h b/plugins/samplesource/plutosdrinput/plutosdrinputsettings.h index dfc81237e..34143ad9f 100644 --- a/plugins/samplesource/plutosdrinput/plutosdrinputsettings.h +++ b/plugins/samplesource/plutosdrinput/plutosdrinputsettings.h @@ -68,6 +68,9 @@ struct PlutoSDRInputSettings { fcPos_t m_fcPos; bool m_dcBlock; bool m_iqCorrection; + bool m_hwBBDCBlock; //!< Hardware baseband DC blocking + bool m_hwRFDCBlock; //!< Hardware RF DC blocking + bool m_hwIQCorrection; //!< Hardware IQ correction quint32 m_log2Decim; quint32 m_lpfBW; //!< analog lowpass filter bandwidth (Hz) quint32 m_gain; //!< "hardware" gain diff --git a/sdrbase/resources/webapi/doc/html2/index.html b/sdrbase/resources/webapi/doc/html2/index.html index c4b3748b7..a9b44b534 100644 --- a/sdrbase/resources/webapi/doc/html2/index.html +++ b/sdrbase/resources/webapi/doc/html2/index.html @@ -4014,6 +4014,15 @@ margin-bottom: 20px; "iqCorrection" : { "type" : "integer" }, + "hwBBDCBlock" : { + "type" : "integer" + }, + "hwRFDCBlock" : { + "type" : "integer" + }, + "hwIQCorrection" : { + "type" : "integer" + }, "log2Decim" : { "type" : "integer" }, @@ -6287,7 +6296,7 @@ margin-bottom: 20px;