1
0
mirror of https://github.com/f4exb/sdrangel.git synced 2025-05-24 03:02:29 -04:00

M17 demod: updated API

This commit is contained in:
f4exb 2022-07-10 22:15:58 +02:00
parent 2efa765750
commit 823cffdae1
18 changed files with 339 additions and 238 deletions

View File

@ -65,7 +65,7 @@ M17Demod::M17Demod(DeviceAPI *deviceAPI) :
m_basebandSink->setDemodInputMessageQueue(&m_inputMessageQueue); m_basebandSink->setDemodInputMessageQueue(&m_inputMessageQueue);
m_basebandSink->moveToThread(m_thread); m_basebandSink->moveToThread(m_thread);
applySettings(m_settings, true); applySettings(m_settings, QList<QString>(), true);
m_deviceAPI->addChannelSink(this); m_deviceAPI->addChannelSink(this);
m_deviceAPI->addChannelSinkAPI(this); m_deviceAPI->addChannelSinkAPI(this);
@ -150,7 +150,7 @@ bool M17Demod::handleMessage(const Message& cmd)
{ {
MsgConfigureM17Demod& cfg = (MsgConfigureM17Demod&) cmd; MsgConfigureM17Demod& cfg = (MsgConfigureM17Demod&) cmd;
qDebug("M17Demod::handleMessage: MsgConfigureM17Demod"); qDebug("M17Demod::handleMessage: MsgConfigureM17Demod");
applySettings(cfg.getSettings(), cfg.getForce()); applySettings(cfg.getSettings(), cfg.getSettingsKeys(), cfg.getForce());
return true; return true;
} }
@ -217,18 +217,19 @@ void M17Demod::setCenterFrequency(qint64 frequency)
{ {
M17DemodSettings settings = m_settings; M17DemodSettings settings = m_settings;
settings.m_inputFrequencyOffset = frequency; settings.m_inputFrequencyOffset = frequency;
applySettings(settings, false); applySettings(settings, QList<QString>({"inputFrequencyOffset"}), false);
if (m_guiMessageQueue) // forward to GUI if any if (m_guiMessageQueue) // forward to GUI if any
{ {
MsgConfigureM17Demod *msgToGUI = MsgConfigureM17Demod::create(settings, false); MsgConfigureM17Demod *msgToGUI = MsgConfigureM17Demod::create(settings, QList<QString>({"inputFrequencyOffset"}), false);
m_guiMessageQueue->push(msgToGUI); m_guiMessageQueue->push(msgToGUI);
} }
} }
void M17Demod::applySettings(const M17DemodSettings& settings, bool force) void M17Demod::applySettings(const M17DemodSettings& settings, const QList<QString>& settingsKeys, bool force)
{ {
qDebug() << "M17Demod::applySettings: " qDebug() << "M17Demod::applySettings: "
<< " settingsKeys: " << settingsKeys
<< " m_inputFrequencyOffset: " << settings.m_inputFrequencyOffset << " m_inputFrequencyOffset: " << settings.m_inputFrequencyOffset
<< " m_rfBandwidth: " << settings.m_rfBandwidth << " m_rfBandwidth: " << settings.m_rfBandwidth
<< " m_fmDeviation: " << settings.m_fmDeviation << " m_fmDeviation: " << settings.m_fmDeviation
@ -246,46 +247,7 @@ void M17Demod::applySettings(const M17DemodSettings& settings, bool force)
<< " m_streamIndex: " << settings.m_streamIndex << " m_streamIndex: " << settings.m_streamIndex
<< " force: " << force; << " force: " << force;
QList<QString> reverseAPIKeys; if (settingsKeys.contains("streamIndex"))
if ((settings.m_inputFrequencyOffset != m_settings.m_inputFrequencyOffset) || force) {
reverseAPIKeys.append("inputFrequencyOffset");
}
if ((settings.m_audioMute != m_settings.m_audioMute) || force) {
reverseAPIKeys.append("audioMute");
}
if ((settings.m_syncOrConstellation != m_settings.m_syncOrConstellation) || force) {
reverseAPIKeys.append("syncOrConstellation");
}
if ((settings.m_traceLengthMutliplier != m_settings.m_traceLengthMutliplier) || force) {
reverseAPIKeys.append("traceLengthMutliplier");
}
if ((settings.m_rfBandwidth != m_settings.m_rfBandwidth) || force) {
reverseAPIKeys.append("rfBandwidth");
}
if ((settings.m_fmDeviation != m_settings.m_fmDeviation) || force) {
reverseAPIKeys.append("fmDeviation");
}
if ((settings.m_squelchGate != m_settings.m_squelchGate) || force) {
reverseAPIKeys.append("squelchGate");
}
if ((settings.m_squelch != m_settings.m_squelch) || force) {
reverseAPIKeys.append("squelch");
}
if ((settings.m_volume != m_settings.m_volume) || force) {
reverseAPIKeys.append("volume");
}
if ((settings.m_baudRate != m_settings.m_baudRate) || force) {
reverseAPIKeys.append("baudRate");
}
if ((settings.m_highPassFilter != m_settings.m_highPassFilter) || force) {
reverseAPIKeys.append("highPassFilter");
}
if ((settings.m_audioDeviceName != m_settings.m_audioDeviceName) || force) {
reverseAPIKeys.append("audioDeviceName");
}
if (m_settings.m_streamIndex != settings.m_streamIndex)
{ {
if (m_deviceAPI->getSampleMIMO()) // change of stream is possible for MIMO devices only if (m_deviceAPI->getSampleMIMO()) // change of stream is possible for MIMO devices only
{ {
@ -294,31 +256,33 @@ void M17Demod::applySettings(const M17DemodSettings& settings, bool force)
m_deviceAPI->addChannelSink(this, settings.m_streamIndex); m_deviceAPI->addChannelSink(this, settings.m_streamIndex);
m_deviceAPI->addChannelSinkAPI(this); m_deviceAPI->addChannelSinkAPI(this);
} }
reverseAPIKeys.append("streamIndex");
} }
M17DemodBaseband::MsgConfigureM17DemodBaseband *msg = M17DemodBaseband::MsgConfigureM17DemodBaseband::create(settings, force); M17DemodBaseband::MsgConfigureM17DemodBaseband *msg = M17DemodBaseband::MsgConfigureM17DemodBaseband::create(settings, settingsKeys, force);
m_basebandSink->getInputMessageQueue()->push(msg); m_basebandSink->getInputMessageQueue()->push(msg);
if (settings.m_useReverseAPI) if (settingsKeys.contains("m_useReverseAPI"))
{ {
bool fullUpdate = ((m_settings.m_useReverseAPI != settings.m_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_reverseAPIAddress != settings.m_reverseAPIAddress) ||
(m_settings.m_reverseAPIPort != settings.m_reverseAPIPort) || (m_settings.m_reverseAPIPort != settings.m_reverseAPIPort) ||
(m_settings.m_reverseAPIDeviceIndex != settings.m_reverseAPIDeviceIndex) || (m_settings.m_reverseAPIDeviceIndex != settings.m_reverseAPIDeviceIndex) ||
(m_settings.m_reverseAPIChannelIndex != settings.m_reverseAPIChannelIndex); (m_settings.m_reverseAPIChannelIndex != settings.m_reverseAPIChannelIndex);
webapiReverseSendSettings(reverseAPIKeys, settings, fullUpdate || force); webapiReverseSendSettings(settingsKeys, settings, fullUpdate || force);
} }
QList<ObjectPipe*> pipes; QList<ObjectPipe*> pipes;
MainCore::instance()->getMessagePipes().getMessagePipes(this, "settings", pipes); MainCore::instance()->getMessagePipes().getMessagePipes(this, "settings", pipes);
if (pipes.size() > 0) { if (pipes.size() > 0) {
sendChannelSettings(pipes, reverseAPIKeys, settings, force); sendChannelSettings(pipes, settingsKeys, settings, force);
} }
if (force) {
m_settings = settings; m_settings = settings;
} else {
m_settings.applySettings(settingsKeys, settings);
}
} }
QByteArray M17Demod::serialize() const QByteArray M17Demod::serialize() const
@ -330,14 +294,14 @@ bool M17Demod::deserialize(const QByteArray& data)
{ {
if (m_settings.deserialize(data)) if (m_settings.deserialize(data))
{ {
MsgConfigureM17Demod *msg = MsgConfigureM17Demod::create(m_settings, true); MsgConfigureM17Demod *msg = MsgConfigureM17Demod::create(m_settings, QList<QString>(), true);
m_inputMessageQueue.push(msg); m_inputMessageQueue.push(msg);
return true; return true;
} }
else else
{ {
m_settings.resetToDefaults(); m_settings.resetToDefaults();
MsgConfigureM17Demod *msg = MsgConfigureM17Demod::create(m_settings, true); MsgConfigureM17Demod *msg = MsgConfigureM17Demod::create(m_settings, QList<QString>(), true);
m_inputMessageQueue.push(msg); m_inputMessageQueue.push(msg);
return false; return false;
} }
@ -392,13 +356,13 @@ int M17Demod::webapiSettingsPutPatch(
M17DemodSettings settings = m_settings; M17DemodSettings settings = m_settings;
webapiUpdateChannelSettings(settings, channelSettingsKeys, response); webapiUpdateChannelSettings(settings, channelSettingsKeys, response);
MsgConfigureM17Demod *msg = MsgConfigureM17Demod::create(settings, force); MsgConfigureM17Demod *msg = MsgConfigureM17Demod::create(settings, channelSettingsKeys, force);
m_inputMessageQueue.push(msg); m_inputMessageQueue.push(msg);
qDebug("M17Demod::webapiSettingsPutPatch: forward to GUI: %p", m_guiMessageQueue); qDebug("M17Demod::webapiSettingsPutPatch: forward to GUI: %p", m_guiMessageQueue);
if (m_guiMessageQueue) // forward to GUI if any if (m_guiMessageQueue) // forward to GUI if any
{ {
MsgConfigureM17Demod *msgToGUI = MsgConfigureM17Demod::create(settings, force); MsgConfigureM17Demod *msgToGUI = MsgConfigureM17Demod::create(settings, channelSettingsKeys, force);
m_guiMessageQueue->push(msgToGUI); m_guiMessageQueue->push(msgToGUI);
} }
@ -445,6 +409,9 @@ void M17Demod::webapiUpdateChannelSettings(
if (channelSettingsKeys.contains("title")) { if (channelSettingsKeys.contains("title")) {
settings.m_title = *response.getM17DemodSettings()->getTitle(); settings.m_title = *response.getM17DemodSettings()->getTitle();
} }
if (channelSettingsKeys.contains("statusLogEnabled")) {
settings.m_statusLogEnabled = response.getM17DemodSettings()->getStatusLogEnabled() != 0;
}
if (channelSettingsKeys.contains("audioDeviceName")) { if (channelSettingsKeys.contains("audioDeviceName")) {
settings.m_audioDeviceName = *response.getM17DemodSettings()->getAudioDeviceName(); settings.m_audioDeviceName = *response.getM17DemodSettings()->getAudioDeviceName();
} }
@ -508,6 +475,7 @@ void M17Demod::webapiFormatChannelSettings(SWGSDRangel::SWGChannelSettings& resp
response.getM17DemodSettings()->setSquelch(settings.m_squelch); response.getM17DemodSettings()->setSquelch(settings.m_squelch);
response.getM17DemodSettings()->setAudioMute(settings.m_audioMute ? 1 : 0); response.getM17DemodSettings()->setAudioMute(settings.m_audioMute ? 1 : 0);
response.getM17DemodSettings()->setSyncOrConstellation(settings.m_syncOrConstellation ? 1 : 0); response.getM17DemodSettings()->setSyncOrConstellation(settings.m_syncOrConstellation ? 1 : 0);
response.getM17DemodSettings()->setStatusLogEnabled(settings.m_statusLogEnabled ? 1 : 0);
response.getM17DemodSettings()->setRgbColor(settings.m_rgbColor); response.getM17DemodSettings()->setRgbColor(settings.m_rgbColor);
if (response.getM17DemodSettings()->getTitle()) { if (response.getM17DemodSettings()->getTitle()) {
@ -580,7 +548,7 @@ void M17Demod::webapiFormatChannelReport(SWGSDRangel::SWGChannelReport& response
response.getM17DemodReport()->setSquelch(m_basebandSink->getSquelchOpen() ? 1 : 0); response.getM17DemodReport()->setSquelch(m_basebandSink->getSquelchOpen() ? 1 : 0);
} }
void M17Demod::webapiReverseSendSettings(QList<QString>& channelSettingsKeys, const M17DemodSettings& settings, bool force) void M17Demod::webapiReverseSendSettings(const QList<QString>& channelSettingsKeys, const M17DemodSettings& settings, bool force)
{ {
SWGSDRangel::SWGChannelSettings *swgChannelSettings = new SWGSDRangel::SWGChannelSettings(); SWGSDRangel::SWGChannelSettings *swgChannelSettings = new SWGSDRangel::SWGChannelSettings();
webapiFormatChannelSettings(channelSettingsKeys, swgChannelSettings, settings, force); webapiFormatChannelSettings(channelSettingsKeys, swgChannelSettings, settings, force);
@ -607,7 +575,7 @@ void M17Demod::webapiReverseSendSettings(QList<QString>& channelSettingsKeys, co
void M17Demod::sendChannelSettings( void M17Demod::sendChannelSettings(
const QList<ObjectPipe*>& pipes, const QList<ObjectPipe*>& pipes,
QList<QString>& channelSettingsKeys, const QList<QString>& channelSettingsKeys,
const M17DemodSettings& settings, const M17DemodSettings& settings,
bool force) bool force)
{ {
@ -631,7 +599,7 @@ void M17Demod::sendChannelSettings(
} }
void M17Demod::webapiFormatChannelSettings( void M17Demod::webapiFormatChannelSettings(
QList<QString>& channelSettingsKeys, const QList<QString>& channelSettingsKeys,
SWGSDRangel::SWGChannelSettings *swgChannelSettings, SWGSDRangel::SWGChannelSettings *swgChannelSettings,
const M17DemodSettings& settings, const M17DemodSettings& settings,
bool force bool force
@ -673,6 +641,9 @@ void M17Demod::webapiFormatChannelSettings(
if (channelSettingsKeys.contains("syncOrConstellation") || force) { if (channelSettingsKeys.contains("syncOrConstellation") || force) {
swgM17DemodSettings->setSyncOrConstellation(settings.m_syncOrConstellation ? 1 : 0); swgM17DemodSettings->setSyncOrConstellation(settings.m_syncOrConstellation ? 1 : 0);
} }
if (channelSettingsKeys.contains("statusLogEnabled") || force) {
swgM17DemodSettings->setStatusLogEnabled(settings.m_statusLogEnabled ? 1 : 0);
}
if (channelSettingsKeys.contains("rgbColor") || force) { if (channelSettingsKeys.contains("rgbColor") || force) {
swgM17DemodSettings->setRgbColor(settings.m_rgbColor); swgM17DemodSettings->setRgbColor(settings.m_rgbColor);
} }

View File

@ -43,19 +43,22 @@ public:
public: public:
const M17DemodSettings& getSettings() const { return m_settings; } const M17DemodSettings& getSettings() const { return m_settings; }
const QList<QString>& getSettingsKeys() const { return m_settingsKeys; }
bool getForce() const { return m_force; } bool getForce() const { return m_force; }
static MsgConfigureM17Demod* create(const M17DemodSettings& settings, bool force) { static MsgConfigureM17Demod* create(const M17DemodSettings& settings, const QList<QString>& settingsKeys, bool force) {
return new MsgConfigureM17Demod(settings, force); return new MsgConfigureM17Demod(settings, settingsKeys, force);
} }
private: private:
M17DemodSettings m_settings; M17DemodSettings m_settings;
QList<QString> m_settingsKeys;
bool m_force; bool m_force;
MsgConfigureM17Demod(const M17DemodSettings& settings, bool force) : MsgConfigureM17Demod(const M17DemodSettings& settings, const QList<QString>& settingsKeys, bool force) :
Message(), Message(),
m_settings(settings), m_settings(settings),
m_settingsKeys(settingsKeys),
m_force(force) m_force(force)
{ } { }
}; };
@ -272,18 +275,18 @@ private:
static const int m_udpBlockSize; static const int m_udpBlockSize;
virtual bool handleMessage(const Message& cmd); virtual bool handleMessage(const Message& cmd);
void applySettings(const M17DemodSettings& settings, bool force = false); void applySettings(const M17DemodSettings& settings, const QList<QString>& settingsKeys, bool force = false);
void sendSampleRateToDemodAnalyzer(); void sendSampleRateToDemodAnalyzer();
void webapiFormatChannelReport(SWGSDRangel::SWGChannelReport& response); void webapiFormatChannelReport(SWGSDRangel::SWGChannelReport& response);
void webapiReverseSendSettings(QList<QString>& channelSettingsKeys, const M17DemodSettings& settings, bool force); void webapiReverseSendSettings(const QList<QString>& channelSettingsKeys, const M17DemodSettings& settings, bool force);
void sendChannelSettings( void sendChannelSettings(
const QList<ObjectPipe*>& pipes, const QList<ObjectPipe*>& pipes,
QList<QString>& channelSettingsKeys, const QList<QString>& channelSettingsKeys,
const M17DemodSettings& settings, const M17DemodSettings& settings,
bool force bool force
); );
void webapiFormatChannelSettings( void webapiFormatChannelSettings(
QList<QString>& channelSettingsKeys, const QList<QString>& channelSettingsKeys,
SWGSDRangel::SWGChannelSettings *swgChannelSettings, SWGSDRangel::SWGChannelSettings *swgChannelSettings,
const M17DemodSettings& settings, const M17DemodSettings& settings,
bool force bool force

View File

@ -117,7 +117,7 @@ bool M17DemodBaseband::handleMessage(const Message& cmd)
MsgConfigureM17DemodBaseband& cfg = (MsgConfigureM17DemodBaseband&) cmd; MsgConfigureM17DemodBaseband& cfg = (MsgConfigureM17DemodBaseband&) cmd;
qDebug() << "M17DemodBaseband::handleMessage: MsgConfigureM17DemodBaseband"; qDebug() << "M17DemodBaseband::handleMessage: MsgConfigureM17DemodBaseband";
applySettings(cfg.getSettings(), cfg.getForce()); applySettings(cfg.getSettings(), cfg.getSettingsKeys(), cfg.getForce());
return true; return true;
} }
@ -144,9 +144,9 @@ bool M17DemodBaseband::handleMessage(const Message& cmd)
} }
} }
void M17DemodBaseband::applySettings(const M17DemodSettings& settings, bool force) void M17DemodBaseband::applySettings(const M17DemodSettings& settings, const QList<QString>& settingsKeys, bool force)
{ {
if ((settings.m_inputFrequencyOffset != m_settings.m_inputFrequencyOffset) || force) if (settingsKeys.contains("inputFrequencyOffset") || force)
{ {
m_channelizer->setChannelization(48000, settings.m_inputFrequencyOffset); m_channelizer->setChannelization(48000, settings.m_inputFrequencyOffset);
m_sink.applyChannelSettings(m_channelizer->getChannelSampleRate(), m_channelizer->getChannelFrequencyOffset()); m_sink.applyChannelSettings(m_channelizer->getChannelSampleRate(), m_channelizer->getChannelFrequencyOffset());
@ -158,7 +158,7 @@ void M17DemodBaseband::applySettings(const M17DemodSettings& settings, bool forc
} }
} }
if ((settings.m_audioDeviceName != m_settings.m_audioDeviceName) || force) if (settingsKeys.contains("audioDeviceName") || force)
{ {
AudioDeviceManager *audioDeviceManager = DSPEngine::instance()->getAudioDeviceManager(); AudioDeviceManager *audioDeviceManager = DSPEngine::instance()->getAudioDeviceManager();
int audioDeviceIndex = audioDeviceManager->getOutputDeviceIndex(settings.m_audioDeviceName); int audioDeviceIndex = audioDeviceManager->getOutputDeviceIndex(settings.m_audioDeviceName);
@ -172,9 +172,13 @@ void M17DemodBaseband::applySettings(const M17DemodSettings& settings, bool forc
} }
} }
m_sink.applySettings(settings, force); m_sink.applySettings(settings, settingsKeys, force);
if (force) {
m_settings = settings; m_settings = settings;
} else {
m_settings.applySettings(settingsKeys, settings);
}
} }
int M17DemodBaseband::getChannelSampleRate() const int M17DemodBaseband::getChannelSampleRate() const

View File

@ -39,20 +39,22 @@ public:
public: public:
const M17DemodSettings& getSettings() const { return m_settings; } const M17DemodSettings& getSettings() const { return m_settings; }
const QList<QString>& getSettingsKeys() const { return m_settingsKeys; }
bool getForce() const { return m_force; } bool getForce() const { return m_force; }
static MsgConfigureM17DemodBaseband* create(const M17DemodSettings& settings, bool force) static MsgConfigureM17DemodBaseband* create(const M17DemodSettings& settings, const QList<QString>& settingsKeys, bool force) {
{ return new MsgConfigureM17DemodBaseband(settings, settingsKeys, force);
return new MsgConfigureM17DemodBaseband(settings, force);
} }
private: private:
M17DemodSettings m_settings; M17DemodSettings m_settings;
QList<QString> m_settingsKeys;
bool m_force; bool m_force;
MsgConfigureM17DemodBaseband(const M17DemodSettings& settings, bool force) : MsgConfigureM17DemodBaseband(const M17DemodSettings& settings, const QList<QString>& settingsKeys, bool force) :
Message(), Message(),
m_settings(settings), m_settings(settings),
m_settingsKeys(settingsKeys),
m_force(force) m_force(force)
{ } { }
}; };
@ -128,7 +130,7 @@ private:
QMutex m_mutex; QMutex m_mutex;
bool handleMessage(const Message& cmd); bool handleMessage(const Message& cmd);
void applySettings(const M17DemodSettings& settings, bool force = false); void applySettings(const M17DemodSettings& settings, const QList<QString>& settingsKeys, bool force = false);
private slots: private slots:
void handleInputMessages(); void handleInputMessages();

View File

@ -63,7 +63,7 @@ void M17DemodGUI::resetToDefaults()
blockApplySettings(true); blockApplySettings(true);
displaySettings(); displaySettings();
blockApplySettings(false); blockApplySettings(false);
applySettings(); applySettings(QList<QString>(), true);
} }
QByteArray M17DemodGUI::serialize() const QByteArray M17DemodGUI::serialize() const
@ -76,7 +76,7 @@ bool M17DemodGUI::deserialize(const QByteArray& data)
if (m_settings.deserialize(data)) if (m_settings.deserialize(data))
{ {
displaySettings(); displaySettings();
applySettings(true); applySettings(QList<QString>(), true);
return true; return true;
} }
else else
@ -100,7 +100,13 @@ bool M17DemodGUI::handleMessage(const Message& message)
{ {
qDebug("M17DemodGUI::handleMessage: M17Demod::MsgConfigureM17Demod"); qDebug("M17DemodGUI::handleMessage: M17Demod::MsgConfigureM17Demod");
const M17Demod::MsgConfigureM17Demod& cfg = (M17Demod::MsgConfigureM17Demod&) message; const M17Demod::MsgConfigureM17Demod& cfg = (M17Demod::MsgConfigureM17Demod&) message;
if (cfg.getForce()) {
m_settings = cfg.getSettings(); m_settings = cfg.getSettings();
} else {
m_settings.applySettings(cfg.getSettingsKeys(), cfg.getSettings());
}
blockApplySettings(true); blockApplySettings(true);
m_channelMarker.updateSettings(static_cast<const ChannelMarker*>(m_settings.m_channelMarker)); m_channelMarker.updateSettings(static_cast<const ChannelMarker*>(m_settings.m_channelMarker));
displaySettings(); displaySettings();
@ -124,14 +130,19 @@ bool M17DemodGUI::handleMessage(const Message& message)
QString dateStr = dt.toString("HH:mm:ss"); QString dateStr = dt.toString("HH:mm:ss");
QTextCursor cursor = ui->smsLog->textCursor(); QTextCursor cursor = ui->smsLog->textCursor();
cursor.movePosition(QTextCursor::End, QTextCursor::MoveAnchor); cursor.movePosition(QTextCursor::End, QTextCursor::MoveAnchor);
cursor.insertText(tr("=== %1 %2 to %3 ===\n%4\n") QString s(tr("=== %1 %2 to %3 ===\n%4\n")
.arg(dateStr) .arg(dateStr)
.arg(report.getSource()) .arg(report.getSource())
.arg(report.getDest()) .arg(report.getDest())
.arg(report.getSMS()) .arg(report.getSMS())
); );
cursor.insertText(s);
ui->smsLog->verticalScrollBar()->setValue(ui->smsLog->verticalScrollBar()->maximum()); ui->smsLog->verticalScrollBar()->setValue(ui->smsLog->verticalScrollBar()->maximum());
if (ui->activateStatusLog->isChecked()) {
m_m17StatusTextDialog.addLine(tr("SMS: %1").arg(report.getSMS()));
}
return true; return true;
} }
else if (M17Demod::MsgReportAPRS::match(message)) else if (M17Demod::MsgReportAPRS::match(message))
@ -169,6 +180,19 @@ bool M17DemodGUI::handleMessage(const Message& message)
ui->aprsPackets->scrollToBottom(); ui->aprsPackets->scrollToBottom();
} }
if (ui->activateStatusLog->isChecked())
{
QString s(tr("APRS: %1 to %2 via %3 typ %4 pid %5: %6")
.arg(report.getFrom())
.arg(report.getTo())
.arg(report.getVia())
.arg(report.getType())
.arg(report.getPID())
.arg(report.getData())
);
m_m17StatusTextDialog.addLine(s);
}
return true; return true;
} }
else else
@ -195,7 +219,7 @@ void M17DemodGUI::on_deltaFrequency_changed(qint64 value)
m_channelMarker.setCenterFrequency(value); m_channelMarker.setCenterFrequency(value);
m_settings.m_inputFrequencyOffset = m_channelMarker.getCenterFrequency(); m_settings.m_inputFrequencyOffset = m_channelMarker.getCenterFrequency();
updateAbsoluteCenterFrequency(); updateAbsoluteCenterFrequency();
applySettings(); applySettings(QList<QString>({"inputFrequencyOffset"}));
} }
void M17DemodGUI::on_rfBW_valueChanged(int value) void M17DemodGUI::on_rfBW_valueChanged(int value)
@ -203,33 +227,33 @@ void M17DemodGUI::on_rfBW_valueChanged(int value)
m_channelMarker.setBandwidth(value * 100); m_channelMarker.setBandwidth(value * 100);
m_settings.m_rfBandwidth = value * 100.0; m_settings.m_rfBandwidth = value * 100.0;
ui->rfBWText->setText(QString("%1k").arg(value / 10.0, 0, 'f', 1)); ui->rfBWText->setText(QString("%1k").arg(value / 10.0, 0, 'f', 1));
applySettings(); applySettings(QList<QString>({"rfBandwidth"}));
} }
void M17DemodGUI::on_fmDeviation_valueChanged(int value) void M17DemodGUI::on_fmDeviation_valueChanged(int value)
{ {
m_settings.m_fmDeviation = value * 100.0; m_settings.m_fmDeviation = value * 100.0;
ui->fmDeviationText->setText(QString("%1%2k").arg(QChar(0xB1, 0x00)).arg(value / 10.0, 0, 'f', 1)); ui->fmDeviationText->setText(QString("%1%2k").arg(QChar(0xB1, 0x00)).arg(value / 10.0, 0, 'f', 1));
applySettings(); applySettings(QList<QString>({"fmDeviation"}));
} }
void M17DemodGUI::on_volume_valueChanged(int value) void M17DemodGUI::on_volume_valueChanged(int value)
{ {
m_settings.m_volume= value / 100.0; m_settings.m_volume= value / 100.0;
ui->volumeText->setText(QString("%1").arg(value / 100.0, 0, 'f', 2)); ui->volumeText->setText(QString("%1").arg(value / 100.0, 0, 'f', 2));
applySettings(); applySettings(QList<QString>({"volume"}));
} }
void M17DemodGUI::on_baudRate_currentIndexChanged(int index) void M17DemodGUI::on_baudRate_currentIndexChanged(int index)
{ {
m_settings.m_baudRate = M17DemodBaudRates::getRate(index); m_settings.m_baudRate = M17DemodBaudRates::getRate(index);
applySettings(); applySettings(QList<QString>({"baudRate"}));
} }
void M17DemodGUI::on_syncOrConstellation_toggled(bool checked) void M17DemodGUI::on_syncOrConstellation_toggled(bool checked)
{ {
m_settings.m_syncOrConstellation = checked; m_settings.m_syncOrConstellation = checked;
applySettings(); applySettings(QList<QString>({"syncOrConstellation"}));
} }
void M17DemodGUI::on_traceLength_valueChanged(int value) void M17DemodGUI::on_traceLength_valueChanged(int value)
@ -257,26 +281,26 @@ void M17DemodGUI::on_squelchGate_valueChanged(int value)
{ {
m_settings.m_squelchGate = value; m_settings.m_squelchGate = value;
ui->squelchGateText->setText(QString("%1").arg(value * 10.0, 0, 'f', 0)); ui->squelchGateText->setText(QString("%1").arg(value * 10.0, 0, 'f', 0));
applySettings(); applySettings(QList<QString>({"squelchGate"}));
} }
void M17DemodGUI::on_squelch_valueChanged(int value) void M17DemodGUI::on_squelch_valueChanged(int value)
{ {
ui->squelchText->setText(QString("%1").arg(value / 1.0, 0, 'f', 0)); ui->squelchText->setText(QString("%1").arg(value / 1.0, 0, 'f', 0));
m_settings.m_squelch = value; m_settings.m_squelch = value;
applySettings(); applySettings(QList<QString>({"squelch"}));
} }
void M17DemodGUI::on_audioMute_toggled(bool checked) void M17DemodGUI::on_audioMute_toggled(bool checked)
{ {
m_settings.m_audioMute = checked; m_settings.m_audioMute = checked;
applySettings(); applySettings(QList<QString>({"audioMute"}));
} }
void M17DemodGUI::on_highPassFilter_toggled(bool checked) void M17DemodGUI::on_highPassFilter_toggled(bool checked)
{ {
m_settings.m_highPassFilter = checked; m_settings.m_highPassFilter = checked;
applySettings(); applySettings(QList<QString>({"highPassFilter"}));
} }
void M17DemodGUI::on_aprsClearTable_clicked() void M17DemodGUI::on_aprsClearTable_clicked()
@ -326,7 +350,6 @@ void M17DemodGUI::onWidgetRolled(QWidget* widget, bool rollDown)
(void) rollDown; (void) rollDown;
getRollupContents()->saveState(m_rollupState); getRollupContents()->saveState(m_rollupState);
applySettings();
} }
void M17DemodGUI::onMenuDialogCalled(const QPoint &p) void M17DemodGUI::onMenuDialogCalled(const QPoint &p)
@ -362,15 +385,26 @@ void M17DemodGUI::onMenuDialogCalled(const QPoint &p)
setTitle(m_channelMarker.getTitle()); setTitle(m_channelMarker.getTitle());
setTitleColor(m_settings.m_rgbColor); setTitleColor(m_settings.m_rgbColor);
QList<QString> settingsKeys({
"m_rgbColor",
"title",
"useReverseAPI",
"reverseAPIAddress",
"reverseAPIPort",
"reverseAPIDeviceIndex",
"reverseAPIChannelIndex"
});
if (m_deviceUISet->m_deviceMIMOEngine) if (m_deviceUISet->m_deviceMIMOEngine)
{ {
settingsKeys.append("streamIndex");
m_settings.m_streamIndex = dialog.getSelectedStreamIndex(); m_settings.m_streamIndex = dialog.getSelectedStreamIndex();
m_channelMarker.clearStreamIndexes(); m_channelMarker.clearStreamIndexes();
m_channelMarker.addStreamIndex(m_settings.m_streamIndex); m_channelMarker.addStreamIndex(m_settings.m_streamIndex);
updateIndexLabel(); updateIndexLabel();
} }
applySettings(); applySettings(settingsKeys);
} }
resetContextMenuType(); resetContextMenuType();
@ -483,7 +517,7 @@ M17DemodGUI::M17DemodGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Baseban
updateMyPosition(); updateMyPosition();
displaySettings(); displaySettings();
makeUIConnections(); makeUIConnections();
applySettings(true); applySettings(QList<QString>(), true);
} }
M17DemodGUI::~M17DemodGUI() M17DemodGUI::~M17DemodGUI()
@ -569,13 +603,13 @@ void M17DemodGUI::displaySettings()
blockApplySettings(false); blockApplySettings(false);
} }
void M17DemodGUI::applySettings(bool force) void M17DemodGUI::applySettings(const QList<QString>& settingsKeys, bool force)
{ {
if (m_doApplySettings) if (m_doApplySettings)
{ {
qDebug() << "M17DemodGUI::applySettings"; qDebug() << "M17DemodGUI::applySettings";
M17Demod::MsgConfigureM17Demod* message = M17Demod::MsgConfigureM17Demod::create( m_settings, force); M17Demod::MsgConfigureM17Demod* message = M17Demod::MsgConfigureM17Demod::create( m_settings, settingsKeys, force);
m_m17Demod->getInputMessageQueue()->push(message); m_m17Demod->getInputMessageQueue()->push(message);
} }
} }
@ -601,7 +635,7 @@ void M17DemodGUI::channelMarkerChangedByCursor()
{ {
ui->deltaFrequency->setValue(m_channelMarker.getCenterFrequency()); ui->deltaFrequency->setValue(m_channelMarker.getCenterFrequency());
m_settings.m_inputFrequencyOffset = m_channelMarker.getCenterFrequency(); m_settings.m_inputFrequencyOffset = m_channelMarker.getCenterFrequency();
applySettings(); applySettings(QList<QString>({"inputFrequencyOffset"}));
} }
void M17DemodGUI::channelMarkerHighlightedByCursor() void M17DemodGUI::channelMarkerHighlightedByCursor()
@ -611,14 +645,13 @@ void M17DemodGUI::channelMarkerHighlightedByCursor()
void M17DemodGUI::audioSelect() void M17DemodGUI::audioSelect()
{ {
qDebug("M17DemodGUI::audioSelect");
AudioSelectDialog audioSelect(DSPEngine::instance()->getAudioDeviceManager(), m_settings.m_audioDeviceName); AudioSelectDialog audioSelect(DSPEngine::instance()->getAudioDeviceManager(), m_settings.m_audioDeviceName);
audioSelect.exec(); audioSelect.exec();
if (audioSelect.m_selected) if (audioSelect.m_selected)
{ {
m_settings.m_audioDeviceName = audioSelect.m_audioDeviceName; m_settings.m_audioDeviceName = audioSelect.m_audioDeviceName;
applySettings(); applySettings(QList<QString>({"audioDeviceName"}));
} }
} }

