From 274e6c645dd7a4489b6e0fd6258d574321cfde90 Mon Sep 17 00:00:00 2001 From: f4exb Date: Sun, 15 Apr 2018 18:25:22 +0200 Subject: [PATCH] UDP Sink: Web API: settings and report implementation --- plugins/channeltx/udpsink/CMakeLists.txt | 4 + plugins/channeltx/udpsink/udpsink.cpp | 158 ++++++ plugins/channeltx/udpsink/udpsink.h | 17 + plugins/channeltx/udpsink/udpsinkgui.cpp | 18 +- plugins/channeltx/udpsink/udpsinkgui.ui | 40 +- sdrbase/resources/res.qrc | 1 + sdrbase/resources/webapi/doc/html2/index.html | 93 +++- .../webapi/doc/swagger/include/UDPSink.yaml | 62 +++ .../resources/webapi/doc/swagger/swagger.yaml | 4 + sdrbase/webapi/webapirequestmapper.cpp | 28 + .../sdrangel/api/swagger/include/UDPSink.yaml | 62 +++ swagger/sdrangel/api/swagger/swagger.yaml | 4 + swagger/sdrangel/code/html2/index.html | 93 +++- .../code/qt5/client/SWGChannelReport.cpp | 23 + .../code/qt5/client/SWGChannelReport.h | 7 + .../code/qt5/client/SWGChannelSettings.cpp | 23 + .../code/qt5/client/SWGChannelSettings.h | 7 + .../code/qt5/client/SWGModelFactory.h | 8 + .../code/qt5/client/SWGUDPSinkReport.cpp | 127 +++++ .../code/qt5/client/SWGUDPSinkReport.h | 64 +++ .../code/qt5/client/SWGUDPSinkSettings.cpp | 488 ++++++++++++++++++ .../code/qt5/client/SWGUDPSinkSettings.h | 167 ++++++ swagger/sdrangel/examples/tx_test.py | 11 + 23 files changed, 1476 insertions(+), 33 deletions(-) create mode 100644 sdrbase/resources/webapi/doc/swagger/include/UDPSink.yaml create mode 100644 swagger/sdrangel/api/swagger/include/UDPSink.yaml create mode 100644 swagger/sdrangel/code/qt5/client/SWGUDPSinkReport.cpp create mode 100644 swagger/sdrangel/code/qt5/client/SWGUDPSinkReport.h create mode 100644 swagger/sdrangel/code/qt5/client/SWGUDPSinkSettings.cpp create mode 100644 swagger/sdrangel/code/qt5/client/SWGUDPSinkSettings.h diff --git a/plugins/channeltx/udpsink/CMakeLists.txt b/plugins/channeltx/udpsink/CMakeLists.txt index b856fa4af..d278e2484 100644 --- a/plugins/channeltx/udpsink/CMakeLists.txt +++ b/plugins/channeltx/udpsink/CMakeLists.txt @@ -1,5 +1,7 @@ project(udpsink) +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") + set(udpsink_SOURCES udpsink.cpp udpsinkgui.cpp @@ -25,6 +27,7 @@ set(udpsink_FORMS include_directories( . ${CMAKE_CURRENT_BINARY_DIR} + ${CMAKE_SOURCE_DIR}/swagger/sdrangel/code/qt5/client ) #include(${QT_USE_FILE}) @@ -44,6 +47,7 @@ target_link_libraries(modudpsink ${QT_LIBRARIES} sdrbase sdrgui + swagger ) qt5_use_modules(modudpsink Core Widgets Network) diff --git a/plugins/channeltx/udpsink/udpsink.cpp b/plugins/channeltx/udpsink/udpsink.cpp index 467241bd6..41bbe2542 100644 --- a/plugins/channeltx/udpsink/udpsink.cpp +++ b/plugins/channeltx/udpsink/udpsink.cpp @@ -16,6 +16,10 @@ #include +#include "SWGChannelSettings.h" +#include "SWGChannelReport.h" +#include "SWGUDPSinkReport.h" + #include "device/devicesinkapi.h" #include "dsp/upchannelizer.h" #include "dsp/threadedbasebandsamplesource.h" @@ -590,3 +594,157 @@ bool UDPSink::deserialize(const QByteArray& data) return false; } } + +int UDPSink::webapiSettingsGet( + SWGSDRangel::SWGChannelSettings& response, + QString& errorMessage __attribute__((unused))) +{ + response.setUdpSinkSettings(new SWGSDRangel::SWGUDPSinkSettings()); + response.getUdpSinkSettings()->init(); + webapiFormatChannelSettings(response, m_settings); + return 200; +} + +int UDPSink::webapiSettingsPutPatch( + bool force, + const QStringList& channelSettingsKeys, + SWGSDRangel::SWGChannelSettings& response, + QString& errorMessage __attribute__((unused))) +{ + UDPSinkSettings settings; + bool frequencyOffsetChanged = false; + + if (channelSettingsKeys.contains("sampleFormat")) { + settings.m_sampleFormat = (UDPSinkSettings::SampleFormat) response.getUdpSinkSettings()->getSampleFormat(); + } + if (channelSettingsKeys.contains("inputSampleRate")) { + settings.m_inputSampleRate = response.getUdpSinkSettings()->getInputSampleRate(); + } + if (channelSettingsKeys.contains("inputFrequencyOffset")) + { + settings.m_inputFrequencyOffset = response.getUdpSinkSettings()->getInputFrequencyOffset(); + frequencyOffsetChanged = true; + } + if (channelSettingsKeys.contains("rfBandwidth")) { + settings.m_rfBandwidth = response.getUdpSinkSettings()->getRfBandwidth(); + } + if (channelSettingsKeys.contains("lowCutoff")) { + settings.m_lowCutoff = response.getUdpSinkSettings()->getLowCutoff(); + } + if (channelSettingsKeys.contains("fmDeviation")) { + settings.m_fmDeviation = response.getUdpSinkSettings()->getFmDeviation(); + } + if (channelSettingsKeys.contains("amModFactor")) { + settings.m_amModFactor = response.getUdpSinkSettings()->getAmModFactor(); + } + if (channelSettingsKeys.contains("amModFactor")) { + settings.m_amModFactor = response.getUdpSinkSettings()->getAmModFactor(); + } + if (channelSettingsKeys.contains("channelMute")) { + settings.m_channelMute = response.getUdpSinkSettings()->getChannelMute() != 0; + } + if (channelSettingsKeys.contains("gainIn")) { + settings.m_gainIn = response.getUdpSinkSettings()->getGainIn(); + } + if (channelSettingsKeys.contains("gainOut")) { + settings.m_gainOut = response.getUdpSinkSettings()->getGainOut(); + } + if (channelSettingsKeys.contains("squelch")) { + settings.m_squelch = response.getUdpSinkSettings()->getSquelch(); + } + if (channelSettingsKeys.contains("squelchGate")) { + settings.m_squelchGate = response.getUdpSinkSettings()->getSquelchGate(); + } + if (channelSettingsKeys.contains("squelchEnabled")) { + settings.m_squelchEnabled = response.getUdpSinkSettings()->getSquelchEnabled() != 0; + } + if (channelSettingsKeys.contains("autoRWBalance")) { + settings.m_autoRWBalance = response.getUdpSinkSettings()->getAutoRwBalance() != 0; + } + if (channelSettingsKeys.contains("stereoInput")) { + settings.m_stereoInput = response.getUdpSinkSettings()->getStereoInput() != 0; + } + if (channelSettingsKeys.contains("rgbColor")) { + settings.m_rgbColor = response.getUdpSinkSettings()->getRgbColor(); + } + if (channelSettingsKeys.contains("udpAddress")) { + settings.m_udpAddress = *response.getUdpSinkSettings()->getUdpAddress(); + } + if (channelSettingsKeys.contains("udpPort")) { + settings.m_udpPort = response.getUdpSinkSettings()->getUdpPort(); + } + if (channelSettingsKeys.contains("title")) { + settings.m_title = *response.getUdpSinkSettings()->getTitle(); + } + + if (frequencyOffsetChanged) + { + UDPSink::MsgConfigureChannelizer *msgChan = UDPSink::MsgConfigureChannelizer::create( + settings.m_inputSampleRate, + settings.m_inputFrequencyOffset); + m_inputMessageQueue.push(msgChan); + } + + MsgConfigureUDPSink *msg = MsgConfigureUDPSink::create(settings, force); + m_inputMessageQueue.push(msg); + + if (m_guiMessageQueue) // forward to GUI if any + { + MsgConfigureUDPSink *msgToGUI = MsgConfigureUDPSink::create(settings, force); + m_guiMessageQueue->push(msgToGUI); + } + + webapiFormatChannelSettings(response, settings); + + return 200; +} + +int UDPSink::webapiReportGet( + SWGSDRangel::SWGChannelReport& response, + QString& errorMessage __attribute__((unused))) +{ + response.setUdpSinkReport(new SWGSDRangel::SWGUDPSinkReport()); + response.getUdpSinkReport()->init(); + webapiFormatChannelReport(response); + return 200; +} + +void UDPSink::webapiFormatChannelSettings(SWGSDRangel::SWGChannelSettings& response, const UDPSinkSettings& settings) +{ + response.getUdpSinkSettings()->setSampleFormat((int) settings.m_sampleFormat); + response.getUdpSinkSettings()->setInputSampleRate(settings.m_inputSampleRate); + response.getUdpSinkSettings()->setInputFrequencyOffset(settings.m_inputFrequencyOffset); + response.getUdpSinkSettings()->setRfBandwidth(settings.m_rfBandwidth); + response.getUdpSinkSettings()->setLowCutoff(settings.m_lowCutoff); + response.getUdpSinkSettings()->setFmDeviation(settings.m_fmDeviation); + response.getUdpSinkSettings()->setAmModFactor(settings.m_amModFactor); + response.getUdpSinkSettings()->setChannelMute(settings.m_channelMute ? 1 : 0); + response.getUdpSinkSettings()->setGainIn(settings.m_gainIn); + response.getUdpSinkSettings()->setGainOut(settings.m_gainOut); + response.getUdpSinkSettings()->setSquelch(settings.m_squelch); + response.getUdpSinkSettings()->setSquelchGate(settings.m_squelchGate); + response.getUdpSinkSettings()->setSquelchEnabled(settings.m_squelchEnabled ? 1 : 0); + response.getUdpSinkSettings()->setAutoRwBalance(settings.m_autoRWBalance ? 1 : 0); + response.getUdpSinkSettings()->setStereoInput(settings.m_stereoInput ? 1 : 0); + response.getUdpSinkSettings()->setRgbColor(settings.m_rgbColor); + + if (response.getUdpSinkSettings()->getUdpAddress()) { + *response.getUdpSinkSettings()->getUdpAddress() = settings.m_udpAddress; + } else { + response.getUdpSinkSettings()->setUdpAddress(new QString(settings.m_udpAddress)); + } + + response.getUdpSinkSettings()->setUdpPort(settings.m_udpPort); + + if (response.getUdpSinkSettings()->getTitle()) { + *response.getUdpSinkSettings()->getTitle() = settings.m_title; + } else { + response.getUdpSinkSettings()->setTitle(new QString(settings.m_title)); + } +} + +void UDPSink::webapiFormatChannelReport(SWGSDRangel::SWGChannelReport& response) +{ + response.getUdpSinkReport()->setChannelPowerDb(CalcDb::dbPower(getMagSq())); + response.getUdpSinkReport()->setChannelSampleRate(m_outputSampleRate); +} diff --git a/plugins/channeltx/udpsink/udpsink.h b/plugins/channeltx/udpsink/udpsink.h index 910936b33..e9166156b 100644 --- a/plugins/channeltx/udpsink/udpsink.h +++ b/plugins/channeltx/udpsink/udpsink.h @@ -106,6 +106,20 @@ public: virtual QByteArray serialize() const; virtual bool deserialize(const QByteArray& data); + virtual int webapiSettingsGet( + SWGSDRangel::SWGChannelSettings& response, + QString& errorMessage); + + virtual int webapiSettingsPutPatch( + bool force, + const QStringList& channelSettingsKeys, + SWGSDRangel::SWGChannelSettings& response, + QString& errorMessage); + + virtual int webapiReportGet( + SWGSDRangel::SWGChannelReport& response, + QString& errorMessage); + double getMagSq() const { return m_magsq; } double getInMagSq() const { return m_inMagsq; } int32_t getBufferGauge() const { return m_udpHandler.getBufferGauge(); } @@ -225,6 +239,9 @@ private: void calculateLevel(Real sample); void calculateLevel(Complex sample); + void webapiFormatChannelSettings(SWGSDRangel::SWGChannelSettings& response, const UDPSinkSettings& settings); + void webapiFormatChannelReport(SWGSDRangel::SWGChannelReport& response); + inline void calculateSquelch(double value) { if ((!m_settings.m_squelchEnabled) || (value > m_squelch)) diff --git a/plugins/channeltx/udpsink/udpsinkgui.cpp b/plugins/channeltx/udpsink/udpsinkgui.cpp index dc8f8ab49..02c370346 100644 --- a/plugins/channeltx/udpsink/udpsinkgui.cpp +++ b/plugins/channeltx/udpsink/udpsinkgui.cpp @@ -85,8 +85,19 @@ bool UDPSinkGUI::deserialize(const QByteArray& data) bool UDPSinkGUI::handleMessage(const Message& message __attribute__((unused))) { - qDebug() << "UDPSinkGUI::handleMessage"; - return false; + if (UDPSink::MsgConfigureUDPSink::match(message)) + { + const UDPSink::MsgConfigureUDPSink& cfg = (UDPSink::MsgConfigureUDPSink&) message; + m_settings = cfg.getSettings(); + blockApplySettings(true); + displaySettings(); + blockApplySettings(false); + return true; + } + else + { + return false; + } } void UDPSinkGUI::handleSourceMessages() @@ -234,6 +245,9 @@ void UDPSinkGUI::displaySettings() ui->addressText->setText(tr("%1:%2").arg(m_settings.m_udpAddress).arg(m_settings.m_udpPort)); + ui->applyBtn->setEnabled(false); + ui->applyBtn->setStyleSheet("QPushButton { background:rgb(79,79,79); }"); + blockApplySettings(false); } diff --git a/plugins/channeltx/udpsink/udpsinkgui.ui b/plugins/channeltx/udpsink/udpsinkgui.ui index e046480bf..f7a3d3492 100644 --- a/plugins/channeltx/udpsink/udpsinkgui.ui +++ b/plugins/channeltx/udpsink/udpsinkgui.ui @@ -6,13 +6,13 @@ 0 0 - 388 + 382 403 - 342 + 382 0 @@ -31,12 +31,12 @@ UDP Sample Sink - - -1 - UDP Sample Sink + + -1 + @@ -56,16 +56,7 @@ Settings - - 2 - - - 2 - - - 2 - - + 2 @@ -92,7 +83,7 @@ Input sample rate (S/s) - 0009999 + 0009999; 48000 @@ -122,7 +113,7 @@ Signal bandwidth (Hz) - 0009999 + 0009999; 32000 @@ -506,7 +497,7 @@ FM deviation in Hz - 00000 + 00000; 2500 @@ -532,7 +523,7 @@ Percentage of AM modulation - 000 + 000; 95 @@ -897,16 +888,7 @@ 3 - - 2 - - - 2 - - - 2 - - + 2 diff --git a/sdrbase/resources/res.qrc b/sdrbase/resources/res.qrc index 65b0a992b..4b9543477 100644 --- a/sdrbase/resources/res.qrc +++ b/sdrbase/resources/res.qrc @@ -14,6 +14,7 @@ webapi/doc/swagger/include/NFMDemod.yaml webapi/doc/swagger/include/NFMMod.yaml webapi/doc/swagger/include/SSBMod.yaml + webapi/doc/swagger/include/UDPSink.yaml webapi/doc/swagger/include/WFMMod.yaml webapi/doc/swagger/include/RtlSdr.yaml webapi/doc/swagger-ui/swagger-ui.js.map diff --git a/sdrbase/resources/webapi/doc/html2/index.html b/sdrbase/resources/webapi/doc/html2/index.html index 7c6cbfa73..c66efd72b 100644 --- a/sdrbase/resources/webapi/doc/html2/index.html +++ b/sdrbase/resources/webapi/doc/html2/index.html @@ -1229,6 +1229,9 @@ margin-bottom: 20px; "SSBModReport" : { "$ref" : "#/definitions/SSBModReport" }, + "UDPSinkReport" : { + "$ref" : "#/definitions/UDPSinkReport" + }, "WFMModReport" : { "$ref" : "#/definitions/WFMModReport" } @@ -1265,6 +1268,9 @@ margin-bottom: 20px; "SSBModSettings" : { "$ref" : "#/definitions/SSBModSettings" }, + "UDPSinkSettings" : { + "$ref" : "#/definitions/UDPSinkSettings" + }, "WFMModSettings" : { "$ref" : "#/definitions/WFMModSettings" } @@ -2238,6 +2244,91 @@ margin-bottom: 20px; "type" : "string" } } +}; + defs.UDPSinkReport = { + "properties" : { + "channelPowerDB" : { + "type" : "number", + "format" : "float", + "description" : "power transmitted in channel (dB)" + }, + "channelSampleRate" : { + "type" : "integer" + } + }, + "description" : "UDPSink" +}; + defs.UDPSinkSettings = { + "properties" : { + "sampleFormat" : { + "type" : "integer" + }, + "inputSampleRate" : { + "type" : "number", + "format" : "float" + }, + "inputFrequencyOffset" : { + "type" : "integer", + "format" : "int64" + }, + "rfBandwidth" : { + "type" : "number", + "format" : "float" + }, + "lowCutoff" : { + "type" : "number", + "format" : "float" + }, + "fmDeviation" : { + "type" : "integer" + }, + "amModFactor" : { + "type" : "number", + "format" : "float" + }, + "channelMute" : { + "type" : "integer" + }, + "gainIn" : { + "type" : "number", + "format" : "float" + }, + "gainOut" : { + "type" : "number", + "format" : "float" + }, + "squelch" : { + "type" : "number", + "format" : "float" + }, + "squelchGate" : { + "type" : "number", + "format" : "float" + }, + "squelchEnabled" : { + "type" : "integer" + }, + "autoRWBalance" : { + "type" : "integer" + }, + "stereoInput" : { + "type" : "integer" + }, + "rgbColor" : { + "type" : "integer" + }, + "udpAddress" : { + "type" : "string" + }, + "udpPort" : { + "type" : "integer", + "format" : "uint16" + }, + "title" : { + "type" : "string" + } + }, + "description" : "UDPSink" }; defs.WFMModReport = { "properties" : { @@ -20538,7 +20629,7 @@ except ApiException as e:
- Generated 2018-04-15T01:40:30.919+02:00 + Generated 2018-04-15T11:16:57.480+02:00
diff --git a/sdrbase/resources/webapi/doc/swagger/include/UDPSink.yaml b/sdrbase/resources/webapi/doc/swagger/include/UDPSink.yaml new file mode 100644 index 000000000..32cb1d0a3 --- /dev/null +++ b/sdrbase/resources/webapi/doc/swagger/include/UDPSink.yaml @@ -0,0 +1,62 @@ +UDPSinkSettings: + description: UDPSink + properties: + sampleFormat: + type: integer + inputSampleRate: + type: number + format: float + inputFrequencyOffset: + type: integer + format: int64 + rfBandwidth: + type: number + format: float + lowCutoff: + type: number + format: float + fmDeviation: + type: integer + amModFactor: + type: number + format: float + channelMute: + type: integer + gainIn: + type: number + format: float + gainOut: + type: number + format: float + squelch: + type: number + format: float + squelchGate: + type: number + format: float + squelchEnabled: + type: integer + autoRWBalance: + type: integer + stereoInput: + type: integer + rgbColor: + type: integer + udpAddress: + type: string + udpPort: + type: integer + format: uint16 + title: + type: string + +UDPSinkReport: + description: UDPSink + properties: + channelPowerDB: + description: power transmitted in channel (dB) + type: number + format: float + channelSampleRate: + type: integer + \ No newline at end of file diff --git a/sdrbase/resources/webapi/doc/swagger/swagger.yaml b/sdrbase/resources/webapi/doc/swagger/swagger.yaml index 99b4f4af8..855f814f0 100644 --- a/sdrbase/resources/webapi/doc/swagger/swagger.yaml +++ b/sdrbase/resources/webapi/doc/swagger/swagger.yaml @@ -1757,6 +1757,8 @@ definitions: $ref: "/doc/swagger/include/NFMMod.yaml#/NFMModSettings" SSBModSettings: $ref: "/doc/swagger/include/SSBMod.yaml#/SSBModSettings" + UDPSinkSettings: + $ref: "/doc/swagger/include/UDPSink.yaml#/UDPSinkSettings" WFMModSettings: $ref: "/doc/swagger/include/WFMMod.yaml#/WFMModSettings" @@ -1782,6 +1784,8 @@ definitions: $ref: "/doc/swagger/include/NFMMod.yaml#/NFMModReport" SSBModReport: $ref: "/doc/swagger/include/SSBMod.yaml#/SSBModReport" + UDPSinkReport: + $ref: "/doc/swagger/include/UDPSink.yaml#/UDPSinkReport" WFMModReport: $ref: "/doc/swagger/include/WFMMod.yaml#/WFMModReport" diff --git a/sdrbase/webapi/webapirequestmapper.cpp b/sdrbase/webapi/webapirequestmapper.cpp index dd7692add..342bb0285 100644 --- a/sdrbase/webapi/webapirequestmapper.cpp +++ b/sdrbase/webapi/webapirequestmapper.cpp @@ -1931,6 +1931,20 @@ bool WebAPIRequestMapper::validateChannelSettings( return false; } } + else if (*channelType == "UDPSink") + { + if (channelSettings.getTx() != 0) + { + QJsonObject udpSinkSettingsJsonObject = jsonObject["UDPSinkSettings"].toObject(); + channelSettingsKeys = udpSinkSettingsJsonObject.keys(); + channelSettings.setUdpSinkSettings(new SWGSDRangel::SWGUDPSinkSettings()); + channelSettings.getUdpSinkSettings()->fromJsonObject(udpSinkSettingsJsonObject); + return true; + } + else { + return false; + } + } else if (*channelType == "WFMMod") { if (channelSettings.getTx() != 0) @@ -2061,6 +2075,20 @@ bool WebAPIRequestMapper::validateChannelReport( return false; } } + else if (*channelType == "UDPSink") + { + if (channelReport.getTx() != 0) + { + QJsonObject udpSinkReportJsonObject = jsonObject["UDPSinkReport"].toObject(); + channelReportKeys = udpSinkReportJsonObject.keys(); + channelReport.setUdpSinkReport(new SWGSDRangel::SWGUDPSinkReport()); + channelReport.getUdpSinkReport()->fromJsonObject(udpSinkReportJsonObject); + return true; + } + else { + return false; + } + } else if (*channelType == "WFMMod") { if (channelReport.getTx() != 0) diff --git a/swagger/sdrangel/api/swagger/include/UDPSink.yaml b/swagger/sdrangel/api/swagger/include/UDPSink.yaml new file mode 100644 index 000000000..32cb1d0a3 --- /dev/null +++ b/swagger/sdrangel/api/swagger/include/UDPSink.yaml @@ -0,0 +1,62 @@ +UDPSinkSettings: + description: UDPSink + properties: + sampleFormat: + type: integer + inputSampleRate: + type: number + format: float + inputFrequencyOffset: + type: integer + format: int64 + rfBandwidth: + type: number + format: float + lowCutoff: + type: number + format: float + fmDeviation: + type: integer + amModFactor: + type: number + format: float + channelMute: + type: integer + gainIn: + type: number + format: float + gainOut: + type: number + format: float + squelch: + type: number + format: float + squelchGate: + type: number + format: float + squelchEnabled: + type: integer + autoRWBalance: + type: integer + stereoInput: + type: integer + rgbColor: + type: integer + udpAddress: + type: string + udpPort: + type: integer + format: uint16 + title: + type: string + +UDPSinkReport: + description: UDPSink + properties: + channelPowerDB: + description: power transmitted in channel (dB) + type: number + format: float + channelSampleRate: + type: integer + \ No newline at end of file diff --git a/swagger/sdrangel/api/swagger/swagger.yaml b/swagger/sdrangel/api/swagger/swagger.yaml index edf4acd66..77c6224a4 100644 --- a/swagger/sdrangel/api/swagger/swagger.yaml +++ b/swagger/sdrangel/api/swagger/swagger.yaml @@ -1757,6 +1757,8 @@ definitions: $ref: "http://localhost:8081/api/swagger/include/NFMMod.yaml#/NFMModSettings" SSBModSettings: $ref: "http://localhost:8081/api/swagger/include/SSBMod.yaml#/SSBModSettings" + UDPSinkSettings: + $ref: "http://localhost:8081/api/swagger/include/UDPSink.yaml#/UDPSinkSettings" WFMModSettings: $ref: "http://localhost:8081/api/swagger/include/WFMMod.yaml#/WFMModSettings" @@ -1782,6 +1784,8 @@ definitions: $ref: "http://localhost:8081/api/swagger/include/NFMMod.yaml#/NFMModReport" SSBModReport: $ref: "http://localhost:8081/api/swagger/include/SSBMod.yaml#/SSBModReport" + UDPSinkReport: + $ref: "http://localhost:8081/api/swagger/include/UDPSink.yaml#/UDPSinkReport" WFMModReport: $ref: "http://localhost:8081/api/swagger/include/WFMMod.yaml#/WFMModReport" diff --git a/swagger/sdrangel/code/html2/index.html b/swagger/sdrangel/code/html2/index.html index 7c6cbfa73..c66efd72b 100644 --- a/swagger/sdrangel/code/html2/index.html +++ b/swagger/sdrangel/code/html2/index.html @@ -1229,6 +1229,9 @@ margin-bottom: 20px; "SSBModReport" : { "$ref" : "#/definitions/SSBModReport" }, + "UDPSinkReport" : { + "$ref" : "#/definitions/UDPSinkReport" + }, "WFMModReport" : { "$ref" : "#/definitions/WFMModReport" } @@ -1265,6 +1268,9 @@ margin-bottom: 20px; "SSBModSettings" : { "$ref" : "#/definitions/SSBModSettings" }, + "UDPSinkSettings" : { + "$ref" : "#/definitions/UDPSinkSettings" + }, "WFMModSettings" : { "$ref" : "#/definitions/WFMModSettings" } @@ -2238,6 +2244,91 @@ margin-bottom: 20px; "type" : "string" } } +}; + defs.UDPSinkReport = { + "properties" : { + "channelPowerDB" : { + "type" : "number", + "format" : "float", + "description" : "power transmitted in channel (dB)" + }, + "channelSampleRate" : { + "type" : "integer" + } + }, + "description" : "UDPSink" +}; + defs.UDPSinkSettings = { + "properties" : { + "sampleFormat" : { + "type" : "integer" + }, + "inputSampleRate" : { + "type" : "number", + "format" : "float" + }, + "inputFrequencyOffset" : { + "type" : "integer", + "format" : "int64" + }, + "rfBandwidth" : { + "type" : "number", + "format" : "float" + }, + "lowCutoff" : { + "type" : "number", + "format" : "float" + }, + "fmDeviation" : { + "type" : "integer" + }, + "amModFactor" : { + "type" : "number", + "format" : "float" + }, + "channelMute" : { + "type" : "integer" + }, + "gainIn" : { + "type" : "number", + "format" : "float" + }, + "gainOut" : { + "type" : "number", + "format" : "float" + }, + "squelch" : { + "type" : "number", + "format" : "float" + }, + "squelchGate" : { + "type" : "number", + "format" : "float" + }, + "squelchEnabled" : { + "type" : "integer" + }, + "autoRWBalance" : { + "type" : "integer" + }, + "stereoInput" : { + "type" : "integer" + }, + "rgbColor" : { + "type" : "integer" + }, + "udpAddress" : { + "type" : "string" + }, + "udpPort" : { + "type" : "integer", + "format" : "uint16" + }, + "title" : { + "type" : "string" + } + }, + "description" : "UDPSink" }; defs.WFMModReport = { "properties" : { @@ -20538,7 +20629,7 @@ except ApiException as e:
- Generated 2018-04-15T01:40:30.919+02:00 + Generated 2018-04-15T11:16:57.480+02:00
diff --git a/swagger/sdrangel/code/qt5/client/SWGChannelReport.cpp b/swagger/sdrangel/code/qt5/client/SWGChannelReport.cpp index 88ffdf71a..c103eaa9b 100644 --- a/swagger/sdrangel/code/qt5/client/SWGChannelReport.cpp +++ b/swagger/sdrangel/code/qt5/client/SWGChannelReport.cpp @@ -44,6 +44,8 @@ SWGChannelReport::SWGChannelReport() { m_nfm_mod_report_isSet = false; ssb_mod_report = nullptr; m_ssb_mod_report_isSet = false; + udp_sink_report = nullptr; + m_udp_sink_report_isSet = false; wfm_mod_report = nullptr; m_wfm_mod_report_isSet = false; } @@ -70,6 +72,8 @@ SWGChannelReport::init() { m_nfm_mod_report_isSet = false; ssb_mod_report = new SWGSSBModReport(); m_ssb_mod_report_isSet = false; + udp_sink_report = new SWGUDPSinkReport(); + m_udp_sink_report_isSet = false; wfm_mod_report = new SWGWFMModReport(); m_wfm_mod_report_isSet = false; } @@ -98,6 +102,9 @@ SWGChannelReport::cleanup() { if(ssb_mod_report != nullptr) { delete ssb_mod_report; } + if(udp_sink_report != nullptr) { + delete udp_sink_report; + } if(wfm_mod_report != nullptr) { delete wfm_mod_report; } @@ -130,6 +137,8 @@ SWGChannelReport::fromJsonObject(QJsonObject &pJson) { ::SWGSDRangel::setValue(&ssb_mod_report, pJson["SSBModReport"], "SWGSSBModReport", "SWGSSBModReport"); + ::SWGSDRangel::setValue(&udp_sink_report, pJson["UDPSinkReport"], "SWGUDPSinkReport", "SWGUDPSinkReport"); + ::SWGSDRangel::setValue(&wfm_mod_report, pJson["WFMModReport"], "SWGWFMModReport", "SWGWFMModReport"); } @@ -172,6 +181,9 @@ SWGChannelReport::asJsonObject() { if((ssb_mod_report != nullptr) && (ssb_mod_report->isSet())){ toJsonValue(QString("SSBModReport"), ssb_mod_report, obj, QString("SWGSSBModReport")); } + if((udp_sink_report != nullptr) && (udp_sink_report->isSet())){ + toJsonValue(QString("UDPSinkReport"), udp_sink_report, obj, QString("SWGUDPSinkReport")); + } if((wfm_mod_report != nullptr) && (wfm_mod_report->isSet())){ toJsonValue(QString("WFMModReport"), wfm_mod_report, obj, QString("SWGWFMModReport")); } @@ -259,6 +271,16 @@ SWGChannelReport::setSsbModReport(SWGSSBModReport* ssb_mod_report) { this->m_ssb_mod_report_isSet = true; } +SWGUDPSinkReport* +SWGChannelReport::getUdpSinkReport() { + return udp_sink_report; +} +void +SWGChannelReport::setUdpSinkReport(SWGUDPSinkReport* udp_sink_report) { + this->udp_sink_report = udp_sink_report; + this->m_udp_sink_report_isSet = true; +} + SWGWFMModReport* SWGChannelReport::getWfmModReport() { return wfm_mod_report; @@ -282,6 +304,7 @@ SWGChannelReport::isSet(){ if(nfm_demod_report != nullptr && nfm_demod_report->isSet()){ isObjectUpdated = true; break;} if(nfm_mod_report != nullptr && nfm_mod_report->isSet()){ isObjectUpdated = true; break;} if(ssb_mod_report != nullptr && ssb_mod_report->isSet()){ isObjectUpdated = true; break;} + if(udp_sink_report != nullptr && udp_sink_report->isSet()){ isObjectUpdated = true; break;} if(wfm_mod_report != nullptr && wfm_mod_report->isSet()){ isObjectUpdated = true; break;} }while(false); return isObjectUpdated; diff --git a/swagger/sdrangel/code/qt5/client/SWGChannelReport.h b/swagger/sdrangel/code/qt5/client/SWGChannelReport.h index ece9277c9..5236d39b3 100644 --- a/swagger/sdrangel/code/qt5/client/SWGChannelReport.h +++ b/swagger/sdrangel/code/qt5/client/SWGChannelReport.h @@ -28,6 +28,7 @@ #include "SWGNFMDemodReport.h" #include "SWGNFMModReport.h" #include "SWGSSBModReport.h" +#include "SWGUDPSinkReport.h" #include "SWGWFMModReport.h" #include @@ -73,6 +74,9 @@ public: SWGSSBModReport* getSsbModReport(); void setSsbModReport(SWGSSBModReport* ssb_mod_report); + SWGUDPSinkReport* getUdpSinkReport(); + void setUdpSinkReport(SWGUDPSinkReport* udp_sink_report); + SWGWFMModReport* getWfmModReport(); void setWfmModReport(SWGWFMModReport* wfm_mod_report); @@ -104,6 +108,9 @@ private: SWGSSBModReport* ssb_mod_report; bool m_ssb_mod_report_isSet; + SWGUDPSinkReport* udp_sink_report; + bool m_udp_sink_report_isSet; + SWGWFMModReport* wfm_mod_report; bool m_wfm_mod_report_isSet; diff --git a/swagger/sdrangel/code/qt5/client/SWGChannelSettings.cpp b/swagger/sdrangel/code/qt5/client/SWGChannelSettings.cpp index 1f7f4737b..b85dd6121 100644 --- a/swagger/sdrangel/code/qt5/client/SWGChannelSettings.cpp +++ b/swagger/sdrangel/code/qt5/client/SWGChannelSettings.cpp @@ -44,6 +44,8 @@ SWGChannelSettings::SWGChannelSettings() { m_nfm_mod_settings_isSet = false; ssb_mod_settings = nullptr; m_ssb_mod_settings_isSet = false; + udp_sink_settings = nullptr; + m_udp_sink_settings_isSet = false; wfm_mod_settings = nullptr; m_wfm_mod_settings_isSet = false; } @@ -70,6 +72,8 @@ SWGChannelSettings::init() { m_nfm_mod_settings_isSet = false; ssb_mod_settings = new SWGSSBModSettings(); m_ssb_mod_settings_isSet = false; + udp_sink_settings = new SWGUDPSinkSettings(); + m_udp_sink_settings_isSet = false; wfm_mod_settings = new SWGWFMModSettings(); m_wfm_mod_settings_isSet = false; } @@ -98,6 +102,9 @@ SWGChannelSettings::cleanup() { if(ssb_mod_settings != nullptr) { delete ssb_mod_settings; } + if(udp_sink_settings != nullptr) { + delete udp_sink_settings; + } if(wfm_mod_settings != nullptr) { delete wfm_mod_settings; } @@ -130,6 +137,8 @@ SWGChannelSettings::fromJsonObject(QJsonObject &pJson) { ::SWGSDRangel::setValue(&ssb_mod_settings, pJson["SSBModSettings"], "SWGSSBModSettings", "SWGSSBModSettings"); + ::SWGSDRangel::setValue(&udp_sink_settings, pJson["UDPSinkSettings"], "SWGUDPSinkSettings", "SWGUDPSinkSettings"); + ::SWGSDRangel::setValue(&wfm_mod_settings, pJson["WFMModSettings"], "SWGWFMModSettings", "SWGWFMModSettings"); } @@ -172,6 +181,9 @@ SWGChannelSettings::asJsonObject() { if((ssb_mod_settings != nullptr) && (ssb_mod_settings->isSet())){ toJsonValue(QString("SSBModSettings"), ssb_mod_settings, obj, QString("SWGSSBModSettings")); } + if((udp_sink_settings != nullptr) && (udp_sink_settings->isSet())){ + toJsonValue(QString("UDPSinkSettings"), udp_sink_settings, obj, QString("SWGUDPSinkSettings")); + } if((wfm_mod_settings != nullptr) && (wfm_mod_settings->isSet())){ toJsonValue(QString("WFMModSettings"), wfm_mod_settings, obj, QString("SWGWFMModSettings")); } @@ -259,6 +271,16 @@ SWGChannelSettings::setSsbModSettings(SWGSSBModSettings* ssb_mod_settings) { this->m_ssb_mod_settings_isSet = true; } +SWGUDPSinkSettings* +SWGChannelSettings::getUdpSinkSettings() { + return udp_sink_settings; +} +void +SWGChannelSettings::setUdpSinkSettings(SWGUDPSinkSettings* udp_sink_settings) { + this->udp_sink_settings = udp_sink_settings; + this->m_udp_sink_settings_isSet = true; +} + SWGWFMModSettings* SWGChannelSettings::getWfmModSettings() { return wfm_mod_settings; @@ -282,6 +304,7 @@ SWGChannelSettings::isSet(){ if(nfm_demod_settings != nullptr && nfm_demod_settings->isSet()){ isObjectUpdated = true; break;} if(nfm_mod_settings != nullptr && nfm_mod_settings->isSet()){ isObjectUpdated = true; break;} if(ssb_mod_settings != nullptr && ssb_mod_settings->isSet()){ isObjectUpdated = true; break;} + if(udp_sink_settings != nullptr && udp_sink_settings->isSet()){ isObjectUpdated = true; break;} if(wfm_mod_settings != nullptr && wfm_mod_settings->isSet()){ isObjectUpdated = true; break;} }while(false); return isObjectUpdated; diff --git a/swagger/sdrangel/code/qt5/client/SWGChannelSettings.h b/swagger/sdrangel/code/qt5/client/SWGChannelSettings.h index d56fa501f..94fdab7d0 100644 --- a/swagger/sdrangel/code/qt5/client/SWGChannelSettings.h +++ b/swagger/sdrangel/code/qt5/client/SWGChannelSettings.h @@ -28,6 +28,7 @@ #include "SWGNFMDemodSettings.h" #include "SWGNFMModSettings.h" #include "SWGSSBModSettings.h" +#include "SWGUDPSinkSettings.h" #include "SWGWFMModSettings.h" #include @@ -73,6 +74,9 @@ public: SWGSSBModSettings* getSsbModSettings(); void setSsbModSettings(SWGSSBModSettings* ssb_mod_settings); + SWGUDPSinkSettings* getUdpSinkSettings(); + void setUdpSinkSettings(SWGUDPSinkSettings* udp_sink_settings); + SWGWFMModSettings* getWfmModSettings(); void setWfmModSettings(SWGWFMModSettings* wfm_mod_settings); @@ -104,6 +108,9 @@ private: SWGSSBModSettings* ssb_mod_settings; bool m_ssb_mod_settings_isSet; + SWGUDPSinkSettings* udp_sink_settings; + bool m_udp_sink_settings_isSet; + SWGWFMModSettings* wfm_mod_settings; bool m_wfm_mod_settings_isSet; diff --git a/swagger/sdrangel/code/qt5/client/SWGModelFactory.h b/swagger/sdrangel/code/qt5/client/SWGModelFactory.h index a97d80f3a..992ff5081 100644 --- a/swagger/sdrangel/code/qt5/client/SWGModelFactory.h +++ b/swagger/sdrangel/code/qt5/client/SWGModelFactory.h @@ -66,6 +66,8 @@ #include "SWGSSBModSettings.h" #include "SWGSamplingDevice.h" #include "SWGSuccessResponse.h" +#include "SWGUDPSinkReport.h" +#include "SWGUDPSinkSettings.h" #include "SWGWFMModReport.h" #include "SWGWFMModSettings.h" @@ -228,6 +230,12 @@ namespace SWGSDRangel { if(QString("SWGSuccessResponse").compare(type) == 0) { return new SWGSuccessResponse(); } + if(QString("SWGUDPSinkReport").compare(type) == 0) { + return new SWGUDPSinkReport(); + } + if(QString("SWGUDPSinkSettings").compare(type) == 0) { + return new SWGUDPSinkSettings(); + } if(QString("SWGWFMModReport").compare(type) == 0) { return new SWGWFMModReport(); } diff --git a/swagger/sdrangel/code/qt5/client/SWGUDPSinkReport.cpp b/swagger/sdrangel/code/qt5/client/SWGUDPSinkReport.cpp new file mode 100644 index 000000000..572ad9793 --- /dev/null +++ b/swagger/sdrangel/code/qt5/client/SWGUDPSinkReport.cpp @@ -0,0 +1,127 @@ +/** + * SDRangel + * This is the web REST/JSON API of SDRangel SDR software. SDRangel is an Open Source Qt5/OpenGL 3.0+ (4.3+ in Windows) GUI and server Software Defined Radio and signal analyzer in software. It supports Airspy, BladeRF, HackRF, LimeSDR, PlutoSDR, RTL-SDR, SDRplay RSP1 and FunCube --- Limitations and specifcities: * In SDRangel GUI the first Rx device set cannot be deleted. Conversely the server starts with no device sets and its number of device sets can be reduced to zero by as many calls as necessary to /sdrangel/deviceset with DELETE method. * Stopping instance i.e. /sdrangel with DELETE method is a server only feature. It allows stopping the instance nicely. * Preset import and export from/to file is a server only feature. * Device set focus is a GUI only feature. * The following channels are not implemented (status 501 is returned): ATV demodulator, Channel Analyzer, Channel Analyzer NG, LoRa demodulator, TCP source * The content type returned is always application/json except in the following cases: * An incorrect URL was specified: this document is returned as text/html with a status 400 --- + * + * OpenAPI spec version: 4.0.0 + * Contact: f4exb06@gmail.com + * + * NOTE: This class is auto generated by the swagger code generator program. + * https://github.com/swagger-api/swagger-codegen.git + * Do not edit the class manually. + */ + + +#include "SWGUDPSinkReport.h" + +#include "SWGHelpers.h" + +#include +#include +#include +#include + +namespace SWGSDRangel { + +SWGUDPSinkReport::SWGUDPSinkReport(QString* json) { + init(); + this->fromJson(*json); +} + +SWGUDPSinkReport::SWGUDPSinkReport() { + channel_power_db = 0.0f; + m_channel_power_db_isSet = false; + channel_sample_rate = 0; + m_channel_sample_rate_isSet = false; +} + +SWGUDPSinkReport::~SWGUDPSinkReport() { + this->cleanup(); +} + +void +SWGUDPSinkReport::init() { + channel_power_db = 0.0f; + m_channel_power_db_isSet = false; + channel_sample_rate = 0; + m_channel_sample_rate_isSet = false; +} + +void +SWGUDPSinkReport::cleanup() { + + +} + +SWGUDPSinkReport* +SWGUDPSinkReport::fromJson(QString &json) { + QByteArray array (json.toStdString().c_str()); + QJsonDocument doc = QJsonDocument::fromJson(array); + QJsonObject jsonObject = doc.object(); + this->fromJsonObject(jsonObject); + return this; +} + +void +SWGUDPSinkReport::fromJsonObject(QJsonObject &pJson) { + ::SWGSDRangel::setValue(&channel_power_db, pJson["channelPowerDB"], "float", ""); + + ::SWGSDRangel::setValue(&channel_sample_rate, pJson["channelSampleRate"], "qint32", ""); + +} + +QString +SWGUDPSinkReport::asJson () +{ + QJsonObject* obj = this->asJsonObject(); + + QJsonDocument doc(*obj); + QByteArray bytes = doc.toJson(); + delete obj; + return QString(bytes); +} + +QJsonObject* +SWGUDPSinkReport::asJsonObject() { + QJsonObject* obj = new QJsonObject(); + if(m_channel_power_db_isSet){ + obj->insert("channelPowerDB", QJsonValue(channel_power_db)); + } + if(m_channel_sample_rate_isSet){ + obj->insert("channelSampleRate", QJsonValue(channel_sample_rate)); + } + + return obj; +} + +float +SWGUDPSinkReport::getChannelPowerDb() { + return channel_power_db; +} +void +SWGUDPSinkReport::setChannelPowerDb(float channel_power_db) { + this->channel_power_db = channel_power_db; + this->m_channel_power_db_isSet = true; +} + +qint32 +SWGUDPSinkReport::getChannelSampleRate() { + return channel_sample_rate; +} +void +SWGUDPSinkReport::setChannelSampleRate(qint32 channel_sample_rate) { + this->channel_sample_rate = channel_sample_rate; + this->m_channel_sample_rate_isSet = true; +} + + +bool +SWGUDPSinkReport::isSet(){ + bool isObjectUpdated = false; + do{ + if(m_channel_power_db_isSet){ isObjectUpdated = true; break;} + if(m_channel_sample_rate_isSet){ isObjectUpdated = true; break;} + }while(false); + return isObjectUpdated; +} +} + diff --git a/swagger/sdrangel/code/qt5/client/SWGUDPSinkReport.h b/swagger/sdrangel/code/qt5/client/SWGUDPSinkReport.h new file mode 100644 index 000000000..21f7a184b --- /dev/null +++ b/swagger/sdrangel/code/qt5/client/SWGUDPSinkReport.h @@ -0,0 +1,64 @@ +/** + * SDRangel + * This is the web REST/JSON API of SDRangel SDR software. SDRangel is an Open Source Qt5/OpenGL 3.0+ (4.3+ in Windows) GUI and server Software Defined Radio and signal analyzer in software. It supports Airspy, BladeRF, HackRF, LimeSDR, PlutoSDR, RTL-SDR, SDRplay RSP1 and FunCube --- Limitations and specifcities: * In SDRangel GUI the first Rx device set cannot be deleted. Conversely the server starts with no device sets and its number of device sets can be reduced to zero by as many calls as necessary to /sdrangel/deviceset with DELETE method. * Stopping instance i.e. /sdrangel with DELETE method is a server only feature. It allows stopping the instance nicely. * Preset import and export from/to file is a server only feature. * Device set focus is a GUI only feature. * The following channels are not implemented (status 501 is returned): ATV demodulator, Channel Analyzer, Channel Analyzer NG, LoRa demodulator, TCP source * The content type returned is always application/json except in the following cases: * An incorrect URL was specified: this document is returned as text/html with a status 400 --- + * + * OpenAPI spec version: 4.0.0 + * Contact: f4exb06@gmail.com + * + * NOTE: This class is auto generated by the swagger code generator program. + * https://github.com/swagger-api/swagger-codegen.git + * Do not edit the class manually. + */ + +/* + * SWGUDPSinkReport.h + * + * UDPSink + */ + +#ifndef SWGUDPSinkReport_H_ +#define SWGUDPSinkReport_H_ + +#include + + + +#include "SWGObject.h" +#include "export.h" + +namespace SWGSDRangel { + +class SWG_API SWGUDPSinkReport: public SWGObject { +public: + SWGUDPSinkReport(); + SWGUDPSinkReport(QString* json); + virtual ~SWGUDPSinkReport(); + void init(); + void cleanup(); + + virtual QString asJson () override; + virtual QJsonObject* asJsonObject() override; + virtual void fromJsonObject(QJsonObject &json) override; + virtual SWGUDPSinkReport* fromJson(QString &jsonString) override; + + float getChannelPowerDb(); + void setChannelPowerDb(float channel_power_db); + + qint32 getChannelSampleRate(); + void setChannelSampleRate(qint32 channel_sample_rate); + + + virtual bool isSet() override; + +private: + float channel_power_db; + bool m_channel_power_db_isSet; + + qint32 channel_sample_rate; + bool m_channel_sample_rate_isSet; + +}; + +} + +#endif /* SWGUDPSinkReport_H_ */ diff --git a/swagger/sdrangel/code/qt5/client/SWGUDPSinkSettings.cpp b/swagger/sdrangel/code/qt5/client/SWGUDPSinkSettings.cpp new file mode 100644 index 000000000..312cbf7b1 --- /dev/null +++ b/swagger/sdrangel/code/qt5/client/SWGUDPSinkSettings.cpp @@ -0,0 +1,488 @@ +/** + * SDRangel + * This is the web REST/JSON API of SDRangel SDR software. SDRangel is an Open Source Qt5/OpenGL 3.0+ (4.3+ in Windows) GUI and server Software Defined Radio and signal analyzer in software. It supports Airspy, BladeRF, HackRF, LimeSDR, PlutoSDR, RTL-SDR, SDRplay RSP1 and FunCube --- Limitations and specifcities: * In SDRangel GUI the first Rx device set cannot be deleted. Conversely the server starts with no device sets and its number of device sets can be reduced to zero by as many calls as necessary to /sdrangel/deviceset with DELETE method. * Stopping instance i.e. /sdrangel with DELETE method is a server only feature. It allows stopping the instance nicely. * Preset import and export from/to file is a server only feature. * Device set focus is a GUI only feature. * The following channels are not implemented (status 501 is returned): ATV demodulator, Channel Analyzer, Channel Analyzer NG, LoRa demodulator, TCP source * The content type returned is always application/json except in the following cases: * An incorrect URL was specified: this document is returned as text/html with a status 400 --- + * + * OpenAPI spec version: 4.0.0 + * Contact: f4exb06@gmail.com + * + * NOTE: This class is auto generated by the swagger code generator program. + * https://github.com/swagger-api/swagger-codegen.git + * Do not edit the class manually. + */ + + +#include "SWGUDPSinkSettings.h" + +#include "SWGHelpers.h" + +#include +#include +#include +#include + +namespace SWGSDRangel { + +SWGUDPSinkSettings::SWGUDPSinkSettings(QString* json) { + init(); + this->fromJson(*json); +} + +SWGUDPSinkSettings::SWGUDPSinkSettings() { + sample_format = 0; + m_sample_format_isSet = false; + input_sample_rate = 0.0f; + m_input_sample_rate_isSet = false; + input_frequency_offset = 0L; + m_input_frequency_offset_isSet = false; + rf_bandwidth = 0.0f; + m_rf_bandwidth_isSet = false; + low_cutoff = 0.0f; + m_low_cutoff_isSet = false; + fm_deviation = 0; + m_fm_deviation_isSet = false; + am_mod_factor = 0.0f; + m_am_mod_factor_isSet = false; + channel_mute = 0; + m_channel_mute_isSet = false; + gain_in = 0.0f; + m_gain_in_isSet = false; + gain_out = 0.0f; + m_gain_out_isSet = false; + squelch = 0.0f; + m_squelch_isSet = false; + squelch_gate = 0.0f; + m_squelch_gate_isSet = false; + squelch_enabled = 0; + m_squelch_enabled_isSet = false; + auto_rw_balance = 0; + m_auto_rw_balance_isSet = false; + stereo_input = 0; + m_stereo_input_isSet = false; + rgb_color = 0; + m_rgb_color_isSet = false; + udp_address = nullptr; + m_udp_address_isSet = false; + udp_port = 0; + m_udp_port_isSet = false; + title = nullptr; + m_title_isSet = false; +} + +SWGUDPSinkSettings::~SWGUDPSinkSettings() { + this->cleanup(); +} + +void +SWGUDPSinkSettings::init() { + sample_format = 0; + m_sample_format_isSet = false; + input_sample_rate = 0.0f; + m_input_sample_rate_isSet = false; + input_frequency_offset = 0L; + m_input_frequency_offset_isSet = false; + rf_bandwidth = 0.0f; + m_rf_bandwidth_isSet = false; + low_cutoff = 0.0f; + m_low_cutoff_isSet = false; + fm_deviation = 0; + m_fm_deviation_isSet = false; + am_mod_factor = 0.0f; + m_am_mod_factor_isSet = false; + channel_mute = 0; + m_channel_mute_isSet = false; + gain_in = 0.0f; + m_gain_in_isSet = false; + gain_out = 0.0f; + m_gain_out_isSet = false; + squelch = 0.0f; + m_squelch_isSet = false; + squelch_gate = 0.0f; + m_squelch_gate_isSet = false; + squelch_enabled = 0; + m_squelch_enabled_isSet = false; + auto_rw_balance = 0; + m_auto_rw_balance_isSet = false; + stereo_input = 0; + m_stereo_input_isSet = false; + rgb_color = 0; + m_rgb_color_isSet = false; + udp_address = new QString(""); + m_udp_address_isSet = false; + udp_port = 0; + m_udp_port_isSet = false; + title = new QString(""); + m_title_isSet = false; +} + +void +SWGUDPSinkSettings::cleanup() { + + + + + + + + + + + + + + + + + if(udp_address != nullptr) { + delete udp_address; + } + + if(title != nullptr) { + delete title; + } +} + +SWGUDPSinkSettings* +SWGUDPSinkSettings::fromJson(QString &json) { + QByteArray array (json.toStdString().c_str()); + QJsonDocument doc = QJsonDocument::fromJson(array); + QJsonObject jsonObject = doc.object(); + this->fromJsonObject(jsonObject); + return this; +} + +void +SWGUDPSinkSettings::fromJsonObject(QJsonObject &pJson) { + ::SWGSDRangel::setValue(&sample_format, pJson["sampleFormat"], "qint32", ""); + + ::SWGSDRangel::setValue(&input_sample_rate, pJson["inputSampleRate"], "float", ""); + + ::SWGSDRangel::setValue(&input_frequency_offset, pJson["inputFrequencyOffset"], "qint64", ""); + + ::SWGSDRangel::setValue(&rf_bandwidth, pJson["rfBandwidth"], "float", ""); + + ::SWGSDRangel::setValue(&low_cutoff, pJson["lowCutoff"], "float", ""); + + ::SWGSDRangel::setValue(&fm_deviation, pJson["fmDeviation"], "qint32", ""); + + ::SWGSDRangel::setValue(&am_mod_factor, pJson["amModFactor"], "float", ""); + + ::SWGSDRangel::setValue(&channel_mute, pJson["channelMute"], "qint32", ""); + + ::SWGSDRangel::setValue(&gain_in, pJson["gainIn"], "float", ""); + + ::SWGSDRangel::setValue(&gain_out, pJson["gainOut"], "float", ""); + + ::SWGSDRangel::setValue(&squelch, pJson["squelch"], "float", ""); + + ::SWGSDRangel::setValue(&squelch_gate, pJson["squelchGate"], "float", ""); + + ::SWGSDRangel::setValue(&squelch_enabled, pJson["squelchEnabled"], "qint32", ""); + + ::SWGSDRangel::setValue(&auto_rw_balance, pJson["autoRWBalance"], "qint32", ""); + + ::SWGSDRangel::setValue(&stereo_input, pJson["stereoInput"], "qint32", ""); + + ::SWGSDRangel::setValue(&rgb_color, pJson["rgbColor"], "qint32", ""); + + ::SWGSDRangel::setValue(&udp_address, pJson["udpAddress"], "QString", "QString"); + + ::SWGSDRangel::setValue(&udp_port, pJson["udpPort"], "qint32", ""); + + ::SWGSDRangel::setValue(&title, pJson["title"], "QString", "QString"); + +} + +QString +SWGUDPSinkSettings::asJson () +{ + QJsonObject* obj = this->asJsonObject(); + + QJsonDocument doc(*obj); + QByteArray bytes = doc.toJson(); + delete obj; + return QString(bytes); +} + +QJsonObject* +SWGUDPSinkSettings::asJsonObject() { + QJsonObject* obj = new QJsonObject(); + if(m_sample_format_isSet){ + obj->insert("sampleFormat", QJsonValue(sample_format)); + } + if(m_input_sample_rate_isSet){ + obj->insert("inputSampleRate", QJsonValue(input_sample_rate)); + } + if(m_input_frequency_offset_isSet){ + obj->insert("inputFrequencyOffset", QJsonValue(input_frequency_offset)); + } + if(m_rf_bandwidth_isSet){ + obj->insert("rfBandwidth", QJsonValue(rf_bandwidth)); + } + if(m_low_cutoff_isSet){ + obj->insert("lowCutoff", QJsonValue(low_cutoff)); + } + if(m_fm_deviation_isSet){ + obj->insert("fmDeviation", QJsonValue(fm_deviation)); + } + if(m_am_mod_factor_isSet){ + obj->insert("amModFactor", QJsonValue(am_mod_factor)); + } + if(m_channel_mute_isSet){ + obj->insert("channelMute", QJsonValue(channel_mute)); + } + if(m_gain_in_isSet){ + obj->insert("gainIn", QJsonValue(gain_in)); + } + if(m_gain_out_isSet){ + obj->insert("gainOut", QJsonValue(gain_out)); + } + if(m_squelch_isSet){ + obj->insert("squelch", QJsonValue(squelch)); + } + if(m_squelch_gate_isSet){ + obj->insert("squelchGate", QJsonValue(squelch_gate)); + } + if(m_squelch_enabled_isSet){ + obj->insert("squelchEnabled", QJsonValue(squelch_enabled)); + } + if(m_auto_rw_balance_isSet){ + obj->insert("autoRWBalance", QJsonValue(auto_rw_balance)); + } + if(m_stereo_input_isSet){ + obj->insert("stereoInput", QJsonValue(stereo_input)); + } + if(m_rgb_color_isSet){ + obj->insert("rgbColor", QJsonValue(rgb_color)); + } + 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)); + } + if(title != nullptr && *title != QString("")){ + toJsonValue(QString("title"), title, obj, QString("QString")); + } + + return obj; +} + +qint32 +SWGUDPSinkSettings::getSampleFormat() { + return sample_format; +} +void +SWGUDPSinkSettings::setSampleFormat(qint32 sample_format) { + this->sample_format = sample_format; + this->m_sample_format_isSet = true; +} + +float +SWGUDPSinkSettings::getInputSampleRate() { + return input_sample_rate; +} +void +SWGUDPSinkSettings::setInputSampleRate(float input_sample_rate) { + this->input_sample_rate = input_sample_rate; + this->m_input_sample_rate_isSet = true; +} + +qint64 +SWGUDPSinkSettings::getInputFrequencyOffset() { + return input_frequency_offset; +} +void +SWGUDPSinkSettings::setInputFrequencyOffset(qint64 input_frequency_offset) { + this->input_frequency_offset = input_frequency_offset; + this->m_input_frequency_offset_isSet = true; +} + +float +SWGUDPSinkSettings::getRfBandwidth() { + return rf_bandwidth; +} +void +SWGUDPSinkSettings::setRfBandwidth(float rf_bandwidth) { + this->rf_bandwidth = rf_bandwidth; + this->m_rf_bandwidth_isSet = true; +} + +float +SWGUDPSinkSettings::getLowCutoff() { + return low_cutoff; +} +void +SWGUDPSinkSettings::setLowCutoff(float low_cutoff) { + this->low_cutoff = low_cutoff; + this->m_low_cutoff_isSet = true; +} + +qint32 +SWGUDPSinkSettings::getFmDeviation() { + return fm_deviation; +} +void +SWGUDPSinkSettings::setFmDeviation(qint32 fm_deviation) { + this->fm_deviation = fm_deviation; + this->m_fm_deviation_isSet = true; +} + +float +SWGUDPSinkSettings::getAmModFactor() { + return am_mod_factor; +} +void +SWGUDPSinkSettings::setAmModFactor(float am_mod_factor) { + this->am_mod_factor = am_mod_factor; + this->m_am_mod_factor_isSet = true; +} + +qint32 +SWGUDPSinkSettings::getChannelMute() { + return channel_mute; +} +void +SWGUDPSinkSettings::setChannelMute(qint32 channel_mute) { + this->channel_mute = channel_mute; + this->m_channel_mute_isSet = true; +} + +float +SWGUDPSinkSettings::getGainIn() { + return gain_in; +} +void +SWGUDPSinkSettings::setGainIn(float gain_in) { + this->gain_in = gain_in; + this->m_gain_in_isSet = true; +} + +float +SWGUDPSinkSettings::getGainOut() { + return gain_out; +} +void +SWGUDPSinkSettings::setGainOut(float gain_out) { + this->gain_out = gain_out; + this->m_gain_out_isSet = true; +} + +float +SWGUDPSinkSettings::getSquelch() { + return squelch; +} +void +SWGUDPSinkSettings::setSquelch(float squelch) { + this->squelch = squelch; + this->m_squelch_isSet = true; +} + +float +SWGUDPSinkSettings::getSquelchGate() { + return squelch_gate; +} +void +SWGUDPSinkSettings::setSquelchGate(float squelch_gate) { + this->squelch_gate = squelch_gate; + this->m_squelch_gate_isSet = true; +} + +qint32 +SWGUDPSinkSettings::getSquelchEnabled() { + return squelch_enabled; +} +void +SWGUDPSinkSettings::setSquelchEnabled(qint32 squelch_enabled) { + this->squelch_enabled = squelch_enabled; + this->m_squelch_enabled_isSet = true; +} + +qint32 +SWGUDPSinkSettings::getAutoRwBalance() { + return auto_rw_balance; +} +void +SWGUDPSinkSettings::setAutoRwBalance(qint32 auto_rw_balance) { + this->auto_rw_balance = auto_rw_balance; + this->m_auto_rw_balance_isSet = true; +} + +qint32 +SWGUDPSinkSettings::getStereoInput() { + return stereo_input; +} +void +SWGUDPSinkSettings::setStereoInput(qint32 stereo_input) { + this->stereo_input = stereo_input; + this->m_stereo_input_isSet = true; +} + +qint32 +SWGUDPSinkSettings::getRgbColor() { + return rgb_color; +} +void +SWGUDPSinkSettings::setRgbColor(qint32 rgb_color) { + this->rgb_color = rgb_color; + this->m_rgb_color_isSet = true; +} + +QString* +SWGUDPSinkSettings::getUdpAddress() { + return udp_address; +} +void +SWGUDPSinkSettings::setUdpAddress(QString* udp_address) { + this->udp_address = udp_address; + this->m_udp_address_isSet = true; +} + +qint32 +SWGUDPSinkSettings::getUdpPort() { + return udp_port; +} +void +SWGUDPSinkSettings::setUdpPort(qint32 udp_port) { + this->udp_port = udp_port; + this->m_udp_port_isSet = true; +} + +QString* +SWGUDPSinkSettings::getTitle() { + return title; +} +void +SWGUDPSinkSettings::setTitle(QString* title) { + this->title = title; + this->m_title_isSet = true; +} + + +bool +SWGUDPSinkSettings::isSet(){ + bool isObjectUpdated = false; + do{ + if(m_sample_format_isSet){ isObjectUpdated = true; break;} + if(m_input_sample_rate_isSet){ isObjectUpdated = true; break;} + if(m_input_frequency_offset_isSet){ isObjectUpdated = true; break;} + if(m_rf_bandwidth_isSet){ isObjectUpdated = true; break;} + if(m_low_cutoff_isSet){ isObjectUpdated = true; break;} + if(m_fm_deviation_isSet){ isObjectUpdated = true; break;} + if(m_am_mod_factor_isSet){ isObjectUpdated = true; break;} + if(m_channel_mute_isSet){ isObjectUpdated = true; break;} + if(m_gain_in_isSet){ isObjectUpdated = true; break;} + if(m_gain_out_isSet){ isObjectUpdated = true; break;} + if(m_squelch_isSet){ isObjectUpdated = true; break;} + if(m_squelch_gate_isSet){ isObjectUpdated = true; break;} + if(m_squelch_enabled_isSet){ isObjectUpdated = true; break;} + if(m_auto_rw_balance_isSet){ isObjectUpdated = true; break;} + if(m_stereo_input_isSet){ isObjectUpdated = true; break;} + if(m_rgb_color_isSet){ isObjectUpdated = true; break;} + if(udp_address != nullptr && *udp_address != QString("")){ isObjectUpdated = true; break;} + if(m_udp_port_isSet){ isObjectUpdated = true; break;} + if(title != nullptr && *title != QString("")){ isObjectUpdated = true; break;} + }while(false); + return isObjectUpdated; +} +} + diff --git a/swagger/sdrangel/code/qt5/client/SWGUDPSinkSettings.h b/swagger/sdrangel/code/qt5/client/SWGUDPSinkSettings.h new file mode 100644 index 000000000..f8486e24b --- /dev/null +++ b/swagger/sdrangel/code/qt5/client/SWGUDPSinkSettings.h @@ -0,0 +1,167 @@ +/** + * SDRangel + * This is the web REST/JSON API of SDRangel SDR software. SDRangel is an Open Source Qt5/OpenGL 3.0+ (4.3+ in Windows) GUI and server Software Defined Radio and signal analyzer in software. It supports Airspy, BladeRF, HackRF, LimeSDR, PlutoSDR, RTL-SDR, SDRplay RSP1 and FunCube --- Limitations and specifcities: * In SDRangel GUI the first Rx device set cannot be deleted. Conversely the server starts with no device sets and its number of device sets can be reduced to zero by as many calls as necessary to /sdrangel/deviceset with DELETE method. * Stopping instance i.e. /sdrangel with DELETE method is a server only feature. It allows stopping the instance nicely. * Preset import and export from/to file is a server only feature. * Device set focus is a GUI only feature. * The following channels are not implemented (status 501 is returned): ATV demodulator, Channel Analyzer, Channel Analyzer NG, LoRa demodulator, TCP source * The content type returned is always application/json except in the following cases: * An incorrect URL was specified: this document is returned as text/html with a status 400 --- + * + * OpenAPI spec version: 4.0.0 + * Contact: f4exb06@gmail.com + * + * NOTE: This class is auto generated by the swagger code generator program. + * https://github.com/swagger-api/swagger-codegen.git + * Do not edit the class manually. + */ + +/* + * SWGUDPSinkSettings.h + * + * UDPSink + */ + +#ifndef SWGUDPSinkSettings_H_ +#define SWGUDPSinkSettings_H_ + +#include + + +#include + +#include "SWGObject.h" +#include "export.h" + +namespace SWGSDRangel { + +class SWG_API SWGUDPSinkSettings: public SWGObject { +public: + SWGUDPSinkSettings(); + SWGUDPSinkSettings(QString* json); + virtual ~SWGUDPSinkSettings(); + void init(); + void cleanup(); + + virtual QString asJson () override; + virtual QJsonObject* asJsonObject() override; + virtual void fromJsonObject(QJsonObject &json) override; + virtual SWGUDPSinkSettings* fromJson(QString &jsonString) override; + + qint32 getSampleFormat(); + void setSampleFormat(qint32 sample_format); + + float getInputSampleRate(); + void setInputSampleRate(float input_sample_rate); + + qint64 getInputFrequencyOffset(); + void setInputFrequencyOffset(qint64 input_frequency_offset); + + float getRfBandwidth(); + void setRfBandwidth(float rf_bandwidth); + + float getLowCutoff(); + void setLowCutoff(float low_cutoff); + + qint32 getFmDeviation(); + void setFmDeviation(qint32 fm_deviation); + + float getAmModFactor(); + void setAmModFactor(float am_mod_factor); + + qint32 getChannelMute(); + void setChannelMute(qint32 channel_mute); + + float getGainIn(); + void setGainIn(float gain_in); + + float getGainOut(); + void setGainOut(float gain_out); + + float getSquelch(); + void setSquelch(float squelch); + + float getSquelchGate(); + void setSquelchGate(float squelch_gate); + + qint32 getSquelchEnabled(); + void setSquelchEnabled(qint32 squelch_enabled); + + qint32 getAutoRwBalance(); + void setAutoRwBalance(qint32 auto_rw_balance); + + qint32 getStereoInput(); + void setStereoInput(qint32 stereo_input); + + qint32 getRgbColor(); + void setRgbColor(qint32 rgb_color); + + QString* getUdpAddress(); + void setUdpAddress(QString* udp_address); + + qint32 getUdpPort(); + void setUdpPort(qint32 udp_port); + + QString* getTitle(); + void setTitle(QString* title); + + + virtual bool isSet() override; + +private: + qint32 sample_format; + bool m_sample_format_isSet; + + float input_sample_rate; + bool m_input_sample_rate_isSet; + + qint64 input_frequency_offset; + bool m_input_frequency_offset_isSet; + + float rf_bandwidth; + bool m_rf_bandwidth_isSet; + + float low_cutoff; + bool m_low_cutoff_isSet; + + qint32 fm_deviation; + bool m_fm_deviation_isSet; + + float am_mod_factor; + bool m_am_mod_factor_isSet; + + qint32 channel_mute; + bool m_channel_mute_isSet; + + float gain_in; + bool m_gain_in_isSet; + + float gain_out; + bool m_gain_out_isSet; + + float squelch; + bool m_squelch_isSet; + + float squelch_gate; + bool m_squelch_gate_isSet; + + qint32 squelch_enabled; + bool m_squelch_enabled_isSet; + + qint32 auto_rw_balance; + bool m_auto_rw_balance_isSet; + + qint32 stereo_input; + bool m_stereo_input_isSet; + + qint32 rgb_color; + bool m_rgb_color_isSet; + + QString* udp_address; + bool m_udp_address_isSet; + + qint32 udp_port; + bool m_udp_port_isSet; + + QString* title; + bool m_title_isSet; + +}; + +} + +#endif /* SWGUDPSinkSettings_H_ */ diff --git a/swagger/sdrangel/examples/tx_test.py b/swagger/sdrangel/examples/tx_test.py index ea317d9ee..4332402ee 100644 --- a/swagger/sdrangel/examples/tx_test.py +++ b/swagger/sdrangel/examples/tx_test.py @@ -204,6 +204,17 @@ def setupChannel(options): settings["SSBModSettings"]["toneFrequency"] = 600 settings["SSBModSettings"]["bandwidth"] = 1000 settings["SSBModSettings"]["lowCut"] = 300 + elif options.channel_id == "UDPSink": + settings["UDPSinkSettings"]["title"] = "Test UDP Sink" + settings["UDPSinkSettings"]["inputFrequencyOffset"] = options.channel_freq + settings["UDPSinkSettings"]["rfBandwidth"] = 12500 + settings["UDPSinkSettings"]["fmDeviation"] = 5000 + settings["UDPSinkSettings"]["autoRWBalance"] = 0 + settings["UDPSinkSettings"]["stereoInput"] = 0 + settings["UDPSinkSettings"]["udpAddress"] = "127.0.0.1" + settings["UDPSinkSettings"]["udpPort"] = 9998 + settings["UDPSinkSettings"]["inputSampleRate"] = 24000 + settings["UDPSinkSettings"]["sampleFormat"] = 1 # FormatNFM elif options.channel_id == "WFMMod": settings["WFMModSettings"]["title"] = "Test WFM" settings["WFMModSettings"]["inputFrequencyOffset"] = options.channel_freq