Compare commits

...

4 commits

6 changed files with 68 additions and 8 deletions

14
.gitignore vendored Normal file
View file

@ -0,0 +1,14 @@
# Build directory
build/
# Qt creator user files
*.user
*.pro.user
*.opensdf
*.sdf
# CMake cache
CMakeCache.txt
CMakeFiles/
cmake_install.cmake

View file

@ -11,8 +11,12 @@ set(CMAKE_CXX_STANDARD_REQUIRED ON)
# Find Qt6
find_package(Qt6 REQUIRED COMPONENTS Widgets)
# Add the libeismultiplexer library
add_subdirectory(../libeismultiplexer)
# Enable automoc for Qt meta-object compiler
set(CMAKE_AUTOMOC ON)
# Include the libeismultiplexer library
include_directories(/workspace/libeismultiplexer)
link_directories(/workspace/libeismultiplexer/build)
# Add the application executable
add_executable(eismultiplexer-qt

View file

@ -3,6 +3,7 @@
#include "channelwidget.h"
#include <QDebug>
#include <QMessageBox>
ChannelWidget::ChannelWidget(uint16_t deviceSerial, uint16_t channelNumber, struct eismultiplexer* multiplexer,
QWidget *parent)
@ -31,18 +32,44 @@ ChannelWidget::~ChannelWidget()
// Nothing to clean up
}
uint16_t ChannelWidget::getDeviceSerial() const
{
return deviceSerial;
}
uint16_t ChannelWidget::getChannelNumber() const
{
return channelNumber;
}
bool ChannelWidget::isChecked() const
{
return checkbox->isChecked();
}
void ChannelWidget::onChannelToggled(bool checked)
{
if (checked) {
// Emit signal before actually turning on the channel
emit channelAboutToBeTurnedOn(deviceSerial, channelNumber);
}
channel_t channelFlag = static_cast<channel_t>(1 << channelNumber);
if (checked) {
if (eismultiplexer_connect_channel(multiplexer, channelFlag) < 0) {
QMessageBox::warning(this, tr("Connection Failed"),
tr("Failed to connect channel %1 on device %2").arg(channelNumber).arg(deviceSerial));
qWarning() << "Failed to connect channel" << channelNumber << "on device" << deviceSerial;
checkbox->setChecked(false);
setEnabled(false); // Gray out the widget
}
} else {
if (eismultiplexer_disconnect_channel(multiplexer, channelFlag) < 0) {
QMessageBox::warning(this, tr("Disconnection Failed"),
tr("Failed to disconnect channel %1 on device %2").arg(channelNumber).arg(deviceSerial));
qWarning() << "Failed to disconnect channel" << channelNumber << "on device" << deviceSerial;
checkbox->setChecked(true);
setEnabled(false); // Gray out the widget
}
}
}

View file

@ -15,9 +15,16 @@ class ChannelWidget : public QWidget
Q_OBJECT
public:
ChannelWidget(uint16_t deviceSerial, uint16_t channelNumber, struct eismultiplexer* multiplexer,
QWidget *parent = nullptr);
~ChannelWidget();
explicit ChannelWidget(uint16_t deviceSerial, uint16_t channelNumber, struct eismultiplexer* multiplexer,
QWidget *parent = nullptr);
~ChannelWidget() override;
uint16_t getDeviceSerial() const;
uint16_t getChannelNumber() const;
bool isChecked() const;
signals:
void channelAboutToBeTurnedOn(uint16_t deviceSerial, uint16_t channelNumber);
private slots:
void onChannelToggled(bool checked);

View file

@ -2,6 +2,7 @@
#include "mainwindow.h"
#include <QDebug>
#include <QMessageBox>
#include <eismultiplexer.h>
MainWindow::MainWindow(QWidget *parent)
@ -48,7 +49,9 @@ void MainWindow::enumerateDevices()
size_t count = 0;
uint16_t* serials = eismultiplexer_list_available_devices(&count);
if (!serials) {
if (!serials || count == 0) {
QMessageBox::warning(this, tr("No Devices Found"),
tr("No EIS multiplexer devices were found. Please connect a device and try again."));
qWarning() << "No EIS multiplexer devices found";
return;
}
@ -67,6 +70,8 @@ void MainWindow::enumerateDevices()
}
eismultiplexer_disconnect(&multiplexer);
} else {
QMessageBox::warning(this, tr("Connection Failed"),
tr("Failed to connect to device with serial %1").arg(serial));
qWarning() << "Failed to connect to device with serial" << serial;
}
}

View file

@ -19,8 +19,11 @@ class MainWindow : public QMainWindow
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
explicit MainWindow(QWidget *parent = nullptr);
~MainWindow() override;
private slots:
void onChannelAboutToBeTurnedOn(uint16_t deviceSerial, uint16_t channelNumber);
private:
void enumerateDevices();