View File

@ -124,7 +124,7 @@ private:
virtual ~M17DemodGUI(); virtual ~M17DemodGUI();
void blockApplySettings(bool block); void blockApplySettings(bool block);
void applySettings(bool force = false); void applySettings(const QList<QString>& settingsKeys, bool force = false);
void displaySettings(); void displaySettings();
void updateAMBEFeaturesList(); void updateAMBEFeaturesList();
void updateMyPosition(); void updateMyPosition();
@ -159,9 +159,9 @@ private slots:
void on_berButton_toggled(bool checked); void on_berButton_toggled(bool checked);
void on_berHistory_valueChanged(int value); void on_berHistory_valueChanged(int value);
void on_berReset_clicked(); void on_berReset_clicked();
void on_viewStatusLog_clicked();
void onWidgetRolled(QWidget* widget, bool rollDown); void onWidgetRolled(QWidget* widget, bool rollDown);
void onMenuDialogCalled(const QPoint& p); void onMenuDialogCalled(const QPoint& p);
void on_viewStatusLog_clicked();
void handleInputMessages(); void handleInputMessages();
void audioSelect(); void audioSelect();
void tick(); void tick();

View File

@ -280,14 +280,14 @@
<widget class="QPushButton" name="viewStatusLog"> <widget class="QPushButton" name="viewStatusLog">
<property name="minimumSize"> <property name="minimumSize">
<size> <size>
<width>24</width> <width>32</width>
<height>0</height> <height>32</height>
</size> </size>
</property> </property>
<property name="maximumSize"> <property name="maximumSize">
<size> <size>
<width>24</width> <width>24</width>
<height>16777215</height> <height>32</height>
</size> </size>
</property> </property>
<property name="toolTip"> <property name="toolTip">

