1
0
mirror of https://github.com/f4exb/sdrangel.git synced 2026-04-25 17:04:00 -04:00

Metis MISO: added the 8th receiver without frequency control

This commit is contained in:
f4exb 2020-09-05 18:26:19 +02:00
parent 73487e619e
commit bd08d4a7f3
14 changed files with 135 additions and 34 deletions

View File

@ -79,7 +79,7 @@ void DeviceMetisScan::enumOriginDevices(const QString& hardwareId, PluginInterfa
hardwareId,
serial,
i, // sequence
7, // Nb Rx
8, // Nb Rx
1 // Nb Tx
));
}

View File

@ -283,7 +283,11 @@ bool MetisMISO::applySettings(const MetisMISOSettings& settings, bool force)
<< " m_rx1CenterFrequency:" << settings.m_rx1CenterFrequency
<< " m_rx2CenterFrequency:" << settings.m_rx2CenterFrequency
<< " m_rx3CenterFrequency:" << settings.m_rx3CenterFrequency
<< " m_rx3CenterFrequency:" << settings.m_rx4CenterFrequency
<< " m_rx4CenterFrequency:" << settings.m_rx4CenterFrequency
<< " m_rx5CenterFrequency:" << settings.m_rx5CenterFrequency
<< " m_rx6CenterFrequency:" << settings.m_rx6CenterFrequency
<< " m_rx7CenterFrequency:" << settings.m_rx7CenterFrequency
<< " m_rx8CenterFrequency:" << settings.m_rx8CenterFrequency
<< " m_txCenterFrequency:" << settings.m_txCenterFrequency
<< " m_sampleRateIndex:" << settings.m_sampleRateIndex
<< " m_log2Decim:" << settings.m_log2Decim
@ -348,6 +352,12 @@ bool MetisMISO::applySettings(const MetisMISOSettings& settings, bool force)
propagateSettings = true;
}
if ((m_settings.m_rx8CenterFrequency != settings.m_rx8CenterFrequency) || force)
{
reverseAPIKeys.append("rx8CenterFrequency");
propagateSettings = true;
}
if ((m_settings.m_txCenterFrequency != settings.m_txCenterFrequency) || force)
{
reverseAPIKeys.append("txCenterFrequency");
@ -458,6 +468,17 @@ bool MetisMISO::applySettings(const MetisMISOSettings& settings, bool force)
m_deviceAPI->getDeviceEngineInputMessageQueue()->push(engineRx7Notif);
}
if ((m_settings.m_rx8CenterFrequency != settings.m_rx8CenterFrequency) ||
(m_settings.m_sampleRateIndex != settings.m_sampleRateIndex) ||
(m_settings.m_log2Decim != settings.m_log2Decim) || force)
{
int devSampleRate = (1<<settings.m_sampleRateIndex) * 48000;
int sampleRate = devSampleRate / (1<<settings.m_log2Decim);
DSPMIMOSignalNotification *engineRx8Notif = new DSPMIMOSignalNotification(
sampleRate, settings.m_rx8CenterFrequency, true, 7);
m_deviceAPI->getDeviceEngineInputMessageQueue()->push(engineRx8Notif);
}
if ((m_settings.m_txCenterFrequency != settings.m_txCenterFrequency) ||
(m_settings.m_sampleRateIndex != settings.m_sampleRateIndex) ||
(m_settings.m_log2Decim != settings.m_log2Decim) || force)
@ -595,6 +616,9 @@ void MetisMISO::webapiUpdateDeviceSettings(
if (deviceSettingsKeys.contains("rx7CenterFrequency")) {
settings.m_rx7CenterFrequency = response.getMetisMisoSettings()->getRx7CenterFrequency();
}
if (deviceSettingsKeys.contains("rx8CenterFrequency")) {
settings.m_rx8CenterFrequency = response.getMetisMisoSettings()->getRx8CenterFrequency();
}
if (deviceSettingsKeys.contains("txCenterFrequency")) {
settings.m_txCenterFrequency = response.getMetisMisoSettings()->getTxCenterFrequency();
}
@ -646,6 +670,7 @@ void MetisMISO::webapiFormatDeviceSettings(SWGSDRangel::SWGDeviceSettings& respo
response.getMetisMisoSettings()->setRx5CenterFrequency(settings.m_rx5CenterFrequency);
response.getMetisMisoSettings()->setRx6CenterFrequency(settings.m_rx6CenterFrequency);
response.getMetisMisoSettings()->setRx7CenterFrequency(settings.m_rx7CenterFrequency);
response.getMetisMisoSettings()->setRx8CenterFrequency(settings.m_rx8CenterFrequency);
response.getMetisMisoSettings()->setTxCenterFrequency(settings.m_txCenterFrequency);
response.getMetisMisoSettings()->setSampleRateIndex(settings.m_sampleRateIndex);
response.getMetisMisoSettings()->setLog2Decim(settings.m_log2Decim);
@ -700,6 +725,9 @@ void MetisMISO::webapiReverseSendSettings(const QList<QString>& deviceSettingsKe
if (deviceSettingsKeys.contains("rx7CenterFrequency") || force) {
swgMetisMISOSettings->setRx7CenterFrequency(settings.m_rx7CenterFrequency);
}
if (deviceSettingsKeys.contains("rx8CenterFrequency") || force) {
swgMetisMISOSettings->setRx8CenterFrequency(settings.m_rx8CenterFrequency);
}
if (deviceSettingsKeys.contains("txCenterFrequency") || force) {
swgMetisMISOSettings->setTxCenterFrequency(settings.m_txCenterFrequency);
}

View File

@ -20,8 +20,8 @@
MetisMISODecimators::MetisMISODecimators()
{
resetCounters();
m_wSampleVector.resize(1);
}
void MetisMISODecimators::resetCounters()
{
std::fill(m_counters, m_counters+MetisMISOSettings::m_maxReceivers, 0);

View File

@ -39,8 +39,6 @@ private:
qint32 m_accumulators[MetisMISOSettings::m_maxReceivers][256*2];
int m_counters[MetisMISOSettings::m_maxReceivers];
Decimators<qint32, qint32, SDR_RX_SAMP_SZ, 24, true> m_decimatorsIQ[MetisMISOSettings::m_maxReceivers];
Decimators<qint32, qint32, SDR_RX_SAMP_SZ, 24, false> m_decimatorsQI[MetisMISOSettings::m_maxReceivers];
SampleVector m_wSampleVector;
};

View File

@ -118,6 +118,8 @@ qint64 MetisMISOGui::getCenterFrequency() const
} else if (m_streamIndex == 6) {
return m_settings.m_rx7CenterFrequency;
} else if (m_streamIndex == 7) {
return m_settings.m_rx8CenterFrequency;
} else if (m_streamIndex == 8) {
return m_settings.m_txCenterFrequency;
} else {
return 0;
@ -141,6 +143,8 @@ void MetisMISOGui::setCenterFrequency(qint64 centerFrequency)
} else if (m_streamIndex == 6) {
m_settings.m_rx7CenterFrequency = centerFrequency;
} else if (m_streamIndex == 7) {
m_settings.m_rx8CenterFrequency = centerFrequency;
} else if (m_streamIndex == 8) {
m_settings.m_txCenterFrequency = centerFrequency;
} else {
m_settings.m_txCenterFrequency = 0;
@ -255,6 +259,8 @@ void MetisMISOGui::on_centerFrequency_changed(quint64 value)
} else if (m_streamIndex == 6) {
m_settings.m_rx7CenterFrequency = value * 1000;
} else if (m_streamIndex == 7) {
m_settings.m_rx8CenterFrequency = value * 1000;
} else if (m_streamIndex == 8) {
m_settings.m_txCenterFrequency = value * 1000;
} else {
m_settings.m_txCenterFrequency = 0;
@ -443,6 +449,8 @@ void MetisMISOGui::handleInputMessages()
m_settings.m_rx6CenterFrequency = frequency;
} else if (istream == 6) {
m_settings.m_rx7CenterFrequency = frequency;
} else if (istream == 7) {
m_settings.m_rx8CenterFrequency = frequency;
}
}
else
@ -490,6 +498,8 @@ void MetisMISOGui::displayFrequency()
} else if (m_streamIndex == 6) {
centerFrequency = m_settings.m_rx7CenterFrequency;
} else if (m_streamIndex == 7) {
centerFrequency = m_settings.m_rx8CenterFrequency;
} else if (m_streamIndex == 8) {
centerFrequency = m_settings.m_txCenterFrequency;
} else {
centerFrequency = 0;
@ -524,6 +534,8 @@ void MetisMISOGui::updateSpectrum()
} else if (m_spectrumStreamIndex == 6) {
centerFrequency = m_settings.m_rx7CenterFrequency;
} else if (m_spectrumStreamIndex == 7) {
centerFrequency = m_settings.m_rx8CenterFrequency;
} else if (m_spectrumStreamIndex == 8) {
centerFrequency = m_settings.m_txCenterFrequency;
} else {
centerFrequency = 0;

View File

@ -105,6 +105,11 @@
<string>Rx6</string>
</property>
</item>
<item>
<property name="text">
<string>Rx7</string>
</property>
</item>
<item>
<property name="text">
<string>Tx</string>
@ -171,6 +176,11 @@
<string>Rx6</string>
</property>
</item>
<item>
<property name="text">
<string>Rx7</string>
</property>
</item>
<item>
<property name="text">
<string>Tx</string>
@ -597,6 +607,11 @@
<string>7</string>
</property>
</item>
<item>
<property name="text">
<string>8</string>
</property>
</item>
</widget>
</item>
</layout>

View File

@ -34,6 +34,7 @@ MetisMISOSettings::MetisMISOSettings(const MetisMISOSettings& other)
m_rx5CenterFrequency = other.m_rx5CenterFrequency;
m_rx6CenterFrequency = other.m_rx6CenterFrequency;
m_rx7CenterFrequency = other.m_rx7CenterFrequency;
m_rx8CenterFrequency = other.m_rx8CenterFrequency;
m_txCenterFrequency = other.m_txCenterFrequency;
m_sampleRateIndex = other.m_sampleRateIndex;
m_log2Decim = other.m_log2Decim;
@ -59,6 +60,7 @@ void MetisMISOSettings::resetToDefaults()
m_rx5CenterFrequency = 7074000;
m_rx6CenterFrequency = 7074000;
m_rx7CenterFrequency = 7074000;
m_rx8CenterFrequency = 7074000;
m_txCenterFrequency = 7074000;
m_sampleRateIndex = 0; // 48000 kS/s
m_log2Decim = 0;
@ -86,19 +88,20 @@ QByteArray MetisMISOSettings::serialize() const
s.writeU64(6, m_rx5CenterFrequency);
s.writeU64(7, m_rx6CenterFrequency);
s.writeU64(8, m_rx7CenterFrequency);
s.writeU64(9, m_txCenterFrequency);
s.writeU32(10, m_sampleRateIndex);
s.writeU32(11, m_log2Decim);
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.writeBool(18, m_useReverseAPI);
s.writeString(19, m_reverseAPIAddress);
s.writeU32(20, m_reverseAPIPort);
s.writeU32(21, m_reverseAPIDeviceIndex);
s.writeU64(9, m_rx8CenterFrequency);
s.writeU64(10, m_txCenterFrequency);
s.writeU32(11, m_sampleRateIndex);
s.writeU32(12, m_log2Decim);
s.writeBool(13, m_preamp);
s.writeBool(14, m_random);
s.writeBool(15, m_dither);
s.writeBool(16, m_duplex);
s.writeBool(17, m_dcBlock);
s.writeBool(18, m_iqCorrection);
s.writeBool(19, m_useReverseAPI);
s.writeString(20, m_reverseAPIAddress);
s.writeU32(21, m_reverseAPIPort);
s.writeU32(22, m_reverseAPIDeviceIndex);
return s.final();
}
@ -126,18 +129,19 @@ bool MetisMISOSettings::deserialize(const QByteArray& data)
d.readU64(6, &m_rx5CenterFrequency, 7074000);
d.readU64(7, &m_rx6CenterFrequency, 7074000);
d.readU64(8, &m_rx7CenterFrequency, 7074000);
d.readU64(9, &m_txCenterFrequency, 7074000);
d.readU32(10, &m_sampleRateIndex, 0);
d.readU32(11, &m_log2Decim, 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.readBool(18, &m_useReverseAPI, false);
d.readString(19, &m_reverseAPIAddress, "127.0.0.1");
d.readU32(20, &utmp, 0);
d.readU64(9, &m_rx8CenterFrequency, 7074000);
d.readU64(10, &m_txCenterFrequency, 7074000);
d.readU32(11, &m_sampleRateIndex, 0);
d.readU32(12, &m_log2Decim, 0);
d.readBool(13, &m_preamp, false);
d.readBool(14, &m_random, false);
d.readBool(15, &m_dither, false);
d.readBool(16, &m_duplex, false);
d.readBool(17, &m_dcBlock, false);
d.readBool(18, &m_iqCorrection, false);
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;
@ -145,7 +149,7 @@ bool MetisMISOSettings::deserialize(const QByteArray& data)
m_reverseAPIPort = 8888;
}
d.readU32(21, &utmp, 0);
d.readU32(22, &utmp, 0);
m_reverseAPIDeviceIndex = utmp > 99 ? 99 : utmp;
return true;

