Enforce amplitude cal point limit, SCPI command for reading trace data

This commit is contained in:
Jan Käberich 2021-04-12 19:48:19 +02:00
parent 611b1ef59d
commit 62939ff882
21 changed files with 342 additions and 116 deletions

View file

@ -12,6 +12,7 @@
TraceWidget::TraceWidget(TraceModel &model, QWidget *parent) :
QWidget(parent),
SCPINode("TRACe"),
ui(new Ui::TraceWidget),
model(model)
{
@ -23,6 +24,7 @@ TraceWidget::TraceWidget(TraceModel &model, QWidget *parent) :
connect(ui->bExport, &QPushButton::clicked, this, &TraceWidget::exportDialog);
installEventFilter(this);
createCount = 0;
SetupSCPI();
}
TraceWidget::~TraceWidget()
@ -133,3 +135,54 @@ void TraceWidget::on_view_clicked(const QModelIndex &index)
break;
}
}
void TraceWidget::SetupSCPI()
{
auto findTrace = [=](QStringList params) -> Trace* {
if(params.size() < 1) {
return nullptr;
}
// check if trace is specified by number
bool ok;
auto n = params[0].toUInt(&ok);
if(ok) {
// check if enough traces exist
if(n < model.getTraces().size()) {
return model.getTraces()[n];
} else {
// invalid number
return nullptr;
}
} else {
// trace specified by name
for(auto t : model.getTraces()) {
if(t->name().compare(params[0], Qt::CaseInsensitive) == 0) {
return t;
}
}
// not found
return nullptr;
}
};
add(new SCPICommand("LIST", nullptr, [=](QStringList){
QString ret;
for(auto t : model.getTraces()) {
ret += t->name() + ",";
}
ret.chop(1);
return ret;
}));
add(new SCPICommand("DATA", nullptr, [=](QStringList params) -> QString {
auto t = findTrace(params);
if(!t) {
return "ERROR";
}
QString ret;
for(unsigned int i=0;i<t->size();i++) {
auto d = t->sample(i);
ret += "["+QString::number(d.x)+","+QString::number(d.y.real())+","+QString::number(d.y.imag())+"],";
}
ret.chop(1);
return ret;
}));
}

View file

@ -3,12 +3,13 @@
#include <QWidget>
#include "tracemodel.h"
#include "scpi.h"
namespace Ui {
class TraceWidget;
}
class TraceWidget : public QWidget
class TraceWidget : public QWidget, public SCPINode
{
Q_OBJECT
@ -26,6 +27,7 @@ protected slots:
virtual void importDialog() = 0;
protected:
void SetupSCPI();
bool eventFilter(QObject *obj, QEvent *event) override;
virtual Trace::LiveParameter defaultParameter() = 0;
QPoint dragStartPosition;

View file

@ -219,7 +219,7 @@ bool TraceXYPlot::isTDRtype(TraceXYPlot::YAxisType type)
void TraceXYPlot::axisSetupDialog()
{
auto setup = new XYplotAxisDialog(this);
setup->exec();
setup->show();
}
void TraceXYPlot::updateContextMenu()