From 9aaa4756a2be8aefa2f41471b155d880baf5be37 Mon Sep 17 00:00:00 2001 From: f4exb Date: Sat, 22 Feb 2020 18:37:09 +0100 Subject: [PATCH] LoRa modulator: REST API (1) --- plugins/channeltx/modlora/loramod.cpp | 358 ++++++++++- plugins/channeltx/modlora/loramod.h | 1 + plugins/channeltx/modlora/loramodgui.cpp | 9 +- plugins/channeltx/modlora/loramodgui.h | 1 + plugins/channeltx/modlora/loramodsettings.h | 3 +- sdrbase/resources/webapi.qrc | 2 +- sdrbase/resources/webapi/doc/html2/index.html | 116 +++- .../webapi/doc/swagger/include/LoRaMod.yaml | 102 +++- .../webapi/doc/swagger/include/Structs.yaml | 5 +- sdrbase/webapi/webapirequestmapper.cpp | 9 + .../sdrangel/api/swagger/include/LoRaMod.yaml | 102 +++- .../sdrangel/api/swagger/include/Structs.yaml | 5 +- swagger/sdrangel/code/html2/index.html | 116 +++- .../code/qt5/client/SWGLoRaModReport.cpp | 69 +++ .../code/qt5/client/SWGLoRaModReport.h | 18 + .../code/qt5/client/SWGLoRaModSettings.cpp | 568 +++++++++++++++++- .../code/qt5/client/SWGLoRaModSettings.h | 141 ++++- 17 files changed, 1568 insertions(+), 57 deletions(-) diff --git a/plugins/channeltx/modlora/loramod.cpp b/plugins/channeltx/modlora/loramod.cpp index d671cbda1..ddcdd6725 100644 --- a/plugins/channeltx/modlora/loramod.cpp +++ b/plugins/channeltx/modlora/loramod.cpp @@ -48,6 +48,7 @@ const QString LoRaMod::m_channelId = "LoRaMod"; LoRaMod::LoRaMod(DeviceAPI *deviceAPI) : ChannelAPI(m_channelIdURI, ChannelAPI::StreamSingleSource), m_deviceAPI(deviceAPI), + m_currentPayloadTime(0.0), m_settingsMutex(QMutex::Recursive), m_sampleRate(48000) { @@ -154,28 +155,76 @@ void LoRaMod::applySettings(const LoRaModSettings& settings, bool force) if ((settings.m_channelMute != m_settings.m_channelMute) || force) { reverseAPIKeys.append("channelMute"); } + if ((settings.m_spreadFactor != m_settings.m_spreadFactor) || force) { + reverseAPIKeys.append("spreadFactor"); + } + if ((settings.m_deBits != m_settings.m_deBits) || force) { + reverseAPIKeys.append("deBits"); + } if ((settings.m_spreadFactor != m_settings.m_spreadFactor) || (settings.m_deBits != m_settings.m_deBits) || force) { m_encoder.setNbSymbolBits(settings.m_spreadFactor, settings.m_deBits); } - if ((settings.m_codingScheme != m_settings.m_codingScheme) || force) { + if ((settings.m_codingScheme != m_settings.m_codingScheme) || force) + { + reverseAPIKeys.append("codingScheme"); m_encoder.setCodingScheme(settings.m_codingScheme); } - if ((settings.m_nbParityBits != m_settings.m_nbParityBits || force)) { + if ((settings.m_nbParityBits != m_settings.m_nbParityBits || force)) + { + reverseAPIKeys.append("nbParityBits"); m_encoder.setLoRaParityBits(settings.m_nbParityBits); } - if ((settings.m_hasCRC != m_settings.m_hasCRC) || force) { + if ((settings.m_hasCRC != m_settings.m_hasCRC) || force) + { + reverseAPIKeys.append("hasCRC"); m_encoder.setLoRaHasCRC(settings.m_hasCRC); } - if ((settings.m_hasHeader != m_settings.m_hasHeader) || force) { + if ((settings.m_hasHeader != m_settings.m_hasHeader) || force) + { + reverseAPIKeys.append("hasHeader"); m_encoder.setLoRaHasHeader(settings.m_hasHeader); } + if ((settings.m_messageType != m_settings.m_messageType) || force) { + reverseAPIKeys.append("messageType"); + } + if ((settings.m_beaconMessage != m_settings.m_beaconMessage) || force) { + reverseAPIKeys.append("beaconMessage"); + } + if ((settings.m_cqMessage != m_settings.m_cqMessage) || force) { + reverseAPIKeys.append("cqMessage"); + } + if ((settings.m_replyMessage != m_settings.m_replyMessage) || force) { + reverseAPIKeys.append("replyMessage"); + } + if ((settings.m_reportMessage != m_settings.m_reportMessage) || force) { + reverseAPIKeys.append("reportMessage"); + } + if ((settings.m_replyReportMessage != m_settings.m_replyReportMessage) || force) { + reverseAPIKeys.append("replyReportMessage"); + } + if ((settings.m_rrrMessage != m_settings.m_rrrMessage) || force) { + reverseAPIKeys.append("rrrMessage"); + } + if ((settings.m_73Message != m_settings.m_73Message) || force) { + reverseAPIKeys.append("73Message"); + } + if ((settings.m_qsoTextMessage != m_settings.m_qsoTextMessage) || force) { + reverseAPIKeys.append("qsoTextMessage"); + } + if ((settings.m_textMessage != m_settings.m_textMessage) || force) { + reverseAPIKeys.append("textMessage"); + } + if ((settings.m_bytesMessage != m_settings.m_bytesMessage) || force) { + reverseAPIKeys.append("bytesMessage"); + } + LoRaModBaseband::MsgConfigureLoRaModPayload *payloadMsg = nullptr; std::vector symbols; @@ -258,12 +307,11 @@ void LoRaMod::applySettings(const LoRaModSettings& settings, bool force) if (payloadMsg) { m_basebandSource->getInputMessageQueue()->push(payloadMsg); + m_currentPayloadTime = (symbols.size()*(1<push(rpt); } } @@ -359,15 +407,105 @@ void LoRaMod::webapiUpdateChannelSettings( const QStringList& channelSettingsKeys, SWGSDRangel::SWGChannelSettings& response) { - if (channelSettingsKeys.contains("channelMute")) { - settings.m_channelMute = response.getLoRaModSettings()->getChannelMute() != 0; - } if (channelSettingsKeys.contains("inputFrequencyOffset")) { settings.m_inputFrequencyOffset = response.getLoRaModSettings()->getInputFrequencyOffset(); } if (channelSettingsKeys.contains("bandwidthIndex")) { settings.m_bandwidthIndex = response.getLoRaModSettings()->getBandwidthIndex(); } + if (channelSettingsKeys.contains("spreadFactor")) { + settings.m_spreadFactor = response.getLoRaModSettings()->getSpreadFactor(); + } + if (channelSettingsKeys.contains("deBits")) { + settings.m_deBits = response.getLoRaModSettings()->getDeBits(); + } + if (channelSettingsKeys.contains("preambleChirps")) { + settings.m_preambleChirps = response.getLoRaModSettings()->getPreambleChirps(); + } + if (channelSettingsKeys.contains("quietMillis")) { + settings.m_quietMillis = response.getLoRaModSettings()->getQuietMillis(); + } + if (channelSettingsKeys.contains("syncWord")) { + settings.m_syncWord = response.getLoRaModSettings()->getSyncWord(); + } + if (channelSettingsKeys.contains("syncWord")) { + settings.m_syncWord = response.getLoRaModSettings()->getSyncWord(); + } + if (channelSettingsKeys.contains("channelMute")) { + settings.m_channelMute = response.getLoRaModSettings()->getChannelMute() != 0; + } + if (channelSettingsKeys.contains("codingScheme")) { + settings.m_codingScheme = (LoRaModSettings::CodingScheme) response.getLoRaModSettings()->getCodingScheme(); + } + if (channelSettingsKeys.contains("nbParityBits")) { + settings.m_nbParityBits = response.getLoRaModSettings()->getNbParityBits(); + } + if (channelSettingsKeys.contains("hasCRC")) { + settings.m_hasCRC = response.getLoRaModSettings()->getHasCrc() != 0; + } + if (channelSettingsKeys.contains("hasHeader")) { + settings.m_hasHeader = response.getLoRaModSettings()->getHasHeader() != 0; + } + if (channelSettingsKeys.contains("myCall")) { + settings.m_myCall = *response.getLoRaModSettings()->getMyCall(); + } + if (channelSettingsKeys.contains("urCall")) { + settings.m_urCall = *response.getLoRaModSettings()->getUrCall(); + } + if (channelSettingsKeys.contains("myLoc")) { + settings.m_myLoc = *response.getLoRaModSettings()->getMyLoc(); + } + if (channelSettingsKeys.contains("myRpt")) { + settings.m_myRpt = *response.getLoRaModSettings()->getMyRpt(); + } + if (channelSettingsKeys.contains("messageType")) { + settings.m_messageType = (LoRaModSettings::MessageType) response.getLoRaModSettings()->getMessageType(); + } + if (channelSettingsKeys.contains("beaconMessage")) { + settings.m_beaconMessage = *response.getLoRaModSettings()->getBeaconMessage(); + } + if (channelSettingsKeys.contains("cqMessage")) { + settings.m_cqMessage = *response.getLoRaModSettings()->getCqMessage(); + } + if (channelSettingsKeys.contains("replyMessage")) { + settings.m_replyMessage = *response.getLoRaModSettings()->getReplyMessage(); + } + if (channelSettingsKeys.contains("reportMessage")) { + settings.m_reportMessage = *response.getLoRaModSettings()->getReportMessage(); + } + if (channelSettingsKeys.contains("replyReportMessage")) { + settings.m_replyReportMessage = *response.getLoRaModSettings()->getReplyReportMessage(); + } + if (channelSettingsKeys.contains("rrrMessage")) { + settings.m_rrrMessage = *response.getLoRaModSettings()->getRrrMessage(); + } + if (channelSettingsKeys.contains("message73")) { + settings.m_73Message = *response.getLoRaModSettings()->getMessage73(); + } + if (channelSettingsKeys.contains("qsoTextMessage")) { + settings.m_qsoTextMessage = *response.getLoRaModSettings()->getQsoTextMessage(); + } + if (channelSettingsKeys.contains("textMessage")) { + settings.m_textMessage = *response.getLoRaModSettings()->getTextMessage(); + } + if (channelSettingsKeys.contains("bytesMessage")) + { + const QList *bytesStr = response.getLoRaModSettings()->getBytesMessage(); + settings.m_bytesMessage.clear(); + + for (QList::const_iterator it = bytesStr->begin(); it != bytesStr->end(); ++it) + { + bool bStatus = false; + unsigned int byteInt = (**it).toUInt(&bStatus, 16); + + if (bStatus) { + settings.m_bytesMessage.append((char) (byteInt % 256)); + } + } + } + if (channelSettingsKeys.contains("messageRepeat")) { + settings.m_messageRepeat = response.getLoRaModSettings()->getMessageRepeat(); + } if (channelSettingsKeys.contains("rgbColor")) { settings.m_rgbColor = response.getLoRaModSettings()->getRgbColor(); } @@ -407,9 +545,108 @@ int LoRaMod::webapiReportGet( void LoRaMod::webapiFormatChannelSettings(SWGSDRangel::SWGChannelSettings& response, const LoRaModSettings& settings) { - response.getLoRaModSettings()->setChannelMute(settings.m_channelMute ? 1 : 0); response.getLoRaModSettings()->setInputFrequencyOffset(settings.m_inputFrequencyOffset); response.getLoRaModSettings()->setBandwidthIndex(settings.m_bandwidthIndex); + response.getLoRaModSettings()->setSpreadFactor(settings.m_spreadFactor); + response.getLoRaModSettings()->setDeBits(settings.m_deBits); + response.getLoRaModSettings()->setPreambleChirps(settings.m_preambleChirps); + response.getLoRaModSettings()->setQuietMillis(settings.m_quietMillis); + response.getLoRaModSettings()->setSyncWord(settings.m_syncWord); + response.getLoRaModSettings()->setChannelMute(settings.m_channelMute ? 1 : 0); + response.getLoRaModSettings()->setCodingScheme((int) settings.m_codingScheme); + response.getLoRaModSettings()->setNbParityBits(settings.m_nbParityBits); + response.getLoRaModSettings()->setHasCrc(settings.m_hasCRC ? 1 : 0); + response.getLoRaModSettings()->setHasHeader(settings.m_hasHeader ? 1 : 0); + + if (response.getLoRaModSettings()->getMyCall()) { + *response.getLoRaModSettings()->getMyCall() = settings.m_myCall; + } else { + response.getLoRaModSettings()->setMyCall(new QString(settings.m_myCall)); + } + + if (response.getLoRaModSettings()->getUrCall()) { + *response.getLoRaModSettings()->getUrCall() = settings.m_urCall; + } else { + response.getLoRaModSettings()->setUrCall(new QString(settings.m_urCall)); + } + + if (response.getLoRaModSettings()->getMyLoc()) { + *response.getLoRaModSettings()->getMyLoc() = settings.m_myLoc; + } else { + response.getLoRaModSettings()->setMyLoc(new QString(settings.m_myLoc)); + } + + if (response.getLoRaModSettings()->getMyRpt()) { + *response.getLoRaModSettings()->getMyRpt() = settings.m_myRpt; + } else { + response.getLoRaModSettings()->setMyRpt(new QString(settings.m_myRpt)); + } + + response.getLoRaModSettings()->setMessageType((int) settings.m_messageType); + + if (response.getLoRaModSettings()->getBeaconMessage()) { + *response.getLoRaModSettings()->getBeaconMessage() = settings.m_beaconMessage; + } else { + response.getLoRaModSettings()->setBeaconMessage(new QString(settings.m_beaconMessage)); + } + + if (response.getLoRaModSettings()->getCqMessage()) { + *response.getLoRaModSettings()->getCqMessage() = settings.m_cqMessage; + } else { + response.getLoRaModSettings()->setCqMessage(new QString(settings.m_cqMessage)); + } + + if (response.getLoRaModSettings()->getReplyMessage()) { + *response.getLoRaModSettings()->getReplyMessage() = settings.m_replyMessage; + } else { + response.getLoRaModSettings()->setReplyMessage(new QString(settings.m_replyMessage)); + } + + if (response.getLoRaModSettings()->getReportMessage()) { + *response.getLoRaModSettings()->getReportMessage() = settings.m_reportMessage; + } else { + response.getLoRaModSettings()->setReportMessage(new QString(settings.m_reportMessage)); + } + + if (response.getLoRaModSettings()->getReplyReportMessage()) { + *response.getLoRaModSettings()->getReplyReportMessage() = settings.m_replyReportMessage; + } else { + response.getLoRaModSettings()->setReplyReportMessage(new QString(settings.m_replyReportMessage)); + } + + if (response.getLoRaModSettings()->getRrrMessage()) { + *response.getLoRaModSettings()->getRrrMessage() = settings.m_rrrMessage; + } else { + response.getLoRaModSettings()->setRrrMessage(new QString(settings.m_rrrMessage)); + } + + if (response.getLoRaModSettings()->getMessage73()) { + *response.getLoRaModSettings()->getMessage73() = settings.m_73Message; + } else { + response.getLoRaModSettings()->setMessage73(new QString(settings.m_73Message)); + } + + if (response.getLoRaModSettings()->getQsoTextMessage()) { + *response.getLoRaModSettings()->getQsoTextMessage() = settings.m_qsoTextMessage; + } else { + response.getLoRaModSettings()->setQsoTextMessage(new QString(settings.m_qsoTextMessage)); + } + + if (response.getLoRaModSettings()->getTextMessage()) { + *response.getLoRaModSettings()->getTextMessage() = settings.m_textMessage; + } else { + response.getLoRaModSettings()->setTextMessage(new QString(settings.m_textMessage)); + } + + response.getLoRaModSettings()->setBytesMessage(new QList); + QList *bytesStr = response.getLoRaModSettings()->getBytesMessage(); + + for (QByteArray::const_iterator it = settings.m_bytesMessage.begin(); it != settings.m_bytesMessage.end(); ++it) + { + unsigned char b = *it; + bytesStr->push_back(new QString(tr("%1").arg(b, 2, 16, QChar('0')))); + } + response.getLoRaModSettings()->setRgbColor(settings.m_rgbColor); if (response.getLoRaModSettings()->getTitle()) { @@ -435,6 +672,11 @@ void LoRaMod::webapiFormatChannelReport(SWGSDRangel::SWGChannelReport& response) { response.getLoRaModReport()->setChannelPowerDb(CalcDb::dbPower(getMagSq())); response.getLoRaModReport()->setChannelSampleRate(m_basebandSource->getChannelSampleRate()); + float fourthsMs = ((1<setPayloadTimeMs(m_currentPayloadTime); + response.getLoRaModReport()->setTotalTimeMs(m_currentPayloadTime + controlMs); + response.getLoRaModReport()->setSymbolTimeMs(4.0 * fourthsMs); } void LoRaMod::webapiReverseSendSettings(QList& channelSettingsKeys, const LoRaModSettings& settings, bool force) @@ -443,21 +685,107 @@ void LoRaMod::webapiReverseSendSettings(QList& channelSettingsKeys, con swgChannelSettings->setDirection(1); // single source (Tx) swgChannelSettings->setOriginatorChannelIndex(getIndexInDeviceSet()); swgChannelSettings->setOriginatorDeviceSetIndex(getDeviceSetIndex()); - swgChannelSettings->setChannelType(new QString("NFMMod")); + swgChannelSettings->setChannelType(new QString("LoRaMod")); swgChannelSettings->setLoRaModSettings(new SWGSDRangel::SWGLoRaModSettings()); SWGSDRangel::SWGLoRaModSettings *swgLoRaModSettings = swgChannelSettings->getLoRaModSettings(); // transfer data that has been modified. When force is on transfer all data except reverse API data - if (channelSettingsKeys.contains("channelMute") || force) { - swgLoRaModSettings->setChannelMute(settings.m_channelMute ? 1 : 0); - } if (channelSettingsKeys.contains("inputFrequencyOffset") || force) { swgLoRaModSettings->setInputFrequencyOffset(settings.m_inputFrequencyOffset); } if (channelSettingsKeys.contains("bandwidthIndex") || force) { swgLoRaModSettings->setBandwidthIndex(settings.m_bandwidthIndex); } + if (channelSettingsKeys.contains("spreadFactor") || force) { + swgLoRaModSettings->setSpreadFactor(settings.m_spreadFactor); + } + if (channelSettingsKeys.contains("deBits") || force) { + swgLoRaModSettings->setDeBits(settings.m_deBits); + } + if (channelSettingsKeys.contains("preambleChirps") || force) { + swgLoRaModSettings->setPreambleChirps(settings.m_preambleChirps); + } + if (channelSettingsKeys.contains("quietMillis") || force) { + swgLoRaModSettings->setQuietMillis(settings.m_quietMillis); + } + if (channelSettingsKeys.contains("syncWord") || force) { + swgLoRaModSettings->setSyncWord(settings.m_syncWord); + } + if (channelSettingsKeys.contains("channelMute") || force) { + swgLoRaModSettings->setChannelMute(settings.m_channelMute ? 1 : 0); + } + if (channelSettingsKeys.contains("codingScheme") || force) { + swgLoRaModSettings->setCodingScheme((int) settings.m_codingScheme); + } + if (channelSettingsKeys.contains("nbParityBits") || force) { + swgLoRaModSettings->setNbParityBits(settings.m_nbParityBits); + } + if (channelSettingsKeys.contains("hasCRC") || force) { + swgLoRaModSettings->setHasCrc(settings.m_hasCRC ? 1 : 0); + } + if (channelSettingsKeys.contains("hasHeader") || force) { + swgLoRaModSettings->setHasHeader(settings.m_hasHeader ? 1 : 0); + } + if (channelSettingsKeys.contains("myCall") || force) { + swgLoRaModSettings->setMyCall(new QString(settings.m_myCall)); + } + if (channelSettingsKeys.contains("urCall") || force) { + swgLoRaModSettings->setUrCall(new QString(settings.m_urCall)); + } + if (channelSettingsKeys.contains("myLoc") || force) { + swgLoRaModSettings->setMyLoc(new QString(settings.m_myLoc)); + } + if (channelSettingsKeys.contains("myRpt") || force) { + swgLoRaModSettings->setMyRpt(new QString(settings.m_myRpt)); + } + if (channelSettingsKeys.contains("messageType") || force) { + swgLoRaModSettings->setMessageType((int) settings.m_messageType); + } + if (channelSettingsKeys.contains("beaconMessage") || force) { + swgLoRaModSettings->setBeaconMessage(new QString(settings.m_beaconMessage)); + } + if (channelSettingsKeys.contains("cqMessage") || force) { + swgLoRaModSettings->setCqMessage(new QString(settings.m_cqMessage)); + } + if (channelSettingsKeys.contains("replyMessage") || force) { + swgLoRaModSettings->setReplyMessage(new QString(settings.m_replyMessage)); + } + if (channelSettingsKeys.contains("reportMessage") || force) { + swgLoRaModSettings->setReportMessage(new QString(settings.m_reportMessage)); + } + if (channelSettingsKeys.contains("replyReportMessage") || force) { + swgLoRaModSettings->setReplyReportMessage(new QString(settings.m_replyReportMessage)); + } + if (channelSettingsKeys.contains("rrrMessage") || force) { + swgLoRaModSettings->setRrrMessage(new QString(settings.m_rrrMessage)); + } + if (channelSettingsKeys.contains("message73") || force) { + swgLoRaModSettings->setMessage73(new QString(settings.m_73Message)); + } + if (channelSettingsKeys.contains("qsoTextMessage") || force) { + swgLoRaModSettings->setQsoTextMessage(new QString(settings.m_qsoTextMessage)); + } + if (channelSettingsKeys.contains("textMessage") || force) { + swgLoRaModSettings->setTextMessage(new QString(settings.m_textMessage)); + } + + if (channelSettingsKeys.contains("bytesMessage") || force) + { + swgLoRaModSettings->setBytesMessage(new QList); + QList *bytesStr = swgLoRaModSettings-> getBytesMessage(); + + for (QByteArray::const_iterator it = settings.m_bytesMessage.begin(); it != settings.m_bytesMessage.end(); ++it) + { + unsigned char b = *it; + bytesStr->push_back(new QString(tr("%1").arg(b, 2, 16, QChar('0')))); + } + } + + if (channelSettingsKeys.contains("messageRepeat") || force) { + swgLoRaModSettings->setMessageRepeat(settings.m_messageRepeat); + } + if (channelSettingsKeys.contains("rgbColor") || force) { swgLoRaModSettings->setRgbColor(settings.m_rgbColor); } diff --git a/plugins/channeltx/modlora/loramod.h b/plugins/channeltx/modlora/loramod.h index 8ecaad207..ff71e376b 100644 --- a/plugins/channeltx/modlora/loramod.h +++ b/plugins/channeltx/modlora/loramod.h @@ -150,6 +150,7 @@ private: LoRaModBaseband* m_basebandSource; LoRaModEncoder m_encoder; // TODO: check if it needs to be on its own thread LoRaModSettings m_settings; + float m_currentPayloadTime; SampleVector m_sampleBuffer; QMutex m_settingsMutex; diff --git a/plugins/channeltx/modlora/loramodgui.cpp b/plugins/channeltx/modlora/loramodgui.cpp index 3a71e7860..596fca7c9 100644 --- a/plugins/channeltx/modlora/loramodgui.cpp +++ b/plugins/channeltx/modlora/loramodgui.cpp @@ -346,7 +346,8 @@ void LoRaModGUI::on_messageText_editingFinished() void LoRaModGUI::on_hexText_editingFinished() { - + m_settings.m_bytesMessage = QByteArray::fromHex(ui->hexText->text().toLatin1()); + applySettings(); } void LoRaModGUI::onWidgetRolled(QWidget* widget, bool rollDown) @@ -485,6 +486,7 @@ void LoRaModGUI::displaySettings() setWindowTitle(m_channelMarker.getTitle()); displayStreamIndex(); displayCurrentPayloadMessage(); + displayBinaryMessage(); ui->fecParity->setEnabled(m_settings.m_codingScheme == LoRaModSettings::CodingLoRa); ui->crc->setEnabled(m_settings.m_codingScheme == LoRaModSettings::CodingLoRa); @@ -557,6 +559,11 @@ void LoRaModGUI::displayCurrentPayloadMessage() ui->messageText->blockSignals(false); } +void LoRaModGUI::displayBinaryMessage() +{ + ui->hexText->setText(m_settings.m_bytesMessage.toHex()); +} + void LoRaModGUI::setBandwidths() { int maxBandwidth = m_basebandSampleRate / LoRaModSettings::oversampling; diff --git a/plugins/channeltx/modlora/loramodgui.h b/plugins/channeltx/modlora/loramodgui.h index e60c73dd4..dd5a3fc58 100644 --- a/plugins/channeltx/modlora/loramodgui.h +++ b/plugins/channeltx/modlora/loramodgui.h @@ -79,6 +79,7 @@ private: void displaySettings(); void displayStreamIndex(); void displayCurrentPayloadMessage(); + void displayBinaryMessage(); void setBandwidths(); void leaveEvent(QEvent*); diff --git a/plugins/channeltx/modlora/loramodsettings.h b/plugins/channeltx/modlora/loramodsettings.h index 976559fac..950851168 100644 --- a/plugins/channeltx/modlora/loramodsettings.h +++ b/plugins/channeltx/modlora/loramodsettings.h @@ -46,8 +46,7 @@ struct LoRaModSettings Message73, MessageQSOText, MessageText, - MessageBytes, - MessageTest + MessageBytes }; int m_inputFrequencyOffset; diff --git a/sdrbase/resources/webapi.qrc b/sdrbase/resources/webapi.qrc index 41c7db9d6..b80e836ef 100644 --- a/sdrbase/resources/webapi.qrc +++ b/sdrbase/resources/webapi.qrc @@ -33,10 +33,10 @@ webapi/doc/swagger/include/Interferometer.yaml webapi/doc/swagger/include/LimeRFE.yaml webapi/doc/swagger/include/LimeSdr.yaml - webapi/doc/swagger/include/LoRaMod.yaml webapi/doc/swagger/include/KiwiSDR.yaml webapi/doc/swagger/include/LocalInput.yaml webapi/doc/swagger/include/LocalOutput.yaml + webapi/doc/swagger/include/LoRaMod.yaml webapi/doc/swagger/include/NFMDemod.yaml webapi/doc/swagger/include/NFMMod.yaml webapi/doc/swagger/include/Perseus.yaml diff --git a/sdrbase/resources/webapi/doc/html2/index.html b/sdrbase/resources/webapi/doc/html2/index.html index a162a6129..3e71ba0d9 100644 --- a/sdrbase/resources/webapi/doc/html2/index.html +++ b/sdrbase/resources/webapi/doc/html2/index.html @@ -4389,6 +4389,21 @@ margin-bottom: 20px; }, "channelSampleRate" : { "type" : "integer" + }, + "symbolTimeMs" : { + "type" : "number", + "format" : "float", + "description" : "symbol duration (ms)" + }, + "payloadTimeMs" : { + "type" : "number", + "format" : "float", + "description" : "payload duration (ms)" + }, + "totalTimeMs" : { + "type" : "number", + "format" : "float", + "description" : "total message duration inc. preamble and SFD (ms)" } }, "description" : "LoRaMod" @@ -4406,15 +4421,108 @@ margin-bottom: 20px; "type" : "integer" }, "deBits" : { - "type" : "integer" + "type" : "integer", + "description" : "Low data rate optmize (DE) bits i.e. nb of FFT bins per effective symbol" }, - "message" : { - "type" : "string" + "preambleChirps" : { + "type" : "integer", + "description" : "Number of preamble chirps" + }, + "quietMillis" : { + "type" : "integer", + "description" : "Number of milliseconds to pause between transmissions" + }, + "syncWord" : { + "type" : "integer", + "description" : "2 byte (0..65535) synchronization syncWord" }, "channelMute" : { "type" : "integer", "description" : "boolean" }, + "codingScheme" : { + "type" : "integer", + "description" : "message encoding scheme (LoRaModSettings::CodingScheme):\n * 0 - LoRa\n * 1 - Plain ASCII (7 bit)\n * 2 - Teletype (5 bit Baudot) a.k.a TTY\n" + }, + "nbParityBits" : { + "type" : "integer", + "description" : "Hamming FEC parity bits (LoRa)" + }, + "hasCRC" : { + "type" : "integer", + "description" : "Payload has CRC (LoRa)" + }, + "hasHeader" : { + "type" : "integer", + "description" : "Header present before actual payload (LoRa)" + }, + "myCall" : { + "type" : "string", + "description" : "own callsign placeholder (QSO mode)" + }, + "urCall" : { + "type" : "string", + "description" : "other party callsign placeholder (QSO mode)" + }, + "myLoc" : { + "type" : "string", + "description" : "own QRA locator (QSO mode)" + }, + "myRpt" : { + "type" : "string", + "description" : "report sent to other party (QSO mode)" + }, + "messageType" : { + "type" : "integer", + "description" : "type of message to send (LoRaModSettings::MessageType):\n * 0 - No message i.e no output. Use this as a transition to resend the same message.\n * 1 - Beacon. Sends message specified in beaconMessage\n * 2 - CQ call. Sends message specified in cqMessage\n * 3 - Reply to CQ call. Sends message specified in replyMessage\n * 4 - Report to callee. Sends message specified in reportMessage\n * 5 - Report to caller. Sends message specified in replyReportMessage\n * 6 - RRR to callee. Sends message specified in rrrMessage\n * 7 - 73 to caller. Sends message specified in message73\n * 8 - Random message with callsigns. Sends message specified in qsoTextMessage\n * 9 - Plain text. Sends message specified in textMessage\n * 10 - Binary payload. Sends bytes specified in bytesMessage\n" + }, + "beaconMessage" : { + "type" : "string", + "description" : "text message to be sent (repeatedly) as a beaconMessage" + }, + "cqMessage" : { + "type" : "string", + "description" : "general call message (QSO mode)" + }, + "replyMessage" : { + "type" : "string", + "description" : "reply to caller message (QSO mode)" + }, + "reportMessage" : { + "type" : "string", + "description" : "report to callee message (QSO mode)" + }, + "replyReportMessage" : { + "type" : "string", + "description" : "report back to caller message (QSO mode)" + }, + "rrrMessage" : { + "type" : "string", + "description" : "caller RRR message (QSO mode)" + }, + "message73" : { + "type" : "string", + "description" : "73 message back to caller to close QSO (QSO mode)" + }, + "qsoTextMessage" : { + "type" : "string", + "description" : "QSO random message exchange (QSO mode)" + }, + "textMessage" : { + "type" : "string", + "description" : "freeform text message" + }, + "bytesMessage" : { + "type" : "array", + "description" : "message to send as an array of hex string represented bytes (00..FF)", + "items" : { + "type" : "string" + } + }, + "messageRepeat" : { + "type" : "integer", + "description" : "number of repetitions of the same message (0 for infinite)" + }, "rgbColor" : { "type" : "integer" }, @@ -32322,7 +32430,7 @@ except ApiException as e:
- Generated 2020-02-08T20:41:49.295+01:00 + Generated 2020-02-22T07:44:51.167+01:00
diff --git a/sdrbase/resources/webapi/doc/swagger/include/LoRaMod.yaml b/sdrbase/resources/webapi/doc/swagger/include/LoRaMod.yaml index c3213ffe6..906a15ed8 100644 --- a/sdrbase/resources/webapi/doc/swagger/include/LoRaMod.yaml +++ b/sdrbase/resources/webapi/doc/swagger/include/LoRaMod.yaml @@ -9,12 +9,98 @@ LoRaModSettings: spreadFactor: type: integer deBits: + description: Low data rate optmize (DE) bits i.e. nb of FFT bins per effective symbol + type: integer + preambleChirps: + description: Number of preamble chirps + type: integer + quietMillis: + description: Number of milliseconds to pause between transmissions + type: integer + syncWord: + description: 2 byte (0..65535) synchronization syncWord type: integer - message: - type: string channelMute: description: boolean type: integer + codingScheme: + type: integer + description: > + message encoding scheme (LoRaModSettings::CodingScheme): + * 0 - LoRa + * 1 - Plain ASCII (7 bit) + * 2 - Teletype (5 bit Baudot) a.k.a TTY + nbParityBits: + description: Hamming FEC parity bits (LoRa) + type: integer + hasCRC: + description: Payload has CRC (LoRa) + type: integer + hasHeader: + description: Header present before actual payload (LoRa) + type: integer + myCall: + description: own callsign placeholder (QSO mode) + type: string + urCall: + description: other party callsign placeholder (QSO mode) + type: string + myLoc: + description: own QRA locator (QSO mode) + type: string + myRpt: + description: report sent to other party (QSO mode) + type: string + messageType: + type: integer + description: > + type of message to send (LoRaModSettings::MessageType): + * 0 - No message i.e no output. Use this as a transition to resend the same message. + * 1 - Beacon. Sends message specified in beaconMessage + * 2 - CQ call. Sends message specified in cqMessage + * 3 - Reply to CQ call. Sends message specified in replyMessage + * 4 - Report to callee. Sends message specified in reportMessage + * 5 - Report to caller. Sends message specified in replyReportMessage + * 6 - RRR to callee. Sends message specified in rrrMessage + * 7 - 73 to caller. Sends message specified in message73 + * 8 - Random message with callsigns. Sends message specified in qsoTextMessage + * 9 - Plain text. Sends message specified in textMessage + * 10 - Binary payload. Sends bytes specified in bytesMessage + beaconMessage: + description: text message to be sent (repeatedly) as a beaconMessage + type: string + cqMessage: + description: general call message (QSO mode) + type: string + replyMessage: + description: reply to caller message (QSO mode) + type: string + reportMessage: + description: report to callee message (QSO mode) + type: string + replyReportMessage: + description: report back to caller message (QSO mode) + type: string + rrrMessage: + description: caller RRR message (QSO mode) + type: string + message73: + description: 73 message back to caller to close QSO (QSO mode) + type: string + qsoTextMessage: + description: QSO random message exchange (QSO mode) + type: string + textMessage: + description: freeform text message + type: string + bytesMessage: + type: array + items: + type: string + description: message to send as an array of hex string represented bytes (00..FF) + messageRepeat: + description: number of repetitions of the same message (0 for infinite) + type: integer rgbColor: type: integer title: @@ -43,3 +129,15 @@ LoRaModReport: format: float channelSampleRate: type: integer + symbolTimeMs: + description: symbol duration (ms) + type: number + format: float + payloadTimeMs: + description: payload duration (ms) + type: number + format: float + totalTimeMs: + description: total message duration inc. preamble and SFD (ms) + type: number + format: float diff --git a/sdrbase/resources/webapi/doc/swagger/include/Structs.yaml b/sdrbase/resources/webapi/doc/swagger/include/Structs.yaml index 887ff0ca2..af17abd24 100644 --- a/sdrbase/resources/webapi/doc/swagger/include/Structs.yaml +++ b/sdrbase/resources/webapi/doc/swagger/include/Structs.yaml @@ -53,7 +53,7 @@ RangeFloat: format: float step: type: number - format: float + format: float FrequencyRange: description: An frequency range with 64 bit support for min and max @@ -74,7 +74,7 @@ NamedEnum: type: string value: type: integer - + Complex: description: A complex number properties: @@ -84,4 +84,3 @@ Complex: imag: type: number format: float - \ No newline at end of file diff --git a/sdrbase/webapi/webapirequestmapper.cpp b/sdrbase/webapi/webapirequestmapper.cpp index 7821a5609..8b2b94ab3 100644 --- a/sdrbase/webapi/webapirequestmapper.cpp +++ b/sdrbase/webapi/webapirequestmapper.cpp @@ -72,6 +72,7 @@ const QMap WebAPIRequestMapper::m_channelURIToSettingsKey = { {"sdrangel.demod.localsink", "LocalSinkSettings"}, {"sdrangel.channel.localsink", "LocalSinkSettings"}, // remap {"sdrangel.channel.localsource", "LocalSourceSettings"}, + {"sdrangel.channel.modlora", "LoRaModSettings"}, {"sdrangel.demod.remotesink", "RemoteSinkSettings"}, {"sdrangel.channeltx.remotesource", "RemoteSourceSettings"}, {"sdrangel.channeltx.modssb", "SSBModSettings"}, @@ -146,6 +147,8 @@ const QMap WebAPIRequestMapper::m_channelTypeToSettingsKey = { {"NFMMod", "NFMModSettings"}, {"LocalSink", "LocalSinkSettings"}, {"LocalSource", "LocalSourceSettings"}, + {"LoRaDemod", "LoRaDemodSettings"}, + {"LoRaMod", "LoRaModSettings"}, {"RemoteSink", "RemoteSinkSettings"}, {"RemoteSource", "RemoteSourceSettings"}, {"SSBMod", "SSBModSettings"}, @@ -2911,6 +2914,12 @@ bool WebAPIRequestMapper::getChannel( channelSettings->setLocalSourceSettings(new SWGSDRangel::SWGLocalSourceSettings()); channelSettings->getLocalSourceSettings()->fromJsonObject(settingsJsonObject); } + else if (channelSettingsKey == "LoRaModSettings") + { + channelSettings->setLoRaModSettings(new SWGSDRangel::SWGLoRaModSettings()); + channelSettings->getLoRaModSettings()->init(); // contains a list of strings + channelSettings->getLoRaModSettings()->fromJsonObject(settingsJsonObject); + } else if (channelSettingsKey == "RemoteSinkSettings") { channelSettings->setRemoteSinkSettings(new SWGSDRangel::SWGRemoteSinkSettings()); diff --git a/swagger/sdrangel/api/swagger/include/LoRaMod.yaml b/swagger/sdrangel/api/swagger/include/LoRaMod.yaml index c3213ffe6..c61066df9 100644 --- a/swagger/sdrangel/api/swagger/include/LoRaMod.yaml +++ b/swagger/sdrangel/api/swagger/include/LoRaMod.yaml @@ -9,12 +9,98 @@ LoRaModSettings: spreadFactor: type: integer deBits: + description: Low data rate optmize (DE) bits i.e. nb of FFT bins per effective symbol + type: integer + preambleChirps: + description: Number of preamble chirps + type: integer + quietMillis: + description: Number of milliseconds to pause between transmissions + type: integer + syncWord: + description: 2 byte (0..65535) synchronization syncWord type: integer - message: - type: string channelMute: description: boolean type: integer + codingScheme: + type: integer + description: > + message encoding scheme (LoRaModSettings::CodingScheme): + * 0 - LoRa + * 1 - Plain ASCII (7 bit) + * 2 - Teletype (5 bit Baudot) a.k.a TTY + nbParityBits: + description: Hamming FEC parity bits (LoRa) + type: integer + hasCRC: + description: Payload has CRC (LoRa) + type: integer + hasHeader: + description: Header present before actual payload (LoRa) + type: integer + myCall: + description: own callsign placeholder (QSO mode) + type: string + urCall: + description: other party callsign placeholder (QSO mode) + type: string + myLoc: + description: own QRA locator (QSO mode) + type: string + myRpt: + description: report sent to other party (QSO mode) + type: string + messageType: + type: integer + description: > + type of message to send (LoRaModSettings::MessageType): + * 0 - No message i.e no output. Use this as a transition to resend the same message. + * 1 - Beacon. Sends message specified in beaconMessage + * 2 - CQ call. Sends message specified in cqMessage + * 3 - Reply to CQ call. Sends message specified in replyMessage + * 4 - Report to callee. Sends message specified in reportMessage + * 5 - Report to caller. Sends message specified in replyReportMessage + * 6 - RRR to callee. Sends message specified in rrrMessage + * 7 - 73 to caller. Sends message specified in message73 + * 8 - Random message with callsigns. Sends message specified in qsoTextMessage + * 9 - Plain text. Sends message specified in textMessage + * 10 - Binary payload. Sends bytes specified in bytesMessage + beaconMessage: + description: text message to be sent (repeatedly) as a beaconMessage + type: string + cqMessage: + description: general call message (QSO mode) + type: string + replyMessage: + description: reply to caller message (QSO mode) + type: string + reportMessage: + description: report to callee message (QSO mode) + type: string + replyReportMessage: + description: report back to caller message (QSO mode) + type: string + rrrMessage: + description: caller RRR message (QSO mode) + type: string + message73: + description: 73 message back to caller to close QSO (QSO mode) + type: string + qsoTextMessage: + description: QSO random message exchange (QSO mode) + type: string + textMessage: + description: freeform text message + type: string + bytesMessage: + description: message to send as an array of hex string represented bytes (00..FF) + type: array + items: + type: string + messageRepeat: + description: number of repetitions of the same message (0 for infinite) + type: integer rgbColor: type: integer title: @@ -43,3 +129,15 @@ LoRaModReport: format: float channelSampleRate: type: integer + symbolTimeMs: + description: symbol duration (ms) + type: number + format: float + payloadTimeMs: + description: payload duration (ms) + type: number + format: float + totalTimeMs: + description: total message duration inc. preamble and SFD (ms) + type: number + format: float diff --git a/swagger/sdrangel/api/swagger/include/Structs.yaml b/swagger/sdrangel/api/swagger/include/Structs.yaml index 887ff0ca2..af17abd24 100644 --- a/swagger/sdrangel/api/swagger/include/Structs.yaml +++ b/swagger/sdrangel/api/swagger/include/Structs.yaml @@ -53,7 +53,7 @@ RangeFloat: format: float step: type: number - format: float + format: float FrequencyRange: description: An frequency range with 64 bit support for min and max @@ -74,7 +74,7 @@ NamedEnum: type: string value: type: integer - + Complex: description: A complex number properties: @@ -84,4 +84,3 @@ Complex: imag: type: number format: float - \ No newline at end of file diff --git a/swagger/sdrangel/code/html2/index.html b/swagger/sdrangel/code/html2/index.html index a162a6129..3e71ba0d9 100644 --- a/swagger/sdrangel/code/html2/index.html +++ b/swagger/sdrangel/code/html2/index.html @@ -4389,6 +4389,21 @@ margin-bottom: 20px; }, "channelSampleRate" : { "type" : "integer" + }, + "symbolTimeMs" : { + "type" : "number", + "format" : "float", + "description" : "symbol duration (ms)" + }, + "payloadTimeMs" : { + "type" : "number", + "format" : "float", + "description" : "payload duration (ms)" + }, + "totalTimeMs" : { + "type" : "number", + "format" : "float", + "description" : "total message duration inc. preamble and SFD (ms)" } }, "description" : "LoRaMod" @@ -4406,15 +4421,108 @@ margin-bottom: 20px; "type" : "integer" }, "deBits" : { - "type" : "integer" + "type" : "integer", + "description" : "Low data rate optmize (DE) bits i.e. nb of FFT bins per effective symbol" }, - "message" : { - "type" : "string" + "preambleChirps" : { + "type" : "integer", + "description" : "Number of preamble chirps" + }, + "quietMillis" : { + "type" : "integer", + "description" : "Number of milliseconds to pause between transmissions" + }, + "syncWord" : { + "type" : "integer", + "description" : "2 byte (0..65535) synchronization syncWord" }, "channelMute" : { "type" : "integer", "description" : "boolean" }, + "codingScheme" : { + "type" : "integer", + "description" : "message encoding scheme (LoRaModSettings::CodingScheme):\n * 0 - LoRa\n * 1 - Plain ASCII (7 bit)\n * 2 - Teletype (5 bit Baudot) a.k.a TTY\n" + }, + "nbParityBits" : { + "type" : "integer", + "description" : "Hamming FEC parity bits (LoRa)" + }, + "hasCRC" : { + "type" : "integer", + "description" : "Payload has CRC (LoRa)" + }, + "hasHeader" : { + "type" : "integer", + "description" : "Header present before actual payload (LoRa)" + }, + "myCall" : { + "type" : "string", + "description" : "own callsign placeholder (QSO mode)" + }, + "urCall" : { + "type" : "string", + "description" : "other party callsign placeholder (QSO mode)" + }, + "myLoc" : { + "type" : "string", + "description" : "own QRA locator (QSO mode)" + }, + "myRpt" : { + "type" : "string", + "description" : "report sent to other party (QSO mode)" + }, + "messageType" : { + "type" : "integer", + "description" : "type of message to send (LoRaModSettings::MessageType):\n * 0 - No message i.e no output. Use this as a transition to resend the same message.\n * 1 - Beacon. Sends message specified in beaconMessage\n * 2 - CQ call. Sends message specified in cqMessage\n * 3 - Reply to CQ call. Sends message specified in replyMessage\n * 4 - Report to callee. Sends message specified in reportMessage\n * 5 - Report to caller. Sends message specified in replyReportMessage\n * 6 - RRR to callee. Sends message specified in rrrMessage\n * 7 - 73 to caller. Sends message specified in message73\n * 8 - Random message with callsigns. Sends message specified in qsoTextMessage\n * 9 - Plain text. Sends message specified in textMessage\n * 10 - Binary payload. Sends bytes specified in bytesMessage\n" + }, + "beaconMessage" : { + "type" : "string", + "description" : "text message to be sent (repeatedly) as a beaconMessage" + }, + "cqMessage" : { + "type" : "string", + "description" : "general call message (QSO mode)" + }, + "replyMessage" : { + "type" : "string", + "description" : "reply to caller message (QSO mode)" + }, + "reportMessage" : { + "type" : "string", + "description" : "report to callee message (QSO mode)" + }, + "replyReportMessage" : { + "type" : "string", + "description" : "report back to caller message (QSO mode)" + }, + "rrrMessage" : { + "type" : "string", + "description" : "caller RRR message (QSO mode)" + }, + "message73" : { + "type" : "string", + "description" : "73 message back to caller to close QSO (QSO mode)" + }, + "qsoTextMessage" : { + "type" : "string", + "description" : "QSO random message exchange (QSO mode)" + }, + "textMessage" : { + "type" : "string", + "description" : "freeform text message" + }, + "bytesMessage" : { + "type" : "array", + "description" : "message to send as an array of hex string represented bytes (00..FF)", + "items" : { + "type" : "string" + } + }, + "messageRepeat" : { + "type" : "integer", + "description" : "number of repetitions of the same message (0 for infinite)" + }, "rgbColor" : { "type" : "integer" }, @@ -32322,7 +32430,7 @@ except ApiException as e:
- Generated 2020-02-08T20:41:49.295+01:00 + Generated 2020-02-22T07:44:51.167+01:00
diff --git a/swagger/sdrangel/code/qt5/client/SWGLoRaModReport.cpp b/swagger/sdrangel/code/qt5/client/SWGLoRaModReport.cpp index ed786d158..d8c5abf4c 100644 --- a/swagger/sdrangel/code/qt5/client/SWGLoRaModReport.cpp +++ b/swagger/sdrangel/code/qt5/client/SWGLoRaModReport.cpp @@ -32,6 +32,12 @@ SWGLoRaModReport::SWGLoRaModReport() { m_channel_power_db_isSet = false; channel_sample_rate = 0; m_channel_sample_rate_isSet = false; + symbol_time_ms = 0.0f; + m_symbol_time_ms_isSet = false; + payload_time_ms = 0.0f; + m_payload_time_ms_isSet = false; + total_time_ms = 0.0f; + m_total_time_ms_isSet = false; } SWGLoRaModReport::~SWGLoRaModReport() { @@ -44,12 +50,21 @@ SWGLoRaModReport::init() { m_channel_power_db_isSet = false; channel_sample_rate = 0; m_channel_sample_rate_isSet = false; + symbol_time_ms = 0.0f; + m_symbol_time_ms_isSet = false; + payload_time_ms = 0.0f; + m_payload_time_ms_isSet = false; + total_time_ms = 0.0f; + m_total_time_ms_isSet = false; } void SWGLoRaModReport::cleanup() { + + + } SWGLoRaModReport* @@ -67,6 +82,12 @@ SWGLoRaModReport::fromJsonObject(QJsonObject &pJson) { ::SWGSDRangel::setValue(&channel_sample_rate, pJson["channelSampleRate"], "qint32", ""); + ::SWGSDRangel::setValue(&symbol_time_ms, pJson["symbolTimeMs"], "float", ""); + + ::SWGSDRangel::setValue(&payload_time_ms, pJson["payloadTimeMs"], "float", ""); + + ::SWGSDRangel::setValue(&total_time_ms, pJson["totalTimeMs"], "float", ""); + } QString @@ -89,6 +110,15 @@ SWGLoRaModReport::asJsonObject() { if(m_channel_sample_rate_isSet){ obj->insert("channelSampleRate", QJsonValue(channel_sample_rate)); } + if(m_symbol_time_ms_isSet){ + obj->insert("symbolTimeMs", QJsonValue(symbol_time_ms)); + } + if(m_payload_time_ms_isSet){ + obj->insert("payloadTimeMs", QJsonValue(payload_time_ms)); + } + if(m_total_time_ms_isSet){ + obj->insert("totalTimeMs", QJsonValue(total_time_ms)); + } return obj; } @@ -113,6 +143,36 @@ SWGLoRaModReport::setChannelSampleRate(qint32 channel_sample_rate) { this->m_channel_sample_rate_isSet = true; } +float +SWGLoRaModReport::getSymbolTimeMs() { + return symbol_time_ms; +} +void +SWGLoRaModReport::setSymbolTimeMs(float symbol_time_ms) { + this->symbol_time_ms = symbol_time_ms; + this->m_symbol_time_ms_isSet = true; +} + +float +SWGLoRaModReport::getPayloadTimeMs() { + return payload_time_ms; +} +void +SWGLoRaModReport::setPayloadTimeMs(float payload_time_ms) { + this->payload_time_ms = payload_time_ms; + this->m_payload_time_ms_isSet = true; +} + +float +SWGLoRaModReport::getTotalTimeMs() { + return total_time_ms; +} +void +SWGLoRaModReport::setTotalTimeMs(float total_time_ms) { + this->total_time_ms = total_time_ms; + this->m_total_time_ms_isSet = true; +} + bool SWGLoRaModReport::isSet(){ @@ -124,6 +184,15 @@ SWGLoRaModReport::isSet(){ if(m_channel_sample_rate_isSet){ isObjectUpdated = true; break; } + if(m_symbol_time_ms_isSet){ + isObjectUpdated = true; break; + } + if(m_payload_time_ms_isSet){ + isObjectUpdated = true; break; + } + if(m_total_time_ms_isSet){ + isObjectUpdated = true; break; + } }while(false); return isObjectUpdated; } diff --git a/swagger/sdrangel/code/qt5/client/SWGLoRaModReport.h b/swagger/sdrangel/code/qt5/client/SWGLoRaModReport.h index 52fb1e59e..9b5d03e99 100644 --- a/swagger/sdrangel/code/qt5/client/SWGLoRaModReport.h +++ b/swagger/sdrangel/code/qt5/client/SWGLoRaModReport.h @@ -47,6 +47,15 @@ public: qint32 getChannelSampleRate(); void setChannelSampleRate(qint32 channel_sample_rate); + float getSymbolTimeMs(); + void setSymbolTimeMs(float symbol_time_ms); + + float getPayloadTimeMs(); + void setPayloadTimeMs(float payload_time_ms); + + float getTotalTimeMs(); + void setTotalTimeMs(float total_time_ms); + virtual bool isSet() override; @@ -57,6 +66,15 @@ private: qint32 channel_sample_rate; bool m_channel_sample_rate_isSet; + float symbol_time_ms; + bool m_symbol_time_ms_isSet; + + float payload_time_ms; + bool m_payload_time_ms_isSet; + + float total_time_ms; + bool m_total_time_ms_isSet; + }; } diff --git a/swagger/sdrangel/code/qt5/client/SWGLoRaModSettings.cpp b/swagger/sdrangel/code/qt5/client/SWGLoRaModSettings.cpp index 50af294f8..d38cfbf17 100644 --- a/swagger/sdrangel/code/qt5/client/SWGLoRaModSettings.cpp +++ b/swagger/sdrangel/code/qt5/client/SWGLoRaModSettings.cpp @@ -36,10 +36,54 @@ SWGLoRaModSettings::SWGLoRaModSettings() { m_spread_factor_isSet = false; de_bits = 0; m_de_bits_isSet = false; - message = nullptr; - m_message_isSet = false; + preamble_chirps = 0; + m_preamble_chirps_isSet = false; + quiet_millis = 0; + m_quiet_millis_isSet = false; + sync_word = 0; + m_sync_word_isSet = false; channel_mute = 0; m_channel_mute_isSet = false; + coding_scheme = 0; + m_coding_scheme_isSet = false; + nb_parity_bits = 0; + m_nb_parity_bits_isSet = false; + has_crc = 0; + m_has_crc_isSet = false; + has_header = 0; + m_has_header_isSet = false; + my_call = nullptr; + m_my_call_isSet = false; + ur_call = nullptr; + m_ur_call_isSet = false; + my_loc = nullptr; + m_my_loc_isSet = false; + my_rpt = nullptr; + m_my_rpt_isSet = false; + message_type = 0; + m_message_type_isSet = false; + beacon_message = nullptr; + m_beacon_message_isSet = false; + cq_message = nullptr; + m_cq_message_isSet = false; + reply_message = nullptr; + m_reply_message_isSet = false; + report_message = nullptr; + m_report_message_isSet = false; + reply_report_message = nullptr; + m_reply_report_message_isSet = false; + rrr_message = nullptr; + m_rrr_message_isSet = false; + message73 = nullptr; + m_message73_isSet = false; + qso_text_message = nullptr; + m_qso_text_message_isSet = false; + text_message = nullptr; + m_text_message_isSet = false; + bytes_message = nullptr; + m_bytes_message_isSet = false; + message_repeat = 0; + m_message_repeat_isSet = false; rgb_color = 0; m_rgb_color_isSet = false; title = nullptr; @@ -72,10 +116,54 @@ SWGLoRaModSettings::init() { m_spread_factor_isSet = false; de_bits = 0; m_de_bits_isSet = false; - message = new QString(""); - m_message_isSet = false; + preamble_chirps = 0; + m_preamble_chirps_isSet = false; + quiet_millis = 0; + m_quiet_millis_isSet = false; + sync_word = 0; + m_sync_word_isSet = false; channel_mute = 0; m_channel_mute_isSet = false; + coding_scheme = 0; + m_coding_scheme_isSet = false; + nb_parity_bits = 0; + m_nb_parity_bits_isSet = false; + has_crc = 0; + m_has_crc_isSet = false; + has_header = 0; + m_has_header_isSet = false; + my_call = new QString(""); + m_my_call_isSet = false; + ur_call = new QString(""); + m_ur_call_isSet = false; + my_loc = new QString(""); + m_my_loc_isSet = false; + my_rpt = new QString(""); + m_my_rpt_isSet = false; + message_type = 0; + m_message_type_isSet = false; + beacon_message = new QString(""); + m_beacon_message_isSet = false; + cq_message = new QString(""); + m_cq_message_isSet = false; + reply_message = new QString(""); + m_reply_message_isSet = false; + report_message = new QString(""); + m_report_message_isSet = false; + reply_report_message = new QString(""); + m_reply_report_message_isSet = false; + rrr_message = new QString(""); + m_rrr_message_isSet = false; + message73 = new QString(""); + m_message73_isSet = false; + qso_text_message = new QString(""); + m_qso_text_message_isSet = false; + text_message = new QString(""); + m_text_message_isSet = false; + bytes_message = new QList(); + m_bytes_message_isSet = false; + message_repeat = 0; + m_message_repeat_isSet = false; rgb_color = 0; m_rgb_color_isSet = false; title = new QString(""); @@ -100,8 +188,60 @@ SWGLoRaModSettings::cleanup() { - if(message != nullptr) { - delete message; + + + + + + + + + if(my_call != nullptr) { + delete my_call; + } + if(ur_call != nullptr) { + delete ur_call; + } + if(my_loc != nullptr) { + delete my_loc; + } + if(my_rpt != nullptr) { + delete my_rpt; + } + + if(beacon_message != nullptr) { + delete beacon_message; + } + if(cq_message != nullptr) { + delete cq_message; + } + if(reply_message != nullptr) { + delete reply_message; + } + if(report_message != nullptr) { + delete report_message; + } + if(reply_report_message != nullptr) { + delete reply_report_message; + } + if(rrr_message != nullptr) { + delete rrr_message; + } + if(message73 != nullptr) { + delete message73; + } + if(qso_text_message != nullptr) { + delete qso_text_message; + } + if(text_message != nullptr) { + delete text_message; + } + if(bytes_message != nullptr) { + auto arr = bytes_message; + for(auto o: *arr) { + delete o; + } + delete bytes_message; } @@ -137,10 +277,54 @@ SWGLoRaModSettings::fromJsonObject(QJsonObject &pJson) { ::SWGSDRangel::setValue(&de_bits, pJson["deBits"], "qint32", ""); - ::SWGSDRangel::setValue(&message, pJson["message"], "QString", "QString"); + ::SWGSDRangel::setValue(&preamble_chirps, pJson["preambleChirps"], "qint32", ""); + + ::SWGSDRangel::setValue(&quiet_millis, pJson["quietMillis"], "qint32", ""); + + ::SWGSDRangel::setValue(&sync_word, pJson["syncWord"], "qint32", ""); ::SWGSDRangel::setValue(&channel_mute, pJson["channelMute"], "qint32", ""); + ::SWGSDRangel::setValue(&coding_scheme, pJson["codingScheme"], "qint32", ""); + + ::SWGSDRangel::setValue(&nb_parity_bits, pJson["nbParityBits"], "qint32", ""); + + ::SWGSDRangel::setValue(&has_crc, pJson["hasCRC"], "qint32", ""); + + ::SWGSDRangel::setValue(&has_header, pJson["hasHeader"], "qint32", ""); + + ::SWGSDRangel::setValue(&my_call, pJson["myCall"], "QString", "QString"); + + ::SWGSDRangel::setValue(&ur_call, pJson["urCall"], "QString", "QString"); + + ::SWGSDRangel::setValue(&my_loc, pJson["myLoc"], "QString", "QString"); + + ::SWGSDRangel::setValue(&my_rpt, pJson["myRpt"], "QString", "QString"); + + ::SWGSDRangel::setValue(&message_type, pJson["messageType"], "qint32", ""); + + ::SWGSDRangel::setValue(&beacon_message, pJson["beaconMessage"], "QString", "QString"); + + ::SWGSDRangel::setValue(&cq_message, pJson["cqMessage"], "QString", "QString"); + + ::SWGSDRangel::setValue(&reply_message, pJson["replyMessage"], "QString", "QString"); + + ::SWGSDRangel::setValue(&report_message, pJson["reportMessage"], "QString", "QString"); + + ::SWGSDRangel::setValue(&reply_report_message, pJson["replyReportMessage"], "QString", "QString"); + + ::SWGSDRangel::setValue(&rrr_message, pJson["rrrMessage"], "QString", "QString"); + + ::SWGSDRangel::setValue(&message73, pJson["message73"], "QString", "QString"); + + ::SWGSDRangel::setValue(&qso_text_message, pJson["qsoTextMessage"], "QString", "QString"); + + ::SWGSDRangel::setValue(&text_message, pJson["textMessage"], "QString", "QString"); + + + ::SWGSDRangel::setValue(&bytes_message, pJson["bytesMessage"], "QList", "QString"); + ::SWGSDRangel::setValue(&message_repeat, pJson["messageRepeat"], "qint32", ""); + ::SWGSDRangel::setValue(&rgb_color, pJson["rgbColor"], "qint32", ""); ::SWGSDRangel::setValue(&title, pJson["title"], "QString", "QString"); @@ -185,12 +369,78 @@ SWGLoRaModSettings::asJsonObject() { if(m_de_bits_isSet){ obj->insert("deBits", QJsonValue(de_bits)); } - if(message != nullptr && *message != QString("")){ - toJsonValue(QString("message"), message, obj, QString("QString")); + if(m_preamble_chirps_isSet){ + obj->insert("preambleChirps", QJsonValue(preamble_chirps)); + } + if(m_quiet_millis_isSet){ + obj->insert("quietMillis", QJsonValue(quiet_millis)); + } + if(m_sync_word_isSet){ + obj->insert("syncWord", QJsonValue(sync_word)); } if(m_channel_mute_isSet){ obj->insert("channelMute", QJsonValue(channel_mute)); } + if(m_coding_scheme_isSet){ + obj->insert("codingScheme", QJsonValue(coding_scheme)); + } + if(m_nb_parity_bits_isSet){ + obj->insert("nbParityBits", QJsonValue(nb_parity_bits)); + } + if(m_has_crc_isSet){ + obj->insert("hasCRC", QJsonValue(has_crc)); + } + if(m_has_header_isSet){ + obj->insert("hasHeader", QJsonValue(has_header)); + } + if(my_call != nullptr && *my_call != QString("")){ + toJsonValue(QString("myCall"), my_call, obj, QString("QString")); + } + if(ur_call != nullptr && *ur_call != QString("")){ + toJsonValue(QString("urCall"), ur_call, obj, QString("QString")); + } + if(my_loc != nullptr && *my_loc != QString("")){ + toJsonValue(QString("myLoc"), my_loc, obj, QString("QString")); + } + if(my_rpt != nullptr && *my_rpt != QString("")){ + toJsonValue(QString("myRpt"), my_rpt, obj, QString("QString")); + } + if(m_message_type_isSet){ + obj->insert("messageType", QJsonValue(message_type)); + } + if(beacon_message != nullptr && *beacon_message != QString("")){ + toJsonValue(QString("beaconMessage"), beacon_message, obj, QString("QString")); + } + if(cq_message != nullptr && *cq_message != QString("")){ + toJsonValue(QString("cqMessage"), cq_message, obj, QString("QString")); + } + if(reply_message != nullptr && *reply_message != QString("")){ + toJsonValue(QString("replyMessage"), reply_message, obj, QString("QString")); + } + if(report_message != nullptr && *report_message != QString("")){ + toJsonValue(QString("reportMessage"), report_message, obj, QString("QString")); + } + if(reply_report_message != nullptr && *reply_report_message != QString("")){ + toJsonValue(QString("replyReportMessage"), reply_report_message, obj, QString("QString")); + } + if(rrr_message != nullptr && *rrr_message != QString("")){ + toJsonValue(QString("rrrMessage"), rrr_message, obj, QString("QString")); + } + if(message73 != nullptr && *message73 != QString("")){ + toJsonValue(QString("message73"), message73, obj, QString("QString")); + } + if(qso_text_message != nullptr && *qso_text_message != QString("")){ + toJsonValue(QString("qsoTextMessage"), qso_text_message, obj, QString("QString")); + } + if(text_message != nullptr && *text_message != QString("")){ + toJsonValue(QString("textMessage"), text_message, obj, QString("QString")); + } + if(bytes_message && bytes_message->size() > 0){ + toJsonArray((QList*)bytes_message, obj, "bytesMessage", "QString"); + } + if(m_message_repeat_isSet){ + obj->insert("messageRepeat", QJsonValue(message_repeat)); + } if(m_rgb_color_isSet){ obj->insert("rgbColor", QJsonValue(rgb_color)); } @@ -259,14 +509,34 @@ SWGLoRaModSettings::setDeBits(qint32 de_bits) { this->m_de_bits_isSet = true; } -QString* -SWGLoRaModSettings::getMessage() { - return message; +qint32 +SWGLoRaModSettings::getPreambleChirps() { + return preamble_chirps; } void -SWGLoRaModSettings::setMessage(QString* message) { - this->message = message; - this->m_message_isSet = true; +SWGLoRaModSettings::setPreambleChirps(qint32 preamble_chirps) { + this->preamble_chirps = preamble_chirps; + this->m_preamble_chirps_isSet = true; +} + +qint32 +SWGLoRaModSettings::getQuietMillis() { + return quiet_millis; +} +void +SWGLoRaModSettings::setQuietMillis(qint32 quiet_millis) { + this->quiet_millis = quiet_millis; + this->m_quiet_millis_isSet = true; +} + +qint32 +SWGLoRaModSettings::getSyncWord() { + return sync_word; +} +void +SWGLoRaModSettings::setSyncWord(qint32 sync_word) { + this->sync_word = sync_word; + this->m_sync_word_isSet = true; } qint32 @@ -279,6 +549,206 @@ SWGLoRaModSettings::setChannelMute(qint32 channel_mute) { this->m_channel_mute_isSet = true; } +qint32 +SWGLoRaModSettings::getCodingScheme() { + return coding_scheme; +} +void +SWGLoRaModSettings::setCodingScheme(qint32 coding_scheme) { + this->coding_scheme = coding_scheme; + this->m_coding_scheme_isSet = true; +} + +qint32 +SWGLoRaModSettings::getNbParityBits() { + return nb_parity_bits; +} +void +SWGLoRaModSettings::setNbParityBits(qint32 nb_parity_bits) { + this->nb_parity_bits = nb_parity_bits; + this->m_nb_parity_bits_isSet = true; +} + +qint32 +SWGLoRaModSettings::getHasCrc() { + return has_crc; +} +void +SWGLoRaModSettings::setHasCrc(qint32 has_crc) { + this->has_crc = has_crc; + this->m_has_crc_isSet = true; +} + +qint32 +SWGLoRaModSettings::getHasHeader() { + return has_header; +} +void +SWGLoRaModSettings::setHasHeader(qint32 has_header) { + this->has_header = has_header; + this->m_has_header_isSet = true; +} + +QString* +SWGLoRaModSettings::getMyCall() { + return my_call; +} +void +SWGLoRaModSettings::setMyCall(QString* my_call) { + this->my_call = my_call; + this->m_my_call_isSet = true; +} + +QString* +SWGLoRaModSettings::getUrCall() { + return ur_call; +} +void +SWGLoRaModSettings::setUrCall(QString* ur_call) { + this->ur_call = ur_call; + this->m_ur_call_isSet = true; +} + +QString* +SWGLoRaModSettings::getMyLoc() { + return my_loc; +} +void +SWGLoRaModSettings::setMyLoc(QString* my_loc) { + this->my_loc = my_loc; + this->m_my_loc_isSet = true; +} + +QString* +SWGLoRaModSettings::getMyRpt() { + return my_rpt; +} +void +SWGLoRaModSettings::setMyRpt(QString* my_rpt) { + this->my_rpt = my_rpt; + this->m_my_rpt_isSet = true; +} + +qint32 +SWGLoRaModSettings::getMessageType() { + return message_type; +} +void +SWGLoRaModSettings::setMessageType(qint32 message_type) { + this->message_type = message_type; + this->m_message_type_isSet = true; +} + +QString* +SWGLoRaModSettings::getBeaconMessage() { + return beacon_message; +} +void +SWGLoRaModSettings::setBeaconMessage(QString* beacon_message) { + this->beacon_message = beacon_message; + this->m_beacon_message_isSet = true; +} + +QString* +SWGLoRaModSettings::getCqMessage() { + return cq_message; +} +void +SWGLoRaModSettings::setCqMessage(QString* cq_message) { + this->cq_message = cq_message; + this->m_cq_message_isSet = true; +} + +QString* +SWGLoRaModSettings::getReplyMessage() { + return reply_message; +} +void +SWGLoRaModSettings::setReplyMessage(QString* reply_message) { + this->reply_message = reply_message; + this->m_reply_message_isSet = true; +} + +QString* +SWGLoRaModSettings::getReportMessage() { + return report_message; +} +void +SWGLoRaModSettings::setReportMessage(QString* report_message) { + this->report_message = report_message; + this->m_report_message_isSet = true; +} + +QString* +SWGLoRaModSettings::getReplyReportMessage() { + return reply_report_message; +} +void +SWGLoRaModSettings::setReplyReportMessage(QString* reply_report_message) { + this->reply_report_message = reply_report_message; + this->m_reply_report_message_isSet = true; +} + +QString* +SWGLoRaModSettings::getRrrMessage() { + return rrr_message; +} +void +SWGLoRaModSettings::setRrrMessage(QString* rrr_message) { + this->rrr_message = rrr_message; + this->m_rrr_message_isSet = true; +} + +QString* +SWGLoRaModSettings::getMessage73() { + return message73; +} +void +SWGLoRaModSettings::setMessage73(QString* message73) { + this->message73 = message73; + this->m_message73_isSet = true; +} + +QString* +SWGLoRaModSettings::getQsoTextMessage() { + return qso_text_message; +} +void +SWGLoRaModSettings::setQsoTextMessage(QString* qso_text_message) { + this->qso_text_message = qso_text_message; + this->m_qso_text_message_isSet = true; +} + +QString* +SWGLoRaModSettings::getTextMessage() { + return text_message; +} +void +SWGLoRaModSettings::setTextMessage(QString* text_message) { + this->text_message = text_message; + this->m_text_message_isSet = true; +} + +QList* +SWGLoRaModSettings::getBytesMessage() { + return bytes_message; +} +void +SWGLoRaModSettings::setBytesMessage(QList* bytes_message) { + this->bytes_message = bytes_message; + this->m_bytes_message_isSet = true; +} + +qint32 +SWGLoRaModSettings::getMessageRepeat() { + return message_repeat; +} +void +SWGLoRaModSettings::setMessageRepeat(qint32 message_repeat) { + this->message_repeat = message_repeat; + this->m_message_repeat_isSet = true; +} + qint32 SWGLoRaModSettings::getRgbColor() { return rgb_color; @@ -376,12 +846,78 @@ SWGLoRaModSettings::isSet(){ if(m_de_bits_isSet){ isObjectUpdated = true; break; } - if(message && *message != QString("")){ + if(m_preamble_chirps_isSet){ + isObjectUpdated = true; break; + } + if(m_quiet_millis_isSet){ + isObjectUpdated = true; break; + } + if(m_sync_word_isSet){ isObjectUpdated = true; break; } if(m_channel_mute_isSet){ isObjectUpdated = true; break; } + if(m_coding_scheme_isSet){ + isObjectUpdated = true; break; + } + if(m_nb_parity_bits_isSet){ + isObjectUpdated = true; break; + } + if(m_has_crc_isSet){ + isObjectUpdated = true; break; + } + if(m_has_header_isSet){ + isObjectUpdated = true; break; + } + if(my_call && *my_call != QString("")){ + isObjectUpdated = true; break; + } + if(ur_call && *ur_call != QString("")){ + isObjectUpdated = true; break; + } + if(my_loc && *my_loc != QString("")){ + isObjectUpdated = true; break; + } + if(my_rpt && *my_rpt != QString("")){ + isObjectUpdated = true; break; + } + if(m_message_type_isSet){ + isObjectUpdated = true; break; + } + if(beacon_message && *beacon_message != QString("")){ + isObjectUpdated = true; break; + } + if(cq_message && *cq_message != QString("")){ + isObjectUpdated = true; break; + } + if(reply_message && *reply_message != QString("")){ + isObjectUpdated = true; break; + } + if(report_message && *report_message != QString("")){ + isObjectUpdated = true; break; + } + if(reply_report_message && *reply_report_message != QString("")){ + isObjectUpdated = true; break; + } + if(rrr_message && *rrr_message != QString("")){ + isObjectUpdated = true; break; + } + if(message73 && *message73 != QString("")){ + isObjectUpdated = true; break; + } + if(qso_text_message && *qso_text_message != QString("")){ + isObjectUpdated = true; break; + } + if(text_message && *text_message != QString("")){ + isObjectUpdated = true; break; + } + if(bytes_message && (bytes_message->size() > 0)){ + isObjectUpdated = true; break; + } + if(m_message_repeat_isSet){ + isObjectUpdated = true; break; + } if(m_rgb_color_isSet){ isObjectUpdated = true; break; } diff --git a/swagger/sdrangel/code/qt5/client/SWGLoRaModSettings.h b/swagger/sdrangel/code/qt5/client/SWGLoRaModSettings.h index 06c33b608..0cdb40a6d 100644 --- a/swagger/sdrangel/code/qt5/client/SWGLoRaModSettings.h +++ b/swagger/sdrangel/code/qt5/client/SWGLoRaModSettings.h @@ -22,6 +22,7 @@ #include +#include #include #include "SWGObject.h" @@ -54,12 +55,78 @@ public: qint32 getDeBits(); void setDeBits(qint32 de_bits); - QString* getMessage(); - void setMessage(QString* message); + qint32 getPreambleChirps(); + void setPreambleChirps(qint32 preamble_chirps); + + qint32 getQuietMillis(); + void setQuietMillis(qint32 quiet_millis); + + qint32 getSyncWord(); + void setSyncWord(qint32 sync_word); qint32 getChannelMute(); void setChannelMute(qint32 channel_mute); + qint32 getCodingScheme(); + void setCodingScheme(qint32 coding_scheme); + + qint32 getNbParityBits(); + void setNbParityBits(qint32 nb_parity_bits); + + qint32 getHasCrc(); + void setHasCrc(qint32 has_crc); + + qint32 getHasHeader(); + void setHasHeader(qint32 has_header); + + QString* getMyCall(); + void setMyCall(QString* my_call); + + QString* getUrCall(); + void setUrCall(QString* ur_call); + + QString* getMyLoc(); + void setMyLoc(QString* my_loc); + + QString* getMyRpt(); + void setMyRpt(QString* my_rpt); + + qint32 getMessageType(); + void setMessageType(qint32 message_type); + + QString* getBeaconMessage(); + void setBeaconMessage(QString* beacon_message); + + QString* getCqMessage(); + void setCqMessage(QString* cq_message); + + QString* getReplyMessage(); + void setReplyMessage(QString* reply_message); + + QString* getReportMessage(); + void setReportMessage(QString* report_message); + + QString* getReplyReportMessage(); + void setReplyReportMessage(QString* reply_report_message); + + QString* getRrrMessage(); + void setRrrMessage(QString* rrr_message); + + QString* getMessage73(); + void setMessage73(QString* message73); + + QString* getQsoTextMessage(); + void setQsoTextMessage(QString* qso_text_message); + + QString* getTextMessage(); + void setTextMessage(QString* text_message); + + QList* getBytesMessage(); + void setBytesMessage(QList* bytes_message); + + qint32 getMessageRepeat(); + void setMessageRepeat(qint32 message_repeat); + qint32 getRgbColor(); void setRgbColor(qint32 rgb_color); @@ -100,12 +167,78 @@ private: qint32 de_bits; bool m_de_bits_isSet; - QString* message; - bool m_message_isSet; + qint32 preamble_chirps; + bool m_preamble_chirps_isSet; + + qint32 quiet_millis; + bool m_quiet_millis_isSet; + + qint32 sync_word; + bool m_sync_word_isSet; qint32 channel_mute; bool m_channel_mute_isSet; + qint32 coding_scheme; + bool m_coding_scheme_isSet; + + qint32 nb_parity_bits; + bool m_nb_parity_bits_isSet; + + qint32 has_crc; + bool m_has_crc_isSet; + + qint32 has_header; + bool m_has_header_isSet; + + QString* my_call; + bool m_my_call_isSet; + + QString* ur_call; + bool m_ur_call_isSet; + + QString* my_loc; + bool m_my_loc_isSet; + + QString* my_rpt; + bool m_my_rpt_isSet; + + qint32 message_type; + bool m_message_type_isSet; + + QString* beacon_message; + bool m_beacon_message_isSet; + + QString* cq_message; + bool m_cq_message_isSet; + + QString* reply_message; + bool m_reply_message_isSet; + + QString* report_message; + bool m_report_message_isSet; + + QString* reply_report_message; + bool m_reply_report_message_isSet; + + QString* rrr_message; + bool m_rrr_message_isSet; + + QString* message73; + bool m_message73_isSet; + + QString* qso_text_message; + bool m_qso_text_message_isSet; + + QString* text_message; + bool m_text_message_isSet; + + QList* bytes_message; + bool m_bytes_message_isSet; + + qint32 message_repeat; + bool m_message_repeat_isSet; + qint32 rgb_color; bool m_rgb_color_isSet;