mirror of
				https://github.com/f4exb/sdrangel.git
				synced 2025-10-31 04:50:29 -04:00 
			
		
		
		
	PlutoSDR MIMO: Make settings assignments atomic. Part of #1329
This commit is contained in:
		
							parent
							
								
									0263155122
								
							
						
					
					
						commit
						9576dd0f7b
					
				| @ -166,7 +166,7 @@ void PlutoSDRMIMO::closeDevice() | ||||
| 
 | ||||
| void PlutoSDRMIMO::init() | ||||
| { | ||||
|     applySettings(m_settings, true); | ||||
|     applySettings(m_settings, QList<QString>(), true); | ||||
| } | ||||
| 
 | ||||
| bool PlutoSDRMIMO::startRx() | ||||
| @ -315,12 +315,12 @@ bool PlutoSDRMIMO::deserialize(const QByteArray& data) | ||||
|         success = false; | ||||
|     } | ||||
| 
 | ||||
|     MsgConfigurePlutoSDRMIMO* message = MsgConfigurePlutoSDRMIMO::create(m_settings, true); | ||||
|     MsgConfigurePlutoSDRMIMO* message = MsgConfigurePlutoSDRMIMO::create(m_settings, QList<QString>(), true); | ||||
|     m_inputMessageQueue.push(message); | ||||
| 
 | ||||
|     if (m_guiMessageQueue) | ||||
|     { | ||||
|         MsgConfigurePlutoSDRMIMO* messageToGUI = MsgConfigurePlutoSDRMIMO::create(m_settings, true); | ||||
|         MsgConfigurePlutoSDRMIMO* messageToGUI = MsgConfigurePlutoSDRMIMO::create(m_settings, QList<QString>(), true); | ||||
|         m_guiMessageQueue->push(messageToGUI); | ||||
|     } | ||||
| 
 | ||||
| @ -358,12 +358,12 @@ void PlutoSDRMIMO::setSourceCenterFrequency(qint64 centerFrequency, int index) | ||||
|     PlutoSDRMIMOSettings settings = m_settings; | ||||
|     settings.m_rxCenterFrequency = centerFrequency; | ||||
| 
 | ||||
|     MsgConfigurePlutoSDRMIMO* message = MsgConfigurePlutoSDRMIMO::create(settings, false); | ||||
|     MsgConfigurePlutoSDRMIMO* message = MsgConfigurePlutoSDRMIMO::create(settings, QList<QString>{"rxCenterFrequency"}, false); | ||||
|     m_inputMessageQueue.push(message); | ||||
| 
 | ||||
|     if (m_guiMessageQueue) | ||||
|     { | ||||
|         MsgConfigurePlutoSDRMIMO* messageToGUI = MsgConfigurePlutoSDRMIMO::create(settings, false); | ||||
|         MsgConfigurePlutoSDRMIMO* messageToGUI = MsgConfigurePlutoSDRMIMO::create(settings, QList<QString>{"rxCenterFrequency"}, false); | ||||
|         m_guiMessageQueue->push(messageToGUI); | ||||
|     } | ||||
| } | ||||
| @ -380,12 +380,12 @@ void PlutoSDRMIMO::setSinkCenterFrequency(qint64 centerFrequency, int index) | ||||
|     PlutoSDRMIMOSettings settings = m_settings; | ||||
|     settings.m_txCenterFrequency = centerFrequency; | ||||
| 
 | ||||
|     MsgConfigurePlutoSDRMIMO* message = MsgConfigurePlutoSDRMIMO::create(settings, false); | ||||
|     MsgConfigurePlutoSDRMIMO* message = MsgConfigurePlutoSDRMIMO::create(settings, QList<QString>{"txCenterFrequency"}, false); | ||||
|     m_inputMessageQueue.push(message); | ||||
| 
 | ||||
|     if (m_guiMessageQueue) | ||||
|     { | ||||
|         MsgConfigurePlutoSDRMIMO* messageToGUI = MsgConfigurePlutoSDRMIMO::create(settings, false); | ||||
|         MsgConfigurePlutoSDRMIMO* messageToGUI = MsgConfigurePlutoSDRMIMO::create(settings, QList<QString>{"txCenterFrequency"}, false); | ||||
|         m_guiMessageQueue->push(messageToGUI); | ||||
|     } | ||||
| } | ||||
| @ -397,7 +397,7 @@ bool PlutoSDRMIMO::handleMessage(const Message& message) | ||||
|         MsgConfigurePlutoSDRMIMO& conf = (MsgConfigurePlutoSDRMIMO&) message; | ||||
|         qDebug() << "PlutoSDRMIMO::handleMessage: MsgConfigurePlutoSDRMIMO"; | ||||
| 
 | ||||
|         bool success = applySettings(conf.getSettings(), conf.getForce()); | ||||
|         bool success = applySettings(conf.getSettings(), conf.getSettingsKeys(), conf.getForce()); | ||||
| 
 | ||||
