From 7c9327c125cc884379e982d7e5772d3863714cba Mon Sep 17 00:00:00 2001 From: f4exb Date: Sun, 21 Nov 2021 00:01:16 +0100 Subject: [PATCH] IEEE 802.15.4 modulator: API and GUI changes --- doc/img/IEEE_802_15_4_Mod_frame.png | Bin 0 -> 100419 bytes doc/img/IEEE_802_15_4_Mod_plugin.png | Bin 12463 -> 42520 bytes doc/img/IEEE_802_15_4_Mod_plugin.xcf | Bin 0 -> 138308 bytes .../mod802.15.4/ieee_802_15_4_mod.cpp | 320 ++++++++++- .../mod802.15.4/ieee_802_15_4_modgui.cpp | 82 ++- .../mod802.15.4/ieee_802_15_4_modgui.h | 3 + .../mod802.15.4/ieee_802_15_4_modgui.ui | 71 ++- .../mod802.15.4/ieee_802_15_4_modsettings.cpp | 17 +- .../mod802.15.4/ieee_802_15_4_modsettings.h | 14 +- plugins/channeltx/mod802.15.4/readme.md | 65 ++- sdrbase/resources/webapi/doc/html2/index.html | 109 +++- .../swagger/include/IEEE_802_15_4_Mod.yaml | 108 +++- .../swagger/include/IEEE_802_15_4_Mod.yaml | 108 +++- swagger/sdrangel/code/html2/index.html | 109 +++- .../client/SWGIEEE_802_15_4_ModActions.cpp | 43 +- .../qt5/client/SWGIEEE_802_15_4_ModActions.h | 14 +- .../client/SWGIEEE_802_15_4_ModSettings.cpp | 538 +++++++++++++++--- .../qt5/client/SWGIEEE_802_15_4_ModSettings.h | 136 ++++- .../code/qt5/client/SWGModelFactory.h | 6 - 19 files changed, 1435 insertions(+), 308 deletions(-) create mode 100644 doc/img/IEEE_802_15_4_Mod_frame.png create mode 100644 doc/img/IEEE_802_15_4_Mod_plugin.xcf 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 0000000000000000000000000000000000000000..673889b9fcd3f02f4a930d66c8d3bf1cd49dc359 GIT binary patch literal 100419 zcmV*5Ky<%}P)(I5l>FoU&LDz)wv7ytn9^}O{luQ>()R%%TE0JxPF0s!FH5fYE;nzUmg zG!`UkVoL%6pvp@X)+~?(U;qU001z}d0|)>LP`u20br%Unj=x@15Ee(AXPsKbAXyjVqri_D9g0o%)n7rPDS-MqYTFU6JY=g00353 zgjNX!z(uK55E+160}=QFJOJcs)IwBktPj`ai6@>o{ovTIwmyhMYm5;<5CFjPa;Mkr z8e_m(uoj7ihFUThyvg@E=5>JASZP&R0stWafYG`r3jh#=3?KyvQbYvI0N@3|YJZI| z>dgRfWH_ATefe7wdIhCAs>;9*2q{UjvUEgHuS?&Ds^T+!O$u36Rg#RNM5G*6GE`NS zWJ#&ZzzYC?2$X^((Levgyfq0zKhKJ)Ed3w?00t<_s@LzG?K?sYtyf!BRmCGKR+k`z zKO6`JArxgV1p%NWxh#V;g}8^FgCIz=8~_3Z zo&W&IE6vP+Fm!p0dF8y#t=jcXRVl?#xgcVhmqg_IYHDf%SCqc9)|91lPD)v;uQUD| zcgp7?r_>q)AP@j}z7GJ-S|C(PC=dY7S*KA-0t669w$j3rfLIiT45ByV_TPrkTF2)Z z85v`IeCc?zHBqZY0N^ZW4Tvywh^|Xf7GV$qDCd9>5P>A5SrJ9P?@0&F0W7tb1o;!K zX04`PqlbEHz$d*Af&d8sU}0gQ)`+7p3Vi=eg`ai1Q5b;o06-|^5n2F;AOar<(LuLg zOw=Sa8chifzypLZf*=MI-R=S@<;T-uE#k2vJ*S95FUu?PNC~L&+#v*E97kbhKuK@_ z2*AuZvfRghqF2Y;+*Vs3M98wj7}IFf!qCsMVtF|Ud<6i6OhiE#dP3-`D$83p96APfTlmsJH4`!bxKoE}!IcA&(0Yg;(yz&WAhhS}L+WI$z# zP_D1~qE-vo0RuP(;4F*00$pS=55kF7j52Nopi7W6DlT1tt{`eK(8kuZ1JnQ(07sz+ zW6l{o&yxZGj28s}XsvZb);cN40kDI}_W;ajy7YXNme+@I=dlj#T;QulJswVD#ZfRl zHBqb8YPDJv*BMA_3qZ;X;#y-|hUXbHs!>|4+2N$8R7yx$m4&kgfNOCyGy^Jakx2T! ztttSJaydnWTLllKp0uWrU+jUw4a8*^z z9QuR++MGDkRTa><-+Xn9%WEBqq7XtLVo_x2AQ_I%j~zQUKR=&jX&8o5slgx}x>8mg zDr3%D0)J&r(;CnBi4b(v=`8I#c+3F^&vQTk=o|nr5v^xC&{)=97e;}AXDMC>z{A

