diff --git a/doc/img/AudioInput_plugin.png b/doc/img/AudioInput_plugin.png index 2a875dad3..e8e5432fd 100644 Binary files a/doc/img/AudioInput_plugin.png and b/doc/img/AudioInput_plugin.png differ diff --git a/doc/img/AudioInput_plugin.xcf b/doc/img/AudioInput_plugin.xcf index 988be4707..355344f63 100644 Binary files a/doc/img/AudioInput_plugin.xcf and b/doc/img/AudioInput_plugin.xcf differ diff --git a/plugins/samplesource/audioinput/audioinput.cpp b/plugins/samplesource/audioinput/audioinput.cpp index bebd89454..8c10c5d2f 100644 --- a/plugins/samplesource/audioinput/audioinput.cpp +++ b/plugins/samplesource/audioinput/audioinput.cpp @@ -312,6 +312,14 @@ void AudioInput::applySettings(const AudioInputSettings& settings, QListconfigureCorrections(settings.m_dcBlock, settings.m_iqImbalance); + qDebug("AudioInput::applySettings: corrections: DC block: %s IQ imbalance: %s", + settings.m_dcBlock ? "true" : "false", + settings.m_iqImbalance ? "true" : "false"); + } + if (settingsKeys.contains("useReverseAPI")) { bool fullUpdate = (settingsKeys.contains("useReverseAPI") && settings.m_useReverseAPI) || @@ -423,6 +431,12 @@ void AudioInput::webapiUpdateDeviceSettings( if (deviceSettingsKeys.contains("iqMapping")) { settings.m_iqMapping = (AudioInputSettings::IQMapping)response.getAudioInputSettings()->getIqMapping(); } + if (deviceSettingsKeys.contains("dcBlock")) { + settings.m_dcBlock = response.getAudioInputSettings()->getDcBlock() != 0; + } + if (deviceSettingsKeys.contains("iqImbalance")) { + settings.m_iqImbalance = response.getAudioInputSettings()->getIqImbalance() != 0; + } if (deviceSettingsKeys.contains("useReverseAPI")) { settings.m_useReverseAPI = response.getAudioInputSettings()->getUseReverseApi() != 0; } @@ -444,6 +458,8 @@ void AudioInput::webapiFormatDeviceSettings(SWGSDRangel::SWGDeviceSettings& resp response.getAudioInputSettings()->setVolume(settings.m_volume); response.getAudioInputSettings()->setLog2Decim(settings.m_log2Decim); response.getAudioInputSettings()->setIqMapping((int)settings.m_iqMapping); + response.getAudioInputSettings()->setDcBlock(settings.m_dcBlock ? 1 : 0); + response.getAudioInputSettings()->setIqImbalance(settings.m_iqImbalance ? 1 : 0); response.getAudioInputSettings()->setUseReverseApi(settings.m_useReverseAPI ? 1 : 0); @@ -483,6 +499,12 @@ void AudioInput::webapiReverseSendSettings(const QList& deviceSettingsK if (deviceSettingsKeys.contains("iqMapping") || force) { swgAudioInputSettings->setIqMapping(settings.m_iqMapping); } + if (deviceSettingsKeys.contains("dcBlock") || force) { + swgAudioInputSettings->setDcBlock(settings.m_dcBlock ? 1 : 0); + } + if (deviceSettingsKeys.contains("iqImbalance") || force) { + swgAudioInputSettings->setIqImbalance(settings.m_iqImbalance ? 1 : 0); + } QString deviceSettingsURL = QString("http://%1:%2/sdrangel/deviceset/%3/device/settings") .arg(settings.m_reverseAPIAddress) diff --git a/plugins/samplesource/audioinput/audioinputgui.cpp b/plugins/samplesource/audioinput/audioinputgui.cpp index 4f227f195..f2aa2f451 100644 --- a/plugins/samplesource/audioinput/audioinputgui.cpp +++ b/plugins/samplesource/audioinput/audioinputgui.cpp @@ -242,6 +242,8 @@ void AudioInputGui::displaySettings() ui->volume->setValue((int)(m_settings.m_volume*10.0f)); ui->volumeText->setText(QString("%1").arg(m_settings.m_volume, 3, 'f', 1)); ui->channels->setCurrentIndex((int)m_settings.m_iqMapping); + ui->dcOffset->setChecked(m_settings.m_dcBlock); + ui->iqImbalance->setChecked(m_settings.m_iqImbalance); refreshSampleRates(ui->device->currentText()); } @@ -289,6 +291,20 @@ void AudioInputGui::on_channels_currentIndexChanged(int index) sendSettings(); } +void AudioInputGui::on_dcOffset_toggled(bool checked) +{ + m_settings.m_dcBlock = checked; + m_settingsKeys.append("dcBlock"); + sendSettings(); +} + +void AudioInputGui::on_iqImbalance_toggled(bool checked) +{ + m_settings.m_iqImbalance = checked; + m_settingsKeys.append("iqImbalance"); + sendSettings(); +} + void AudioInputGui::on_startStop_toggled(bool checked) { if (m_doApplySettings) @@ -376,5 +392,7 @@ void AudioInputGui::makeUIConnections() QObject::connect(ui->decim, QOverload::of(&QComboBox::currentIndexChanged), this, &AudioInputGui::on_decim_currentIndexChanged); QObject::connect(ui->volume, &QDial::valueChanged, this, &AudioInputGui::on_volume_valueChanged); QObject::connect(ui->channels, QOverload::of(&QComboBox::currentIndexChanged), this, &AudioInputGui::on_channels_currentIndexChanged); + QObject::connect(ui->dcOffset, &ButtonSwitch::toggled, this, &AudioInputGui::on_dcOffset_toggled); + QObject::connect(ui->iqImbalance, &ButtonSwitch::toggled, this, &AudioInputGui::on_iqImbalance_toggled); QObject::connect(ui->startStop, &ButtonSwitch::toggled, this, &AudioInputGui::on_startStop_toggled); } diff --git a/plugins/samplesource/audioinput/audioinputgui.h b/plugins/samplesource/audioinput/audioinputgui.h index cb9351fc0..17d25ccb5 100644 --- a/plugins/samplesource/audioinput/audioinputgui.h +++ b/plugins/samplesource/audioinput/audioinputgui.h @@ -77,6 +77,8 @@ private slots: void on_decim_currentIndexChanged(int index); void on_volume_valueChanged(int value); void on_channels_currentIndexChanged(int index); + void on_dcOffset_toggled(bool checked); + void on_iqImbalance_toggled(bool checked); void on_startStop_toggled(bool checked); void updateHardware(); void openDeviceSettingsDialog(const QPoint& p); diff --git a/plugins/samplesource/audioinput/audioinputgui.ui b/plugins/samplesource/audioinput/audioinputgui.ui index 0559cd88e..f54f5ceb5 100644 --- a/plugins/samplesource/audioinput/audioinputgui.ui +++ b/plugins/samplesource/audioinput/audioinputgui.ui @@ -114,6 +114,26 @@ + + + + Automatic DC offset removal + + + DC + + + + + + + Automatic IQ imbalance correction + + + IQ + + + diff --git a/plugins/samplesource/audioinput/audioinputsettings.cpp b/plugins/samplesource/audioinput/audioinputsettings.cpp index eb52ca869..dc51693f4 100644 --- a/plugins/samplesource/audioinput/audioinputsettings.cpp +++ b/plugins/samplesource/audioinput/audioinputsettings.cpp @@ -32,6 +32,8 @@ void AudioInputSettings::resetToDefaults() m_volume = 1.0f; m_log2Decim = 0; m_iqMapping = L; + m_dcBlock = false; + m_iqImbalance = false; m_useReverseAPI = false; m_reverseAPIAddress = "127.0.0.1"; m_reverseAPIPort = 8888; @@ -47,6 +49,8 @@ QByteArray AudioInputSettings::serialize() const s.writeFloat(3, m_volume); s.writeU32(4, m_log2Decim); s.writeS32(5, (int)m_iqMapping); + s.writeBool(6, m_dcBlock); + s.writeBool(7, m_iqImbalance); s.writeBool(24, m_useReverseAPI); s.writeString(25, m_reverseAPIAddress); @@ -75,6 +79,8 @@ bool AudioInputSettings::deserialize(const QByteArray& data) d.readFloat(3, &m_volume, 1.0f); d.readU32(4, &m_log2Decim, 0); d.readS32(5, (int *)&m_iqMapping, IQMapping::L); + d.readBool(6, &m_dcBlock, false); + d.readBool(7, &m_iqImbalance, false); d.readBool(24, &m_useReverseAPI, false); d.readString(25, &m_reverseAPIAddress, "127.0.0.1"); @@ -115,6 +121,12 @@ void AudioInputSettings::applySettings(const QStringList& settingsKeys, const Au if (settingsKeys.contains("iqMapping")) { m_iqMapping = settings.m_iqMapping; } + if (settingsKeys.contains("dcBlock")) { + m_dcBlock = settings.m_dcBlock; + } + if (settingsKeys.contains("iqImbalance")) { + m_iqImbalance = settings.m_iqImbalance; + } if (settingsKeys.contains("useReverseAPI")) { m_useReverseAPI = settings.m_useReverseAPI; } @@ -148,6 +160,12 @@ QString AudioInputSettings::getDebugString(const QStringList& settingsKeys, bool if (settingsKeys.contains("iqMapping") || force) { ostr << " m_iqMapping: " << m_iqMapping; } + if (settingsKeys.contains("dcBlock") || force) { + ostr << " m_dcBlock: " << m_dcBlock; + } + if (settingsKeys.contains("iqImbalance") || force) { + ostr << " m_iqImbalance: " << m_iqImbalance; + } if (settingsKeys.contains("useReverseAPI") || force) { ostr << " m_useReverseAPI: " << m_useReverseAPI; } diff --git a/plugins/samplesource/audioinput/audioinputsettings.h b/plugins/samplesource/audioinput/audioinputsettings.h index aecf4484a..1f4ccf0e8 100644 --- a/plugins/samplesource/audioinput/audioinputsettings.h +++ b/plugins/samplesource/audioinput/audioinputsettings.h @@ -34,6 +34,8 @@ struct AudioInputSettings { LR, RL } m_iqMapping; + bool m_dcBlock; + bool m_iqImbalance; bool m_useReverseAPI; QString m_reverseAPIAddress; diff --git a/plugins/samplesource/audioinput/readme.md b/plugins/samplesource/audioinput/readme.md index 08e70b8c9..3e1e5d6c3 100644 --- a/plugins/samplesource/audioinput/readme.md +++ b/plugins/samplesource/audioinput/readme.md @@ -46,3 +46,11 @@ This controls how the left and right audio channels map on to the IQ channels. * Mono R - Same as above but takes the right audio channel for the real signal. * I=L, Q=R - The left audio channel is driven to the I channel. The right audio channel is driven to the Q channel for a complex (analytic signal)input. * I=R, Q=L - The right audio channel is driven to the I channel. The left audio channel is driven to the Q channel for a complex (analytic signal)input. + +

8: Auto remove DC component

+ +Software DSP auto remove DC correction. + +

9: Auto make I/Q balance

+ +Software DSP auto I/Q imbalance correction. The DC correction (8) must be enabled for this to be effective. diff --git a/sdrbase/resources/webapi/doc/html2/index.html b/sdrbase/resources/webapi/doc/html2/index.html index a697c0326..2d4ce2c29 100644 --- a/sdrbase/resources/webapi/doc/html2/index.html +++ b/sdrbase/resources/webapi/doc/html2/index.html @@ -2449,6 +2449,14 @@ margin-bottom: 20px; "type" : "integer", "description" : "Audio channel to IQ mapping\n * 0 - I=L, Q=0\n * 1 - I=R, Q=0\n * 2 - I=L, Q=R\n * 3 - I=R, Q=L\n" }, + "dcBlock" : { + "type" : "integer", + "description" : "Auto DC blocking\n * 0 - Off\n * 1 - On\n" + }, + "iqImbalance" : { + "type" : "integer", + "description" : "Auto IQ balance (you need auto DC blocking active)\n * 0 - Off\n * 1 - On\n" + }, "useReverseAPI" : { "type" : "integer", "description" : "Synchronize with reverse API (1 for yes, 0 for no)" @@ -3520,12 +3528,21 @@ margin-bottom: 20px; "FT8DemodReport" : { "$ref" : "#/definitions/FT8DemodReport" }, + "RTTYDemodReport" : { + "$ref" : "#/definitions/RTTYDemodReport" + }, + "HeatMapReport" : { + "$ref" : "#/definitions/HeatMapReport" + }, "M17DemodReport" : { "$ref" : "#/definitions/M17DemodReport" }, "M17ModReport" : { "$ref" : "#/definitions/M17ModReport" }, + "NavtexDemodReport" : { + "$ref" : "#/definitions/NavtexDemodReport" + }, "NFMDemodReport" : { "$ref" : "#/definitions/NFMDemodReport" }, @@ -3675,6 +3692,12 @@ margin-bottom: 20px; "FT8DemodSettings" : { "$ref" : "#/definitions/FT8DemodSettings" }, + "RTTYDemodSettings" : { + "$ref" : "#/definitions/RTTYDemodSettings" + }, + "HeatMapSettings" : { + "$ref" : "#/definitions/HeatMapSettings" + }, "InterferometerSettings" : { "$ref" : "#/definitions/InterferometerSettings" }, @@ -3687,6 +3710,9 @@ margin-bottom: 20px; "M17ModSettings" : { "$ref" : "#/definitions/M17ModSettings" }, + "NavtexDemodSettings" : { + "$ref" : "#/definitions/NavtexDemodSettings" + }, "NFMDemodSettings" : { "$ref" : "#/definitions/NFMDemodSettings" }, @@ -7119,6 +7145,94 @@ margin-bottom: 20px; } }, "description" : "HackRF" +}; + defs.HeatMapReport = { + "properties" : { + "channelPowerDB" : { + "type" : "number", + "format" : "float", + "description" : "power received in channel (dB)" + }, + "channelSampleRate" : { + "type" : "integer" + } + }, + "description" : "HeatMap" +}; + defs.HeatMapSettings = { + "properties" : { + "inputFrequencyOffset" : { + "type" : "integer", + "format" : "int64" + }, + "rfBandwidth" : { + "type" : "number", + "format" : "float", + "description" : "channel RF bandwidth in Hz" + }, + "minPower" : { + "type" : "number", + "format" : "float" + }, + "maxPower" : { + "type" : "number", + "format" : "float" + }, + "colorMapName" : { + "type" : "string" + }, + "mode" : { + "type" : "integer", + "description" : "(0 - None, 1 - Average, 2 - Max, 3 - Min, 4 - Pulse Average)" + }, + "pulseThreshold" : { + "type" : "number", + "format" : "float" + }, + "averagePeriodUS" : { + "type" : "integer", + "description" : "Averaging period in microseconds" + }, + "sampleRate" : { + "type" : "integer" + }, + "rgbColor" : { + "type" : "integer" + }, + "title" : { + "type" : "string" + }, + "streamIndex" : { + "type" : "integer", + "description" : "MIMO channel. Not relevant when connected to SI (single Rx)." + }, + "useReverseAPI" : { + "type" : "integer", + "description" : "Synchronize with reverse API (1 for yes, 0 for no)" + }, + "reverseAPIAddress" : { + "type" : "string" + }, + "reverseAPIPort" : { + "type" : "integer" + }, + "reverseAPIDeviceIndex" : { + "type" : "integer" + }, + "reverseAPIChannelIndex" : { + "type" : "integer" + }, + "scopeConfig" : { + "$ref" : "#/definitions/GLScope" + }, + "channelMarker" : { + "$ref" : "#/definitions/ChannelMarker" + }, + "rollupState" : { + "$ref" : "#/definitions/RollupState" + } + }, + "description" : "HeatMap" }; defs.IEEE_802_15_4_ModActions = { "properties" : { @@ -8948,7 +9062,7 @@ margin-bottom: 20px; }, "altitudeReference" : { "type" : "integer", - "description" : "0 - NONE (Absolule), 1 - CLAMP_TO_GROUND, 2 - RELATIVE_TO_GROUND, 3 - CLIP_TO_GROUND" + "description" : "0 - NONE (Absolute), 1 - CLAMP_TO_GROUND, 2 - RELATIVE_TO_GROUND, 3 - CLIP_TO_GROUND" }, "animations" : { "type" : "array", @@ -8959,7 +9073,7 @@ margin-bottom: 20px; }, "type" : { "type" : "integer", - "description" : "(0 - Map Item, 1 - Image Tile)" + "description" : "(0 - Map Item, 1 - Image Tile, 2 - Polygon, 3 - Polyline)" }, "imageTileWest" : { "type" : "number", @@ -8976,6 +9090,27 @@ margin-bottom: 20px; "imageTileNorth" : { "type" : "number", "format" : "float" + }, + "imageZoomLevel" : { + "type" : "number", + "format" : "float", + "description" : "For 2D map" + }, + "coordinates" : { + "type" : "array", + "description" : "Polygon/polyline coordinates", + "items" : { + "$ref" : "#/definitions/MapCoordinate" + } + }, + "extrudedHeight" : { + "type" : "number", + "format" : "float", + "description" : "Extruded height (from surface) for polygons" + }, + "availableUntil" : { + "type" : "string", + "description" : "Date and time until after which this item should no longer appear on 3D map" } }, "description" : "An item to draw on the map. Set image to an empty string to remove item from the map." @@ -9078,7 +9213,7 @@ margin-bottom: 20px; }, "altitudeReference" : { "type" : "integer", - "description" : "0 - NONE (Absolule), 1 - CLAMP_TO_GROUND, 2 - RELATIVE_TO_GROUND, 3 - CLIP_TO_GROUND" + "description" : "0 - NONE (Absolute), 1 - CLAMP_TO_GROUND, 2 - RELATIVE_TO_GROUND, 3 - CLIP_TO_GROUND" }, "animations" : { "type" : "array", @@ -9089,7 +9224,7 @@ margin-bottom: 20px; }, "type" : { "type" : "integer", - "description" : "(0 - Map Item, 1 - Image Tile)" + "description" : "(0 - Map Item, 1 - Image Tile, 2 - Polygon, 3 - Polyline)" }, "imageTileWest" : { "type" : "number", @@ -9106,6 +9241,27 @@ margin-bottom: 20px; "imageTileNorth" : { "type" : "number", "format" : "float" + }, + "imageZoomLevel" : { + "type" : "number", + "format" : "float", + "description" : "For 2D map" + }, + "coordinates" : { + "type" : "array", + "description" : "Polygon/polyline coordinates", + "items" : { + "$ref" : "#/definitions/MapCoordinate" + } + }, + "extrudedHeight" : { + "type" : "number", + "format" : "float", + "description" : "Extruded height (from surface) for polygons" + }, + "availableUntil" : { + "type" : "string", + "description" : "Date and time until after which this item should no longer appear on 3D map" } }, "description" : "An item to draw on the map. Set image to an empty string to remove item from the map." @@ -9560,6 +9716,94 @@ margin-bottom: 20px; } }, "description" : "Enumeration with name for values" +}; + defs.NavtexDemodReport = { + "properties" : { + "channelPowerDB" : { + "type" : "number", + "format" : "float", + "description" : "power received in channel (dB)" + }, + "channelSampleRate" : { + "type" : "integer" + } + }, + "description" : "ACARSDemod" +}; + defs.NavtexDemodSettings = { + "properties" : { + "inputFrequencyOffset" : { + "type" : "integer", + "format" : "int64" + }, + "rfBandwidth" : { + "type" : "number", + "format" : "float" + }, + "navArea" : { + "type" : "integer" + }, + "filterStation" : { + "type" : "string" + }, + "filterType" : { + "type" : "string" + }, + "udpEnabled" : { + "type" : "integer", + "description" : "Whether to forward received messages to specified UDP port" + }, + "udpAddress" : { + "type" : "string", + "description" : "UDP address to forward received messages to" + }, + "udpPort" : { + "type" : "integer", + "description" : "UDP port to forward received messages to" + }, + "logFilename" : { + "type" : "string" + }, + "logEnabled" : { + "type" : "integer" + }, + "rgbColor" : { + "type" : "integer" + }, + "title" : { + "type" : "string" + }, + "streamIndex" : { + "type" : "integer", + "description" : "MIMO channel. Not relevant when connected to SI (single Rx)." + }, + "useReverseAPI" : { + "type" : "integer", + "description" : "Synchronize with reverse API (1 for yes, 0 for no)" + }, + "reverseAPIAddress" : { + "type" : "string" + }, + "reverseAPIPort" : { + "type" : "integer" + }, + "reverseAPIDeviceIndex" : { + "type" : "integer" + }, + "reverseAPIChannelIndex" : { + "type" : "integer" + }, + "scopeConfig" : { + "$ref" : "#/definitions/GLScope" + }, + "channelMarker" : { + "$ref" : "#/definitions/ChannelMarker" + }, + "rollupState" : { + "$ref" : "#/definitions/RollupState" + } + }, + "description" : "ACARSDemod" }; defs.NoiseFigureReport = { "properties" : { @@ -10913,6 +11157,110 @@ margin-bottom: 20px; "format" : "float" } } +}; + defs.RTTYDemodReport = { + "properties" : { + "channelPowerDB" : { + "type" : "number", + "format" : "float", + "description" : "power received in channel (dB)" + }, + "channelSampleRate" : { + "type" : "integer" + } + }, + "description" : "ACARSDemod" +}; + defs.RTTYDemodSettings = { + "properties" : { + "inputFrequencyOffset" : { + "type" : "integer", + "format" : "int64" + }, + "rfBandwidth" : { + "type" : "number", + "format" : "float" + }, + "baudRate" : { + "type" : "number", + "format" : "float" + }, + "frequencyShift" : { + "type" : "integer" + }, + "udpEnabled" : { + "type" : "integer", + "description" : "Whether to forward received messages to specified UDP port" + }, + "udpAddress" : { + "type" : "string", + "description" : "UDP address to forward received messages to" + }, + "udpPort" : { + "type" : "integer", + "description" : "UDP port to forward received messages to" + }, + "characterSet" : { + "type" : "integer" + }, + "suppressCRLF" : { + "type" : "integer" + }, + "unshiftOnSpace" : { + "type" : "integer" + }, + "msbFirst" : { + "type" : "integer" + }, + "spaceHigh" : { + "type" : "integer" + }, + "squelch" : { + "type" : "integer" + }, + "logFilename" : { + "type" : "string" + }, + "logEnabled" : { + "type" : "integer" + }, + "rgbColor" : { + "type" : "integer" + }, + "title" : { + "type" : "string" + }, + "streamIndex" : { + "type" : "integer", + "description" : "MIMO channel. Not relevant when connected to SI (single Rx)." + }, + "useReverseAPI" : { + "type" : "integer", + "description" : "Synchronize with reverse API (1 for yes, 0 for no)" + }, + "reverseAPIAddress" : { + "type" : "string" + }, + "reverseAPIPort" : { + "type" : "integer" + }, + "reverseAPIDeviceIndex" : { + "type" : "integer" + }, + "reverseAPIChannelIndex" : { + "type" : "integer" + }, + "scopeConfig" : { + "$ref" : "#/definitions/GLScope" + }, + "channelMarker" : { + "$ref" : "#/definitions/ChannelMarker" + }, + "rollupState" : { + "$ref" : "#/definitions/RollupState" + } + }, + "description" : "ACARSDemod" }; defs.RadioAstronomyActions = { "properties" : { @@ -14757,6 +15105,9 @@ margin-bottom: 20px; "audioMute" : { "type" : "integer" }, + "identBandpassEnable" : { + "type" : "integer" + }, "rgbColor" : { "type" : "integer" }, @@ -56905,7 +57256,7 @@ except ApiException as e:
- Generated 2023-01-28T23:27:13.480+01:00 + Generated 2023-03-11T04:40:02.823+01:00
diff --git a/sdrbase/resources/webapi/doc/swagger/include/AudioInput.yaml b/sdrbase/resources/webapi/doc/swagger/include/AudioInput.yaml index 540442dd8..4c78a925e 100644 --- a/sdrbase/resources/webapi/doc/swagger/include/AudioInput.yaml +++ b/sdrbase/resources/webapi/doc/swagger/include/AudioInput.yaml @@ -21,6 +21,18 @@ AudioInputSettings: * 1 - I=R, Q=0 * 2 - I=L, Q=R * 3 - I=R, Q=L + dcBlock: + type: integer + description: > + Auto DC blocking + * 0 - Off + * 1 - On + iqImbalance: + type: integer + description: > + Auto IQ balance (you need auto DC blocking active) + * 0 - Off + * 1 - On useReverseAPI: description: Synchronize with reverse API (1 for yes, 0 for no) type: integer diff --git a/sdrbase/resources/webapi/doc/swagger/include/ChannelReport.yaml b/sdrbase/resources/webapi/doc/swagger/include/ChannelReport.yaml index 231ed3a86..1697138e5 100644 --- a/sdrbase/resources/webapi/doc/swagger/include/ChannelReport.yaml +++ b/sdrbase/resources/webapi/doc/swagger/include/ChannelReport.yaml @@ -51,10 +51,16 @@ ChannelReport: $ref: "/doc/swagger/include/FreqTracker.yaml#/FreqTrackerReport" FT8DemodReport: $ref: "/doc/swagger/include/FT8Demod.yaml#/FT8DemodReport" + RTTYDemodReport: + $ref: "/doc/swagger/include/RTTYDemod.yaml#/RTTYDemodReport" + HeatMapReport: + $ref: "/doc/swagger/include/HeatMap.yaml#/HeatMapReport" M17DemodReport: $ref: "/doc/swagger/include/M17Demod.yaml#/M17DemodReport" M17ModReport: $ref: "/doc/swagger/include/M17Mod.yaml#/M17ModReport" + NavtexDemodReport: + $ref: "/doc/swagger/include/NavtexDemod.yaml#/NavtexDemodReport" NFMDemodReport: $ref: "/doc/swagger/include/NFMDemod.yaml#/NFMDemodReport" NFMModReport: diff --git a/sdrbase/resources/webapi/doc/swagger/include/ChannelSettings.yaml b/sdrbase/resources/webapi/doc/swagger/include/ChannelSettings.yaml index d690ed5eb..10855b93a 100644 --- a/sdrbase/resources/webapi/doc/swagger/include/ChannelSettings.yaml +++ b/sdrbase/resources/webapi/doc/swagger/include/ChannelSettings.yaml @@ -65,6 +65,10 @@ ChannelSettings: $ref: "/doc/swagger/include/FreqTracker.yaml#/FreqTrackerSettings" FT8DemodSettings: $ref: "/doc/swagger/include/FT8Demod.yaml#/FT8DemodSettings" + RTTYDemodSettings: + $ref: "/doc/swagger/include/RTTYDemod.yaml#/RTTYDemodSettings" + HeatMapSettings: + $ref: "/doc/swagger/include/HeatMap.yaml#/HeatMapSettings" InterferometerSettings: $ref: "/doc/swagger/include/Interferometer.yaml#/InterferometerSettings" IEEE_802_15_4_ModSettings: @@ -73,6 +77,8 @@ ChannelSettings: $ref: "/doc/swagger/include/M17Demod.yaml#/M17DemodSettings" M17ModSettings: $ref: "/doc/swagger/include/M17Mod.yaml#/M17ModSettings" + NavtexDemodSettings: + $ref: "/doc/swagger/include/NavtexDemod.yaml#/NavtexDemodSettings" NFMDemodSettings: $ref: "/doc/swagger/include/NFMDemod.yaml#/NFMDemodSettings" NFMModSettings: diff --git a/swagger/sdrangel/api/swagger/include/AudioInput.yaml b/swagger/sdrangel/api/swagger/include/AudioInput.yaml index 540442dd8..4c78a925e 100644 --- a/swagger/sdrangel/api/swagger/include/AudioInput.yaml +++ b/swagger/sdrangel/api/swagger/include/AudioInput.yaml @@ -21,6 +21,18 @@ AudioInputSettings: * 1 - I=R, Q=0 * 2 - I=L, Q=R * 3 - I=R, Q=L + dcBlock: + type: integer + description: > + Auto DC blocking + * 0 - Off + * 1 - On + iqImbalance: + type: integer + description: > + Auto IQ balance (you need auto DC blocking active) + * 0 - Off + * 1 - On useReverseAPI: description: Synchronize with reverse API (1 for yes, 0 for no) type: integer diff --git a/swagger/sdrangel/code/html2/index.html b/swagger/sdrangel/code/html2/index.html index a697c0326..2d4ce2c29 100644 --- a/swagger/sdrangel/code/html2/index.html +++ b/swagger/sdrangel/code/html2/index.html @@ -2449,6 +2449,14 @@ margin-bottom: 20px; "type" : "integer", "description" : "Audio channel to IQ mapping\n * 0 - I=L, Q=0\n * 1 - I=R, Q=0\n * 2 - I=L, Q=R\n * 3 - I=R, Q=L\n" }, + "dcBlock" : { + "type" : "integer", + "description" : "Auto DC blocking\n * 0 - Off\n * 1 - On\n" + }, + "iqImbalance" : { + "type" : "integer", + "description" : "Auto IQ balance (you need auto DC blocking active)\n * 0 - Off\n * 1 - On\n" + }, "useReverseAPI" : { "type" : "integer", "description" : "Synchronize with reverse API (1 for yes, 0 for no)" @@ -3520,12 +3528,21 @@ margin-bottom: 20px; "FT8DemodReport" : { "$ref" : "#/definitions/FT8DemodReport" }, + "RTTYDemodReport" : { + "$ref" : "#/definitions/RTTYDemodReport" + }, + "HeatMapReport" : { + "$ref" : "#/definitions/HeatMapReport" + }, "M17DemodReport" : { "$ref" : "#/definitions/M17DemodReport" }, "M17ModReport" : { "$ref" : "#/definitions/M17ModReport" }, + "NavtexDemodReport" : { + "$ref" : "#/definitions/NavtexDemodReport" + }, "NFMDemodReport" : { "$ref" : "#/definitions/NFMDemodReport" }, @@ -3675,6 +3692,12 @@ margin-bottom: 20px; "FT8DemodSettings" : { "$ref" : "#/definitions/FT8DemodSettings" }, + "RTTYDemodSettings" : { + "$ref" : "#/definitions/RTTYDemodSettings" + }, + "HeatMapSettings" : { + "$ref" : "#/definitions/HeatMapSettings" + }, "InterferometerSettings" : { "$ref" : "#/definitions/InterferometerSettings" }, @@ -3687,6 +3710,9 @@ margin-bottom: 20px; "M17ModSettings" : { "$ref" : "#/definitions/M17ModSettings" }, + "NavtexDemodSettings" : { + "$ref" : "#/definitions/NavtexDemodSettings" + }, "NFMDemodSettings" : { "$ref" : "#/definitions/NFMDemodSettings" }, @@ -7119,6 +7145,94 @@ margin-bottom: 20px; } }, "description" : "HackRF" +}; + defs.HeatMapReport = { + "properties" : { + "channelPowerDB" : { + "type" : "number", + "format" : "float", + "description" : "power received in channel (dB)" + }, + "channelSampleRate" : { + "type" : "integer" + } + }, + "description" : "HeatMap" +}; + defs.HeatMapSettings = { + "properties" : { + "inputFrequencyOffset" : { + "type" : "integer", + "format" : "int64" + }, + "rfBandwidth" : { + "type" : "number", + "format" : "float", + "description" : "channel RF bandwidth in Hz" + }, + "minPower" : { + "type" : "number", + "format" : "float" + }, + "maxPower" : { + "type" : "number", + "format" : "float" + }, + "colorMapName" : { + "type" : "string" + }, + "mode" : { + "type" : "integer", + "description" : "(0 - None, 1 - Average, 2 - Max, 3 - Min, 4 - Pulse Average)" + }, + "pulseThreshold" : { + "type" : "number", + "format" : "float" + }, + "averagePeriodUS" : { + "type" : "integer", + "description" : "Averaging period in microseconds" + }, + "sampleRate" : { + "type" : "integer" + }, + "rgbColor" : { + "type" : "integer" + }, + "title" : { + "type" : "string" + }, + "streamIndex" : { + "type" : "integer", + "description" : "MIMO channel. Not relevant when connected to SI (single Rx)." + }, + "useReverseAPI" : { + "type" : "integer", + "description" : "Synchronize with reverse API (1 for yes, 0 for no)" + }, + "reverseAPIAddress" : { + "type" : "string" + }, + "reverseAPIPort" : { + "type" : "integer" + }, + "reverseAPIDeviceIndex" : { + "type" : "integer" + }, + "reverseAPIChannelIndex" : { + "type" : "integer" + }, + "scopeConfig" : { + "$ref" : "#/definitions/GLScope" + }, + "channelMarker" : { + "$ref" : "#/definitions/ChannelMarker" + }, + "rollupState" : { + "$ref" : "#/definitions/RollupState" + } + }, + "description" : "HeatMap" }; defs.IEEE_802_15_4_ModActions = { "properties" : { @@ -8948,7 +9062,7 @@ margin-bottom: 20px; }, "altitudeReference" : { "type" : "integer", - "description" : "0 - NONE (Absolule), 1 - CLAMP_TO_GROUND, 2 - RELATIVE_TO_GROUND, 3 - CLIP_TO_GROUND" + "description" : "0 - NONE (Absolute), 1 - CLAMP_TO_GROUND, 2 - RELATIVE_TO_GROUND, 3 - CLIP_TO_GROUND" }, "animations" : { "type" : "array", @@ -8959,7 +9073,7 @@ margin-bottom: 20px; }, "type" : { "type" : "integer", - "description" : "(0 - Map Item, 1 - Image Tile)" + "description" : "(0 - Map Item, 1 - Image Tile, 2 - Polygon, 3 - Polyline)" }, "imageTileWest" : { "type" : "number", @@ -8976,6 +9090,27 @@ margin-bottom: 20px; "imageTileNorth" : { "type" : "number", "format" : "float" + }, + "imageZoomLevel" : { + "type" : "number", + "format" : "float", + "description" : "For 2D map" + }, + "coordinates" : { + "type" : "array", + "description" : "Polygon/polyline coordinates", + "items" : { + "$ref" : "#/definitions/MapCoordinate" + } + }, + "extrudedHeight" : { + "type" : "number", + "format" : "float", + "description" : "Extruded height (from surface) for polygons" + }, + "availableUntil" : { + "type" : "string", + "description" : "Date and time until after which this item should no longer appear on 3D map" } }, "description" : "An item to draw on the map. Set image to an empty string to remove item from the map." @@ -9078,7 +9213,7 @@ margin-bottom: 20px; }, "altitudeReference" : { "type" : "integer", - "description" : "0 - NONE (Absolule), 1 - CLAMP_TO_GROUND, 2 - RELATIVE_TO_GROUND, 3 - CLIP_TO_GROUND" + "description" : "0 - NONE (Absolute), 1 - CLAMP_TO_GROUND, 2 - RELATIVE_TO_GROUND, 3 - CLIP_TO_GROUND" }, "animations" : { "type" : "array", @@ -9089,7 +9224,7 @@ margin-bottom: 20px; }, "type" : { "type" : "integer", - "description" : "(0 - Map Item, 1 - Image Tile)" + "description" : "(0 - Map Item, 1 - Image Tile, 2 - Polygon, 3 - Polyline)" }, "imageTileWest" : { "type" : "number", @@ -9106,6 +9241,27 @@ margin-bottom: 20px; "imageTileNorth" : { "type" : "number", "format" : "float" + }, + "imageZoomLevel" : { + "type" : "number", + "format" : "float", + "description" : "For 2D map" + }, + "coordinates" : { + "type" : "array", + "description" : "Polygon/polyline coordinates", + "items" : { + "$ref" : "#/definitions/MapCoordinate" + } + }, + "extrudedHeight" : { + "type" : "number", + "format" : "float", + "description" : "Extruded height (from surface) for polygons" + }, + "availableUntil" : { + "type" : "string", + "description" : "Date and time until after which this item should no longer appear on 3D map" } }, "description" : "An item to draw on the map. Set image to an empty string to remove item from the map." @@ -9560,6 +9716,94 @@ margin-bottom: 20px; } }, "description" : "Enumeration with name for values" +}; + defs.NavtexDemodReport = { + "properties" : { + "channelPowerDB" : { + "type" : "number", + "format" : "float", + "description" : "power received in channel (dB)" + }, + "channelSampleRate" : { + "type" : "integer" + } + }, + "description" : "ACARSDemod" +}; + defs.NavtexDemodSettings = { + "properties" : { + "inputFrequencyOffset" : { + "type" : "integer", + "format" : "int64" + }, + "rfBandwidth" : { + "type" : "number", + "format" : "float" + }, + "navArea" : { + "type" : "integer" + }, + "filterStation" : { + "type" : "string" + }, + "filterType" : { + "type" : "string" + }, + "udpEnabled" : { + "type" : "integer", + "description" : "Whether to forward received messages to specified UDP port" + }, + "udpAddress" : { + "type" : "string", + "description" : "UDP address to forward received messages to" + }, + "udpPort" : { + "type" : "integer", + "description" : "UDP port to forward received messages to" + }, + "logFilename" : { + "type" : "string" + }, + "logEnabled" : { + "type" : "integer" + }, + "rgbColor" : { + "type" : "integer" + }, + "title" : { + "type" : "string" + }, + "streamIndex" : { + "type" : "integer", + "description" : "MIMO channel. Not relevant when connected to SI (single Rx)." + }, + "useReverseAPI" : { + "type" : "integer", + "description" : "Synchronize with reverse API (1 for yes, 0 for no)" + }, + "reverseAPIAddress" : { + "type" : "string" + }, + "reverseAPIPort" : { + "type" : "integer" + }, + "reverseAPIDeviceIndex" : { + "type" : "integer" + }, + "reverseAPIChannelIndex" : { + "type" : "integer" + }, + "scopeConfig" : { + "$ref" : "#/definitions/GLScope" + }, + "channelMarker" : { + "$ref" : "#/definitions/ChannelMarker" + }, + "rollupState" : { + "$ref" : "#/definitions/RollupState" + } + }, + "description" : "ACARSDemod" }; defs.NoiseFigureReport = { "properties" : { @@ -10913,6 +11157,110 @@ margin-bottom: 20px; "format" : "float" } } +}; + defs.RTTYDemodReport = { + "properties" : { + "channelPowerDB" : { + "type" : "number", + "format" : "float", + "description" : "power received in channel (dB)" + }, + "channelSampleRate" : { + "type" : "integer" + } + }, + "description" : "ACARSDemod" +}; + defs.RTTYDemodSettings = { + "properties" : { + "inputFrequencyOffset" : { + "type" : "integer", + "format" : "int64" + }, + "rfBandwidth" : { + "type" : "number", + "format" : "float" + }, + "baudRate" : { + "type" : "number", + "format" : "float" + }, + "frequencyShift" : { + "type" : "integer" + }, + "udpEnabled" : { + "type" : "integer", + "description" : "Whether to forward received messages to specified UDP port" + }, + "udpAddress" : { + "type" : "string", + "description" : "UDP address to forward received messages to" + }, + "udpPort" : { + "type" : "integer", + "description" : "UDP port to forward received messages to" + }, + "characterSet" : { + "type" : "integer" + }, + "suppressCRLF" : { + "type" : "integer" + }, + "unshiftOnSpace" : { + "type" : "integer" + }, + "msbFirst" : { + "type" : "integer" + }, + "spaceHigh" : { + "type" : "integer" + }, + "squelch" : { + "type" : "integer" + }, + "logFilename" : { + "type" : "string" + }, + "logEnabled" : { + "type" : "integer" + }, + "rgbColor" : { + "type" : "integer" + }, + "title" : { + "type" : "string" + }, + "streamIndex" : { + "type" : "integer", + "description" : "MIMO channel. Not relevant when connected to SI (single Rx)." + }, + "useReverseAPI" : { + "type" : "integer", + "description" : "Synchronize with reverse API (1 for yes, 0 for no)" + }, + "reverseAPIAddress" : { + "type" : "string" + }, + "reverseAPIPort" : { + "type" : "integer" + }, + "reverseAPIDeviceIndex" : { + "type" : "integer" + }, + "reverseAPIChannelIndex" : { + "type" : "integer" + }, + "scopeConfig" : { + "$ref" : "#/definitions/GLScope" + }, + "channelMarker" : { + "$ref" : "#/definitions/ChannelMarker" + }, + "rollupState" : { + "$ref" : "#/definitions/RollupState" + } + }, + "description" : "ACARSDemod" }; defs.RadioAstronomyActions = { "properties" : { @@ -14757,6 +15105,9 @@ margin-bottom: 20px; "audioMute" : { "type" : "integer" }, + "identBandpassEnable" : { + "type" : "integer" + }, "rgbColor" : { "type" : "integer" }, @@ -56905,7 +57256,7 @@ except ApiException as e:
- Generated 2023-01-28T23:27:13.480+01:00 + Generated 2023-03-11T04:40:02.823+01:00
diff --git a/swagger/sdrangel/code/qt5/client/SWGAudioInputSettings.cpp b/swagger/sdrangel/code/qt5/client/SWGAudioInputSettings.cpp index 5b5f1a39c..6d5e34ad4 100644 --- a/swagger/sdrangel/code/qt5/client/SWGAudioInputSettings.cpp +++ b/swagger/sdrangel/code/qt5/client/SWGAudioInputSettings.cpp @@ -38,6 +38,10 @@ SWGAudioInputSettings::SWGAudioInputSettings() { m_log2_decim_isSet = false; iq_mapping = 0; m_iq_mapping_isSet = false; + dc_block = 0; + m_dc_block_isSet = false; + iq_imbalance = 0; + m_iq_imbalance_isSet = false; use_reverse_api = 0; m_use_reverse_api_isSet = false; reverse_api_address = nullptr; @@ -64,6 +68,10 @@ SWGAudioInputSettings::init() { m_log2_decim_isSet = false; iq_mapping = 0; m_iq_mapping_isSet = false; + dc_block = 0; + m_dc_block_isSet = false; + iq_imbalance = 0; + m_iq_imbalance_isSet = false; use_reverse_api = 0; m_use_reverse_api_isSet = false; reverse_api_address = new QString(""); @@ -84,6 +92,8 @@ SWGAudioInputSettings::cleanup() { + + if(reverse_api_address != nullptr) { delete reverse_api_address; } @@ -112,6 +122,10 @@ SWGAudioInputSettings::fromJsonObject(QJsonObject &pJson) { ::SWGSDRangel::setValue(&iq_mapping, pJson["iqMapping"], "qint32", ""); + ::SWGSDRangel::setValue(&dc_block, pJson["dcBlock"], "qint32", ""); + + ::SWGSDRangel::setValue(&iq_imbalance, pJson["iqImbalance"], "qint32", ""); + ::SWGSDRangel::setValue(&use_reverse_api, pJson["useReverseAPI"], "qint32", ""); ::SWGSDRangel::setValue(&reverse_api_address, pJson["reverseAPIAddress"], "QString", "QString"); @@ -151,6 +165,12 @@ SWGAudioInputSettings::asJsonObject() { if(m_iq_mapping_isSet){ obj->insert("iqMapping", QJsonValue(iq_mapping)); } + if(m_dc_block_isSet){ + obj->insert("dcBlock", QJsonValue(dc_block)); + } + if(m_iq_imbalance_isSet){ + obj->insert("iqImbalance", QJsonValue(iq_imbalance)); + } if(m_use_reverse_api_isSet){ obj->insert("useReverseAPI", QJsonValue(use_reverse_api)); } @@ -217,6 +237,26 @@ SWGAudioInputSettings::setIqMapping(qint32 iq_mapping) { this->m_iq_mapping_isSet = true; } +qint32 +SWGAudioInputSettings::getDcBlock() { + return dc_block; +} +void +SWGAudioInputSettings::setDcBlock(qint32 dc_block) { + this->dc_block = dc_block; + this->m_dc_block_isSet = true; +} + +qint32 +SWGAudioInputSettings::getIqImbalance() { + return iq_imbalance; +} +void +SWGAudioInputSettings::setIqImbalance(qint32 iq_imbalance) { + this->iq_imbalance = iq_imbalance; + this->m_iq_imbalance_isSet = true; +} + qint32 SWGAudioInputSettings::getUseReverseApi() { return use_reverse_api; @@ -277,6 +317,12 @@ SWGAudioInputSettings::isSet(){ if(m_iq_mapping_isSet){ isObjectUpdated = true; break; } + if(m_dc_block_isSet){ + isObjectUpdated = true; break; + } + if(m_iq_imbalance_isSet){ + isObjectUpdated = true; break; + } if(m_use_reverse_api_isSet){ isObjectUpdated = true; break; } diff --git a/swagger/sdrangel/code/qt5/client/SWGAudioInputSettings.h b/swagger/sdrangel/code/qt5/client/SWGAudioInputSettings.h index 7a2b8865e..ca8bb7fbf 100644 --- a/swagger/sdrangel/code/qt5/client/SWGAudioInputSettings.h +++ b/swagger/sdrangel/code/qt5/client/SWGAudioInputSettings.h @@ -57,6 +57,12 @@ public: qint32 getIqMapping(); void setIqMapping(qint32 iq_mapping); + qint32 getDcBlock(); + void setDcBlock(qint32 dc_block); + + qint32 getIqImbalance(); + void setIqImbalance(qint32 iq_imbalance); + qint32 getUseReverseApi(); void setUseReverseApi(qint32 use_reverse_api); @@ -88,6 +94,12 @@ private: qint32 iq_mapping; bool m_iq_mapping_isSet; + qint32 dc_block; + bool m_dc_block_isSet; + + qint32 iq_imbalance; + bool m_iq_imbalance_isSet; + qint32 use_reverse_api; bool m_use_reverse_api_isSet;