#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QCloseEvent>
#include <QApplication>
#include <QDir>
#include <QDesktopServices>
#include <QUrl>
#include <QTime>
#include <QThread>
#include <QMessageBox>
class Thread : public QThread
{
public:
static void msleep(unsigned long msec) { QThread::msleep(msec); }
};
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
#if QT_VERSION >= 0x050200
ui->serialNoLineEdit->setClearButtonEnabled(true);
#endif
QDir dir = qApp->applicationDirPath();
m_microCORLab.logger().setLogFile(
dir.absoluteFilePath(QString("%1.log")
.arg(qApp->applicationName())));
m_microCORLab.logger().setStdOutEnabled(false);
ui->autoShutdownSpinBox->setMaximum(24 * 60);
ui->resolutionSpinBox->setValue(m_microCORLab.resolution());
ui->autoShutdownSpinBox->setValue(m_microCORLab.autoShutdown());
if ( ! m_microCORLab.serialNo().isEmpty())
ui->serialNoLineEdit->setText(m_microCORLab.serialNo());
connect(&m_microCORLab.usbDevState(), SIGNAL(stateChanged()),
SLOT(usbDevStateChanged()));
connect(&m_microCORLab.gatewayState(), SIGNAL(stateChanged()),
SLOT(gatewayStateChanged()));
connect(&m_microCORLab.terminalState(), SIGNAL(stateChanged()),
SLOT(terminalStateChanged()));
connect(&m_microCORLab, SIGNAL(terminalTypeChanged(qint8)),
SLOT(terminalTypeChanged()));
connect(&m_microCORLab.terminalRunningState(), SIGNAL(stateChanged()),
SLOT(terminalRunningStateChanged()));
connect(&m_microCORLab.batteryState(), SIGNAL(stateChanged()),
SLOT(batteryStateChanged()));
connect(&m_microCORLab.samplingState(), SIGNAL(stateChanged()),
SLOT(samplingStateChanged()));
usbDevStateChanged();
gatewayStateChanged();
terminalStateChanged();
terminalRunningStateChanged();
batteryStateChanged();
samplingStateChanged();
connect(&m_microCORLab, SIGNAL(batteryLevelChanged(double)),
SLOT(batteryLevelChanged(double)));
connect(&m_microCORLab, SIGNAL(dataAcquired(double*,size_t,bool)),
SLOT(dataAcquired(double*,size_t,bool)));
connect(&m_microCORLab, SIGNAL(dataInterrupted()),
SLOT(dataInterrupted()));
}
MainWindow::~MainWindow()
{
m_microCORLab.shutdownDevices(ui->shutdownTermCheckBox->isChecked());
Thread::msleep(500);
delete ui;
}
void MainWindow::usbDevStateChanged()
{
comboBoxHelper(ui->usbDevComboBox,
(int) m_microCORLab.usbDevState().getCurrentState());
}
void MainWindow::gatewayStateChanged()
{
comboBoxHelper(ui->gwComboBox,
(int) m_microCORLab.gatewayState().getCurrentState());
}
void MainWindow::terminalStateChanged()
{
comboBoxHelper(ui->termComboBox,
(int) m_microCORLab.terminalState().getCurrentState());
}
void MainWindow::terminalTypeChanged()
{
m_microCORLab.terminalType()));
}
void MainWindow::terminalRunningStateChanged()
{
comboBoxHelper(ui->termRunningComboBox,
(int) m_microCORLab.terminalRunningState().getCurrentState());
}
void MainWindow::batteryStateChanged()
{
comboBoxHelper(ui->batteryComboBox,
(int) m_microCORLab.batteryState().getCurrentState());
}
void MainWindow::samplingStateChanged()
{
comboBoxHelper(ui->samplingComboBox,
(int) m_microCORLab.samplingState().getCurrentState());
if (m_microCORLab.samplingState().isStarted())
ui->startButton->setText(tr("Stop"));
else
ui->startButton->setText(tr("Start"));
}
void MainWindow::batteryLevelChanged(double value)
{
ui->batteryLevelDoubleSpinBox->setValue(value);
}
void MainWindow::dataAcquired(double *d, size_t sz, bool trigger)
{
QString s;
QStringList sl;
s.append("Data : {Time:");
s.append(QTime::currentTime().toString("hh:mm:ss.zzz"));
if (trigger)
s.append(", Trigger: ON");
else
s.append(", Trigger:OFF");
s.append(", [");
for (size_t i = 0; i < sz; ++i) {
sl << " NaN ";
else
sl << QString::number(d[i], 'f', 8);
}
s.append(sl.join(","));
s.append("]}\n");
ui->dataTextEdit->append(s);
}
void MainWindow::dataInterrupted()
{
ui->dataTextEdit->append("Data Interrupted");
}
void MainWindow::on_startButton_clicked()
{
if (m_microCORLab.samplingState().isStarted()) {
m_microCORLab.stop();
}
else if (m_microCORLab.terminalRunningState().isFirmware()
&& m_microCORLab.samplingState().isStopped()
) {
m_microCORLab.setResolution(ui->resolutionSpinBox->value());
m_microCORLab.setAutoShutdown(ui->autoShutdownSpinBox->value());
m_microCORLab.start();
}
}
void MainWindow::comboBoxHelper(QComboBox *cb, int index)
{
Q_ASSERT(index >= 0 && index < cb->count());
cb->setCurrentIndex(index);
}
void MainWindow::on_clearDataButton_clicked()
{
ui->dataTextEdit->clear();
}
void MainWindow::on_setSerialNoButton_clicked()
{
if (ui->serialNoLineEdit->text().isEmpty()) {
m_microCORLab.setSerialNo("");
}
else if (ui->serialNoLineEdit->hasAcceptableInput()) {
m_microCORLab.setSerialNo(ui->serialNoLineEdit->text());
m_microCORLab.logger().log("on_setSerialNoButton_clicked",
QString("SerialNo changed to = %1")
.arg(m_microCORLab.serialNo()));
}
else {
QMessageBox::critical(this,
tr("Error"),
tr("Invalid serial number"));
}
}
void MainWindow::on_referenceComboBox_currentIndexChanged(int index)
{
if (index == 0)
else if (index == 1)
}