M17 mod: implemented loop packet

This commit is contained in:
f4exb 2022-06-19 10:03:41 +02:00
parent 5f2d2a0b2e
commit 1fc688c904
5 changed files with 55 additions and 4 deletions

View File

@ -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();
}
}

View File

@ -24,6 +24,7 @@
#include <QMutex>
#include <QNetworkRequest>
#include <QTimer>
#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();
};

View File

@ -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);

View File

@ -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, "");

View File

@ -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;