mirror of
https://github.com/jankae/LibreVNA.git
synced 2026-04-04 22:17:31 +00:00
Added single sweep functionality
This commit is contained in:
parent
53dcff8745
commit
d84d3e80aa
8 changed files with 124 additions and 11 deletions
|
|
@ -1,4 +1,4 @@
|
|||
#include "vna.h"
|
||||
#include "vna.h"
|
||||
|
||||
#include "unit.h"
|
||||
#include "CustomWidgets/toggleswitch.h"
|
||||
|
|
@ -58,6 +58,7 @@ VNA::VNA(AppWindow *window, QString name)
|
|||
central(new TileWidget(traceModel))
|
||||
{
|
||||
averages = 1;
|
||||
singleSweep = false;
|
||||
calValid = false;
|
||||
calMeasuring = false;
|
||||
calWaitFirst = false;
|
||||
|
|
@ -257,6 +258,13 @@ VNA::VNA(AppWindow *window, QString name)
|
|||
cbSweepType->addItem("Power");
|
||||
tb_sweep->addWidget(cbSweepType);
|
||||
|
||||
auto bSingle = new QPushButton("Single");
|
||||
bSingle->setToolTip("Single sweep");
|
||||
bSingle->setCheckable(true);
|
||||
connect(bSingle, &QPushButton::toggled, this, &VNA::SetSingleSweep);
|
||||
connect(this, &VNA::singleSweepChanged, bSingle, &QPushButton::setChecked);
|
||||
tb_sweep->addWidget(bSingle);
|
||||
|
||||
auto eStart = new SIUnitEdit("Hz", " kMG", 6);
|
||||
// calculate width required with expected string length
|
||||
auto width = QFontMetrics(eStart->font()).width("3.00000GHz") + 15;
|
||||
|
|
@ -719,6 +727,7 @@ nlohmann::json VNA::toJSON()
|
|||
freq["power"] = settings.Freq.excitation_power;
|
||||
freq["log"] = settings.Freq.logSweep;
|
||||
sweep["frequency"] = freq;
|
||||
sweep["single"] = singleSweep;
|
||||
nlohmann::json power;
|
||||
power["start"] = settings.Power.start;
|
||||
power["stop"] = settings.Power.stop;
|
||||
|
|
@ -782,6 +791,7 @@ void VNA::fromJSON(nlohmann::json j)
|
|||
type = SweepType::Frequency;
|
||||
}
|
||||
SetSweepType(type);
|
||||
SetSingleSweep(sweep.value("single", singleSweep));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -799,6 +809,14 @@ void VNA::NewDatapoint(Protocol::Datapoint d)
|
|||
return;
|
||||
}
|
||||
|
||||
if(singleSweep && average.getLevel() == averages) {
|
||||
changingSettings = true;
|
||||
// single sweep finished
|
||||
window->getDevice()->SetIdle([=](Device::TransmissionResult){
|
||||
changingSettings = false;
|
||||
});
|
||||
}
|
||||
|
||||
bool needsSegmentUpdate = false;
|
||||
if (settings.segments > 1) {
|
||||
// using multiple segments, adjust pointNum
|
||||
|
|
@ -1377,6 +1395,17 @@ void VNA::SetupSCPI()
|
|||
scpi_acq->add(new SCPICommand("LIMit", nullptr, [=](QStringList) -> QString {
|
||||
return central->allLimitsPassing() ? "PASS" : "FAIL";
|
||||
}));
|
||||
scpi_acq->add(new SCPICommand("SINGLE", [=](QStringList params) -> QString {
|
||||
bool single;
|
||||
if(!SCPI::paramToBool(params, 0, single)) {
|
||||
return "ERROR";
|
||||
} else {
|
||||
SetSingleSweep(single);
|
||||
return "";
|
||||
}
|
||||
}, [=](QStringList) -> QString {
|
||||
return singleSweep ? "TRUE" : "FALSE";
|
||||
}));
|
||||
auto scpi_stim = new SCPINode("STIMulus");
|
||||
SCPINode::add(scpi_stim);
|
||||
scpi_stim->add(new SCPICommand("LVL", [=](QStringList params) -> QString {
|
||||
|
|
@ -1627,6 +1656,15 @@ void VNA::UpdateStatusbar()
|
|||
}
|
||||
}
|
||||
|
||||
void VNA::SetSingleSweep(bool single)
|
||||
{
|
||||
if(singleSweep != single) {
|
||||
singleSweep = single;
|
||||
emit singleSweepChanged(single);
|
||||
}
|
||||
SettingsChanged();
|
||||
}
|
||||
|
||||
bool VNA::LoadCalibration(QString filename)
|
||||
{
|
||||
cal.openFromFile(filename);
|
||||
|
|
|
|||
|
|
@ -123,6 +123,7 @@ private:
|
|||
private slots:
|
||||
void EnableDeembedding(bool enable);
|
||||
void UpdateStatusbar();
|
||||
void SetSingleSweep(bool single);
|
||||
private:
|
||||
Settings settings;
|
||||
unsigned int averages;
|
||||
|
|
@ -130,6 +131,7 @@ private:
|
|||
TraceWidget *traceWidget;
|
||||
MarkerModel *markerModel;
|
||||
Averaging average;
|
||||
bool singleSweep;
|
||||
|
||||
// Calibration
|
||||
Calibration cal;
|
||||
|
|
@ -167,6 +169,7 @@ signals:
|
|||
void centerFreqChanged(double freq);
|
||||
void spanChanged(double span);
|
||||
void logSweepChanged(bool log);
|
||||
void singleSweepChanged(bool single);
|
||||
|
||||
void sourceLevelChanged(double level);
|
||||
void pointsChanged(unsigned int points);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue