Implementation of some SCPI commands via TCP

This commit is contained in:
Jan Käberich 2021-04-11 00:10:22 +02:00
parent f1d52f159b
commit a15d02f217
15 changed files with 627 additions and 19 deletions

View file

@ -3,6 +3,7 @@
Generator::Generator(AppWindow *window)
: Mode(window, "Signal Generator")
, SCPINode("GENerator")
{
central = new SignalgeneratorWidget(window);
@ -18,6 +19,8 @@ Generator::Generator(AppWindow *window)
central->setLevel(pref.Startup.Generator.level);
}
setupSCPI();
finalize(central);
connect(central, &SignalgeneratorWidget::SettingsChanged, this, &Generator::updateDevice);
}
@ -48,3 +51,52 @@ void Generator::updateDevice()
p.generator = central->getDeviceStatus();
window->getDevice()->SendPacket(p);
}
void Generator::setupSCPI()
{
add(new SCPICommand("FREQuency", [=](QStringList params) -> QString {
bool ok;
if(params.size() != 1) {
return "ERROR";
}
auto newval = params[0].toUInt(&ok);
if(!ok) {
return "ERROR";
} else {
central->setFrequency(newval);
return "";
}
}, [=]() -> QString {
return QString::number(central->getDeviceStatus().frequency);
}));
add(new SCPICommand("LVL", [=](QStringList params) -> QString {
bool ok;
if(params.size() != 1) {
return "ERROR";
}
auto newval = params[0].toDouble(&ok);
if(!ok) {
return "ERROR";
} else {
central->setLevel(newval);
return "";
}
}, [=]() -> QString {
return QString::number(central->getDeviceStatus().cdbm_level / 100.0);
}));
add(new SCPICommand("PORT", [=](QStringList params) -> QString {
bool ok;
if(params.size() != 1) {
return "ERROR";
}
auto newval = params[0].toUInt(&ok);
if(!ok || newval > 2) {
return "ERROR";
} else {
central->setPort(newval);
return "";
}
}, [=]() -> QString {
return QString::number(central->getDeviceStatus().activePort);
}));
}

View file

@ -3,8 +3,9 @@
#include "mode.h"
#include "signalgenwidget.h"
#include "scpi.h"
class Generator : public Mode
class Generator : public Mode, public SCPINode
{
public:
Generator(AppWindow *window);
@ -19,6 +20,7 @@ private slots:
void updateDevice();
private:
void setupSCPI();
SignalgeneratorWidget *central;
};

View file

@ -92,13 +92,13 @@ SignalgeneratorWidget::SignalgeneratorWidget(QWidget *parent) :
connect(ui->levelSlider, &QSlider::valueChanged, [=](int value) {
setLevel((double) value / 100.0);
});
connect(ui->EnablePort1, &QCheckBox::clicked, [=](){
connect(ui->EnablePort1, &QCheckBox::toggled, [=](){
if(ui->EnablePort1->isChecked() && ui->EnablePort2->isChecked()) {
ui->EnablePort2->setCheckState(Qt::CheckState::Unchecked);
}
emit SettingsChanged();
});
connect(ui->EnablePort2, &QCheckBox::clicked, [=](){
connect(ui->EnablePort2, &QCheckBox::toggled, [=](){
if(ui->EnablePort1->isChecked() && ui->EnablePort2->isChecked()) {
ui->EnablePort1->setCheckState(Qt::CheckState::Unchecked);
}
@ -174,3 +174,24 @@ void SignalgeneratorWidget::setFrequency(double frequency)
ui->frequency->setValue(frequency);
}
void SignalgeneratorWidget::setPort(int port)
{
if(port < 0 || port > 2) {
return;
}
switch(port) {
case 0:
ui->EnablePort1->setChecked(false);
ui->EnablePort2->setChecked(false);
break;
case 1:
ui->EnablePort1->setChecked(true);
ui->EnablePort2->setChecked(false);
break;
case 2:
ui->EnablePort1->setChecked(false);
ui->EnablePort2->setChecked(true);
break;
}
}

View file

@ -24,6 +24,7 @@ signals:
public slots:
void setLevel(double level);
void setFrequency(double frequency);
void setPort(int port);
protected:
void timerEvent(QTimerEvent *) override;