From 1f7f2085fd754814e25cb0f77a7e355fb7fce34d Mon Sep 17 00:00:00 2001 From: f4exb Date: Sun, 23 Oct 2022 00:57:48 +0200 Subject: [PATCH] BladeRF2: Make settings assignments atomic. Part of #1329 --- .../bladerf2input/bladerf2input.cpp | 156 +++++++----------- .../bladerf2input/bladerf2input.h | 13 +- .../bladerf2input/bladerf2inputgui.cpp | 33 +++- .../bladerf2input/bladerf2inputgui.h | 1 + .../bladerf2input/bladerf2inputsettings.cpp | 115 +++++++++++++ .../bladerf2input/bladerf2inputsettings.h | 2 + 6 files changed, 220 insertions(+), 100 deletions(-) diff --git a/plugins/samplesource/bladerf2input/bladerf2input.cpp b/plugins/samplesource/bladerf2input/bladerf2input.cpp index b334f28f9..fd25ffcd0 100644 --- a/plugins/samplesource/bladerf2input/bladerf2input.cpp +++ b/plugins/samplesource/bladerf2input/bladerf2input.cpp @@ -207,7 +207,7 @@ void BladeRF2Input::closeDevice() void BladeRF2Input::init() { - applySettings(m_settings, true); + applySettings(m_settings, QList(), true); } BladeRF2InputThread *BladeRF2Input::findThread() @@ -383,7 +383,7 @@ bool BladeRF2Input::start() bladerf2InputThread->startWork(); } - applySettings(m_settings, true); + applySettings(m_settings, QList(), true); qDebug("BladeRF2Input::start: started"); m_running = true; @@ -519,12 +519,12 @@ bool BladeRF2Input::deserialize(const QByteArray& data) success = false; } - MsgConfigureBladeRF2* message = MsgConfigureBladeRF2::create(m_settings, true); + MsgConfigureBladeRF2* message = MsgConfigureBladeRF2::create(m_settings, QList(), true); m_inputMessageQueue.push(message); if (m_guiMessageQueue) { - MsgConfigureBladeRF2* messageToGUI = MsgConfigureBladeRF2::create(m_settings, true); + MsgConfigureBladeRF2* messageToGUI = MsgConfigureBladeRF2::create(m_settings, QList(), true); m_guiMessageQueue->push(messageToGUI); } @@ -552,12 +552,12 @@ void BladeRF2Input::setCenterFrequency(qint64 centerFrequency) BladeRF2InputSettings settings = m_settings; settings.m_centerFrequency = centerFrequency; - MsgConfigureBladeRF2* message = MsgConfigureBladeRF2::create(settings, false); + MsgConfigureBladeRF2* message = MsgConfigureBladeRF2::create(settings, QList{"centerFrequency"}, false); m_inputMessageQueue.push(message); if (m_guiMessageQueue) { - MsgConfigureBladeRF2* messageToGUI = MsgConfigureBladeRF2::create(settings, false); + MsgConfigureBladeRF2* messageToGUI = MsgConfigureBladeRF2::create(settings, QList{"centerFrequency"}, false); m_guiMessageQueue->push(messageToGUI); } } @@ -616,8 +616,7 @@ bool BladeRF2Input::handleMessage(const Message& message) MsgConfigureBladeRF2& conf = (MsgConfigureBladeRF2&) message; qDebug() << "BladeRF2Input::handleMessage: MsgConfigureBladeRF2"; - if (!applySettings(conf.getSettings(), conf.getForce())) - { + if (!applySettings(conf.getSettings(), conf.getSettingsKeys(), conf.getForce())) { qDebug("BladeRF2Input::handleMessage: MsgConfigureBladeRF2 config error"); } @@ -631,6 +630,7 @@ bool BladeRF2Input::handleMessage(const Message& message) int status; unsigned int tmp_uint; bool tmp_bool; + QList settingsKeys; // evaluate changes that may have been introduced by changes in a buddy @@ -644,6 +644,10 @@ bool BladeRF2Input::handleMessage(const Message& message) settings.m_LOppmTenths = report.getLOppmTenths(); settings.m_centerFrequency = report.getCenterFrequency(); settings.m_fcPos = (BladeRF2InputSettings::fcPos_t) report.getFcPos(); + settingsKeys.append("devSampleRate"); + settingsKeys.append("LOppmTenths"); + settingsKeys.append("centerFrequency"); + settingsKeys.append("fcPos"); BladeRF2InputThread *inputThread = findThread(); @@ -653,23 +657,32 @@ bool BladeRF2Input::handleMessage(const Message& message) status = bladerf_get_bandwidth(dev, BLADERF_CHANNEL_RX(requestedChannel), &tmp_uint); - if (status < 0) { + if (status < 0) + { qCritical("BladeRF2Input::handleMessage: MsgReportBuddyChange: bladerf_get_bandwidth error: %s", bladerf_strerror(status)); - } else { + } + else + { settings.m_bandwidth = tmp_uint; + settingsKeys.append("bandwidth"); } status = bladerf_get_bias_tee(dev, BLADERF_CHANNEL_RX(requestedChannel), &tmp_bool); - if (status < 0) { + if (status < 0) + { qCritical("BladeRF2Input::handleMessage: MsgReportBuddyChange: bladerf_get_bias_tee error: %s", bladerf_strerror(status)); - } else { + } + else + { settings.m_biasTee = tmp_bool; + settingsKeys.append("biasTee"); } } else // Tx buddy change: check for sample rate change only { settings.m_devSampleRate = report.getDevSampleRate(); + settingsKeys.append("devSampleRate"); // status = bladerf_get_sample_rate(dev, BLADERF_CHANNEL_RX(requestedChannel), &tmp_uint); // // if (status < 0) { @@ -708,12 +721,12 @@ bool BladeRF2Input::handleMessage(const Message& message) m_deviceAPI->getDeviceEngineInputMessageQueue()->push(notif); } - m_settings = settings; // acknowledge the new settings + m_settings.applySettings(settingsKeys, settings); // acknowledge the new settings // propagate settings to GUI if any if (getMessageQueueToGUI()) { - MsgConfigureBladeRF2 *reportToGUI = MsgConfigureBladeRF2::create(m_settings, false); + MsgConfigureBladeRF2 *reportToGUI = MsgConfigureBladeRF2::create(m_settings, settingsKeys, false); getMessageQueueToGUI()->push(reportToGUI); } } @@ -727,8 +740,7 @@ bool BladeRF2Input::handleMessage(const Message& message) if (cmd.getStartStop()) { - if (m_deviceAPI->initDeviceEngine()) - { + if (m_deviceAPI->initDeviceEngine()) { m_deviceAPI->startDeviceEngine(); } } @@ -749,8 +761,10 @@ bool BladeRF2Input::handleMessage(const Message& message) } } -bool BladeRF2Input::applySettings(const BladeRF2InputSettings& settings, bool force) +bool BladeRF2Input::applySettings(const BladeRF2InputSettings& settings, const QList& settingsKeys, bool force) { + qDebug() << "BladeRF2Input::applySettings: force:" << force << settings.getDebugString(settingsKeys, force); + bool forwardChangeOwnDSP = false; bool forwardChangeRxBuddies = false; bool forwardChangeTxBuddies = false; @@ -760,24 +774,15 @@ bool BladeRF2Input::applySettings(const BladeRF2InputSettings& settings, bool fo qint64 xlatedDeviceCenterFrequency = settings.m_centerFrequency; xlatedDeviceCenterFrequency -= settings.m_transverterMode ? settings.m_transverterDeltaFrequency : 0; xlatedDeviceCenterFrequency = xlatedDeviceCenterFrequency < 0 ? 0 : xlatedDeviceCenterFrequency; - QList reverseAPIKeys; - if ((m_settings.m_dcBlock != settings.m_dcBlock) || force) { - reverseAPIKeys.append("dcBlock"); - } - if ((m_settings.m_iqCorrection != settings.m_iqCorrection) || force) { - reverseAPIKeys.append("iqCorrection"); - } - - if ((m_settings.m_dcBlock != settings.m_dcBlock) || - (m_settings.m_iqCorrection != settings.m_iqCorrection) || force) + if (settingsKeys.contains("dcBlock") || + settingsKeys.contains("iqCorrection") || force) { m_deviceAPI->configureCorrections(settings.m_dcBlock, settings.m_iqCorrection); } - if ((m_settings.m_devSampleRate != settings.m_devSampleRate) || force) + if (settingsKeys.contains("devSampleRate") || force) { - reverseAPIKeys.append("devSampleRate"); forwardChangeOwnDSP = true; forwardChangeRxBuddies = true; forwardChangeTxBuddies = true; @@ -799,9 +804,8 @@ bool BladeRF2Input::applySettings(const BladeRF2InputSettings& settings, bool fo } } - if ((m_settings.m_bandwidth != settings.m_bandwidth) || force) + if (settingsKeys.contains("bandwidth") || force) { - reverseAPIKeys.append("bandwidth"); forwardChangeRxBuddies = true; if (dev != 0) @@ -821,9 +825,8 @@ bool BladeRF2Input::applySettings(const BladeRF2InputSettings& settings, bool fo } } - if ((m_settings.m_fcPos != settings.m_fcPos) || force) + if (settingsKeys.contains("fcPos") || force) { - reverseAPIKeys.append("fcPos"); BladeRF2InputThread *inputThread = findThread(); if (inputThread) @@ -833,9 +836,8 @@ bool BladeRF2Input::applySettings(const BladeRF2InputSettings& settings, bool fo } } - if ((m_settings.m_log2Decim != settings.m_log2Decim) || force) + if (settingsKeys.contains("log2Decim") || force) { - reverseAPIKeys.append("log2Decim"); forwardChangeOwnDSP = true; BladeRF2InputThread *inputThread = findThread(); @@ -846,9 +848,8 @@ bool BladeRF2Input::applySettings(const BladeRF2InputSettings& settings, bool fo } } - if ((m_settings.m_iqOrder != settings.m_iqOrder) || force) + if (settingsKeys.contains("iqOrder") || force) { - reverseAPIKeys.append("iqOrder"); BladeRF2InputThread *inputThread = findThread(); if (inputThread) { @@ -856,26 +857,13 @@ bool BladeRF2Input::applySettings(const BladeRF2InputSettings& settings, bool fo } } - if ((m_settings.m_centerFrequency != settings.m_centerFrequency) || force) { - reverseAPIKeys.append("centerFrequency"); - } - if ((m_settings.m_transverterMode != settings.m_transverterMode) || force) { - reverseAPIKeys.append("transverterMode"); - } - if ((m_settings.m_transverterDeltaFrequency != settings.m_transverterDeltaFrequency) || force) { - reverseAPIKeys.append("transverterDeltaFrequency"); - } - if ((m_settings.m_LOppmTenths != settings.m_LOppmTenths) || force) { - reverseAPIKeys.append("LOppmTenths"); - } - - if ((m_settings.m_centerFrequency != settings.m_centerFrequency) - || (m_settings.m_transverterMode != settings.m_transverterMode) - || (m_settings.m_transverterDeltaFrequency != settings.m_transverterDeltaFrequency) - || (m_settings.m_LOppmTenths != settings.m_LOppmTenths) - || (m_settings.m_devSampleRate != settings.m_devSampleRate) - || (m_settings.m_fcPos != settings.m_fcPos) - || (m_settings.m_log2Decim != settings.m_log2Decim) || force) + if (settingsKeys.contains("log2Decim") + || settingsKeys.contains("fcPos") + || settingsKeys.contains("devSampleRate") + || settingsKeys.contains("LOppmTenths") + || settingsKeys.contains("centerFrequency") + || settingsKeys.contains("transverterMode") + || settingsKeys.contains("transverterDeltaFrequency") || force) { qint64 deviceCenterFrequency = DeviceSampleSource::calculateDeviceCenterFrequency( xlatedDeviceCenterFrequency, @@ -905,16 +893,14 @@ bool BladeRF2Input::applySettings(const BladeRF2InputSettings& settings, bool fo } } - if ((m_settings.m_biasTee != settings.m_biasTee) || force) + if (settingsKeys.contains("biasTee") || force) { - reverseAPIKeys.append("biasTee"); forwardChangeRxBuddies = true; m_deviceShared.m_dev->setBiasTeeRx(settings.m_biasTee); } - if ((m_settings.m_gainMode != settings.m_gainMode) || force) + if (settingsKeys.contains("gainMode") || force) { - reverseAPIKeys.append("gainMode"); forwardChangeRxBuddies = true; if (dev) @@ -930,12 +916,8 @@ bool BladeRF2Input::applySettings(const BladeRF2InputSettings& settings, bool fo } } - if ((m_settings.m_globalGain != settings.m_globalGain) || force) { - reverseAPIKeys.append("globalGain"); - } - - if ((m_settings.m_globalGain != settings.m_globalGain) - || ((m_settings.m_gainMode != settings.m_gainMode) && (settings.m_gainMode == BLADERF_GAIN_MANUAL)) || force) + if (settingsKeys.contains("globalGain") + || (settingsKeys.contains("gainMode") && (settings.m_gainMode == BLADERF_GAIN_MANUAL)) || force) { forwardChangeRxBuddies = true; @@ -996,32 +978,20 @@ bool BladeRF2Input::applySettings(const BladeRF2InputSettings& settings, bool fo } } - if (settings.m_useReverseAPI) + if (settingsKeys.contains("useReverseAPI")) { - bool fullUpdate = ((m_settings.m_useReverseAPI != settings.m_useReverseAPI) && settings.m_useReverseAPI) || - (m_settings.m_reverseAPIAddress != settings.m_reverseAPIAddress) || - (m_settings.m_reverseAPIPort != settings.m_reverseAPIPort) || - (m_settings.m_reverseAPIDeviceIndex != settings.m_reverseAPIDeviceIndex); - webapiReverseSendSettings(reverseAPIKeys, settings, fullUpdate || force); + bool fullUpdate = (settingsKeys.contains("useReverseAPI") && settings.m_useReverseAPI) || + settingsKeys.contains("reverseAPIAddress") || + settingsKeys.contains("reverseAPIPort") || + settingsKeys.contains("reverseAPIDeviceIndex"); + webapiReverseSendSettings(settingsKeys, settings, fullUpdate || force); } - m_settings = settings; - - qDebug() << "BladeRF2Input::applySettings: " - << " m_transverterMode: " << m_settings.m_transverterMode - << " m_transverterDeltaFrequency: " << m_settings.m_transverterDeltaFrequency - << " m_centerFrequency: " << m_settings.m_centerFrequency << " Hz" - << " m_LOppmTenths: " << m_settings.m_LOppmTenths - << " m_bandwidth: " << m_settings.m_bandwidth - << " m_log2Decim: " << m_settings.m_log2Decim - << " m_iqOrder: " << m_settings.m_iqOrder - << " m_fcPos: " << m_settings.m_fcPos - << " m_devSampleRate: " << m_settings.m_devSampleRate - << " m_globalGain: " << m_settings.m_globalGain - << " m_gainMode: " << m_settings.m_gainMode - << " m_dcBlock: " << m_settings.m_dcBlock - << " m_iqCorrection: " << m_settings.m_iqCorrection - << " m_biasTee: " << m_settings.m_biasTee; + if (force) { + m_settings = settings; + } else { + m_settings.applySettings(settingsKeys, settings); + } return true; } @@ -1047,12 +1017,12 @@ int BladeRF2Input::webapiSettingsPutPatch( BladeRF2InputSettings settings = m_settings; webapiUpdateDeviceSettings(settings, deviceSettingsKeys, response); - MsgConfigureBladeRF2 *msg = MsgConfigureBladeRF2::create(settings, force); + MsgConfigureBladeRF2 *msg = MsgConfigureBladeRF2::create(settings, deviceSettingsKeys, force); m_inputMessageQueue.push(msg); if (m_guiMessageQueue) // forward to GUI if any { - MsgConfigureBladeRF2 *msgToGUI = MsgConfigureBladeRF2::create(settings, force); + MsgConfigureBladeRF2 *msgToGUI = MsgConfigureBladeRF2::create(settings, deviceSettingsKeys, force); m_guiMessageQueue->push(msgToGUI); } @@ -1243,7 +1213,7 @@ int BladeRF2Input::webapiRun( return 200; } -void BladeRF2Input::webapiReverseSendSettings(QList& deviceSettingsKeys, const BladeRF2InputSettings& settings, bool force) +void BladeRF2Input::webapiReverseSendSettings(const QList& deviceSettingsKeys, const BladeRF2InputSettings& settings, bool force) { SWGSDRangel::SWGDeviceSettings *swgDeviceSettings = new SWGSDRangel::SWGDeviceSettings(); swgDeviceSettings->setDirection(0); // single Rx diff --git a/plugins/samplesource/bladerf2input/bladerf2input.h b/plugins/samplesource/bladerf2input/bladerf2input.h index 5d2e9b140..b90a5cbfe 100644 --- a/plugins/samplesource/bladerf2input/bladerf2input.h +++ b/plugins/samplesource/bladerf2input/bladerf2input.h @@ -43,20 +43,23 @@ public: public: const BladeRF2InputSettings& getSettings() const { return m_settings; } + const QList& getSettingsKeys() const { return m_settingsKeys; } bool getForce() const { return m_force; } - static MsgConfigureBladeRF2* create(const BladeRF2InputSettings& settings, bool force) + static MsgConfigureBladeRF2* create(const BladeRF2InputSettings& settings, const QList& settingsKeys, bool force) { - return new MsgConfigureBladeRF2(settings, force); + return new MsgConfigureBladeRF2(settings, settingsKeys, force); } private: BladeRF2InputSettings m_settings; + QList m_settingsKeys; bool m_force; - MsgConfigureBladeRF2(const BladeRF2InputSettings& settings, bool force) : + MsgConfigureBladeRF2(const BladeRF2InputSettings& settings, const QList& settingsKeys, bool force) : Message(), m_settings(settings), + m_settingsKeys(settingsKeys), m_force(force) { } }; @@ -190,10 +193,10 @@ private: void closeDevice(); BladeRF2InputThread *findThread(); void moveThreadToBuddy(); - bool applySettings(const BladeRF2InputSettings& settings, bool force = false); + bool applySettings(const BladeRF2InputSettings& settings, const QList& settingsKeys, bool force = false); bool setDeviceCenterFrequency(struct bladerf *dev, int requestedChannel, quint64 freq_hz, int loPpmTenths); void webapiFormatDeviceReport(SWGSDRangel::SWGDeviceReport& response); - void webapiReverseSendSettings(QList& deviceSettingsKeys, const BladeRF2InputSettings& settings, bool force); + void webapiReverseSendSettings(const QList& deviceSettingsKeys, const BladeRF2InputSettings& settings, bool force); void webapiReverseSendStartStop(bool start); private slots: diff --git a/plugins/samplesource/bladerf2input/bladerf2inputgui.cpp b/plugins/samplesource/bladerf2input/bladerf2inputgui.cpp index 577fefaa6..9c2ff6ed2 100644 --- a/plugins/samplesource/bladerf2input/bladerf2inputgui.cpp +++ b/plugins/samplesource/bladerf2input/bladerf2inputgui.cpp @@ -118,6 +118,7 @@ void BladeRF2InputGui::resetToDefaults() { m_settings.resetToDefaults(); displaySettings(); + m_forceSettings = true; sendSettings(); } @@ -184,7 +185,13 @@ bool BladeRF2InputGui::handleMessage(const Message& message) if (BladeRF2Input::MsgConfigureBladeRF2::match(message)) { const BladeRF2Input::MsgConfigureBladeRF2& cfg = (BladeRF2Input::MsgConfigureBladeRF2&) message; - m_settings = cfg.getSettings(); + + if (cfg.getForce()) { + m_settings = cfg.getSettings(); + } else { + m_settings.applySettings(cfg.getSettingsKeys(), cfg.getSettings()); + } + blockApplySettings(true); m_sampleSource->getGlobalGainRange(m_gainMin, m_gainMax, m_gainStep, m_gainScale); ui->gain->setMinimum(m_gainMin/m_gainStep); @@ -351,6 +358,7 @@ void BladeRF2InputGui::sendSettings() void BladeRF2InputGui::on_centerFrequency_changed(quint64 value) { m_settings.m_centerFrequency = value * 1000; + m_settingsKeys.append("centerFrequency"); sendSettings(); } @@ -358,6 +366,7 @@ void BladeRF2InputGui::on_LOppm_valueChanged(int value) { ui->LOppmText->setText(QString("%1").arg(QString::number(value/10.0, 'f', 1))); m_settings.m_LOppmTenths = value; + m_settingsKeys.append("LOppmTenths"); sendSettings(); } @@ -370,30 +379,35 @@ void BladeRF2InputGui::on_sampleRate_changed(quint64 value) } displayFcTooltip(); + m_settingsKeys.append("devSampleRate"); sendSettings(); } void BladeRF2InputGui::on_dcOffset_toggled(bool checked) { m_settings.m_dcBlock = checked; + m_settingsKeys.append("dcBlock"); sendSettings(); } void BladeRF2InputGui::on_iqImbalance_toggled(bool checked) { m_settings.m_iqCorrection = checked; + m_settingsKeys.append("iqCorrection"); sendSettings(); } void BladeRF2InputGui::on_biasTee_toggled(bool checked) { m_settings.m_biasTee = checked; + m_settingsKeys.append("biasTee"); sendSettings(); } void BladeRF2InputGui::on_bandwidth_changed(quint64 value) { m_settings.m_bandwidth = value * 1000; + m_settingsKeys.append("bandwidth"); sendSettings(); } @@ -412,6 +426,8 @@ void BladeRF2InputGui::on_decim_currentIndexChanged(int index) m_settings.m_devSampleRate = ui->sampleRate->getValueNew() * (1 << m_settings.m_log2Decim); } + m_settingsKeys.append("log2Decim"); + m_settingsKeys.append("devSampleRate"); sendSettings(); } @@ -419,6 +435,7 @@ void BladeRF2InputGui::on_fcPos_currentIndexChanged(int index) { m_settings.m_fcPos = (BladeRF2InputSettings::fcPos_t) (index < 0 ? 0 : index > 2 ? 2 : index); displayFcTooltip(); + m_settingsKeys.append("fcPos"); sendSettings(); } @@ -436,6 +453,7 @@ void BladeRF2InputGui::on_gainMode_currentIndexChanged(int index) if (mode.m_value == BLADERF_GAIN_MANUAL) { m_settings.m_globalGain = ui->gain->value(); + m_settingsKeys.append("globalGain"); ui->gain->setEnabled(true); } else { ui->gain->setEnabled(false); @@ -443,6 +461,7 @@ void BladeRF2InputGui::on_gainMode_currentIndexChanged(int index) } m_settings.m_gainMode = mode.m_value; + m_settingsKeys.append("gainMode"); sendSettings(); } } @@ -452,6 +471,7 @@ void BladeRF2InputGui::on_gain_valueChanged(int value) float displayableGain = getGainDB(value); ui->gainText->setText(tr("%1 dB").arg(QString::number(displayableGain, 'f', 2))); m_settings.m_globalGain = (int) displayableGain; + m_settingsKeys.append("globalGain"); sendSettings(); } @@ -463,6 +483,9 @@ void BladeRF2InputGui::on_transverter_clicked() qDebug("BladeRF2InputGui::on_transverter_clicked: %lld Hz %s", m_settings.m_transverterDeltaFrequency, m_settings.m_transverterMode ? "on" : "off"); updateFrequencyLimits(); setCenterFrequencySetting(ui->centerFrequency->getValueNew()); + m_settingsKeys.append("transverterMode"); + m_settingsKeys.append("transverterDeltaFrequency"); + m_settingsKeys.append("iqOrder"); sendSettings(); } @@ -486,9 +509,10 @@ void BladeRF2InputGui::updateHardware() if (m_doApplySettings) { qDebug() << "BladeRF2InputGui::updateHardware"; - BladeRF2Input::MsgConfigureBladeRF2* message = BladeRF2Input::MsgConfigureBladeRF2::create(m_settings, m_forceSettings); + BladeRF2Input::MsgConfigureBladeRF2* message = BladeRF2Input::MsgConfigureBladeRF2::create(m_settings, m_settingsKeys, m_forceSettings); m_sampleSource->getInputMessageQueue()->push(message); m_forceSettings = false; + m_settingsKeys.clear(); m_updateTimer.stop(); } } @@ -545,6 +569,11 @@ void BladeRF2InputGui::openDeviceSettingsDialog(const QPoint& p) m_settings.m_reverseAPIPort = dialog.getReverseAPIPort(); m_settings.m_reverseAPIDeviceIndex = dialog.getReverseAPIDeviceIndex(); + m_settingsKeys.append("useReverseAPI"); + m_settingsKeys.append("reverseAPIAddress"); + m_settingsKeys.append("reverseAPIPort"); + m_settingsKeys.append("reverseAPIDeviceIndex"); + sendSettings(); } diff --git a/plugins/samplesource/bladerf2input/bladerf2inputgui.h b/plugins/samplesource/bladerf2input/bladerf2inputgui.h index 517e21f3e..62b6a1b0f 100644 --- a/plugins/samplesource/bladerf2input/bladerf2inputgui.h +++ b/plugins/samplesource/bladerf2input/bladerf2inputgui.h @@ -51,6 +51,7 @@ private: bool m_forceSettings; bool m_doApplySettings; BladeRF2InputSettings m_settings; + QList m_settingsKeys; bool m_sampleRateMode; //!< true: device, false: base band sample rate update mode QTimer m_updateTimer; QTimer m_statusTimer; diff --git a/plugins/samplesource/bladerf2input/bladerf2inputsettings.cpp b/plugins/samplesource/bladerf2input/bladerf2inputsettings.cpp index 17c975f62..0f748fd13 100644 --- a/plugins/samplesource/bladerf2input/bladerf2inputsettings.cpp +++ b/plugins/samplesource/bladerf2input/bladerf2inputsettings.cpp @@ -122,4 +122,119 @@ bool BladeRF2InputSettings::deserialize(const QByteArray& data) } } +void BladeRF2InputSettings::applySettings(const QStringList& settingsKeys, const BladeRF2InputSettings& settings) +{ + if (settingsKeys.contains("centerFrequency")) { + m_centerFrequency = settings.m_centerFrequency; + } + if (settingsKeys.contains("LOppmTenths")) { + m_LOppmTenths = settings.m_LOppmTenths; + } + if (settingsKeys.contains("devSampleRate")) { + m_devSampleRate = settings.m_devSampleRate; + } + if (settingsKeys.contains("bandwidth")) { + m_bandwidth = settings.m_bandwidth; + } + if (settingsKeys.contains("gainMode")) { + m_gainMode = settings.m_gainMode; + } + if (settingsKeys.contains("globalGain")) { + m_globalGain = settings.m_globalGain; + } + if (settingsKeys.contains("biasTee")) { + m_biasTee = settings.m_biasTee; + } + if (settingsKeys.contains("log2Decim")) { + m_log2Decim = settings.m_log2Decim; + } + if (settingsKeys.contains("fcPos")) { + m_fcPos = settings.m_fcPos; + } + if (settingsKeys.contains("dcBlock")) { + m_dcBlock = settings.m_dcBlock; + } + if (settingsKeys.contains("transverterMode")) { + m_transverterMode = settings.m_transverterMode; + } + if (settingsKeys.contains("transverterDeltaFrequency")) { + m_transverterDeltaFrequency = settings.m_transverterDeltaFrequency; + } + if (settingsKeys.contains("iqOrder")) { + m_iqOrder = settings.m_iqOrder; + } + if (settingsKeys.contains("useReverseAPI")) { + m_useReverseAPI = settings.m_useReverseAPI; + } + if (settingsKeys.contains("reverseAPIAddress")) { + m_reverseAPIAddress = settings.m_reverseAPIAddress; + } + if (settingsKeys.contains("reverseAPIPort")) { + m_reverseAPIPort = settings.m_reverseAPIPort; + } + if (settingsKeys.contains("reverseAPIDeviceIndex")) { + m_reverseAPIDeviceIndex = settings.m_reverseAPIDeviceIndex; + } +} +QString BladeRF2InputSettings::getDebugString(const QStringList& settingsKeys, bool force) const +{ + std::ostringstream ostr; + + if (settingsKeys.contains("centerFrequency") || force) { + ostr << " m_centerFrequency: " << m_centerFrequency; + } + if (settingsKeys.contains("LOppmTenths") || force) { + ostr << " m_LOppmTenths: " << m_LOppmTenths; + } + if (settingsKeys.contains("devSampleRate") || force) { + ostr << " m_devSampleRate: " << m_devSampleRate; + } + if (settingsKeys.contains("bandwidth") || force) { + ostr << " m_bandwidth: " << m_bandwidth; + } + if (settingsKeys.contains("gainMode") || force) { + ostr << " m_gainMode: " << m_gainMode; + } + if (settingsKeys.contains("globalGain") || force) { + ostr << " m_globalGain: " << m_globalGain; + } + if (settingsKeys.contains("biasTee") || force) { + ostr << " m_biasTee: " << m_biasTee; + } + if (settingsKeys.contains("log2Decim") || force) { + ostr << " m_log2Decim: " << m_log2Decim; + } + if (settingsKeys.contains("fcPos") || force) { + ostr << " m_fcPos: " << m_fcPos; + } + if (settingsKeys.contains("dcBlock") || force) { + ostr << " m_dcBlock: " << m_dcBlock; + } + if (settingsKeys.contains("iqCorrection") || force) { + ostr << " m_iqCorrection: " << m_iqCorrection; + } + if (settingsKeys.contains("transverterMode") || force) { + ostr << " m_transverterMode: " << m_transverterMode; + } + if (settingsKeys.contains("transverterDeltaFrequency") || force) { + ostr << " m_transverterDeltaFrequency: " << m_transverterDeltaFrequency; + } + if (settingsKeys.contains("iqOrder") || force) { + ostr << " m_iqOrder: " << m_iqOrder; + } + if (settingsKeys.contains("useReverseAPI") || force) { + ostr << " m_useReverseAPI: " << m_useReverseAPI; + } + if (settingsKeys.contains("reverseAPIAddress") || force) { + ostr << " m_reverseAPIAddress: " << m_reverseAPIAddress.toStdString(); + } + if (settingsKeys.contains("reverseAPIPort") || force) { + ostr << " m_reverseAPIPort: " << m_reverseAPIPort; + } + if (settingsKeys.contains("reverseAPIDeviceIndex") || force) { + ostr << " m_reverseAPIDeviceIndex: " << m_reverseAPIDeviceIndex; + } + + return QString(ostr.str().c_str()); +} diff --git a/plugins/samplesource/bladerf2input/bladerf2inputsettings.h b/plugins/samplesource/bladerf2input/bladerf2inputsettings.h index 6fb1a2952..2413638ba 100644 --- a/plugins/samplesource/bladerf2input/bladerf2inputsettings.h +++ b/plugins/samplesource/bladerf2input/bladerf2inputsettings.h @@ -51,6 +51,8 @@ struct BladeRF2InputSettings { void resetToDefaults(); QByteArray serialize() const; bool deserialize(const QByteArray& data); + void applySettings(const QStringList& settingsKeys, const BladeRF2InputSettings& settings); + QString getDebugString(const QStringList& settingsKeys, bool force=false) const; };