mirror of
https://github.com/jankae/LibreVNA.git
synced 2025-12-06 07:12:10 +01:00
Compare commits
3 commits
be123420db
...
d77215aecb
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d77215aecb | ||
|
|
7acb847a2b | ||
|
|
92088ec646 |
Binary file not shown.
|
Before Width: | Height: | Size: 37 KiB After Width: | Height: | Size: 24 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 27 KiB After Width: | Height: | Size: 17 KiB |
Binary file not shown.
|
|
@ -1410,14 +1410,14 @@ When connected to a compound device and in VNA mode, there is no phase informati
|
|||
\end{important}
|
||||
|
||||
\subsection{Creating a compound device}
|
||||
Compound devices must be configured in the preferences: \menu[,]{Window,Preferences,Compound Devices}
|
||||
Compound devices must be configured in the preferences:\linebreak\menu[,]{Window,Preferences,Device Drivers,LibreVNA/Compound}
|
||||
\screenshot{1.0}{CompoundDeviceList.png}
|
||||
Create and remove compound devices with the buttons on the right. Edit an existing compound device by double-clicking it:
|
||||
\screenshot{1.0}{CompoundDeviceEdit.png}
|
||||
Required steps when creating a compound device:
|
||||
\begin{enumerate}
|
||||
\item Assign a name to the new compound device
|
||||
\item Select the synchronization method between devices. At the moment, only USB synchronization is supported but future hardware versions might support faster synchronization via dedicated trigger ports
|
||||
\item Select the synchronization method between devices. At the moment, only GUI synchronization is supported but future hardware versions might support faster synchronization via dedicated trigger ports
|
||||
\item Drag-and-drop a LibreVNA symbol into the configuration area for every physical device in the compound device
|
||||
\begin{itemize}
|
||||
\item At least two physical devices must be used
|
||||
|
|
|
|||
|
|
@ -914,7 +914,7 @@ void SpectrumAnalyzer::ConfigureDevice()
|
|||
average.reset(DeviceDriver::SApoints());
|
||||
UpdateAverageCount();
|
||||
traceModel.clearLiveData();
|
||||
emit traceModel.SpanChanged(settings.freqStart, settings.freqStop);
|
||||
traceModel.setSpan(settings.freqStart, settings.freqStop);
|
||||
} else {
|
||||
if(window->getDevice()) {
|
||||
changingSettings = true;
|
||||
|
|
|
|||
|
|
@ -9,6 +9,8 @@ using namespace std;
|
|||
TraceModel::TraceModel(QObject *parent)
|
||||
: QAbstractTableModel(parent)
|
||||
{
|
||||
spanFmin = 0.0;
|
||||
spanFmax = 6000000000.0;
|
||||
traces.clear();
|
||||
source = DataSource::Unknown;
|
||||
lastSweepPosition = 0.0;
|
||||
|
|
@ -368,6 +370,13 @@ double TraceModel::getSweepPosition() const
|
|||
}
|
||||
}
|
||||
|
||||
void TraceModel::setSpan(double fmin, double fmax)
|
||||
{
|
||||
spanFmin = fmin;
|
||||
spanFmax = fmax;
|
||||
emit SpanChanged(fmin, fmax);
|
||||
}
|
||||
|
||||
MarkerModel *TraceModel::getMarkerModel() const
|
||||
{
|
||||
return markerModel;
|
||||
|
|
|
|||
|
|
@ -62,6 +62,10 @@ public:
|
|||
|
||||
double getSweepPosition() const;
|
||||
|
||||
void setSpan(double fmin, double fmax);
|
||||
double getSpanStart() {return spanFmin;}
|
||||
double getSpanStop() {return spanFmax;}
|
||||
|
||||
signals:
|
||||
void SpanChanged(double fmin, double fmax);
|
||||
void traceAdded(Trace *t);
|
||||
|
|
@ -80,6 +84,8 @@ private:
|
|||
QDateTime lastReceivedData;
|
||||
std::vector<Trace*> traces;
|
||||
MarkerModel *markerModel;
|
||||
|
||||
double spanFmin, spanFmax;
|
||||
};
|
||||
|
||||
#endif // TRACEMODEL_H
|
||||
|
|
|
|||
|
|
@ -42,8 +42,7 @@ TracePlot::TracePlot(TraceModel &model, QWidget *parent)
|
|||
lastUpdate = QTime::currentTime();
|
||||
replotTimer.setSingleShot(true);
|
||||
connect(&replotTimer, &QTimer::timeout, this, qOverload<>(&TracePlot::update));
|
||||
sweep_fmin = std::numeric_limits<double>::lowest();
|
||||
sweep_fmax = std::numeric_limits<double>::max();
|
||||
TracePlot::updateSpan(model.getSpanStart(), model.getSpanStop());
|
||||
xSweep = std::numeric_limits<double>::quiet_NaN();
|
||||
// get notified when the span changes
|
||||
connect(&model, &TraceModel::SpanChanged, this, qOverload<double, double>(&TracePlot::updateSpan));
|
||||
|
|
|
|||
|
|
@ -29,8 +29,7 @@ TraceXYPlot::TraceXYPlot(TraceModel &model, QWidget *parent)
|
|||
// Setup default axis
|
||||
setYAxis(0, YAxis::Type::Magnitude, false, false, YAxis::getDefaultLimitMin(YAxis::Type::Magnitude), YAxis::getDefaultLimitMax(YAxis::Type::Magnitude), 14, true);
|
||||
setYAxis(1, YAxis::Type::Phase, false, false, YAxis::getDefaultLimitMin(YAxis::Type::Phase), YAxis::getDefaultLimitMax(YAxis::Type::Phase), 12, true);
|
||||
// enable autoscaling and set for full span (no information about actual span available yet)
|
||||
updateSpan(0, 6000000000);
|
||||
|
||||
setXAxis(XAxis::Type::Frequency, XAxisMode::UseSpan, false, 0, 6000000000, 10, true);
|
||||
initializeTraceInfo();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -116,7 +116,7 @@ XYplotAxisDialog::XYplotAxisDialog(TraceXYPlot *plot) :
|
|||
setupYAxisConnetions(ui->Y1type, ui->Y1linear, ui->Y1log, ui->Y1auto, ui->Y1min, ui->Y1max, ui->Y1Divs, ui->Y1autoDivs);
|
||||
setupYAxisConnetions(ui->Y2type, ui->Y2linear, ui->Y2log, ui->Y2auto, ui->Y2min, ui->Y2max, ui->Y2Divs, ui->Y2autoDivs);
|
||||
|
||||
auto updateXenableState = [](QRadioButton *linear, QRadioButton *log, QCheckBox *CBauto, SIUnitEdit *min, SIUnitEdit *max, QSpinBox *divs, QCheckBox *autoDivs) {
|
||||
auto updateXenableState = [](QRadioButton *linear, QRadioButton *log, QCheckBox *CBauto, SIUnitEdit *min, SIUnitEdit *max, QSpinBox *divs, QCheckBox *autoDivs, QComboBox *autoMode) {
|
||||
log->setEnabled(true);
|
||||
linear->setEnabled(true);
|
||||
CBauto->setEnabled(true);
|
||||
|
|
@ -126,6 +126,7 @@ XYplotAxisDialog::XYplotAxisDialog(TraceXYPlot *plot) :
|
|||
max->setEnabled(false);
|
||||
divs->setEnabled(false);
|
||||
autoDivs->setEnabled(false);
|
||||
autoMode->setEnabled(true);
|
||||
} else {
|
||||
min->setEnabled(true);
|
||||
max->setEnabled(true);
|
||||
|
|
@ -136,14 +137,15 @@ XYplotAxisDialog::XYplotAxisDialog(TraceXYPlot *plot) :
|
|||
autoDivs->setEnabled(true);
|
||||
divs->setEnabled(!autoDivs->isChecked());
|
||||
}
|
||||
autoMode->setEnabled(false);
|
||||
}
|
||||
};
|
||||
|
||||
connect(ui->Xauto, &QCheckBox::toggled, [this, updateXenableState](bool) {
|
||||
updateXenableState(ui->Xlinear, ui->Xlog, ui->Xauto, ui->Xmin, ui->Xmax, ui->XDivs, ui->XautoDivs);
|
||||
updateXenableState(ui->Xlinear, ui->Xlog, ui->Xauto, ui->Xmin, ui->Xmax, ui->XDivs, ui->XautoDivs, ui->Xautomode);
|
||||
});
|
||||
connect(ui->XautoDivs, &QCheckBox::toggled, [this, updateXenableState](bool) {
|
||||
updateXenableState(ui->Xlinear, ui->Xlog, ui->Xauto, ui->Xmin, ui->Xmax, ui->XDivs, ui->XautoDivs);
|
||||
updateXenableState(ui->Xlinear, ui->Xlog, ui->Xauto, ui->Xmin, ui->Xmax, ui->XDivs, ui->XautoDivs, ui->Xautomode);
|
||||
});
|
||||
|
||||
ui->XType->setCurrentIndex((int) plot->xAxis.getType());
|
||||
|
|
@ -159,7 +161,7 @@ XYplotAxisDialog::XYplotAxisDialog(TraceXYPlot *plot) :
|
|||
XAxisTypeChanged((int) plot->xAxis.getType());
|
||||
connect(ui->XType, qOverload<int>(&QComboBox::currentIndexChanged), this, &XYplotAxisDialog::XAxisTypeChanged);
|
||||
connect(ui->Xlog, &QCheckBox::toggled, [=](bool){
|
||||
updateXenableState(ui->Xlinear, ui->Xlog, ui->Xauto, ui->Xmin, ui->Xmax, ui->XDivs, ui->XautoDivs);
|
||||
updateXenableState(ui->Xlinear, ui->Xlog, ui->Xauto, ui->Xmin, ui->Xmax, ui->XDivs, ui->XautoDivs, ui->Xautomode);
|
||||
});
|
||||
|
||||
// Fill initial values
|
||||
|
|
|
|||
|
|
@ -1961,7 +1961,7 @@ void VNA::ConfigureDevice(bool resetTraces, std::function<void(bool)> cb)
|
|||
double start = settings.sweepType == SweepType::Frequency ? settings.Freq.start : settings.Power.start;
|
||||
double stop = settings.sweepType == SweepType::Frequency ? settings.Freq.stop : settings.Power.stop;
|
||||
int npoints = settings.npoints;
|
||||
emit traceModel.SpanChanged(start, stop);
|
||||
traceModel.setSpan(start, stop);
|
||||
if (settings.segments > 1) {
|
||||
// more than one segment, adjust start/stop
|
||||
npoints = ceil((double) settings.npoints / settings.segments);
|
||||
|
|
|
|||
Loading…
Reference in a new issue