diff --git a/doc/img/SDRPlayV3_plugin.png b/doc/img/SDRPlayV3_plugin.png
index 42558d3a0..a3b9cf6b5 100644
Binary files a/doc/img/SDRPlayV3_plugin.png and b/doc/img/SDRPlayV3_plugin.png differ
diff --git a/doc/img/SDRPlayV3_plugin.xcf b/doc/img/SDRPlayV3_plugin.xcf
new file mode 100644
index 000000000..3138f5403
Binary files /dev/null and b/doc/img/SDRPlayV3_plugin.xcf differ
diff --git a/plugins/samplesource/sdrplayv3/readme.md b/plugins/samplesource/sdrplayv3/readme.md
index 7c3ba4883..a24083e4c 100644
--- a/plugins/samplesource/sdrplayv3/readme.md
+++ b/plugins/samplesource/sdrplayv3/readme.md
@@ -40,35 +40,39 @@ Selects which tuner is used for input. For RSPduo this can be 1 or 2. Other RSP
Selects which antenna port is used. The antenna ports available depend upon the RSP device and tuner selected.
-
7: DC offset correction
+7. Transverter mode open dialog
+
+This button opens a dialog to set the transverter mode frequency translation options. The details about this dialog can be found [here](../../../sdrgui/gui/transverterdialog.md)
+
+8: DC offset correction
Check this button to enable DC offset correction.
-8: IQ imbalance correction
+9: IQ imbalance correction
Check this button to enable IQ imbalance correction.
-9: External reference clock output
+10: External reference clock output
Enable reference clock output. This is only available for RSP2 and DSPduo.
-10: Bias tee
+11: Bias tee
Enable bias tee. This is only available for RSP1A, RSP2, RSPduo tuner 2 and RSPdx.
-11: AM notch filter
+12: AM notch filter
Enable AM notch filter. This is only available for RSPduo tuner 1.
-12: MW/FM notch filter
+13: MW/FM notch filter
Enable MW/FM notch filter. This is only available for RSP1A, RSP2, RSPduo and RSPdx.
-13: DAB notch filter
+14: DAB notch filter
Enable DAB notch filter. This is only available for RSP1A, RSPduo and RSPdx.
-14: IF bandwidth
+15: IF bandwidth
This selects the IF filter bandwidth. The following bandwidths are available:
@@ -81,31 +85,49 @@ This selects the IF filter bandwidth. The following bandwidths are available:
- 7000 kHz
- 8000 kHz
-15: IF frequency
+16: IF frequency
Warning there is no good support of non zero IF. **It is advised to keep zero IF for normal use**.
+Some tricks are provided for expert use of non-zero IFs. You may want to start from these settings to experiment more with it.
+
This selects the IF frequency between these values:
- **0 for zero IF**
- - 450 kHz. Some practical tricks that may or may not work:
- - Frequency is shifted by -450 kHZ.
- - Do not set center frequency lower than 450 kHz down the target frequency
- - Use at least 1536 kHz bandwidth (14)
- - After sample rate change (16) you may need to start/stop device to get thins right.
- - Use decimation > 1 (17) with Inf position (18)
- - 1620 kHz: do not use
- - 2048 kHz: do not use
+ - 450 kHz.
+ - Move center frequency by -450 kHZ (3).
+ - Direct frequency reading is -450 kHz off from real Rx frequency.
+ - You may use the transverter mode (7) with a shift of +450 kHz to correct the frequency reading
+ - If you already use the transverter mode for transverter work just add 450 kHz to the current shift
+ - Use 1536 kHz bandwidth (15)
+ - After sample rate change (17) you may need to start/stop device to get things right.
+ - Use decimation > 1 (18) with Inf position (19)
+ - 1620 kHz:
+ - Move center frequency by -1620 kHz (3).
+ - Direct frequency reading is -1620 kHz off from real Rx frequency.
+ - You may use the transverter mode (7) with a shift of +1620 kHz to correct the frequency reading
+ - If you already use the transverter mode for transverter work just add 1620 kHz to the current shift
+ - Use 5000 kHz bandwidth (15)
+ - After sample rate change (17) you may need to start/stop device to get things right.
+ - Use decimation > 1 (18) with Inf position (19)
+ - 2048 kHz:
+ - Move center frequency by -2048 kHz (3).
+ - Direct frequency reading is -2048 kHz off from real Rx frequency.
+ - You may use the transverter mode (7) with a shift of +2048 kHz to correct the frequency reading
+ - If you already use the transverter mode for transverter work just add 2048 kHz to the current shift
+ - Use 5000 kHz bandwidth (15)
+ - After sample rate change (17) you may need to start/stop device to get things right.
+ - Use decimation > 1 (18) with Inf position (19)
-16: Sample rate
+17: Sample rate
Sets the ADC IQ sample rats from 2M to 10.66M Hz.
-17: Decimation
+18: Decimation
Decimation in powers of two from 1 (no decimation) to 64.
-18: Decimated bandpass center frequency position relative the SDRplay center frequency
+19: Decimated bandpass center frequency position relative the SDRplay center frequency
- **Cen**: the decimation operation takes place around the SDRplay center frequency Fs.
- **Inf**: the decimation operation takes place around Fs - Fc.
@@ -116,14 +138,14 @@ With SR as the sample rate before decimation Fc is calculated as:
- if decimation n is 4 or lower: Fc = SR/2^(log2(n)-1). The device center frequency is on the side of the baseband. You need a RF filter bandwidth at least twice the baseband.
- if decimation n is 8 or higher: Fc = SR/n. The device center frequency is half the baseband away from the side of the baseband. You need a RF filter bandwidth at least 3 times the baseband.
-19. RF gain setting
+20. RF gain setting
Sets the LNA and mixer gain dB. The settings available depended upon the RSP device and frequency band.
-20. IF AGC
+21. IF AGC
Check this button to enable IF automatic gain control.
-21. IF gain
+22. IF gain
Manual IF gain from 0 to -59 dB. Only enabled when IF AGC is disabled.
diff --git a/plugins/samplesource/sdrplayv3/sdrplayv3gui.cpp b/plugins/samplesource/sdrplayv3/sdrplayv3gui.cpp
index 5e28a1e9a..7b78455b4 100644
--- a/plugins/samplesource/sdrplayv3/sdrplayv3gui.cpp
+++ b/plugins/samplesource/sdrplayv3/sdrplayv3gui.cpp
@@ -44,7 +44,7 @@ SDRPlayV3Gui::SDRPlayV3Gui(DeviceUISet *deviceUISet, QWidget* parent) :
ui->setupUi(this);
ui->centerFrequency->setColorMapper(ColorMapper(ColorMapper::GrayGold));
- ui->centerFrequency->setValueRange(7, 1U, 2000000U);
+ updateFrequencyLimits();
ui->ifFrequency->clear();
for (unsigned int i = 0; i < SDRPlayV3IF::getNbIFs(); i++)
@@ -218,8 +218,28 @@ void SDRPlayV3Gui::updateSampleRateAndFrequency()
ui->deviceRateText->setText(tr("%1k").arg((float)m_sampleRate / 1000));
}
+void SDRPlayV3Gui::updateFrequencyLimits()
+{
+ // values in kHz
+ qint64 deltaFrequency = m_settings.m_transverterMode ? m_settings.m_transverterDeltaFrequency/1000 : 0;
+ qint64 minLimit = 1U + deltaFrequency;
+ qint64 maxLimit = 2000000U + deltaFrequency;
+
+ minLimit = minLimit < 0 ? 0 : minLimit > 9999999 ? 9999999 : minLimit;
+ maxLimit = maxLimit < 0 ? 0 : maxLimit > 9999999 ? 9999999 : maxLimit;
+
+ qDebug("SDRPlayV3Gui::updateFrequencyLimits: delta: %lld min: %lld max: %lld", deltaFrequency, minLimit, maxLimit);
+
+ ui->centerFrequency->setValueRange(7, minLimit, maxLimit);
+}
+
void SDRPlayV3Gui::displaySettings()
{
+ ui->transverter->setDeltaFrequency(m_settings.m_transverterDeltaFrequency);
+ ui->transverter->setDeltaFrequencyActive(m_settings.m_transverterMode);
+ ui->transverter->setIQOrder(m_settings.m_iqOrder);
+ updateFrequencyLimits();
+
ui->centerFrequency->setValue(m_settings.m_centerFrequency / 1000);
ui->ppm->setValue(m_settings.m_LOppmTenths);
@@ -471,6 +491,17 @@ void SDRPlayV3Gui::on_startStop_toggled(bool checked)
}
}
+void SDRPlayV3Gui::on_transverter_clicked()
+{
+ m_settings.m_transverterMode = ui->transverter->getDeltaFrequencyAcive();
+ m_settings.m_transverterDeltaFrequency = ui->transverter->getDeltaFrequency();
+ m_settings.m_iqOrder = ui->transverter->getIQOrder();
+ qDebug("SDRPlayV3Gui::on_transverter_clicked: %lld Hz %s", m_settings.m_transverterDeltaFrequency, m_settings.m_transverterMode ? "on" : "off");
+ updateFrequencyLimits();
+ m_settings.m_centerFrequency = ui->centerFrequency->getValueNew()*1000;
+ sendSettings();
+}
+
void SDRPlayV3Gui::openDeviceSettingsDialog(const QPoint& p)
{
BasicDeviceSettingsDialog dialog(this);
diff --git a/plugins/samplesource/sdrplayv3/sdrplayv3gui.h b/plugins/samplesource/sdrplayv3/sdrplayv3gui.h
index e91e79af9..0c790c961 100644
--- a/plugins/samplesource/sdrplayv3/sdrplayv3gui.h
+++ b/plugins/samplesource/sdrplayv3/sdrplayv3gui.h
@@ -67,6 +67,7 @@ private:
void updateLNAValues();
void sendSettings();
void updateSampleRateAndFrequency();
+ void updateFrequencyLimits();
bool handleMessage(const Message& message);
private slots:
@@ -93,6 +94,7 @@ private slots:
void on_gainIFAGC_toggled(bool checked);
void on_gainIF_valueChanged(int value);
void on_startStop_toggled(bool checked);
+ void on_transverter_clicked();
void openDeviceSettingsDialog(const QPoint& p);
};
diff --git a/plugins/samplesource/sdrplayv3/sdrplayv3gui.ui b/plugins/samplesource/sdrplayv3/sdrplayv3gui.ui
index a7f57a614..f4665f4f5 100644
--- a/plugins/samplesource/sdrplayv3/sdrplayv3gui.ui
+++ b/plugins/samplesource/sdrplayv3/sdrplayv3gui.ui
@@ -6,7 +6,7 @@
0
0
- 317
+ 409
260
@@ -278,6 +278,25 @@
+ -
+
+
+
+ 24
+ 24
+
+
+
+ Transverter frequency translation dialog
+
+
+ X
+
+
+ false
+
+
+
-
@@ -791,6 +810,11 @@
1
+
+ TransverterButton
+ QPushButton
+
+
diff --git a/plugins/samplesource/sdrplayv3/sdrplayv3input.cpp b/plugins/samplesource/sdrplayv3/sdrplayv3input.cpp
index 2d9fa6433..bc9cfd80d 100644
--- a/plugins/samplesource/sdrplayv3/sdrplayv3input.cpp
+++ b/plugins/samplesource/sdrplayv3/sdrplayv3input.cpp
@@ -429,20 +429,37 @@ bool SDRPlayV3Input::applySettings(const SDRPlayV3Settings& settings, bool forwa
if ((m_settings.m_LOppmTenths != settings.m_LOppmTenths) || force) {
reverseAPIKeys.append("LOppmTenths");
}
+ if ((m_settings.m_transverterMode != settings.m_transverterMode) || force) {
+ reverseAPIKeys.append("transverterMode");
+ }
+ if ((m_settings.m_transverterDeltaFrequency != settings.m_transverterDeltaFrequency) || force) {
+ reverseAPIKeys.append("transverterDeltaFrequency");
+ }
+
+ if ((m_settings.m_iqOrder != settings.m_iqOrder) || force)
+ {
+ reverseAPIKeys.append("iqOrder");
+
+ if (m_sdrPlayThread) {
+ m_sdrPlayThread->setIQOrder(settings.m_iqOrder);
+ }
+ }
if ((m_settings.m_centerFrequency != settings.m_centerFrequency)
|| (m_settings.m_LOppmTenths != settings.m_LOppmTenths)
|| (m_settings.m_fcPos != settings.m_fcPos)
- || (m_settings.m_log2Decim != settings.m_log2Decim) || force)
+ || (m_settings.m_log2Decim != settings.m_log2Decim)
+ || (m_settings.m_transverterMode != settings.m_transverterMode)
+ || (m_settings.m_transverterDeltaFrequency != settings.m_transverterDeltaFrequency) || force)
{
qint64 deviceCenterFrequency = DeviceSampleSource::calculateDeviceCenterFrequency(
settings.m_centerFrequency,
- 0,
+ settings.m_transverterDeltaFrequency,
settings.m_log2Decim,
(DeviceSampleSource::fcPos_t) settings.m_fcPos,
settings.m_devSampleRate,
DeviceSampleSource::FrequencyShiftScheme::FSHIFT_STD,
- false);
+ settings.m_transverterMode);
forwardChange = true;
@@ -862,6 +879,15 @@ void SDRPlayV3Input::webapiUpdateDeviceSettings(
if (deviceSettingsKeys.contains("antenna")) {
settings.m_antenna = response.getSdrPlayV3Settings()->getAntenna();
}
+ if (deviceSettingsKeys.contains("transverterDeltaFrequency")) {
+ settings.m_transverterDeltaFrequency = response.getSdrPlayV3Settings()->getTransverterDeltaFrequency();
+ }
+ if (deviceSettingsKeys.contains("transverterMode")) {
+ settings.m_transverterMode = response.getSdrPlayV3Settings()->getTransverterMode() != 0;
+ }
+ if (deviceSettingsKeys.contains("iqOrder")) {
+ settings.m_iqOrder = response.getSdrPlayV3Settings()->getIqOrder() != 0;
+ }
if (deviceSettingsKeys.contains("useReverseAPI")) {
settings.m_useReverseAPI = response.getSdrPlayV3Settings()->getUseReverseApi() != 0;
}
@@ -896,6 +922,9 @@ void SDRPlayV3Input::webapiFormatDeviceSettings(SWGSDRangel::SWGDeviceSettings&
response.getSdrPlayV3Settings()->setExtRef(settings.m_extRef);
response.getSdrPlayV3Settings()->setTuner(settings.m_tuner);
response.getSdrPlayV3Settings()->setAntenna(settings.m_antenna);
+ response.getSdrPlayV3Settings()->setTransverterDeltaFrequency(settings.m_transverterDeltaFrequency);
+ response.getSdrPlayV3Settings()->setTransverterMode(settings.m_transverterMode ? 1 : 0);
+ response.getSdrPlayV3Settings()->setIqOrder(settings.m_iqOrder ? 1 : 0);
response.getSdrPlayV3Settings()->setUseReverseApi(settings.m_useReverseAPI ? 1 : 0);
@@ -1026,6 +1055,15 @@ void SDRPlayV3Input::webapiReverseSendSettings(QList& deviceSettingsKey
if (deviceSettingsKeys.contains("antenna") || force) {
swgSDRPlayV3Settings->setAntenna(settings.m_antenna);
}
+ if (deviceSettingsKeys.contains("transverterDeltaFrequency") || force) {
+ swgSDRPlayV3Settings->setTransverterDeltaFrequency(settings.m_transverterDeltaFrequency);
+ }
+ if (deviceSettingsKeys.contains("transverterMode") || force) {
+ swgSDRPlayV3Settings->setTransverterMode(settings.m_transverterMode ? 1 : 0);
+ }
+ if (deviceSettingsKeys.contains("iqOrder") || force) {
+ swgSDRPlayV3Settings->setIqOrder(settings.m_iqOrder ? 1 : 0);
+ }
QString deviceSettingsURL = QString("http://%1:%2/sdrangel/deviceset/%3/device/settings")
.arg(settings.m_reverseAPIAddress)
diff --git a/plugins/samplesource/sdrplayv3/sdrplayv3settings.cpp b/plugins/samplesource/sdrplayv3/sdrplayv3settings.cpp
index f0526b87f..3787f473b 100644
--- a/plugins/samplesource/sdrplayv3/sdrplayv3settings.cpp
+++ b/plugins/samplesource/sdrplayv3/sdrplayv3settings.cpp
@@ -47,6 +47,9 @@ void SDRPlayV3Settings::resetToDefaults()
m_tuner = 0;
m_antenna = 0;
m_extRef = false;
+ m_transverterMode = false;
+ m_iqOrder = true;
+ m_transverterDeltaFrequency = 0;
m_useReverseAPI = false;
m_reverseAPIAddress = "127.0.0.1";
m_reverseAPIPort = 8888;
@@ -79,6 +82,10 @@ QByteArray SDRPlayV3Settings::serialize() const
s.writeS32(23, m_tuner);
s.writeS32(24, m_antenna);
s.writeBool(25, m_extRef);
+ s.writeBool(26, m_transverterMode);
+ s.writeS64(27, m_transverterDeltaFrequency);
+ s.writeBool(28, m_iqOrder);
+
return s.final();
}
@@ -128,6 +135,9 @@ bool SDRPlayV3Settings::deserialize(const QByteArray& data)
d.readS32(23, &m_tuner, 0);
d.readS32(24, &m_antenna, 0);
d.readBool(25, &m_extRef, false);
+ d.readBool(26, &m_transverterMode, false);
+ d.readS64(27, &m_transverterDeltaFrequency, 0);
+ d.readBool(28, &m_iqOrder, true);
return true;
}
diff --git a/plugins/samplesource/sdrplayv3/sdrplayv3settings.h b/plugins/samplesource/sdrplayv3/sdrplayv3settings.h
index 268d9326f..6a2ed2a90 100644
--- a/plugins/samplesource/sdrplayv3/sdrplayv3settings.h
+++ b/plugins/samplesource/sdrplayv3/sdrplayv3settings.h
@@ -50,6 +50,9 @@ struct SDRPlayV3Settings {
int m_tuner;
int m_antenna;
bool m_extRef;
+ bool m_transverterMode;
+ bool m_iqOrder;
+ qint64 m_transverterDeltaFrequency;
bool m_useReverseAPI;
QString m_reverseAPIAddress;
uint16_t m_reverseAPIPort;
diff --git a/plugins/samplesource/sdrplayv3/sdrplayv3thread.cpp b/plugins/samplesource/sdrplayv3/sdrplayv3thread.cpp
index 6861757fe..7a2709cac 100644
--- a/plugins/samplesource/sdrplayv3/sdrplayv3thread.cpp
+++ b/plugins/samplesource/sdrplayv3/sdrplayv3thread.cpp
@@ -33,7 +33,8 @@ SDRPlayV3Thread::SDRPlayV3Thread(sdrplay_api_DeviceT* dev, SampleSinkFifo* sampl
m_sampleFifo(sampleFifo),
m_samplerate(2000000),
m_log2Decim(0),
- m_fcPos(0)
+ m_fcPos(0),
+ m_iqOrder(true)
{
}
@@ -149,7 +150,11 @@ void SDRPlayV3Thread::callbackHelper(short *xi, short *xq, sdrplay_api_StreamCbP
iq[i*2+1] = xq[i];
}
- thread->callbackIQ(iq, numSamples*2);
+ if (thread->m_iqOrder) {
+ thread->callbackIQ(iq, numSamples*2);
+ } else {
+ thread->callbackQI(iq, numSamples*2);
+ }
}
}
@@ -245,3 +250,96 @@ void SDRPlayV3Thread::callbackIQ(const qint16* buf, qint32 len)
m_sampleFifo->write(m_convertBuffer.begin(), it);
}
+
+void SDRPlayV3Thread::callbackQI(const qint16* buf, qint32 len)
+{
+ SampleVector::iterator it = m_convertBuffer.begin();
+
+ if (m_log2Decim == 0)
+ {
+ m_decimatorsQI.decimate1(&it, buf, len);
+ }
+ else
+ {
+ if (m_fcPos == 0) // Infradyne
+ {
+ switch (m_log2Decim)
+ {
+ case 1:
+ m_decimatorsQI.decimate2_inf(&it, buf, len);
+ break;
+ case 2:
+ m_decimatorsQI.decimate4_inf(&it, buf, len);
+ break;
+ case 3:
+ m_decimatorsQI.decimate8_inf(&it, buf, len);
+ break;
+ case 4:
+ m_decimatorsQI.decimate16_inf(&it, buf, len);
+ break;
+ case 5:
+ m_decimatorsQI.decimate32_inf(&it, buf, len);
+ break;
+ case 6:
+ m_decimatorsQI.decimate64_inf(&it, buf, len);
+ break;
+ default:
+ break;
+ }
+ }
+ else if (m_fcPos == 1) // Supradyne
+ {
+ switch (m_log2Decim)
+ {
+ case 1:
+ m_decimatorsQI.decimate2_sup(&it, buf, len);
+ break;
+ case 2:
+ m_decimatorsQI.decimate4_sup(&it, buf, len);
+ break;
+ case 3:
+ m_decimatorsQI.decimate8_sup(&it, buf, len);
+ break;
+ case 4:
+ m_decimatorsQI.decimate16_sup(&it, buf, len);
+ break;
+ case 5:
+ m_decimatorsQI.decimate32_sup(&it, buf, len);
+ break;
+ case 6:
+ m_decimatorsQI.decimate64_sup(&it, buf, len);
+ break;
+ default:
+ break;
+ }
+ }
+ else // Centered
+ {
+ switch (m_log2Decim)
+ {
+ case 1:
+ m_decimatorsQI.decimate2_cen(&it, buf, len);
+ break;
+ case 2:
+ m_decimatorsQI.decimate4_cen(&it, buf, len);
+ break;
+ case 3:
+ m_decimatorsQI.decimate8_cen(&it, buf, len);
+ break;
+ case 4:
+ m_decimatorsQI.decimate16_cen(&it, buf, len);
+ break;
+ case 5:
+ m_decimatorsQI.decimate32_cen(&it, buf, len);
+ break;
+ case 6:
+ m_decimatorsQI.decimate64_cen(&it, buf, len);
+ break;
+ default:
+ break;
+ }
+ }
+ }
+
+ m_sampleFifo->write(m_convertBuffer.begin(), it);
+}
diff --git a/plugins/samplesource/sdrplayv3/sdrplayv3thread.h b/plugins/samplesource/sdrplayv3/sdrplayv3thread.h
index 2637263e6..2debf6320 100644
--- a/plugins/samplesource/sdrplayv3/sdrplayv3thread.h
+++ b/plugins/samplesource/sdrplayv3/sdrplayv3thread.h
@@ -41,6 +41,7 @@ public:
void setSamplerate(int samplerate);
void setLog2Decimation(unsigned int log2_decim);
void setFcPos(int fcPos);
+ void setIQOrder(bool iqOrder) { m_iqOrder = iqOrder; }
void resetRfChanged();
bool waitForRfChanged();
@@ -57,14 +58,17 @@ private:
int m_samplerate;
unsigned int m_log2Decim;
int m_fcPos;
+ bool m_iqOrder;
int m_rfChanged;
static const unsigned int m_rfChangedTimeout = 500;
Decimators m_decimatorsIQ;
+ Decimators m_decimatorsQI;
void run();
void callbackIQ(const qint16* buf, qint32 len);
+ void callbackQI(const qint16* buf, qint32 len);
static void callbackHelper(short *xi, short *xq, sdrplay_api_StreamCbParamsT *params, unsigned int numSamples, unsigned int reset, void *ctx);
static void eventCallback(sdrplay_api_EventT eventId, sdrplay_api_TunerSelectT tuner, sdrplay_api_EventParamsT *params, void *cbContext);
diff --git a/sdrbase/resources/webapi/doc/html2/index.html b/sdrbase/resources/webapi/doc/html2/index.html
index 36cf7fbd1..aac389257 100644
--- a/sdrbase/resources/webapi/doc/html2/index.html
+++ b/sdrbase/resources/webapi/doc/html2/index.html
@@ -10880,6 +10880,17 @@ margin-bottom: 20px;
"antenna" : {
"type" : "integer"
},
+ "transverterMode" : {
+ "type" : "integer"
+ },
+ "transverterDeltaFrequency" : {
+ "type" : "integer",
+ "format" : "int64"
+ },
+ "iqOrder" : {
+ "type" : "integer",
+ "description" : "IQ samples order\n * 0 - Q then I (swapped)\n * 1 - I then Q (straight)\n"
+ },
"useReverseAPI" : {
"type" : "integer",
"description" : "Synchronize with reverse API (1 for yes, 0 for no)"
@@ -52269,7 +52280,7 @@ except ApiException as e:
- Generated 2022-02-06T00:22:44.703+01:00
+ Generated 2022-02-06T20:14:33.369+01:00
diff --git a/sdrbase/resources/webapi/doc/swagger/include/SDRPlayV3.yaml b/sdrbase/resources/webapi/doc/swagger/include/SDRPlayV3.yaml
index 9ecdab669..db184656d 100644
--- a/sdrbase/resources/webapi/doc/swagger/include/SDRPlayV3.yaml
+++ b/sdrbase/resources/webapi/doc/swagger/include/SDRPlayV3.yaml
@@ -38,6 +38,17 @@ SDRPlayV3Settings:
type: integer
antenna:
type: integer
+ transverterMode:
+ type: integer
+ transverterDeltaFrequency:
+ type: integer
+ format: int64
+ iqOrder:
+ type: integer
+ description: >
+ IQ samples order
+ * 0 - Q then I (swapped)
+ * 1 - I then Q (straight)
useReverseAPI:
description: Synchronize with reverse API (1 for yes, 0 for no)
type: integer
diff --git a/swagger/sdrangel/api/swagger/include/SDRPlayV3.yaml b/swagger/sdrangel/api/swagger/include/SDRPlayV3.yaml
index 83b2606cf..6afb3ea82 100644
--- a/swagger/sdrangel/api/swagger/include/SDRPlayV3.yaml
+++ b/swagger/sdrangel/api/swagger/include/SDRPlayV3.yaml
@@ -38,6 +38,17 @@ SDRPlayV3Settings:
type: integer
antenna:
type: integer
+ transverterMode:
+ type: integer
+ transverterDeltaFrequency:
+ type: integer
+ format: int64
+ iqOrder:
+ type: integer
+ description: >
+ IQ samples order
+ * 0 - Q then I (swapped)
+ * 1 - I then Q (straight)
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 36cf7fbd1..aac389257 100644
--- a/swagger/sdrangel/code/html2/index.html
+++ b/swagger/sdrangel/code/html2/index.html
@@ -10880,6 +10880,17 @@ margin-bottom: 20px;
"antenna" : {
"type" : "integer"
},
+ "transverterMode" : {
+ "type" : "integer"
+ },
+ "transverterDeltaFrequency" : {
+ "type" : "integer",
+ "format" : "int64"
+ },
+ "iqOrder" : {
+ "type" : "integer",
+ "description" : "IQ samples order\n * 0 - Q then I (swapped)\n * 1 - I then Q (straight)\n"
+ },
"useReverseAPI" : {
"type" : "integer",
"description" : "Synchronize with reverse API (1 for yes, 0 for no)"
@@ -52269,7 +52280,7 @@ except ApiException as e:
- Generated 2022-02-06T00:22:44.703+01:00
+ Generated 2022-02-06T20:14:33.369+01:00
diff --git a/swagger/sdrangel/code/qt5/client/SWGSDRPlayV3Settings.cpp b/swagger/sdrangel/code/qt5/client/SWGSDRPlayV3Settings.cpp
index 777ae2e44..ddc012fa3 100644
--- a/swagger/sdrangel/code/qt5/client/SWGSDRPlayV3Settings.cpp
+++ b/swagger/sdrangel/code/qt5/client/SWGSDRPlayV3Settings.cpp
@@ -64,6 +64,12 @@ SWGSDRPlayV3Settings::SWGSDRPlayV3Settings() {
m_tuner_isSet = false;
antenna = 0;
m_antenna_isSet = false;
+ transverter_mode = 0;
+ m_transverter_mode_isSet = false;
+ transverter_delta_frequency = 0L;
+ m_transverter_delta_frequency_isSet = false;
+ iq_order = 0;
+ m_iq_order_isSet = false;
use_reverse_api = 0;
m_use_reverse_api_isSet = false;
reverse_api_address = nullptr;
@@ -116,6 +122,12 @@ SWGSDRPlayV3Settings::init() {
m_tuner_isSet = false;
antenna = 0;
m_antenna_isSet = false;
+ transverter_mode = 0;
+ m_transverter_mode_isSet = false;
+ transverter_delta_frequency = 0L;
+ m_transverter_delta_frequency_isSet = false;
+ iq_order = 0;
+ m_iq_order_isSet = false;
use_reverse_api = 0;
m_use_reverse_api_isSet = false;
reverse_api_address = new QString("");
@@ -145,6 +157,9 @@ SWGSDRPlayV3Settings::cleanup() {
+
+
+
if(reverse_api_address != nullptr) {
@@ -201,6 +216,12 @@ SWGSDRPlayV3Settings::fromJsonObject(QJsonObject &pJson) {
::SWGSDRangel::setValue(&antenna, pJson["antenna"], "qint32", "");
+ ::SWGSDRangel::setValue(&transverter_mode, pJson["transverterMode"], "qint32", "");
+
+ ::SWGSDRangel::setValue(&transverter_delta_frequency, pJson["transverterDeltaFrequency"], "qint64", "");
+
+ ::SWGSDRangel::setValue(&iq_order, pJson["iqOrder"], "qint32", "");
+
::SWGSDRangel::setValue(&use_reverse_api, pJson["useReverseAPI"], "qint32", "");
::SWGSDRangel::setValue(&reverse_api_address, pJson["reverseAPIAddress"], "QString", "QString");
@@ -279,6 +300,15 @@ SWGSDRPlayV3Settings::asJsonObject() {
if(m_antenna_isSet){
obj->insert("antenna", QJsonValue(antenna));
}
+ if(m_transverter_mode_isSet){
+ obj->insert("transverterMode", QJsonValue(transverter_mode));
+ }
+ if(m_transverter_delta_frequency_isSet){
+ obj->insert("transverterDeltaFrequency", QJsonValue(transverter_delta_frequency));
+ }
+ if(m_iq_order_isSet){
+ obj->insert("iqOrder", QJsonValue(iq_order));
+ }
if(m_use_reverse_api_isSet){
obj->insert("useReverseAPI", QJsonValue(use_reverse_api));
}
@@ -475,6 +505,36 @@ SWGSDRPlayV3Settings::setAntenna(qint32 antenna) {
this->m_antenna_isSet = true;
}
+qint32
+SWGSDRPlayV3Settings::getTransverterMode() {
+ return transverter_mode;
+}
+void
+SWGSDRPlayV3Settings::setTransverterMode(qint32 transverter_mode) {
+ this->transverter_mode = transverter_mode;
+ this->m_transverter_mode_isSet = true;
+}
+
+qint64
+SWGSDRPlayV3Settings::getTransverterDeltaFrequency() {
+ return transverter_delta_frequency;
+}
+void
+SWGSDRPlayV3Settings::setTransverterDeltaFrequency(qint64 transverter_delta_frequency) {
+ this->transverter_delta_frequency = transverter_delta_frequency;
+ this->m_transverter_delta_frequency_isSet = true;
+}
+
+qint32
+SWGSDRPlayV3Settings::getIqOrder() {
+ return iq_order;
+}
+void
+SWGSDRPlayV3Settings::setIqOrder(qint32 iq_order) {
+ this->iq_order = iq_order;
+ this->m_iq_order_isSet = true;
+}
+
qint32
SWGSDRPlayV3Settings::getUseReverseApi() {
return use_reverse_api;
@@ -574,6 +634,15 @@ SWGSDRPlayV3Settings::isSet(){
if(m_antenna_isSet){
isObjectUpdated = true; break;
}
+ if(m_transverter_mode_isSet){
+ isObjectUpdated = true; break;
+ }
+ if(m_transverter_delta_frequency_isSet){
+ isObjectUpdated = true; break;
+ }
+ if(m_iq_order_isSet){
+ isObjectUpdated = true; break;
+ }
if(m_use_reverse_api_isSet){
isObjectUpdated = true; break;
}
diff --git a/swagger/sdrangel/code/qt5/client/SWGSDRPlayV3Settings.h b/swagger/sdrangel/code/qt5/client/SWGSDRPlayV3Settings.h
index 7426749de..6df5cf747 100644
--- a/swagger/sdrangel/code/qt5/client/SWGSDRPlayV3Settings.h
+++ b/swagger/sdrangel/code/qt5/client/SWGSDRPlayV3Settings.h
@@ -96,6 +96,15 @@ public:
qint32 getAntenna();
void setAntenna(qint32 antenna);
+ qint32 getTransverterMode();
+ void setTransverterMode(qint32 transverter_mode);
+
+ qint64 getTransverterDeltaFrequency();
+ void setTransverterDeltaFrequency(qint64 transverter_delta_frequency);
+
+ qint32 getIqOrder();
+ void setIqOrder(qint32 iq_order);
+
qint32 getUseReverseApi();
void setUseReverseApi(qint32 use_reverse_api);
@@ -166,6 +175,15 @@ private:
qint32 antenna;
bool m_antenna_isSet;
+ qint32 transverter_mode;
+ bool m_transverter_mode_isSet;
+
+ qint64 transverter_delta_frequency;
+ bool m_transverter_delta_frequency_isSet;
+
+ qint32 iq_order;
+ bool m_iq_order_isSet;
+
qint32 use_reverse_api;
bool m_use_reverse_api_isSet;