diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..1e931b8 --- /dev/null +++ b/.gitignore @@ -0,0 +1,14 @@ + +# Build directory +build/ + +# Qt creator user files +*.user +*.pro.user +*.opensdf +*.sdf + +# CMake cache +CMakeCache.txt +CMakeFiles/ +cmake_install.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 05adc82..8224829 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -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 diff --git a/channelwidget.cpp b/channelwidget.cpp index ce2366a..b351fe6 100644 --- a/channelwidget.cpp +++ b/channelwidget.cpp @@ -3,6 +3,7 @@ #include "channelwidget.h" #include +#include 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(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 } } } diff --git a/channelwidget.h b/channelwidget.h index 5a2a6b7..a1e2dc1 100644 --- a/channelwidget.h +++ b/channelwidget.h @@ -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); diff --git a/mainwindow.cpp b/mainwindow.cpp index a6da879..38a0796 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -2,6 +2,7 @@ #include "mainwindow.h" #include +#include #include 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; } } diff --git a/mainwindow.h b/mainwindow.h index 519cb37..4426a48 100644 --- a/mainwindow.h +++ b/mainwindow.h @@ -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();