View File

@ -48,6 +48,7 @@ void M17DemodSettings::resetToDefaults()
m_traceStroke = 100; m_traceStroke = 100;
m_traceDecay = 200; m_traceDecay = 200;
m_audioDeviceName = AudioDeviceManager::m_defaultDeviceName; m_audioDeviceName = AudioDeviceManager::m_defaultDeviceName;
m_statusLogEnabled = false;
m_streamIndex = 0; m_streamIndex = 0;
m_useReverseAPI = false; m_useReverseAPI = false;
m_reverseAPIAddress = "127.0.0.1"; m_reverseAPIAddress = "127.0.0.1";
@ -69,6 +70,7 @@ QByteArray M17DemodSettings::serialize() const
s.writeS32(8, m_squelchGate); s.writeS32(8, m_squelchGate);
s.writeS32(9, m_volume*10.0); s.writeS32(9, m_volume*10.0);
s.writeS32(11, m_baudRate); s.writeS32(11, m_baudRate);
s.writeBool(12, m_statusLogEnabled);
s.writeBool(13, m_syncOrConstellation); s.writeBool(13, m_syncOrConstellation);
if (m_channelMarker) { if (m_channelMarker) {
@ -127,7 +129,6 @@ bool M17DemodSettings::deserialize(const QByteArray& data)
m_inputFrequencyOffset = tmp; m_inputFrequencyOffset = tmp;
d.readS32(2, &tmp, 125); d.readS32(2, &tmp, 125);
m_rfBandwidth = tmp * 100.0; m_rfBandwidth = tmp * 100.0;
d.readS32(3, &tmp, 125);
d.readS32(4, &tmp, 50); d.readS32(4, &tmp, 50);
m_fmDeviation = tmp * 100.0; m_fmDeviation = tmp * 100.0;
d.readS32(5, &tmp, -40); d.readS32(5, &tmp, -40);
@ -137,6 +138,7 @@ bool M17DemodSettings::deserialize(const QByteArray& data)
d.readS32(9, &tmp, 20); d.readS32(9, &tmp, 20);
m_volume = tmp / 10.0; m_volume = tmp / 10.0;
d.readS32(11, &m_baudRate, 4800); d.readS32(11, &m_baudRate, 4800);
d.readBool(12, &m_statusLogEnabled, false);
d.readBool(13, &m_syncOrConstellation, false); d.readBool(13, &m_syncOrConstellation, false);
d.readString(18, &m_title, "M17 Demodulator"); d.readString(18, &m_title, "M17 Demodulator");
d.readBool(19, &m_highPassFilter, false); d.readBool(19, &m_highPassFilter, false);
@ -183,3 +185,78 @@ bool M17DemodSettings::deserialize(const QByteArray& data)
} }
} }
void M17DemodSettings::applySettings(const QStringList& settingsKeys, const M17DemodSettings& settings)
{
if (settingsKeys.contains("inputFrequencyOffset")) {
m_inputFrequencyOffset = settings.m_inputFrequencyOffset;
}
if (settingsKeys.contains("rfBandwidth")) {
m_rfBandwidth = settings.m_rfBandwidth;
}
if (settingsKeys.contains("fmDeviation")) {
m_fmDeviation = settings.m_fmDeviation;
}
if (settingsKeys.contains("squelch")) {
m_squelch = settings.m_squelch;
}
if (settingsKeys.contains("rgbColor")) {
m_rgbColor = settings.m_rgbColor;
}
if (settingsKeys.contains("squelchGate")) {
m_squelchGate = settings.m_squelchGate;
}
if (settingsKeys.contains("volume")) {
m_volume = settings.m_volume;
}
if (settingsKeys.contains("baudRate")) {
m_baudRate = settings.m_baudRate;
}
if (settingsKeys.contains("statusLogEnabled")) {
m_statusLogEnabled = settings.m_statusLogEnabled;
}
if (settingsKeys.contains("syncOrConstellation")) {
m_syncOrConstellation = settings.m_syncOrConstellation;
}
if (settingsKeys.contains("title")) {
m_title = settings.m_title;
}
if (settingsKeys.contains("highPassFilter")) {
m_highPassFilter = settings.m_highPassFilter;
}
if (settingsKeys.contains("audioDeviceName")) {
m_audioDeviceName = settings.m_audioDeviceName;
}
if (settingsKeys.contains("traceLengthMutliplier")) {
m_traceLengthMutliplier = settings.m_traceLengthMutliplier;
}
if (settingsKeys.contains("traceStroke")) {
m_traceStroke = settings.m_traceStroke;
}
if (settingsKeys.contains("traceDecay")) {
m_traceDecay = settings.m_traceDecay;
}
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("audioMute")) {
m_audioMute = settings.m_audioMute;
}
if (settingsKeys.contains("streamIndex")) {
m_streamIndex = settings.m_streamIndex;
}
if (settingsKeys.contains("rollupState")) {
m_rollupState = settings.m_rollupState;
}
if (settingsKeys.contains("channelMarker")) {
m_channelMarker = settings.m_channelMarker;
}
}

