1
0
mirror of https://github.com/f4exb/sdrangel.git synced 2026-07-26 03:54:30 -04:00

Metis MISO: save stream index and spectrum stream index in settings. Make it available via API. Fixes #1126

This commit is contained in:
f4exb
2022-02-10 00:01:08 +01:00
parent 428a780e95
commit a99e4589f8
15 changed files with 561 additions and 64 deletions
@@ -312,6 +312,8 @@ bool MetisMISO::applySettings(const MetisMISOSettings& settings, bool force)
<< " m_dcBlock:" << settings.m_dcBlock
<< " m_iqCorrection:" << settings.m_iqCorrection
<< " m_txDrive:" << settings.m_txDrive
<< " m_streamIndex:" << m_settings.m_streamIndex
<< " m_spectrumStreamIndex:" << m_settings.m_spectrumStreamIndex
<< " m_useReverseAPI: " << settings.m_useReverseAPI
<< " m_reverseAPIAddress: " << settings.m_reverseAPIAddress
<< " m_reverseAPIPort: " << settings.m_reverseAPIPort
@@ -442,6 +444,21 @@ bool MetisMISO::applySettings(const MetisMISOSettings& settings, bool force)
m_deviceAPI->getDeviceEngineInputMessageQueue()->push(engineTxNotif);
}
if ((m_settings.m_streamIndex != settings.m_streamIndex) || force) {
reverseAPIKeys.append("streamIndex");
}
if ((m_settings.m_spectrumStreamIndex != settings.m_spectrumStreamIndex) || force)
{
reverseAPIKeys.append("spectrumStreamIndex");
if (settings.m_spectrumStreamIndex < MetisMISOSettings::m_maxReceivers) {
m_deviceAPI->setSpectrumSinkInput(true, m_settings.m_spectrumStreamIndex);
} else {
m_deviceAPI->setSpectrumSinkInput(false, 0);
}
}
if (propagateSettings) {
m_udpHandler.applySettings(settings);
}
@@ -647,6 +664,12 @@ void MetisMISO::webapiUpdateDeviceSettings(
if (deviceSettingsKeys.contains("txDrive")) {
settings.m_txDrive = response.getMetisMisoSettings()->getTxDrive();
}
if (deviceSettingsKeys.contains("spectrumStreamIndex")) {
settings.m_spectrumStreamIndex = response.getMetisMisoSettings()->getSpectrumStreamIndex();
}
if (deviceSettingsKeys.contains("streamIndex")) {
settings.m_streamIndex = response.getMetisMisoSettings()->getStreamIndex();
}
if (deviceSettingsKeys.contains("useReverseAPI")) {
settings.m_useReverseAPI = response.getMetisMisoSettings()->getUseReverseApi() != 0;
}
@@ -700,6 +723,8 @@ void MetisMISO::webapiFormatDeviceSettings(SWGSDRangel::SWGDeviceSettings& respo
response.getMetisMisoSettings()->setDcBlock(settings.m_dcBlock ? 1 : 0);
response.getMetisMisoSettings()->setIqCorrection(settings.m_iqCorrection ? 1 : 0);
response.getMetisMisoSettings()->setTxDrive(settings.m_txDrive);
response.getMetisMisoSettings()->setSpectrumStreamIndex(settings.m_spectrumStreamIndex);
response.getMetisMisoSettings()->setStreamIndex(settings.m_streamIndex);
response.getMetisMisoSettings()->setUseReverseApi(settings.m_useReverseAPI ? 1 : 0);
if (response.getMetisMisoSettings()->getReverseApiAddress()) {
@@ -826,6 +851,12 @@ void MetisMISO::webapiReverseSendSettings(const QList<QString>& deviceSettingsKe
if (deviceSettingsKeys.contains("txDrive") || force) {
swgMetisMISOSettings->setTxDrive(settings.m_txDrive);
}
if (deviceSettingsKeys.contains("spectrumStreamIndex") || force) {
swgMetisMISOSettings->setSpectrumStreamIndex(settings.m_spectrumStreamIndex);
}
if (deviceSettingsKeys.contains("streamIndex") || force) {
swgMetisMISOSettings->setStreamIndex(settings.m_streamIndex);
}
QString channelSettingsURL = QString("http://%1:%2/sdrangel/deviceset/%3/device/settings")
.arg(settings.m_reverseAPIAddress)
+38 -34
View File
@@ -53,8 +53,6 @@ MetisMISOGui::MetisMISOGui(DeviceUISet *deviceUISet, QWidget* parent) :
{
qDebug("MetisMISOGui::MetisMISOGui");
m_sampleMIMO = m_deviceUISet->m_deviceAPI->getSampleMIMO();
m_streamIndex = 0;
m_spectrumStreamIndex = 0;
m_rxSampleRate = 48000;
m_txSampleRate = 48000;
@@ -94,9 +92,9 @@ void MetisMISOGui::resetToDefaults()
void MetisMISOGui::setCenterFrequency(qint64 centerFrequency)
{
if (m_streamIndex < MetisMISOSettings::m_maxReceivers) {
m_settings.m_rxCenterFrequencies[m_streamIndex] = centerFrequency;
} else if (m_streamIndex == MetisMISOSettings::m_maxReceivers) {
if (m_settings.m_streamIndex < MetisMISOSettings::m_maxReceivers) {
m_settings.m_rxCenterFrequencies[m_settings.m_streamIndex] = centerFrequency;
} else if (m_settings.m_streamIndex == MetisMISOSettings::m_maxReceivers) {
m_settings.m_txCenterFrequency = centerFrequency;
}
@@ -135,18 +133,16 @@ void MetisMISOGui::on_streamIndex_currentIndexChanged(int index)
{
if (ui->streamLock->isChecked())
{
m_spectrumStreamIndex = index;
m_settings.m_spectrumStreamIndex = index;
if (m_spectrumStreamIndex < MetisMISOSettings::m_maxReceivers)
if (m_settings.m_spectrumStreamIndex < MetisMISOSettings::m_maxReceivers)
{
m_deviceUISet->m_spectrum->setDisplayedStream(true, index);
m_deviceUISet->m_deviceAPI->setSpectrumSinkInput(true, m_spectrumStreamIndex);
m_deviceUISet->setSpectrumScalingFactor(SDR_RX_SCALEF);
}
else
{
m_deviceUISet->m_spectrum->setDisplayedStream(false, 0);
m_deviceUISet->m_deviceAPI->setSpectrumSinkInput(false, 0);
m_deviceUISet->setSpectrumScalingFactor(SDR_TX_SCALEF);
}
@@ -157,7 +153,8 @@ void MetisMISOGui::on_streamIndex_currentIndexChanged(int index)
ui->spectrumSource->blockSignals(false);
}
m_streamIndex = index;
m_settings.m_streamIndex = index;
sendSettings();
updateSubsamplingIndex();
displayFrequency();
@@ -166,18 +163,16 @@ void MetisMISOGui::on_streamIndex_currentIndexChanged(int index)
void MetisMISOGui::on_spectrumSource_currentIndexChanged(int index)
{
m_spectrumStreamIndex = index;
m_settings.m_spectrumStreamIndex = index;
if (m_spectrumStreamIndex < MetisMISOSettings::m_maxReceivers)
if (m_settings.m_spectrumStreamIndex < MetisMISOSettings::m_maxReceivers)
{
m_deviceUISet->m_spectrum->setDisplayedStream(true, index);
m_deviceUISet->m_deviceAPI->setSpectrumSinkInput(true, m_spectrumStreamIndex);
m_deviceUISet->setSpectrumScalingFactor(SDR_RX_SCALEF);
}
else
{
m_deviceUISet->m_spectrum->setDisplayedStream(false, 0);
m_deviceUISet->m_deviceAPI->setSpectrumSinkInput(false, 0);
m_deviceUISet->setSpectrumScalingFactor(SDR_TX_SCALEF);
}
@@ -188,11 +183,13 @@ void MetisMISOGui::on_spectrumSource_currentIndexChanged(int index)
ui->streamIndex->blockSignals(true);
ui->streamIndex->setCurrentIndex(index);
ui->streamIndex->blockSignals(false);
m_streamIndex = index;
m_settings.m_streamIndex = index;
updateSubsamplingIndex();
displayFrequency();
displaySampleRate();
}
sendSettings();
}
void MetisMISOGui::on_streamLock_toggled(bool checked)
@@ -211,9 +208,9 @@ void MetisMISOGui::on_LOppm_valueChanged(int value)
void MetisMISOGui::on_centerFrequency_changed(quint64 value)
{
if (m_streamIndex < MetisMISOSettings::m_maxReceivers) {
m_settings.m_rxCenterFrequencies[m_streamIndex] = value * 1000;
} else if (m_streamIndex == MetisMISOSettings::m_maxReceivers) {
if (m_settings.m_streamIndex < MetisMISOSettings::m_maxReceivers) {
m_settings.m_rxCenterFrequencies[m_settings.m_streamIndex] = value * 1000;
} else if (m_settings.m_streamIndex == MetisMISOSettings::m_maxReceivers) {
m_settings.m_txCenterFrequency = value * 1000;
}
@@ -235,9 +232,9 @@ void MetisMISOGui::on_log2Decim_currentIndexChanged(int index)
void MetisMISOGui::on_subsamplingIndex_currentIndexChanged(int index)
{
if (m_streamIndex < MetisMISOSettings::m_maxReceivers) // valid for Rx only
if (m_settings.m_streamIndex < MetisMISOSettings::m_maxReceivers) // valid for Rx only
{
m_settings.m_rxSubsamplingIndexes[m_streamIndex] = index;
m_settings.m_rxSubsamplingIndexes[m_settings.m_streamIndex] = index;
ui->subsamplingIndex->setToolTip(tr("Subsampling band index [%1 - %2 MHz]")
.arg(index*61.44).arg((index+1)*61.44));
displayFrequency();
@@ -260,7 +257,7 @@ void MetisMISOGui::on_iqCorrection_toggled(bool checked)
void MetisMISOGui::on_transverter_clicked()
{
if (m_streamIndex < MetisMISOSettings::m_maxReceivers)
if (m_settings.m_streamIndex < MetisMISOSettings::m_maxReceivers)
{
m_settings.m_rxTransverterMode = ui->transverter->getDeltaFrequencyAcive();
m_settings.m_rxTransverterDeltaFrequency = ui->transverter->getDeltaFrequency();
@@ -326,8 +323,8 @@ void MetisMISOGui::displaySettings()
{
blockApplySettings(true);
ui->streamIndex->setCurrentIndex(m_streamIndex);
ui->spectrumSource->setCurrentIndex(m_spectrumStreamIndex);
ui->streamIndex->setCurrentIndex(m_settings.m_streamIndex);
ui->spectrumSource->setCurrentIndex(m_settings.m_spectrumStreamIndex);
ui->nbRxIndex->setCurrentIndex(m_settings.m_nbReceivers - 1);
ui->samplerateIndex->setCurrentIndex(m_settings.m_sampleRateIndex);
ui->LOppm->setValue(m_settings.m_LOppmTenths);
@@ -405,6 +402,13 @@ bool MetisMISOGui::handleMessage(const Message& message)
qDebug("MetisMISOGui::handleMessage: MsgConfigureMetisMISO");
const MetisMISO::MsgConfigureMetisMISO& cfg = (MetisMISO::MsgConfigureMetisMISO&) message;
m_settings = cfg.getSettings();
if ((m_settings.m_spectrumStreamIndex != m_settings.m_streamIndex) && (ui->streamLock->isChecked()))
{
m_settings.m_spectrumStreamIndex = m_settings.m_streamIndex;
sendSettings();
}
displaySettings();
return true;
}
@@ -479,14 +483,14 @@ void MetisMISOGui::displayFrequency()
qint64 centerFrequency;
qint64 fBaseLow, fBaseHigh;
if (m_streamIndex < MetisMISOSettings::m_maxReceivers)
if (m_settings.m_streamIndex < MetisMISOSettings::m_maxReceivers)
{
int subsamplingIndex = m_settings.m_rxSubsamplingIndexes[m_streamIndex];
centerFrequency = m_settings.m_rxCenterFrequencies[m_streamIndex];
int subsamplingIndex = m_settings.m_rxSubsamplingIndexes[m_settings.m_streamIndex];
centerFrequency = m_settings.m_rxCenterFrequencies[m_settings.m_streamIndex];
fBaseLow = subsamplingIndex*m_absMaxFreq;
fBaseHigh = (subsamplingIndex+1)*m_absMaxFreq;
}
else if (m_streamIndex == MetisMISOSettings::m_maxReceivers)
else if (m_settings.m_streamIndex == MetisMISOSettings::m_maxReceivers)
{
centerFrequency = m_settings.m_txCenterFrequency;
fBaseLow = 0;
@@ -505,7 +509,7 @@ void MetisMISOGui::displayFrequency()
void MetisMISOGui::displaySampleRate()
{
if (m_streamIndex < MetisMISOSettings::m_maxReceivers) {
if (m_settings.m_streamIndex < MetisMISOSettings::m_maxReceivers) {
ui->deviceRateText->setText(tr("%1k").arg((float) m_rxSampleRate / 1000));
} else {
ui->deviceRateText->setText(tr("%1k").arg((float) m_txSampleRate / 1000));
@@ -516,9 +520,9 @@ void MetisMISOGui::updateSpectrum()
{
qint64 centerFrequency;
if (m_spectrumStreamIndex < MetisMISOSettings::m_maxReceivers) {
centerFrequency = m_settings.m_rxCenterFrequencies[m_spectrumStreamIndex];
} else if (m_spectrumStreamIndex == MetisMISOSettings::m_maxReceivers) {
if (m_settings.m_spectrumStreamIndex < MetisMISOSettings::m_maxReceivers) {
centerFrequency = m_settings.m_rxCenterFrequencies[m_settings.m_spectrumStreamIndex];
} else if (m_settings.m_spectrumStreamIndex == MetisMISOSettings::m_maxReceivers) {
centerFrequency = m_settings.m_txCenterFrequency;
} else {
centerFrequency = 0;
@@ -526,7 +530,7 @@ void MetisMISOGui::updateSpectrum()
m_deviceUISet->getSpectrum()->setCenterFrequency(centerFrequency);
if (m_spectrumStreamIndex < MetisMISOSettings::m_maxReceivers) {
if (m_settings.m_spectrumStreamIndex < MetisMISOSettings::m_maxReceivers) {
m_deviceUISet->getSpectrum()->setSampleRate(m_rxSampleRate);
} else {
m_deviceUISet->getSpectrum()->setSampleRate(m_txSampleRate);
@@ -535,10 +539,10 @@ void MetisMISOGui::updateSpectrum()
void MetisMISOGui::updateSubsamplingIndex()
{
if (m_streamIndex < MetisMISOSettings::m_maxReceivers)
if (m_settings.m_streamIndex < MetisMISOSettings::m_maxReceivers)
{
ui->subsamplingIndex->setEnabled(true);
ui->subsamplingIndex->setCurrentIndex(m_settings.m_rxSubsamplingIndexes[m_streamIndex]);
ui->subsamplingIndex->setCurrentIndex(m_settings.m_rxSubsamplingIndexes[m_settings.m_streamIndex]);
}
else
{
@@ -51,8 +51,6 @@ private:
DeviceUISet* m_deviceUISet;
MetisMISOSettings m_settings;
int m_streamIndex; //!< Current stream index being dealt with
int m_spectrumStreamIndex; //!< Index of the stream displayed on main spectrum
int m_rxSampleRate;
int m_txSampleRate;
QTimer m_updateTimer;
@@ -46,6 +46,8 @@ MetisMISOSettings::MetisMISOSettings(const MetisMISOSettings& other)
m_dcBlock = other.m_dcBlock;
m_iqCorrection = other.m_iqCorrection;
m_txDrive = other.m_txDrive;
m_streamIndex = other.m_streamIndex;
m_spectrumStreamIndex = other.m_spectrumStreamIndex;
m_useReverseAPI = other.m_useReverseAPI;
m_reverseAPIAddress = other.m_reverseAPIAddress;
m_reverseAPIPort = other.m_reverseAPIPort;
@@ -74,6 +76,8 @@ void MetisMISOSettings::resetToDefaults()
m_dcBlock = false;
m_iqCorrection = false;
m_txDrive = 15;
m_streamIndex = 0;
m_spectrumStreamIndex = 0;
m_useReverseAPI = false;
m_reverseAPIAddress = "127.0.0.1";
m_reverseAPIPort = 8888;
@@ -106,6 +110,8 @@ QByteArray MetisMISOSettings::serialize() const
s.writeString(20, m_reverseAPIAddress);
s.writeU32(21, m_reverseAPIPort);
s.writeU32(22, m_reverseAPIDeviceIndex);
s.writeS32(23, m_streamIndex);
s.writeS32(24, m_spectrumStreamIndex);
for (int i = 0; i < m_maxReceivers; i++)
{
@@ -167,6 +173,9 @@ bool MetisMISOSettings::deserialize(const QByteArray& data)
d.readU32(50+i, &m_rxSubsamplingIndexes[i], 0);
}
d.readS32(23, &m_streamIndex, 0);
d.readS32(24, &m_spectrumStreamIndex, 0);
return true;
}
else
@@ -42,6 +42,8 @@ struct MetisMISOSettings {
bool m_dcBlock;
bool m_iqCorrection;
unsigned int m_txDrive;
int m_streamIndex;
int m_spectrumStreamIndex; //!< spectrum source
bool m_useReverseAPI;
QString m_reverseAPIAddress;
uint16_t m_reverseAPIPort;