View File

@ -29,6 +29,7 @@ struct MetisMISOSettings {
quint64 m_rx5CenterFrequency;
quint64 m_rx6CenterFrequency;
quint64 m_rx7CenterFrequency;
quint64 m_rx8CenterFrequency; //!< Hermes lite-2 or Pavel's Red Pitaya extension
quint64 m_txCenterFrequency;
unsigned int m_sampleRateIndex;
unsigned int m_log2Decim;
@ -43,7 +44,7 @@ struct MetisMISOSettings {
uint16_t m_reverseAPIPort;
uint16_t m_reverseAPIDeviceIndex;
static const int m_maxReceivers = 7;
static const int m_maxReceivers = 8;
MetisMISOSettings();
MetisMISOSettings(const MetisMISOSettings& other);

View File

@ -5533,6 +5533,10 @@ margin-bottom: 20px;
"type" : "integer",
"format" : "uint64"
},
"rx8CenterFrequency" : {
"type" : "integer",
"format" : "uint64"
},
"txCenterFrequency" : {
"type" : "integer",
"format" : "uint64"
@ -37546,7 +37550,7 @@ except ApiException as e:
</div>
<div id="generator">
<div class="content">
Generated 2020-09-05T10:52:03.956+02:00
Generated 2020-09-05T17:34:00.891+02:00
</div>
</div>
</div>

View File

@ -25,6 +25,9 @@ MetisMISOSettings:
rx7CenterFrequency:
type: integer
format: uint64
rx8CenterFrequency:
type: integer
format: uint64
txCenterFrequency:
type: integer
format: uint64

View File

@ -25,6 +25,9 @@ MetisMISOSettings:
rx7CenterFrequency:
type: integer
format: uint64
rx8CenterFrequency:
type: integer
format: uint64
txCenterFrequency:
type: integer
format: uint64

View File

@ -5533,6 +5533,10 @@ margin-bottom: 20px;
"type" : "integer",
"format" : "uint64"
},
"rx8CenterFrequency" : {
"type" : "integer",
"format" : "uint64"
},
"txCenterFrequency" : {
"type" : "integer",
"format" : "uint64"
@ -37546,7 +37550,7 @@ except ApiException as e:
</div>
<div id="generator">
<div class="content">
Generated 2020-09-05T10:52:03.956+02:00
Generated 2020-09-05T17:34:00.891+02:00
</div>
</div>
</div>

View File

@ -44,6 +44,8 @@ SWGMetisMISOSettings::SWGMetisMISOSettings() {
m_rx6_center_frequency_isSet = false;
rx7_center_frequency = 0;
m_rx7_center_frequency_isSet = false;
rx8_center_frequency = 0;
m_rx8_center_frequency_isSet = false;
tx_center_frequency = 0;
m_tx_center_frequency_isSet = false;
sample_rate_index = 0;
@ -94,6 +96,8 @@ SWGMetisMISOSettings::init() {
m_rx6_center_frequency_isSet = false;
rx7_center_frequency = 0;
m_rx7_center_frequency_isSet = false;
rx8_center_frequency = 0;
m_rx8_center_frequency_isSet = false;
tx_center_frequency = 0;
m_tx_center_frequency_isSet = false;
sample_rate_index = 0;
@ -142,6 +146,7 @@ SWGMetisMISOSettings::cleanup() {
if(reverse_api_address != nullptr) {
delete reverse_api_address;
}
@ -176,6 +181,8 @@ SWGMetisMISOSettings::fromJsonObject(QJsonObject &pJson) {
::SWGSDRangel::setValue(&rx7_center_frequency, pJson["rx7CenterFrequency"], "qint32", "");
::SWGSDRangel::setValue(&rx8_center_frequency, pJson["rx8CenterFrequency"], "qint32", "");
::SWGSDRangel::setValue(&tx_center_frequency, pJson["txCenterFrequency"], "qint32", "");
::SWGSDRangel::setValue(&sample_rate_index, pJson["sampleRateIndex"], "qint32", "");
@ -242,6 +249,9 @@ SWGMetisMISOSettings::asJsonObject() {
if(m_rx7_center_frequency_isSet){
obj->insert("rx7CenterFrequency", QJsonValue(rx7_center_frequency));
}
if(m_rx8_center_frequency_isSet){
obj->insert("rx8CenterFrequency", QJsonValue(rx8_center_frequency));
}
if(m_tx_center_frequency_isSet){
obj->insert("txCenterFrequency", QJsonValue(tx_center_frequency));
}
@ -365,6 +375,16 @@ SWGMetisMISOSettings::setRx7CenterFrequency(qint32 rx7_center_frequency) {
this->m_rx7_center_frequency_isSet = true;
}
qint32
SWGMetisMISOSettings::getRx8CenterFrequency() {
return rx8_center_frequency;
}
void
SWGMetisMISOSettings::setRx8CenterFrequency(qint32 rx8_center_frequency) {
this->rx8_center_frequency = rx8_center_frequency;
this->m_rx8_center_frequency_isSet = true;
}
qint32
SWGMetisMISOSettings::getTxCenterFrequency() {
return tx_center_frequency;
@ -524,6 +544,9 @@ SWGMetisMISOSettings::isSet(){
if(m_rx7_center_frequency_isSet){
isObjectUpdated = true; break;
}
if(m_rx8_center_frequency_isSet){
isObjectUpdated = true; break;
}
if(m_tx_center_frequency_isSet){
isObjectUpdated = true; break;
}

View File

@ -66,6 +66,9 @@ public:
qint32 getRx7CenterFrequency();
void setRx7CenterFrequency(qint32 rx7_center_frequency);
qint32 getRx8CenterFrequency();
void setRx8CenterFrequency(qint32 rx8_center_frequency);
qint32 getTxCenterFrequency();
void setTxCenterFrequency(qint32 tx_center_frequency);
@ -133,6 +136,9 @@ private:
qint32 rx7_center_frequency;
bool m_rx7_center_frequency_isSet;
qint32 rx8_center_frequency;
bool m_rx8_center_frequency_isSet;
qint32 tx_center_frequency;
bool m_tx_center_frequency_isSet;