From d674d05083a0f2f7474a15d1b6d9d78a6fd61661 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20K=C3=A4berich?= Date: Mon, 12 Dec 2022 17:39:17 +0100 Subject: [PATCH] WIP: SCPI commands for de-embedding --- Documentation/UserManual/ProgrammingGuide.pdf | Bin 252716 -> 254043 bytes Documentation/UserManual/ProgrammingGuide.tex | 10 ++ .../LibreVNA-GUI/Traces/tracewidget.cpp | 99 ++++++++++++------ .../VNA/Deembedding/deembedding.cpp | 51 ++++++++- .../VNA/Deembedding/deembedding.h | 4 +- .../VNA/Deembedding/deembeddingdialog.cpp | 4 +- .../VNA/Deembedding/deembeddingoption.cpp | 12 ++- .../VNA/Deembedding/deembeddingoption.h | 10 +- .../Deembedding/impedancerenormalization.cpp | 14 ++- .../VNA/Deembedding/matchingnetwork.cpp | 5 +- .../VNA/Deembedding/portextension.cpp | 8 +- .../LibreVNA-GUI/VNA/Deembedding/twothru.cpp | 1 + .../PC_Application/LibreVNA-GUI/VNA/vna.cpp | 2 + Software/PC_Application/LibreVNA-GUI/scpi.cpp | 48 +++++++++ Software/PC_Application/LibreVNA-GUI/scpi.h | 7 +- 15 files changed, 227 insertions(+), 48 deletions(-) diff --git a/Documentation/UserManual/ProgrammingGuide.pdf b/Documentation/UserManual/ProgrammingGuide.pdf index f2992f991ac07aca96be8f7c4f7ffe4cefc79274..7eff4fb23f80e18d2fcccf97c23597da08792b74 100644 GIT binary patch delta 50316 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 delta 49174 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 diff --git a/Documentation/UserManual/ProgrammingGuide.tex b/Documentation/UserManual/ProgrammingGuide.tex index 511fcfc..a3d502a 100644 --- a/Documentation/UserManual/ProgrammingGuide.tex +++ b/Documentation/UserManual/ProgrammingGuide.tex @@ -493,6 +493,16 @@ $$ S_{11}...S_{1n},S_{21}...S_{2n},...,S_{n1}...S_{nn} $$ \subsubsection{VNA:TRACe:PAUSED} \query{Queries whether a trace is paused}{VNA:TRACe:PAUSED?}{, either by name or by index}{TRUE or FALSE} +\subsubsection{VNA:TRACe:DEEMBedding:ACTive} +\event{Enables/disables de-embedding on a trace}{VNA:TRACe:DEEMBedding:ACTive}{, either by name or by index\\, either TRUE or FALSE} + +If no de-embedding is configured for the selected trace, enabling the de-embedding will fail. + +\query{Queries whether de-embedding is active for the selected trace}{VNA:TRACe:DEEMBedding:ACTive?}{, either by name or by index}{TRUE or FALSE} + +\subsubsection{VNA:TRACe:DEEMBedding:AVAILable} +\query{Queries whether de-embedding is available for the selected trace}{VNA:TRACe:DEEMBedding:AVAILable?}{, either by name or by index}{TRUE or FALSE} + \subsubsection{VNA:TRACe:PARAMeter} \event{Sets the measurement parameter that is stored in the trace}{VNA:TRACe:PARAMeter}{, either by name or by index\\, options are S11, S12, S21 or S22} \query{Queries the measurement parameter of a trace}{VNA:TRACe:PARAMeter?}{, either by name or by index}{S11, S12, S21 or S22} diff --git a/Software/PC_Application/LibreVNA-GUI/Traces/tracewidget.cpp b/Software/PC_Application/LibreVNA-GUI/Traces/tracewidget.cpp index 7ad90cc..e59dd31 100644 --- a/Software/PC_Application/LibreVNA-GUI/Traces/tracewidget.cpp +++ b/Software/PC_Application/LibreVNA-GUI/Traces/tracewidget.cpp @@ -208,7 +208,7 @@ void TraceWidget::SetupSCPI() add(new SCPICommand("DATA", nullptr, [=](QStringList params) -> QString { auto t = findTrace(params); if(!t) { - return "ERROR"; + return SCPI::getResultName(SCPI::Result::Error); } QString ret; if(t->size() > 0) { @@ -233,11 +233,11 @@ void TraceWidget::SetupSCPI() add(new SCPICommand("AT", nullptr, [=](QStringList params) -> QString { auto t = findTrace(params); if(!t) { - return "ERROR"; + return SCPI::getResultName(SCPI::Result::Error); } double x; if(!SCPI::paramToDouble(params, 1, x)) { - return "ERROR"; + return SCPI::getResultName(SCPI::Result::Error); } else { auto d = t->interpolatedSample(x); if(std::isnan(d.x)) { @@ -250,21 +250,21 @@ void TraceWidget::SetupSCPI() add(new SCPICommand("TOUCHSTONE", nullptr, [=](QStringList params) -> QString { if(params.size() < 1) { // no traces given - return "ERROR"; + return SCPI::getResultName(SCPI::Result::Error); } // check number of paramaters, must be a square number int numTraces = params.size(); int ports = round(sqrt(numTraces)); if(ports * ports != numTraces) { // invalid number of traces - return "ERROR"; + return SCPI::getResultName(SCPI::Result::Error); } Trace* traces[numTraces]; for(int i=0;igetDataType() != Trace::DataType::Frequency) { // invalid domain - return "ERROR"; + return SCPI::getResultName(SCPI::Result::Error); } if(t->isReflection() != need_reflection) { // invalid measurement at this position - return "ERROR"; + return SCPI::getResultName(SCPI::Result::Error); } if((t->size() != npoints) || (t->minX() != f_start) || (t->maxX() != f_stop)) { // frequency points are not identical - return "ERROR"; + return SCPI::getResultName(SCPI::Result::Error); } } } @@ -307,21 +307,21 @@ void TraceWidget::SetupSCPI() add(new SCPICommand("MAXFrequency", nullptr, [=](QStringList params) -> QString { auto t = findTrace(params); if(!t) { - return "ERROR"; + return SCPI::getResultName(SCPI::Result::Error); } return QString::number(t->maxX(), 'f', 0); })); add(new SCPICommand("MINFrequency", nullptr, [=](QStringList params) -> QString { auto t = findTrace(params); if(!t) { - return "ERROR"; + return SCPI::getResultName(SCPI::Result::Error); } return QString::number(t->minX(), 'f', 0); })); add(new SCPICommand("MAXAmplitude", nullptr, [=](QStringList params) -> QString { auto t = findTrace(params); if(!t) { - return "ERROR"; + return SCPI::getResultName(SCPI::Result::Error); } auto d = t->interpolatedSample(t->findExtremum(true)); return QString::number(d.x, 'f', 0)+","+createStringFromData(t, d); @@ -329,90 +329,125 @@ void TraceWidget::SetupSCPI() add(new SCPICommand("MINAmplitude", nullptr, [=](QStringList params) -> QString { auto t = findTrace(params); if(!t) { - return "ERROR"; + return SCPI::getResultName(SCPI::Result::Error); } auto d = t->interpolatedSample(t->findExtremum(false)); return QString::number(d.x, 'f', 0)+","+createStringFromData(t, d); })); add(new SCPICommand("NEW", [=](QStringList params) -> QString { if(params.size() != 1) { - return "ERROR"; + return SCPI::getResultName(SCPI::Result::Error); } createCount++; auto t = new Trace(params[0], Qt::darkYellow, defaultParameter()); t->setColor(QColor::fromHsl((createCount * 50) % 360, 250, 128)); model.addTrace(t); - return ""; + return SCPI::getResultName(SCPI::Result::Empty); }, nullptr)); add(new SCPICommand("RENAME", [=](QStringList params) -> QString { auto t = findTrace(params); if(!t) { - return "ERROR"; + return SCPI::getResultName(SCPI::Result::Error); } if(params.size() != 2) { - return "ERROR"; + return SCPI::getResultName(SCPI::Result::Error); } t->setName(params[1]); - return ""; + return SCPI::getResultName(SCPI::Result::Empty); }, nullptr)); add(new SCPICommand("PAUSE", [=](QStringList params) -> QString { auto t = findTrace(params); if(!t) { - return "ERROR"; + return SCPI::getResultName(SCPI::Result::Error); } t->pause(); - return ""; + return SCPI::getResultName(SCPI::Result::Empty); }, nullptr)); add(new SCPICommand("RESUME", [=](QStringList params) -> QString { auto t = findTrace(params); - if(!t) { return "ERROR"; + if(!t) { + return SCPI::getResultName(SCPI::Result::Error); } t->resume(); - return ""; + return SCPI::getResultName(SCPI::Result::Empty); }, nullptr)); add(new SCPICommand("PAUSED", nullptr, [=](QStringList params) -> QString { auto t = findTrace(params); if(!t) { - return "ERROR"; + return SCPI::getResultName(SCPI::Result::Error); } - return t->isPaused() ? "TRUE" : "FALSE"; + return t->isPaused() ? SCPI::getResultName(SCPI::Result::True) : SCPI::getResultName(SCPI::Result::False); })); + auto deembed = new SCPINode("DEEMBedding"); + deembed->add(new SCPICommand("ACTive", [=](QStringList params) -> QString { + Trace* t = findTrace(params); + if(!t) { + return SCPI::getResultName(SCPI::Result::Error); + } + bool activate = false; + if(!SCPI::paramToBool(params, 1, activate)) { + return SCPI::getResultName(SCPI::Result::Error); + } + if(activate) { + if(!t->deembeddingAvailable()) { + return SCPI::getResultName(SCPI::Result::Error); + } + t->setDeembeddingActive(true); + } else { + t->setDeembeddingActive(false); + } + return SCPI::getResultName(SCPI::Result::Empty); + }, [=](QStringList params) -> QString { + Trace* t = findTrace(params); + if(!t) { + return SCPI::getResultName(SCPI::Result::Error); + } + return t->isDeembeddingActive() ? SCPI::getResultName(SCPI::Result::True) : SCPI::getResultName(SCPI::Result::False); + })); + deembed->add(new SCPICommand("AVAILable", nullptr, [=](QStringList params) -> QString { + Trace* t = findTrace(params); + if(!t) { + return SCPI::getResultName(SCPI::Result::Error); + } + return t->deembeddingAvailable() ? SCPI::getResultName(SCPI::Result::True) : SCPI::getResultName(SCPI::Result::False); + })); + add(deembed); add(new SCPICommand("PARAMeter", [=](QStringList params) -> QString { auto t = findTrace(params); if(!t || params.size() < 2) { - return "ERROR"; + return SCPI::getResultName(SCPI::Result::Error); } auto newparam = params[1]; if((Trace::isVNAParameter(t->liveParameter()) && Trace::isVNAParameter(newparam)) || (Trace::isSAParameter(t->liveParameter()) && Trace::isSAParameter(newparam))) { t->fromLivedata(t->liveType(), newparam); - return ""; + return SCPI::getResultName(SCPI::Result::Empty); } else { - return "ERROR"; + return SCPI::getResultName(SCPI::Result::Error); } }, [=](QStringList params) -> QString { auto t = findTrace(params); if(!t) { - return "ERROR"; + return SCPI::getResultName(SCPI::Result::Error); } return t->liveParameter(); })); add(new SCPICommand("TYPE", [=](QStringList params) -> QString { auto t = findTrace(params); if(!t || params.size() < 2) { - return "ERROR"; + return SCPI::getResultName(SCPI::Result::Error); } auto newtype = Trace::TypeFromString(params[1]); if(newtype != Trace::LivedataType::Invalid) { t->fromLivedata(newtype, t->liveParameter()); - return ""; + return SCPI::getResultName(SCPI::Result::Empty); } else { - return "ERROR"; + return SCPI::getResultName(SCPI::Result::Error); } }, [=](QStringList params) -> QString { auto t = findTrace(params); if(!t) { - return "ERROR"; + return SCPI::getResultName(SCPI::Result::Error); } return Trace::TypeToString(t->liveType()); })); diff --git a/Software/PC_Application/LibreVNA-GUI/VNA/Deembedding/deembedding.cpp b/Software/PC_Application/LibreVNA-GUI/VNA/Deembedding/deembedding.cpp index 7ac3f2d..d3133db 100644 --- a/Software/PC_Application/LibreVNA-GUI/VNA/Deembedding/deembedding.cpp +++ b/Software/PC_Application/LibreVNA-GUI/VNA/Deembedding/deembedding.cpp @@ -69,15 +69,55 @@ void Deembedding::startMeasurementDialog(DeembeddingOption *option) } } +void Deembedding::updateSCPINames() +{ + // Need to remove all options from the subnode list first, otherwise + // name changes wouldn't work due to temporarily name collisions + for(auto &option : options) { + remove(option); + } + unsigned int i=1; + for(auto &option : options) { + option->changeName(QString::number(i)); + add(option); + } +} + Deembedding::Deembedding(TraceModel &tm) - : measuringOption(nullptr), + : SCPINode("DEEMBedding"), + measuringOption(nullptr), tm(tm), measuring(false), measurementDialog(nullptr), measurementUI(nullptr), sweepPoints(0) { - + add(new SCPICommand("NUMber", nullptr, [=](QStringList params) -> QString { + Q_UNUSED(params); + return QString::number(options.size()); + })); + add(new SCPICommand("TYPE", nullptr, [=](QStringList params) -> QString { + unsigned long long index; + if(!SCPI::paramToULongLong(params, 0, index)) { + return SCPI::getResultName(SCPI::Result::Error); + } + if(index < 1 || index > options.size()) { + return SCPI::getResultName(SCPI::Result::Error); + } + return DeembeddingOption::TypeToString(options[index]->getType()); + })); + add(new SCPICommand("NEW", [=](QStringList params) -> QString { + if(params.size() < 1) { + return SCPI::getResultName(SCPI::Result::Error); + } + auto type = DeembeddingOption::TypeFromString(params[0]); + if(type == DeembeddingOption::Type::Last) { + return SCPI::getResultName(SCPI::Result::Error); + } + auto option = DeembeddingOption::create(type); + addOption(option); + return SCPI::getResultName(SCPI::Result::Empty); + }, nullptr)); } void Deembedding::Deembed(VirtualDevice::VNAMeasurement &d) @@ -137,6 +177,7 @@ void Deembedding::removeOption(unsigned int index) delete options[index]; options.erase(options.begin() + index); } + updateSCPINames(); if(options.size() == 0) { emit allOptionsCleared(); } @@ -156,6 +197,7 @@ void Deembedding::addOption(DeembeddingOption *option) measuringOption = option; startMeasurementDialog(option); }); + updateSCPINames(); emit optionAdded(); } @@ -165,6 +207,7 @@ void Deembedding::swapOptions(unsigned int index) return; } std::swap(options[index], options[index+1]); + updateSCPINames(); } std::set Deembedding::getAffectedPorts() @@ -182,7 +225,7 @@ nlohmann::json Deembedding::toJSON() nlohmann::json list; for(auto m : options) { nlohmann::json jm; - jm["operation"] = DeembeddingOption::getName(m->getType()).toStdString(); + jm["operation"] = DeembeddingOption::TypeToString(m->getType()).toStdString(); jm["settings"] = m->toJSON(); list.push_back(jm); } @@ -204,7 +247,7 @@ void Deembedding::fromJSON(nlohmann::json j) // attempt to find the type of operation DeembeddingOption::Type type = DeembeddingOption::Type::Last; for(unsigned int i=0;i<(int) DeembeddingOption::Type::Last;i++) { - if(DeembeddingOption::getName((DeembeddingOption::Type) i) == operation) { + if(DeembeddingOption::TypeToString((DeembeddingOption::Type) i) == operation) { // found the correct operation type = (DeembeddingOption::Type) i; break; diff --git a/Software/PC_Application/LibreVNA-GUI/VNA/Deembedding/deembedding.h b/Software/PC_Application/LibreVNA-GUI/VNA/Deembedding/deembedding.h index 85eb0af..4d1ab0c 100644 --- a/Software/PC_Application/LibreVNA-GUI/VNA/Deembedding/deembedding.h +++ b/Software/PC_Application/LibreVNA-GUI/VNA/Deembedding/deembedding.h @@ -4,6 +4,7 @@ #include "deembeddingoption.h" #include "savable.h" #include "Traces/tracemodel.h" +#include "scpi.h" #include #include @@ -14,7 +15,7 @@ class Ui_DeembeddingMeasurementDialog; -class Deembedding : public QObject, public Savable +class Deembedding : public QObject, public Savable, public SCPINode { Q_OBJECT public: @@ -42,6 +43,7 @@ signals: private: void measurementCompleted(); void startMeasurementDialog(DeembeddingOption *option); + void updateSCPINames(); std::vector options; DeembeddingOption *measuringOption; TraceModel &tm; diff --git a/Software/PC_Application/LibreVNA-GUI/VNA/Deembedding/deembeddingdialog.cpp b/Software/PC_Application/LibreVNA-GUI/VNA/Deembedding/deembeddingdialog.cpp index b296c96..1eb5a7d 100644 --- a/Software/PC_Application/LibreVNA-GUI/VNA/Deembedding/deembeddingdialog.cpp +++ b/Software/PC_Application/LibreVNA-GUI/VNA/Deembedding/deembeddingdialog.cpp @@ -15,7 +15,7 @@ DeembeddingDialog::DeembeddingDialog(Deembedding *d, QWidget *parent) : auto addMenu = new QMenu(); for(unsigned int i=0;i<(unsigned int)DeembeddingOption::Type::Last;i++) { auto type = (DeembeddingOption::Type) i; - auto action = new QAction(DeembeddingOption::getName(type)); + auto action = new QAction(DeembeddingOption::TypeToString(type)); connect(action, &QAction::triggered, [=](){ auto option = DeembeddingOption::create(type); model.addOption(option); @@ -86,7 +86,7 @@ QVariant OptionModel::data(const QModelIndex &index, int role) const { if(index.isValid() && role == Qt::DisplayRole) { auto type = d->getOptions()[index.row()]->getType(); - return DeembeddingOption::getName(type); + return DeembeddingOption::TypeToString(type); } else { return QVariant(); } diff --git a/Software/PC_Application/LibreVNA-GUI/VNA/Deembedding/deembeddingoption.cpp b/Software/PC_Application/LibreVNA-GUI/VNA/Deembedding/deembeddingoption.cpp index 1e17300..ade07fe 100644 --- a/Software/PC_Application/LibreVNA-GUI/VNA/Deembedding/deembeddingoption.cpp +++ b/Software/PC_Application/LibreVNA-GUI/VNA/Deembedding/deembeddingoption.cpp @@ -21,7 +21,7 @@ DeembeddingOption *DeembeddingOption::create(DeembeddingOption::Type type) } } -QString DeembeddingOption::getName(DeembeddingOption::Type type) +QString DeembeddingOption::TypeToString(DeembeddingOption::Type type) { switch(type) { case Type::PortExtension: @@ -36,3 +36,13 @@ QString DeembeddingOption::getName(DeembeddingOption::Type type) return ""; } } + +DeembeddingOption::Type DeembeddingOption::TypeFromString(QString string) +{ + for(unsigned int i=0;i<(int) Type::Last;i++) { + if(TypeToString((Type) i) == string) { + return (Type) i; + } + } + return Type::Last; +} diff --git a/Software/PC_Application/LibreVNA-GUI/VNA/Deembedding/deembeddingoption.h b/Software/PC_Application/LibreVNA-GUI/VNA/Deembedding/deembeddingoption.h index b72560c..5c10637 100644 --- a/Software/PC_Application/LibreVNA-GUI/VNA/Deembedding/deembeddingoption.h +++ b/Software/PC_Application/LibreVNA-GUI/VNA/Deembedding/deembeddingoption.h @@ -4,10 +4,11 @@ #include "savable.h" #include "Device/device.h" #include "Traces/tracemodel.h" +#include "scpi.h" #include -class DeembeddingOption : public QObject, public Savable +class DeembeddingOption : public QObject, public Savable, public SCPINode { Q_OBJECT public: @@ -21,7 +22,8 @@ public: }; static DeembeddingOption *create(Type type); - static QString getName(Type type); + static QString TypeToString(Type type); + static Type TypeFromString(QString string); virtual std::set getAffectedPorts() = 0; virtual void transformDatapoint(VirtualDevice::VNAMeasurement &p) = 0; @@ -35,6 +37,10 @@ signals: void deleted(DeembeddingOption *option); void triggerMeasurement(); + +protected: + DeembeddingOption(QString SCPIname) + : SCPINode(SCPIname){} }; #endif // DEEMBEDDING_H diff --git a/Software/PC_Application/LibreVNA-GUI/VNA/Deembedding/impedancerenormalization.cpp b/Software/PC_Application/LibreVNA-GUI/VNA/Deembedding/impedancerenormalization.cpp index fd1237d..d63253a 100644 --- a/Software/PC_Application/LibreVNA-GUI/VNA/Deembedding/impedancerenormalization.cpp +++ b/Software/PC_Application/LibreVNA-GUI/VNA/Deembedding/impedancerenormalization.cpp @@ -9,10 +9,20 @@ using namespace std; ImpedanceRenormalization::ImpedanceRenormalization() - : DeembeddingOption(), + : DeembeddingOption("ZNORMalization"), impedance(50.0) { - + add(new SCPICommand("IMPedance", [=](QStringList params) -> QString { + double new_value; + if(!SCPI::paramToDouble(params, 0, new_value)) { + return SCPI::getResultName(SCPI::Result::Error); + } + impedance = new_value; + return SCPI::getResultName(SCPI::Result::Empty); + }, [=](QStringList params) -> QString { + Q_UNUSED(params); + return QString::number(impedance); + })); } std::set ImpedanceRenormalization::getAffectedPorts() diff --git a/Software/PC_Application/LibreVNA-GUI/VNA/Deembedding/matchingnetwork.cpp b/Software/PC_Application/LibreVNA-GUI/VNA/Deembedding/matchingnetwork.cpp index 61ebec3..f996d9a 100644 --- a/Software/PC_Application/LibreVNA-GUI/VNA/Deembedding/matchingnetwork.cpp +++ b/Software/PC_Application/LibreVNA-GUI/VNA/Deembedding/matchingnetwork.cpp @@ -20,6 +20,7 @@ using namespace std; MatchingNetwork::MatchingNetwork() + : DeembeddingOption("MATCHing") { dropPending = false; dragComponent = nullptr; @@ -268,7 +269,7 @@ void MatchingNetwork::addComponent(int index, MatchingComponent *c) matching.clear(); // remove from list when the component deletes itself connect(c, &MatchingComponent::deleted, [=](){ - network.erase(remove(network.begin(), network.end(), c), network.end()); + network.erase(std::remove(network.begin(), network.end(), c), network.end()); matching.clear(); }); } @@ -325,7 +326,7 @@ bool MatchingNetwork::eventFilter(QObject *object, QEvent *event) // remove and hide component while it is being dragged graph->layout()->removeWidget(dragComponent); dragComponent->hide(); - network.erase(remove(network.begin(), network.end(), dragComponent), network.end()); + network.erase(std::remove(network.begin(), network.end(), dragComponent), network.end()); graph->update(); // network changed, need to recalculate matching diff --git a/Software/PC_Application/LibreVNA-GUI/VNA/Deembedding/portextension.cpp b/Software/PC_Application/LibreVNA-GUI/VNA/Deembedding/portextension.cpp index 816f41e..078f363 100644 --- a/Software/PC_Application/LibreVNA-GUI/VNA/Deembedding/portextension.cpp +++ b/Software/PC_Application/LibreVNA-GUI/VNA/Deembedding/portextension.cpp @@ -11,7 +11,7 @@ using namespace std; PortExtension::PortExtension() - : DeembeddingOption() + : DeembeddingOption("PORTEXTension") { ext.frequency = 0; ext.loss = 0; @@ -25,6 +25,12 @@ PortExtension::PortExtension() kit = nullptr; ui = nullptr; + + addUnsignedIntParameter("PORT", port); + addDoubleParameter("DELAY", ext.delay); + addDoubleParameter("DCLOSS", ext.DCloss); + addDoubleParameter("LOSS", ext.loss); + addDoubleParameter("FREQuency", ext.frequency); } std::set PortExtension::getAffectedPorts() diff --git a/Software/PC_Application/LibreVNA-GUI/VNA/Deembedding/twothru.cpp b/Software/PC_Application/LibreVNA-GUI/VNA/Deembedding/twothru.cpp index b3e4a22..729ae5d 100644 --- a/Software/PC_Application/LibreVNA-GUI/VNA/Deembedding/twothru.cpp +++ b/Software/PC_Application/LibreVNA-GUI/VNA/Deembedding/twothru.cpp @@ -11,6 +11,7 @@ using namespace std; TwoThru::TwoThru() + : DeembeddingOption("TWOTHRU") { Z0 = 50.0; port1 = 1; diff --git a/Software/PC_Application/LibreVNA-GUI/VNA/vna.cpp b/Software/PC_Application/LibreVNA-GUI/VNA/vna.cpp index 8d9af79..c597722 100644 --- a/Software/PC_Application/LibreVNA-GUI/VNA/vna.cpp +++ b/Software/PC_Application/LibreVNA-GUI/VNA/vna.cpp @@ -1411,6 +1411,8 @@ void VNA::SetupSCPI() cal.add(new SCPICommand("BUSy", nullptr, [=](QStringList) -> QString { return CalibrationMeasurementActive() ? SCPI::getResultName(SCPI::Result::True) : SCPI::getResultName(SCPI::Result::False); })); + + SCPINode::add(&deembedding); } void VNA::ConstrainAndUpdateFrequencies() diff --git a/Software/PC_Application/LibreVNA-GUI/scpi.cpp b/Software/PC_Application/LibreVNA-GUI/scpi.cpp index a81fe99..5a00147 100644 --- a/Software/PC_Application/LibreVNA-GUI/scpi.cpp +++ b/Software/PC_Application/LibreVNA-GUI/scpi.cpp @@ -160,6 +160,54 @@ bool SCPINode::add(SCPICommand *cmd) return true; } +bool SCPINode::addDoubleParameter(QString name, double ¶m, bool gettable, bool settable) +{ + auto cmd = settable ? [&](QStringList params) -> QString { + if(SCPI::paramToDouble(params, 0, param)) { + return SCPI::getResultName(SCPI::Result::Empty); + } else { + return SCPI::getResultName(SCPI::Result::Error); + } + } : (std::function) nullptr; + auto query = settable ? [=](QStringList params) -> QString { + Q_UNUSED(params) + return QString::number(param); + } : (std::function) nullptr; + return add(new SCPICommand(name, cmd, query)); +} + +bool SCPINode::addUnsignedIntParameter(QString name, unsigned int ¶m, bool gettable, bool settable) +{ + auto cmd = settable ? [&](QStringList params) -> QString { + unsigned long long value; + if(SCPI::paramToULongLong(params, 0, value)) { + param = value; + return SCPI::getResultName(SCPI::Result::Empty); + } else { + return SCPI::getResultName(SCPI::Result::Error); + } + } : (std::function) nullptr; + auto query = settable ? [=](QStringList params) -> QString { + Q_UNUSED(params) + return QString::number(param); + } : (std::function) nullptr; + return add(new SCPICommand(name, cmd, query)); +} + +bool SCPINode::changeName(QString newname) +{ + if(newname == name) { + return true; + } + if(parent) { + if(parent->nameCollision(newname)) { + // new name would result in a collision + return false; + } + } + name = newname; +} + bool SCPINode::nameCollision(QString name) { for(auto n : subnodes) { diff --git a/Software/PC_Application/LibreVNA-GUI/scpi.h b/Software/PC_Application/LibreVNA-GUI/scpi.h index 3c15538..85d751e 100644 --- a/Software/PC_Application/LibreVNA-GUI/scpi.h +++ b/Software/PC_Application/LibreVNA-GUI/scpi.h @@ -35,11 +35,16 @@ public: bool remove(SCPINode *node); bool add(SCPICommand *cmd); + bool addDoubleParameter(QString name, double ¶m, bool gettable = true, bool settable = true); + bool addUnsignedIntParameter(QString name, unsigned int ¶m, bool gettable = true, bool settable = true); + + bool changeName(QString newname); + private: QString parse(QString cmd, SCPINode* &lastNode); bool nameCollision(QString name); void createCommandList(QString prefix, QString &list); - const QString name; + QString name; std::vector subnodes; std::vector commands; SCPINode *parent;