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:
parent
d4410a003f
commit
2f737b77e2
@ -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);
|
||||
}
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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"/>
|
||||
|
||||
@ -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++)
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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:
|
||||
|
||||
@ -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>
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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>
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
@ -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;
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user