1
0
mirror of https://github.com/f4exb/sdrangel.git synced 2026-08-14 15:33:34 -04:00

Apply atomic settings to channel Tx plugins. Fixes #1329

This commit is contained in:
f4exb
2026-02-01 11:18:18 +01:00
parent 2a46208d37
commit 47fba8c980
163 changed files with 4500 additions and 2673 deletions
+30 -139
View File
@@ -65,7 +65,7 @@ RttyMod::RttyMod(DeviceAPI *deviceAPI) :
m_basebandSource->setChannel(this);
m_basebandSource->moveToThread(m_thread);
applySettings(m_settings, true);
applySettings(QStringList(), m_settings, true);
m_deviceAPI->addChannelSource(this);
m_deviceAPI->addChannelSourceAPI(this);
@@ -134,7 +134,7 @@ bool RttyMod::handleMessage(const Message& cmd)
MsgConfigureRttyMod& cfg = (MsgConfigureRttyMod&) cmd;
qDebug() << "RttyMod::handleMessage: MsgConfigureRttyMod";
applySettings(cfg.getSettings(), cfg.getForce());
applySettings(cfg.getSettingKeys(), cfg.getSettings(), cfg.getForce());
return true;
}
@@ -183,133 +183,22 @@ void RttyMod::setCenterFrequency(qint64 frequency)
{
RttyModSettings settings = m_settings;
settings.m_inputFrequencyOffset = frequency;
applySettings(settings, false);
applySettings(QStringList("inputFrequencyOffset"), settings, false);
if (m_guiMessageQueue) // forward to GUI if any
{
MsgConfigureRttyMod *msgToGUI = MsgConfigureRttyMod::create(settings, false);
MsgConfigureRttyMod *msgToGUI = MsgConfigureRttyMod::create(QStringList("inputFrequencyOffset"), settings, false);
m_guiMessageQueue->push(msgToGUI);
}
}
void RttyMod::applySettings(const RttyModSettings& settings, bool force)
void RttyMod::applySettings(const QStringList& settingsKeys, const RttyModSettings& settings, bool force)
{
qDebug() << "RttyMod::applySettings:"
<< " m_inputFrequencyOffset: " << settings.m_inputFrequencyOffset
<< " m_baud: " << settings.m_baud
<< " m_rfBandwidth: " << settings.m_rfBandwidth
<< " m_frequencyShift: " << settings.m_frequencyShift
<< " m_gain: " << settings.m_gain
<< " m_channelMute: " << settings.m_channelMute
<< " m_repeat: " << settings.m_repeat
<< " m_repeatCount: " << settings.m_repeatCount
<< " m_text: " << settings.m_text
<< " m_characterSet: " << settings.m_characterSet
<< " m_unshiftOnSpace: " << settings.m_unshiftOnSpace
<< " m_msbFirst: " << settings.m_msbFirst
<< " m_spaceHigh: " << settings.m_spaceHigh
<< " m_prefixCRLF: " << settings.m_prefixCRLF
<< " m_postfixCRLF: " << settings.m_postfixCRLF
<< " m_useReverseAPI: " << settings.m_useReverseAPI
<< " m_reverseAPIAddress: " << settings.m_reverseAPIAddress
<< " m_reverseAPIAddress: " << settings.m_reverseAPIPort
<< " m_reverseAPIDeviceIndex: " << settings.m_reverseAPIDeviceIndex
<< " m_reverseAPIChannelIndex: " << settings.m_reverseAPIChannelIndex
<< " force: " << force;
qDebug() << "RttyMod::applySettings:" << settings.getDebugString(settingsKeys, force);
QList<QString> reverseAPIKeys;
if ((settings.m_inputFrequencyOffset != m_settings.m_inputFrequencyOffset) || force) {
reverseAPIKeys.append("inputFrequencyOffset");
}
if ((settings.m_baud != m_settings.m_baud) || force) {
reverseAPIKeys.append("baud");
}
if ((settings.m_rfBandwidth != m_settings.m_rfBandwidth) || force) {
reverseAPIKeys.append("rfBandwidth");
}
if ((settings.m_frequencyShift != m_settings.m_frequencyShift) || force) {
reverseAPIKeys.append("frequencyShift");
}
if ((settings.m_gain != m_settings.m_gain) || force) {
reverseAPIKeys.append("gain");
}
if ((settings.m_channelMute != m_settings.m_channelMute) || force) {
reverseAPIKeys.append("channelMute");
}
if ((settings.m_repeat != m_settings.m_repeat) || force) {
reverseAPIKeys.append("repeat");
}
if ((settings.m_repeatCount != m_settings.m_repeatCount) || force) {
reverseAPIKeys.append("repeatCount");
}
if ((settings.m_lpfTaps != m_settings.m_lpfTaps) || force) {
reverseAPIKeys.append("lpfTaps");
}
if ((settings.m_rfNoise != m_settings.m_rfNoise) || force) {
reverseAPIKeys.append("rfNoise");
}
if ((settings.m_text != m_settings.m_text) || force) {
reverseAPIKeys.append("text");
}
if ((settings.m_beta != m_settings.m_beta) || force) {
reverseAPIKeys.append("beta");
}
if ((settings.m_symbolSpan != m_settings.m_symbolSpan) || force) {
reverseAPIKeys.append("symbolSpan");
}
if ((settings.m_characterSet != m_settings.m_characterSet) || force) {
reverseAPIKeys.append("characterSet");
}
if ((settings.m_unshiftOnSpace != m_settings.m_unshiftOnSpace) || force) {
reverseAPIKeys.append("unshiftOnSpace");
}
if ((settings.m_msbFirst != m_settings.m_msbFirst) || force) {
reverseAPIKeys.append("msbFirst");
}
if ((settings.m_spaceHigh != m_settings.m_spaceHigh) || force) {
reverseAPIKeys.append("spaceHigh");
}
if ((settings.m_prefixCRLF != m_settings.m_prefixCRLF) || force) {
reverseAPIKeys.append("prefixCRLF");
}
if ((settings.m_postfixCRLF != m_settings.m_postfixCRLF) || force) {
reverseAPIKeys.append("postfixCRLF");
}
if ((settings.m_udpEnabled != m_settings.m_udpEnabled) || force) {
reverseAPIKeys.append("udpEnabled");
}
if ((settings.m_udpAddress != m_settings.m_udpAddress) || force) {
reverseAPIKeys.append("udpAddress");
}
if ((settings.m_udpPort != m_settings.m_udpPort) || force) {
reverseAPIKeys.append("udpPort");
}
if ( (settings.m_udpEnabled != m_settings.m_udpEnabled)
|| (settings.m_udpAddress != m_settings.m_udpAddress)
|| (settings.m_udpPort != m_settings.m_udpPort)
if ((settingsKeys.contains("udpEnabled") && (settings.m_udpEnabled != m_settings.m_udpEnabled))
|| (settingsKeys.contains("udpAddress") && (settings.m_udpAddress != m_settings.m_udpAddress))
|| (settingsKeys.contains("udpPort") && (settings.m_udpPort != m_settings.m_udpPort))
|| force)
{
if (settings.m_udpEnabled)
@@ -318,7 +207,7 @@ void RttyMod::applySettings(const RttyModSettings& settings, bool force)
closeUDP();
}
if (m_settings.m_streamIndex != settings.m_streamIndex)
if (settingsKeys.contains("streamIndex") && m_settings.m_streamIndex != settings.m_streamIndex)
{
if (m_deviceAPI->getSampleMIMO()) // change of stream is possible for MIMO devices only
{
@@ -329,31 +218,33 @@ void RttyMod::applySettings(const RttyModSettings& settings, bool force)
m_settings.m_streamIndex = settings.m_streamIndex; // make sure ChannelAPI::getStreamIndex() is consistent
emit streamIndexChanged(settings.m_streamIndex);
}
reverseAPIKeys.append("streamIndex");
}
RttyModBaseband::MsgConfigureRttyModBaseband *msg = RttyModBaseband::MsgConfigureRttyModBaseband::create(settings, force);
RttyModBaseband::MsgConfigureRttyModBaseband *msg = RttyModBaseband::MsgConfigureRttyModBaseband::create(settingsKeys, settings, force);
m_basebandSource->getInputMessageQueue()->push(msg);
if (settings.m_useReverseAPI)
if (settingsKeys.contains("useReverseAPI") && settings.m_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) ||
(m_settings.m_reverseAPIChannelIndex != settings.m_reverseAPIChannelIndex);
webapiReverseSendSettings(reverseAPIKeys, settings, fullUpdate || force);
bool fullUpdate = ((settingsKeys.contains("useReverseAPI") && (m_settings.m_useReverseAPI != settings.m_useReverseAPI)) && settings.m_useReverseAPI) ||
(settingsKeys.contains("reverseAPIAddress") && (m_settings.m_reverseAPIAddress != settings.m_reverseAPIAddress)) ||
(settingsKeys.contains("reverseAPIPort") && (m_settings.m_reverseAPIPort != settings.m_reverseAPIPort)) ||
(settingsKeys.contains("reverseAPIDeviceIndex") && (m_settings.m_reverseAPIDeviceIndex != settings.m_reverseAPIDeviceIndex)) ||
(settingsKeys.contains("reverseAPIChannelIndex") && (m_settings.m_reverseAPIChannelIndex != settings.m_reverseAPIChannelIndex));
webapiReverseSendSettings(settingsKeys, settings, fullUpdate || force);
}
QList<ObjectPipe*> pipes;
MainCore::instance()->getMessagePipes().getMessagePipes(this, "settings", pipes);
if (pipes.size() > 0) {
sendChannelSettings(pipes, reverseAPIKeys, settings, force);
sendChannelSettings(pipes, settingsKeys, settings, force);
}
m_settings = settings;
if (force) {
m_settings = settings;
} else {
m_settings.applySettings(settingsKeys, settings);
}
}
QByteArray RttyMod::serialize() const
@@ -371,7 +262,7 @@ bool RttyMod::deserialize(const QByteArray& data)
success = false;
}
MsgConfigureRttyMod *msg = MsgConfigureRttyMod::create(m_settings, true);
MsgConfigureRttyMod *msg = MsgConfigureRttyMod::create(QStringList(), m_settings, true);
m_inputMessageQueue.push(msg);
return success;
@@ -427,12 +318,12 @@ int RttyMod::webapiSettingsPutPatch(
RttyModSettings settings = m_settings;
webapiUpdateChannelSettings(settings, channelSettingsKeys, response);
MsgConfigureRttyMod *msg = MsgConfigureRttyMod::create(settings, force);
MsgConfigureRttyMod *msg = MsgConfigureRttyMod::create(channelSettingsKeys, settings, force);
m_inputMessageQueue.push(msg);
if (m_guiMessageQueue) // forward to GUI if any
{
MsgConfigureRttyMod *msgToGUI = MsgConfigureRttyMod::create(settings, force);
MsgConfigureRttyMod *msgToGUI = MsgConfigureRttyMod::create(channelSettingsKeys, settings, force);
m_guiMessageQueue->push(msgToGUI);
}
@@ -694,7 +585,7 @@ void RttyMod::webapiFormatChannelReport(SWGSDRangel::SWGChannelReport& response)
response.getRttyModReport()->setChannelSampleRate(m_basebandSource->getChannelSampleRate());
}
void RttyMod::webapiReverseSendSettings(QList<QString>& channelSettingsKeys, const RttyModSettings& settings, bool force)
void RttyMod::webapiReverseSendSettings(const QList<QString>& channelSettingsKeys, const RttyModSettings& settings, bool force)
{
SWGSDRangel::SWGChannelSettings *swgChannelSettings = new SWGSDRangel::SWGChannelSettings();
webapiFormatChannelSettings(channelSettingsKeys, swgChannelSettings, settings, force);
@@ -721,7 +612,7 @@ void RttyMod::webapiReverseSendSettings(QList<QString>& channelSettingsKeys, con
void RttyMod::sendChannelSettings(
const QList<ObjectPipe*>& pipes,
QList<QString>& channelSettingsKeys,
const QList<QString>& channelSettingsKeys,
const RttyModSettings& settings,
bool force)
{
@@ -745,7 +636,7 @@ void RttyMod::sendChannelSettings(
}
void RttyMod::webapiFormatChannelSettings(
QList<QString>& channelSettingsKeys,
const QList<QString>& channelSettingsKeys,
SWGSDRangel::SWGChannelSettings *swgChannelSettings,
const RttyModSettings& settings,
bool force