View File

@ -43,8 +43,7 @@ struct M17DemodSettings
int m_traceStroke; // [0..255] int m_traceStroke; // [0..255]
int m_traceDecay; // [0..255] int m_traceDecay; // [0..255]
QString m_audioDeviceName; QString m_audioDeviceName;
QString m_aprsLogFilename; bool m_statusLogEnabled;
bool m_aprsLogEnabled;
int m_streamIndex; //!< MIMO channel. Not relevant when connected to SI (single Rx). int m_streamIndex; //!< MIMO channel. Not relevant when connected to SI (single Rx).
bool m_useReverseAPI; bool m_useReverseAPI;
QString m_reverseAPIAddress; QString m_reverseAPIAddress;
@ -64,6 +63,7 @@ struct M17DemodSettings
void setRollupState(Serializable *rollupState) { m_rollupState = rollupState; } void setRollupState(Serializable *rollupState) { m_rollupState = rollupState; }
QByteArray serialize() const; QByteArray serialize() const;
bool deserialize(const QByteArray& data); bool deserialize(const QByteArray& data);
void applySettings(const QStringList& settingsKeys, const M17DemodSettings& settings);
}; };

View File

@ -74,7 +74,7 @@ M17DemodSink::M17DemodSink() :
m_magsqPeak = 0.0f; m_magsqPeak = 0.0f;
m_magsqCount = 0; m_magsqCount = 0;
applySettings(m_settings, true); applySettings(m_settings, QList<QString>(), true);
applyChannelSettings(m_channelSampleRate, m_channelFrequencyOffset, true); applyChannelSettings(m_channelSampleRate, m_channelFrequencyOffset, true);
} }
@ -305,9 +305,10 @@ void M17DemodSink::applyChannelSettings(int channelSampleRate, int channelFreque
} }
void M17DemodSink::applySettings(const M17DemodSettings& settings, bool force) void M17DemodSink::applySettings(const M17DemodSettings& settings, const QList<QString>& settingsKeys, bool force)
{ {
qDebug() << "M17DemodSink::applySettings: " qDebug() << "M17DemodSink::applySettings: "
<< " settingsKeys: " << settingsKeys
<< " m_inputFrequencyOffset: " << settings.m_inputFrequencyOffset << " m_inputFrequencyOffset: " << settings.m_inputFrequencyOffset
<< " m_rfBandwidth: " << settings.m_rfBandwidth << " m_rfBandwidth: " << settings.m_rfBandwidth
<< " m_fmDeviation: " << settings.m_fmDeviation << " m_fmDeviation: " << settings.m_fmDeviation
@ -325,7 +326,7 @@ void M17DemodSink::applySettings(const M17DemodSettings& settings, bool force)
<< " m_streamIndex: " << settings.m_streamIndex << " m_streamIndex: " << settings.m_streamIndex
<< " force: " << force; << " force: " << force;
if ((settings.m_rfBandwidth != m_settings.m_rfBandwidth) || force) if (settingsKeys.contains("rfBandwidth") || force)
{ {
m_interpolator.create(16, m_channelSampleRate, (settings.m_rfBandwidth) / 2.2); m_interpolator.create(16, m_channelSampleRate, (settings.m_rfBandwidth) / 2.2);
m_interpolatorDistanceRemain = 0; m_interpolatorDistanceRemain = 0;
@ -333,38 +334,42 @@ void M17DemodSink::applySettings(const M17DemodSettings& settings, bool force)
//m_phaseDiscri.setFMScaling((float) settings.m_rfBandwidth / (float) settings.m_fmDeviation); //m_phaseDiscri.setFMScaling((float) settings.m_rfBandwidth / (float) settings.m_fmDeviation);
} }
if ((settings.m_fmDeviation != m_settings.m_fmDeviation) || force) { if (settingsKeys.contains("fmDeviation") || force) {
m_phaseDiscri.setFMScaling(48000.0f / (2.0f*settings.m_fmDeviation)); m_phaseDiscri.setFMScaling(48000.0f / (2.0f*settings.m_fmDeviation));
} }
if ((settings.m_squelchGate != m_settings.m_squelchGate) || force) if (settingsKeys.contains("squelchGate") || force)
{ {
m_squelchGate = 480 * settings.m_squelchGate; // gate is given in 10s of ms at 48000 Hz audio sample rate m_squelchGate = 480 * settings.m_squelchGate; // gate is given in 10s of ms at 48000 Hz audio sample rate
m_squelchCount = 0; // reset squelch open counter m_squelchCount = 0; // reset squelch open counter
} }
if ((settings.m_squelch != m_settings.m_squelch) || force) { if (settingsKeys.contains("squelch") || force) {
m_squelchLevel = std::pow(10.0, settings.m_squelch / 10.0); // input is a value in dB m_squelchLevel = std::pow(10.0, settings.m_squelch / 10.0); // input is a value in dB
} }
if ((settings.m_audioMute != m_settings.m_audioMute) || force) { if (settingsKeys.contains("audioMute") || force) {
m_m17DemodProcessor.setAudioMute(settings.m_audioMute); m_m17DemodProcessor.setAudioMute(settings.m_audioMute);
} }
if ((settings.m_volume != m_settings.m_volume) || force) { if (settingsKeys.contains("volume") || force) {
m_m17DemodProcessor.setVolume(settings.m_volume); m_m17DemodProcessor.setVolume(settings.m_volume);
} }
if ((settings.m_baudRate != m_settings.m_baudRate) || force) if (settingsKeys.contains("baudRate") || force)
{ {
// m_dsdDecoder.setBaudRate(settings.m_baudRate); // m_dsdDecoder.setBaudRate(settings.m_baudRate); (future)
} }
if ((settings.m_highPassFilter != m_settings.m_highPassFilter) || force) { if (settingsKeys.contains("highPassFilter") || force) {
m_m17DemodProcessor.setHP(settings.m_highPassFilter); m_m17DemodProcessor.setHP(settings.m_highPassFilter);
} }
if (force) {
m_settings = settings; m_settings = settings;
} else {
m_settings.applySettings(settingsKeys, settings);
}
} }
void M17DemodSink::configureMyPosition(float myLatitude, float myLongitude) void M17DemodSink::configureMyPosition(float myLatitude, float myLongitude)

