diff --git a/plugins/channelmimo/beamsteeringcwmod/beamsteeringcwmod.cpp b/plugins/channelmimo/beamsteeringcwmod/beamsteeringcwmod.cpp index e2c0952d7..c510b7cc1 100644 --- a/plugins/channelmimo/beamsteeringcwmod/beamsteeringcwmod.cpp +++ b/plugins/channelmimo/beamsteeringcwmod/beamsteeringcwmod.cpp @@ -118,7 +118,7 @@ void BeamSteeringCWMod::startSources() m_basebandSource->getInputMessageQueue()->push(sig); BeamSteeringCWModBaseband::MsgConfigureBeamSteeringCWModBaseband *msg = BeamSteeringCWModBaseband::MsgConfigureBeamSteeringCWModBaseband::create( - m_settings, true); + QStringList(), m_settings, true); m_basebandSource->getInputMessageQueue()->push(msg); } @@ -152,42 +152,13 @@ void BeamSteeringCWMod::feed(const SampleVector::const_iterator& begin, const Sa (void) sinkIndex; } -void BeamSteeringCWMod::applySettings(const BeamSteeringCWModSettings& settings, bool force) +void BeamSteeringCWMod::applySettings(const QStringList& settingsKeys, const BeamSteeringCWModSettings& settings, bool force) { - qDebug() << "BeamSteeringCWMod::applySettings: " - << "m_steerDegrees: " << settings.m_steerDegrees - << "m_channelOutput: " << settings.m_channelOutput - << "m_filterChainHash: " << settings.m_filterChainHash - << "m_log2Interp: " << settings.m_log2Interp - << "m_filterChainHash: " << settings.m_filterChainHash - << "m_useReverseAPI: " << settings.m_useReverseAPI - << "m_reverseAPIAddress: " << settings.m_reverseAPIAddress - << "m_reverseAPIPort: " << settings.m_reverseAPIPort - << "m_reverseAPIDeviceIndex: " << settings.m_reverseAPIDeviceIndex - << "m_reverseAPIChannelIndex: " << settings.m_reverseAPIChannelIndex - << "m_title: " << settings.m_title; - - QList reverseAPIKeys; - - if ((m_settings.m_steerDegrees != settings.m_steerDegrees) || force) { - reverseAPIKeys.append("steerDegrees"); - } - if ((m_settings.m_channelOutput != settings.m_channelOutput) || force) { - reverseAPIKeys.append("channelOutput"); - } - if ((m_settings.m_filterChainHash != settings.m_filterChainHash) || force) { - reverseAPIKeys.append("filterChainHash"); - } - if ((m_settings.m_log2Interp != settings.m_log2Interp) || force) { - reverseAPIKeys.append("log2Interp"); - } - if ((m_settings.m_filterChainHash != settings.m_filterChainHash) || force) { - reverseAPIKeys.append("filterChainHash"); - } + qDebug() << "BeamSteeringCWMod::applySettings: " << settings.getDebugString(settingsKeys, force); if (m_running) { - BeamSteeringCWModBaseband::MsgConfigureBeamSteeringCWModBaseband *msg = BeamSteeringCWModBaseband::MsgConfigureBeamSteeringCWModBaseband::create(settings, force); + BeamSteeringCWModBaseband::MsgConfigureBeamSteeringCWModBaseband *msg = BeamSteeringCWModBaseband::MsgConfigureBeamSteeringCWModBaseband::create(settingsKeys, settings, force); m_basebandSource->getInputMessageQueue()->push(msg); } @@ -195,10 +166,14 @@ void BeamSteeringCWMod::applySettings(const BeamSteeringCWModSettings& settings, MainCore::instance()->getMessagePipes().getMessagePipes(this, "settings", pipes); if (!pipes.empty()) { - sendChannelSettings(pipes, reverseAPIKeys, settings, force); + sendChannelSettings(pipes, settingsKeys, settings, force); } - m_settings = settings; + if (force) { + m_settings = settings; + } else { + m_settings.applySettings(settingsKeys, settings); + } } void BeamSteeringCWMod::handleInputMessages() @@ -220,7 +195,7 @@ bool BeamSteeringCWMod::handleMessage(const Message& cmd) { auto& cfg = (const MsgConfigureBeamSteeringCWMod&) cmd; qDebug() << "BeamSteeringCWMod::handleMessage: MsgConfigureBeamSteeringCWMod"; - applySettings(cfg.getSettings(), cfg.getForce()); + applySettings(cfg.getSettingsKeys(), cfg.getSettings(), cfg.getForce()); return true; } else if (DSPMIMOSignalNotification::match(cmd)) @@ -274,14 +249,14 @@ bool BeamSteeringCWMod::deserialize(const QByteArray& data) (void) data; if (m_settings.deserialize(data)) { - MsgConfigureBeamSteeringCWMod *msg = MsgConfigureBeamSteeringCWMod::create(m_settings, true); + MsgConfigureBeamSteeringCWMod *msg = MsgConfigureBeamSteeringCWMod::create(QStringList(), m_settings, true); m_inputMessageQueue.push(msg); return true; } else { m_settings.resetToDefaults(); - MsgConfigureBeamSteeringCWMod *msg = MsgConfigureBeamSteeringCWMod::create(m_settings, true); + MsgConfigureBeamSteeringCWMod *msg = MsgConfigureBeamSteeringCWMod::create(QStringList(), m_settings, true); m_inputMessageQueue.push(msg); return false; } @@ -334,12 +309,12 @@ int BeamSteeringCWMod::webapiSettingsPutPatch( BeamSteeringCWModSettings settings = m_settings; webapiUpdateChannelSettings(settings, channelSettingsKeys, response); - MsgConfigureBeamSteeringCWMod *msg = MsgConfigureBeamSteeringCWMod::create(settings, force); + MsgConfigureBeamSteeringCWMod *msg = MsgConfigureBeamSteeringCWMod::create(channelSettingsKeys, settings, force); m_inputMessageQueue.push(msg); if (getMessageQueueToGUI()) // forward to GUI if any { - MsgConfigureBeamSteeringCWMod *msgToGUI = MsgConfigureBeamSteeringCWMod::create(settings, force); + MsgConfigureBeamSteeringCWMod *msgToGUI = MsgConfigureBeamSteeringCWMod::create(channelSettingsKeys, settings, force); getMessageQueueToGUI()->push(msgToGUI); } diff --git a/plugins/channelmimo/beamsteeringcwmod/beamsteeringcwmod.h b/plugins/channelmimo/beamsteeringcwmod/beamsteeringcwmod.h index e676afc5e..b0e68ddfb 100644 --- a/plugins/channelmimo/beamsteeringcwmod/beamsteeringcwmod.h +++ b/plugins/channelmimo/beamsteeringcwmod/beamsteeringcwmod.h @@ -45,20 +45,23 @@ public: public: const BeamSteeringCWModSettings& getSettings() const { return m_settings; } + const QStringList& getSettingsKeys() const { return m_settingsKeys; } bool getForce() const { return m_force; } - static MsgConfigureBeamSteeringCWMod* create(const BeamSteeringCWModSettings& settings, bool force) + static MsgConfigureBeamSteeringCWMod* create(const QStringList& settingsKeys, const BeamSteeringCWModSettings& settings, bool force) { - return new MsgConfigureBeamSteeringCWMod(settings, force); + return new MsgConfigureBeamSteeringCWMod(settingsKeys, settings, force); } private: BeamSteeringCWModSettings m_settings; + QStringList m_settingsKeys; bool m_force; - MsgConfigureBeamSteeringCWMod(const BeamSteeringCWModSettings& settings, bool force) : + MsgConfigureBeamSteeringCWMod(const QStringList& settingsKeys, const BeamSteeringCWModSettings& settings, bool force) : Message(), m_settings(settings), + m_settingsKeys(settingsKeys), m_force(force) { } }; @@ -164,7 +167,7 @@ private: uint32_t m_basebandSampleRate; bool handleMessage(const Message& cmd) final; //!< Processing of a message. Returns true if message has actually been processed - void applySettings(const BeamSteeringCWModSettings& settings, bool force = false); + void applySettings(const QStringList& settingsKeys, const BeamSteeringCWModSettings& settings, bool force = false); static void validateFilterChainHash(BeamSteeringCWModSettings& settings); void calculateFrequencyOffset(); void webapiReverseSendSettings(const QList& channelSettingsKeys, const BeamSteeringCWModSettings& settings, bool force); diff --git a/plugins/channelmimo/beamsteeringcwmod/beamsteeringcwmodbaseband.cpp b/plugins/channelmimo/beamsteeringcwmod/beamsteeringcwmodbaseband.cpp index 72e31d48c..faacdbe4a 100644 --- a/plugins/channelmimo/beamsteeringcwmod/beamsteeringcwmodbaseband.cpp +++ b/plugins/channelmimo/beamsteeringcwmod/beamsteeringcwmodbaseband.cpp @@ -170,7 +170,7 @@ bool BeamSteeringCWModBaseband::handleMessage(const Message& cmd) MsgConfigureBeamSteeringCWModBaseband& cfg = (MsgConfigureBeamSteeringCWModBaseband&) cmd; qDebug() << "BeamSteeringCWModBaseband::handleMessage: MsgConfigureBeamSteeringCWModBaseband"; - applySettings(cfg.getSettings(), cfg.getForce()); + applySettings(cfg.getSettingsKeys(), cfg.getSettings(), cfg.getForce()); return true; } @@ -200,9 +200,9 @@ bool BeamSteeringCWModBaseband::handleMessage(const Message& cmd) } } -void BeamSteeringCWModBaseband::applySettings(const BeamSteeringCWModSettings& settings, bool force) +void BeamSteeringCWModBaseband::applySettings(const QStringList& settingsKeys, const BeamSteeringCWModSettings& settings, bool force) { - if ((m_settings.m_filterChainHash != settings.m_filterChainHash) || (m_settings.m_log2Interp != settings.m_log2Interp) || force) + if ((settingsKeys.contains("filterChainHash") && (m_settings.m_filterChainHash != settings.m_filterChainHash)) || (settingsKeys.contains("log2Interp") && (m_settings.m_log2Interp != settings.m_log2Interp)) || force) { for (int i = 0; i < 2; i++) { @@ -211,14 +211,14 @@ void BeamSteeringCWModBaseband::applySettings(const BeamSteeringCWModSettings& s } } - if ((m_settings.m_steerDegrees != settings.m_steerDegrees) || force) + if ((settingsKeys.contains("steerDegrees") && (m_settings.m_steerDegrees != settings.m_steerDegrees)) || force) { float steeringAngle = settings.m_steerDegrees / 180.0f; steeringAngle = steeringAngle < -M_PI ? -M_PI : steeringAngle > M_PI ? M_PI : steeringAngle; m_streamSources[1].setPhase(M_PI*cos(steeringAngle)); } - if ((m_settings.m_channelOutput != settings.m_channelOutput) || force) + if ((settingsKeys.contains("channelOutput") && (m_settings.m_channelOutput != settings.m_channelOutput)) || force) { if (settings.m_channelOutput == 0) { @@ -242,5 +242,9 @@ void BeamSteeringCWModBaseband::applySettings(const BeamSteeringCWModSettings& s } } - m_settings = settings; + if (force) { + m_settings = settings; + } else { + m_settings.applySettings(settingsKeys, settings); + } } diff --git a/plugins/channelmimo/beamsteeringcwmod/beamsteeringcwmodbaseband.h b/plugins/channelmimo/beamsteeringcwmod/beamsteeringcwmodbaseband.h index b6a45ac9b..84da2fdb5 100644 --- a/plugins/channelmimo/beamsteeringcwmod/beamsteeringcwmodbaseband.h +++ b/plugins/channelmimo/beamsteeringcwmod/beamsteeringcwmodbaseband.h @@ -39,20 +39,23 @@ public: public: const BeamSteeringCWModSettings& getSettings() const { return m_settings; } + const QStringList& getSettingsKeys() const { return m_settingsKeys; } bool getForce() const { return m_force; } - static MsgConfigureBeamSteeringCWModBaseband* create(const BeamSteeringCWModSettings& settings, bool force) + static MsgConfigureBeamSteeringCWModBaseband* create(const QStringList& settingsKeys, const BeamSteeringCWModSettings& settings, bool force) { - return new MsgConfigureBeamSteeringCWModBaseband(settings, force); + return new MsgConfigureBeamSteeringCWModBaseband(settingsKeys, settings, force); } private: BeamSteeringCWModSettings m_settings; + QStringList m_settingsKeys; bool m_force; - MsgConfigureBeamSteeringCWModBaseband(const BeamSteeringCWModSettings& settings, bool force) : + MsgConfigureBeamSteeringCWModBaseband(const QStringList& settingsKeys, const BeamSteeringCWModSettings& settings, bool force) : Message(), m_settings(settings), + m_settingsKeys(settingsKeys), m_force(force) { } }; @@ -85,7 +88,7 @@ public: private: void processFifo(std::vector& data, unsigned int ibegin, unsigned int iend); bool handleMessage(const Message& cmd); - void applySettings(const BeamSteeringCWModSettings& settings, bool force = false); + void applySettings(const QStringList& settingsKeys, const BeamSteeringCWModSettings& settings, bool force = false); BeamSteeringCWModSettings m_settings; SampleMOFifo m_sampleMOFifo; diff --git a/plugins/channelmimo/beamsteeringcwmod/beamsteeringcwmodgui.cpp b/plugins/channelmimo/beamsteeringcwmod/beamsteeringcwmodgui.cpp index 1ead0427e..3a9c1292b 100644 --- a/plugins/channelmimo/beamsteeringcwmod/beamsteeringcwmodgui.cpp +++ b/plugins/channelmimo/beamsteeringcwmod/beamsteeringcwmodgui.cpp @@ -38,7 +38,7 @@ void BeamSteeringCWModGUI::resetToDefaults() { m_settings.resetToDefaults(); displaySettings(); - applySettings(true); + applySettings(QStringList(), true); } QByteArray BeamSteeringCWModGUI::serialize() const @@ -50,7 +50,7 @@ bool BeamSteeringCWModGUI::deserialize(const QByteArray& data) { if(m_settings.deserialize(data)) { displaySettings(); - applySettings(true); + applySettings(QStringList(), true); return true; } else { resetToDefaults(); @@ -128,7 +128,7 @@ BeamSteeringCWModGUI::BeamSteeringCWModGUI(PluginAPI* pluginAPI, DeviceUISet *de displaySettings(); makeUIConnections(); displayRateAndShift(); - applySettings(true); + applySettings(QStringList(), true); m_resizer.enableChildMouseTracking(); } @@ -142,13 +142,13 @@ void BeamSteeringCWModGUI::blockApplySettings(bool block) m_doApplySettings = !block; } -void BeamSteeringCWModGUI::applySettings(bool force) +void BeamSteeringCWModGUI::applySettings(const QStringList& settingsKeys, bool force) { if (m_doApplySettings) { setTitleColor(m_channelMarker.getColor()); - BeamSteeringCWMod::MsgConfigureBeamSteeringCWMod* message = BeamSteeringCWMod::MsgConfigureBeamSteeringCWMod::create(m_settings, force); + BeamSteeringCWMod::MsgConfigureBeamSteeringCWMod* message = BeamSteeringCWMod::MsgConfigureBeamSteeringCWMod::create(settingsKeys, m_settings, force); m_bsCWSource->getInputMessageQueue()->push(message); } } @@ -216,7 +216,7 @@ void BeamSteeringCWModGUI::onWidgetRolled(const QWidget* widget, bool rollDown) (void) rollDown; getRollupContents()->saveState(m_rollupState); - applySettings(); + applySettings(QStringList()); } void BeamSteeringCWModGUI::onMenuDialogCalled(const QPoint &p) @@ -247,7 +247,15 @@ void BeamSteeringCWModGUI::onMenuDialogCalled(const QPoint &p) setTitle(m_channelMarker.getTitle()); setTitleColor(m_settings.m_rgbColor); - applySettings(); + applySettings(QStringList({ + "rgbColor", + "title", + "useReverseAPI", + "reverseAPIAddress", + "reverseAPIPort", + "reverseAPIDeviceIndex", + "reverseAPIChannelIndex" + })); } resetContextMenuType(); @@ -256,7 +264,7 @@ void BeamSteeringCWModGUI::onMenuDialogCalled(const QPoint &p) void BeamSteeringCWModGUI::on_channelOutput_currentIndexChanged(int index) { m_settings.m_channelOutput = index; - applySettings(); + applySettings(QStringList("channelOutput")); } void BeamSteeringCWModGUI::on_interpolationFactor_currentIndexChanged(int index) @@ -275,7 +283,7 @@ void BeamSteeringCWModGUI::on_steeringDegrees_valueChanged(int value) { m_settings.m_steerDegrees = value; ui->steeringDegreesText->setText(tr("%1").arg(m_settings.m_steerDegrees)); - applySettings(); + applySettings(QStringList("steerDegrees")); } void BeamSteeringCWModGUI::applyInterpolation() @@ -301,7 +309,7 @@ void BeamSteeringCWModGUI::applyPosition() displayRateAndShift(); updateAbsoluteCenterFrequency(); - applySettings(); + applySettings(QStringList({"filterChainHash", "log2Interp"})); } void BeamSteeringCWModGUI::tick() diff --git a/plugins/channelmimo/beamsteeringcwmod/beamsteeringcwmodgui.h b/plugins/channelmimo/beamsteeringcwmod/beamsteeringcwmodgui.h index 643e66e2f..a08a7dcbe 100644 --- a/plugins/channelmimo/beamsteeringcwmod/beamsteeringcwmodgui.h +++ b/plugins/channelmimo/beamsteeringcwmod/beamsteeringcwmodgui.h @@ -84,7 +84,7 @@ private: ~BeamSteeringCWModGUI() final; void blockApplySettings(bool block); - void applySettings(bool force = false); + void applySettings(const QStringList& settingsKeys, bool force = false); void displaySettings(); void displayRateAndShift(); bool handleMessage(const Message& message); diff --git a/plugins/channelmimo/beamsteeringcwmod/beamsteeringcwmodsettings.cpp b/plugins/channelmimo/beamsteeringcwmod/beamsteeringcwmodsettings.cpp index 710adf401..408adda69 100644 --- a/plugins/channelmimo/beamsteeringcwmod/beamsteeringcwmodsettings.cpp +++ b/plugins/channelmimo/beamsteeringcwmod/beamsteeringcwmodsettings.cpp @@ -134,7 +134,95 @@ bool BeamSteeringCWModSettings::deserialize(const QByteArray& data) } } +void BeamSteeringCWModSettings::applySettings(const QStringList& settingsKeys, const BeamSteeringCWModSettings& settings) +{ + if (settingsKeys.contains("steerDegrees")) { + m_steerDegrees = settings.m_steerDegrees; + } + if (settingsKeys.contains("rgbColor")) { + m_rgbColor = settings.m_rgbColor; + } + if (settingsKeys.contains("title")) { + m_title = settings.m_title; + } + if (settingsKeys.contains("log2Interp")) { + m_log2Interp = settings.m_log2Interp; + } + if (settingsKeys.contains("filterChainHash")) { + m_filterChainHash = settings.m_filterChainHash; + } + if (settingsKeys.contains("channelOutput")) { + m_channelOutput = settings.m_channelOutput; + } + 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; + } + if (settingsKeys.contains("reverseAPIChannelIndex")) { + m_reverseAPIChannelIndex = settings.m_reverseAPIChannelIndex; + } + if (settingsKeys.contains("workspaceIndex")) { + m_workspaceIndex = settings.m_workspaceIndex; + } + if (settingsKeys.contains("geometryBytes")) { + m_geometryBytes = settings.m_geometryBytes; + } + if (settingsKeys.contains("hidden")) { + m_hidden = settings.m_hidden; + } +} +QString BeamSteeringCWModSettings::getDebugString(const QStringList& settingsKeys, bool force) const +{ + std::ostringstream ostr; + if (settingsKeys.contains("steerDegrees") || force) { + ostr << " m_steerDegrees: " << m_steerDegrees; + } + if (settingsKeys.contains("rgbColor") || force) { + ostr << " m_rgbColor: " << m_rgbColor; + } + if (settingsKeys.contains("title") || force) { + ostr << " m_title: " << m_title.toStdString(); + } + if (settingsKeys.contains("log2Interp") || force) { + ostr << " m_log2Interp: " << m_log2Interp; + } + if (settingsKeys.contains("filterChainHash") || force) { + ostr << " m_filterChainHash: " << m_filterChainHash; + } + if (settingsKeys.contains("channelOutput") || force) { + ostr << " m_channelOutput: " << m_channelOutput; + } + 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; + } + if (settingsKeys.contains("reverseAPIChannelIndex") || force) { + ostr << " m_reverseAPIChannelIndex: " << m_reverseAPIChannelIndex; + } + if (settingsKeys.contains("workspaceIndex") || force) { + ostr << " m_workspaceIndex: " << m_workspaceIndex; + } + if (settingsKeys.contains("hidden") || force) { + ostr << " m_hidden: " << m_hidden; + } - + return QString(ostr.str().c_str()); +} diff --git a/plugins/channelmimo/beamsteeringcwmod/beamsteeringcwmodsettings.h b/plugins/channelmimo/beamsteeringcwmod/beamsteeringcwmodsettings.h index b5c2e6bfd..9d13b6037 100644 --- a/plugins/channelmimo/beamsteeringcwmod/beamsteeringcwmodsettings.h +++ b/plugins/channelmimo/beamsteeringcwmod/beamsteeringcwmodsettings.h @@ -52,6 +52,8 @@ struct BeamSteeringCWModSettings void setRollupState(Serializable *RollupState) { m_rollupState = RollupState; } QByteArray serialize() const; bool deserialize(const QByteArray& data); + void applySettings(const QStringList& settingsKeys, const BeamSteeringCWModSettings& settings); + QString getDebugString(const QStringList& settingsKeys, bool force=false) const; }; #endif /* INCLUDE_BEAMSTEERINGCWMODSETTINGS_H_ */ diff --git a/plugins/channelmimo/doa2/doa2.cpp b/plugins/channelmimo/doa2/doa2.cpp index d31ce0599..debc61704 100644 --- a/plugins/channelmimo/doa2/doa2.cpp +++ b/plugins/channelmimo/doa2/doa2.cpp @@ -156,82 +156,41 @@ void DOA2::pull(SampleVector::iterator& begin, unsigned int nbSamples, unsigned (void) sourceIndex; } -void DOA2::applySettings(const DOA2Settings& settings, bool force) +void DOA2::applySettings(const QStringList& settingsKeys, const DOA2Settings& settings, bool force) { - qDebug() << "DOA2::applySettings: " - << "m_correlationType: " << settings.m_correlationType - << "m_filterChainHash: " << settings.m_filterChainHash - << "m_log2Decim: " << settings.m_log2Decim - << "m_phase: " << settings.m_phase - << "m_antennaAz:" << settings.m_antennaAz - << "m_basebandDistance: " << settings.m_basebandDistance - << "m_squelchdB: " << settings.m_squelchdB - << "m_fftAveragingIndex: "<< settings.m_fftAveragingIndex - << "m_useReverseAPI: " << settings.m_useReverseAPI - << "m_reverseAPIAddress: " << settings.m_reverseAPIAddress - << "m_reverseAPIPort: " << settings.m_reverseAPIPort - << "m_reverseAPIDeviceIndex: " << settings.m_reverseAPIDeviceIndex - << "m_reverseAPIChannelIndex: " << settings.m_reverseAPIChannelIndex - << "m_title: " << settings.m_title; + qDebug() << "DOA2::applySettings: " << settings.getDebugString(settingsKeys, force); - QList reverseAPIKeys; - if ((m_settings.m_correlationType != settings.m_correlationType) || force) { - reverseAPIKeys.append("correlationType"); - } - if ((m_settings.m_filterChainHash != settings.m_filterChainHash) || force) { - reverseAPIKeys.append("filterChainHash"); - } - if ((m_settings.m_log2Decim != settings.m_log2Decim) || force) { - reverseAPIKeys.append("log2Decim"); - } - if ((m_settings.m_phase != settings.m_phase) || force) { - reverseAPIKeys.append("phase"); - } - if ((m_settings.m_title != settings.m_title) || force) { - reverseAPIKeys.append("title"); - } - if ((m_settings.m_antennaAz != settings.m_antennaAz) || force) { - reverseAPIKeys.append("antennaAz"); - } - if ((m_settings.m_basebandDistance != settings.m_basebandDistance) || force) { - reverseAPIKeys.append("basebandDistance"); - } - - if ((m_settings.m_squelchdB != settings.m_squelchdB) || force) + if ((settingsKeys.contains("squelchdB") && m_settings.m_squelchdB != settings.m_squelchdB) || force) { - reverseAPIKeys.append("squelchdB"); - if (m_running) { m_basebandSink->setMagThreshold((float) CalcDb::powerFromdB(settings.m_squelchdB)); } } - if ((m_settings.m_fftAveragingIndex != settings.m_fftAveragingIndex) || force) + if ((settingsKeys.contains("fftAveragingIndex") && m_settings.m_fftAveragingIndex != settings.m_fftAveragingIndex) || force) { - reverseAPIKeys.append("m_fftAveragingIndex"); - if (m_running) { m_basebandSink->setFFTAveraging(DOA2Settings::getAveragingValue(settings.m_fftAveragingIndex)); } } - if (m_running && ((m_settings.m_log2Decim != settings.m_log2Decim) - || (m_settings.m_filterChainHash != settings.m_filterChainHash) || force)) + if (m_running && ((settingsKeys.contains("log2Decim") && m_settings.m_log2Decim != settings.m_log2Decim) + || (settingsKeys.contains("filterChainHash") && m_settings.m_filterChainHash != settings.m_filterChainHash) || force)) { DOA2Baseband::MsgConfigureChannelizer *msg = DOA2Baseband::MsgConfigureChannelizer::create( settings.m_log2Decim, settings.m_filterChainHash); m_basebandSink->getInputMessageQueue()->push(msg); } - if (m_running && ((m_settings.m_correlationType != settings.m_correlationType) || force)) + if (m_running && ((settingsKeys.contains("correlationType") && m_settings.m_correlationType != settings.m_correlationType) || force)) { DOA2Baseband::MsgConfigureCorrelation *msg = DOA2Baseband::MsgConfigureCorrelation::create( settings.m_correlationType); m_basebandSink->getInputMessageQueue()->push(msg); } - if (m_running && ((m_settings.m_phase != settings.m_phase) || force)) { + if (m_running && ((settingsKeys.contains("phase") && m_settings.m_phase != settings.m_phase) || force)) { m_basebandSink->setPhase(settings.m_phase); } @@ -239,7 +198,7 @@ void DOA2::applySettings(const DOA2Settings& settings, bool force) MainCore::instance()->getMessagePipes().getMessagePipes(this, "settings", pipes); if (!pipes.empty()) { - sendChannelSettings(pipes, reverseAPIKeys, settings, force); + sendChannelSettings(pipes, settingsKeys, settings, force); } m_settings = settings; @@ -264,7 +223,7 @@ bool DOA2::handleMessage(const Message& cmd) { auto& cfg = (const MsgConfigureDOA2&) cmd; qDebug() << "DOA2::handleMessage: MsgConfigureDOA2"; - applySettings(cfg.getSettings(), cfg.getForce()); + applySettings(cfg.getSettingsKeys(), cfg.getSettings(), cfg.getForce()); return true; } else if (DSPMIMOSignalNotification::match(cmd)) @@ -320,14 +279,14 @@ bool DOA2::deserialize(const QByteArray& data) (void) data; if (m_settings.deserialize(data)) { - MsgConfigureDOA2 *msg = MsgConfigureDOA2::create(m_settings, true); + MsgConfigureDOA2 *msg = MsgConfigureDOA2::create(QStringList(), m_settings, true); m_inputMessageQueue.push(msg); return true; } else { m_settings.resetToDefaults(); - MsgConfigureDOA2 *msg = MsgConfigureDOA2::create(m_settings, true); + MsgConfigureDOA2 *msg = MsgConfigureDOA2::create(QStringList(), m_settings, true); m_inputMessageQueue.push(msg); return false; } @@ -400,12 +359,12 @@ int DOA2::webapiSettingsPutPatch( DOA2Settings settings = m_settings; webapiUpdateChannelSettings(settings, channelSettingsKeys, response); - MsgConfigureDOA2 *msg = MsgConfigureDOA2::create(settings, force); + MsgConfigureDOA2 *msg = MsgConfigureDOA2::create(channelSettingsKeys, settings, force); m_inputMessageQueue.push(msg); if (getMessageQueueToGUI()) // forward to GUI if any { - MsgConfigureDOA2 *msgToGUI = MsgConfigureDOA2::create(settings, force); + MsgConfigureDOA2 *msgToGUI = MsgConfigureDOA2::create(channelSettingsKeys, settings, force); getMessageQueueToGUI()->push(msgToGUI); } diff --git a/plugins/channelmimo/doa2/doa2.h b/plugins/channelmimo/doa2/doa2.h index 418df527a..4685cf328 100644 --- a/plugins/channelmimo/doa2/doa2.h +++ b/plugins/channelmimo/doa2/doa2.h @@ -45,20 +45,23 @@ public: public: const DOA2Settings& getSettings() const { return m_settings; } + const QStringList& getSettingsKeys() const { return m_settingsKeys; } bool getForce() const { return m_force; } - static MsgConfigureDOA2* create(const DOA2Settings& settings, bool force) + static MsgConfigureDOA2* create(const QStringList& settingsKeys, const DOA2Settings& settings, bool force) { - return new MsgConfigureDOA2(settings, force); + return new MsgConfigureDOA2(settingsKeys, settings, force); } private: DOA2Settings m_settings; + QStringList m_settingsKeys; bool m_force; - MsgConfigureDOA2(const DOA2Settings& settings, bool force) : + MsgConfigureDOA2(const QStringList& settingsKeys, const DOA2Settings& settings, bool force) : Message(), m_settings(settings), + m_settingsKeys(settingsKeys), m_force(force) { } }; @@ -175,7 +178,7 @@ private: qint64 m_deviceCenterFrequency; bool handleMessage(const Message& cmd) final; //!< Processing of a message. Returns true if message has actually been processed - void applySettings(const DOA2Settings& settings, bool force = false); + void applySettings(const QStringList& settingsKeys, const DOA2Settings& settings, bool force = false); static void validateFilterChainHash(DOA2Settings& settings); void calculateFrequencyOffset(); void webapiFormatChannelReport(SWGSDRangel::SWGChannelReport& response) const; diff --git a/plugins/channelmimo/doa2/doa2gui.cpp b/plugins/channelmimo/doa2/doa2gui.cpp index 972491b61..67405e23a 100644 --- a/plugins/channelmimo/doa2/doa2gui.cpp +++ b/plugins/channelmimo/doa2/doa2gui.cpp @@ -41,7 +41,7 @@ void DOA2GUI::resetToDefaults() { m_settings.resetToDefaults(); displaySettings(); - applySettings(true); + applySettings(QStringList(), true); } QByteArray DOA2GUI::serialize() const @@ -54,7 +54,7 @@ bool DOA2GUI::deserialize(const QByteArray& data) if (m_settings.deserialize(data)) { displaySettings(); - applySettings(true); + applySettings(QStringList(), true); return true; } else @@ -150,7 +150,7 @@ DOA2GUI::DOA2GUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, MIMOChannel *ch displaySettings(); makeUIConnections(); displayRateAndShift(); - applySettings(true); + applySettings(QStringList(), true); connect(&MainCore::instance()->getMasterTimer(), SIGNAL(timeout()), this, SLOT(tick())); @@ -170,13 +170,13 @@ void DOA2GUI::blockApplySettings(bool block) m_doApplySettings = !block; } -void DOA2GUI::applySettings(bool force) +void DOA2GUI::applySettings(const QStringList& settingsKeys, bool force) { if (m_doApplySettings) { setTitleColor(m_channelMarker.getColor()); - DOA2::MsgConfigureDOA2* message = DOA2::MsgConfigureDOA2::create(m_settings, force); + DOA2::MsgConfigureDOA2* message = DOA2::MsgConfigureDOA2::create(settingsKeys, m_settings, force); m_doa2->getInputMessageQueue()->push(message); } } @@ -284,7 +284,7 @@ void DOA2GUI::onWidgetRolled(const QWidget* widget, bool rollDown) (void) rollDown; getRollupContents()->saveState(m_rollupState); - applySettings(); + applySettings(QStringList()); } void DOA2GUI::onMenuDialogCalled(const QPoint &p) @@ -315,7 +315,8 @@ void DOA2GUI::onMenuDialogCalled(const QPoint &p) setTitle(m_channelMarker.getTitle()); setTitleColor(m_settings.m_rgbColor); - applySettings(); + applySettings(QStringList({"rgbColor", "title", "useReverseAPI", "reverseAPIAddress", + "reverseAPIPort", "reverseAPIDeviceIndex", "reverseAPIChannelIndex"})); } resetContextMenuType(); @@ -338,14 +339,14 @@ void DOA2GUI::on_phaseCorrection_valueChanged(int value) { m_settings.m_phase = value; ui->phaseCorrectionText->setText(tr("%1").arg(value)); - applySettings(); + applySettings(QStringList({"phase"})); } void DOA2GUI::on_correlationType_currentIndexChanged(int index) { m_settings.m_correlationType = (DOA2Settings::CorrelationType) index; updateScopeFScale(); - applySettings(); + applySettings(QStringList({"correlationType"})); } void DOA2GUI::on_antAz_valueChanged(int value) @@ -353,28 +354,28 @@ void DOA2GUI::on_antAz_valueChanged(int value) m_settings.m_antennaAz = value; ui->compass->setAzAnt(value); updateDOA(); - applySettings(); + applySettings(QStringList({"antennaAz"})); } void DOA2GUI::on_baselineDistance_valueChanged(int value) { m_settings.m_basebandDistance = value < 1 ? 1 : value; updateDOA(); - applySettings(); + applySettings(QStringList({"basebandDistance"})); } void DOA2GUI::on_squelch_valueChanged(int value) { m_settings.m_squelchdB = value; ui->squelchText->setText(tr("%1").arg(m_settings.m_squelchdB, 3)); - applySettings(); + applySettings(QStringList({"squelchdB"})); } void DOA2GUI::on_fftAveraging_currentIndexChanged(int index) { qDebug("DOA2GUI::on_averaging_currentIndexChanged: %d", index); m_settings.m_fftAveragingIndex = index; - applySettings(); + applySettings(QStringList({"fftAveragingIndex"})); setFFTAveragingTooltip(); } @@ -417,7 +418,7 @@ void DOA2GUI::applyPosition() displayRateAndShift(); updateAbsoluteCenterFrequency(); - applySettings(); + applySettings(QStringList({"filterChainHash", "log2Decim"})); } void DOA2GUI::tick() diff --git a/plugins/channelmimo/doa2/doa2gui.h b/plugins/channelmimo/doa2/doa2gui.h index f0d669f3c..04c47cbcc 100644 --- a/plugins/channelmimo/doa2/doa2gui.h +++ b/plugins/channelmimo/doa2/doa2gui.h @@ -84,7 +84,7 @@ private: ~DOA2GUI() final; void blockApplySettings(bool block); - void applySettings(bool force = false); + void applySettings(const QStringList& settingsKeys, bool force = false); void applyDecimation(); void applyPosition(); void displaySettings(); diff --git a/plugins/channelmimo/doa2/doa2settings.cpp b/plugins/channelmimo/doa2/doa2settings.cpp index f54d7d753..e168079c6 100644 --- a/plugins/channelmimo/doa2/doa2settings.cpp +++ b/plugins/channelmimo/doa2/doa2settings.cpp @@ -168,6 +168,123 @@ bool DOA2Settings::deserialize(const QByteArray& data) } } +void DOA2Settings::applySettings(const QStringList& settingsKeys, const DOA2Settings& settings) +{ + if (settingsKeys.contains("correlationType")) { + m_correlationType = settings.m_correlationType; + } + if (settingsKeys.contains("rgbColor")) { + m_rgbColor = settings.m_rgbColor; + } + if (settingsKeys.contains("title")) { + m_title = settings.m_title; + } + if (settingsKeys.contains("log2Decim")) { + m_log2Decim = settings.m_log2Decim; + } + if (settingsKeys.contains("filterChainHash")) { + m_filterChainHash = settings.m_filterChainHash; + } + if (settingsKeys.contains("phase")) { + m_phase = settings.m_phase; + } + if (settingsKeys.contains("antennaAz")) { + m_antennaAz = settings.m_antennaAz; + } + if (settingsKeys.contains("basebandDistance")) { + m_basebandDistance = settings.m_basebandDistance; + } + if (settingsKeys.contains("squelchdB")) { + m_squelchdB = settings.m_squelchdB; + } + if (settingsKeys.contains("fftAveragingIndex")) { + m_fftAveragingIndex = settings.m_fftAveragingIndex; + } + 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; + } + if (settingsKeys.contains("reverseAPIChannelIndex")) { + m_reverseAPIChannelIndex = settings.m_reverseAPIChannelIndex; + } + if (settingsKeys.contains("workspaceIndex")) { + m_workspaceIndex = settings.m_workspaceIndex; + } + if (settingsKeys.contains("geometryBytes")) { + m_geometryBytes = settings.m_geometryBytes; + } + if (settingsKeys.contains("hidden")) { + m_hidden = settings.m_hidden; + } +} + +QString DOA2Settings::getDebugString(const QStringList& settingsKeys, bool force) const +{ + std::ostringstream ostr; + + if (settingsKeys.contains("correlationType") || force) { + ostr << " m_correlationType: " << (int)m_correlationType; + } + if (settingsKeys.contains("rgbColor") || force) { + ostr << " m_rgbColor: " << m_rgbColor; + } + if (settingsKeys.contains("title") || force) { + ostr << " m_title: " << m_title.toStdString(); + } + if (settingsKeys.contains("log2Decim") || force) { + ostr << " m_log2Decim: " << m_log2Decim; + } + if (settingsKeys.contains("filterChainHash") || force) { + ostr << " m_filterChainHash: " << m_filterChainHash; + } + if (settingsKeys.contains("phase") || force) { + ostr << " m_phase: " << m_phase; + } + if (settingsKeys.contains("antennaAz") || force) { + ostr << " m_antennaAz: " << m_antennaAz; + } + if (settingsKeys.contains("basebandDistance") || force) { + ostr << " m_basebandDistance: " << m_basebandDistance; + } + if (settingsKeys.contains("squelchdB") || force) { + ostr << " m_squelchdB: " << m_squelchdB; + } + if (settingsKeys.contains("fftAveragingIndex") || force) { + ostr << " m_fftAveragingIndex: " << m_fftAveragingIndex; + } + 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; + } + if (settingsKeys.contains("reverseAPIChannelIndex") || force) { + ostr << " m_reverseAPIChannelIndex: " << m_reverseAPIChannelIndex; + } + if (settingsKeys.contains("workspaceIndex") || force) { + ostr << " m_workspaceIndex: " << m_workspaceIndex; + } + if (settingsKeys.contains("hidden") || force) { + ostr << " m_hidden: " << m_hidden; + } + + return QString(ostr.str().c_str()); +} + int DOA2Settings::getAveragingValue(int averagingIndex) { if (averagingIndex <= 0) { diff --git a/plugins/channelmimo/doa2/doa2settings.h b/plugins/channelmimo/doa2/doa2settings.h index 2a60a58b7..dfee68758 100644 --- a/plugins/channelmimo/doa2/doa2settings.h +++ b/plugins/channelmimo/doa2/doa2settings.h @@ -65,6 +65,8 @@ struct DOA2Settings void setScopeGUI(Serializable *scopeGUI) { m_scopeGUI = scopeGUI; } QByteArray serialize() const; bool deserialize(const QByteArray& data); + void applySettings(const QStringList& settingsKeys, const DOA2Settings& settings); + QString getDebugString(const QStringList& settingsKeys, bool force=false) const; static int getAveragingValue(int averagingIndex); static int getAveragingIndex(int averagingValue); static const int m_averagingMaxExponent = 5; //!< Max 1M (10 * 10^5) diff --git a/plugins/channelmimo/interferometer/interferometer.cpp b/plugins/channelmimo/interferometer/interferometer.cpp index 2ac5f819a..93299598e 100644 --- a/plugins/channelmimo/interferometer/interferometer.cpp +++ b/plugins/channelmimo/interferometer/interferometer.cpp @@ -183,7 +183,7 @@ void Interferometer::pull(SampleVector::iterator& begin, unsigned int nbSamples, void Interferometer::applySettings(const InterferometerSettings& settings, const QList& settingsKeys, bool force) { - qDebug() << "Interferometer::applySettings:" << settings.getDebugString(settingsKeys, force) << "force: " << force; + qDebug() << "Interferometer::applySettings:" << settings.getDebugString(settingsKeys, force); if (m_running && (settingsKeys.contains("log2Decim") || settingsKeys.contains("filterChainHash") || force))