1
0
mirror of https://github.com/f4exb/sdrangel.git synced 2024-12-22 17:45:48 -05:00

Audio inout: added DC block and IQ imbalance

This commit is contained in:
f4exb 2023-03-11 05:05:58 +01:00
parent 4adcd22491
commit e606805beb
17 changed files with 896 additions and 10 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

View File

@ -312,6 +312,14 @@ void AudioInput::applySettings(const AudioInputSettings& settings, QList<QString
}
}
if (settingsKeys.contains("dcBlock") || settingsKeys.contains("iqImbalance") || force)
{
m_deviceAPI->configureCorrections(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<QString>& 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)

View File

@ -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<int>::of(&QComboBox::currentIndexChanged), this, &AudioInputGui::on_decim_currentIndexChanged);
QObject::connect(ui->volume, &QDial::valueChanged, this, &AudioInputGui::on_volume_valueChanged);
QObject::connect(ui->channels, QOverload<int>::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);
}

View File

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

View File

@ -114,6 +114,26 @@
</property>
</spacer>
</item>
<item>
<widget class="ButtonSwitch" name="dcOffset">
<property name="toolTip">
<string>Automatic DC offset removal</string>
</property>
<property name="text">
<string>DC</string>
</property>
</widget>
</item>
<item>
<widget class="ButtonSwitch" name="iqImbalance">
<property name="toolTip">
<string>Automatic IQ imbalance correction</string>
</property>
<property name="text">
<string>IQ</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_2">
<property name="sizePolicy">

View File

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

View File

@ -34,6 +34,8 @@ struct AudioInputSettings {
LR,
RL
} m_iqMapping;
bool m_dcBlock;
bool m_iqImbalance;
bool m_useReverseAPI;
QString m_reverseAPIAddress;

View File

@ -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.
<h3>8: Auto remove DC component</h3>
Software DSP auto remove DC correction.
<h3>9: Auto make I/Q balance</h3>
Software DSP auto I/Q imbalance correction. The DC correction (8) must be enabled for this to be effective.

View File

@ -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:
</div>
<div id="generator">
<div class="content">
Generated 2023-01-28T23:27:13.480+01:00
Generated 2023-03-11T04:40:02.823+01:00
</div>
</div>
</div>

View File

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

View File

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

View File

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

View File

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

View File

@ -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:
</div>
<div id="generator">
<div class="content">
Generated 2023-01-28T23:27:13.480+01:00
Generated 2023-03-11T04:40:02.823+01:00
</div>
</div>
</div>

View File

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

View File

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