|         if (!success) { | ||||
|             qDebug("PlutoSDRMIMO::handleMessage: config error"); | ||||
| @ -437,174 +437,28 @@ bool PlutoSDRMIMO::handleMessage(const Message& message) | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| bool PlutoSDRMIMO::applySettings(const PlutoSDRMIMOSettings& settings, bool force) | ||||
| bool PlutoSDRMIMO::applySettings(const PlutoSDRMIMOSettings& settings, const QList<QString>& settingsKeys, bool force) | ||||
| { | ||||
|     qDebug() << "PlutoSDRMIMO::applySettings: common: " | ||||
|         << " m_devSampleRate: " << settings.m_devSampleRate | ||||
|         << " m_LOppmTenths: " << settings.m_LOppmTenths | ||||
|         << " m_rxCenterFrequency: " << settings.m_rxCenterFrequency | ||||
|         << " m_dcBlock: " << settings.m_dcBlock | ||||
|         << " m_iqCorrection: " << settings.m_iqCorrection | ||||
|         << " m_hwBBDCBlock: " << settings.m_hwBBDCBlock | ||||
|         << " m_hwRFDCBlock: " << settings.m_hwRFDCBlock | ||||
|         << " m_hwIQCorrection: " << settings.m_hwIQCorrection | ||||
|         << " m_fcPosRx: " << settings.m_fcPosRx | ||||
|         << " m_rxTransverterMode: " << settings.m_rxTransverterMode | ||||
|         << " m_rxTransverterDeltaFrequency: " << settings.m_rxTransverterDeltaFrequency | ||||
|         << " m_iqOrder: " << settings.m_iqOrder | ||||
|         << " m_lpfBWRx: " << settings.m_lpfBWRx | ||||
|         << " m_lpfRxFIREnable: " << settings.m_lpfRxFIREnable | ||||
|         << " m_lpfRxFIRBW: " << settings.m_lpfRxFIRBW | ||||
|         << " m_lpfRxFIRlog2Decim: " << settings.m_lpfRxFIRlog2Decim | ||||
|         << " m_lpfRxFIRGain: " << settings.m_lpfRxFIRGain | ||||
|         << " m_log2Decim: " << settings.m_log2Decim | ||||
|         << " m_rx0Gain: " << settings.m_rx0Gain | ||||
|         << " m_rx0GainMode: " << settings.m_rx0GainMode | ||||
|         << " m_rx0AntennaPath: " << settings.m_rx0AntennaPath | ||||
|         << " m_rx0Gain: " << settings.m_rx1Gain | ||||
|         << " m_rx0GainMode: " << settings.m_rx1GainMode | ||||
|         << " m_rx0AntennaPath: " << settings.m_rx1AntennaPath | ||||
|         << " m_txCenterFrequency: " << settings.m_txCenterFrequency | ||||
|         << " m_fcPosTx: " << settings.m_fcPosTx | ||||
|         << " m_txTransverterMode: " << settings.m_txTransverterMode | ||||
|         << " m_txTransverterDeltaFrequency: " << settings.m_txTransverterDeltaFrequency | ||||
|         << " m_lpfBWTx: " << settings.m_lpfBWTx | ||||
|         << " m_lpfTxFIREnable: " << settings.m_lpfTxFIREnable | ||||
|         << " m_lpfTxFIRBW: " << settings.m_lpfTxFIRBW | ||||
|         << " m_lpfTxFIRlog2Interp: " << settings.m_lpfTxFIRlog2Interp | ||||
|         << " m_lpfTxFIRGain: " << settings.m_lpfTxFIRGain | ||||
|         << " m_log2Interp: " << settings.m_log2Interp | ||||
|         << " m_tx0Att: " << settings.m_tx0Att | ||||
|         << " m_tx0AntennaPath: " << settings.m_tx0AntennaPath | ||||
|         << " m_tx1Att: " << settings.m_tx1Att | ||||
|         << " m_tx1AntennaPath: " << settings.m_tx1AntennaPath | ||||
|         << " m_useReverseAPI: " << settings.m_useReverseAPI | ||||
|         << " m_reverseAPIAddress: " << settings.m_reverseAPIAddress | ||||
|         << " m_reverseAPIPort: " << settings.m_reverseAPIPort | ||||
|         << " m_reverseAPIDeviceIndex: " << settings.m_reverseAPIDeviceIndex | ||||
|         << " force: " << force; | ||||
|     qDebug() << "PlutoSDRMIMO::applySettings: force:" << force << settings.getDebugString(settingsKeys, force); | ||||
| 
 | ||||
|     QList<QString> reverseAPIKeys; | ||||
|     bool forwardChangeRxDSP = false; | ||||
|     bool forwardChangeTxDSP = false; | ||||
|     DevicePlutoSDRBox *plutoBox = m_plutoParams ? m_plutoParams->getBox() : nullptr; | ||||
| 
 | ||||
|     // Rx
 | ||||
| 
 | ||||
|     if ((m_settings.m_rxCenterFrequency != settings.m_rxCenterFrequency) || force) { | ||||
|         reverseAPIKeys.append("rxCenterFrequency"); | ||||
|     } | ||||
|     if ((m_settings.m_devSampleRate != settings.m_devSampleRate) || force) { | ||||
|         reverseAPIKeys.append("devSampleRate"); | ||||
|     } | ||||
|     if ((m_settings.m_LOppmTenths != settings.m_LOppmTenths) || force) { | ||||
|         reverseAPIKeys.append("LOppmTenths"); | ||||
|     } | ||||
|     if ((m_settings.m_dcBlock != settings.m_dcBlock) || force) { | ||||
|         reverseAPIKeys.append("dcBlock"); | ||||
|     } | ||||
|     if ((m_settings.m_iqCorrection != settings.m_iqCorrection) || force) { | ||||
|         reverseAPIKeys.append("iqCorrection"); | ||||
|     } | ||||
|     if ((m_settings.m_hwBBDCBlock != settings.m_hwBBDCBlock) || force) { | ||||
|         reverseAPIKeys.append("hwBBDCBlock"); | ||||
|     } | ||||
|     if ((m_settings.m_hwRFDCBlock != settings.m_hwRFDCBlock) || force) { | ||||
|         reverseAPIKeys.append("hwRFDCBlock"); | ||||
|     } | ||||
|     if ((m_settings.m_hwIQCorrection != settings.m_hwIQCorrection) || force) { | ||||
|         reverseAPIKeys.append("hwIQCorrection"); | ||||
|     } | ||||
|     if ((m_settings.m_lpfRxFIREnable != settings.m_lpfRxFIREnable) || force) { | ||||
|         reverseAPIKeys.append("lpfRxFIREnable"); | ||||
|     } | ||||
|     if ((m_settings.m_lpfRxFIRBW != settings.m_lpfRxFIRBW) || force) { | ||||
|         reverseAPIKeys.append("lpfRxFIRBW"); | ||||
|     } | ||||
|     if ((m_settings.m_lpfRxFIRlog2Decim != settings.m_lpfRxFIRlog2Decim) || force) { | ||||
|         reverseAPIKeys.append("lpfRxFIRlog2Decim"); | ||||
|     } | ||||
|     if ((m_settings.m_lpfRxFIRGain != settings.m_lpfRxFIRGain) || force) { | ||||
|         reverseAPIKeys.append("lpfRxFIRGain"); | ||||
|     } | ||||
|     if ((m_settings.m_lpfTxFIREnable != settings.m_lpfTxFIREnable) || force) { | ||||
|         reverseAPIKeys.append("lpfTxFIREnable"); | ||||
|     } | ||||
|     if ((m_settings.m_lpfTxFIRBW != settings.m_lpfTxFIRBW) || force) { | ||||
|         reverseAPIKeys.append("lpfTxFIRBW"); | ||||
|     } | ||||
|     if ((m_settings.m_lpfTxFIRlog2Interp != settings.m_lpfTxFIRlog2Interp) || force) { | ||||
|         reverseAPIKeys.append("lpfRxFIRlog2Decim"); | ||||
|     } | ||||
|     if ((m_settings.m_lpfTxFIRGain != settings.m_lpfTxFIRGain) || force) { | ||||
|         reverseAPIKeys.append("lpfTxFIRGain"); | ||||
|     } | ||||
|     if ((m_settings.m_log2Decim != settings.m_log2Decim) || force) { | ||||
|         reverseAPIKeys.append("log2Decim"); | ||||
|     } | ||||
|     if ((m_settings.m_fcPosRx != settings.m_fcPosRx) || force) { | ||||
|         reverseAPIKeys.append("fcPosRx"); | ||||
|     } | ||||
|     if ((m_settings.m_fcPosTx != settings.m_fcPosTx) || force) { | ||||
|         reverseAPIKeys.append("fcPosTx"); | ||||
|     } | ||||
|     if ((m_settings.m_lpfBWRx != settings.m_lpfBWRx) || force) { | ||||
|         reverseAPIKeys.append("lpfBWRx"); | ||||
|     } | ||||
|     if ((m_settings.m_lpfBWTx != settings.m_lpfBWTx) || force) { | ||||
|         reverseAPIKeys.append("lpfBWTx"); | ||||
|     } | ||||
|     if ((m_settings.m_rx0Gain != settings.m_rx0Gain) || force) { | ||||
|         reverseAPIKeys.append("rx0Gain"); | ||||
|     } | ||||
|     if ((m_settings.m_rx0AntennaPath != settings.m_rx0AntennaPath) || force) { | ||||
|         reverseAPIKeys.append("rx0AntennaPath"); | ||||
|     } | ||||
|     if ((m_settings.m_rx0GainMode != settings.m_rx0GainMode) || force) { | ||||
|         reverseAPIKeys.append("rx0GainMode"); | ||||
|     } | ||||
|     if ((m_settings.m_rx1Gain != settings.m_rx1Gain) || force) { | ||||
|         reverseAPIKeys.append("rx1Gain"); | ||||
|     } | ||||
|     if ((m_settings.m_rx1AntennaPath != settings.m_rx1AntennaPath) || force) { | ||||
|         reverseAPIKeys.append("rx1AntennaPath"); | ||||
|     } | ||||
|     if ((m_settings.m_rx1GainMode != settings.m_rx1GainMode) || force) { | ||||
|         reverseAPIKeys.append("rx1GainMode"); | ||||
|     } | ||||
|     if ((m_settings.m_rxTransverterMode != settings.m_rxTransverterMode) || force) { | ||||
|         reverseAPIKeys.append("rxTransverterMode"); | ||||
|     } | ||||
|     if ((m_settings.m_rxTransverterDeltaFrequency != settings.m_rxTransverterDeltaFrequency) || force) { | ||||
|         reverseAPIKeys.append("rxTransverterDeltaFrequency"); | ||||
|     } | ||||
| 
 | ||||
|     // Tx
 | ||||
| 
 | ||||
|     if ((m_settings.m_txCenterFrequency != settings.m_txCenterFrequency) || force) { | ||||
|         reverseAPIKeys.append("txCenterFrequency"); | ||||
|     } | ||||
|     if ((m_settings.m_txTransverterMode != settings.m_txTransverterMode) || force) { | ||||
|         reverseAPIKeys.append("txTransverterMode"); | ||||
|     } | ||||
|     if ((m_settings.m_txTransverterDeltaFrequency != settings.m_txTransverterDeltaFrequency) || force) { | ||||
|         reverseAPIKeys.append("txTransverterDeltaFrequency"); | ||||
|     } | ||||
| 
 | ||||
|     // Rx
 | ||||
| 
 | ||||
|     if ((m_settings.m_dcBlock != settings.m_dcBlock) || | ||||
|         (m_settings.m_iqCorrection != settings.m_iqCorrection) || force) | ||||
|     if (settingsKeys.contains("dcBlock") || | ||||
|         settingsKeys.contains("iqCorrection") || force) | ||||
|     { | ||||
|         m_deviceAPI->configureCorrections(settings.m_dcBlock, m_settings.m_iqCorrection); | ||||
|     } | ||||
| 
 | ||||
|     // Change affecting device sample rate chain and other buddies
 | ||||
|     if ((m_settings.m_devSampleRate != settings.m_devSampleRate) || | ||||
|         (m_settings.m_lpfRxFIREnable != settings.m_lpfRxFIREnable) || | ||||
|         (m_settings.m_lpfRxFIRlog2Decim != settings.m_lpfRxFIRlog2Decim) || | ||||
|         (settings.m_lpfRxFIRBW != m_settings.m_lpfRxFIRBW) || | ||||
|         (settings.m_lpfRxFIRGain != m_settings.m_lpfRxFIRGain) || force) | ||||
|     if (settingsKeys.contains("devSampleRate") || | ||||
|         settingsKeys.contains("lpfRxFIREnable") || | ||||
|         settingsKeys.contains("lpfRxFIRlog2Decim") || | ||||
|         settingsKeys.contains("lpfRxFIRBW") || | ||||
|         settingsKeys.contains("m_lpfRxFIRGain") || force) | ||||
|     { | ||||
|         if (plutoBox) | ||||
|         { | ||||
| @ -630,7 +484,7 @@ bool PlutoSDRMIMO::applySettings(const PlutoSDRMIMOSettings& settings, bool forc | ||||
|         forwardChangeRxDSP = (m_settings.m_devSampleRate != settings.m_devSampleRate) || force; | ||||
|     } | ||||
| 
 | ||||
|     if ((m_settings.m_log2Decim != settings.m_log2Decim) || force) | ||||
|     if (settingsKeys.contains("log2Decim") || force) | ||||
|     { | ||||
|         if (m_sourceThread) | ||||
|         { | ||||
| @ -641,14 +495,14 @@ bool PlutoSDRMIMO::applySettings(const PlutoSDRMIMOSettings& settings, bool forc | ||||
|         forwardChangeRxDSP = true; | ||||
|     } | ||||
| 
 | ||||
|     if ((m_settings.m_iqOrder != settings.m_iqOrder) || force) | ||||
|     if (settingsKeys.contains("iqOrder") || force) | ||||
|     { | ||||
|         if (m_sourceThread) { | ||||
|             m_sourceThread->setIQOrder(settings.m_iqOrder); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     if ((m_settings.m_LOppmTenths != settings.m_LOppmTenths) || force) | ||||
|     if (settingsKeys.contains("LOppmTenths") || force) | ||||
|     { | ||||
|         if (plutoBox) { | ||||
|             plutoBox->setLOPPMTenths(settings.m_LOppmTenths); | ||||
| @ -658,12 +512,12 @@ bool PlutoSDRMIMO::applySettings(const PlutoSDRMIMOSettings& settings, bool forc | ||||
|     std::vector<std::string> params; | ||||
|     bool paramsToSet = false; | ||||
| 
 | ||||
|     if ((m_settings.m_rxCenterFrequency != settings.m_rxCenterFrequency) | ||||
|         || (m_settings.m_fcPosRx != settings.m_fcPosRx) | ||||
|         || (m_settings.m_log2Decim != settings.m_log2Decim) | ||||
|         || (m_settings.m_devSampleRate != settings.m_devSampleRate) | ||||
|         || (m_settings.m_rxTransverterMode != settings.m_rxTransverterMode) | ||||
|         || (m_settings.m_rxTransverterDeltaFrequency != settings.m_rxTransverterDeltaFrequency) || force) | ||||
|     if (settingsKeys.contains("rxCenterFrequency") | ||||
|         || settingsKeys.contains("fcPosRx") | ||||
|         || settingsKeys.contains("log2Decim") | ||||
|         || settingsKeys.contains("devSampleRate") | ||||
|         || settingsKeys.contains("rxTransverterMode") | ||||
|         || settingsKeys.contains("rxTransverterDeltaFrequency") || force) | ||||
|     { | ||||
|         qint64 deviceCenterFrequency = DeviceSampleSource::calculateDeviceCenterFrequency( | ||||
|                 settings.m_rxCenterFrequency, | ||||
| @ -678,7 +532,7 @@ bool PlutoSDRMIMO::applySettings(const PlutoSDRMIMOSettings& settings, bool forc | ||||
|         paramsToSet = true; | ||||
|         forwardChangeRxDSP = true; | ||||
| 
 | ||||
|         if ((m_settings.m_fcPosRx != settings.m_fcPosRx) || force) | ||||
|         if (settingsKeys.contains("fcPosRx") || force) | ||||
|         { | ||||
|             if (m_sourceThread) | ||||
|             { | ||||
| @ -688,13 +542,13 @@ bool PlutoSDRMIMO::applySettings(const PlutoSDRMIMOSettings& settings, bool forc | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     if ((m_settings.m_lpfBWRx != settings.m_lpfBWRx) || force) | ||||
|     if (settingsKeys.contains("lpfBWRx") || force) | ||||
|     { | ||||
|         params.push_back(QString(tr("in_voltage_rf_bandwidth=%1").arg(settings.m_lpfBWRx)).toStdString()); | ||||
|         paramsToSet = true; | ||||
|     } | ||||
| 
 | ||||
|     if ((m_settings.m_rx0AntennaPath != settings.m_rx0AntennaPath) || force) | ||||
|     if (settingsKeys.contains("rx0AntennaPath") || force) | ||||
|     { | ||||
|         QString rfPortStr; | ||||
|         PlutoSDRMIMOSettings::translateRFPathRx(settings.m_rx0AntennaPath, rfPortStr); | ||||
| @ -702,7 +556,7 @@ bool PlutoSDRMIMO::applySettings(const PlutoSDRMIMOSettings& settings, bool forc | ||||
|         paramsToSet = true; | ||||
|     } | ||||
| 
 | ||||
|     if ((m_settings.m_rx1AntennaPath != settings.m_rx1AntennaPath) || force) | ||||
|     if (settingsKeys.contains("rx1AntennaPath") || force) | ||||
|     { | ||||
|         QString rfPortStr; | ||||
|         PlutoSDRMIMOSettings::translateRFPathRx(settings.m_rx1AntennaPath, rfPortStr); | ||||
| @ -710,7 +564,7 @@ bool PlutoSDRMIMO::applySettings(const PlutoSDRMIMOSettings& settings, bool forc | ||||
|         paramsToSet = true; | ||||
|     } | ||||
| 
 | ||||
|     if ((m_settings.m_rx0GainMode != settings.m_rx0GainMode) || force) | ||||
|     if (settingsKeys.contains("rx0GainMode") || force) | ||||
|     { | ||||
|         QString gainModeStr; | ||||
|         PlutoSDRMIMOSettings::translateGainMode(settings.m_rx0GainMode, gainModeStr); | ||||
| @ -718,7 +572,7 @@ bool PlutoSDRMIMO::applySettings(const PlutoSDRMIMOSettings& settings, bool forc | ||||
|         paramsToSet = true; | ||||
|     } | ||||
| 
 | ||||
|     if ((m_settings.m_rx1GainMode != settings.m_rx1GainMode) || force) | ||||
|     if (settingsKeys.contains("rx1GainMode") || force) | ||||
|     { | ||||
|         QString gainModeStr; | ||||
|         PlutoSDRMIMOSettings::translateGainMode(settings.m_rx1GainMode, gainModeStr); | ||||
| @ -726,31 +580,31 @@ bool PlutoSDRMIMO::applySettings(const PlutoSDRMIMOSettings& settings, bool forc | ||||
|         paramsToSet = true; | ||||
|     } | ||||
| 
 | ||||
|     if ((m_settings.m_rx0Gain != settings.m_rx0Gain) || force) | ||||
|     if (settingsKeys.contains("rx0Gain") || force) | ||||
|     { | ||||
|         params.push_back(QString(tr("in_voltage0_hardwaregain=%1").arg(settings.m_rx0Gain)).toStdString()); | ||||
|         paramsToSet = true; | ||||
|     } | ||||
| 
 | ||||
|     if ((m_settings.m_rx1Gain != settings.m_rx1Gain) || force) | ||||
|     if (settingsKeys.contains("rx1Gain") || force) | ||||
|     { | ||||
|         params.push_back(QString(tr("in_voltage1_hardwaregain=%1").arg(settings.m_rx1Gain)).toStdString()); | ||||
|         paramsToSet = true; | ||||
|     } | ||||
| 
 | ||||
|     if ((m_settings.m_hwBBDCBlock != settings.m_hwBBDCBlock) || force) | ||||
|     if (settingsKeys.contains("hwBBDCBlock") || force) | ||||
|     { | ||||
|         params.push_back(QString(tr("in_voltage_bb_dc_offset_tracking_en=%1").arg(settings.m_hwBBDCBlock ? 1 : 0)).toStdString()); | ||||
|         paramsToSet = true; | ||||
|     } | ||||
| 
 | ||||
|     if ((m_settings.m_hwRFDCBlock != settings.m_hwRFDCBlock) || force) | ||||
|     if (settingsKeys.contains("hwRFDCBlock") || force) | ||||
|     { | ||||
|         params.push_back(QString(tr("in_voltage_rf_dc_offset_tracking_en=%1").arg(settings.m_hwRFDCBlock ? 1 : 0)).toStdString()); | ||||
|         paramsToSet = true; | ||||
|     } | ||||
| 
 | ||||
|     if ((m_settings.m_hwIQCorrection != settings.m_hwIQCorrection) || force) | ||||
|     if (settingsKeys.contains("hwIQCorrection") || force) | ||||
|     { | ||||
|         params.push_back(QString(tr("in_voltage_quadrature_tracking_en=%1").arg(settings.m_hwIQCorrection ? 1 : 0)).toStdString()); | ||||
|         paramsToSet = true; | ||||
| @ -759,11 +613,11 @@ bool PlutoSDRMIMO::applySettings(const PlutoSDRMIMOSettings& settings, bool forc | ||||
|     // Tx
 | ||||
| 
 | ||||
|     // Change affecting device sample rate chain and other buddies
 | ||||
|     if ((m_settings.m_devSampleRate != settings.m_devSampleRate) || | ||||
|         (m_settings.m_lpfTxFIREnable != settings.m_lpfTxFIREnable) || | ||||
|         (m_settings.m_lpfTxFIRlog2Interp != settings.m_lpfTxFIRlog2Interp) || | ||||
|         (settings.m_lpfTxFIRBW != m_settings.m_lpfTxFIRBW) || | ||||
|         (settings.m_lpfTxFIRGain != m_settings.m_lpfTxFIRGain) || force) | ||||
|     if (settingsKeys.contains("devSampleRate") || | ||||
|         settingsKeys.contains("lpfTxFIREnable") || | ||||
|         settingsKeys.contains("lpfTxFIRlog2Interp") || | ||||
|         settingsKeys.contains("lpfTxFIRBW") || | ||||
|         settingsKeys.contains("lpfTxFIRGain") || force) | ||||
|     { | ||||
|         plutoBox->setFIR( | ||||
|             settings.m_devSampleRate, | ||||
| @ -786,10 +640,8 @@ bool PlutoSDRMIMO::applySettings(const PlutoSDRMIMOSettings& settings, bool forc | ||||
|         forwardChangeTxDSP = (m_settings.m_devSampleRate != settings.m_devSampleRate) || force; | ||||
|     } | ||||
| 
 | ||||
|     if ((m_settings.m_log2Interp != settings.m_log2Interp) || force) | ||||
|     if (settingsKeys.contains("log2Interp") || force) | ||||
|     { | ||||
|         reverseAPIKeys.append("log2Interp"); | ||||
| 
 | ||||
|         if (m_sinkThread != 0) | ||||
|         { | ||||
|             m_sinkThread->setLog2Interpolation(settings.m_log2Interp); | ||||
| @ -799,13 +651,12 @@ bool PlutoSDRMIMO::applySettings(const PlutoSDRMIMOSettings& settings, bool forc | ||||
|         forwardChangeTxDSP = true; | ||||
|     } | ||||
| 
 | ||||
|     if (force || (m_settings.m_txCenterFrequency != settings.m_txCenterFrequency) | ||||
|         || (m_settings.m_log2Interp != settings.m_log2Interp) | ||||
|         || (m_settings.m_fcPosTx != settings.m_fcPosTx) | ||||
|         || (m_settings.m_devSampleRate != settings.m_devSampleRate) | ||||
|         || (m_settings.m_txTransverterMode != settings.m_txTransverterMode) | ||||
|         || (m_settings.m_txTransverterDeltaFrequency != settings.m_txTransverterDeltaFrequency)) | ||||
| 
 | ||||
|     if (force || settingsKeys.contains("txCenterFrequency") | ||||
|         || settingsKeys.contains("log2Interp") | ||||
|         || settingsKeys.contains("fcPosTx") | ||||
|         || settingsKeys.contains("devSampleRate") | ||||
|         || settingsKeys.contains("txTransverterMode") | ||||
|         || settingsKeys.contains("txTransverterDeltaFrequency")) | ||||
|     { | ||||
|         qint64 deviceCenterFrequency = DeviceSampleSink::calculateDeviceCenterFrequency( | ||||
|             settings.m_txCenterFrequency, | ||||
| @ -825,42 +676,37 @@ bool PlutoSDRMIMO::applySettings(const PlutoSDRMIMOSettings& settings, bool forc | ||||
| 
 | ||||
|     } | ||||
| 
 | ||||
|     if ((m_settings.m_lpfBWTx != settings.m_lpfBWTx) || force) | ||||
|     if (settingsKeys.contains("lpfBWTx") || force) | ||||
|     { | ||||
|         reverseAPIKeys.append("lpfBWTx"); | ||||
|         params.push_back(QString(tr("out_voltage_rf_bandwidth=%1").arg(settings.m_lpfBWTx)).toStdString()); | ||||
|         paramsToSet = true; | ||||
|     } | ||||
| 
 | ||||
|     if ((m_settings.m_tx0AntennaPath != settings.m_tx0AntennaPath) || force) | ||||
|     if (settingsKeys.contains("tx0AntennaPath") || force) | ||||
|     { | ||||
|         reverseAPIKeys.append("tx0AntennaPath"); | ||||
|         QString rfPortStr; | ||||
|         PlutoSDRMIMOSettings::translateRFPathTx(settings.m_tx0AntennaPath, rfPortStr); | ||||
|         params.push_back(QString(tr("out_voltage0_rf_port_select=%1").arg(rfPortStr)).toStdString()); | ||||
|         paramsToSet = true; | ||||
|     } | ||||
| 
 | ||||
|     if ((m_settings.m_tx1AntennaPath != settings.m_tx1AntennaPath) || force) | ||||
|     if (settingsKeys.contains("tx1AntennaPath") || force) | ||||
|     { | ||||
|         reverseAPIKeys.append("tx1AntennaPath"); | ||||
|         QString rfPortStr; | ||||
|         PlutoSDRMIMOSettings::translateRFPathTx(settings.m_tx1AntennaPath, rfPortStr); | ||||
|         params.push_back(QString(tr("out_voltage1_rf_port_select=%1").arg(rfPortStr)).toStdString()); | ||||
|         paramsToSet = true; | ||||
|     } | ||||
| 
 | ||||
|     if ((m_settings.m_tx0Att != settings.m_tx0Att) || force) | ||||
|     if (settingsKeys.contains("tx0Att") || force) | ||||
|     { | ||||
|         reverseAPIKeys.append("tx0Att"); | ||||
|         float attF = settings.m_tx0Att * 0.25f; | ||||
|         params.push_back(QString(tr("out_voltage0_hardwaregain=%1").arg(attF)).toStdString()); | ||||
|         paramsToSet = true; | ||||
|     } | ||||
| 
 | ||||
|     if ((m_settings.m_tx1Att != settings.m_tx1Att) || force) | ||||
|     if (settingsKeys.contains("tx1Att") || force) | ||||
|     { | ||||
|         reverseAPIKeys.append("tx1Att"); | ||||
|         float attF = settings.m_tx1Att * 0.25f; | ||||
|         params.push_back(QString(tr("out_voltage1_hardwaregain=%1").arg(attF)).toStdString()); | ||||
|         paramsToSet = true; | ||||
| @ -870,16 +716,20 @@ bool PlutoSDRMIMO::applySettings(const PlutoSDRMIMOSettings& settings, bool forc | ||||
|         plutoBox->set_params(DevicePlutoSDRBox::DEVICE_PHY, params); | ||||
|     } | ||||
| 
 | ||||
|     if (settings.m_useReverseAPI) | ||||
|     if (settingsKeys.contains("useReverseAPI")) | ||||
|     { | ||||
|         bool fullUpdate = ((m_settings.m_useReverseAPI != settings.m_useReverseAPI) && settings.m_useReverseAPI) || | ||||
|                 (m_settings.m_reverseAPIAddress != settings.m_reverseAPIAddress) || | ||||
|                 (m_settings.m_reverseAPIPort != settings.m_reverseAPIPort) || | ||||
|                 (m_settings.m_reverseAPIDeviceIndex != settings.m_reverseAPIDeviceIndex); | ||||
|         webapiReverseSendSettings(reverseAPIKeys, settings, fullUpdate || force); | ||||
|         bool fullUpdate = (settingsKeys.contains("useReverseAPI") && settings.m_useReverseAPI) || | ||||
|             settingsKeys.contains("reverseAPIAddress") || | ||||
|             settingsKeys.contains("reverseAPIPort") || | ||||
|             settingsKeys.contains("reverseAPIDeviceIndex"); | ||||
|         webapiReverseSendSettings(settingsKeys, settings, fullUpdate || force); | ||||
|     } | ||||
| 
 | ||||
|     m_settings = settings; | ||||
|     if (force) { | ||||
|         m_settings = settings; | ||||
|     } else { | ||||
|         m_settings.applySettings(settingsKeys, settings); | ||||
|     } | ||||
| 
 | ||||
|     if (forwardChangeRxDSP) | ||||
|     { | ||||
| @ -923,12 +773,12 @@ int PlutoSDRMIMO::webapiSettingsPutPatch( | ||||
|     PlutoSDRMIMOSettings settings = m_settings; | ||||
|     webapiUpdateDeviceSettings(settings, deviceSettingsKeys, response); | ||||
| 
 | ||||
|     MsgConfigurePlutoSDRMIMO *msg = MsgConfigurePlutoSDRMIMO::create(settings, force); | ||||
|     MsgConfigurePlutoSDRMIMO *msg = MsgConfigurePlutoSDRMIMO::create(settings, deviceSettingsKeys, force); | ||||
|     m_inputMessageQueue.push(msg); | ||||
| 
 | ||||
|     if (m_guiMessageQueue) // forward to GUI if any
 | ||||
|     { | ||||
|         MsgConfigurePlutoSDRMIMO *msgToGUI = MsgConfigurePlutoSDRMIMO::create(settings, force); | ||||
|         MsgConfigurePlutoSDRMIMO *msgToGUI = MsgConfigurePlutoSDRMIMO::create(settings, deviceSettingsKeys, force); | ||||
|         m_guiMessageQueue->push(msgToGUI); | ||||
|     } | ||||
| 
 | ||||
| @ -1165,7 +1015,7 @@ int PlutoSDRMIMO::webapiRun( | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| void PlutoSDRMIMO::webapiReverseSendSettings(QList<QString>& deviceSettingsKeys, const PlutoSDRMIMOSettings& settings, bool force) | ||||
| void PlutoSDRMIMO::webapiReverseSendSettings(const QList<QString>& deviceSettingsKeys, const PlutoSDRMIMOSettings& settings, bool force) | ||||
| { | ||||
|     SWGSDRangel::SWGDeviceSettings *swgDeviceSettings = new SWGSDRangel::SWGDeviceSettings(); | ||||
|     swgDeviceSettings->setDirection(2); // MIMO
 | ||||
|  | ||||
| @ -45,20 +45,22 @@ public: | ||||
| 
 | ||||
| 	public: | ||||
| 		const PlutoSDRMIMOSettings& getSettings() const { return m_settings; } | ||||
|         const QList<QString>& getSettingsKeys() const { return m_settingsKeys; } | ||||
| 		bool getForce() const { return m_force; } | ||||
| 
 | ||||
| 		static MsgConfigurePlutoSDRMIMO* create(const PlutoSDRMIMOSettings& settings, bool force) | ||||
| 		{ | ||||
| 			return new MsgConfigurePlutoSDRMIMO(settings, force); | ||||
| 		static MsgConfigurePlutoSDRMIMO* create(const PlutoSDRMIMOSettings& settings, const QList<QString>& settingsKeys, bool force) { | ||||
| 			return new MsgConfigurePlutoSDRMIMO(settings, settingsKeys, force); | ||||
| 		} | ||||
| 
 | ||||
| 	private: | ||||
| 		PlutoSDRMIMOSettings m_settings; | ||||
|         QList<QString> m_settingsKeys; | ||||
| 		bool m_force; | ||||
| 
 | ||||
| 		MsgConfigurePlutoSDRMIMO(const PlutoSDRMIMOSettings& settings, bool force) : | ||||
| 		MsgConfigurePlutoSDRMIMO(const PlutoSDRMIMOSettings& settings, const QList<QString>& settingsKeys, bool force) : | ||||
| 			Message(), | ||||
| 			m_settings(settings), | ||||
|             m_settingsKeys(settingsKeys), | ||||
| 			m_force(force) | ||||
| 		{ } | ||||
| 	}; | ||||
| @ -190,8 +192,8 @@ private: | ||||
|     bool openDevice(); | ||||
|     void closeDevice(); | ||||
| 
 | ||||
| 	bool applySettings(const PlutoSDRMIMOSettings& settings, bool force); | ||||
|     void webapiReverseSendSettings(QList<QString>& deviceSettingsKeys, const PlutoSDRMIMOSettings& settings, bool force); | ||||
| 	bool applySettings(const PlutoSDRMIMOSettings& settings, const QList<QString>& settingsKeys, bool force); | ||||
|     void webapiReverseSendSettings(const QList<QString>& deviceSettingsKeys, const PlutoSDRMIMOSettings& settings, bool force); | ||||
|     void webapiReverseSendStartStop(bool start); | ||||
|     void webapiFormatDeviceReport(SWGSDRangel::SWGDeviceReport& response); | ||||
| 
 | ||||
|  | ||||
| @ -123,7 +123,7 @@ void PlutoSDRMIMOGUI::resetToDefaults() | ||||
| { | ||||
|     m_settings.resetToDefaults(); | ||||
|     displaySettings(); | ||||
|     sendSettings(); | ||||
|     sendSettings(true); | ||||
| } | ||||
| 
 | ||||
| QByteArray PlutoSDRMIMOGUI::serialize() const | ||||
| @ -136,8 +136,7 @@ bool PlutoSDRMIMOGUI::deserialize(const QByteArray& data) | ||||
|     if (m_settings.deserialize(data)) | ||||
|     { | ||||
|         displaySettings(); | ||||
|         m_forceSettings = true; | ||||
|         sendSettings(); | ||||
|         sendSettings(true); | ||||
|         return true; | ||||
|     } | ||||
|     else | ||||
| @ -306,7 +305,10 @@ void PlutoSDRMIMOGUI::displayFcTooltip() | ||||
| void PlutoSDRMIMOGUI::sendSettings(bool forceSettings) | ||||
| { | ||||
|     m_forceSettings = forceSettings; | ||||
|     if(!m_updateTimer.isActive()) { m_updateTimer.start(100); } | ||||
| 
 | ||||
|     if (!m_updateTimer.isActive()) { | ||||
|         m_updateTimer.start(100); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| void PlutoSDRMIMOGUI::updateHardware() | ||||
| @ -314,9 +316,10 @@ void PlutoSDRMIMOGUI::updateHardware() | ||||
|     if (m_doApplySettings) | ||||
|     { | ||||
|         qDebug() << "PlutoSDRMIMOGUI::updateHardware"; | ||||
|         PlutoSDRMIMO::MsgConfigurePlutoSDRMIMO* message = PlutoSDRMIMO::MsgConfigurePlutoSDRMIMO::create(m_settings, m_forceSettings); | ||||
|         PlutoSDRMIMO::MsgConfigurePlutoSDRMIMO* message = PlutoSDRMIMO::MsgConfigurePlutoSDRMIMO::create(m_settings, m_settingsKeys, m_forceSettings); | ||||
|         m_sampleMIMO->getInputMessageQueue()->push(message); | ||||
|         m_forceSettings = false; | ||||
|         m_settingsKeys.clear(); | ||||
|         m_updateTimer.stop(); | ||||
|     } | ||||
| } | ||||
| @ -430,7 +433,13 @@ bool PlutoSDRMIMOGUI::handleMessage(const Message& message) | ||||
|     else if (PlutoSDRMIMO::MsgConfigurePlutoSDRMIMO::match(message)) | ||||
|     { | ||||
|         const PlutoSDRMIMO::MsgConfigurePlutoSDRMIMO& notif = (const PlutoSDRMIMO::MsgConfigurePlutoSDRMIMO&) message; | ||||
|         m_settings = notif.getSettings(); | ||||
| 
 | ||||
|         if (notif.getForce()) { | ||||
|             m_settings = notif.getSettings(); | ||||
|         } else { | ||||
|             m_settings.applySettings(notif.getSettingsKeys(), notif.getSettings()); | ||||
|         } | ||||
| 
 | ||||
|         displaySettings(); | ||||
| 
 | ||||
|         return true; | ||||
| @ -618,10 +627,15 @@ void PlutoSDRMIMOGUI::on_startStopTx_toggled(bool checked) | ||||
| 
 | ||||
| void PlutoSDRMIMOGUI::on_centerFrequency_changed(quint64 value) | ||||
| { | ||||
|     if (m_rxElseTx) { | ||||
|     if (m_rxElseTx) | ||||
|     { | ||||
|         m_settings.m_rxCenterFrequency = value * 1000; | ||||
|     } else { | ||||
|         m_settingsKeys.append("rxCenterFrequency"); | ||||
|     } | ||||
|     else | ||||
|     { | ||||
|         m_settings.m_txCenterFrequency = value * 1000; | ||||
|         m_settingsKeys.append("txCenterFrequency"); | ||||
|     } | ||||
| 
 | ||||
|     sendSettings(); | ||||
| @ -631,45 +645,56 @@ void PlutoSDRMIMOGUI::on_loPPM_valueChanged(int value) | ||||
| { | ||||
|     ui->loPPMText->setText(QString("%1").arg(QString::number(value/10.0, 'f', 1))); | ||||
|     m_settings.m_LOppmTenths = value; | ||||
|     m_settingsKeys.append("LOppmTenths"); | ||||
|     sendSettings(); | ||||
| } | ||||
| 
 | ||||
| void PlutoSDRMIMOGUI::on_dcOffset_toggled(bool checked) | ||||
| { | ||||
|     m_settings.m_dcBlock = checked; | ||||
|     m_settingsKeys.append("dcBlock"); | ||||
|     sendSettings(); | ||||
| } | ||||
| 
 | ||||
| void PlutoSDRMIMOGUI::on_iqImbalance_toggled(bool checked) | ||||
| { | ||||
|     m_settings.m_iqCorrection = checked; | ||||
|     m_settingsKeys.append("iqCorrection"); | ||||
|     sendSettings(); | ||||
| } | ||||
| 
 | ||||
| void PlutoSDRMIMOGUI::on_rfDCOffset_toggled(bool checked) | ||||
| { | ||||
|     m_settings.m_hwRFDCBlock = checked; | ||||
|     m_settingsKeys.append("hwRFDCBlock"); | ||||
|     sendSettings(); | ||||
| } | ||||
| 
 | ||||
| void PlutoSDRMIMOGUI::on_bbDCOffset_toggled(bool checked) | ||||
| { | ||||
|     m_settings.m_hwBBDCBlock = checked; | ||||
|     m_settingsKeys.append("hwBBDCBlock"); | ||||
|     sendSettings(); | ||||
| } | ||||
| 
 | ||||
| void PlutoSDRMIMOGUI::on_hwIQImbalance_toggled(bool checked) | ||||
| { | ||||
|     m_settings.m_hwIQCorrection = checked; | ||||
|     m_settingsKeys.append("hwIQCorrection"); | ||||
|     sendSettings(); | ||||
| } | ||||
| 
 | ||||
| void PlutoSDRMIMOGUI::on_swDecim_currentIndexChanged(int index) | ||||
| { | ||||
|     if (m_rxElseTx) { | ||||
|     if (m_rxElseTx) | ||||
|     { | ||||
|         m_settings.m_log2Decim = index > 6 ? 6 : index; | ||||
|     } else { | ||||
|         m_settingsKeys.append("log2Decim"); | ||||
|     } | ||||
|     else | ||||
|     { | ||||
|         m_settings.m_log2Interp = index > 6 ? 6 : index; | ||||
|         m_settingsKeys.append("log2Interp"); | ||||
|     } | ||||
| 
 | ||||
|     displaySampleRate(); | ||||
| @ -684,6 +709,7 @@ void PlutoSDRMIMOGUI::on_swDecim_currentIndexChanged(int index) | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     m_settingsKeys.append("devSampleRate"); | ||||
|     sendSettings(); | ||||
| } | ||||
| 
 | ||||
| @ -691,10 +717,15 @@ void PlutoSDRMIMOGUI::on_fcPos_currentIndexChanged(int index) | ||||
| { | ||||
|     PlutoSDRMIMOSettings::fcPos_t fcPos = (PlutoSDRMIMOSettings::fcPos_t) (index < (int) PlutoSDRMIMOSettings::FC_POS_END ? index : PlutoSDRMIMOSettings::FC_POS_CENTER); | ||||
| 
 | ||||
|     if (m_rxElseTx) { | ||||
|     if (m_rxElseTx) | ||||
|     { | ||||
|         m_settings.m_fcPosRx = fcPos; | ||||
|     } else { | ||||
|         m_settingsKeys.append("fcPosRx"); | ||||
|     } | ||||
|     else | ||||
|     { | ||||
|         m_settings.m_fcPosTx = fcPos; | ||||
|         m_settingsKeys.append("fcPosTx"); | ||||
|     } | ||||
| 
 | ||||
|     displayFcTooltip(); | ||||
| @ -715,15 +746,21 @@ void PlutoSDRMIMOGUI::on_sampleRate_changed(quint64 value) | ||||
|     } | ||||
| 
 | ||||
|     displayFcTooltip(); | ||||
|     m_settingsKeys.append("devSampleRate"); | ||||
|     sendSettings(); | ||||
| } | ||||
| 
 | ||||
| void PlutoSDRMIMOGUI::on_lpf_changed(quint64 value) | ||||
| { | ||||
|     if (m_rxElseTx) { | ||||
|     if (m_rxElseTx) | ||||
|     { | ||||
|         m_settings.m_lpfBWRx = value * 1000; | ||||
|     } else { | ||||
|         m_settingsKeys.append("lpfBWRx"); | ||||
|     } | ||||
|     else | ||||
|     { | ||||
|         m_settings.m_lpfBWTx = value * 1000; | ||||
|         m_settingsKeys.append("lpfBWTx"); | ||||
|     } | ||||
| 
 | ||||
|     sendSettings(); | ||||
| @ -731,10 +768,15 @@ void PlutoSDRMIMOGUI::on_lpf_changed(quint64 value) | ||||
| 
 | ||||
| void PlutoSDRMIMOGUI::on_lpFIREnable_toggled(bool checked) | ||||
| { | ||||
|     if (m_rxElseTx) { | ||||
|     if (m_rxElseTx) | ||||
|     { | ||||
|         m_settings.m_lpfRxFIREnable = checked; | ||||
|     } else { | ||||
|         m_settingsKeys.append("lpfRxFIREnable"); | ||||
|     } | ||||
|     else | ||||
|     { | ||||
|         m_settings.m_lpfTxFIREnable = checked; | ||||
|         m_settingsKeys.append("lpfTxFIREnable"); | ||||
|     } | ||||
| 
 | ||||
|     ui->lpFIRDecimation->setEnabled(checked); | ||||
| @ -744,10 +786,16 @@ void PlutoSDRMIMOGUI::on_lpFIREnable_toggled(bool checked) | ||||
| 
 | ||||
| void PlutoSDRMIMOGUI::on_lpFIR_changed(quint64 value) | ||||
| { | ||||
|     if (m_rxElseTx) { | ||||
|     if (m_rxElseTx) | ||||
|     { | ||||
|         m_settings.m_lpfRxFIRBW = value * 1000; | ||||
|     } else { | ||||
|         m_settingsKeys.append("lpfRxFIRBW"); | ||||
|     } | ||||
|     else | ||||
|     { | ||||
|         m_settings.m_lpfTxFIRBW = value * 1000; | ||||
|         m_settingsKeys.append("lpfTxFIRBW"); | ||||
| 
 | ||||
|     } | ||||
| 
 | ||||
|     sendSettings(); | ||||
| @ -755,10 +803,15 @@ void PlutoSDRMIMOGUI::on_lpFIR_changed(quint64 value) | ||||
| 
 | ||||
| void PlutoSDRMIMOGUI::on_lpFIRDecimation_currentIndexChanged(int index) | ||||
| { | ||||
|     if (m_rxElseTx) { | ||||
|     if (m_rxElseTx) | ||||
|     { | ||||
|         m_settings.m_lpfRxFIRlog2Decim = index > 2 ? 2 : index; | ||||
|     } else { | ||||
|         m_settingsKeys.append("lpfRxFIRlog2Decim"); | ||||
|     } | ||||
|     else | ||||
|     { | ||||
|         m_settings.m_lpfTxFIRlog2Interp = index > 2 ? 2 : index; | ||||
|         m_settingsKeys.append("lpfTxFIRlog2Interp"); | ||||
|     } | ||||
| 
 | ||||
|     setSampleRateLimits(); | ||||
| @ -767,10 +820,15 @@ void PlutoSDRMIMOGUI::on_lpFIRDecimation_currentIndexChanged(int index) | ||||
| 
 | ||||
| void PlutoSDRMIMOGUI::on_lpFIRGain_currentIndexChanged(int index) | ||||
| { | ||||
|     if (m_rxElseTx) { | ||||
|     if (m_rxElseTx) | ||||
|     { | ||||
|         m_settings.m_lpfRxFIRGain = 6*(index > 3 ? 3 : index) - 12; | ||||
|     } else { | ||||
|         m_settingsKeys.append("lpfRxFIRGain"); | ||||
|     } | ||||
|     else | ||||
|     { | ||||
|         m_settings.m_lpfTxFIRGain = 6*(index > 3 ? 3 : index) - 12; | ||||
|         m_settingsKeys.append("lpfTxFIRGain"); | ||||
|     } | ||||
| 
 | ||||
|     sendSettings(); | ||||
| @ -783,6 +841,9 @@ void PlutoSDRMIMOGUI::on_gainLock_toggled(bool checked) | ||||
|         m_settings.m_rx1GainMode = m_settings.m_rx0GainMode; | ||||
|         m_settings.m_rx1Gain = m_settings.m_rx0Gain; | ||||
|         m_settings.m_tx1Att = m_settings.m_rx0Gain; | ||||
|         m_settingsKeys.append("rx1GainMode"); | ||||
|         m_settingsKeys.append("rx1Gain"); | ||||
|         m_settingsKeys.append("tx1Att"); | ||||
|         blockApplySettings(true); | ||||
|         displaySettings(); | ||||
|         blockApplySettings(false); | ||||
| @ -798,11 +859,13 @@ void PlutoSDRMIMOGUI::on_gainMode_currentIndexChanged(int index) | ||||
|     { | ||||
|         m_settings.m_rx0GainMode = (PlutoSDRMIMOSettings::GainMode) (index < PlutoSDRMIMOSettings::GAIN_END ? index : 0); | ||||
|         ui->gain->setEnabled(m_settings.m_rx0GainMode == PlutoSDRMIMOSettings::GAIN_MANUAL); | ||||
|         m_settingsKeys.append("rx0GainMode"); | ||||
|     } | ||||
|     else | ||||
|     { | ||||
|         m_settings.m_rx1GainMode = (PlutoSDRMIMOSettings::GainMode) (index < PlutoSDRMIMOSettings::GAIN_END ? index : 0); | ||||
|         ui->gain->setEnabled(m_settings.m_rx1GainMode == PlutoSDRMIMOSettings::GAIN_MANUAL); | ||||
|         m_settingsKeys.append("rx1GainMode"); | ||||
|     } | ||||
| 
 | ||||
|     sendSettings(); | ||||
| @ -812,10 +875,15 @@ void PlutoSDRMIMOGUI::on_gain_valueChanged(int value) | ||||
| { | ||||
|     ui->gainText->setText(tr("%1").arg(value)); | ||||
| 
 | ||||
|     if (m_streamIndex == 0) { | ||||
|     if (m_streamIndex == 0) | ||||
|     { | ||||
|         m_settings.m_rx0Gain = value; | ||||
|     } else { | ||||
|         m_settingsKeys.append("rx0Gain"); | ||||
|     } | ||||
|     else | ||||
|     { | ||||
|         m_settings.m_rx1Gain = value; | ||||
|         m_settingsKeys.append("rx1Gain"); | ||||
|     } | ||||
| 
 | ||||
|     sendSettings(); | ||||
| @ -825,10 +893,15 @@ void PlutoSDRMIMOGUI::on_att_valueChanged(int value) | ||||
| { | ||||
|     ui->attText->setText(QString("%1 dB").arg(QString::number(value*0.25, 'f', 2))); | ||||
| 
 | ||||
|     if (m_streamIndex == 0) { | ||||
|     if (m_streamIndex == 0) | ||||
|     { | ||||
|         m_settings.m_tx0Att = value; | ||||
|     } else { | ||||
|         m_settingsKeys.append("tx0Att"); | ||||
|     } | ||||
|     else | ||||
|     { | ||||
|         m_settings.m_tx1Att = value; | ||||
|         m_settingsKeys.append("tx1Att"); | ||||
|     } | ||||
| 
 | ||||
|     sendSettings(); | ||||
| @ -838,18 +911,28 @@ void PlutoSDRMIMOGUI::on_antenna_currentIndexChanged(int index) | ||||
| { | ||||
|     if (m_rxElseTx) | ||||
|     { | ||||
|         if (m_streamIndex == 0) { | ||||
|         if (m_streamIndex == 0) | ||||
|         { | ||||
|             m_settings.m_rx0AntennaPath = (PlutoSDRMIMOSettings::RFPathRx) (index < PlutoSDRMIMOSettings::RFPATHRX_END ? index : 0); | ||||
|         } else { | ||||
|             m_settingsKeys.append("rx0AntennaPath"); | ||||
|         } | ||||
|         else | ||||
|         { | ||||
|             m_settings.m_rx1AntennaPath = (PlutoSDRMIMOSettings::RFPathRx) (index < PlutoSDRMIMOSettings::RFPATHRX_END ? index : 0); | ||||
|             m_settingsKeys.append("rx1AntennaPath"); | ||||
|         } | ||||
|     } | ||||
|     else | ||||
|     { | ||||
|         if (m_streamIndex == 0) { | ||||
|         if (m_streamIndex == 0) | ||||
|         { | ||||
|             m_settings.m_tx0AntennaPath = (PlutoSDRMIMOSettings::RFPathTx) (index < PlutoSDRMIMOSettings::RFPATHTX_END ? index : 0); | ||||
|         } else { | ||||
|             m_settingsKeys.append("tx0AntennaPath"); | ||||
|         } | ||||
|         else | ||||
|         { | ||||
|             m_settings.m_tx1AntennaPath = (PlutoSDRMIMOSettings::RFPathTx) (index < PlutoSDRMIMOSettings::RFPATHTX_END ? index : 0); | ||||
|             m_settingsKeys.append("tx1AntennaPath"); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
| @ -863,6 +946,9 @@ void PlutoSDRMIMOGUI::on_transverter_clicked() | ||||
|         m_settings.m_rxTransverterMode = ui->transverter->getDeltaFrequencyAcive(); | ||||
|         m_settings.m_rxTransverterDeltaFrequency = ui->transverter->getDeltaFrequency(); | ||||
|         m_settings.m_iqOrder = ui->transverter->getIQOrder(); | ||||
|         m_settingsKeys.append("rxTransverterMode"); | ||||
|         m_settingsKeys.append("rxTransverterDeltaFrequency"); | ||||
|         m_settingsKeys.append("iqOrder"); | ||||
|         qDebug("PlutoSDRInputGui::on_transverter_clicked: %lld Hz %s", | ||||
|             m_settings.m_rxTransverterDeltaFrequency, m_settings.m_rxTransverterMode ? "on" : "off"); | ||||
|     } | ||||
| @ -870,16 +956,23 @@ void PlutoSDRMIMOGUI::on_transverter_clicked() | ||||
|     { | ||||
|         m_settings.m_txTransverterMode = ui->transverter->getDeltaFrequencyAcive(); | ||||
|         m_settings.m_txTransverterDeltaFrequency = ui->transverter->getDeltaFrequency(); | ||||
|         m_settingsKeys.append("txTransverterMode"); | ||||
|         m_settingsKeys.append("txTransverterDeltaFrequency"); | ||||
|         qDebug("PlutoSDRInputGui::on_transverter_clicked: %lld Hz %s", | ||||
|             m_settings.m_rxTransverterDeltaFrequency, m_settings.m_txTransverterMode ? "on" : "off"); | ||||
|     } | ||||
| 
 | ||||
|     updateFrequencyLimits(); | ||||
| 
 | ||||
|     if (m_rxElseTx) { | ||||
|     if (m_rxElseTx) | ||||
|     { | ||||
|         m_settings.m_rxCenterFrequency = ui->centerFrequency->getValueNew()*1000; | ||||
|     } else { | ||||
|         m_settingsKeys.append("rxCenterFrequency"); | ||||
|     } | ||||
|     else | ||||
|     { | ||||
|         m_settings.m_txCenterFrequency = ui->centerFrequency->getValueNew()*1000; | ||||
|         m_settingsKeys.append("txCenterFrequency"); | ||||
|     } | ||||
| 
 | ||||
|     sendSettings(); | ||||
| @ -908,6 +1001,10 @@ void PlutoSDRMIMOGUI::openDeviceSettingsDialog(const QPoint& p) | ||||
|         m_settings.m_reverseAPIAddress = dialog.getReverseAPIAddress(); | ||||
|         m_settings.m_reverseAPIPort = dialog.getReverseAPIPort(); | ||||
|         m_settings.m_reverseAPIDeviceIndex = dialog.getReverseAPIDeviceIndex(); | ||||
|         m_settingsKeys.append("useReverseAPI"); | ||||
|         m_settingsKeys.append("reverseAPIAddress"); | ||||
|         m_settingsKeys.append("reverseAPIPort"); | ||||
|         m_settingsKeys.append("reverseAPIDeviceIndex"); | ||||
| 
 | ||||
|         sendSettings(); | ||||
|     } | ||||
|  | ||||
| @ -52,6 +52,7 @@ private: | ||||
| 	Ui::PlutoSDRMIMOGUI* ui; | ||||
| 
 | ||||
| 	PlutoSDRMIMOSettings m_settings; | ||||
|     QList<QString> m_settingsKeys; | ||||
|     bool m_rxElseTx;   //!< Which side is being dealt with
 | ||||
|     int m_streamIndex; //!< Current stream index being dealt with
 | ||||
| 	bool m_spectrumRxElseTx; | ||||
|  | ||||
| @ -284,6 +284,270 @@ bool PlutoSDRMIMOSettings::deserialize(const QByteArray& data) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| void PlutoSDRMIMOSettings::applySettings(const QStringList& settingsKeys, const PlutoSDRMIMOSettings& settings) | ||||
| { | ||||
|     if (settingsKeys.contains("devSampleRate")) { | ||||
|         m_devSampleRate = settings.m_devSampleRate; | ||||
|     } | ||||
|     if (settingsKeys.contains("LOppmTenths")) { | ||||
|         m_LOppmTenths = settings.m_LOppmTenths; | ||||
|     } | ||||
|     if (settingsKeys.contains("rxCenterFrequency")) { | ||||
|         m_rxCenterFrequency = settings.m_rxCenterFrequency; | ||||
|     } | ||||
|     if (settingsKeys.contains("fcPosRx")) { | ||||
|         m_fcPosRx = settings.m_fcPosRx; | ||||
|     } | ||||
|     if (settingsKeys.contains("log2Decim")) { | ||||
|         m_log2Decim = settings.m_log2Decim; | ||||
|     } | ||||
|     if (settingsKeys.contains("dcBlock")) { | ||||
|         m_dcBlock = settings.m_dcBlock; | ||||
|     } | ||||
|     if (settingsKeys.contains("iqCorrection")) { | ||||
|         m_iqCorrection = settings.m_iqCorrection; | ||||
|     } | ||||
|     if (settingsKeys.contains("hwBBDCBlock")) { | ||||
|         m_hwBBDCBlock = settings.m_hwBBDCBlock; | ||||
|     } | ||||
|     if (settingsKeys.contains("hwRFDCBlock")) { | ||||
|         m_hwRFDCBlock = settings.m_hwRFDCBlock; | ||||
|     } | ||||
|     if (settingsKeys.contains("hwIQCorrection")) { | ||||
|         m_hwIQCorrection = settings.m_hwIQCorrection; | ||||
|     } | ||||
|     if (settingsKeys.contains("lpfBWRx")) { | ||||
|         m_lpfBWRx = settings.m_lpfBWRx; | ||||
|     } | ||||
|     if (settingsKeys.contains("lpfRxFIREnable")) { | ||||
|         m_lpfRxFIREnable = settings.m_lpfRxFIREnable; | ||||
|     } | ||||
|     if (settingsKeys.contains("lpfRxFIRBW")) { | ||||
|         m_lpfRxFIRBW = settings.m_lpfRxFIRBW; | ||||
|     } | ||||
|     if (settingsKeys.contains("lpfRxFIRlog2Decim")) { | ||||
|         m_lpfRxFIRlog2Decim = settings.m_lpfRxFIRlog2Decim; | ||||
|     } | ||||
|     if (settingsKeys.contains("lpfRxFIRGain")) { | ||||
|         m_lpfRxFIRGain = settings.m_lpfRxFIRGain; | ||||
|     } | ||||
|     if (settingsKeys.contains("rxTransverterMode")) { | ||||
|         m_rxTransverterMode = settings.m_rxTransverterMode; | ||||
|     } | ||||
|     if (settingsKeys.contains("rxTransverterDeltaFrequency")) { | ||||
|         m_rxTransverterDeltaFrequency = settings.m_rxTransverterDeltaFrequency; | ||||
|     } | ||||
|     if (settingsKeys.contains("iqOrder")) { | ||||
|         m_iqOrder = settings.m_iqOrder; | ||||
|     } | ||||
|     if (settingsKeys.contains("rx0Gain")) { | ||||
|         m_rx0Gain = settings.m_rx0Gain; | ||||
|     } | ||||
|     if (settingsKeys.contains("rx0AntennaPath")) { | ||||
|         m_rx0AntennaPath = settings.m_rx0AntennaPath; | ||||
|     } | ||||
|     if (settingsKeys.contains("rx0GainMode")) { | ||||
|         m_rx0GainMode = settings.m_rx0GainMode; | ||||
|     } | ||||
|     if (settingsKeys.contains("rx1Gain")) { | ||||
|         m_rx1Gain = settings.m_rx1Gain; | ||||
|     } | ||||
|     if (settingsKeys.contains("rx1AntennaPath")) { | ||||
|         m_rx1AntennaPath = settings.m_rx1AntennaPath; | ||||
|     } | ||||
|     if (settingsKeys.contains("rx1GainMode")) { | ||||
|         m_rx1GainMode = settings.m_rx1GainMode; | ||||
|     } | ||||
|     if (settingsKeys.contains("txCenterFrequency")) { | ||||
|         m_txCenterFrequency = settings.m_txCenterFrequency; | ||||
|     } | ||||
|     if (settingsKeys.contains("fcPosTx")) { | ||||
|         m_fcPosTx = settings.m_fcPosTx; | ||||
|     } | ||||
|     if (settingsKeys.contains("log2Interp")) { | ||||
|         m_log2Interp = settings.m_log2Interp; | ||||
|     } | ||||
|     if (settingsKeys.contains("lpfBWTx")) { | ||||
|         m_lpfBWTx = settings.m_lpfBWTx; | ||||
|     } | ||||
|     if (settingsKeys.contains("lpfTxFIREnable")) { | ||||
|         m_lpfTxFIREnable = settings.m_lpfTxFIREnable; | ||||
|     } | ||||
|     if (settingsKeys.contains("lpfTxFIRBW")) { | ||||
|         m_lpfTxFIRBW = settings.m_lpfTxFIRBW; | ||||
|     } | ||||
|     if (settingsKeys.contains("lpfTxFIRlog2Interp")) { | ||||
|         m_lpfTxFIRlog2Interp = settings.m_lpfTxFIRlog2Interp; | ||||
|     } | ||||
|     if (settingsKeys.contains("lpfTxFIRGain")) { | ||||
|         m_lpfTxFIRGain = settings.m_lpfTxFIRGain; | ||||
|     } | ||||
|     if (settingsKeys.contains("txTransverterMode")) { | ||||
|         m_txTransverterMode = settings.m_txTransverterMode; | ||||
|     } | ||||
|     if (settingsKeys.contains("txTransverterDeltaFrequency")) { | ||||
|         m_txTransverterDeltaFrequency = settings.m_txTransverterDeltaFrequency; | ||||
|     } | ||||
|     if (settingsKeys.contains("tx0Att")) { | ||||
|         m_tx0Att = settings.m_tx0Att; | ||||
|     } | ||||
|     if (settingsKeys.contains("tx0AntennaPath")) { | ||||
|         m_tx0AntennaPath = settings.m_tx0AntennaPath; | ||||
|     } | ||||
|     if (settingsKeys.contains("tx1Att")) { | ||||
|         m_tx1Att = settings.m_tx1Att; | ||||
|     } | ||||
|     if (settingsKeys.contains("tx1AntennaPath")) { | ||||
|         m_tx1AntennaPath = settings.m_tx1AntennaPath; | ||||
|     } | ||||
|     if (settingsKeys.contains("useReverseAPI")) { | ||||
|         m_useReverseAPI = settings.m_useReverseAPI; | ||||
|     } | ||||
|     if (settingsKeys.contains("reverseAPIAddress")) { | ||||
|         m_reverseAPIAddress = settings.m_reverseAPIAddress; | ||||
|     } | ||||
|     if (settingsKeys.contains("reverseAPIPort")) { | ||||
|         m_reverseAPIPort = settings.m_reverseAPIPort; | ||||
|     } | ||||
|     if (settingsKeys.contains("reverseAPIDeviceIndex")) { | ||||
|         m_reverseAPIDeviceIndex = settings.m_reverseAPIDeviceIndex; | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| QString PlutoSDRMIMOSettings::getDebugString(const QStringList& settingsKeys, bool force) const | ||||
| { | ||||
|     std::ostringstream ostr; | ||||
| 
 | ||||
|     if (settingsKeys.contains("devSampleRate") || force) { | ||||
|         ostr << " m_devSampleRate: " << m_devSampleRate; | ||||
|     } | ||||
|     if (settingsKeys.contains("LOppmTenths") || force) { | ||||
|         ostr << " m_LOppmTenths: " << m_LOppmTenths; | ||||
|     } | ||||
|     if (settingsKeys.contains("rxCenterFrequency") || force) { | ||||
|         ostr << " m_rxCenterFrequency: " << m_rxCenterFrequency; | ||||
|     } | ||||
|     if (settingsKeys.contains("fcPosRx") || force) { | ||||
|         ostr << " m_fcPosRx: " << m_fcPosRx; | ||||
|     } | ||||
|     if (settingsKeys.contains("log2Decim") || force) { | ||||
|         ostr << " m_log2Decim: " << m_log2Decim; | ||||
|     } | ||||
|     if (settingsKeys.contains("dcBlock") || force) { | ||||
|         ostr << " m_dcBlock: " << m_dcBlock; | ||||
|     } | ||||
|     if (settingsKeys.contains("iqCorrection") || force) { | ||||
|         ostr << " m_iqCorrection: " << m_iqCorrection; | ||||
|     } | ||||
|     if (settingsKeys.contains("hwBBDCBlock") || force) { | ||||
|         ostr << " m_hwBBDCBlock: " << m_hwBBDCBlock; | ||||
|     } | ||||
|     if (settingsKeys.contains("hwRFDCBlock") || force) { | ||||
|         ostr << " m_hwRFDCBlock: " << m_hwRFDCBlock; | ||||
|     } | ||||
|     if (settingsKeys.contains("hwIQCorrection") || force) { | ||||
|         ostr << " m_hwIQCorrection: " << m_hwIQCorrection; | ||||
|     } | ||||
|     if (settingsKeys.contains("lpfBWRx") || force) { | ||||
|         ostr << " m_lpfBWRx: " << m_lpfBWRx; | ||||
|     } | ||||
|     if (settingsKeys.contains("lpfRxFIREnable") || force) { | ||||
|         ostr << " m_lpfRxFIREnable: " << m_lpfRxFIREnable; | ||||
|     } | ||||
|     if (settingsKeys.contains("lpfRxFIRBW") || force) { | ||||
|         ostr << " m_lpfRxFIRBW: " << m_lpfRxFIRBW; | ||||
|     } | ||||
|     if (settingsKeys.contains("lpfRxFIRlog2Decim") || force) { | ||||
|         ostr << " m_lpfRxFIRlog2Decim: " << m_lpfRxFIRlog2Decim; | ||||
|     } | ||||
|     if (settingsKeys.contains("lpfRxFIRGain") || force) { | ||||
|         ostr << " m_lpfRxFIRGain: " << m_lpfRxFIRGain; | ||||
|     } | ||||
|     if (settingsKeys.contains("rxTransverterMode") || force) { | ||||
|         ostr << " m_rxTransverterMode: " << m_rxTransverterMode; | ||||
|     } | ||||
|     if (settingsKeys.contains("rxTransverterDeltaFrequency") || force) { | ||||
|         ostr << " m_rxTransverterDeltaFrequency: " << m_rxTransverterDeltaFrequency; | ||||
|     } | ||||
|     if (settingsKeys.contains("iqOrder") || force) { | ||||
|         ostr << " m_iqOrder: " << m_iqOrder; | ||||
|     } | ||||
|     if (settingsKeys.contains("rx0Gain") || force) { | ||||
|         ostr << " m_rx0Gain: " << m_rx0Gain; | ||||
|     } | ||||
|     if (settingsKeys.contains("rx0AntennaPath") || force) { | ||||
|         ostr << " m_rx0AntennaPath: " << m_rx0AntennaPath; | ||||
|     } | ||||
|     if (settingsKeys.contains("rx0GainMode") || force) { | ||||
|         ostr << " m_rx0GainMode: " << m_rx0GainMode; | ||||
|     } | ||||
|     if (settingsKeys.contains("rx1Gain") || force) { | ||||
|         ostr << " m_rx1Gain: " << m_rx1Gain; | ||||
|     } | ||||
|     if (settingsKeys.contains("rx1AntennaPath") || force) { | ||||
|         ostr << " m_rx1AntennaPath: " << m_rx1AntennaPath; | ||||
|     } | ||||
|     if (settingsKeys.contains("rx1GainMode") || force) { | ||||
|         ostr << " m_rx1GainMode: " << m_rx1GainMode; | ||||
|     } | ||||
|     if (settingsKeys.contains("txCenterFrequency") || force) { | ||||
|         ostr << " m_txCenterFrequency: " << m_txCenterFrequency; | ||||
|     } | ||||
|     if (settingsKeys.contains("fcPosTx") || force) { | ||||
|         ostr << " m_fcPosTx: " << m_fcPosTx; | ||||
|     } | ||||
|     if (settingsKeys.contains("log2Interp") || force) { | ||||
|         ostr << " m_log2Interp: " << m_log2Interp; | ||||
|     } | ||||
|     if (settingsKeys.contains("lpfBWTx") || force) { | ||||
|         ostr << " m_lpfBWTx: " << m_lpfBWTx; | ||||
|     } | ||||
|     if (settingsKeys.contains("lpfTxFIREnable") || force) { | ||||
|         ostr << " m_lpfTxFIREnable: " << m_lpfTxFIREnable; | ||||
|     } | ||||
|     if (settingsKeys.contains("lpfTxFIRBW") || force) { | ||||
|         ostr << " m_lpfTxFIRBW: " << m_lpfTxFIRBW; | ||||
|     } | ||||
|     if (settingsKeys.contains("lpfTxFIRlog2Interp") || force) { | ||||
|         ostr << " m_lpfTxFIRlog2Interp: " << m_lpfTxFIRlog2Interp; | ||||
|     } | ||||
|     if (settingsKeys.contains("lpfTxFIRGain") || force) { | ||||
|         ostr << " m_lpfTxFIRGain: " << m_lpfTxFIRGain; | ||||
|     } | ||||
|     if (settingsKeys.contains("txTransverterMode") || force) { | ||||
|         ostr << " m_txTransverterMode: " << m_txTransverterMode; | ||||
|     } | ||||
|     if (settingsKeys.contains("txTransverterDeltaFrequency") || force) { | ||||
|         ostr << " m_txTransverterDeltaFrequency: " << m_txTransverterDeltaFrequency; | ||||
|     } | ||||
|     if (settingsKeys.contains("tx0Att") || force) { | ||||
|         ostr << " m_tx0Att: " << m_tx0Att; | ||||
|     } | ||||
|     if (settingsKeys.contains("tx0AntennaPath") || force) { | ||||
|         ostr << " m_tx0AntennaPath: " << m_tx0AntennaPath; | ||||
|     } | ||||
|     if (settingsKeys.contains("tx1Att") || force) { | ||||
|         ostr << " m_tx1Att: " << m_tx1Att; | ||||
|     } | ||||
|     if (settingsKeys.contains("tx1AntennaPath") || force) { | ||||
|         ostr << " m_tx1AntennaPath: " << m_tx1AntennaPath; | ||||
|     } | ||||
|     if (settingsKeys.contains("useReverseAPI") || force) { | ||||
|         ostr << " m_useReverseAPI: " << m_useReverseAPI; | ||||
|     } | ||||
|     if (settingsKeys.contains("reverseAPIAddress") || force) { | ||||
|         ostr << " m_reverseAPIAddress: " << m_reverseAPIAddress.toStdString(); | ||||
|     } | ||||
|     if (settingsKeys.contains("reverseAPIPort") || force) { | ||||
|         ostr << " m_reverseAPIPort: " << m_reverseAPIPort; | ||||
|     } | ||||
|     if (settingsKeys.contains("reverseAPIDeviceIndex") || force) { | ||||
|         ostr << " m_reverseAPIDeviceIndex: " << m_reverseAPIDeviceIndex; | ||||
|     } | ||||
| 
 | ||||
|     return QString(ostr.str().c_str()); | ||||
| } | ||||
| 
 | ||||
| void PlutoSDRMIMOSettings::translateRFPathTx(RFPathTx path, QString& s) | ||||
| { | ||||
|     switch(path) | ||||
|  | ||||
| @ -128,6 +128,8 @@ struct PlutoSDRMIMOSettings { | ||||
| 	void resetToDefaults(); | ||||
| 	QByteArray serialize() const; | ||||
| 	bool deserialize(const QByteArray& data); | ||||
|     void applySettings(const QStringList& settingsKeys, const PlutoSDRMIMOSettings& settings); | ||||
|     QString getDebugString(const QStringList& settingsKeys, bool force=false) const; | ||||
|     static void translateRFPathRx(RFPathRx path, QString& s); | ||||
|     static void translateGainMode(GainMode mod, QString& s); | ||||
|     static void translateRFPathTx(RFPathTx path, QString& s); | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user