From b3eb1735cc24cfa1b26778661b6e378afffe6d0b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20K=C3=A4berich?= Date: Tue, 24 Jun 2025 08:50:43 +0200 Subject: [PATCH] option to prevent electronic calibrations while LibreCAL temperature unstable --- .../Calibration/LibreCAL/librecaldialog.cpp | 13 ++++++ .../LibreVNA-GUI/preferences.cpp | 2 + .../PC_Application/LibreVNA-GUI/preferences.h | 4 ++ .../LibreVNA-GUI/preferencesdialog.ui | 40 +++++++++++++------ 4 files changed, 47 insertions(+), 12 deletions(-) diff --git a/Software/PC_Application/LibreVNA-GUI/Calibration/LibreCAL/librecaldialog.cpp b/Software/PC_Application/LibreVNA-GUI/Calibration/LibreCAL/librecaldialog.cpp index 3af0126..3dde1c1 100644 --- a/Software/PC_Application/LibreVNA-GUI/Calibration/LibreCAL/librecaldialog.cpp +++ b/Software/PC_Application/LibreVNA-GUI/Calibration/LibreCAL/librecaldialog.cpp @@ -4,6 +4,7 @@ #include "caldevice.h" #include "usbdevice.h" #include "CustomWidgets/informationbox.h" +#include "preferences.h" #include @@ -234,6 +235,14 @@ void LibreCALDialog::updateCalibrationStartStatus() canStart = validatePortSelection(true); } + if(canStart) { + if(!Preferences::getInstance().Acquisition.allowUseOfUnstableLibreCALTemp && !device->stabilized()) { + canStart = false; + ui->lCalibrationStatus->setText("LibreCAL temperature unstable"); + ui->lCalibrationStatus->setStyleSheet("QLabel { color : red; }"); + } + } + ui->start->setEnabled(canStart); if(canStart) { ui->lCalibrationStatus->setText("Ready to start"); @@ -259,6 +268,7 @@ void LibreCALDialog::updateDeviceStatus() ui->lDeviceStatus->setText("Heating up, please wait with calibration"); ui->lDeviceStatus->setStyleSheet("QLabel { color : orange; }"); } + updateCalibrationStartStatus(); } void LibreCALDialog::determineAutoPorts() @@ -420,6 +430,7 @@ void LibreCALDialog::stopSweep() void LibreCALDialog::startCalibration() { disableUI(); + busy = true; ui->progressCal->setValue(0); ui->lCalibrationStatus->setText("Creating calibration kit from coefficients..."); @@ -592,6 +603,7 @@ void LibreCALDialog::startCalibration() disconnect(cal, &Calibration::measurementsUpdated, this, nullptr); setTerminationOnAllUsedPorts(CalDevice::Standard(CalDevice::Standard::Type::None)); enableUI(); + busy = false; break; } setTerminationOnAllUsedPorts(CalDevice::Standard(CalDevice::Standard::Type::None)); @@ -609,6 +621,7 @@ void LibreCALDialog::startCalibration() connect(cal, &Calibration::measurementsAborted, this, [=](){ setTerminationOnAllUsedPorts(CalDevice::Standard(CalDevice::Standard::Type::None)); enableUI(); + busy = false; ui->lCalibrationStatus->setText("Ready to start"); }); diff --git a/Software/PC_Application/LibreVNA-GUI/preferences.cpp b/Software/PC_Application/LibreVNA-GUI/preferences.cpp index 1ec8d0f..e248e73 100644 --- a/Software/PC_Application/LibreVNA-GUI/preferences.cpp +++ b/Software/PC_Application/LibreVNA-GUI/preferences.cpp @@ -276,6 +276,7 @@ void PreferencesDialog::setInitialGUIState() ui->AcquisitionAlwaysExciteBoth->setChecked(p->Acquisition.alwaysExciteAllPorts); ui->AcquisitionAllowSegmentedSweep->setChecked(p->Acquisition.allowSegmentedSweep); + ui->AcquisitionAllowCalStartWithUnstableLibreCALTemperature->setChecked(p->Acquisition.allowUseOfUnstableLibreCALTemp); ui->AcquisitionAveragingMode->setCurrentIndex(p->Acquisition.useMedianAveraging ? 1 : 0); ui->AcquisitionFullSpanBehavior->setCurrentIndex(p->Acquisition.fullSpanManual ? 1 : 0); ui->AcquisitionFullSpanStart->setValue(p->Acquisition.fullSpanStart); @@ -398,6 +399,7 @@ void PreferencesDialog::updateFromGUI() p->Acquisition.alwaysExciteAllPorts = ui->AcquisitionAlwaysExciteBoth->isChecked(); p->Acquisition.allowSegmentedSweep = ui->AcquisitionAllowSegmentedSweep->isChecked(); + p->Acquisition.allowUseOfUnstableLibreCALTemp = ui->AcquisitionAllowCalStartWithUnstableLibreCALTemperature->isChecked(); p->Acquisition.useMedianAveraging = ui->AcquisitionAveragingMode->currentIndex() == 1; p->Acquisition.fullSpanManual = ui->AcquisitionFullSpanBehavior->currentIndex() == 1; p->Acquisition.fullSpanStart = ui->AcquisitionFullSpanStart->value(); diff --git a/Software/PC_Application/LibreVNA-GUI/preferences.h b/Software/PC_Application/LibreVNA-GUI/preferences.h index 167cf0f..44105e7 100644 --- a/Software/PC_Application/LibreVNA-GUI/preferences.h +++ b/Software/PC_Application/LibreVNA-GUI/preferences.h @@ -103,8 +103,11 @@ public: } SA; } Startup; struct { + // VNA settings bool alwaysExciteAllPorts; bool allowSegmentedSweep; + bool allowUseOfUnstableLibreCALTemp; + bool useMedianAveraging; // Full span settings @@ -277,6 +280,7 @@ private: {&Startup.SA.averaging, "Startup.SA.averaging", 1}, {&Acquisition.alwaysExciteAllPorts, "Acquisition.alwaysExciteBothPorts", true}, {&Acquisition.allowSegmentedSweep, "Acquisition.allowSegmentedSweep", true}, + {&Acquisition.allowUseOfUnstableLibreCALTemp, "Acquisition.allowUseOfUnstableLibreCALTemp", true}, {&Acquisition.useMedianAveraging, "Acquisition.useMedianAveraging", false}, {&Acquisition.fullSpanManual, "Acquisition.fullSpanManual", false}, {&Acquisition.fullSpanStart, "Acquisition.fullSpanStart", 0.0}, diff --git a/Software/PC_Application/LibreVNA-GUI/preferencesdialog.ui b/Software/PC_Application/LibreVNA-GUI/preferencesdialog.ui index 9078999..08a9c1c 100644 --- a/Software/PC_Application/LibreVNA-GUI/preferencesdialog.ui +++ b/Software/PC_Application/LibreVNA-GUI/preferencesdialog.ui @@ -98,7 +98,7 @@ - 2 + 1 @@ -112,8 +112,8 @@ 0 0 - 522 - 945 + 683 + 902 @@ -713,8 +713,8 @@ 0 0 - 564 - 477 + 697 + 564 @@ -741,6 +741,22 @@ + + + + Electronic Calibration + + + + + + Allow calibration to start before the LibreCAL temperature has stabilized + + + + + + @@ -955,7 +971,7 @@ 0 0 683 - 1217 + 1182 @@ -1520,8 +1536,8 @@ 0 0 - 602 - 628 + 486 + 608 @@ -1880,8 +1896,8 @@ 0 0 - 168 - 127 + 144 + 124 @@ -2163,8 +2179,8 @@ 0 0 - 258 - 241 + 697 + 564