Add support for reading state
This commit is contained in:
parent
1eac3f6a83
commit
4c2a4790c0
12 changed files with 163 additions and 103 deletions
|
|
@ -1,4 +1,3 @@
|
|||
#include <eismultiplexer.h>
|
||||
#include <QMessageBox>
|
||||
#include <QMessageBox>
|
||||
#include <set>
|
||||
|
|
@ -19,7 +18,6 @@ MainWindow::MainWindow(QWidget *parent):
|
|||
isFileModified(false)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
enumerateDevices();
|
||||
|
||||
codeEditor.setAutoIndentation(true);
|
||||
codeEditor.setAutoParentheses(true);
|
||||
|
|
@ -55,6 +53,8 @@ MainWindow::MainWindow(QWidget *parent):
|
|||
connect(ui->pushButtonRun, &QPushButton::clicked, this, &MainWindow::runScript);
|
||||
connect(ui->pushButtonStop, &QPushButton::clicked, this, &MainWindow::stopScript);
|
||||
connect(&pythonRunner, &PythonRunner::scriptFinished, this, &MainWindow::stopScript);
|
||||
enumerateDevices();
|
||||
generateExample();
|
||||
}
|
||||
|
||||
MainWindow::~MainWindow()
|
||||
|
|
@ -62,6 +62,30 @@ MainWindow::~MainWindow()
|
|||
delete ui;
|
||||
}
|
||||
|
||||
void MainWindow::readState()
|
||||
{
|
||||
for (auto& multiplexer : multiplexers) {
|
||||
channel_t channelstate = eismultiplexer_get_connected(multiplexer.second.get());
|
||||
for (auto& channel : channels) {
|
||||
for(size_t i = 0; i < 16; ++i) {
|
||||
channel_t mask = static_cast<channel_t>(1 << i);
|
||||
channel->onOtherChannelStateChanged(multiplexer.first, i, channelstate & mask);
|
||||
}
|
||||
}
|
||||
|
||||
int triggerCount = eismultiplexer_get_trigger_count(multiplexer.second.get());
|
||||
for(int i = 0; i < triggerCount; ++i) {
|
||||
bool level;
|
||||
trigger_state_t state;
|
||||
int ret = eismultiplexer_get_trigger_state(multiplexer.second.get(), i, &state, &level);
|
||||
if (ret < 0) {
|
||||
for (auto& trigger : triggers)
|
||||
trigger->updateSate(multiplexer.first, i, state);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void MainWindow::updateStatus()
|
||||
{
|
||||
if (!currentFilePath.isEmpty()) {
|
||||
|
|
@ -150,6 +174,9 @@ void MainWindow::enumerateDevices()
|
|||
{
|
||||
size_t count = 0;
|
||||
uint16_t* serials = eismultiplexer_list_available_devices(&count);
|
||||
if (ui->scrollArea->layout())
|
||||
delete ui->scrollArea->layout();
|
||||
QVBoxLayout* channelLayout = new QVBoxLayout(ui->scrollArea);
|
||||
|
||||
if (!serials || count == 0)
|
||||
{
|
||||
|
|
@ -168,6 +195,7 @@ void MainWindow::enumerateDevices()
|
|||
int ret = eismultiplexer_connect(multiplexer.get(), serial);
|
||||
if (ret == 0)
|
||||
{
|
||||
multiplexers.push_back({serial, multiplexer});
|
||||
uint16_t channelCount = 0;
|
||||
qDebug()<<"Adding channels from device "<<serial;
|
||||
if (eismultiplexer_get_channel_count(multiplexer.get(), &channelCount) >= 0)
|
||||
|
|
@ -177,7 +205,7 @@ void MainWindow::enumerateDevices()
|
|||
std::shared_ptr<ChannelWidget> widget(new ChannelWidget(serial, channel, multiplexer));
|
||||
qDebug()<<"Added widget from device "<<serial<<" channel "<<channel;
|
||||
channels.push_back(widget);
|
||||
ui->channelLayout->addWidget(widget.get());
|
||||
channelLayout->addWidget(widget.get());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -191,7 +219,7 @@ void MainWindow::enumerateDevices()
|
|||
std::shared_ptr<TriggerWidget> triggerWidget(new TriggerWidget(serial, trigger, multiplexer));
|
||||
qDebug()<<"Added trigger widget from device "<<serial<<" trigger "<<trigger;
|
||||
triggers.push_back(triggerWidget);
|
||||
ui->channelLayout->addWidget(triggerWidget.get());
|
||||
channelLayout->addWidget(triggerWidget.get());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -202,7 +230,8 @@ void MainWindow::enumerateDevices()
|
|||
qWarning()<<"Failed to connect to device with serial"<<serial<<"eismultiplexer_connect returned"<<ret;
|
||||
}
|
||||
}
|
||||
ui->channelLayout->addStretch();
|
||||
|
||||
channelLayout->addStretch();
|
||||
|
||||
// Second pass: populate gang combos and connect signals for channels
|
||||
for (const auto& widget : channels) {
|
||||
|
|
@ -226,10 +255,11 @@ void MainWindow::enumerateDevices()
|
|||
}
|
||||
}
|
||||
|
||||
readState();
|
||||
|
||||
ui->statusbar->showMessage("Ready");
|
||||
|
||||
free(serials);
|
||||
generateExample();
|
||||
}
|
||||
|
||||
void MainWindow::runScript() {
|
||||
|
|
@ -239,14 +269,25 @@ void MainWindow::runScript() {
|
|||
ui->pushButtonStop->setEnabled(true);
|
||||
codeEditor.setEnabled(false);
|
||||
ui->scrollArea->setEnabled(false);
|
||||
disconnectDevices();
|
||||
}
|
||||
|
||||
void MainWindow::stopScript() {
|
||||
pythonRunner.stopScript();
|
||||
channels.clear();
|
||||
triggers.clear();
|
||||
ui->pushButtonRun->setEnabled(true);
|
||||
ui->pushButtonStop->setEnabled(false);
|
||||
codeEditor.setEnabled(true);
|
||||
ui->scrollArea->setEnabled(true);
|
||||
enumerateDevices();
|
||||
}
|
||||
|
||||
void MainWindow::disconnectDevices()
|
||||
{
|
||||
for(auto& multiplexer : multiplexers)
|
||||
eismultiplexer_disconnect(multiplexer.second.get());
|
||||
multiplexers.clear();
|
||||
}
|
||||
|
||||
void MainWindow::generateExample()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue