diff --git a/doc/img/IEEE_802_15_4_Mod_frame.png b/doc/img/IEEE_802_15_4_Mod_frame.png new file mode 100644 index 000000000..673889b9f Binary files /dev/null and b/doc/img/IEEE_802_15_4_Mod_frame.png differ diff --git a/doc/img/IEEE_802_15_4_Mod_plugin.png b/doc/img/IEEE_802_15_4_Mod_plugin.png index ffbe333b6..a380f06ad 100644 Binary files a/doc/img/IEEE_802_15_4_Mod_plugin.png and b/doc/img/IEEE_802_15_4_Mod_plugin.png differ diff --git a/doc/img/IEEE_802_15_4_Mod_plugin.xcf b/doc/img/IEEE_802_15_4_Mod_plugin.xcf new file mode 100644 index 000000000..b0dd0de73 Binary files /dev/null and b/doc/img/IEEE_802_15_4_Mod_plugin.xcf differ diff --git a/plugins/channeltx/mod802.15.4/ieee_802_15_4_mod.cpp b/plugins/channeltx/mod802.15.4/ieee_802_15_4_mod.cpp index d2555f89f..0b7830ff8 100644 --- a/plugins/channeltx/mod802.15.4/ieee_802_15_4_mod.cpp +++ b/plugins/channeltx/mod802.15.4/ieee_802_15_4_mod.cpp @@ -153,17 +153,41 @@ void IEEE_802_15_4_Mod::applySettings(const IEEE_802_15_4_ModSettings& settings, { qDebug() << "IEEE_802_15_4_Mod::applySettings:" << " m_inputFrequencyOffset: " << settings.m_inputFrequencyOffset + << " m_modulation: " << settings.m_modulation + << " m_bitRate: " << settings.m_bitRate + << " m_subGHzBand: " << settings.m_subGHzBand << " m_rfBandwidth: " << settings.m_rfBandwidth << " m_gain: " << settings.m_gain << " m_channelMute: " << settings.m_channelMute << " m_repeat: " << settings.m_repeat << " m_repeatDelay: " << settings.m_repeatDelay << " m_repeatCount: " << settings.m_repeatCount + << " m_rampUpBits: " << settings.m_rampUpBits + << " m_rampDownBits: " << settings.m_rampDownBits + << " m_rampRange: " << settings.m_rampRange + << " m_modulateWhileRamping: "<< settings.m_modulateWhileRamping + << " m_lpfTaps: " << settings.m_lpfTaps + << " m_bbNoise: " << settings.m_bbNoise + << " m_writeToFile: " << settings.m_writeToFile + << " m_spectrumRate: " << settings.m_spectrumRate + << " m_data: " << settings.m_data + << " m_rgbColor: " << settings.m_rgbColor + << " m_title: " << settings.m_title + << " m_streamIndex: " << settings.m_streamIndex << " m_useReverseAPI: " << settings.m_useReverseAPI << " m_reverseAPIAddress: " << settings.m_reverseAPIAddress << " m_reverseAPIAddress: " << settings.m_reverseAPIPort << " m_reverseAPIDeviceIndex: " << settings.m_reverseAPIDeviceIndex << " m_reverseAPIChannelIndex: " << settings.m_reverseAPIChannelIndex + << " m_scramble: " << settings.m_scramble + << " m_polynomial: " << settings.m_polynomial + << " m_pulseShaping: " << settings.m_pulseShaping + << " m_beta: " << settings.m_beta + << " m_symbolSpan: " << settings.m_symbolSpan + << " m_udpEnabled: " << settings.m_udpEnabled + << " m_udpBytesFormat: " << settings.m_udpBytesFormat + << " m_udpAddress: " << settings.m_udpAddress + << " m_udpPort: " << settings.m_udpPort << " force: " << force; QList reverseAPIKeys; @@ -172,6 +196,18 @@ void IEEE_802_15_4_Mod::applySettings(const IEEE_802_15_4_ModSettings& settings, reverseAPIKeys.append("inputFrequencyOffset"); } + if ((settings.m_modulation != m_settings.m_modulation) || force) { + reverseAPIKeys.append("modulation"); + } + + if ((settings.m_bitRate != m_settings.m_bitRate) || force) { + reverseAPIKeys.append("bitRate"); + } + + if ((settings.m_subGHzBand != m_settings.m_subGHzBand) || force) { + reverseAPIKeys.append("subGHzBand"); + } + if ((settings.m_rfBandwidth != m_settings.m_rfBandwidth) || force) { reverseAPIKeys.append("rfBandwidth"); } @@ -196,6 +232,94 @@ void IEEE_802_15_4_Mod::applySettings(const IEEE_802_15_4_ModSettings& settings, reverseAPIKeys.append("repeatCount"); } + if ((settings.m_rampUpBits != m_settings.m_rampUpBits) || force) { + reverseAPIKeys.append("rampUpBits"); + } + + if ((settings.m_rampDownBits != m_settings.m_rampDownBits) || force) { + reverseAPIKeys.append("rampDownBits"); + } + + if ((settings.m_rampRange != m_settings.m_rampRange) || force) { + reverseAPIKeys.append("rampRange"); + } + + if ((settings.m_modulateWhileRamping != m_settings.m_modulateWhileRamping) || force) { + reverseAPIKeys.append("modulateWhileRamping"); + } + + if ((settings.m_lpfTaps != m_settings.m_lpfTaps) || force) { + reverseAPIKeys.append("lpfTaps"); + } + + if ((settings.m_bbNoise != m_settings.m_bbNoise) || force) { + reverseAPIKeys.append("bbNoise"); + } + + if ((settings.m_writeToFile != m_settings.m_writeToFile) || force) { + reverseAPIKeys.append("writeToFile"); + } + + if ((settings.m_spectrumRate != m_settings.m_spectrumRate) || force) { + reverseAPIKeys.append("spectrumRate"); + } + + if ((settings.m_data != m_settings.m_data) || force) { + reverseAPIKeys.append("data"); + } + + if ((settings.m_rgbColor != m_settings.m_rgbColor) || force) { + reverseAPIKeys.append("rgbColor"); + } + + if ((settings.m_title != m_settings.m_title) || force) { + reverseAPIKeys.append("title"); + } + + if ((settings.m_streamIndex != m_settings.m_streamIndex) || force) { + reverseAPIKeys.append("streamIndex"); + } + + if ((settings.m_useReverseAPI != m_settings.m_useReverseAPI) || force) { + reverseAPIKeys.append("useReverseAPI"); + } + + if ((settings.m_reverseAPIAddress != m_settings.m_reverseAPIAddress) || force) { + reverseAPIKeys.append("reverseAPIAddress"); + } + + if ((settings.m_reverseAPIPort != m_settings.m_reverseAPIPort) || force) { + reverseAPIKeys.append("reverseAPIPort"); + } + + if ((settings.m_reverseAPIDeviceIndex != m_settings.m_reverseAPIDeviceIndex) || force) { + reverseAPIKeys.append("reverseAPIDeviceIndex"); + } + + if ((settings.m_reverseAPIChannelIndex != m_settings.m_reverseAPIChannelIndex) || force) { + reverseAPIKeys.append("reverseAPIChannelIndex"); + } + + if ((settings.m_scramble != m_settings.m_scramble) || force) { + reverseAPIKeys.append("scramble"); + } + + if ((settings.m_polynomial != m_settings.m_polynomial) || force) { + reverseAPIKeys.append("polynomial"); + } + + if ((settings.m_pulseShaping != m_settings.m_pulseShaping) || force) { + reverseAPIKeys.append("pulseShaping"); + } + + if ((settings.m_beta != m_settings.m_beta) || force) { + reverseAPIKeys.append("beta"); + } + + if ((settings.m_symbolSpan != m_settings.m_symbolSpan) || force) { + reverseAPIKeys.append("symbolSpan"); + } + if ((settings.m_udpEnabled != m_settings.m_udpEnabled) || force) { reverseAPIKeys.append("udpEnabled"); } @@ -312,8 +436,14 @@ void IEEE_802_15_4_Mod::webapiUpdateChannelSettings( if (channelSettingsKeys.contains("inputFrequencyOffset")) { settings.m_inputFrequencyOffset = response.getIeee802154ModSettings()->getInputFrequencyOffset(); } - if (channelSettingsKeys.contains("phy")) { - settings.setPHY(*response.getIeee802154ModSettings()->getPhy()); + if (channelSettingsKeys.contains("modulation")) { + settings.m_modulation = (IEEE_802_15_4_ModSettings::Modulation) response.getIeee802154ModSettings()->getModulation(); + } + if (channelSettingsKeys.contains("bitRate")) { + settings.m_bitRate = response.getIeee802154ModSettings()->getBitRate(); + } + if (channelSettingsKeys.contains("subGHzBand")) { + settings.m_subGHzBand = response.getIeee802154ModSettings()->getSubGHzBand() != 0; } if (channelSettingsKeys.contains("rfBandwidth")) { settings.m_rfBandwidth = response.getIeee802154ModSettings()->getRfBandwidth(); @@ -333,17 +463,32 @@ void IEEE_802_15_4_Mod::webapiUpdateChannelSettings( if (channelSettingsKeys.contains("repeatCount")) { settings.m_repeatCount = response.getIeee802154ModSettings()->getRepeatCount(); } - if (channelSettingsKeys.contains("udpEnabled")) { - settings.m_udpEnabled = response.getIeee802154ModSettings()->getUdpEnabled() != 0; + if (channelSettingsKeys.contains("rampUpBits")) { + settings.m_rampUpBits = response.getIeee802154ModSettings()->getRampUpBits(); } - if (channelSettingsKeys.contains("udpBytesFormat")) { - settings.m_udpBytesFormat = response.getIeee802154ModSettings()->getMUdpBytesFormat() != 0; + if (channelSettingsKeys.contains("rampDownBits")) { + settings.m_rampDownBits = response.getIeee802154ModSettings()->getRampDownBits(); } - if (channelSettingsKeys.contains("udpAddress")) { - settings.m_udpAddress = *response.getIeee802154ModSettings()->getUdpAddress(); + if (channelSettingsKeys.contains("rampRange")) { + settings.m_rampRange = response.getIeee802154ModSettings()->getRampRange(); } - if (channelSettingsKeys.contains("udpPort")) { - settings.m_udpPort = response.getIeee802154ModSettings()->getUdpPort(); + if (channelSettingsKeys.contains("modulateWhileRamping")) { + settings.m_modulateWhileRamping = response.getIeee802154ModSettings()->getModulateWhileRamping() != 0; + } + if (channelSettingsKeys.contains("lpfTaps")) { + settings.m_lpfTaps = response.getIeee802154ModSettings()->getLpfTaps(); + } + if (channelSettingsKeys.contains("bbNoise")) { + settings.m_bbNoise = response.getIeee802154ModSettings()->getBbNoise() != 0; + } + if (channelSettingsKeys.contains("writeToFile")) { + settings.m_writeToFile = response.getIeee802154ModSettings()->getWriteToFile() != 0; + } + if (channelSettingsKeys.contains("spectrumRate")) { + settings.m_spectrumRate = response.getIeee802154ModSettings()->getSpectrumRate(); + } + if (channelSettingsKeys.contains("data")) { + settings.m_data = *response.getIeee802154ModSettings()->getData(); } if (channelSettingsKeys.contains("rgbColor")) { settings.m_rgbColor = response.getIeee802154ModSettings()->getRgbColor(); @@ -369,6 +514,33 @@ void IEEE_802_15_4_Mod::webapiUpdateChannelSettings( if (channelSettingsKeys.contains("reverseAPIChannelIndex")) { settings.m_reverseAPIChannelIndex = response.getIeee802154ModSettings()->getReverseApiChannelIndex(); } + if (channelSettingsKeys.contains("scramble")) { + settings.m_scramble = response.getIeee802154ModSettings()->getScramble() != 0; + } + if (channelSettingsKeys.contains("polynomial")) { + settings.m_polynomial = response.getIeee802154ModSettings()->getPolynomial(); + } + if (channelSettingsKeys.contains("pulseShaping")) { + settings.m_pulseShaping = (IEEE_802_15_4_ModSettings::PulseShaping) response.getIeee802154ModSettings()->getPulseShaping(); + } + if (channelSettingsKeys.contains("beta")) { + settings.m_beta = response.getIeee802154ModSettings()->getBeta(); + } + if (channelSettingsKeys.contains("symbolSpan")) { + settings.m_symbolSpan = response.getIeee802154ModSettings()->getSymbolSpan(); + } + if (channelSettingsKeys.contains("udpEnabled")) { + settings.m_udpEnabled = response.getIeee802154ModSettings()->getUdpEnabled() != 0; + } + if (channelSettingsKeys.contains("udpBytesFormat")) { + settings.m_udpBytesFormat = response.getIeee802154ModSettings()->getUdpBytesFormat() != 0; + } + if (channelSettingsKeys.contains("udpAddress")) { + settings.m_udpAddress = *response.getIeee802154ModSettings()->getUdpAddress(); + } + if (channelSettingsKeys.contains("udpPort")) { + settings.m_udpPort = response.getIeee802154ModSettings()->getUdpPort(); + } } int IEEE_802_15_4_Mod::webapiReportGet( @@ -391,14 +563,19 @@ int IEEE_802_15_4_Mod::webapiActionsPost( if (swgIEEE_802_15_4_ModActions) { - if (channelActionsKeys.contains("tx")) + if (channelActionsKeys.contains("tx") && (swgIEEE_802_15_4_ModActions->getTx() != 0)) { - SWGSDRangel::SWGIEEE_802_15_4_ModActions_tx* tx = swgIEEE_802_15_4_ModActions->getTx(); - QString *dataP = tx->getData(); + QString *dataP; + + if (channelActionsKeys.contains("data")) { + dataP = swgIEEE_802_15_4_ModActions->getData(); + } else { + dataP = &m_settings.m_data; + } + if (dataP != nullptr) { QString data(*dataP); - IEEE_802_15_4_Mod::MsgTxHexString *msg = IEEE_802_15_4_Mod::MsgTxHexString::create(data); m_basebandSource->getInputMessageQueue()->push(msg); return 202; @@ -425,17 +602,24 @@ int IEEE_802_15_4_Mod::webapiActionsPost( void IEEE_802_15_4_Mod::webapiFormatChannelSettings(SWGSDRangel::SWGChannelSettings& response, const IEEE_802_15_4_ModSettings& settings) { response.getIeee802154ModSettings()->setInputFrequencyOffset(settings.m_inputFrequencyOffset); - response.getIeee802154ModSettings()->setPhy(new QString(settings.getPHY())); + response.getIeee802154ModSettings()->setModulation((int) settings.m_modulation); + response.getIeee802154ModSettings()->setBitRate(settings.m_bitRate); + response.getIeee802154ModSettings()->setSubGHzBand(settings.m_subGHzBand ? 1 : 0); response.getIeee802154ModSettings()->setRfBandwidth(settings.m_rfBandwidth); response.getIeee802154ModSettings()->setGain(settings.m_gain); response.getIeee802154ModSettings()->setChannelMute(settings.m_channelMute ? 1 : 0); response.getIeee802154ModSettings()->setRepeat(settings.m_repeat ? 1 : 0); response.getIeee802154ModSettings()->setRepeatDelay(settings.m_repeatDelay); response.getIeee802154ModSettings()->setRepeatCount(settings.m_repeatCount); - response.getIeee802154ModSettings()->setUdpEnabled(settings.m_udpEnabled ? 1 : 0); - response.getIeee802154ModSettings()->setMUdpBytesFormat(settings.m_udpBytesFormat ? 1 : 0); - response.getIeee802154ModSettings()->setUdpAddress(new QString(settings.m_udpAddress)); - response.getIeee802154ModSettings()->setUdpPort(settings.m_udpPort); + response.getIeee802154ModSettings()->setRampUpBits(settings.m_rampUpBits); + response.getIeee802154ModSettings()->setRampDownBits(settings.m_rampDownBits); + response.getIeee802154ModSettings()->setRampRange(settings.m_rampRange); + response.getIeee802154ModSettings()->setModulateWhileRamping(settings.m_modulateWhileRamping ? 1 : 0); + response.getIeee802154ModSettings()->setLpfTaps(settings.m_lpfTaps); + response.getIeee802154ModSettings()->setBbNoise(settings.m_bbNoise ? 1 : 0); + response.getIeee802154ModSettings()->setWriteToFile(settings.m_writeToFile ? 1 : 0); + response.getIeee802154ModSettings()->setSpectrumRate(settings.m_spectrumRate); + response.getIeee802154ModSettings()->setData(new QString(settings.m_data)); response.getIeee802154ModSettings()->setRgbColor(settings.m_rgbColor); if (response.getIeee802154ModSettings()->getTitle()) { @@ -444,6 +628,7 @@ void IEEE_802_15_4_Mod::webapiFormatChannelSettings(SWGSDRangel::SWGChannelSetti response.getIeee802154ModSettings()->setTitle(new QString(settings.m_title)); } + response.getIeee802154ModSettings()->setStreamIndex(settings.m_streamIndex); response.getIeee802154ModSettings()->setUseReverseApi(settings.m_useReverseAPI ? 1 : 0); if (response.getIeee802154ModSettings()->getReverseApiAddress()) { @@ -455,6 +640,21 @@ void IEEE_802_15_4_Mod::webapiFormatChannelSettings(SWGSDRangel::SWGChannelSetti response.getIeee802154ModSettings()->setReverseApiPort(settings.m_reverseAPIPort); response.getIeee802154ModSettings()->setReverseApiDeviceIndex(settings.m_reverseAPIDeviceIndex); response.getIeee802154ModSettings()->setReverseApiChannelIndex(settings.m_reverseAPIChannelIndex); + response.getIeee802154ModSettings()->setScramble(settings.m_scramble); + response.getIeee802154ModSettings()->setPolynomial(settings.m_polynomial); + response.getIeee802154ModSettings()->setPulseShaping(settings.m_pulseShaping ? 1 : 0); + response.getIeee802154ModSettings()->setBeta(settings.m_beta); + response.getIeee802154ModSettings()->setSymbolSpan(settings.m_symbolSpan); + response.getIeee802154ModSettings()->setUdpEnabled(settings.m_udpEnabled ? 1 : 0); + response.getIeee802154ModSettings()->setUdpBytesFormat(settings.m_udpBytesFormat ? 1 : 0); + + if (response.getIeee802154ModSettings()->getUdpAddress()) { + *response.getIeee802154ModSettings()->getUdpAddress() = settings.m_udpAddress; + } else { + response.getIeee802154ModSettings()->setUdpAddress(new QString(settings.m_udpAddress)); + } + + response.getIeee802154ModSettings()->setUdpPort(settings.m_udpPort); } void IEEE_802_15_4_Mod::webapiFormatChannelReport(SWGSDRangel::SWGChannelReport& response) @@ -529,6 +729,15 @@ void IEEE_802_15_4_Mod::webapiFormatChannelSettings( if (channelSettingsKeys.contains("inputFrequencyOffset") || force) { swgIEEE_802_15_4_ModSettings->setInputFrequencyOffset(settings.m_inputFrequencyOffset); } + if (channelSettingsKeys.contains("modulation") || force) { + swgIEEE_802_15_4_ModSettings->setModulation((int) settings.m_modulation); + } + if (channelSettingsKeys.contains("bitRate") || force) { + swgIEEE_802_15_4_ModSettings->setBitRate(settings.m_bitRate); + } + if (channelSettingsKeys.contains("subGHzBand") || force) { + swgIEEE_802_15_4_ModSettings->setSubGHzBand(settings.m_subGHzBand ? 1 : 0); + } if (channelSettingsKeys.contains("rfBandwidth") || force) { swgIEEE_802_15_4_ModSettings->setRfBandwidth(settings.m_rfBandwidth); } @@ -547,17 +756,32 @@ void IEEE_802_15_4_Mod::webapiFormatChannelSettings( if (channelSettingsKeys.contains("repeatCount") || force) { swgIEEE_802_15_4_ModSettings->setRepeatCount(settings.m_repeatCount); } - if (channelSettingsKeys.contains("udpEnabled") || force) { - swgIEEE_802_15_4_ModSettings->setUdpEnabled(settings.m_udpEnabled ? 1 : 0); + if (channelSettingsKeys.contains("rampUpBits") || force) { + swgIEEE_802_15_4_ModSettings->setRampUpBits(settings.m_rampUpBits); } - if (channelSettingsKeys.contains("udpBytesFormat") || force) { - swgIEEE_802_15_4_ModSettings->setMUdpBytesFormat(settings.m_udpBytesFormat ? 1 : 0); + if (channelSettingsKeys.contains("rampDownBits") || force) { + swgIEEE_802_15_4_ModSettings->setRampDownBits(settings.m_rampDownBits); } - if (channelSettingsKeys.contains("udpAddress") || force) { - swgIEEE_802_15_4_ModSettings->setUdpAddress(new QString(settings.m_udpAddress)); + if (channelSettingsKeys.contains("rampRange") || force) { + swgIEEE_802_15_4_ModSettings->setRampRange(settings.m_rampRange); } - if (channelSettingsKeys.contains("udpPort") || force) { - swgIEEE_802_15_4_ModSettings->setUdpPort(settings.m_udpPort); + if (channelSettingsKeys.contains("rampRange") || force) { + swgIEEE_802_15_4_ModSettings->setModulateWhileRamping(settings.m_modulateWhileRamping ? 1 : 0); + } + if (channelSettingsKeys.contains("lpfTaps") || force) { + swgIEEE_802_15_4_ModSettings->setLpfTaps(settings.m_lpfTaps); + } + if (channelSettingsKeys.contains("bbNoise") || force) { + swgIEEE_802_15_4_ModSettings->setBbNoise(settings.m_bbNoise ? 1 : 0); + } + if (channelSettingsKeys.contains("writeToFile") || force) { + swgIEEE_802_15_4_ModSettings->setWriteToFile(settings.m_writeToFile ? 1 : 0); + } + if (channelSettingsKeys.contains("spectrumRate") || force) { + swgIEEE_802_15_4_ModSettings->setSpectrumRate(settings.m_spectrumRate); + } + if (channelSettingsKeys.contains("data") || force) { + swgIEEE_802_15_4_ModSettings->setData(new QString(settings.m_data)); } if (channelSettingsKeys.contains("rgbColor") || force) { swgIEEE_802_15_4_ModSettings->setRgbColor(settings.m_rgbColor); @@ -568,6 +792,48 @@ void IEEE_802_15_4_Mod::webapiFormatChannelSettings( if (channelSettingsKeys.contains("streamIndex") || force) { swgIEEE_802_15_4_ModSettings->setStreamIndex(settings.m_streamIndex); } + if (channelSettingsKeys.contains("useReverseAPI") || force) { + swgIEEE_802_15_4_ModSettings->setUseReverseApi(settings.m_useReverseAPI ? 1 : 0); + } + if (channelSettingsKeys.contains("reverseAPIAddress") || force) { + swgIEEE_802_15_4_ModSettings->setReverseApiAddress(new QString(settings.m_reverseAPIAddress)); + } + if (channelSettingsKeys.contains("reverseAPIPort") || force) { + swgIEEE_802_15_4_ModSettings->setReverseApiPort(settings.m_reverseAPIPort); + } + if (channelSettingsKeys.contains("reverseAPIDeviceIndex") || force) { + swgIEEE_802_15_4_ModSettings->setReverseApiDeviceIndex(settings.m_reverseAPIDeviceIndex); + } + if (channelSettingsKeys.contains("reverseAPIChannelIndex") || force) { + swgIEEE_802_15_4_ModSettings->setReverseApiChannelIndex(settings.m_reverseAPIChannelIndex); + } + if (channelSettingsKeys.contains("scramble") || force) { + swgIEEE_802_15_4_ModSettings->setScramble(settings.m_scramble ? 1 : 0); + } + if (channelSettingsKeys.contains("polynomial") || force) { + swgIEEE_802_15_4_ModSettings->setPolynomial(settings.m_polynomial); + } + if (channelSettingsKeys.contains("pulseShaping") || force) { + swgIEEE_802_15_4_ModSettings->setPolynomial(settings.m_pulseShaping ? 1 : 0); + } + if (channelSettingsKeys.contains("beta") || force) { + swgIEEE_802_15_4_ModSettings->setBeta(settings.m_beta); + } + if (channelSettingsKeys.contains("symbolSpan") || force) { + swgIEEE_802_15_4_ModSettings->setBeta(settings.m_symbolSpan); + } + if (channelSettingsKeys.contains("udpEnabled") || force) { + swgIEEE_802_15_4_ModSettings->setUdpEnabled(settings.m_udpEnabled ? 1 : 0); + } + if (channelSettingsKeys.contains("udpBytesFormat") || force) { + swgIEEE_802_15_4_ModSettings->setUdpBytesFormat(settings.m_udpBytesFormat ? 1 : 0); + } + if (channelSettingsKeys.contains("udpAddress") || force) { + swgIEEE_802_15_4_ModSettings->setUdpAddress(new QString(settings.m_udpAddress)); + } + if (channelSettingsKeys.contains("udpPort") || force) { + swgIEEE_802_15_4_ModSettings->setUdpPort(settings.m_udpPort); + } } void IEEE_802_15_4_Mod::networkManagerFinished(QNetworkReply *reply) diff --git a/plugins/channeltx/mod802.15.4/ieee_802_15_4_modgui.cpp b/plugins/channeltx/mod802.15.4/ieee_802_15_4_modgui.cpp index 555fb19a1..140713ca1 100644 --- a/plugins/channeltx/mod802.15.4/ieee_802_15_4_modgui.cpp +++ b/plugins/channeltx/mod802.15.4/ieee_802_15_4_modgui.cpp @@ -21,6 +21,7 @@ #include #include #include +#include #include "device/deviceuiset.h" #include "plugin/pluginapi.h" @@ -110,6 +111,7 @@ bool IEEE_802_15_4_ModGUI::handleMessage(const Message& message) } else if (IEEE_802_15_4_Mod::MsgConfigureIEEE_802_15_4_Mod::match(message)) { + qDebug("IEEE_802_15_4_ModGUI::handleMessage: MsgConfigureIEEE_802_15_4_Mod"); const IEEE_802_15_4_Mod::MsgConfigureIEEE_802_15_4_Mod& cfg = (IEEE_802_15_4_Mod::MsgConfigureIEEE_802_15_4_Mod&) message; m_settings = cfg.getSettings(); blockApplySettings(true); @@ -147,12 +149,22 @@ void IEEE_802_15_4_ModGUI::handleSourceMessages() void IEEE_802_15_4_ModGUI::checkSampleRate() { int cr = m_settings.getChipRate(); + if ((m_basebandSampleRate % cr) != 0) - setWindowTitle(m_channelMarker.getTitle() + " - Baseband sample rate is not an integer multiple of chip rate"); + { + ui->chipRateText->setStyleSheet("QLabel { background:rgb(200,50,50); }"); + ui->chipRateText->setToolTip(QString("Baseband sample rate %1 S/s is not an integer multiple of chip rate %2 S/s").arg(m_basebandSampleRate).arg(cr)); + } else if ((m_basebandSampleRate / cr) <= 2) - setWindowTitle(m_channelMarker.getTitle() + " - Baseband sample rate is too low"); + { + ui->chipRateText->setStyleSheet("QLabel { background:rgb(200,50,50); }"); + ui->chipRateText->setToolTip(QString("Baseband sample rate %1 S/s is too low for chip rate %2 S/s").arg(m_basebandSampleRate).arg(cr)); + } else - setWindowTitle(m_channelMarker.getTitle()); + { + ui->chipRateText->setStyleSheet("QLabel { background:rgb(79,79,79); }"); + ui->chipRateText->setToolTip("Chip rate"); + } } void IEEE_802_15_4_ModGUI::on_deltaFrequency_changed(qint64 value) @@ -172,11 +184,12 @@ void IEEE_802_15_4_ModGUI::on_phy_currentIndexChanged(int value) if (m_doApplySettings) m_settings.setPHY(phy); - ui->rfBWText->setText(QString("%1M").arg(m_settings.m_rfBandwidth / 1000000.0, 0, 'f', 1)); + displayRFBandwidth(m_settings.m_rfBandwidth); ui->rfBW->setValue(m_settings.m_rfBandwidth / 1000.0); ui->glSpectrum->setCenterFrequency(0); ui->glSpectrum->setSampleRate(m_settings.m_spectrumRate); - checkSampleRate(); + displayChipRate(m_settings); + checkSampleRate(); applySettings(); // Remove custom PHY when deselected, as we no longer know how to set it @@ -187,7 +200,7 @@ void IEEE_802_15_4_ModGUI::on_phy_currentIndexChanged(int value) void IEEE_802_15_4_ModGUI::on_rfBW_valueChanged(int value) { float bw = value * 1000.0f; - ui->rfBWText->setText(QString("%1M").arg(value / 1000.0, 0, 'f', 1)); + displayRFBandwidth(bw); m_channelMarker.setBandwidth(bw); m_settings.m_rfBandwidth = bw; applySettings(); @@ -241,14 +254,22 @@ void IEEE_802_15_4_ModGUI::repeatSelect() void IEEE_802_15_4_ModGUI::txSettingsSelect() { - IEEE_802_15_4_ModTXSettingsDialog dialog(m_settings.m_rampUpBits, m_settings.m_rampDownBits, - m_settings.m_rampRange, m_settings.m_modulateWhileRamping, - m_settings.m_modulation, m_settings.m_bitRate, - m_settings.m_pulseShaping, m_settings.m_beta, m_settings.m_symbolSpan, - m_settings.m_scramble, m_settings.m_polynomial, - m_settings.m_lpfTaps, - m_settings.m_bbNoise, - m_settings.m_writeToFile); + IEEE_802_15_4_ModTXSettingsDialog dialog( + m_settings.m_rampUpBits, + m_settings.m_rampDownBits, + m_settings.m_rampRange, + m_settings.m_modulateWhileRamping, + m_settings.m_modulation, + m_settings.m_bitRate, + m_settings.m_pulseShaping, + m_settings.m_beta, + m_settings.m_symbolSpan, + m_settings.m_scramble, + m_settings.m_polynomial, + m_settings.m_lpfTaps, + m_settings.m_bbNoise, + m_settings.m_writeToFile + ); if (dialog.exec() == QDialog::Accepted) { m_settings.m_rampUpBits = dialog.m_rampUpBits; @@ -523,9 +544,11 @@ void IEEE_802_15_4_ModGUI::displaySettings() ui->glSpectrum->setCenterFrequency(0); ui->glSpectrum->setSampleRate(m_settings.m_spectrumRate); - ui->rfBWText->setText(QString("%1M").arg(m_settings.m_rfBandwidth / 1000000.0, 0, 'f', 1)); + displayRFBandwidth(m_settings.m_rfBandwidth); ui->rfBW->setValue(m_settings.m_rfBandwidth / 1000.0); + displayChipRate(m_settings); + ui->gainText->setText(QString("%1").arg((double)m_settings.m_gain, 0, 'f', 1)); ui->gain->setValue(m_settings.m_gain); @@ -541,6 +564,35 @@ void IEEE_802_15_4_ModGUI::displaySettings() blockApplySettings(false); } +void IEEE_802_15_4_ModGUI::displayRFBandwidth(int bandwidth) +{ + ui->rfBWText->setText(getDisplayValueWithMultiplier(bandwidth)); +} + +void IEEE_802_15_4_ModGUI::displayChipRate(const IEEE_802_15_4_ModSettings& settings) +{ + ui->chipRateText->setText(getDisplayValueWithMultiplier(settings.getChipRate())); +} + +QString IEEE_802_15_4_ModGUI::getDisplayValueWithMultiplier(int value) +{ + if (value < 1000) { + return QString("%1").arg(value); + } else if (value < 10000) { + return QString("%1k").arg(value / 1000.0, 0, 'f', 2); + } else if (value < 100000) { + return QString("%1k").arg(value / 1000.0, 0, 'f', 1); + } else if (value < 1000000) { + return QString("%1k").arg(value / 1000.0); + } else if (value < 10000000) { + return QString("%1M").arg(value / 1000000.0, 0, 'f', 2); + } else if (value < 100000000) { + return QString("%1M").arg(value / 1000000.0, 0, 'f', 1); + } else { + return QString("%1M").arg(value / 1000000.0); + } +} + void IEEE_802_15_4_ModGUI::displayStreamIndex() { if (m_deviceUISet->m_deviceMIMOEngine) { diff --git a/plugins/channeltx/mod802.15.4/ieee_802_15_4_modgui.h b/plugins/channeltx/mod802.15.4/ieee_802_15_4_modgui.h index 07ae39fea..4b24d2b94 100644 --- a/plugins/channeltx/mod802.15.4/ieee_802_15_4_modgui.h +++ b/plugins/channeltx/mod802.15.4/ieee_802_15_4_modgui.h @@ -84,6 +84,9 @@ private: void applySettings(bool force = false); void displaySettings(); void displayStreamIndex(); + void displayRFBandwidth(int bandwidth); + void displayChipRate(const IEEE_802_15_4_ModSettings& settings); + QString getDisplayValueWithMultiplier(int value); void leaveEvent(QEvent*); void enterEvent(QEvent*); diff --git a/plugins/channeltx/mod802.15.4/ieee_802_15_4_modgui.ui b/plugins/channeltx/mod802.15.4/ieee_802_15_4_modgui.ui index 6b20ad96b..9b09c4ecf 100644 --- a/plugins/channeltx/mod802.15.4/ieee_802_15_4_modgui.ui +++ b/plugins/channeltx/mod802.15.4/ieee_802_15_4_modgui.ui @@ -6,7 +6,7 @@ 0 0 - 363 + 605 937 @@ -42,13 +42,13 @@ 2 2 - 341 + 600 151 - 280 + 600 0 @@ -192,7 +192,7 @@ - 170 + 200 0 @@ -241,9 +241,25 @@ - - - Qt::Vertical + + + CR + + + + + + + + 45 + 0 + + + + 1000k + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter @@ -272,16 +288,16 @@ RF bandwidth - 300 + 30 10000 - 100 + 1 - 100 + 1 300 @@ -295,25 +311,18 @@ - 30 + 40 0 - 2.0M + 10.0M Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - Qt::Vertical - - - @@ -575,7 +584,7 @@ 0 190 - 351 + 600 141 @@ -585,6 +594,12 @@ 0 + + + 600 + 0 + + Transmitted Frames @@ -618,10 +633,16 @@ 0 340 - 351 + 600 284 + + + 600 + 0 + + Baseband Waveform @@ -667,10 +688,16 @@ 0 630 - 351 + 600 284 + + + 600 + 0 + + Baseband Spectrum diff --git a/plugins/channeltx/mod802.15.4/ieee_802_15_4_modsettings.cpp b/plugins/channeltx/mod802.15.4/ieee_802_15_4_modsettings.cpp index f8b5a4515..739a7a7c9 100644 --- a/plugins/channeltx/mod802.15.4/ieee_802_15_4_modsettings.cpp +++ b/plugins/channeltx/mod802.15.4/ieee_802_15_4_modsettings.cpp @@ -77,13 +77,15 @@ void IEEE_802_15_4_ModSettings::resetToDefaults() bool IEEE_802_15_4_ModSettings::setPHY(QString phy) { - int bitRate; + float bitRate; bool valid; // First part of phy string should give bitrate in kbps - bitRate = phy.split("k")[0].toInt(&valid) * 1000; - if (!valid) + bitRate = phy.split("k")[0].toFloat(&valid) * 1000.0f; + + if (!valid) { return false; + } if (phy.contains("BPSK")) { @@ -119,7 +121,13 @@ bool IEEE_802_15_4_ModSettings::setPHY(QString phy) QString IEEE_802_15_4_ModSettings::getPHY() const { - return QString("%1kbps %2").arg(m_bitRate/1000).arg(m_modulation == IEEE_802_15_4_ModSettings::BPSK ? "BPSK" : "O-QPSK"); + int decPos = 0; + + if (m_bitRate < 10000) { + decPos = 1; + } + + return QString("%1kbps %2").arg(m_bitRate / 1000.0, 0, 'f', decPos).arg(m_modulation == IEEE_802_15_4_ModSettings::BPSK ? "BPSK" : "O-QPSK"); } int IEEE_802_15_4_ModSettings::getChipRate() const @@ -136,6 +144,7 @@ int IEEE_802_15_4_ModSettings::getChipRate() const bitsPerSymbol = 4; chipsPerSymbol = m_subGHzBand ? 16 : 32; } + return m_bitRate * chipsPerSymbol / bitsPerSymbol; } diff --git a/plugins/channeltx/mod802.15.4/ieee_802_15_4_modsettings.h b/plugins/channeltx/mod802.15.4/ieee_802_15_4_modsettings.h index 077eb471f..f4e7e5fc0 100644 --- a/plugins/channeltx/mod802.15.4/ieee_802_15_4_modsettings.h +++ b/plugins/channeltx/mod802.15.4/ieee_802_15_4_modsettings.h @@ -27,10 +27,20 @@ class Serializable; struct IEEE_802_15_4_ModSettings { + enum Modulation { + BPSK, + OQPSK + }; + + enum PulseShaping { + RC, + SINE + }; + static const int infinitePackets = -1; qint64 m_inputFrequencyOffset; - enum Modulation {BPSK, OQPSK} m_modulation; + Modulation m_modulation; int m_bitRate; bool m_subGHzBand; Real m_rfBandwidth; @@ -59,7 +69,7 @@ struct IEEE_802_15_4_ModSettings uint16_t m_reverseAPIChannelIndex; bool m_scramble; int m_polynomial; - enum PulseShaping {RC, SINE} m_pulseShaping; + PulseShaping m_pulseShaping; float m_beta; int m_symbolSpan; bool m_udpEnabled; diff --git a/plugins/channeltx/mod802.15.4/readme.md b/plugins/channeltx/mod802.15.4/readme.md index d24845d15..35669defa 100644 --- a/plugins/channeltx/mod802.15.4/readme.md +++ b/plugins/channeltx/mod802.15.4/readme.md @@ -33,52 +33,79 @@ Channel Page | Channels | Frequencies (MHz) | Bit rate (kbps) | Chip rate (kcps 0 | 11-26 | 2405, 2410... 2480 | 250 | 2000 | O-QPSK | Sine | 8 2 | 0 | 868.3 | 100 | 400 | O-QPSK | Sine/RC | 2.4 2 | 1-10 | 906, 908... 926 | 250 | 1000 | O-QPSK | Sine | 4 -5 | 0-3 | 780, 782.. 786 | 250 | 1000 | O-QPSK | RC r=.8 | 4 +5 | 0-3 | 780, 782... 786 | 250 | 1000 | O-QPSK | RC r=.8 | 4 11 | 0-6 | 2363, 2368... 2393 | 250 | 2000 | O-QPSK | Sine | 8 11 | 7-13 | 2367, 2372... 2397 | 250 | 2000 | O-QPSK | Sine | 8 11 | 14 | 2395 | 250 | 2000 | O-QPSK | Sine | 8 -

5: RF Bandwidth

+

5: Chip rate

+ +This is the chip rate. It must be a multiple of the baseband sample rate and the baseband sample rate should be at least twice the chip rate. If one or both of these conditions are not met the background turns to red and the tooltip details the condition. + +

6: RF Bandwidth

This specifies the bandwidth of a LPF that is applied to the output signal to limit the RF bandwidth. -PHY | Occupied BW (99%) +PHY | Occupied BW (99%) ----------------------------|------------------- -20kbps BPSK | 400kHz -40kbps BPSK | 760kHz -100kbps O-QPSK | 330kHz -250kbps <1GHz O-QPSK (Sine) | 1.2MHz -250kbps <1GHz O-QPSK (RC) | 1.2MHz -250kbps >2GHz O-QPSK | 2.6MHz +20kbps BPSK | 400kHz +40kbps BPSK | 760kHz +100kbps O-QPSK | 330kHz +250kbps <1GHz O-QPSK (Sine) | 1.2MHz +250kbps <1GHz O-QPSK (RC) | 1.2MHz +250kbps >2GHz O-QPSK | 2.6MHz -

6: Gain

+

7: Gain

-Adjusts the gain in dB from -60 to 0dB. The gain should be set to ensure the level meter remains below 100%. If the baseband signal clips, this can lead to out-of-band spurious. +Adjusts the gain in dB from -60 to 0dB. The gain should be set to ensure the level meter remains below 100% (see 8). If the baseband signal clips, this can lead to out-of-band spurious. -

7: Level meter in %

+

8: Level meter in %

- top bar (beige): average value - bottom bar (brown): instantaneous peak value - tip vertical bar (bright red): peak hold value -

8: Data

+

9: UDP input

+ +Check to get data from UDP + +

10: UDP address and port

+ +This UDP data packets listening address and port + +

11: Get data in bytes format

+ +Check this if the data received is in bytes. When not checked data is expected in string format as blank separated hex bytes same as data below (12)) + +

12: Data

The frame of data to send as hex bytes. For example, to send a MAC ACK frame, enter "02 00 00". The MAC CRC should not be included, as this is calculated and appended automatically. -

9: Repeat

+In the diagram below this is the blue part without the "frame check sequence". Thus its maximum length is 125 bytes. + +![802.15.4 Modulator frame](../../../doc/img/IEEE_802_15_4_Mod_frame.png) + +

13: Repeat

Check this button to repeatedly transmit a frame. Right click to open the dialog to adjust the delay between retransmission and number of times the frame should be repeated. -

10: TX

+

14: TX

Transmits a frame containing the payload set in the data field.

API

-Full details of the API can be found in the Swagger documentation. Here is a quick example of how to transmit a frame from the command line: +Full details of the API can be found in the Swagger documentation. - curl -X POST "http://127.0.0.1:8091/sdrangel/deviceset/1/channel/0/actions" -d '{"channelType": "IEEE_802_15_4_Mod", "direction": 1, "IEEE_802_15_4_ModActions": { "tx": { "data": "02 00 00" }}}' +To transmit stored data just send a "tx" action: -Or to set the PHY to 20kbps BPSK: + curl -X POST "http://127.0.0.1:8091/sdrangel/deviceset/1/channel/0/actions" -d '{"channelType": "IEEE_802_15_4_Mod", "direction": 1, "IEEE_802_15_4_ModActions": { "tx": 1}} - curl -X PATCH "http://127.0.0.1:8091/sdrangel/deviceset/1/channel/0/settings" -d '{"channelType": "IEEE_802_15_4_Mod", "direction": 1, "IEEE_802_15_4_ModSettings": {"phy": "20kbps BPSK"}}' +To transmit a frame from the command line: + + curl -X POST "http://127.0.0.1:8091/sdrangel/deviceset/1/channel/0/actions" -d '{"channelType": "IEEE_802_15_4_Mod", "direction": 1, "IEEE_802_15_4_ModActions": { "tx": 1, "data": "02 00 00" }}' + +To set the PHY to 20kbps BPSK: + + curl -X PATCH "http://127.0.0.1:8091/sdrangel/deviceset/1/channel/0/settings" -d '{"channelType": "IEEE_802_15_4_Mod", "direction": 1, "IEEE_802_15_4_ModSettings": {"beta": 1, "bitRate": 20000, + "modulation': 0, "pulseShaping": 0, "rfBandwidth": 400000, "subGHzBand": 1 }}' diff --git a/sdrbase/resources/webapi/doc/html2/index.html b/sdrbase/resources/webapi/doc/html2/index.html index f2b0fb06e..56a821f39 100644 --- a/sdrbase/resources/webapi/doc/html2/index.html +++ b/sdrbase/resources/webapi/doc/html2/index.html @@ -6202,19 +6202,15 @@ margin-bottom: 20px; defs.IEEE_802_15_4_ModActions = { "properties" : { "tx" : { - "$ref" : "#/definitions/IEEE_802_15_4_ModActions_tx" + "type" : "integer", + "description" : "Initialize a transmission cycle\n * 0 - Do nothing\n * 1 - Start transmission cycle\n" + }, + "data" : { + "type" : "string", + "description" : "Hex coded bytes of data to transmit, excluding CRC (E.g for an ACK - 02 00 00). Preempts settings data.\n" } }, "description" : "IEEE_802_15_4_Mod" -}; - defs.IEEE_802_15_4_ModActions_tx = { - "properties" : { - "data" : { - "type" : "string", - "description" : "Hex coded bytes of data to transmit, excluding CRC (E.g for an ACK - 02 00 00)." - } - }, - "description" : "Transmit a frame\n" }; defs.IEEE_802_15_4_ModReport = { "properties" : { @@ -6235,9 +6231,16 @@ margin-bottom: 20px; "type" : "integer", "format" : "int64" }, - "phy" : { - "type" : "string", - "description" : "Physical layer. \"20kbps BPSK\", \"40kbps BPSK\", \"100kbps <1GHz O-QPSK\", \"250kbps <1GHz O-QPSK (Sine)\", \"250kbps <1GHz O-QPSK (RC)\", or \"250kbps >2GHz O-QPSK\"." + "modulation" : { + "type" : "integer", + "description" : "Modulation type\n * 0 - BPSK\n * 1 - OQPSK\n" + }, + "bitRate" : { + "type" : "integer" + }, + "subGHzBand" : { + "type" : "integer", + "description" : "Boolean value\n * 0 - Over 1 GHz standard\n * 1 - Under 1 GHz standard\n" }, "rfBandwidth" : { "type" : "number", @@ -6248,7 +6251,8 @@ margin-bottom: 20px; "format" : "float" }, "channelMute" : { - "type" : "integer" + "type" : "integer", + "description" : "* 0 - Effective transmission * 1 - Transmission is muted\n" }, "repeat" : { "type" : "integer", @@ -6263,21 +6267,36 @@ margin-bottom: 20px; "type" : "integer", "description" : "Number of times to repeat the frame (-1 for infinite)." }, - "udpEnabled" : { - "type" : "integer", - "description" : "Enable forwarding of frames via UDP" + "rampUpBits" : { + "type" : "integer" }, - "m_udpBytesFormat" : { - "type" : "integer", - "description" : "Payload format\n * 0 - Blank separated string representation of hex bytes i.e. 00 02 0a\n * 1 - Raw bytes\n" + "rampDownBits" : { + "type" : "integer" }, - "udpAddress" : { + "rampRange" : { + "type" : "integer" + }, + "modulateWhileRamping" : { + "type" : "integer", + "description" : "Boolean value\n * 0 - do not modulate in ramping phase\n * 1 - modulate in ramping phase\n" + }, + "lpfTaps" : { + "type" : "integer" + }, + "bbNoise" : { + "type" : "integer", + "description" : "Boolean value\n * 0 - Do not add gaussian noise in baseband\n * 1 - Add gaussian noise in baseband\n" + }, + "writeToFile" : { + "type" : "integer", + "description" : "Boolean value\n * 0 - Do not write frames to .csv file\n * 1 - Write frames to .csv file\n" + }, + "spectrumRate" : { + "type" : "integer" + }, + "data" : { "type" : "string", - "description" : "UDP address to listen for frames to transmit on" - }, - "udpPort" : { - "type" : "integer", - "description" : "UDP port to listen for frames to transmit on" + "description" : "Hex coded bytes of data to transmit, excluding CRC (E.g for an ACK - 02 00 00)" }, "rgbColor" : { "type" : "integer" @@ -6304,6 +6323,42 @@ margin-bottom: 20px; }, "reverseAPIChannelIndex" : { "type" : "integer" + }, + "scramble" : { + "type" : "integer", + "description" : "Boolean value\n * 0 - Do not scramble data\n * 1 - Scramble data\n" + }, + "polynomial" : { + "type" : "integer", + "description" : "Scrambling polynomial" + }, + "pulseShaping" : { + "type" : "integer", + "description" : "Pulse shaping filter\n * 0 - Root Cosime\n * 1 - Sine\n" + }, + "beta" : { + "type" : "number", + "format" : "float", + "description" : "Pulse shapint filter beta factor" + }, + "symbolSpan" : { + "type" : "integer" + }, + "udpEnabled" : { + "type" : "integer", + "description" : "Enable forwarding of frames via UDP" + }, + "udpBytesFormat" : { + "type" : "integer", + "description" : "Payload format\n * 0 - Blank separated string representation of hex bytes i.e. 00 02 0a\n * 1 - Raw bytes\n" + }, + "udpAddress" : { + "type" : "string", + "description" : "UDP address to listen for frames to transmit on" + }, + "udpPort" : { + "type" : "integer", + "description" : "UDP port to listen for frames to transmit on" } }, "description" : "IEEE_802_15_4_Mod" @@ -51290,7 +51345,7 @@ except ApiException as e:
- Generated 2021-11-16T00:55:07.690+01:00 + Generated 2021-11-20T13:05:46.792+01:00
diff --git a/sdrbase/resources/webapi/doc/swagger/include/IEEE_802_15_4_Mod.yaml b/sdrbase/resources/webapi/doc/swagger/include/IEEE_802_15_4_Mod.yaml index 87f6db7b9..845045eda 100644 --- a/sdrbase/resources/webapi/doc/swagger/include/IEEE_802_15_4_Mod.yaml +++ b/sdrbase/resources/webapi/doc/swagger/include/IEEE_802_15_4_Mod.yaml @@ -4,9 +4,20 @@ IEEE_802_15_4_ModSettings: inputFrequencyOffset: type: integer format: int64 - phy: - description: Physical layer. "20kbps BPSK", "40kbps BPSK", "100kbps <1GHz O-QPSK", "250kbps <1GHz O-QPSK (Sine)", "250kbps <1GHz O-QPSK (RC)", or "250kbps >2GHz O-QPSK". - type: string + modulation: + description: > + Modulation type + * 0 - BPSK + * 1 - OQPSK + type: integer + bitRate: + type: integer + subGHzBand: + type: integer + description: > + Boolean value + * 0 - Over 1 GHz standard + * 1 - Under 1 GHz standard rfBandwidth: type: number format: float @@ -15,6 +26,9 @@ IEEE_802_15_4_ModSettings: format: float channelMute: type: integer + description: > + * 0 - Effective transmission + * 1 - Transmission is muted repeat: description: Whether to repeated transmit the frame (1 for yes, 0 for no). type: integer @@ -25,21 +39,37 @@ IEEE_802_15_4_ModSettings: repeatCount: description: Number of times to repeat the frame (-1 for infinite). type: integer - udpEnabled: - description: Enable forwarding of frames via UDP + rampUpBits: type: integer - m_udpBytesFormat: + rampDownBits: + type: integer + rampRange: + type: integer + modulateWhileRamping: type: integer description: > - Payload format - * 0 - Blank separated string representation of hex bytes i.e. 00 02 0a - * 1 - Raw bytes - udpAddress: - description: UDP address to listen for frames to transmit on - type: string - udpPort: - description: UDP port to listen for frames to transmit on + Boolean value + * 0 - do not modulate in ramping phase + * 1 - modulate in ramping phase + lpfTaps: type: integer + bbNoise: + type: integer + description: > + Boolean value + * 0 - Do not add gaussian noise in baseband + * 1 - Add gaussian noise in baseband + writeToFile: + type: integer + description: > + Boolean value + * 0 - Do not write frames to .csv file + * 1 - Write frames to .csv file + spectrumRate: + type: integer + data: + type: string + description: Hex coded bytes of data to transmit, excluding CRC (E.g for an ACK - 02 00 00) rgbColor: type: integer title: @@ -58,6 +88,42 @@ IEEE_802_15_4_ModSettings: type: integer reverseAPIChannelIndex: type: integer + scramble: + type: integer + description: > + Boolean value + * 0 - Do not scramble data + * 1 - Scramble data + polynomial: + type: integer + description: Scrambling polynomial + pulseShaping: + type: integer + description: > + Pulse shaping filter + * 0 - Root Cosime + * 1 - Sine + beta: + type: number + format: float + description: Pulse shapint filter beta factor + symbolSpan: + type: integer + udpEnabled: + description: Enable forwarding of frames via UDP + type: integer + udpBytesFormat: + type: integer + description: > + Payload format + * 0 - Blank separated string representation of hex bytes i.e. 00 02 0a + * 1 - Raw bytes + udpAddress: + description: UDP address to listen for frames to transmit on + type: string + udpPort: + description: UDP port to listen for frames to transmit on + type: integer IEEE_802_15_4_ModReport: description: IEEE_802_15_4_Mod @@ -73,10 +139,12 @@ IEEE_802_15_4_ModActions: description: IEEE_802_15_4_Mod properties: tx: - type: object - properties: - data: - description: Hex coded bytes of data to transmit, excluding CRC (E.g for an ACK - 02 00 00). - type: string + type: integer description: > - Transmit a frame + Initialize a transmission cycle + * 0 - Do nothing + * 1 - Start transmission cycle + data: + type: string + description: > + Hex coded bytes of data to transmit, excluding CRC (E.g for an ACK - 02 00 00). Preempts settings data. diff --git a/swagger/sdrangel/api/swagger/include/IEEE_802_15_4_Mod.yaml b/swagger/sdrangel/api/swagger/include/IEEE_802_15_4_Mod.yaml index 87f6db7b9..845045eda 100644 --- a/swagger/sdrangel/api/swagger/include/IEEE_802_15_4_Mod.yaml +++ b/swagger/sdrangel/api/swagger/include/IEEE_802_15_4_Mod.yaml @@ -4,9 +4,20 @@ IEEE_802_15_4_ModSettings: inputFrequencyOffset: type: integer format: int64 - phy: - description: Physical layer. "20kbps BPSK", "40kbps BPSK", "100kbps <1GHz O-QPSK", "250kbps <1GHz O-QPSK (Sine)", "250kbps <1GHz O-QPSK (RC)", or "250kbps >2GHz O-QPSK". - type: string + modulation: + description: > + Modulation type + * 0 - BPSK + * 1 - OQPSK + type: integer + bitRate: + type: integer + subGHzBand: + type: integer + description: > + Boolean value + * 0 - Over 1 GHz standard + * 1 - Under 1 GHz standard rfBandwidth: type: number format: float @@ -15,6 +26,9 @@ IEEE_802_15_4_ModSettings: format: float channelMute: type: integer + description: > + * 0 - Effective transmission + * 1 - Transmission is muted repeat: description: Whether to repeated transmit the frame (1 for yes, 0 for no). type: integer @@ -25,21 +39,37 @@ IEEE_802_15_4_ModSettings: repeatCount: description: Number of times to repeat the frame (-1 for infinite). type: integer - udpEnabled: - description: Enable forwarding of frames via UDP + rampUpBits: type: integer - m_udpBytesFormat: + rampDownBits: + type: integer + rampRange: + type: integer + modulateWhileRamping: type: integer description: > - Payload format - * 0 - Blank separated string representation of hex bytes i.e. 00 02 0a - * 1 - Raw bytes - udpAddress: - description: UDP address to listen for frames to transmit on - type: string - udpPort: - description: UDP port to listen for frames to transmit on + Boolean value + * 0 - do not modulate in ramping phase + * 1 - modulate in ramping phase + lpfTaps: type: integer + bbNoise: + type: integer + description: > + Boolean value + * 0 - Do not add gaussian noise in baseband + * 1 - Add gaussian noise in baseband + writeToFile: + type: integer + description: > + Boolean value + * 0 - Do not write frames to .csv file + * 1 - Write frames to .csv file + spectrumRate: + type: integer + data: + type: string + description: Hex coded bytes of data to transmit, excluding CRC (E.g for an ACK - 02 00 00) rgbColor: type: integer title: @@ -58,6 +88,42 @@ IEEE_802_15_4_ModSettings: type: integer reverseAPIChannelIndex: type: integer + scramble: + type: integer + description: > + Boolean value + * 0 - Do not scramble data + * 1 - Scramble data + polynomial: + type: integer + description: Scrambling polynomial + pulseShaping: + type: integer + description: > + Pulse shaping filter + * 0 - Root Cosime + * 1 - Sine + beta: + type: number + format: float + description: Pulse shapint filter beta factor + symbolSpan: + type: integer + udpEnabled: + description: Enable forwarding of frames via UDP + type: integer + udpBytesFormat: + type: integer + description: > + Payload format + * 0 - Blank separated string representation of hex bytes i.e. 00 02 0a + * 1 - Raw bytes + udpAddress: + description: UDP address to listen for frames to transmit on + type: string + udpPort: + description: UDP port to listen for frames to transmit on + type: integer IEEE_802_15_4_ModReport: description: IEEE_802_15_4_Mod @@ -73,10 +139,12 @@ IEEE_802_15_4_ModActions: description: IEEE_802_15_4_Mod properties: tx: - type: object - properties: - data: - description: Hex coded bytes of data to transmit, excluding CRC (E.g for an ACK - 02 00 00). - type: string + type: integer description: > - Transmit a frame + Initialize a transmission cycle + * 0 - Do nothing + * 1 - Start transmission cycle + data: + type: string + description: > + Hex coded bytes of data to transmit, excluding CRC (E.g for an ACK - 02 00 00). Preempts settings data. diff --git a/swagger/sdrangel/code/html2/index.html b/swagger/sdrangel/code/html2/index.html index f2b0fb06e..56a821f39 100644 --- a/swagger/sdrangel/code/html2/index.html +++ b/swagger/sdrangel/code/html2/index.html @@ -6202,19 +6202,15 @@ margin-bottom: 20px; defs.IEEE_802_15_4_ModActions = { "properties" : { "tx" : { - "$ref" : "#/definitions/IEEE_802_15_4_ModActions_tx" + "type" : "integer", + "description" : "Initialize a transmission cycle\n * 0 - Do nothing\n * 1 - Start transmission cycle\n" + }, + "data" : { + "type" : "string", + "description" : "Hex coded bytes of data to transmit, excluding CRC (E.g for an ACK - 02 00 00). Preempts settings data.\n" } }, "description" : "IEEE_802_15_4_Mod" -}; - defs.IEEE_802_15_4_ModActions_tx = { - "properties" : { - "data" : { - "type" : "string", - "description" : "Hex coded bytes of data to transmit, excluding CRC (E.g for an ACK - 02 00 00)." - } - }, - "description" : "Transmit a frame\n" }; defs.IEEE_802_15_4_ModReport = { "properties" : { @@ -6235,9 +6231,16 @@ margin-bottom: 20px; "type" : "integer", "format" : "int64" }, - "phy" : { - "type" : "string", - "description" : "Physical layer. \"20kbps BPSK\", \"40kbps BPSK\", \"100kbps <1GHz O-QPSK\", \"250kbps <1GHz O-QPSK (Sine)\", \"250kbps <1GHz O-QPSK (RC)\", or \"250kbps >2GHz O-QPSK\"." + "modulation" : { + "type" : "integer", + "description" : "Modulation type\n * 0 - BPSK\n * 1 - OQPSK\n" + }, + "bitRate" : { + "type" : "integer" + }, + "subGHzBand" : { + "type" : "integer", + "description" : "Boolean value\n * 0 - Over 1 GHz standard\n * 1 - Under 1 GHz standard\n" }, "rfBandwidth" : { "type" : "number", @@ -6248,7 +6251,8 @@ margin-bottom: 20px; "format" : "float" }, "channelMute" : { - "type" : "integer" + "type" : "integer", + "description" : "* 0 - Effective transmission * 1 - Transmission is muted\n" }, "repeat" : { "type" : "integer", @@ -6263,21 +6267,36 @@ margin-bottom: 20px; "type" : "integer", "description" : "Number of times to repeat the frame (-1 for infinite)." }, - "udpEnabled" : { - "type" : "integer", - "description" : "Enable forwarding of frames via UDP" + "rampUpBits" : { + "type" : "integer" }, - "m_udpBytesFormat" : { - "type" : "integer", - "description" : "Payload format\n * 0 - Blank separated string representation of hex bytes i.e. 00 02 0a\n * 1 - Raw bytes\n" + "rampDownBits" : { + "type" : "integer" }, - "udpAddress" : { + "rampRange" : { + "type" : "integer" + }, + "modulateWhileRamping" : { + "type" : "integer", + "description" : "Boolean value\n * 0 - do not modulate in ramping phase\n * 1 - modulate in ramping phase\n" + }, + "lpfTaps" : { + "type" : "integer" + }, + "bbNoise" : { + "type" : "integer", + "description" : "Boolean value\n * 0 - Do not add gaussian noise in baseband\n * 1 - Add gaussian noise in baseband\n" + }, + "writeToFile" : { + "type" : "integer", + "description" : "Boolean value\n * 0 - Do not write frames to .csv file\n * 1 - Write frames to .csv file\n" + }, + "spectrumRate" : { + "type" : "integer" + }, + "data" : { "type" : "string", - "description" : "UDP address to listen for frames to transmit on" - }, - "udpPort" : { - "type" : "integer", - "description" : "UDP port to listen for frames to transmit on" + "description" : "Hex coded bytes of data to transmit, excluding CRC (E.g for an ACK - 02 00 00)" }, "rgbColor" : { "type" : "integer" @@ -6304,6 +6323,42 @@ margin-bottom: 20px; }, "reverseAPIChannelIndex" : { "type" : "integer" + }, + "scramble" : { + "type" : "integer", + "description" : "Boolean value\n * 0 - Do not scramble data\n * 1 - Scramble data\n" + }, + "polynomial" : { + "type" : "integer", + "description" : "Scrambling polynomial" + }, + "pulseShaping" : { + "type" : "integer", + "description" : "Pulse shaping filter\n * 0 - Root Cosime\n * 1 - Sine\n" + }, + "beta" : { + "type" : "number", + "format" : "float", + "description" : "Pulse shapint filter beta factor" + }, + "symbolSpan" : { + "type" : "integer" + }, + "udpEnabled" : { + "type" : "integer", + "description" : "Enable forwarding of frames via UDP" + }, + "udpBytesFormat" : { + "type" : "integer", + "description" : "Payload format\n * 0 - Blank separated string representation of hex bytes i.e. 00 02 0a\n * 1 - Raw bytes\n" + }, + "udpAddress" : { + "type" : "string", + "description" : "UDP address to listen for frames to transmit on" + }, + "udpPort" : { + "type" : "integer", + "description" : "UDP port to listen for frames to transmit on" } }, "description" : "IEEE_802_15_4_Mod" @@ -51290,7 +51345,7 @@ except ApiException as e:
- Generated 2021-11-16T00:55:07.690+01:00 + Generated 2021-11-20T13:05:46.792+01:00
diff --git a/swagger/sdrangel/code/qt5/client/SWGIEEE_802_15_4_ModActions.cpp b/swagger/sdrangel/code/qt5/client/SWGIEEE_802_15_4_ModActions.cpp index 3ae2f86aa..ed4b74b7a 100644 --- a/swagger/sdrangel/code/qt5/client/SWGIEEE_802_15_4_ModActions.cpp +++ b/swagger/sdrangel/code/qt5/client/SWGIEEE_802_15_4_ModActions.cpp @@ -28,8 +28,10 @@ SWGIEEE_802_15_4_ModActions::SWGIEEE_802_15_4_ModActions(QString* json) { } SWGIEEE_802_15_4_ModActions::SWGIEEE_802_15_4_ModActions() { - tx = nullptr; + tx = 0; m_tx_isSet = false; + data = nullptr; + m_data_isSet = false; } SWGIEEE_802_15_4_ModActions::~SWGIEEE_802_15_4_ModActions() { @@ -38,14 +40,17 @@ SWGIEEE_802_15_4_ModActions::~SWGIEEE_802_15_4_ModActions() { void SWGIEEE_802_15_4_ModActions::init() { - tx = new SWGIEEE_802_15_4_ModActions_tx(); + tx = 0; m_tx_isSet = false; + data = new QString(""); + m_data_isSet = false; } void SWGIEEE_802_15_4_ModActions::cleanup() { - if(tx != nullptr) { - delete tx; + + if(data != nullptr) { + delete data; } } @@ -60,7 +65,9 @@ SWGIEEE_802_15_4_ModActions::fromJson(QString &json) { void SWGIEEE_802_15_4_ModActions::fromJsonObject(QJsonObject &pJson) { - ::SWGSDRangel::setValue(&tx, pJson["tx"], "SWGIEEE_802_15_4_ModActions_tx", "SWGIEEE_802_15_4_ModActions_tx"); + ::SWGSDRangel::setValue(&tx, pJson["tx"], "qint32", ""); + + ::SWGSDRangel::setValue(&data, pJson["data"], "QString", "QString"); } @@ -78,29 +85,45 @@ SWGIEEE_802_15_4_ModActions::asJson () QJsonObject* SWGIEEE_802_15_4_ModActions::asJsonObject() { QJsonObject* obj = new QJsonObject(); - if((tx != nullptr) && (tx->isSet())){ - toJsonValue(QString("tx"), tx, obj, QString("SWGIEEE_802_15_4_ModActions_tx")); + if(m_tx_isSet){ + obj->insert("tx", QJsonValue(tx)); + } + if(data != nullptr && *data != QString("")){ + toJsonValue(QString("data"), data, obj, QString("QString")); } return obj; } -SWGIEEE_802_15_4_ModActions_tx* +qint32 SWGIEEE_802_15_4_ModActions::getTx() { return tx; } void -SWGIEEE_802_15_4_ModActions::setTx(SWGIEEE_802_15_4_ModActions_tx* tx) { +SWGIEEE_802_15_4_ModActions::setTx(qint32 tx) { this->tx = tx; this->m_tx_isSet = true; } +QString* +SWGIEEE_802_15_4_ModActions::getData() { + return data; +} +void +SWGIEEE_802_15_4_ModActions::setData(QString* data) { + this->data = data; + this->m_data_isSet = true; +} + bool SWGIEEE_802_15_4_ModActions::isSet(){ bool isObjectUpdated = false; do{ - if(tx && tx->isSet()){ + if(m_tx_isSet){ + isObjectUpdated = true; break; + } + if(data && *data != QString("")){ isObjectUpdated = true; break; } }while(false); diff --git a/swagger/sdrangel/code/qt5/client/SWGIEEE_802_15_4_ModActions.h b/swagger/sdrangel/code/qt5/client/SWGIEEE_802_15_4_ModActions.h index c88e556ac..d4ae4d3ed 100644 --- a/swagger/sdrangel/code/qt5/client/SWGIEEE_802_15_4_ModActions.h +++ b/swagger/sdrangel/code/qt5/client/SWGIEEE_802_15_4_ModActions.h @@ -22,7 +22,7 @@ #include -#include "SWGIEEE_802_15_4_ModActions_tx.h" +#include #include "SWGObject.h" #include "export.h" @@ -42,16 +42,22 @@ public: virtual void fromJsonObject(QJsonObject &json) override; virtual SWGIEEE_802_15_4_ModActions* fromJson(QString &jsonString) override; - SWGIEEE_802_15_4_ModActions_tx* getTx(); - void setTx(SWGIEEE_802_15_4_ModActions_tx* tx); + qint32 getTx(); + void setTx(qint32 tx); + + QString* getData(); + void setData(QString* data); virtual bool isSet() override; private: - SWGIEEE_802_15_4_ModActions_tx* tx; + qint32 tx; bool m_tx_isSet; + QString* data; + bool m_data_isSet; + }; } diff --git a/swagger/sdrangel/code/qt5/client/SWGIEEE_802_15_4_ModSettings.cpp b/swagger/sdrangel/code/qt5/client/SWGIEEE_802_15_4_ModSettings.cpp index 285349bec..337d9eac0 100644 --- a/swagger/sdrangel/code/qt5/client/SWGIEEE_802_15_4_ModSettings.cpp +++ b/swagger/sdrangel/code/qt5/client/SWGIEEE_802_15_4_ModSettings.cpp @@ -30,8 +30,12 @@ SWGIEEE_802_15_4_ModSettings::SWGIEEE_802_15_4_ModSettings(QString* json) { SWGIEEE_802_15_4_ModSettings::SWGIEEE_802_15_4_ModSettings() { input_frequency_offset = 0L; m_input_frequency_offset_isSet = false; - phy = nullptr; - m_phy_isSet = false; + modulation = 0; + m_modulation_isSet = false; + bit_rate = 0; + m_bit_rate_isSet = false; + sub_g_hz_band = 0; + m_sub_g_hz_band_isSet = false; rf_bandwidth = 0.0f; m_rf_bandwidth_isSet = false; gain = 0.0f; @@ -44,14 +48,24 @@ SWGIEEE_802_15_4_ModSettings::SWGIEEE_802_15_4_ModSettings() { m_repeat_delay_isSet = false; repeat_count = 0; m_repeat_count_isSet = false; - udp_enabled = 0; - m_udp_enabled_isSet = false; - m_udp_bytes_format = 0; - m_m_udp_bytes_format_isSet = false; - udp_address = nullptr; - m_udp_address_isSet = false; - udp_port = 0; - m_udp_port_isSet = false; + ramp_up_bits = 0; + m_ramp_up_bits_isSet = false; + ramp_down_bits = 0; + m_ramp_down_bits_isSet = false; + ramp_range = 0; + m_ramp_range_isSet = false; + modulate_while_ramping = 0; + m_modulate_while_ramping_isSet = false; + lpf_taps = 0; + m_lpf_taps_isSet = false; + bb_noise = 0; + m_bb_noise_isSet = false; + write_to_file = 0; + m_write_to_file_isSet = false; + spectrum_rate = 0; + m_spectrum_rate_isSet = false; + data = nullptr; + m_data_isSet = false; rgb_color = 0; m_rgb_color_isSet = false; title = nullptr; @@ -68,6 +82,24 @@ SWGIEEE_802_15_4_ModSettings::SWGIEEE_802_15_4_ModSettings() { m_reverse_api_device_index_isSet = false; reverse_api_channel_index = 0; m_reverse_api_channel_index_isSet = false; + scramble = 0; + m_scramble_isSet = false; + polynomial = 0; + m_polynomial_isSet = false; + pulse_shaping = 0; + m_pulse_shaping_isSet = false; + beta = 0.0f; + m_beta_isSet = false; + symbol_span = 0; + m_symbol_span_isSet = false; + udp_enabled = 0; + m_udp_enabled_isSet = false; + udp_bytes_format = 0; + m_udp_bytes_format_isSet = false; + udp_address = nullptr; + m_udp_address_isSet = false; + udp_port = 0; + m_udp_port_isSet = false; } SWGIEEE_802_15_4_ModSettings::~SWGIEEE_802_15_4_ModSettings() { @@ -78,8 +110,12 @@ void SWGIEEE_802_15_4_ModSettings::init() { input_frequency_offset = 0L; m_input_frequency_offset_isSet = false; - phy = new QString(""); - m_phy_isSet = false; + modulation = 0; + m_modulation_isSet = false; + bit_rate = 0; + m_bit_rate_isSet = false; + sub_g_hz_band = 0; + m_sub_g_hz_band_isSet = false; rf_bandwidth = 0.0f; m_rf_bandwidth_isSet = false; gain = 0.0f; @@ -92,14 +128,24 @@ SWGIEEE_802_15_4_ModSettings::init() { m_repeat_delay_isSet = false; repeat_count = 0; m_repeat_count_isSet = false; - udp_enabled = 0; - m_udp_enabled_isSet = false; - m_udp_bytes_format = 0; - m_m_udp_bytes_format_isSet = false; - udp_address = new QString(""); - m_udp_address_isSet = false; - udp_port = 0; - m_udp_port_isSet = false; + ramp_up_bits = 0; + m_ramp_up_bits_isSet = false; + ramp_down_bits = 0; + m_ramp_down_bits_isSet = false; + ramp_range = 0; + m_ramp_range_isSet = false; + modulate_while_ramping = 0; + m_modulate_while_ramping_isSet = false; + lpf_taps = 0; + m_lpf_taps_isSet = false; + bb_noise = 0; + m_bb_noise_isSet = false; + write_to_file = 0; + m_write_to_file_isSet = false; + spectrum_rate = 0; + m_spectrum_rate_isSet = false; + data = new QString(""); + m_data_isSet = false; rgb_color = 0; m_rgb_color_isSet = false; title = new QString(""); @@ -116,27 +162,50 @@ SWGIEEE_802_15_4_ModSettings::init() { m_reverse_api_device_index_isSet = false; reverse_api_channel_index = 0; m_reverse_api_channel_index_isSet = false; + scramble = 0; + m_scramble_isSet = false; + polynomial = 0; + m_polynomial_isSet = false; + pulse_shaping = 0; + m_pulse_shaping_isSet = false; + beta = 0.0f; + m_beta_isSet = false; + symbol_span = 0; + m_symbol_span_isSet = false; + udp_enabled = 0; + m_udp_enabled_isSet = false; + udp_bytes_format = 0; + m_udp_bytes_format_isSet = false; + udp_address = new QString(""); + m_udp_address_isSet = false; + udp_port = 0; + m_udp_port_isSet = false; } void SWGIEEE_802_15_4_ModSettings::cleanup() { - if(phy != nullptr) { - delete phy; + + + + + + + + + + + + + + + + + + if(data != nullptr) { + delete data; } - - - - - - - - if(udp_address != nullptr) { - delete udp_address; - } - - if(title != nullptr) { delete title; } @@ -148,6 +217,17 @@ SWGIEEE_802_15_4_ModSettings::cleanup() { + + + + + + + + if(udp_address != nullptr) { + delete udp_address; + } + } SWGIEEE_802_15_4_ModSettings* @@ -163,7 +243,11 @@ void SWGIEEE_802_15_4_ModSettings::fromJsonObject(QJsonObject &pJson) { ::SWGSDRangel::setValue(&input_frequency_offset, pJson["inputFrequencyOffset"], "qint64", ""); - ::SWGSDRangel::setValue(&phy, pJson["phy"], "QString", "QString"); + ::SWGSDRangel::setValue(&modulation, pJson["modulation"], "qint32", ""); + + ::SWGSDRangel::setValue(&bit_rate, pJson["bitRate"], "qint32", ""); + + ::SWGSDRangel::setValue(&sub_g_hz_band, pJson["subGHzBand"], "qint32", ""); ::SWGSDRangel::setValue(&rf_bandwidth, pJson["rfBandwidth"], "float", ""); @@ -177,13 +261,23 @@ SWGIEEE_802_15_4_ModSettings::fromJsonObject(QJsonObject &pJson) { ::SWGSDRangel::setValue(&repeat_count, pJson["repeatCount"], "qint32", ""); - ::SWGSDRangel::setValue(&udp_enabled, pJson["udpEnabled"], "qint32", ""); + ::SWGSDRangel::setValue(&ramp_up_bits, pJson["rampUpBits"], "qint32", ""); - ::SWGSDRangel::setValue(&m_udp_bytes_format, pJson["m_udpBytesFormat"], "qint32", ""); + ::SWGSDRangel::setValue(&ramp_down_bits, pJson["rampDownBits"], "qint32", ""); - ::SWGSDRangel::setValue(&udp_address, pJson["udpAddress"], "QString", "QString"); + ::SWGSDRangel::setValue(&ramp_range, pJson["rampRange"], "qint32", ""); - ::SWGSDRangel::setValue(&udp_port, pJson["udpPort"], "qint32", ""); + ::SWGSDRangel::setValue(&modulate_while_ramping, pJson["modulateWhileRamping"], "qint32", ""); + + ::SWGSDRangel::setValue(&lpf_taps, pJson["lpfTaps"], "qint32", ""); + + ::SWGSDRangel::setValue(&bb_noise, pJson["bbNoise"], "qint32", ""); + + ::SWGSDRangel::setValue(&write_to_file, pJson["writeToFile"], "qint32", ""); + + ::SWGSDRangel::setValue(&spectrum_rate, pJson["spectrumRate"], "qint32", ""); + + ::SWGSDRangel::setValue(&data, pJson["data"], "QString", "QString"); ::SWGSDRangel::setValue(&rgb_color, pJson["rgbColor"], "qint32", ""); @@ -201,6 +295,24 @@ SWGIEEE_802_15_4_ModSettings::fromJsonObject(QJsonObject &pJson) { ::SWGSDRangel::setValue(&reverse_api_channel_index, pJson["reverseAPIChannelIndex"], "qint32", ""); + ::SWGSDRangel::setValue(&scramble, pJson["scramble"], "qint32", ""); + + ::SWGSDRangel::setValue(&polynomial, pJson["polynomial"], "qint32", ""); + + ::SWGSDRangel::setValue(&pulse_shaping, pJson["pulseShaping"], "qint32", ""); + + ::SWGSDRangel::setValue(&beta, pJson["beta"], "float", ""); + + ::SWGSDRangel::setValue(&symbol_span, pJson["symbolSpan"], "qint32", ""); + + ::SWGSDRangel::setValue(&udp_enabled, pJson["udpEnabled"], "qint32", ""); + + ::SWGSDRangel::setValue(&udp_bytes_format, pJson["udpBytesFormat"], "qint32", ""); + + ::SWGSDRangel::setValue(&udp_address, pJson["udpAddress"], "QString", "QString"); + + ::SWGSDRangel::setValue(&udp_port, pJson["udpPort"], "qint32", ""); + } QString @@ -220,8 +332,14 @@ SWGIEEE_802_15_4_ModSettings::asJsonObject() { if(m_input_frequency_offset_isSet){ obj->insert("inputFrequencyOffset", QJsonValue(input_frequency_offset)); } - if(phy != nullptr && *phy != QString("")){ - toJsonValue(QString("phy"), phy, obj, QString("QString")); + if(m_modulation_isSet){ + obj->insert("modulation", QJsonValue(modulation)); + } + if(m_bit_rate_isSet){ + obj->insert("bitRate", QJsonValue(bit_rate)); + } + if(m_sub_g_hz_band_isSet){ + obj->insert("subGHzBand", QJsonValue(sub_g_hz_band)); } if(m_rf_bandwidth_isSet){ obj->insert("rfBandwidth", QJsonValue(rf_bandwidth)); @@ -241,17 +359,32 @@ SWGIEEE_802_15_4_ModSettings::asJsonObject() { if(m_repeat_count_isSet){ obj->insert("repeatCount", QJsonValue(repeat_count)); } - if(m_udp_enabled_isSet){ - obj->insert("udpEnabled", QJsonValue(udp_enabled)); + if(m_ramp_up_bits_isSet){ + obj->insert("rampUpBits", QJsonValue(ramp_up_bits)); } - if(m_m_udp_bytes_format_isSet){ - obj->insert("m_udpBytesFormat", QJsonValue(m_udp_bytes_format)); + if(m_ramp_down_bits_isSet){ + obj->insert("rampDownBits", QJsonValue(ramp_down_bits)); } - if(udp_address != nullptr && *udp_address != QString("")){ - toJsonValue(QString("udpAddress"), udp_address, obj, QString("QString")); + if(m_ramp_range_isSet){ + obj->insert("rampRange", QJsonValue(ramp_range)); } - if(m_udp_port_isSet){ - obj->insert("udpPort", QJsonValue(udp_port)); + if(m_modulate_while_ramping_isSet){ + obj->insert("modulateWhileRamping", QJsonValue(modulate_while_ramping)); + } + if(m_lpf_taps_isSet){ + obj->insert("lpfTaps", QJsonValue(lpf_taps)); + } + if(m_bb_noise_isSet){ + obj->insert("bbNoise", QJsonValue(bb_noise)); + } + if(m_write_to_file_isSet){ + obj->insert("writeToFile", QJsonValue(write_to_file)); + } + if(m_spectrum_rate_isSet){ + obj->insert("spectrumRate", QJsonValue(spectrum_rate)); + } + if(data != nullptr && *data != QString("")){ + toJsonValue(QString("data"), data, obj, QString("QString")); } if(m_rgb_color_isSet){ obj->insert("rgbColor", QJsonValue(rgb_color)); @@ -277,6 +410,33 @@ SWGIEEE_802_15_4_ModSettings::asJsonObject() { if(m_reverse_api_channel_index_isSet){ obj->insert("reverseAPIChannelIndex", QJsonValue(reverse_api_channel_index)); } + if(m_scramble_isSet){ + obj->insert("scramble", QJsonValue(scramble)); + } + if(m_polynomial_isSet){ + obj->insert("polynomial", QJsonValue(polynomial)); + } + if(m_pulse_shaping_isSet){ + obj->insert("pulseShaping", QJsonValue(pulse_shaping)); + } + if(m_beta_isSet){ + obj->insert("beta", QJsonValue(beta)); + } + if(m_symbol_span_isSet){ + obj->insert("symbolSpan", QJsonValue(symbol_span)); + } + if(m_udp_enabled_isSet){ + obj->insert("udpEnabled", QJsonValue(udp_enabled)); + } + if(m_udp_bytes_format_isSet){ + obj->insert("udpBytesFormat", QJsonValue(udp_bytes_format)); + } + if(udp_address != nullptr && *udp_address != QString("")){ + toJsonValue(QString("udpAddress"), udp_address, obj, QString("QString")); + } + if(m_udp_port_isSet){ + obj->insert("udpPort", QJsonValue(udp_port)); + } return obj; } @@ -291,14 +451,34 @@ SWGIEEE_802_15_4_ModSettings::setInputFrequencyOffset(qint64 input_frequency_off this->m_input_frequency_offset_isSet = true; } -QString* -SWGIEEE_802_15_4_ModSettings::getPhy() { - return phy; +qint32 +SWGIEEE_802_15_4_ModSettings::getModulation() { + return modulation; } void -SWGIEEE_802_15_4_ModSettings::setPhy(QString* phy) { - this->phy = phy; - this->m_phy_isSet = true; +SWGIEEE_802_15_4_ModSettings::setModulation(qint32 modulation) { + this->modulation = modulation; + this->m_modulation_isSet = true; +} + +qint32 +SWGIEEE_802_15_4_ModSettings::getBitRate() { + return bit_rate; +} +void +SWGIEEE_802_15_4_ModSettings::setBitRate(qint32 bit_rate) { + this->bit_rate = bit_rate; + this->m_bit_rate_isSet = true; +} + +qint32 +SWGIEEE_802_15_4_ModSettings::getSubGHzBand() { + return sub_g_hz_band; +} +void +SWGIEEE_802_15_4_ModSettings::setSubGHzBand(qint32 sub_g_hz_band) { + this->sub_g_hz_band = sub_g_hz_band; + this->m_sub_g_hz_band_isSet = true; } float @@ -362,43 +542,93 @@ SWGIEEE_802_15_4_ModSettings::setRepeatCount(qint32 repeat_count) { } qint32 -SWGIEEE_802_15_4_ModSettings::getUdpEnabled() { - return udp_enabled; +SWGIEEE_802_15_4_ModSettings::getRampUpBits() { + return ramp_up_bits; } void -SWGIEEE_802_15_4_ModSettings::setUdpEnabled(qint32 udp_enabled) { - this->udp_enabled = udp_enabled; - this->m_udp_enabled_isSet = true; +SWGIEEE_802_15_4_ModSettings::setRampUpBits(qint32 ramp_up_bits) { + this->ramp_up_bits = ramp_up_bits; + this->m_ramp_up_bits_isSet = true; } qint32 -SWGIEEE_802_15_4_ModSettings::getMUdpBytesFormat() { - return m_udp_bytes_format; +SWGIEEE_802_15_4_ModSettings::getRampDownBits() { + return ramp_down_bits; } void -SWGIEEE_802_15_4_ModSettings::setMUdpBytesFormat(qint32 m_udp_bytes_format) { - this->m_udp_bytes_format = m_udp_bytes_format; - this->m_m_udp_bytes_format_isSet = true; +SWGIEEE_802_15_4_ModSettings::setRampDownBits(qint32 ramp_down_bits) { + this->ramp_down_bits = ramp_down_bits; + this->m_ramp_down_bits_isSet = true; +} + +qint32 +SWGIEEE_802_15_4_ModSettings::getRampRange() { + return ramp_range; +} +void +SWGIEEE_802_15_4_ModSettings::setRampRange(qint32 ramp_range) { + this->ramp_range = ramp_range; + this->m_ramp_range_isSet = true; +} + +qint32 +SWGIEEE_802_15_4_ModSettings::getModulateWhileRamping() { + return modulate_while_ramping; +} +void +SWGIEEE_802_15_4_ModSettings::setModulateWhileRamping(qint32 modulate_while_ramping) { + this->modulate_while_ramping = modulate_while_ramping; + this->m_modulate_while_ramping_isSet = true; +} + +qint32 +SWGIEEE_802_15_4_ModSettings::getLpfTaps() { + return lpf_taps; +} +void +SWGIEEE_802_15_4_ModSettings::setLpfTaps(qint32 lpf_taps) { + this->lpf_taps = lpf_taps; + this->m_lpf_taps_isSet = true; +} + +qint32 +SWGIEEE_802_15_4_ModSettings::getBbNoise() { + return bb_noise; +} +void +SWGIEEE_802_15_4_ModSettings::setBbNoise(qint32 bb_noise) { + this->bb_noise = bb_noise; + this->m_bb_noise_isSet = true; +} + +qint32 +SWGIEEE_802_15_4_ModSettings::getWriteToFile() { + return write_to_file; +} +void +SWGIEEE_802_15_4_ModSettings::setWriteToFile(qint32 write_to_file) { + this->write_to_file = write_to_file; + this->m_write_to_file_isSet = true; +} + +qint32 +SWGIEEE_802_15_4_ModSettings::getSpectrumRate() { + return spectrum_rate; +} +void +SWGIEEE_802_15_4_ModSettings::setSpectrumRate(qint32 spectrum_rate) { + this->spectrum_rate = spectrum_rate; + this->m_spectrum_rate_isSet = true; } QString* -SWGIEEE_802_15_4_ModSettings::getUdpAddress() { - return udp_address; +SWGIEEE_802_15_4_ModSettings::getData() { + return data; } void -SWGIEEE_802_15_4_ModSettings::setUdpAddress(QString* udp_address) { - this->udp_address = udp_address; - this->m_udp_address_isSet = true; -} - -qint32 -SWGIEEE_802_15_4_ModSettings::getUdpPort() { - return udp_port; -} -void -SWGIEEE_802_15_4_ModSettings::setUdpPort(qint32 udp_port) { - this->udp_port = udp_port; - this->m_udp_port_isSet = true; +SWGIEEE_802_15_4_ModSettings::setData(QString* data) { + this->data = data; + this->m_data_isSet = true; } qint32 @@ -481,6 +711,96 @@ SWGIEEE_802_15_4_ModSettings::setReverseApiChannelIndex(qint32 reverse_api_chann this->m_reverse_api_channel_index_isSet = true; } +qint32 +SWGIEEE_802_15_4_ModSettings::getScramble() { + return scramble; +} +void +SWGIEEE_802_15_4_ModSettings::setScramble(qint32 scramble) { + this->scramble = scramble; + this->m_scramble_isSet = true; +} + +qint32 +SWGIEEE_802_15_4_ModSettings::getPolynomial() { + return polynomial; +} +void +SWGIEEE_802_15_4_ModSettings::setPolynomial(qint32 polynomial) { + this->polynomial = polynomial; + this->m_polynomial_isSet = true; +} + +qint32 +SWGIEEE_802_15_4_ModSettings::getPulseShaping() { + return pulse_shaping; +} +void +SWGIEEE_802_15_4_ModSettings::setPulseShaping(qint32 pulse_shaping) { + this->pulse_shaping = pulse_shaping; + this->m_pulse_shaping_isSet = true; +} + +float +SWGIEEE_802_15_4_ModSettings::getBeta() { + return beta; +} +void +SWGIEEE_802_15_4_ModSettings::setBeta(float beta) { + this->beta = beta; + this->m_beta_isSet = true; +} + +qint32 +SWGIEEE_802_15_4_ModSettings::getSymbolSpan() { + return symbol_span; +} +void +SWGIEEE_802_15_4_ModSettings::setSymbolSpan(qint32 symbol_span) { + this->symbol_span = symbol_span; + this->m_symbol_span_isSet = true; +} + +qint32 +SWGIEEE_802_15_4_ModSettings::getUdpEnabled() { + return udp_enabled; +} +void +SWGIEEE_802_15_4_ModSettings::setUdpEnabled(qint32 udp_enabled) { + this->udp_enabled = udp_enabled; + this->m_udp_enabled_isSet = true; +} + +qint32 +SWGIEEE_802_15_4_ModSettings::getUdpBytesFormat() { + return udp_bytes_format; +} +void +SWGIEEE_802_15_4_ModSettings::setUdpBytesFormat(qint32 udp_bytes_format) { + this->udp_bytes_format = udp_bytes_format; + this->m_udp_bytes_format_isSet = true; +} + +QString* +SWGIEEE_802_15_4_ModSettings::getUdpAddress() { + return udp_address; +} +void +SWGIEEE_802_15_4_ModSettings::setUdpAddress(QString* udp_address) { + this->udp_address = udp_address; + this->m_udp_address_isSet = true; +} + +qint32 +SWGIEEE_802_15_4_ModSettings::getUdpPort() { + return udp_port; +} +void +SWGIEEE_802_15_4_ModSettings::setUdpPort(qint32 udp_port) { + this->udp_port = udp_port; + this->m_udp_port_isSet = true; +} + bool SWGIEEE_802_15_4_ModSettings::isSet(){ @@ -489,7 +809,13 @@ SWGIEEE_802_15_4_ModSettings::isSet(){ if(m_input_frequency_offset_isSet){ isObjectUpdated = true; break; } - if(phy && *phy != QString("")){ + if(m_modulation_isSet){ + isObjectUpdated = true; break; + } + if(m_bit_rate_isSet){ + isObjectUpdated = true; break; + } + if(m_sub_g_hz_band_isSet){ isObjectUpdated = true; break; } if(m_rf_bandwidth_isSet){ @@ -510,16 +836,31 @@ SWGIEEE_802_15_4_ModSettings::isSet(){ if(m_repeat_count_isSet){ isObjectUpdated = true; break; } - if(m_udp_enabled_isSet){ + if(m_ramp_up_bits_isSet){ isObjectUpdated = true; break; } - if(m_m_udp_bytes_format_isSet){ + if(m_ramp_down_bits_isSet){ isObjectUpdated = true; break; } - if(udp_address && *udp_address != QString("")){ + if(m_ramp_range_isSet){ isObjectUpdated = true; break; } - if(m_udp_port_isSet){ + if(m_modulate_while_ramping_isSet){ + isObjectUpdated = true; break; + } + if(m_lpf_taps_isSet){ + isObjectUpdated = true; break; + } + if(m_bb_noise_isSet){ + isObjectUpdated = true; break; + } + if(m_write_to_file_isSet){ + isObjectUpdated = true; break; + } + if(m_spectrum_rate_isSet){ + isObjectUpdated = true; break; + } + if(data && *data != QString("")){ isObjectUpdated = true; break; } if(m_rgb_color_isSet){ @@ -546,6 +887,33 @@ SWGIEEE_802_15_4_ModSettings::isSet(){ if(m_reverse_api_channel_index_isSet){ isObjectUpdated = true; break; } + if(m_scramble_isSet){ + isObjectUpdated = true; break; + } + if(m_polynomial_isSet){ + isObjectUpdated = true; break; + } + if(m_pulse_shaping_isSet){ + isObjectUpdated = true; break; + } + if(m_beta_isSet){ + isObjectUpdated = true; break; + } + if(m_symbol_span_isSet){ + isObjectUpdated = true; break; + } + if(m_udp_enabled_isSet){ + isObjectUpdated = true; break; + } + if(m_udp_bytes_format_isSet){ + isObjectUpdated = true; break; + } + if(udp_address && *udp_address != QString("")){ + isObjectUpdated = true; break; + } + if(m_udp_port_isSet){ + isObjectUpdated = true; break; + } }while(false); return isObjectUpdated; } diff --git a/swagger/sdrangel/code/qt5/client/SWGIEEE_802_15_4_ModSettings.h b/swagger/sdrangel/code/qt5/client/SWGIEEE_802_15_4_ModSettings.h index a6e6a77bc..192068d0a 100644 --- a/swagger/sdrangel/code/qt5/client/SWGIEEE_802_15_4_ModSettings.h +++ b/swagger/sdrangel/code/qt5/client/SWGIEEE_802_15_4_ModSettings.h @@ -45,8 +45,14 @@ public: qint64 getInputFrequencyOffset(); void setInputFrequencyOffset(qint64 input_frequency_offset); - QString* getPhy(); - void setPhy(QString* phy); + qint32 getModulation(); + void setModulation(qint32 modulation); + + qint32 getBitRate(); + void setBitRate(qint32 bit_rate); + + qint32 getSubGHzBand(); + void setSubGHzBand(qint32 sub_g_hz_band); float getRfBandwidth(); void setRfBandwidth(float rf_bandwidth); @@ -66,17 +72,32 @@ public: qint32 getRepeatCount(); void setRepeatCount(qint32 repeat_count); - qint32 getUdpEnabled(); - void setUdpEnabled(qint32 udp_enabled); + qint32 getRampUpBits(); + void setRampUpBits(qint32 ramp_up_bits); - qint32 getMUdpBytesFormat(); - void setMUdpBytesFormat(qint32 m_udp_bytes_format); + qint32 getRampDownBits(); + void setRampDownBits(qint32 ramp_down_bits); - QString* getUdpAddress(); - void setUdpAddress(QString* udp_address); + qint32 getRampRange(); + void setRampRange(qint32 ramp_range); - qint32 getUdpPort(); - void setUdpPort(qint32 udp_port); + qint32 getModulateWhileRamping(); + void setModulateWhileRamping(qint32 modulate_while_ramping); + + qint32 getLpfTaps(); + void setLpfTaps(qint32 lpf_taps); + + qint32 getBbNoise(); + void setBbNoise(qint32 bb_noise); + + qint32 getWriteToFile(); + void setWriteToFile(qint32 write_to_file); + + qint32 getSpectrumRate(); + void setSpectrumRate(qint32 spectrum_rate); + + QString* getData(); + void setData(QString* data); qint32 getRgbColor(); void setRgbColor(qint32 rgb_color); @@ -102,6 +123,33 @@ public: qint32 getReverseApiChannelIndex(); void setReverseApiChannelIndex(qint32 reverse_api_channel_index); + qint32 getScramble(); + void setScramble(qint32 scramble); + + qint32 getPolynomial(); + void setPolynomial(qint32 polynomial); + + qint32 getPulseShaping(); + void setPulseShaping(qint32 pulse_shaping); + + float getBeta(); + void setBeta(float beta); + + qint32 getSymbolSpan(); + void setSymbolSpan(qint32 symbol_span); + + qint32 getUdpEnabled(); + void setUdpEnabled(qint32 udp_enabled); + + qint32 getUdpBytesFormat(); + void setUdpBytesFormat(qint32 udp_bytes_format); + + QString* getUdpAddress(); + void setUdpAddress(QString* udp_address); + + qint32 getUdpPort(); + void setUdpPort(qint32 udp_port); + virtual bool isSet() override; @@ -109,8 +157,14 @@ private: qint64 input_frequency_offset; bool m_input_frequency_offset_isSet; - QString* phy; - bool m_phy_isSet; + qint32 modulation; + bool m_modulation_isSet; + + qint32 bit_rate; + bool m_bit_rate_isSet; + + qint32 sub_g_hz_band; + bool m_sub_g_hz_band_isSet; float rf_bandwidth; bool m_rf_bandwidth_isSet; @@ -130,17 +184,32 @@ private: qint32 repeat_count; bool m_repeat_count_isSet; - qint32 udp_enabled; - bool m_udp_enabled_isSet; + qint32 ramp_up_bits; + bool m_ramp_up_bits_isSet; - qint32 m_udp_bytes_format; - bool m_m_udp_bytes_format_isSet; + qint32 ramp_down_bits; + bool m_ramp_down_bits_isSet; - QString* udp_address; - bool m_udp_address_isSet; + qint32 ramp_range; + bool m_ramp_range_isSet; - qint32 udp_port; - bool m_udp_port_isSet; + qint32 modulate_while_ramping; + bool m_modulate_while_ramping_isSet; + + qint32 lpf_taps; + bool m_lpf_taps_isSet; + + qint32 bb_noise; + bool m_bb_noise_isSet; + + qint32 write_to_file; + bool m_write_to_file_isSet; + + qint32 spectrum_rate; + bool m_spectrum_rate_isSet; + + QString* data; + bool m_data_isSet; qint32 rgb_color; bool m_rgb_color_isSet; @@ -166,6 +235,33 @@ private: qint32 reverse_api_channel_index; bool m_reverse_api_channel_index_isSet; + qint32 scramble; + bool m_scramble_isSet; + + qint32 polynomial; + bool m_polynomial_isSet; + + qint32 pulse_shaping; + bool m_pulse_shaping_isSet; + + float beta; + bool m_beta_isSet; + + qint32 symbol_span; + bool m_symbol_span_isSet; + + qint32 udp_enabled; + bool m_udp_enabled_isSet; + + qint32 udp_bytes_format; + bool m_udp_bytes_format_isSet; + + QString* udp_address; + bool m_udp_address_isSet; + + qint32 udp_port; + bool m_udp_port_isSet; + }; } diff --git a/swagger/sdrangel/code/qt5/client/SWGModelFactory.h b/swagger/sdrangel/code/qt5/client/SWGModelFactory.h index f09328177..d90f427e6 100644 --- a/swagger/sdrangel/code/qt5/client/SWGModelFactory.h +++ b/swagger/sdrangel/code/qt5/client/SWGModelFactory.h @@ -140,7 +140,6 @@ #include "SWGHackRFInputSettings.h" #include "SWGHackRFOutputSettings.h" #include "SWGIEEE_802_15_4_ModActions.h" -#include "SWGIEEE_802_15_4_ModActions_tx.h" #include "SWGIEEE_802_15_4_ModReport.h" #include "SWGIEEE_802_15_4_ModSettings.h" #include "SWGInstanceChannelsResponse.h" @@ -938,11 +937,6 @@ namespace SWGSDRangel { obj->init(); return obj; } - if(QString("SWGIEEE_802_15_4_ModActions_tx").compare(type) == 0) { - SWGIEEE_802_15_4_ModActions_tx *obj = new SWGIEEE_802_15_4_ModActions_tx(); - obj->init(); - return obj; - } if(QString("SWGIEEE_802_15_4_ModReport").compare(type) == 0) { SWGIEEE_802_15_4_ModReport *obj = new SWGIEEE_802_15_4_ModReport(); obj->init();