diff --git a/plugins/samplesource/rtlsdr/rtlsdrgui.cpp b/plugins/samplesource/rtlsdr/rtlsdrgui.cpp index 8fc470997..7eb93a755 100644 --- a/plugins/samplesource/rtlsdr/rtlsdrgui.cpp +++ b/plugins/samplesource/rtlsdr/rtlsdrgui.cpp @@ -34,6 +34,7 @@ RTLSDRGui::RTLSDRGui(DeviceUISet *deviceUISet, QWidget* parent) : QWidget(parent), ui(new Ui::RTLSDRGui), m_deviceUISet(deviceUISet), + m_doApplySettings(true), m_forceSettings(true), m_settings(), m_sampleSource(0), @@ -142,7 +143,10 @@ bool RTLSDRGui::handleMessage(const Message& message) { const RTLSDRInput::MsgConfigureRTLSDR& cfg = (RTLSDRInput::MsgConfigureRTLSDR&) message; m_settings = cfg.getSettings(); + blockApplySettings(true); + displayGains(); displaySettings(); + blockApplySettings(false); return true; } else @@ -355,10 +359,13 @@ void RTLSDRGui::on_transverter_clicked() void RTLSDRGui::updateHardware() { - RTLSDRInput::MsgConfigureRTLSDR* message = RTLSDRInput::MsgConfigureRTLSDR::create(m_settings, m_forceSettings); - m_sampleSource->getInputMessageQueue()->push(message); - m_forceSettings = false; - m_updateTimer.stop(); + if (m_doApplySettings) + { + RTLSDRInput::MsgConfigureRTLSDR* message = RTLSDRInput::MsgConfigureRTLSDR::create(m_settings, m_forceSettings); + m_sampleSource->getInputMessageQueue()->push(message); + m_forceSettings = false; + m_updateTimer.stop(); + } } void RTLSDRGui::updateStatus() @@ -390,6 +397,11 @@ void RTLSDRGui::updateStatus() } } +void RTLSDRGui::blockApplySettings(bool block) +{ + m_doApplySettings = !block; +} + void RTLSDRGui::on_checkBox_stateChanged(int state) { if (state == Qt::Checked) diff --git a/plugins/samplesource/rtlsdr/rtlsdrgui.h b/plugins/samplesource/rtlsdr/rtlsdrgui.h index 05ae61759..3693f4cab 100644 --- a/plugins/samplesource/rtlsdr/rtlsdrgui.h +++ b/plugins/samplesource/rtlsdr/rtlsdrgui.h @@ -55,6 +55,7 @@ private: Ui::RTLSDRGui* ui; DeviceUISet* m_deviceUISet; + bool m_doApplySettings; bool m_forceSettings; RTLSDRSettings m_settings; QTimer m_updateTimer; @@ -71,6 +72,7 @@ private: void sendSettings(); void updateSampleRateAndFrequency(); void updateFrequencyLimits(); + void blockApplySettings(bool block); private slots: void handleInputMessages(); diff --git a/plugins/samplesource/rtlsdr/rtlsdrinput.cpp b/plugins/samplesource/rtlsdr/rtlsdrinput.cpp index 8caf36c33..89b816194 100644 --- a/plugins/samplesource/rtlsdr/rtlsdrinput.cpp +++ b/plugins/samplesource/rtlsdr/rtlsdrinput.cpp @@ -314,16 +314,14 @@ bool RTLSDRInput::applySettings(const RTLSDRSettings& settings, bool force) } } - if ((m_settings.m_dcBlock != settings.m_dcBlock) || force) + if ((m_settings.m_dcBlock != settings.m_dcBlock) || (m_settings.m_iqImbalance != settings.m_iqImbalance) || force) { m_settings.m_dcBlock = settings.m_dcBlock; - m_deviceAPI->configureCorrections(m_settings.m_dcBlock, m_settings.m_iqImbalance); - } - - if ((m_settings.m_iqImbalance != settings.m_iqImbalance) || force) - { m_settings.m_iqImbalance = settings.m_iqImbalance; m_deviceAPI->configureCorrections(m_settings.m_dcBlock, m_settings.m_iqImbalance); + qDebug("RTLSDRInput::applySettings: corrections: DC block: %s IQ imbalance: %s", + m_settings.m_dcBlock ? "true" : "false", + m_settings.m_iqImbalance ? "true" : "false"); } if ((m_settings.m_loPpmCorrection != settings.m_loPpmCorrection) || force) @@ -370,6 +368,8 @@ bool RTLSDRInput::applySettings(const RTLSDRSettings& settings, bool force) { m_rtlSDRThread->setLog2Decimation(settings.m_log2Decim); } + + qDebug("RTLSDRInput::applySettings: log2decim set to %d", m_settings.m_log2Decim); } if (force || (m_settings.m_centerFrequency != settings.m_centerFrequency) @@ -430,13 +430,15 @@ bool RTLSDRInput::applySettings(const RTLSDRSettings& settings, bool force) if (m_rtlSDRThread != 0) { m_rtlSDRThread->setFcPos((int) m_settings.m_fcPos); - qDebug() << "RTLSDRInput: set fc pos (enum) to " << (int) m_settings.m_fcPos; } + + qDebug() << "RTLSDRInput: set fc pos (enum) to " << (int) m_settings.m_fcPos; } if ((m_settings.m_noModMode != settings.m_noModMode) || force) { m_settings.m_noModMode = settings.m_noModMode; + qDebug() << "RTLSDRInput: set noModMode to " << m_settings.m_noModMode; // Direct Modes: 0: off, 1: I, 2: Q, 3: NoMod. if (m_settings.m_noModMode) { @@ -526,6 +528,14 @@ int RTLSDRInput::webapiSettingsPutPatch( return 200; } +int RTLSDRInput::webapiRunGet( + SWGSDRangel::SWGDeviceState& response, + QString& errorMessage __attribute__((unused))) +{ + m_deviceAPI->getDeviceEngineStateStr(*response.getState()); + return 200; +} + int RTLSDRInput::webapiRun( bool run, SWGSDRangel::SWGDeviceState& response, diff --git a/plugins/samplesource/rtlsdr/rtlsdrinput.h b/plugins/samplesource/rtlsdr/rtlsdrinput.h index 398c4df50..23ad90866 100644 --- a/plugins/samplesource/rtlsdr/rtlsdrinput.h +++ b/plugins/samplesource/rtlsdr/rtlsdrinput.h @@ -115,6 +115,10 @@ public: SWGSDRangel::SWGDeviceSettings& response, // query + response QString& errorMessage); + virtual int webapiRunGet( + SWGSDRangel::SWGDeviceState& response, + QString& errorMessage); + virtual int webapiRun( bool run, SWGSDRangel::SWGDeviceState& response, diff --git a/sdrbase/dsp/devicesamplesink.h b/sdrbase/dsp/devicesamplesink.h index b837bfffb..5c425c7a6 100644 --- a/sdrbase/dsp/devicesamplesink.h +++ b/sdrbase/dsp/devicesamplesink.h @@ -58,6 +58,11 @@ public: QString& errorMessage) { errorMessage = "Not implemented"; return 501; } + virtual int webapiRunGet( + SWGSDRangel::SWGDeviceState& response __attribute__((unused)), + QString& errorMessage) + { errorMessage = "Not implemented"; return 501; } + virtual int webapiRun(bool run __attribute__((unused)), SWGSDRangel::SWGDeviceState& response __attribute__((unused)), QString& errorMessage) diff --git a/sdrbase/dsp/devicesamplesource.h b/sdrbase/dsp/devicesamplesource.h index 03df4ac0a..479c2b5b8 100644 --- a/sdrbase/dsp/devicesamplesource.h +++ b/sdrbase/dsp/devicesamplesource.h @@ -58,6 +58,11 @@ public: QString& errorMessage) { errorMessage = "Not implemented"; return 501; } + virtual int webapiRunGet( + SWGSDRangel::SWGDeviceState& response __attribute__((unused)), + QString& errorMessage) + { errorMessage = "Not implemented"; return 501; } + virtual int webapiRun(bool run __attribute__((unused)), SWGSDRangel::SWGDeviceState& response __attribute__((unused)), QString& errorMessage) diff --git a/sdrbase/resources/index.html b/sdrbase/resources/index.html index bbc6a5c29..46c4696f5 100644 --- a/sdrbase/resources/index.html +++ b/sdrbase/resources/index.html @@ -1374,6 +1374,9 @@ margin-bottom: 20px;