diff --git a/Software/PC_Application/LibreVNA-GUI/SpectrumAnalyzer/spectrumanalyzer.cpp b/Software/PC_Application/LibreVNA-GUI/SpectrumAnalyzer/spectrumanalyzer.cpp index 3694739..a67d64f 100644 --- a/Software/PC_Application/LibreVNA-GUI/SpectrumAnalyzer/spectrumanalyzer.cpp +++ b/Software/PC_Application/LibreVNA-GUI/SpectrumAnalyzer/spectrumanalyzer.cpp @@ -627,8 +627,14 @@ void SpectrumAnalyzer::SetSpan(double span) void SpectrumAnalyzer::SetFullSpan() { - settings.freqStart = VirtualDevice::getInfo(window->getDevice()).Limits.minFreq; - settings.freqStop = VirtualDevice::getInfo(window->getDevice()).Limits.maxFreq; + auto &pref = Preferences::getInstance(); + if(pref.Acquisition.fullSpanManual) { + settings.freqStart = pref.Acquisition.fullSpanStart; + settings.freqStop = pref.Acquisition.fullSpanStop; + } else { + settings.freqStart = VirtualDevice::getInfo(window->getDevice()).Limits.minFreq; + settings.freqStop = VirtualDevice::getInfo(window->getDevice()).Limits.maxFreq; + } ConstrainAndUpdateFrequencies(); } diff --git a/Software/PC_Application/LibreVNA-GUI/VNA/vna.cpp b/Software/PC_Application/LibreVNA-GUI/VNA/vna.cpp index 9cf8c1e..bb47cef 100644 --- a/Software/PC_Application/LibreVNA-GUI/VNA/vna.cpp +++ b/Software/PC_Application/LibreVNA-GUI/VNA/vna.cpp @@ -1018,8 +1018,20 @@ void VNA::SetSpan(double span) void VNA::SetFullSpan() { - settings.Freq.start = VirtualDevice::getInfo(window->getDevice()).Limits.minFreq; - settings.Freq.stop = VirtualDevice::getInfo(window->getDevice()).Limits.maxFreq; + auto &pref = Preferences::getInstance(); + if(pref.Acquisition.fullSpanCalibratedRange && cal.getNumPoints() > 0) { + // calibration is active, use it as the full span range + settings.Freq.start = cal.getMinFreq(); + settings.Freq.stop = cal.getMaxFreq(); + } else { + if(pref.Acquisition.fullSpanManual) { + settings.Freq.start = pref.Acquisition.fullSpanStart; + settings.Freq.stop = pref.Acquisition.fullSpanStop; + } else { + settings.Freq.start = VirtualDevice::getInfo(window->getDevice()).Limits.minFreq; + settings.Freq.stop = VirtualDevice::getInfo(window->getDevice()).Limits.maxFreq; + } + } ConstrainAndUpdateFrequencies(); } diff --git a/Software/PC_Application/LibreVNA-GUI/preferences.cpp b/Software/PC_Application/LibreVNA-GUI/preferences.cpp index bcd34e7..0dfe919 100644 --- a/Software/PC_Application/LibreVNA-GUI/preferences.cpp +++ b/Software/PC_Application/LibreVNA-GUI/preferences.cpp @@ -103,6 +103,14 @@ PreferencesDialog::PreferencesDialog(Preferences *pref, QWidget *parent) : ui->AcquisitionIF2->setUnit("Hz"); ui->AcquisitionIF2->setPrefixes(" kM"); ui->AcquisitionIF2->setPrecision(6); + ui->AcquisitionFullSpanStart->setUnit("Hz"); + ui->AcquisitionFullSpanStart->setPrefixes(" kMG"); + ui->AcquisitionFullSpanStart->setPrecision(6); + ui->AcquisitionFullSpanStart->setEnabled(false); + ui->AcquisitionFullSpanStop->setUnit("Hz"); + ui->AcquisitionFullSpanStop->setPrefixes(" kMG"); + ui->AcquisitionFullSpanStop->setPrecision(6); + ui->AcquisitionFullSpanStop->setEnabled(false); auto updateADCRate = [=]() { // update ADC rate, see FPGA protocol for calculation ui->AcquisitionADCRate->setValue(102400000.0 / ui->AcquisitionADCpresc->value()); @@ -115,6 +123,11 @@ PreferencesDialog::PreferencesDialog(Preferences *pref, QWidget *parent) : connect(ui->AcquisitionADCpresc, qOverload(&QSpinBox::valueChanged), updateIF2); connect(ui->AcquisitionADCphaseInc, qOverload(&QSpinBox::valueChanged), updateIF2); + connect(ui->AcquisitionFullSpanBehavior, qOverload(&QComboBox::currentIndexChanged), [=](){ + ui->AcquisitionFullSpanStart->setEnabled(ui->AcquisitionFullSpanBehavior->currentIndex() == 1); + ui->AcquisitionFullSpanStop->setEnabled(ui->AcquisitionFullSpanBehavior->currentIndex() == 1); + }); + // Graph page ui->GraphsZoomFactor->setPrecision(3); @@ -294,6 +307,10 @@ void PreferencesDialog::setInitialGUIState() ui->AcquisitionIF1->setValue(p->Acquisition.IF1); ui->AcquisitionADCpresc->setValue(p->Acquisition.ADCprescaler); ui->AcquisitionADCphaseInc->setValue(p->Acquisition.DFTPhaseInc); + ui->AcquisitionFullSpanBehavior->setCurrentIndex(p->Acquisition.fullSpanManual ? 1 : 0); + ui->AcquisitionFullSpanStart->setValue(p->Acquisition.fullSpanStart); + ui->AcquisitionFullSpanStop->setValue(p->Acquisition.fullSpanStop); + ui->AcquisitionFullSpanCalibrated->setChecked(p->Acquisition.fullSpanCalibratedRange); ui->GraphsShowUnit->setChecked(p->Graphs.showUnits); ui->GraphsColorBackground->setColor(p->Graphs.Color.background); @@ -367,6 +384,10 @@ void PreferencesDialog::updateFromGUI() p->Acquisition.IF1 = ui->AcquisitionIF1->value(); p->Acquisition.ADCprescaler = ui->AcquisitionADCpresc->value(); p->Acquisition.DFTPhaseInc = ui->AcquisitionADCphaseInc->value(); + p->Acquisition.fullSpanManual = ui->AcquisitionFullSpanBehavior->currentIndex() == 1; + p->Acquisition.fullSpanStart = ui->AcquisitionFullSpanStart->value(); + p->Acquisition.fullSpanStop = ui->AcquisitionFullSpanStop->value(); + p->Acquisition.fullSpanCalibratedRange = ui->AcquisitionFullSpanCalibrated->isChecked(); p->Graphs.showUnits = ui->GraphsShowUnit->isChecked(); p->Graphs.Color.background = ui->GraphsColorBackground->getColor(); diff --git a/Software/PC_Application/LibreVNA-GUI/preferences.h b/Software/PC_Application/LibreVNA-GUI/preferences.h index e311657..5739bb0 100644 --- a/Software/PC_Application/LibreVNA-GUI/preferences.h +++ b/Software/PC_Application/LibreVNA-GUI/preferences.h @@ -106,6 +106,12 @@ public: double IF1; int ADCprescaler; int DFTPhaseInc; + + // Full span settings + bool fullSpanManual; + double fullSpanStart; + double fullSpanStop; + bool fullSpanCalibratedRange; } Acquisition; struct { bool showUnits; @@ -201,6 +207,10 @@ private: {&Acquisition.IF1, "Acquisition.IF1", 62000000}, {&Acquisition.ADCprescaler, "Acquisition.ADCprescaler", 128}, {&Acquisition.DFTPhaseInc, "Acquisition.DFTPhaseInc", 1280}, + {&Acquisition.fullSpanManual, "Acquisition.fullSpanManual", false}, + {&Acquisition.fullSpanStart, "Acquisition.fullSpanStart", 0.0}, + {&Acquisition.fullSpanStop, "Acquisition.fullSpanStop", 6000000000.0}, + {&Acquisition.fullSpanCalibratedRange, "Acquisition.fullSpanCalibratedRange", false}, {&Graphs.showUnits, "Graphs.showUnits", true}, {&Graphs.Color.background, "Graphs.Color.background", QColor(Qt::black)}, {&Graphs.Color.axis, "Graphs.Color.axis", QColor(Qt::white)}, diff --git a/Software/PC_Application/LibreVNA-GUI/preferencesdialog.ui b/Software/PC_Application/LibreVNA-GUI/preferencesdialog.ui index 48649c6..1b52c5d 100644 --- a/Software/PC_Application/LibreVNA-GUI/preferencesdialog.ui +++ b/Software/PC_Application/LibreVNA-GUI/preferencesdialog.ui @@ -82,9 +82,9 @@ 0 - 0 - 684 - 854 + -334 + 687 + 938 @@ -103,7 +103,7 @@ - 2 + 1 @@ -701,7 +701,7 @@ - + @@ -786,7 +786,7 @@ Common - + @@ -923,6 +923,67 @@ + + + + Full Span + + + + + + + + Behavior: + + + + + + + + Use maximum possible span as advertised by device + + + + + Use manually defined full span + + + + + + + + Start frequency: + + + + + + + + + + Stop frequency: + + + + + + + + + + + + Use calibrated range as full span when calibrated + + + + + +