diff --git a/plugins/samplesource/soapysdrinput/soapysdrinputgui.cpp b/plugins/samplesource/soapysdrinput/soapysdrinputgui.cpp index b29b57fda..2b5bf4364 100644 --- a/plugins/samplesource/soapysdrinput/soapysdrinputgui.cpp +++ b/plugins/samplesource/soapysdrinput/soapysdrinputgui.cpp @@ -461,6 +461,48 @@ void SoapySDRInputGui::individualGainChanged(QString name, double value) sendSettings(); } +void SoapySDRInputGui::autoDCCorrectionChanged(bool set) +{ + m_settings.m_autoDCCorrection = set; + sendSettings(); +} + +void SoapySDRInputGui::autoIQCorrectionChanged(bool set) +{ + m_settings.m_autoIQCorrection = set; + sendSettings(); +} + +void SoapySDRInputGui::dcCorrectionModuleChanged(double value) +{ + std::complex dcCorrection = std::polar(value, arg(m_settings.m_dcCorrection)); + m_settings.m_dcCorrection = dcCorrection; + sendSettings(); +} + +void SoapySDRInputGui::dcCorrectionArgumentChanged(double value) +{ + double angleInRadians = (value / 180.0) * M_PI; + std::complex dcCorrection = std::polar(abs(m_settings.m_dcCorrection), angleInRadians); + m_settings.m_dcCorrection = dcCorrection; + sendSettings(); +} + +void SoapySDRInputGui::iqCorrectionModuleChanged(double value) +{ + std::complex iqCorrection = std::polar(value, arg(m_settings.m_iqCorrection)); + m_settings.m_iqCorrection = iqCorrection; + sendSettings(); +} + +void SoapySDRInputGui::iqCorrectionArgumentChanged(double value) +{ + double angleInRadians = (value / 180.0) * M_PI; + std::complex iqCorrection = std::polar(abs(m_settings.m_iqCorrection), angleInRadians); + m_settings.m_iqCorrection = iqCorrection; + sendSettings(); +} + void SoapySDRInputGui::on_centerFrequency_changed(quint64 value) { m_settings.m_centerFrequency = value * 1000; @@ -573,6 +615,7 @@ void SoapySDRInputGui::displaySettings() displayTunableElementsControlSettings(); displayIndividualGainsControlSettings(); + displayCorrectionsSettings(); blockApplySettings(false); } @@ -601,6 +644,31 @@ void SoapySDRInputGui::displayIndividualGainsControlSettings() } } +void SoapySDRInputGui::displayCorrectionsSettings() +{ + if (m_dcCorrectionGUI) + { + m_dcCorrectionGUI->setAutomatic(m_settings.m_autoDCCorrection); + m_dcCorrectionGUI->setModule(abs(m_settings.m_dcCorrection)); + m_dcCorrectionGUI->setArgument(arg(m_settings.m_dcCorrection)*(180.0/M_PI)); + } + + if (m_iqCorrectionGUI) + { + m_iqCorrectionGUI->setAutomatic(m_settings.m_autoIQCorrection); + m_iqCorrectionGUI->setModule(abs(m_settings.m_iqCorrection)); + m_iqCorrectionGUI->setArgument(arg(m_settings.m_iqCorrection)*(180.0/M_PI)); + } + + if (m_autoDCCorrection) { + m_autoDCCorrection->setChecked(m_settings.m_autoDCCorrection); + } + + if (m_autoIQCorrection) { + m_autoIQCorrection->setChecked(m_settings.m_autoIQCorrection); + } +} + void SoapySDRInputGui::sendSettings() { if (!m_updateTimer.isActive()) { diff --git a/plugins/samplesource/soapysdrinput/soapysdrinputgui.h b/plugins/samplesource/soapysdrinput/soapysdrinputgui.h index 9e0e6bc5e..7f65de91a 100644 --- a/plugins/samplesource/soapysdrinput/soapysdrinputgui.h +++ b/plugins/samplesource/soapysdrinput/soapysdrinputgui.h @@ -97,6 +97,7 @@ private: void displaySettings(); void displayTunableElementsControlSettings(); void displayIndividualGainsControlSettings(); + void displayCorrectionsSettings(); void sendSettings(); void updateSampleRateAndFrequency(); void updateFrequencyLimits(); diff --git a/sdrgui/soapygui/complexfactorgui.ui b/sdrgui/soapygui/complexfactorgui.ui index 01d5b1b3a..37d3d9175 100644 --- a/sdrgui/soapygui/complexfactorgui.ui +++ b/sdrgui/soapygui/complexfactorgui.ui @@ -90,7 +90,7 @@ Normalized module - -100 + 0 100 @@ -112,7 +112,7 @@ - -1.00 + 1.00 Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter