diff --git a/plugins/channeltx/modm17/m17mod.cpp b/plugins/channeltx/modm17/m17mod.cpp index 47fc16675..0d907dbe7 100644 --- a/plugins/channeltx/modm17/m17mod.cpp +++ b/plugins/channeltx/modm17/m17mod.cpp @@ -61,6 +61,7 @@ M17Mod::M17Mod(DeviceAPI *deviceAPI) : m_sampleRate(48000) { setObjectName(m_channelId); + m_loopPacketTimer.setInterval(m_settings.m_loopPacketInterval*1000); m_thread = new QThread(this); m_basebandSource = new M17ModBaseband(); @@ -80,6 +81,12 @@ M17Mod::M17Mod(DeviceAPI *deviceAPI) : this, &M17Mod::networkManagerFinished ); + QObject::connect( + &m_loopPacketTimer, + &QTimer::timeout, + this, + &M17Mod::packetLoopTimeout + ); } M17Mod::~M17Mod() @@ -344,6 +351,23 @@ void M17Mod::applySettings(const M17ModSettings& settings, bool force) reverseAPIKeys.append("feedbackAudioDeviceName"); } + if ((settings.m_loopPacketInterval != m_settings.m_loopPacketInterval) || force) + { + reverseAPIKeys.append("loopPacketInterval"); + m_loopPacketTimer.setInterval(settings.m_loopPacketInterval*1000); + } + + if ((settings.m_loopPacket != m_settings.m_loopPacket) || force) + { + reverseAPIKeys.append("loopPacket"); + + if (settings.m_loopPacket) { + m_loopPacketTimer.start(settings.m_loopPacketInterval*1000); + } else { + m_loopPacketTimer.stop(); + } + } + if (m_settings.m_streamIndex != settings.m_streamIndex) { if (m_deviceAPI->getSampleMIMO()) // change of stream is possible for MIMO devices only @@ -762,6 +786,13 @@ void M17Mod::networkManagerFinished(QNetworkReply *reply) reply->deleteLater(); } +void M17Mod::packetLoopTimeout() +{ + if (m_settings.m_m17Mode == M17ModSettings::M17ModeM17Packet) { + m_basebandSource->sendPacket(); + } +} + double M17Mod::getMagSq() const { return m_basebandSource->getMagSq(); @@ -789,5 +820,7 @@ int M17Mod::getFeedbackAudioSampleRate() const void M17Mod::sendPacket() { - m_basebandSource->sendPacket(); + if (m_settings.m_m17Mode == M17ModSettings::M17ModeM17Packet) { + m_basebandSource->sendPacket(); + } } diff --git a/plugins/channeltx/modm17/m17mod.h b/plugins/channeltx/modm17/m17mod.h index a2924332b..53a7b56a2 100644 --- a/plugins/channeltx/modm17/m17mod.h +++ b/plugins/channeltx/modm17/m17mod.h @@ -24,6 +24,7 @@ #include #include +#include #include "dsp/basebandsamplesource.h" #include "channel/channelapi.h" @@ -261,6 +262,8 @@ private: QNetworkAccessManager *m_networkManager; QNetworkRequest m_networkRequest; + QTimer m_loopPacketTimer; + virtual bool handleMessage(const Message& cmd); void applySettings(const M17ModSettings& settings, bool force = false); void sendSampleRateToDemodAnalyzer(); @@ -283,6 +286,7 @@ private: private slots: void networkManagerFinished(QNetworkReply *reply); + void packetLoopTimeout(); }; diff --git a/plugins/channeltx/modm17/m17modgui.cpp b/plugins/channeltx/modm17/m17modgui.cpp index 1df7c62da..556e15c45 100644 --- a/plugins/channeltx/modm17/m17modgui.cpp +++ b/plugins/channeltx/modm17/m17modgui.cpp @@ -298,14 +298,16 @@ void M17ModGUI::on_sendPacket_clicked(bool) void M17ModGUI::on_loopPacket_toggled(bool checked) { - (void) checked; - // TODO + m_settings.m_loopPacket = checked; + applySettings(); } void M17ModGUI::on_loopPacketInterval_valueChanged(int value) { + ui->loopPacketIntervalText->setText(tr("%1").arg(value)); + m_settings.m_loopPacketInterval = value; (void) value; - // TODO + applySettings(); } void M17ModGUI::on_packetDataWidget_currentChanged(int index) @@ -544,6 +546,10 @@ void M17ModGUI::displaySettings() ui->insertPosition->setChecked(m_settings.m_insertPosition); ui->can->setValue(m_settings.m_can); + ui->loopPacket->setChecked(m_settings.m_loopPacket); + ui->loopPacketInterval->setValue(m_settings.m_loopPacketInterval); + ui->loopPacketIntervalText->setText(tr("%1").arg(m_settings.m_loopPacketInterval)); + ui->smsText->setText(m_settings.m_smsText); ui->aprsFromText->setText(m_settings.m_aprsCallsign); diff --git a/plugins/channeltx/modm17/m17modsettings.cpp b/plugins/channeltx/modm17/m17modsettings.cpp index 5611d9615..bf0d2ccaf 100644 --- a/plugins/channeltx/modm17/m17modsettings.cpp +++ b/plugins/channeltx/modm17/m17modsettings.cpp @@ -61,6 +61,8 @@ void M17ModSettings::resetToDefaults() m_destCall = ""; m_insertPosition = false; m_can = 10; + m_loopPacket = false; + m_loopPacketInterval = 60; m_smsText = ""; m_aprsCallsign = "MYCALL"; m_aprsTo = "APRS"; @@ -113,6 +115,8 @@ QByteArray M17ModSettings::serialize() const s.writeU32(43, m_can); s.writeString(50, m_smsText); + s.writeBool(51, m_loopPacket); + s.writeU32(52, m_loopPacketInterval); s.writeString(60, m_aprsCallsign); s.writeString(61, m_aprsTo); @@ -200,6 +204,8 @@ bool M17ModSettings::deserialize(const QByteArray& data) m_can = utmp < 255 ? utmp : 255; d.readString(50, &m_smsText, ""); + d.readBool(51, &m_loopPacket, false); + d.readU32(52, &m_loopPacketInterval, 60); d.readString(60, &m_aprsCallsign, "MYCALL"); d.readString(61, &m_aprsTo, ""); diff --git a/plugins/channeltx/modm17/m17modsettings.h b/plugins/channeltx/modm17/m17modsettings.h index b1ebbbfcb..10dfe920c 100644 --- a/plugins/channeltx/modm17/m17modsettings.h +++ b/plugins/channeltx/modm17/m17modsettings.h @@ -81,6 +81,8 @@ struct M17ModSettings uint8_t m_can; QString m_smsText; + bool m_loopPacket; + uint32_t m_loopPacketInterval; QString m_aprsCallsign; QString m_aprsTo;