1
0
mirror of https://github.com/f4exb/sdrangel.git synced 2026-04-30 19:34:00 -04:00

Metis MISO: implemented transverter mode

This commit is contained in:
f4exb 2020-09-08 15:18:50 +02:00
parent d4410a003f
commit 2f737b77e2
14 changed files with 435 additions and 46 deletions

View File

@ -289,15 +289,20 @@ bool MetisMISO::applySettings(const MetisMISOSettings& settings, bool force)
<< " 8:" << settings.m_rxCenterFrequencies[7]
<< " ] m_txCenterFrequency:" << settings.m_txCenterFrequency
<< " m_rxSubsamplingIndexes: ["
<< " 1:"<< settings.m_rxSubsamplingIndexes[0]
<< " 2:"<< settings.m_rxSubsamplingIndexes[1]
<< " 3:"<< settings.m_rxSubsamplingIndexes[2]
<< " 4:"<< settings.m_rxSubsamplingIndexes[3]
<< " 5:"<< settings.m_rxSubsamplingIndexes[4]
<< " 6:"<< settings.m_rxSubsamplingIndexes[5]
<< " 7:"<< settings.m_rxSubsamplingIndexes[6]
<< " 8:"<< settings.m_rxSubsamplingIndexes[7]
<< " ] m_sampleRateIndex:" << settings.m_sampleRateIndex
<< " 1:" << settings.m_rxSubsamplingIndexes[0]
<< " 2:" << settings.m_rxSubsamplingIndexes[1]
<< " 3:" << settings.m_rxSubsamplingIndexes[2]
<< " 4:" << settings.m_rxSubsamplingIndexes[3]
<< " 5:" << settings.m_rxSubsamplingIndexes[4]
<< " 6:" << settings.m_rxSubsamplingIndexes[5]
<< " 7:" << settings.m_rxSubsamplingIndexes[6]
<< " 8:" << settings.m_rxSubsamplingIndexes[7]
<< " ] m_rxTransverterMode:" << settings.m_rxTransverterMode
<< " m_rxTransverterDeltaFrequency:" << settings.m_rxTransverterDeltaFrequency
<< " m_txTransverterMode:" << settings.m_txTransverterMode
<< " m_txTransverterDeltaFrequency:" << settings.m_txTransverterDeltaFrequency
<< " m_iqOrder:" << settings.m_iqOrder
<< " m_sampleRateIndex:" << settings.m_sampleRateIndex
<< " m_log2Decim:" << settings.m_log2Decim
<< " m_preamp:" << settings.m_preamp
<< " m_random:" << settings.m_random
@ -346,6 +351,36 @@ bool MetisMISO::applySettings(const MetisMISOSettings& settings, bool force)
propagateSettings = true;
}
if ((m_settings.m_rxTransverterMode != settings.m_rxTransverterMode) || force)
{
reverseAPIKeys.append("rxTransverterMode");
propagateSettings = true;
}
if ((m_settings.m_rxTransverterDeltaFrequency != settings.m_rxTransverterDeltaFrequency) || force)
{
reverseAPIKeys.append("rxTransverterDeltaFrequency");
propagateSettings = true;
}
if ((m_settings.m_txTransverterMode != settings.m_txTransverterMode) || force)
{
reverseAPIKeys.append("txTransverterMode");
propagateSettings = true;
}
if ((m_settings.m_txTransverterDeltaFrequency != settings.m_txTransverterDeltaFrequency) || force)
{
reverseAPIKeys.append("txTransverterDeltaFrequency");
propagateSettings = true;
}
if ((m_settings.m_iqOrder != settings.m_iqOrder) || force)
{
reverseAPIKeys.append("iqOrder");
propagateSettings = true;
}
if ((m_settings.m_sampleRateIndex != settings.m_sampleRateIndex) || force)
{
reverseAPIKeys.append("sampleRateIndex");
@ -526,6 +561,21 @@ void MetisMISO::webapiUpdateDeviceSettings(
if (deviceSettingsKeys.contains("txCenterFrequency")) {
settings.m_txCenterFrequency = response.getMetisMisoSettings()->getTxCenterFrequency();
}
if (deviceSettingsKeys.contains("rxTransverterMode")) {
settings.m_rxTransverterMode = response.getMetisMisoSettings()->getRxTransverterMode() != 0;
}
if (deviceSettingsKeys.contains("rxTransverterDeltaFrequency")) {
settings.m_rxTransverterDeltaFrequency = response.getMetisMisoSettings()->getRxTransverterDeltaFrequency();
}
if (deviceSettingsKeys.contains("txTransverterMode")) {
settings.m_txTransverterMode = response.getMetisMisoSettings()->getTxTransverterMode() != 0;
}
if (deviceSettingsKeys.contains("txTransverterDeltaFrequency")) {
settings.m_txTransverterDeltaFrequency = response.getMetisMisoSettings()->getTxTransverterDeltaFrequency();
}
if (deviceSettingsKeys.contains("iqOrder")) {
settings.m_iqOrder = response.getMetisMisoSettings()->getIqOrder() != 0;
}
if (deviceSettingsKeys.contains("sampleRateIndex")) {
settings.m_sampleRateIndex = response.getMetisMisoSettings()->getSampleRateIndex();
}
@ -580,6 +630,11 @@ void MetisMISO::webapiFormatDeviceSettings(SWGSDRangel::SWGDeviceSettings& respo
}
response.getMetisMisoSettings()->setTxCenterFrequency(settings.m_txCenterFrequency);
response.getMetisMisoSettings()->setRxTransverterMode(settings.m_rxTransverterMode ? 1 : 0);
response.getMetisMisoSettings()->setRxTransverterDeltaFrequency(settings.m_rxTransverterDeltaFrequency);
response.getMetisMisoSettings()->setTxTransverterMode(settings.m_txTransverterMode ? 1 : 0);
response.getMetisMisoSettings()->setTxTransverterDeltaFrequency(settings.m_txTransverterDeltaFrequency);
response.getMetisMisoSettings()->setIqOrder(settings.m_iqOrder ? 1 : 0);
response.getMetisMisoSettings()->setSampleRateIndex(settings.m_sampleRateIndex);
response.getMetisMisoSettings()->setLog2Decim(settings.m_log2Decim);
response.getMetisMisoSettings()->setLOppmTenths(settings.m_LOppmTenths);
@ -630,6 +685,21 @@ void MetisMISO::webapiReverseSendSettings(const QList<QString>& deviceSettingsKe
if (deviceSettingsKeys.contains("txCenterFrequency") || force) {
swgMetisMISOSettings->setTxCenterFrequency(settings.m_txCenterFrequency);
}
if (deviceSettingsKeys.contains("rxTransverterMode") || force) {
swgMetisMISOSettings->setRxTransverterMode(settings.m_rxTransverterMode ? 1 : 0);
}
if (deviceSettingsKeys.contains("rxTransverterDeltaFrequency") || force) {
swgMetisMISOSettings->setRxTransverterDeltaFrequency(settings.m_rxTransverterDeltaFrequency);
}
if (deviceSettingsKeys.contains("txTransverterMode") || force) {
swgMetisMISOSettings->setTxTransverterMode(settings.m_txTransverterMode ? 1 : 0);
}
if (deviceSettingsKeys.contains("txTransverterDeltaFrequency") || force) {
swgMetisMISOSettings->setTxTransverterDeltaFrequency(settings.m_txTransverterDeltaFrequency);
}
if (deviceSettingsKeys.contains("iqOrder") || force) {
swgMetisMISOSettings->setIqOrder(settings.m_iqOrder ? 1 : 0);
}
if (deviceSettingsKeys.contains("sampleRateIndex") || force) {
swgMetisMISOSettings->setSampleRateIndex(settings.m_sampleRateIndex);
}

View File

@ -260,6 +260,7 @@ void MetisMISOGui::on_subsamplingIndex_currentIndexChanged(int index)
ui->subsamplingIndex->setToolTip(tr("Subsampling band index [%1 - %2 MHz]")
.arg(index*61.44).arg((index+1)*61.44));
displayFrequency();
setCenterFrequency(ui->centerFrequency->getValueNew() * 1000);
sendSettings();
}
}
@ -276,6 +277,27 @@ void MetisMISOGui::on_iqCorrection_toggled(bool checked)
sendSettings();
}
void MetisMISOGui::on_transverter_clicked()
{
if (m_streamIndex < MetisMISOSettings::m_maxReceivers)
{
m_settings.m_rxTransverterMode = ui->transverter->getDeltaFrequencyAcive();
m_settings.m_rxTransverterDeltaFrequency = ui->transverter->getDeltaFrequency();
m_settings.m_iqOrder = ui->transverter->getIQOrder();
qDebug("MetisMISOGui::on_transverter_clicked: Rx: %lld Hz %s", m_settings.m_rxTransverterDeltaFrequency, m_settings.m_rxTransverterMode ? "on" : "off");
}
else
{
m_settings.m_txTransverterMode = ui->transverter->getDeltaFrequencyAcive();
m_settings.m_txTransverterDeltaFrequency = ui->transverter->getDeltaFrequency();
qDebug("MetisMISOGui::on_transverter_clicked: Tx: %lld Hz %s", m_settings.m_txTransverterDeltaFrequency, m_settings.m_txTransverterMode ? "on" : "off");
}
displayFrequency();
setCenterFrequency(ui->centerFrequency->getValueNew() * 1000);
sendSettings();
}
void MetisMISOGui::on_preamp_toggled(bool checked)
{
m_settings.m_preamp = checked;
@ -472,24 +494,29 @@ void MetisMISOGui::handleInputMessages()
void MetisMISOGui::displayFrequency()
{
qint64 centerFrequency;
qint64 fBaseLow, fBaseHigh;
if (m_streamIndex < MetisMISOSettings::m_maxReceivers)
{
int subsamplingIndex = m_settings.m_rxSubsamplingIndexes[m_streamIndex];
centerFrequency = m_settings.m_rxCenterFrequencies[m_streamIndex];
ui->centerFrequency->setValueRange(7, subsamplingIndex*61440, (subsamplingIndex+1)*61440);
fBaseLow = subsamplingIndex*61440;
fBaseHigh = (subsamplingIndex+1)*61440;
}
else if (m_streamIndex == MetisMISOSettings::m_maxReceivers)
{
centerFrequency = m_settings.m_txCenterFrequency;
ui->centerFrequency->setValueRange(7, 0, 61440);
fBaseLow = 0;
fBaseHigh = 61440;
}
else
{
fBaseLow = 0;
fBaseHigh = 61440;
centerFrequency = 0;
ui->centerFrequency->setValueRange(7, 0, 61440);
}
ui->centerFrequency->setValueRange(7, fBaseLow, fBaseHigh);
ui->centerFrequency->setValue(centerFrequency / 1000);
}

View File

@ -93,6 +93,7 @@ private slots:
void on_subsamplingIndex_currentIndexChanged(int index);
void on_dcBlock_toggled(bool checked);
void on_iqCorrection_toggled(bool checked);
void on_transverter_clicked();
void on_preamp_toggled(bool checked);
void on_random_toggled(bool checked);
void on_dither_toggled(bool checked);

View File

@ -727,6 +727,22 @@
</property>
</widget>
</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>
</widget>
</item>
</layout>
</item>
<item>
@ -812,6 +828,11 @@
<extends>QToolButton</extends>
<header>gui/buttonswitch.h</header>
</customwidget>
<customwidget>
<class>TransverterButton</class>
<extends>QPushButton</extends>
<header>gui/transverterbutton.h</header>
</customwidget>
</customwidgets>
<resources>
<include location="../../../sdrgui/resources/res.qrc"/>

View File

@ -31,6 +31,11 @@ MetisMISOSettings::MetisMISOSettings(const MetisMISOSettings& other)
std::copy(other.m_rxCenterFrequencies, other.m_rxCenterFrequencies + m_maxReceivers, m_rxCenterFrequencies);
std::copy(other.m_rxSubsamplingIndexes, other.m_rxSubsamplingIndexes + m_maxReceivers, m_rxSubsamplingIndexes);
m_txCenterFrequency = other.m_txCenterFrequency;
m_rxTransverterMode = other.m_rxTransverterMode;
m_rxTransverterDeltaFrequency = other.m_rxTransverterDeltaFrequency;
m_txTransverterMode = other.m_txTransverterMode;
m_txTransverterDeltaFrequency = other.m_txTransverterDeltaFrequency;
m_iqOrder = other.m_iqOrder;
m_sampleRateIndex = other.m_sampleRateIndex;
m_log2Decim = other.m_log2Decim;
m_LOppmTenths = other.m_LOppmTenths;
@ -54,6 +59,11 @@ void MetisMISOSettings::resetToDefaults()
std::fill(m_rxCenterFrequencies, m_rxCenterFrequencies + m_maxReceivers, 7074000);
std::fill(m_rxSubsamplingIndexes, m_rxSubsamplingIndexes + m_maxReceivers, 0);
m_txCenterFrequency = 7074000;
m_rxTransverterMode = false;
m_rxTransverterDeltaFrequency = 0;
m_txTransverterMode = false;
m_txTransverterDeltaFrequency = 0;
m_iqOrder = true;
m_sampleRateIndex = 0; // 48000 kS/s
m_log2Decim = 0;
m_LOppmTenths = 0;
@ -77,20 +87,25 @@ QByteArray MetisMISOSettings::serialize() const
s.writeU32(1, m_nbReceivers);
s.writeBool(2, m_txEnable);
s.writeU64(3, m_txCenterFrequency);
s.writeU32(4, m_sampleRateIndex);
s.writeU32(5, m_log2Decim);
s.writeS32(6, m_LOppmTenths);
s.writeBool(7, m_preamp);
s.writeBool(8, m_random);
s.writeBool(9, m_dither);
s.writeBool(10, m_duplex);
s.writeBool(11, m_dcBlock);
s.writeBool(12, m_iqCorrection);
s.writeU32(13, m_txDrive);
s.writeBool(14, m_useReverseAPI);
s.writeString(15, m_reverseAPIAddress);
s.writeU32(16, m_reverseAPIPort);
s.writeU32(17, m_reverseAPIDeviceIndex);
s.writeBool(4, m_rxTransverterMode);
s.writeS64(5, m_rxTransverterDeltaFrequency);
s.writeBool(6, m_txTransverterMode);
s.writeS64(7, m_txTransverterDeltaFrequency);
s.writeBool(8, m_iqOrder);
s.writeU32(9, m_sampleRateIndex);
s.writeU32(10, m_log2Decim);
s.writeS32(11, m_LOppmTenths);
s.writeBool(12, m_preamp);
s.writeBool(13, m_random);
s.writeBool(14, m_dither);
s.writeBool(15, m_duplex);
s.writeBool(16, m_dcBlock);
s.writeBool(17, m_iqCorrection);
s.writeU32(18, m_txDrive);
s.writeBool(19, m_useReverseAPI);
s.writeString(20, m_reverseAPIAddress);
s.writeU32(21, m_reverseAPIPort);
s.writeU32(22, m_reverseAPIDeviceIndex);
for (int i = 0; i < m_maxReceivers; i++)
{
@ -119,19 +134,24 @@ bool MetisMISOSettings::deserialize(const QByteArray& data)
d.readU32(1, &m_nbReceivers, 1);
d.readBool(2, &m_txEnable, false);
d.readU64(3, &m_txCenterFrequency, 7074000);
d.readU32(4, &m_sampleRateIndex, 0);
d.readU32(5, &m_log2Decim, 0);
d.readS32(6, &m_LOppmTenths, 0);
d.readBool(7, &m_preamp, false);
d.readBool(8, &m_random, false);
d.readBool(9, &m_dither, false);
d.readBool(10, &m_duplex, false);
d.readBool(11, &m_dcBlock, false);
d.readBool(12, &m_iqCorrection, false);
d.readU32(13, &m_txDrive, 15);
d.readBool(14, &m_useReverseAPI, false);
d.readString(15, &m_reverseAPIAddress, "127.0.0.1");
d.readU32(16, &utmp, 0);
d.readBool(4, &m_rxTransverterMode, false);
d.readS64(5, &m_rxTransverterDeltaFrequency, 0);
d.readBool(6, &m_txTransverterMode, false);
d.readS64(7, &m_txTransverterDeltaFrequency, 0);
d.readBool(8, &m_iqOrder, true);
d.readU32(9, &m_sampleRateIndex, 0);
d.readU32(10, &m_log2Decim, 0);
d.readS32(11, &m_LOppmTenths, 0);
d.readBool(12, &m_preamp, false);
d.readBool(13, &m_random, false);
d.readBool(14, &m_dither, false);
d.readBool(15, &m_duplex, false);
d.readBool(16, &m_dcBlock, false);
d.readBool(17, &m_iqCorrection, false);
d.readU32(18, &m_txDrive, 15);
d.readBool(19, &m_useReverseAPI, false);
d.readString(20, &m_reverseAPIAddress, "127.0.0.1");
d.readU32(21, &utmp, 0);
if ((utmp > 1023) && (utmp < 65535)) {
m_reverseAPIPort = utmp;
@ -139,7 +159,7 @@ bool MetisMISOSettings::deserialize(const QByteArray& data)
m_reverseAPIPort = 8888;
}
d.readU32(17, &utmp, 0);
d.readU32(22, &utmp, 0);
m_reverseAPIDeviceIndex = utmp > 99 ? 99 : utmp;
for (int i = 0; i < m_maxReceivers; i++)

View File

@ -27,6 +27,11 @@ struct MetisMISOSettings {
quint64 m_rxCenterFrequencies[m_maxReceivers];
unsigned int m_rxSubsamplingIndexes[m_maxReceivers];
quint64 m_txCenterFrequency;
bool m_rxTransverterMode;
qint64 m_rxTransverterDeltaFrequency;
bool m_txTransverterMode;
qint64 m_txTransverterDeltaFrequency;
bool m_iqOrder;
unsigned int m_sampleRateIndex;
unsigned int m_log2Decim;
int m_LOppmTenths;

View File

@ -402,7 +402,7 @@ int MetisMISOUDPHandler::getCommandValue(int commandIndex)
}
else if (commandIndex == 2)
{
return m_settings.m_txCenterFrequency;
return getTxCenterFrequency();
}
else if (commandIndex == 4)
{
@ -451,11 +451,14 @@ quint64 MetisMISOUDPHandler::getRxCenterFrequency(int index)
{
qint64 deviceCenterFrequency;
qint64 loHalfFrequency = 61440000LL - ((m_settings.m_LOppmTenths * 122880000LL) / 20000000LL);
qint64 requiredRxFrequency = m_settings.m_rxCenterFrequencies[index]
- (m_settings.m_rxTransverterMode ? m_settings.m_rxTransverterDeltaFrequency : 0);
requiredRxFrequency = requiredRxFrequency < 0 ? 0 : requiredRxFrequency;
if (m_settings.m_rxSubsamplingIndexes[index] % 2 == 0) {
deviceCenterFrequency = m_settings.m_rxCenterFrequencies[index] - m_settings.m_rxSubsamplingIndexes[index]*loHalfFrequency;
deviceCenterFrequency = requiredRxFrequency - m_settings.m_rxSubsamplingIndexes[index]*loHalfFrequency;
} else {
deviceCenterFrequency = (m_settings.m_rxSubsamplingIndexes[index] + 1)*loHalfFrequency - m_settings.m_rxCenterFrequencies[index];
deviceCenterFrequency = (m_settings.m_rxSubsamplingIndexes[index] + 1)*loHalfFrequency - requiredRxFrequency;
}
qint64 df = ((qint64)deviceCenterFrequency * m_settings.m_LOppmTenths) / 10000000LL;
@ -464,9 +467,17 @@ quint64 MetisMISOUDPHandler::getRxCenterFrequency(int index)
return deviceCenterFrequency < 0 ? 0 : deviceCenterFrequency > 61440000 ? 61440000 : deviceCenterFrequency;
}
quint64 MetisMISOUDPHandler::getTxCenterFrequency()
{
qint64 requiredTxFrequency = m_settings.m_txCenterFrequency;
- (m_settings.m_txTransverterMode ? m_settings.m_txTransverterDeltaFrequency : 0);
requiredTxFrequency = requiredTxFrequency < 0 ? 0 : requiredTxFrequency;
return requiredTxFrequency;
}
bool MetisMISOUDPHandler::getRxIQInversion(int index)
{
return (m_settings.m_rxSubsamplingIndexes[index] % 2) == 1;
return ((m_settings.m_rxSubsamplingIndexes[index] % 2) == 1) ^ !m_settings.m_iqOrder;
}
void MetisMISOUDPHandler::processIQBuffer(unsigned char* buffer)

View File

@ -127,6 +127,7 @@ private:
int getCommandValue(int commandIndex);
void processIQBuffer(unsigned char* buffer);
quint64 getRxCenterFrequency(int index);
quint64 getTxCenterFrequency();
bool getRxIQInversion(int index);
private slots:

View File

@ -5521,6 +5521,26 @@ margin-bottom: 20px;
"type" : "integer",
"format" : "int64"
},
"rxTransverterMode" : {
"type" : "integer",
"description" : "Rx transverter activated * 0 - disabled * 1 - enabled\n"
},
"rxTransverterDeltaFrequency" : {
"type" : "integer",
"format" : "int64"
},
"txTransverterMode" : {
"type" : "integer",
"description" : "Tx transverter activated * 0 - disabled * 1 - enabled\n"
},
"txTransverterDeltaFrequency" : {
"type" : "integer",
"format" : "int64"
},
"iqOrder" : {
"type" : "integer",
"description" : "I/Q samples order * 0 - I then Q (direct) * 1 - Q then I (reversed)\n"
},
"rxSubsamplingIndexes" : {
"type" : "array",
"description" : "subsampling band indexes of receivers",
@ -37545,7 +37565,7 @@ except ApiException as e:
</div>
<div id="generator">
<div class="content">
Generated 2020-09-08T00:09:01.185+02:00
Generated 2020-09-08T08:55:28.204+02:00
</div>
</div>
</div>

View File

@ -19,6 +19,30 @@ MetisMISOSettings:
txCenterFrequency:
type: integer
format: int64
rxTransverterMode:
type: integer
description: >
Rx transverter activated
* 0 - disabled
* 1 - enabled
rxTransverterDeltaFrequency:
type: integer
format: int64
txTransverterMode:
type: integer
description: >
Tx transverter activated
* 0 - disabled
* 1 - enabled
txTransverterDeltaFrequency:
type: integer
format: int64
iqOrder:
type: integer
description: >
I/Q samples order
* 0 - I then Q (direct)
* 1 - Q then I (reversed)
rxSubsamplingIndexes:
description: subsampling band indexes of receivers
type: array

View File

@ -19,6 +19,30 @@ MetisMISOSettings:
txCenterFrequency:
type: integer
format: int64
rxTransverterMode:
type: integer
description: >
Rx transverter activated
* 0 - disabled
* 1 - enabled
rxTransverterDeltaFrequency:
type: integer
format: int64
txTransverterMode:
type: integer
description: >
Tx transverter activated
* 0 - disabled
* 1 - enabled
txTransverterDeltaFrequency:
type: integer
format: int64
iqOrder:
type: integer
description: >
I/Q samples order
* 0 - I then Q (direct)
* 1 - Q then I (reversed)
rxSubsamplingIndexes:
description: subsampling band indexes of receivers
type: array

View File

@ -5521,6 +5521,26 @@ margin-bottom: 20px;
"type" : "integer",
"format" : "int64"
},
"rxTransverterMode" : {
"type" : "integer",
"description" : "Rx transverter activated * 0 - disabled * 1 - enabled\n"
},
"rxTransverterDeltaFrequency" : {
"type" : "integer",
"format" : "int64"
},
"txTransverterMode" : {
"type" : "integer",
"description" : "Tx transverter activated * 0 - disabled * 1 - enabled\n"
},
"txTransverterDeltaFrequency" : {
"type" : "integer",
"format" : "int64"
},
"iqOrder" : {
"type" : "integer",
"description" : "I/Q samples order * 0 - I then Q (direct) * 1 - Q then I (reversed)\n"
},
"rxSubsamplingIndexes" : {
"type" : "array",
"description" : "subsampling band indexes of receivers",
@ -37545,7 +37565,7 @@ except ApiException as e:
</div>
<div id="generator">
<div class="content">
Generated 2020-09-08T00:09:01.185+02:00
Generated 2020-09-08T08:55:28.204+02:00
</div>
</div>
</div>

View File

@ -36,6 +36,16 @@ SWGMetisMISOSettings::SWGMetisMISOSettings() {
m_rx_center_frequencies_isSet = false;
tx_center_frequency = 0L;
m_tx_center_frequency_isSet = false;
rx_transverter_mode = 0;
m_rx_transverter_mode_isSet = false;
rx_transverter_delta_frequency = 0L;
m_rx_transverter_delta_frequency_isSet = false;
tx_transverter_mode = 0;
m_tx_transverter_mode_isSet = false;
tx_transverter_delta_frequency = 0L;
m_tx_transverter_delta_frequency_isSet = false;
iq_order = 0;
m_iq_order_isSet = false;
rx_subsampling_indexes = new QList<qint32>();
m_rx_subsampling_indexes_isSet = false;
sample_rate_index = 0;
@ -82,6 +92,16 @@ SWGMetisMISOSettings::init() {
m_rx_center_frequencies_isSet = false;
tx_center_frequency = 0L;
m_tx_center_frequency_isSet = false;
rx_transverter_mode = 0;
m_rx_transverter_mode_isSet = false;
rx_transverter_delta_frequency = 0L;
m_rx_transverter_delta_frequency_isSet = false;
tx_transverter_mode = 0;
m_tx_transverter_mode_isSet = false;
tx_transverter_delta_frequency = 0L;
m_tx_transverter_delta_frequency_isSet = false;
iq_order = 0;
m_iq_order_isSet = false;
rx_subsampling_indexes = new QList<qint32>();
m_rx_subsampling_indexes_isSet = false;
sample_rate_index = 0;
@ -131,6 +151,11 @@ SWGMetisMISOSettings::cleanup() {
if(reverse_api_address != nullptr) {
delete reverse_api_address;
@ -158,6 +183,16 @@ SWGMetisMISOSettings::fromJsonObject(QJsonObject &pJson) {
::SWGSDRangel::setValue(&rx_center_frequencies, pJson["rxCenterFrequencies"], "QList", "qint64");
::SWGSDRangel::setValue(&tx_center_frequency, pJson["txCenterFrequency"], "qint64", "");
::SWGSDRangel::setValue(&rx_transverter_mode, pJson["rxTransverterMode"], "qint32", "");
::SWGSDRangel::setValue(&rx_transverter_delta_frequency, pJson["rxTransverterDeltaFrequency"], "qint64", "");
::SWGSDRangel::setValue(&tx_transverter_mode, pJson["txTransverterMode"], "qint32", "");
::SWGSDRangel::setValue(&tx_transverter_delta_frequency, pJson["txTransverterDeltaFrequency"], "qint64", "");
::SWGSDRangel::setValue(&iq_order, pJson["iqOrder"], "qint32", "");
::SWGSDRangel::setValue(&rx_subsampling_indexes, pJson["rxSubsamplingIndexes"], "QList", "qint32");
::SWGSDRangel::setValue(&sample_rate_index, pJson["sampleRateIndex"], "qint32", "");
@ -216,6 +251,21 @@ SWGMetisMISOSettings::asJsonObject() {
if(m_tx_center_frequency_isSet){
obj->insert("txCenterFrequency", QJsonValue(tx_center_frequency));
}
if(m_rx_transverter_mode_isSet){
obj->insert("rxTransverterMode", QJsonValue(rx_transverter_mode));
}
if(m_rx_transverter_delta_frequency_isSet){
obj->insert("rxTransverterDeltaFrequency", QJsonValue(rx_transverter_delta_frequency));
}
if(m_tx_transverter_mode_isSet){
obj->insert("txTransverterMode", QJsonValue(tx_transverter_mode));
}
if(m_tx_transverter_delta_frequency_isSet){
obj->insert("txTransverterDeltaFrequency", QJsonValue(tx_transverter_delta_frequency));
}
if(m_iq_order_isSet){
obj->insert("iqOrder", QJsonValue(iq_order));
}
if(rx_subsampling_indexes && rx_subsampling_indexes->size() > 0){
toJsonArray((QList<void*>*)rx_subsampling_indexes, obj, "rxSubsamplingIndexes", "");
}
@ -305,6 +355,56 @@ SWGMetisMISOSettings::setTxCenterFrequency(qint64 tx_center_frequency) {
this->m_tx_center_frequency_isSet = true;
}
qint32
SWGMetisMISOSettings::getRxTransverterMode() {
return rx_transverter_mode;
}
void
SWGMetisMISOSettings::setRxTransverterMode(qint32 rx_transverter_mode) {
this->rx_transverter_mode = rx_transverter_mode;
this->m_rx_transverter_mode_isSet = true;
}
qint64
SWGMetisMISOSettings::getRxTransverterDeltaFrequency() {
return rx_transverter_delta_frequency;
}
void
SWGMetisMISOSettings::setRxTransverterDeltaFrequency(qint64 rx_transverter_delta_frequency) {
this->rx_transverter_delta_frequency = rx_transverter_delta_frequency;
this->m_rx_transverter_delta_frequency_isSet = true;
}
qint32
SWGMetisMISOSettings::getTxTransverterMode() {
return tx_transverter_mode;
}
void
SWGMetisMISOSettings::setTxTransverterMode(qint32 tx_transverter_mode) {
this->tx_transverter_mode = tx_transverter_mode;
this->m_tx_transverter_mode_isSet = true;
}
qint64
SWGMetisMISOSettings::getTxTransverterDeltaFrequency() {
return tx_transverter_delta_frequency;
}
void
SWGMetisMISOSettings::setTxTransverterDeltaFrequency(qint64 tx_transverter_delta_frequency) {
this->tx_transverter_delta_frequency = tx_transverter_delta_frequency;
this->m_tx_transverter_delta_frequency_isSet = true;
}
qint32
SWGMetisMISOSettings::getIqOrder() {
return iq_order;
}
void
SWGMetisMISOSettings::setIqOrder(qint32 iq_order) {
this->iq_order = iq_order;
this->m_iq_order_isSet = true;
}
QList<qint32>*
SWGMetisMISOSettings::getRxSubsamplingIndexes() {
return rx_subsampling_indexes;
@ -475,6 +575,21 @@ SWGMetisMISOSettings::isSet(){
if(m_tx_center_frequency_isSet){
isObjectUpdated = true; break;
}
if(m_rx_transverter_mode_isSet){
isObjectUpdated = true; break;
}
if(m_rx_transverter_delta_frequency_isSet){
isObjectUpdated = true; break;
}
if(m_tx_transverter_mode_isSet){
isObjectUpdated = true; break;
}
if(m_tx_transverter_delta_frequency_isSet){
isObjectUpdated = true; break;
}
if(m_iq_order_isSet){
isObjectUpdated = true; break;
}
if(m_rx_subsampling_indexes_isSet){
isObjectUpdated = true; break;
}

View File

@ -55,6 +55,21 @@ public:
qint64 getTxCenterFrequency();
void setTxCenterFrequency(qint64 tx_center_frequency);
qint32 getRxTransverterMode();
void setRxTransverterMode(qint32 rx_transverter_mode);
qint64 getRxTransverterDeltaFrequency();
void setRxTransverterDeltaFrequency(qint64 rx_transverter_delta_frequency);
qint32 getTxTransverterMode();
void setTxTransverterMode(qint32 tx_transverter_mode);
qint64 getTxTransverterDeltaFrequency();
void setTxTransverterDeltaFrequency(qint64 tx_transverter_delta_frequency);
qint32 getIqOrder();
void setIqOrder(qint32 iq_order);
QList<qint32>* getRxSubsamplingIndexes();
void setRxSubsamplingIndexes(QList<qint32>* rx_subsampling_indexes);
@ -116,6 +131,21 @@ private:
qint64 tx_center_frequency;
bool m_tx_center_frequency_isSet;
qint32 rx_transverter_mode;
bool m_rx_transverter_mode_isSet;
qint64 rx_transverter_delta_frequency;
bool m_rx_transverter_delta_frequency_isSet;
qint32 tx_transverter_mode;
bool m_tx_transverter_mode_isSet;
qint64 tx_transverter_delta_frequency;
bool m_tx_transverter_delta_frequency_isSet;
qint32 iq_order;
bool m_iq_order_isSet;
QList<qint32>* rx_subsampling_indexes;
bool m_rx_subsampling_indexes_isSet;