View File

@ -46,7 +46,7 @@ public:
void applyAudioSampleRate(int sampleRate); void applyAudioSampleRate(int sampleRate);
void applyChannelSettings(int channelSampleRate, int channelFrequencyOffset, bool force = false); void applyChannelSettings(int channelSampleRate, int channelFrequencyOffset, bool force = false);
void applySettings(const M17DemodSettings& settings, bool force = false); void applySettings(const M17DemodSettings& settings, const QList<QString>& settingsKeys, bool force = false);
AudioFifo *getAudioFifo() { return &m_audioFifo; } AudioFifo *getAudioFifo() { return &m_audioFifo; }
void setAudioFifoLabel(const QString& label) { m_audioFifo.setLabel("1:" + label); } void setAudioFifoLabel(const QString& label) { m_audioFifo.setLabel("1:" + label); }
int getAudioSampleRate() const { return m_audioSampleRate; } int getAudioSampleRate() const { return m_audioSampleRate; }

View File

@ -102,7 +102,13 @@ bool M17ModGUI::handleMessage(const Message& message)
else if (M17Mod::MsgConfigureM17Mod::match(message)) else if (M17Mod::MsgConfigureM17Mod::match(message))
{ {
const M17Mod::MsgConfigureM17Mod& cfg = (M17Mod::MsgConfigureM17Mod&) message; const M17Mod::MsgConfigureM17Mod& cfg = (M17Mod::MsgConfigureM17Mod&) message;
if (cfg.getForce()) {
m_settings = cfg.getSettings(); m_settings = cfg.getSettings();
} else {
m_settings.applySettings(cfg.getSettingsKeys(), cfg.getSettings());
}
blockApplySettings(true); blockApplySettings(true);
m_channelMarker.updateSettings(static_cast<const ChannelMarker*>(m_settings.m_channelMarker)); m_channelMarker.updateSettings(static_cast<const ChannelMarker*>(m_settings.m_channelMarker));
displaySettings(); displaySettings();

View File

@ -8257,11 +8257,11 @@ margin-bottom: 20px;
"type" : "number", "type" : "number",
"format" : "float" "format" : "float"
}, },
"demodGain" : { "volume" : {
"type" : "number", "type" : "number",
"format" : "float" "format" : "float"
}, },
"volume" : { "demodGain" : {
"type" : "number", "type" : "number",
"format" : "float" "format" : "float"
}, },
@ -8281,18 +8281,12 @@ margin-bottom: 20px;
"syncOrConstellation" : { "syncOrConstellation" : {
"type" : "integer" "type" : "integer"
}, },
"pllLock" : {
"type" : "integer"
},
"rgbColor" : { "rgbColor" : {
"type" : "integer" "type" : "integer"
}, },
"title" : { "title" : {
"type" : "string" "type" : "string"
}, },
"audioDeviceName" : {
"type" : "string"
},
"highPassFilter" : { "highPassFilter" : {
"type" : "integer" "type" : "integer"
}, },
@ -8308,6 +8302,12 @@ margin-bottom: 20px;
"type" : "integer", "type" : "integer",
"description" : "0 to 255" "description" : "0 to 255"
}, },
"audioDeviceName" : {
"type" : "string"
},
"statusLogEnabled" : {
"type" : "integer"
},
"streamIndex" : { "streamIndex" : {
"type" : "integer", "type" : "integer",
"description" : "MIMO channel. Not relevant when connected to SI (single Rx)." "description" : "MIMO channel. Not relevant when connected to SI (single Rx)."
@ -56435,7 +56435,7 @@ except ApiException as e:
</div> </div>
<div id="generator"> <div id="generator">
<div class="content"> <div class="content">
Generated 2022-07-09T11:05:50.499+02:00 Generated 2022-07-10T10:00:03.872+02:00
</div> </div>
</div> </div>
</div> </div>

View File

@ -10,10 +10,10 @@ M17DemodSettings:
fmDeviation: fmDeviation:
type: number type: number
format: float format: float
demodGain: volume:
type: number type: number
format: float format: float
volume: demodGain:
type: number type: number
format: float format: float
baudRate: baudRate:
@ -27,14 +27,10 @@ M17DemodSettings:
type: integer type: integer
syncOrConstellation: syncOrConstellation:
type: integer type: integer
pllLock:
type: integer
rgbColor: rgbColor:
type: integer type: integer
title: title:
type: string type: string
audioDeviceName:
type: string
highPassFilter: highPassFilter:
type: integer type: integer
traceLengthMutliplier: traceLengthMutliplier:
@ -46,6 +42,10 @@ M17DemodSettings:
traceDecay: traceDecay:
description: 0 to 255 description: 0 to 255
type: integer type: integer
audioDeviceName:
type: string
statusLogEnabled:
type: integer
streamIndex: streamIndex:
description: MIMO channel. Not relevant when connected to SI (single Rx). description: MIMO channel. Not relevant when connected to SI (single Rx).
type: integer type: integer

View File

@ -10,10 +10,10 @@ M17DemodSettings:
fmDeviation: fmDeviation:
type: number type: number
format: float format: float
demodGain: volume:
type: number type: number
format: float format: float
volume: demodGain:
type: number type: number
format: float format: float
baudRate: baudRate:
@ -27,14 +27,10 @@ M17DemodSettings:
type: integer type: integer
syncOrConstellation: syncOrConstellation:
type: integer type: integer
pllLock:
type: integer
rgbColor: rgbColor:
type: integer type: integer
title: title:
type: string type: string
audioDeviceName:
type: string
highPassFilter: highPassFilter:
type: integer type: integer
traceLengthMutliplier: traceLengthMutliplier:
@ -46,6 +42,10 @@ M17DemodSettings:
traceDecay: traceDecay:
description: 0 to 255 description: 0 to 255
type: integer type: integer
audioDeviceName:
type: string
statusLogEnabled:
type: integer
streamIndex: streamIndex:
description: MIMO channel. Not relevant when connected to SI (single Rx). description: MIMO channel. Not relevant when connected to SI (single Rx).
type: integer type: integer

View File

@ -8257,11 +8257,11 @@ margin-bottom: 20px;
"type" : "number", "type" : "number",
"format" : "float" "format" : "float"
}, },
"demodGain" : { "volume" : {
"type" : "number", "type" : "number",
"format" : "float" "format" : "float"
}, },
"volume" : { "demodGain" : {
"type" : "number", "type" : "number",
"format" : "float" "format" : "float"
}, },
@ -8281,18 +8281,12 @@ margin-bottom: 20px;
"syncOrConstellation" : { "syncOrConstellation" : {
"type" : "integer" "type" : "integer"
}, },
"pllLock" : {
"type" : "integer"
},
"rgbColor" : { "rgbColor" : {
"type" : "integer" "type" : "integer"
}, },
"title" : { "title" : {
"type" : "string" "type" : "string"
}, },
"audioDeviceName" : {
"type" : "string"
},
"highPassFilter" : { "highPassFilter" : {
"type" : "integer" "type" : "integer"
}, },
@ -8308,6 +8302,12 @@ margin-bottom: 20px;
"type" : "integer", "type" : "integer",
"description" : "0 to 255" "description" : "0 to 255"
}, },
"audioDeviceName" : {
"type" : "string"
},
"statusLogEnabled" : {
"type" : "integer"
},
"streamIndex" : { "streamIndex" : {
"type" : "integer", "type" : "integer",
"description" : "MIMO channel. Not relevant when connected to SI (single Rx)." "description" : "MIMO channel. Not relevant when connected to SI (single Rx)."
@ -56435,7 +56435,7 @@ except ApiException as e:
</div> </div>
<div id="generator"> <div id="generator">
<div class="content"> <div class="content">
Generated 2022-07-09T11:05:50.499+02:00 Generated 2022-07-10T10:00:03.872+02:00
</div> </div>
</div> </div>
</div> </div>

View File

@ -34,10 +34,10 @@ SWGM17DemodSettings::SWGM17DemodSettings() {
m_rf_bandwidth_isSet = false; m_rf_bandwidth_isSet = false;
fm_deviation = 0.0f; fm_deviation = 0.0f;
m_fm_deviation_isSet = false; m_fm_deviation_isSet = false;
demod_gain = 0.0f;
m_demod_gain_isSet = false;
volume = 0.0f; volume = 0.0f;
m_volume_isSet = false; m_volume_isSet = false;
demod_gain = 0.0f;
m_demod_gain_isSet = false;
baud_rate = 0; baud_rate = 0;
m_baud_rate_isSet = false; m_baud_rate_isSet = false;
squelch_gate = 0; squelch_gate = 0;
@ -48,14 +48,10 @@ SWGM17DemodSettings::SWGM17DemodSettings() {
m_audio_mute_isSet = false; m_audio_mute_isSet = false;
sync_or_constellation = 0; sync_or_constellation = 0;
m_sync_or_constellation_isSet = false; m_sync_or_constellation_isSet = false;
pll_lock = 0;
m_pll_lock_isSet = false;
rgb_color = 0; rgb_color = 0;
m_rgb_color_isSet = false; m_rgb_color_isSet = false;
title = nullptr; title = nullptr;
m_title_isSet = false; m_title_isSet = false;
audio_device_name = nullptr;
m_audio_device_name_isSet = false;
high_pass_filter = 0; high_pass_filter = 0;
m_high_pass_filter_isSet = false; m_high_pass_filter_isSet = false;
trace_length_mutliplier = 0; trace_length_mutliplier = 0;
@ -64,6 +60,10 @@ SWGM17DemodSettings::SWGM17DemodSettings() {
m_trace_stroke_isSet = false; m_trace_stroke_isSet = false;
trace_decay = 0; trace_decay = 0;
m_trace_decay_isSet = false; m_trace_decay_isSet = false;
audio_device_name = nullptr;
m_audio_device_name_isSet = false;
status_log_enabled = 0;
m_status_log_enabled_isSet = false;
stream_index = 0; stream_index = 0;
m_stream_index_isSet = false; m_stream_index_isSet = false;
use_reverse_api = 0; use_reverse_api = 0;
@ -94,10 +94,10 @@ SWGM17DemodSettings::init() {
m_rf_bandwidth_isSet = false; m_rf_bandwidth_isSet = false;
fm_deviation = 0.0f; fm_deviation = 0.0f;
m_fm_deviation_isSet = false; m_fm_deviation_isSet = false;
demod_gain = 0.0f;
m_demod_gain_isSet = false;
volume = 0.0f; volume = 0.0f;
m_volume_isSet = false; m_volume_isSet = false;
demod_gain = 0.0f;
m_demod_gain_isSet = false;
baud_rate = 0; baud_rate = 0;
m_baud_rate_isSet = false; m_baud_rate_isSet = false;
squelch_gate = 0; squelch_gate = 0;
@ -108,14 +108,10 @@ SWGM17DemodSettings::init() {
m_audio_mute_isSet = false; m_audio_mute_isSet = false;
sync_or_constellation = 0; sync_or_constellation = 0;
m_sync_or_constellation_isSet = false; m_sync_or_constellation_isSet = false;
pll_lock = 0;
m_pll_lock_isSet = false;
rgb_color = 0; rgb_color = 0;
m_rgb_color_isSet = false; m_rgb_color_isSet = false;
title = new QString(""); title = new QString("");
m_title_isSet = false; m_title_isSet = false;
audio_device_name = new QString("");
m_audio_device_name_isSet = false;
high_pass_filter = 0; high_pass_filter = 0;
m_high_pass_filter_isSet = false; m_high_pass_filter_isSet = false;
trace_length_mutliplier = 0; trace_length_mutliplier = 0;
@ -124,6 +120,10 @@ SWGM17DemodSettings::init() {
m_trace_stroke_isSet = false; m_trace_stroke_isSet = false;
trace_decay = 0; trace_decay = 0;
m_trace_decay_isSet = false; m_trace_decay_isSet = false;
audio_device_name = new QString("");
m_audio_device_name_isSet = false;
status_log_enabled = 0;
m_status_log_enabled_isSet = false;
stream_index = 0; stream_index = 0;
m_stream_index_isSet = false; m_stream_index_isSet = false;
use_reverse_api = 0; use_reverse_api = 0;
@ -155,19 +155,19 @@ SWGM17DemodSettings::cleanup() {
if(title != nullptr) { if(title != nullptr) {
delete title; delete title;
} }
if(audio_device_name != nullptr) { if(audio_device_name != nullptr) {
delete audio_device_name; delete audio_device_name;
} }
if(reverse_api_address != nullptr) { if(reverse_api_address != nullptr) {
delete reverse_api_address; delete reverse_api_address;
} }
@ -199,10 +199,10 @@ SWGM17DemodSettings::fromJsonObject(QJsonObject &pJson) {
::SWGSDRangel::setValue(&fm_deviation, pJson["fmDeviation"], "float", ""); ::SWGSDRangel::setValue(&fm_deviation, pJson["fmDeviation"], "float", "");
::SWGSDRangel::setValue(&demod_gain, pJson["demodGain"], "float", "");
::SWGSDRangel::setValue(&volume, pJson["volume"], "float", ""); ::SWGSDRangel::setValue(&volume, pJson["volume"], "float", "");
::SWGSDRangel::setValue(&demod_gain, pJson["demodGain"], "float", "");
::SWGSDRangel::setValue(&baud_rate, pJson["baudRate"], "qint32", ""); ::SWGSDRangel::setValue(&baud_rate, pJson["baudRate"], "qint32", "");
::SWGSDRangel::setValue(&squelch_gate, pJson["squelchGate"], "qint32", ""); ::SWGSDRangel::setValue(&squelch_gate, pJson["squelchGate"], "qint32", "");
@ -213,14 +213,10 @@ SWGM17DemodSettings::fromJsonObject(QJsonObject &pJson) {
::SWGSDRangel::setValue(&sync_or_constellation, pJson["syncOrConstellation"], "qint32", ""); ::SWGSDRangel::setValue(&sync_or_constellation, pJson["syncOrConstellation"], "qint32", "");
::SWGSDRangel::setValue(&pll_lock, pJson["pllLock"], "qint32", "");
::SWGSDRangel::setValue(&rgb_color, pJson["rgbColor"], "qint32", ""); ::SWGSDRangel::setValue(&rgb_color, pJson["rgbColor"], "qint32", "");
::SWGSDRangel::setValue(&title, pJson["title"], "QString", "QString"); ::SWGSDRangel::setValue(&title, pJson["title"], "QString", "QString");
::SWGSDRangel::setValue(&audio_device_name, pJson["audioDeviceName"], "QString", "QString");
::SWGSDRangel::setValue(&high_pass_filter, pJson["highPassFilter"], "qint32", ""); ::SWGSDRangel::setValue(&high_pass_filter, pJson["highPassFilter"], "qint32", "");
::SWGSDRangel::setValue(&trace_length_mutliplier, pJson["traceLengthMutliplier"], "qint32", ""); ::SWGSDRangel::setValue(&trace_length_mutliplier, pJson["traceLengthMutliplier"], "qint32", "");
@ -229,6 +225,10 @@ SWGM17DemodSettings::fromJsonObject(QJsonObject &pJson) {
::SWGSDRangel::setValue(&trace_decay, pJson["traceDecay"], "qint32", ""); ::SWGSDRangel::setValue(&trace_decay, pJson["traceDecay"], "qint32", "");
::SWGSDRangel::setValue(&audio_device_name, pJson["audioDeviceName"], "QString", "QString");
::SWGSDRangel::setValue(&status_log_enabled, pJson["statusLogEnabled"], "qint32", "");
::SWGSDRangel::setValue(&stream_index, pJson["streamIndex"], "qint32", ""); ::SWGSDRangel::setValue(&stream_index, pJson["streamIndex"], "qint32", "");
::SWGSDRangel::setValue(&use_reverse_api, pJson["useReverseAPI"], "qint32", ""); ::SWGSDRangel::setValue(&use_reverse_api, pJson["useReverseAPI"], "qint32", "");
@ -270,12 +270,12 @@ SWGM17DemodSettings::asJsonObject() {
if(m_fm_deviation_isSet){ if(m_fm_deviation_isSet){
obj->insert("fmDeviation", QJsonValue(fm_deviation)); obj->insert("fmDeviation", QJsonValue(fm_deviation));
} }
if(m_demod_gain_isSet){
obj->insert("demodGain", QJsonValue(demod_gain));
}
if(m_volume_isSet){ if(m_volume_isSet){
obj->insert("volume", QJsonValue(volume)); obj->insert("volume", QJsonValue(volume));
} }
if(m_demod_gain_isSet){
obj->insert("demodGain", QJsonValue(demod_gain));
}
if(m_baud_rate_isSet){ if(m_baud_rate_isSet){
obj->insert("baudRate", QJsonValue(baud_rate)); obj->insert("baudRate", QJsonValue(baud_rate));
} }
@ -291,18 +291,12 @@ SWGM17DemodSettings::asJsonObject() {
if(m_sync_or_constellation_isSet){ if(m_sync_or_constellation_isSet){
obj->insert("syncOrConstellation", QJsonValue(sync_or_constellation)); obj->insert("syncOrConstellation", QJsonValue(sync_or_constellation));
} }
if(m_pll_lock_isSet){
obj->insert("pllLock", QJsonValue(pll_lock));
}
if(m_rgb_color_isSet){ if(m_rgb_color_isSet){
obj->insert("rgbColor", QJsonValue(rgb_color)); obj->insert("rgbColor", QJsonValue(rgb_color));
} }
if(title != nullptr && *title != QString("")){ if(title != nullptr && *title != QString("")){
toJsonValue(QString("title"), title, obj, QString("QString")); toJsonValue(QString("title"), title, obj, QString("QString"));
} }
if(audio_device_name != nullptr && *audio_device_name != QString("")){
toJsonValue(QString("audioDeviceName"), audio_device_name, obj, QString("QString"));
}
if(m_high_pass_filter_isSet){ if(m_high_pass_filter_isSet){
obj->insert("highPassFilter", QJsonValue(high_pass_filter)); obj->insert("highPassFilter", QJsonValue(high_pass_filter));
} }
@ -315,6 +309,12 @@ SWGM17DemodSettings::asJsonObject() {
if(m_trace_decay_isSet){ if(m_trace_decay_isSet){
obj->insert("traceDecay", QJsonValue(trace_decay)); obj->insert("traceDecay", QJsonValue(trace_decay));
} }
if(audio_device_name != nullptr && *audio_device_name != QString("")){
toJsonValue(QString("audioDeviceName"), audio_device_name, obj, QString("QString"));
}
if(m_status_log_enabled_isSet){
obj->insert("statusLogEnabled", QJsonValue(status_log_enabled));
}
if(m_stream_index_isSet){ if(m_stream_index_isSet){
obj->insert("streamIndex", QJsonValue(stream_index)); obj->insert("streamIndex", QJsonValue(stream_index));
} }
@ -373,16 +373,6 @@ SWGM17DemodSettings::setFmDeviation(float fm_deviation) {
this->m_fm_deviation_isSet = true; this->m_fm_deviation_isSet = true;
} }
float
SWGM17DemodSettings::getDemodGain() {
return demod_gain;
}
void
SWGM17DemodSettings::setDemodGain(float demod_gain) {
this->demod_gain = demod_gain;
this->m_demod_gain_isSet = true;
}
float float
SWGM17DemodSettings::getVolume() { SWGM17DemodSettings::getVolume() {
return volume; return volume;
@ -393,6 +383,16 @@ SWGM17DemodSettings::setVolume(float volume) {
this->m_volume_isSet = true; this->m_volume_isSet = true;
} }
float
SWGM17DemodSettings::getDemodGain() {
return demod_gain;
}
void
SWGM17DemodSettings::setDemodGain(float demod_gain) {
this->demod_gain = demod_gain;
this->m_demod_gain_isSet = true;
}
qint32 qint32
SWGM17DemodSettings::getBaudRate() { SWGM17DemodSettings::getBaudRate() {
return baud_rate; return baud_rate;
@ -443,16 +443,6 @@ SWGM17DemodSettings::setSyncOrConstellation(qint32 sync_or_constellation) {
this->m_sync_or_constellation_isSet = true; this->m_sync_or_constellation_isSet = true;
} }
qint32
SWGM17DemodSettings::getPllLock() {
return pll_lock;
}
void
SWGM17DemodSettings::setPllLock(qint32 pll_lock) {
this->pll_lock = pll_lock;
this->m_pll_lock_isSet = true;
}
qint32 qint32
SWGM17DemodSettings::getRgbColor() { SWGM17DemodSettings::getRgbColor() {
return rgb_color; return rgb_color;
@ -473,16 +463,6 @@ SWGM17DemodSettings::setTitle(QString* title) {
this->m_title_isSet = true; this->m_title_isSet = true;
} }
QString*
SWGM17DemodSettings::getAudioDeviceName() {
return audio_device_name;
}
void
SWGM17DemodSettings::setAudioDeviceName(QString* audio_device_name) {
this->audio_device_name = audio_device_name;
this->m_audio_device_name_isSet = true;
}
qint32 qint32
SWGM17DemodSettings::getHighPassFilter() { SWGM17DemodSettings::getHighPassFilter() {
return high_pass_filter; return high_pass_filter;
@ -523,6 +503,26 @@ SWGM17DemodSettings::setTraceDecay(qint32 trace_decay) {
this->m_trace_decay_isSet = true; this->m_trace_decay_isSet = true;
} }
QString*
SWGM17DemodSettings::getAudioDeviceName() {
return audio_device_name;
}
void
SWGM17DemodSettings::setAudioDeviceName(QString* audio_device_name) {
this->audio_device_name = audio_device_name;
this->m_audio_device_name_isSet = true;
}
qint32
SWGM17DemodSettings::getStatusLogEnabled() {
return status_log_enabled;
}
void
SWGM17DemodSettings::setStatusLogEnabled(qint32 status_log_enabled) {
this->status_log_enabled = status_log_enabled;
this->m_status_log_enabled_isSet = true;
}
qint32 qint32
SWGM17DemodSettings::getStreamIndex() { SWGM17DemodSettings::getStreamIndex() {
return stream_index; return stream_index;
@ -617,10 +617,10 @@ SWGM17DemodSettings::isSet(){
if(m_fm_deviation_isSet){ if(m_fm_deviation_isSet){
isObjectUpdated = true; break; isObjectUpdated = true; break;
} }
if(m_demod_gain_isSet){ if(m_volume_isSet){
isObjectUpdated = true; break; isObjectUpdated = true; break;
} }
if(m_volume_isSet){ if(m_demod_gain_isSet){
isObjectUpdated = true; break; isObjectUpdated = true; break;
} }
if(m_baud_rate_isSet){ if(m_baud_rate_isSet){
@ -638,18 +638,12 @@ SWGM17DemodSettings::isSet(){
if(m_sync_or_constellation_isSet){ if(m_sync_or_constellation_isSet){
isObjectUpdated = true; break; isObjectUpdated = true; break;
} }
if(m_pll_lock_isSet){
isObjectUpdated = true; break;
}
if(m_rgb_color_isSet){ if(m_rgb_color_isSet){
isObjectUpdated = true; break; isObjectUpdated = true; break;
} }
if(title && *title != QString("")){ if(title && *title != QString("")){
isObjectUpdated = true; break; isObjectUpdated = true; break;
} }
if(audio_device_name && *audio_device_name != QString("")){
isObjectUpdated = true; break;
}
if(m_high_pass_filter_isSet){ if(m_high_pass_filter_isSet){
isObjectUpdated = true; break; isObjectUpdated = true; break;
} }
@ -662,6 +656,12 @@ SWGM17DemodSettings::isSet(){
if(m_trace_decay_isSet){ if(m_trace_decay_isSet){
isObjectUpdated = true; break; isObjectUpdated = true; break;
} }
if(audio_device_name && *audio_device_name != QString("")){
isObjectUpdated = true; break;
}
if(m_status_log_enabled_isSet){
isObjectUpdated = true; break;
}
if(m_stream_index_isSet){ if(m_stream_index_isSet){
isObjectUpdated = true; break; isObjectUpdated = true; break;
} }

View File

@ -53,12 +53,12 @@ public:
float getFmDeviation(); float getFmDeviation();
void setFmDeviation(float fm_deviation); void setFmDeviation(float fm_deviation);
float getDemodGain();
void setDemodGain(float demod_gain);
float getVolume(); float getVolume();
void setVolume(float volume); void setVolume(float volume);
float getDemodGain();
void setDemodGain(float demod_gain);
qint32 getBaudRate(); qint32 getBaudRate();
void setBaudRate(qint32 baud_rate); void setBaudRate(qint32 baud_rate);
@ -74,18 +74,12 @@ public:
qint32 getSyncOrConstellation(); qint32 getSyncOrConstellation();
void setSyncOrConstellation(qint32 sync_or_constellation); void setSyncOrConstellation(qint32 sync_or_constellation);
qint32 getPllLock();
void setPllLock(qint32 pll_lock);
qint32 getRgbColor(); qint32 getRgbColor();
void setRgbColor(qint32 rgb_color); void setRgbColor(qint32 rgb_color);
QString* getTitle(); QString* getTitle();
void setTitle(QString* title); void setTitle(QString* title);
QString* getAudioDeviceName();
void setAudioDeviceName(QString* audio_device_name);
qint32 getHighPassFilter(); qint32 getHighPassFilter();
void setHighPassFilter(qint32 high_pass_filter); void setHighPassFilter(qint32 high_pass_filter);
@ -98,6 +92,12 @@ public:
qint32 getTraceDecay(); qint32 getTraceDecay();
void setTraceDecay(qint32 trace_decay); void setTraceDecay(qint32 trace_decay);
QString* getAudioDeviceName();
void setAudioDeviceName(QString* audio_device_name);
qint32 getStatusLogEnabled();
void setStatusLogEnabled(qint32 status_log_enabled);
qint32 getStreamIndex(); qint32 getStreamIndex();
void setStreamIndex(qint32 stream_index); void setStreamIndex(qint32 stream_index);
@ -135,12 +135,12 @@ private:
float fm_deviation; float fm_deviation;
bool m_fm_deviation_isSet; bool m_fm_deviation_isSet;
float demod_gain;
bool m_demod_gain_isSet;
float volume; float volume;
bool m_volume_isSet; bool m_volume_isSet;
float demod_gain;
bool m_demod_gain_isSet;
qint32 baud_rate; qint32 baud_rate;
bool m_baud_rate_isSet; bool m_baud_rate_isSet;
@ -156,18 +156,12 @@ private:
qint32 sync_or_constellation; qint32 sync_or_constellation;
bool m_sync_or_constellation_isSet; bool m_sync_or_constellation_isSet;
qint32 pll_lock;
bool m_pll_lock_isSet;
qint32 rgb_color; qint32 rgb_color;
bool m_rgb_color_isSet; bool m_rgb_color_isSet;
QString* title; QString* title;
bool m_title_isSet; bool m_title_isSet;
QString* audio_device_name;
bool m_audio_device_name_isSet;
qint32 high_pass_filter; qint32 high_pass_filter;
bool m_high_pass_filter_isSet; bool m_high_pass_filter_isSet;
@ -180,6 +174,12 @@ private:
qint32 trace_decay; qint32 trace_decay;
bool m_trace_decay_isSet; bool m_trace_decay_isSet;
QString* audio_device_name;
bool m_audio_device_name_isSet;
qint32 status_log_enabled;
bool m_status_log_enabled_isSet;
qint32 stream_index; qint32 stream_index;
bool m_stream_index_isSet; bool m_stream_index_isSet;