1
0
mirror of https://github.com/f4exb/sdrangel.git synced 2026-02-11 04:07:50 -05:00

LoRa modulator: REST API (1)

This commit is contained in:
f4exb 2020-02-22 18:37:09 +01:00
parent 738f671255
commit 9aaa4756a2
17 changed files with 1568 additions and 57 deletions

View File

@ -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<unsigned short> 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<<settings.m_spreadFactor)*1000.0) / LoRaModSettings::bandwidths[settings.m_bandwidthIndex];
if (getMessageQueueToGUI())
{
MsgReportPayloadTime *rpt = MsgReportPayloadTime::create(
(symbols.size()*(1<<settings.m_spreadFactor)*1000.0) / LoRaModSettings::bandwidths[settings.m_bandwidthIndex]
);
MsgReportPayloadTime *rpt = MsgReportPayloadTime::create(m_currentPayloadTime);
getMessageQueueToGUI()->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<QString *> *bytesStr = response.getLoRaModSettings()->getBytesMessage();
settings.m_bytesMessage.clear();
for (QList<QString *>::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<QString *>);
QList<QString *> *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<<m_settings.m_spreadFactor) * 250.0) / LoRaModSettings::bandwidths[m_settings.m_bandwidthIndex];
float controlMs = (4*m_settings.m_preambleChirps + 8 + 9) * fourthsMs; // preamble + sync word + SFD
response.getLoRaModReport()->setPayloadTimeMs(m_currentPayloadTime);
response.getLoRaModReport()->setTotalTimeMs(m_currentPayloadTime + controlMs);
response.getLoRaModReport()->setSymbolTimeMs(4.0 * fourthsMs);
}
void LoRaMod::webapiReverseSendSettings(QList<QString>& channelSettingsKeys, const LoRaModSettings& settings, bool force)
@ -443,21 +685,107 @@ void LoRaMod::webapiReverseSendSettings(QList<QString>& 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<QString *>);
QList<QString *> *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);
}

View File

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

View File

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

View File

@ -79,6 +79,7 @@ private:
void displaySettings();
void displayStreamIndex();
void displayCurrentPayloadMessage();
void displayBinaryMessage();
void setBandwidths();
void leaveEvent(QEvent*);

View File

@ -46,8 +46,7 @@ struct LoRaModSettings
Message73,
MessageQSOText,
MessageText,
MessageBytes,
MessageTest
MessageBytes
};
int m_inputFrequencyOffset;

View File

@ -33,10 +33,10 @@
<file>webapi/doc/swagger/include/Interferometer.yaml</file>
<file>webapi/doc/swagger/include/LimeRFE.yaml</file>
<file>webapi/doc/swagger/include/LimeSdr.yaml</file>
<file>webapi/doc/swagger/include/LoRaMod.yaml</file>
<file>webapi/doc/swagger/include/KiwiSDR.yaml</file>
<file>webapi/doc/swagger/include/LocalInput.yaml</file>
<file>webapi/doc/swagger/include/LocalOutput.yaml</file>
<file>webapi/doc/swagger/include/LoRaMod.yaml</file>
<file>webapi/doc/swagger/include/NFMDemod.yaml</file>
<file>webapi/doc/swagger/include/NFMMod.yaml</file>
<file>webapi/doc/swagger/include/Perseus.yaml</file>

View File

@ -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:
</div>
<div id="generator">
<div class="content">
Generated 2020-02-08T20:41:49.295+01:00
Generated 2020-02-22T07:44:51.167+01:00
</div>
</div>
</div>

View File

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

View File

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

View File

@ -72,6 +72,7 @@ const QMap<QString, QString> 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<QString, QString> 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());

View File

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

View File

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

View File

@ -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:
</div>
<div id="generator">
<div class="content">
Generated 2020-02-08T20:41:49.295+01:00
Generated 2020-02-22T07:44:51.167+01:00
</div>
</div>
</div>

View File

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

View File

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

View File

@ -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<QString*>();
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<void*>*)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<QString*>*
SWGLoRaModSettings::getBytesMessage() {
return bytes_message;
}
void
SWGLoRaModSettings::setBytesMessage(QList<QString*>* 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;
}

View File

@ -22,6 +22,7 @@
#include <QJsonObject>
#include <QList>
#include <QString>
#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<QString*>* getBytesMessage();
void setBytesMessage(QList<QString*>* 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<QString*>* bytes_message;
bool m_bytes_message_isSet;
qint32 message_repeat;
bool m_message_repeat_isSet;
qint32 rgb_color;
bool m_rgb_color_isSet;