SDRPlayV3: implemented transverter feature. Updated documentation

This commit is contained in:
f4exb 2022-02-06 20:30:00 +01:00
parent 7880a523a7
commit 57a5551401
17 changed files with 395 additions and 32 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

View File

@ -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.
<h3>7: DC offset correction</h3>
<h3>7. Transverter mode open dialog</h3>
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)
<h3>8: DC offset correction</h3>
Check this button to enable DC offset correction.
<h3>8: IQ imbalance correction</h3>
<h3>9: IQ imbalance correction</h3>
Check this button to enable IQ imbalance correction.
<h3>9: External reference clock output</h3>
<h3>10: External reference clock output</h3>
Enable reference clock output. This is only available for RSP2 and DSPduo.
<h3>10: Bias tee</h3>
<h3>11: Bias tee</h3>
Enable bias tee. This is only available for RSP1A, RSP2, RSPduo tuner 2 and RSPdx.
<h3>11: AM notch filter</h3>
<h3>12: AM notch filter</h3>
Enable AM notch filter. This is only available for RSPduo tuner 1.
<h3>12: MW/FM notch filter</h3>
<h3>13: MW/FM notch filter</h3>
Enable MW/FM notch filter. This is only available for RSP1A, RSP2, RSPduo and RSPdx.
<h3>13: DAB notch filter</h3>
<h3>14: DAB notch filter</h3>
Enable DAB notch filter. This is only available for RSP1A, RSPduo and RSPdx.
<h3>14: IF bandwidth</h3>
<h3>15: IF bandwidth</h3>
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
<h3>15: IF frequency</h3>
<h3>16: IF frequency</h3>
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)
<h3>16: Sample rate</h3>
<h3>17: Sample rate</h3>
Sets the ADC IQ sample rats from 2M to 10.66M Hz.
<h3>17: Decimation</h3>
<h3>18: Decimation</h3>
Decimation in powers of two from 1 (no decimation) to 64.
<h3>18: Decimated bandpass center frequency position relative the SDRplay center frequency</h3>
<h3>19: Decimated bandpass center frequency position relative the SDRplay center frequency</h3>
- **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.
<h3>19. RF gain setting</h3>
<h3>20. RF gain setting</h3>
Sets the LNA and mixer gain dB. The settings available depended upon the RSP device and frequency band.
<h3>20. IF AGC</h3>
<h3>21. IF AGC</h3>
Check this button to enable IF automatic gain control.
<h3>21. IF gain</h3>
<h3>22. IF gain</h3>
Manual IF gain from 0 to -59 dB. Only enabled when IF AGC is disabled.

View File

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

View File

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

View File

@ -6,7 +6,7 @@
<rect>
<x>0</x>
<y>0</y>
<width>317</width>
<width>409</width>
<height>260</height>
</rect>
</property>
@ -278,6 +278,25 @@
</property>
</spacer>
</item>
<item>
<widget class="TransverterButton" name="transverter">
<property name="maximumSize">
<size>
<width>24</width>
<height>24</height>
</size>
</property>
<property name="toolTip">
<string>Transverter frequency translation dialog</string>
</property>
<property name="text">
<string>X</string>
</property>
<property name="checkable">
<bool>false</bool>
</property>
</widget>
</item>
</layout>
</item>
<item>
@ -791,6 +810,11 @@
<header>gui/valuedial.h</header>
<container>1</container>
</customwidget>
<customwidget>
<class>TransverterButton</class>
<extends>QPushButton</extends>
<header>gui/transverterbutton.h</header>
</customwidget>
</customwidgets>
<resources>
<include location="../../../sdrgui/resources/res.qrc"/>

View File

@ -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<QString>& 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)

View File

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

View File

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

View File

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

View File

@ -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<qint32, qint16, SDR_RX_SAMP_SZ, 16, true> m_decimatorsIQ;
Decimators<qint32, qint16, SDR_RX_SAMP_SZ, 16, false> 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);

View File

@ -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:
</div>
<div id="generator">
<div class="content">
Generated 2022-02-06T00:22:44.703+01:00
Generated 2022-02-06T20:14:33.369+01:00
</div>
</div>
</div>

View File

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

View File

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

View File

@ -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:
</div>
<div id="generator">
<div class="content">
Generated 2022-02-06T00:22:44.703+01:00
Generated 2022-02-06T20:14:33.369+01:00
</div>
</div>
</div>

View File

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

View File

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