PX6 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ǵPo?y0ECGE6d7W*jueuLOn?yq209WR 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 literal 12463 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 EKO$>YPyhe` 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 0000000000000000000000000000000000000000..b0dd0de73a7efc87037353e381735cc2ee2c9264 GIT binary patch literal 138308 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

|HgzzIhZ@ixOubLGJTHUUhKQ zEqxSJixOv8M1FVn0P&~e;fG!15=W}eV{2KMyV_Mhqilm27fJ1^3%r%RvW?PJ7j!!% zz?@;{S{!)2_~O#p8&XrIw=k#UZGBf?F4QC*eM`ww#S-u8;Hqui>&>x&9aXM!iHo33 za*0cDPAGAP@g$abC6l5%Ebtb)f~3*>5>W z3}(@?DGoMB`~;J!$RL;bPN&C>&*Fdm*b1BrtX;W>dqV)?JFU>UQ@v@!Z; zzGfWJMaiHsRjEq^dADM=wYpfK(o~}^797>7iv>&d>SDSBThvQ!rdM5s%9td%tBi-a)LzEu@SNNpoTh517flK#xsoJn+xWgwWU6h=Y1SIo9n z7z?DCY81wTqdJALV5weVESY45u}Cv1j76GBVZ<~Mz{k?QnBaaYD2y2x$gD6jYEWf} zqqYiBVg69)qd)UC8xRBe@e9nn60Zwic0~`&;I%Q%7h5kDAYs6-*OX=aqd`+KfaXOXLxtxB<=~_;=aeA23bDZAhG>cQMME~A^Q%6qS zIrZhVKc}NOoyzH4PQT=IEvMT!J@JFE-%RkyCe0eL3yV=_pR8aypmO zFF9Sy={8Oeb9#=`+ni=`s+H(J8gS~!sXM2>oc8B*6sJ=;oy+N$oUY|`8>fdkJ;&*7 zPO~`GO7x`$oH}yq&Z#e_{W%@Q=~R*8Ul@A)2Ap5|v~ z?@{;sk1MY~I{&X${tbF4!puLxBFxhNd~s!pBFy}Q?-aWN`xMe2qmqr1s0UAH^dC~# z)O~pV^+_Rq%Jt$vptZYW`EcJOwUV_TEyS^5sn;gVLGFAluo6)3%&;5vdfBWx?lIEG0RXbE=o9 zlSmXwC*HGgVy_H-C+QiLPVCWHoZrvsWgcg}8`WC0-IGxBT$_#%>rw~p(A2{8_X*8!hINihPK28sEdX&?XoSxw{j?;Kff9LcXr#Csh%V{#FX`DXf z^bx1|oECFh&Z%Ca&LV*xsd>CUr_XZQNMaDZKJz}c`$?XvcD(GGe@1@E8ZwLc_@6T6 Ii7nHA14`MH{r~^~ literal 0 HcmV?d00001 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();