WIP: additional SCPI commands for de-embedding
This commit is contained in:
parent
a0476d1bf2
commit
e6678435bd
@ -80,6 +80,7 @@ void Deembedding::updateSCPINames()
|
|||||||
for(auto &option : options) {
|
for(auto &option : options) {
|
||||||
option->changeName(QString::number(i));
|
option->changeName(QString::number(i));
|
||||||
add(option);
|
add(option);
|
||||||
|
i++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -104,13 +105,13 @@ Deembedding::Deembedding(TraceModel &tm)
|
|||||||
if(index < 1 || index > options.size()) {
|
if(index < 1 || index > options.size()) {
|
||||||
return SCPI::getResultName(SCPI::Result::Error);
|
return SCPI::getResultName(SCPI::Result::Error);
|
||||||
}
|
}
|
||||||
return DeembeddingOption::TypeToString(options[index]->getType());
|
return DeembeddingOption::TypeToString(options[index-1]->getType()).replace(" ", "_");
|
||||||
}));
|
}));
|
||||||
add(new SCPICommand("NEW", [=](QStringList params) -> QString {
|
add(new SCPICommand("NEW", [=](QStringList params) -> QString {
|
||||||
if(params.size() < 1) {
|
if(params.size() < 1) {
|
||||||
return SCPI::getResultName(SCPI::Result::Error);
|
return SCPI::getResultName(SCPI::Result::Error);
|
||||||
}
|
}
|
||||||
auto type = DeembeddingOption::TypeFromString(params[0]);
|
auto type = DeembeddingOption::TypeFromString(params[0].replace("_", " "));
|
||||||
if(type == DeembeddingOption::Type::Last) {
|
if(type == DeembeddingOption::Type::Last) {
|
||||||
return SCPI::getResultName(SCPI::Result::Error);
|
return SCPI::getResultName(SCPI::Result::Error);
|
||||||
}
|
}
|
||||||
@ -118,6 +119,11 @@ Deembedding::Deembedding(TraceModel &tm)
|
|||||||
addOption(option);
|
addOption(option);
|
||||||
return SCPI::getResultName(SCPI::Result::Empty);
|
return SCPI::getResultName(SCPI::Result::Empty);
|
||||||
}, nullptr));
|
}, nullptr));
|
||||||
|
add(new SCPICommand("CLEAR", [=](QStringList params) -> QString {
|
||||||
|
Q_UNUSED(params);
|
||||||
|
clear();
|
||||||
|
return SCPI::getResultName(SCPI::Result::Empty);
|
||||||
|
}, nullptr));
|
||||||
}
|
}
|
||||||
|
|
||||||
void Deembedding::Deembed(VirtualDevice::VNAMeasurement &d)
|
void Deembedding::Deembed(VirtualDevice::VNAMeasurement &d)
|
||||||
@ -210,6 +216,13 @@ void Deembedding::swapOptions(unsigned int index)
|
|||||||
updateSCPINames();
|
updateSCPINames();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Deembedding::clear()
|
||||||
|
{
|
||||||
|
while(options.size() > 0) {
|
||||||
|
removeOption(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
std::set<unsigned int> Deembedding::getAffectedPorts()
|
std::set<unsigned int> Deembedding::getAffectedPorts()
|
||||||
{
|
{
|
||||||
set<unsigned int> ret;
|
set<unsigned int> ret;
|
||||||
|
@ -28,6 +28,7 @@ public:
|
|||||||
void removeOption(unsigned int index);
|
void removeOption(unsigned int index);
|
||||||
void addOption(DeembeddingOption* option);
|
void addOption(DeembeddingOption* option);
|
||||||
void swapOptions(unsigned int index);
|
void swapOptions(unsigned int index);
|
||||||
|
void clear();
|
||||||
|
|
||||||
std::set<unsigned int> getAffectedPorts();
|
std::set<unsigned int> getAffectedPorts();
|
||||||
|
|
||||||
|
@ -40,7 +40,7 @@ QString DeembeddingOption::TypeToString(DeembeddingOption::Type type)
|
|||||||
DeembeddingOption::Type DeembeddingOption::TypeFromString(QString string)
|
DeembeddingOption::Type DeembeddingOption::TypeFromString(QString string)
|
||||||
{
|
{
|
||||||
for(unsigned int i=0;i<(int) Type::Last;i++) {
|
for(unsigned int i=0;i<(int) Type::Last;i++) {
|
||||||
if(TypeToString((Type) i) == string) {
|
if(TypeToString((Type) i).compare(string, Qt::CaseInsensitive) == 0) {
|
||||||
return (Type) i;
|
return (Type) i;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -27,6 +27,50 @@ MatchingNetwork::MatchingNetwork()
|
|||||||
dropComponent = nullptr;
|
dropComponent = nullptr;
|
||||||
addNetwork = true;
|
addNetwork = true;
|
||||||
port = 1;
|
port = 1;
|
||||||
|
|
||||||
|
graph = nullptr;
|
||||||
|
insertIndicator = nullptr;
|
||||||
|
|
||||||
|
addUnsignedIntParameter("PORT", port);
|
||||||
|
addBoolParameter("ADD", addNetwork);
|
||||||
|
add(new SCPICommand("CLEAR", [=](QStringList params) -> QString {
|
||||||
|
Q_UNUSED(params);
|
||||||
|
clearNetwork();
|
||||||
|
return SCPI::getResultName(SCPI::Result::Empty);
|
||||||
|
}, nullptr));
|
||||||
|
add(new SCPICommand("NUMber", nullptr, [=](QStringList params) -> QString {
|
||||||
|
Q_UNUSED(params);
|
||||||
|
return QString::number(network.size());
|
||||||
|
}));
|
||||||
|
add(new SCPICommand("NEW", [=](QStringList params) -> QString {
|
||||||
|
if(params.size() < 1) {
|
||||||
|
return SCPI::getResultName(SCPI::Result::Error);
|
||||||
|
}
|
||||||
|
auto c = MatchingComponent::createFromName(params[0].replace("_", " "));
|
||||||
|
if(!c) {
|
||||||
|
return SCPI::getResultName(SCPI::Result::Error);
|
||||||
|
}
|
||||||
|
unsigned long long index = network.size();
|
||||||
|
// parse index (unchanged if not provided)
|
||||||
|
SCPI::paramToULongLong(params, 1, index);
|
||||||
|
addComponent(index, c);
|
||||||
|
return SCPI::getResultName(SCPI::Result::Empty);
|
||||||
|
}, nullptr));
|
||||||
|
add(new SCPICommand("TYPE", nullptr, [=](QStringList params) -> QString {
|
||||||
|
unsigned long long index = 0;
|
||||||
|
if(!SCPI::paramToULongLong(params, 0, index)) {
|
||||||
|
return SCPI::getResultName(SCPI::Result::Error);
|
||||||
|
}
|
||||||
|
if(index < 1 || index > network.size()) {
|
||||||
|
return SCPI::getResultName(SCPI::Result::Error);
|
||||||
|
}
|
||||||
|
return network[index-1]->getName().replace(" ", "_");
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
|
MatchingNetwork::~MatchingNetwork()
|
||||||
|
{
|
||||||
|
clearNetwork();
|
||||||
}
|
}
|
||||||
|
|
||||||
std::set<unsigned int> MatchingNetwork::getAffectedPorts()
|
std::set<unsigned int> MatchingNetwork::getAffectedPorts()
|
||||||
@ -179,7 +223,10 @@ void MatchingNetwork::edit()
|
|||||||
connect(ui->port, qOverload<int>(&QSpinBox::valueChanged), [=](){
|
connect(ui->port, qOverload<int>(&QSpinBox::valueChanged), [=](){
|
||||||
port = ui->port->value();
|
port = ui->port->value();
|
||||||
});
|
});
|
||||||
connect(ui->buttonBox, &QDialogButtonBox::accepted, dialog, &QDialog::accept);
|
connect(ui->buttonBox, &QDialogButtonBox::accepted, [=](){
|
||||||
|
graph = nullptr;
|
||||||
|
dialog->accept();
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
nlohmann::json MatchingNetwork::toJSON()
|
nlohmann::json MatchingNetwork::toJSON()
|
||||||
@ -200,7 +247,7 @@ nlohmann::json MatchingNetwork::toJSON()
|
|||||||
|
|
||||||
void MatchingNetwork::fromJSON(nlohmann::json j)
|
void MatchingNetwork::fromJSON(nlohmann::json j)
|
||||||
{
|
{
|
||||||
network.clear();
|
clearNetwork();
|
||||||
port = j.value("port", 1);
|
port = j.value("port", 1);
|
||||||
if(j.contains("network")) {
|
if(j.contains("network")) {
|
||||||
for(auto jc : j["network"]) {
|
for(auto jc : j["network"]) {
|
||||||
@ -219,6 +266,15 @@ void MatchingNetwork::fromJSON(nlohmann::json j)
|
|||||||
matching.clear();
|
matching.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MatchingNetwork::clearNetwork()
|
||||||
|
{
|
||||||
|
while(network.size() > 0) {
|
||||||
|
auto c = network[0];
|
||||||
|
removeComponent(c);
|
||||||
|
delete c;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
MatchingComponent *MatchingNetwork::componentAtPosition(int pos)
|
MatchingComponent *MatchingNetwork::componentAtPosition(int pos)
|
||||||
{
|
{
|
||||||
pos -= graph->layout()->itemAt(0)->geometry().width();
|
pos -= graph->layout()->itemAt(0)->geometry().width();
|
||||||
@ -266,12 +322,35 @@ void MatchingNetwork::addComponentAtPosition(int pos, MatchingComponent *c)
|
|||||||
void MatchingNetwork::addComponent(int index, MatchingComponent *c)
|
void MatchingNetwork::addComponent(int index, MatchingComponent *c)
|
||||||
{
|
{
|
||||||
network.insert(network.begin() + index, c);
|
network.insert(network.begin() + index, c);
|
||||||
|
updateSCPINames();
|
||||||
|
if(graph) {
|
||||||
|
graph->update();
|
||||||
|
}
|
||||||
matching.clear();
|
matching.clear();
|
||||||
// remove from list when the component deletes itself
|
// remove from list when the component deletes itself
|
||||||
connect(c, &MatchingComponent::deleted, [=](){
|
connect(c, &MatchingComponent::deleted, [=](){
|
||||||
|
removeComponent(c);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
void MatchingNetwork::removeComponent(int index)
|
||||||
|
{
|
||||||
|
network.erase(network.begin() + index);
|
||||||
|
matching.clear();
|
||||||
|
updateSCPINames();
|
||||||
|
if(graph) {
|
||||||
|
graph->update();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void MatchingNetwork::removeComponent(MatchingComponent *c)
|
||||||
|
{
|
||||||
network.erase(std::remove(network.begin(), network.end(), c), network.end());
|
network.erase(std::remove(network.begin(), network.end(), c), network.end());
|
||||||
matching.clear();
|
matching.clear();
|
||||||
});
|
updateSCPINames();
|
||||||
|
if(graph) {
|
||||||
|
graph->update();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void MatchingNetwork::createDragComponent(MatchingComponent *c)
|
void MatchingNetwork::createDragComponent(MatchingComponent *c)
|
||||||
@ -326,7 +405,7 @@ bool MatchingNetwork::eventFilter(QObject *object, QEvent *event)
|
|||||||
// remove and hide component while it is being dragged
|
// remove and hide component while it is being dragged
|
||||||
graph->layout()->removeWidget(dragComponent);
|
graph->layout()->removeWidget(dragComponent);
|
||||||
dragComponent->hide();
|
dragComponent->hide();
|
||||||
network.erase(std::remove(network.begin(), network.end(), dragComponent), network.end());
|
removeComponent(dragComponent);
|
||||||
graph->update();
|
graph->update();
|
||||||
|
|
||||||
// network changed, need to recalculate matching
|
// network changed, need to recalculate matching
|
||||||
@ -414,7 +493,23 @@ bool MatchingNetwork::eventFilter(QObject *object, QEvent *event)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MatchingNetwork::updateSCPINames()
|
||||||
|
{
|
||||||
|
// Need to remove all components from the subnode list first, otherwise
|
||||||
|
// name changes wouldn't work due to temporarily name collisions
|
||||||
|
for(auto &c : network) {
|
||||||
|
remove(c);
|
||||||
|
}
|
||||||
|
unsigned int i=1;
|
||||||
|
for(auto &c : network) {
|
||||||
|
c->changeName(QString::number(i));
|
||||||
|
add(c);
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
MatchingComponent::MatchingComponent(Type type)
|
MatchingComponent::MatchingComponent(Type type)
|
||||||
|
: SCPINode("COMPONENT")
|
||||||
{
|
{
|
||||||
this->type = type;
|
this->type = type;
|
||||||
eValue = nullptr;
|
eValue = nullptr;
|
||||||
@ -431,7 +526,10 @@ MatchingComponent::MatchingComponent(Type type)
|
|||||||
eValue = new SIUnitEdit();
|
eValue = new SIUnitEdit();
|
||||||
eValue->setPrecision(4);
|
eValue->setPrecision(4);
|
||||||
eValue->setPrefixes("fpnum k");
|
eValue->setPrefixes("fpnum k");
|
||||||
connect(eValue, &SIUnitEdit::valueChanged, this, &MatchingComponent::valueChanged);
|
connect(eValue, &SIUnitEdit::valueChanged, [=](double newval) {
|
||||||
|
value = newval;
|
||||||
|
emit valueChanged();
|
||||||
|
});
|
||||||
auto layout = new QVBoxLayout();
|
auto layout = new QVBoxLayout();
|
||||||
layout->addWidget(eValue);
|
layout->addWidget(eValue);
|
||||||
setLayout(layout);
|
setLayout(layout);
|
||||||
@ -443,7 +541,10 @@ MatchingComponent::MatchingComponent(Type type)
|
|||||||
eValue = new SIUnitEdit();
|
eValue = new SIUnitEdit();
|
||||||
eValue->setPrecision(4);
|
eValue->setPrecision(4);
|
||||||
eValue->setPrefixes("fpnum k");
|
eValue->setPrefixes("fpnum k");
|
||||||
connect(eValue, &SIUnitEdit::valueChanged, this, &MatchingComponent::valueChanged);
|
connect(eValue, &SIUnitEdit::valueChanged, [=](double newval) {
|
||||||
|
value = newval;
|
||||||
|
emit valueChanged();
|
||||||
|
});
|
||||||
auto layout = new QVBoxLayout();
|
auto layout = new QVBoxLayout();
|
||||||
layout->addWidget(eValue);
|
layout->addWidget(eValue);
|
||||||
layout->addStretch(1);
|
layout->addStretch(1);
|
||||||
@ -513,6 +614,37 @@ MatchingComponent::MatchingComponent(Type type)
|
|||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
switch(type) {
|
||||||
|
case Type::SeriesR:
|
||||||
|
case Type::SeriesL:
|
||||||
|
case Type::SeriesC:
|
||||||
|
case Type::ParallelR:
|
||||||
|
case Type::ParallelL:
|
||||||
|
case Type::ParallelC:
|
||||||
|
addDoubleParameter("VALue", value, true, true, [=](){
|
||||||
|
eValue->setValue(value);
|
||||||
|
});
|
||||||
|
break;
|
||||||
|
case Type::DefinedThrough:
|
||||||
|
case Type::DefinedShunt:
|
||||||
|
add(new SCPICommand("FILE", [=](QStringList params) -> QString {
|
||||||
|
if(params.size() < 1) {
|
||||||
|
return SCPI::getResultName(SCPI::Result::Error);
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
*touchstone = Touchstone::fromFile(params[0].toStdString());
|
||||||
|
updateTouchstoneLabel();
|
||||||
|
emit valueChanged();
|
||||||
|
return SCPI::getResultName(SCPI::Result::Empty);
|
||||||
|
} catch(const std::exception& e) {
|
||||||
|
// failed to load file
|
||||||
|
return SCPI::getResultName(SCPI::Result::Error);
|
||||||
|
}
|
||||||
|
}, nullptr));
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
MatchingComponent::~MatchingComponent()
|
MatchingComponent::~MatchingComponent()
|
||||||
@ -562,6 +694,7 @@ ABCDparam MatchingComponent::parameters(double freq)
|
|||||||
|
|
||||||
void MatchingComponent::MatchingComponent::setValue(double v)
|
void MatchingComponent::MatchingComponent::setValue(double v)
|
||||||
{
|
{
|
||||||
|
value = v;
|
||||||
if(eValue) {
|
if(eValue) {
|
||||||
eValue->setValue(v);
|
eValue->setValue(v);
|
||||||
}
|
}
|
||||||
@ -570,7 +703,7 @@ void MatchingComponent::MatchingComponent::setValue(double v)
|
|||||||
MatchingComponent *MatchingComponent::createFromName(QString name)
|
MatchingComponent *MatchingComponent::createFromName(QString name)
|
||||||
{
|
{
|
||||||
for(unsigned int i=0;i<(int) Type::Last;i++) {
|
for(unsigned int i=0;i<(int) Type::Last;i++) {
|
||||||
if(name == typeToName((Type) i)) {
|
if(typeToName((Type) i).compare(name, Qt::CaseInsensitive) == 0) {
|
||||||
return new MatchingComponent((Type) i);
|
return new MatchingComponent((Type) i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -12,7 +12,7 @@
|
|||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
|
|
||||||
class MatchingComponent : public QFrame, public Savable
|
class MatchingComponent : public QFrame, public Savable, public SCPINode
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
@ -56,12 +56,14 @@ private:
|
|||||||
void focusInEvent(QFocusEvent *event) override;
|
void focusInEvent(QFocusEvent *event) override;
|
||||||
void focusOutEvent(QFocusEvent *event) override;
|
void focusOutEvent(QFocusEvent *event) override;
|
||||||
QString oldStylesheet;
|
QString oldStylesheet;
|
||||||
|
double value;
|
||||||
};
|
};
|
||||||
|
|
||||||
class MatchingNetwork : public DeembeddingOption
|
class MatchingNetwork : public DeembeddingOption
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
MatchingNetwork();
|
MatchingNetwork();
|
||||||
|
~MatchingNetwork();
|
||||||
|
|
||||||
// DeembeddingOption interface
|
// DeembeddingOption interface
|
||||||
public:
|
public:
|
||||||
@ -71,6 +73,8 @@ public:
|
|||||||
Type getType() override {return Type::MatchingNetwork;}
|
Type getType() override {return Type::MatchingNetwork;}
|
||||||
nlohmann::json toJSON() override;
|
nlohmann::json toJSON() override;
|
||||||
void fromJSON(nlohmann::json j) override;
|
void fromJSON(nlohmann::json j) override;
|
||||||
|
|
||||||
|
void clearNetwork();
|
||||||
private:
|
private:
|
||||||
static constexpr int imageHeight = 151;
|
static constexpr int imageHeight = 151;
|
||||||
static constexpr int componentWidth = 151;
|
static constexpr int componentWidth = 151;
|
||||||
@ -80,10 +84,14 @@ private:
|
|||||||
unsigned int findInsertPosition(int xcoord);
|
unsigned int findInsertPosition(int xcoord);
|
||||||
void addComponentAtPosition(int pos, MatchingComponent *c);
|
void addComponentAtPosition(int pos, MatchingComponent *c);
|
||||||
void addComponent(int index, MatchingComponent *c);
|
void addComponent(int index, MatchingComponent *c);
|
||||||
|
void removeComponent(int index);
|
||||||
|
void removeComponent(MatchingComponent *c);
|
||||||
void createDragComponent(MatchingComponent *c);
|
void createDragComponent(MatchingComponent *c);
|
||||||
void updateInsertIndicator(int xcoord);
|
void updateInsertIndicator(int xcoord);
|
||||||
bool eventFilter(QObject *object, QEvent *event) override;
|
bool eventFilter(QObject *object, QEvent *event) override;
|
||||||
|
|
||||||
|
void updateSCPINames();
|
||||||
|
|
||||||
std::vector<MatchingComponent*> network;
|
std::vector<MatchingComponent*> network;
|
||||||
unsigned int port;
|
unsigned int port;
|
||||||
|
|
||||||
|
@ -160,40 +160,65 @@ bool SCPINode::add(SCPICommand *cmd)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool SCPINode::addDoubleParameter(QString name, double ¶m, bool gettable, bool settable)
|
bool SCPINode::addDoubleParameter(QString name, double ¶m, bool gettable, bool settable, std::function<void(void)> setCallback)
|
||||||
{
|
{
|
||||||
auto cmd = settable ? [&](QStringList params) -> QString {
|
auto cmd = settable ? [¶m, setCallback](QStringList params) -> QString {
|
||||||
if(SCPI::paramToDouble(params, 0, param)) {
|
if(SCPI::paramToDouble(params, 0, param)) {
|
||||||
|
if(setCallback) {
|
||||||
|
setCallback();
|
||||||
|
}
|
||||||
return SCPI::getResultName(SCPI::Result::Empty);
|
return SCPI::getResultName(SCPI::Result::Empty);
|
||||||
} else {
|
} else {
|
||||||
return SCPI::getResultName(SCPI::Result::Error);
|
return SCPI::getResultName(SCPI::Result::Error);
|
||||||
}
|
}
|
||||||
} : (std::function<QString(QStringList)>) nullptr;
|
} : (std::function<QString(QStringList)>) nullptr;
|
||||||
auto query = settable ? [=](QStringList params) -> QString {
|
auto query = gettable ? [=](QStringList params) -> QString {
|
||||||
Q_UNUSED(params)
|
Q_UNUSED(params)
|
||||||
return QString::number(param);
|
return QString::number(param);
|
||||||
} : (std::function<QString(QStringList)>) nullptr;
|
} : (std::function<QString(QStringList)>) nullptr;
|
||||||
return add(new SCPICommand(name, cmd, query));
|
return add(new SCPICommand(name, cmd, query));
|
||||||
}
|
}
|
||||||
|
|
||||||
bool SCPINode::addUnsignedIntParameter(QString name, unsigned int ¶m, bool gettable, bool settable)
|
bool SCPINode::addUnsignedIntParameter(QString name, unsigned int ¶m, bool gettable, bool settable, std::function<void(void)> setCallback)
|
||||||
{
|
{
|
||||||
auto cmd = settable ? [&](QStringList params) -> QString {
|
auto cmd = settable ? [¶m, setCallback](QStringList params) -> QString {
|
||||||
unsigned long long value;
|
unsigned long long value;
|
||||||
if(SCPI::paramToULongLong(params, 0, value)) {
|
if(SCPI::paramToULongLong(params, 0, value)) {
|
||||||
param = value;
|
param = value;
|
||||||
|
if(setCallback) {
|
||||||
|
setCallback();
|
||||||
|
}
|
||||||
return SCPI::getResultName(SCPI::Result::Empty);
|
return SCPI::getResultName(SCPI::Result::Empty);
|
||||||
} else {
|
} else {
|
||||||
return SCPI::getResultName(SCPI::Result::Error);
|
return SCPI::getResultName(SCPI::Result::Error);
|
||||||
}
|
}
|
||||||
} : (std::function<QString(QStringList)>) nullptr;
|
} : (std::function<QString(QStringList)>) nullptr;
|
||||||
auto query = settable ? [=](QStringList params) -> QString {
|
auto query = gettable ? [=](QStringList params) -> QString {
|
||||||
Q_UNUSED(params)
|
Q_UNUSED(params)
|
||||||
return QString::number(param);
|
return QString::number(param);
|
||||||
} : (std::function<QString(QStringList)>) nullptr;
|
} : (std::function<QString(QStringList)>) nullptr;
|
||||||
return add(new SCPICommand(name, cmd, query));
|
return add(new SCPICommand(name, cmd, query));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool SCPINode::addBoolParameter(QString name, bool ¶m, bool gettable, bool settable, std::function<void(void)> setCallback)
|
||||||
|
{
|
||||||
|
auto cmd = settable ? [¶m, setCallback](QStringList params) -> QString {
|
||||||
|
if(SCPI::paramToBool(params, 0, param)) {
|
||||||
|
if(setCallback) {
|
||||||
|
setCallback();
|
||||||
|
}
|
||||||
|
return SCPI::getResultName(SCPI::Result::Empty);
|
||||||
|
} else {
|
||||||
|
return SCPI::getResultName(SCPI::Result::Error);
|
||||||
|
}
|
||||||
|
} : (std::function<QString(QStringList)>) nullptr;
|
||||||
|
auto query = gettable ? [=](QStringList params) -> QString {
|
||||||
|
Q_UNUSED(params)
|
||||||
|
return param ? SCPI::getResultName(SCPI::Result::True) : SCPI::getResultName(SCPI::Result::False);
|
||||||
|
} : (std::function<QString(QStringList)>) nullptr;
|
||||||
|
return add(new SCPICommand(name, cmd, query));
|
||||||
|
}
|
||||||
|
|
||||||
bool SCPINode::changeName(QString newname)
|
bool SCPINode::changeName(QString newname)
|
||||||
{
|
{
|
||||||
if(newname == name) {
|
if(newname == name) {
|
||||||
@ -206,6 +231,7 @@ bool SCPINode::changeName(QString newname)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
name = newname;
|
name = newname;
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool SCPINode::nameCollision(QString name)
|
bool SCPINode::nameCollision(QString name)
|
||||||
|
@ -35,8 +35,9 @@ public:
|
|||||||
bool remove(SCPINode *node);
|
bool remove(SCPINode *node);
|
||||||
bool add(SCPICommand *cmd);
|
bool add(SCPICommand *cmd);
|
||||||
|
|
||||||
bool addDoubleParameter(QString name, double ¶m, bool gettable = true, bool settable = true);
|
bool addDoubleParameter(QString name, double ¶m, bool gettable = true, bool settable = true, std::function<void(void)> setCallback = nullptr);
|
||||||
bool addUnsignedIntParameter(QString name, unsigned int ¶m, bool gettable = true, bool settable = true);
|
bool addUnsignedIntParameter(QString name, unsigned int ¶m, bool gettable = true, bool settable = true, std::function<void(void)> setCallback = nullptr);
|
||||||
|
bool addBoolParameter(QString name, bool ¶m, bool gettable = true, bool settable = true, std::function<void(void)> setCallback = nullptr);
|
||||||
|
|
||||||
bool changeName(QString newname);
|
bool changeName(QString newname);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user