diff --git a/src/global.cpp b/src/global.cpp
index 4a71af9..df38175 100644
--- a/src/global.cpp
+++ b/src/global.cpp
@@ -2,7 +2,8 @@
Global::Global()
{
- _mode = Global::Mode::ANALYZE;
+ _mode = Global::Mode::Analysis;
+ _deviceConnectStatus = Global::DeviceConnectionStatus::Disconnected;
}
Global *Global::instance()
@@ -18,3 +19,13 @@ void Global::setMode(const Global::Mode mode)
emit sigModeModify(mode);
}
}
+
+#if 0
+void Global::setDeviceConnectionStatus(const Global::DeviceConnectionStatus status)
+{
+ if(status != _deviceConnectStatus){
+ _deviceConnectStatus = status;
+ emit sigDeviceConnnectionStatusModify(status);
+ }
+}
+#endif
diff --git a/src/global.h b/src/global.h
index 266cda4..0742396 100644
--- a/src/global.h
+++ b/src/global.h
@@ -11,16 +11,31 @@ public:
static Global* instance();
enum Mode{
- EXPERIMENT,
- ANALYZE
+ Analysis,
+ ConnectedToDev,
+ ExperimentStart
};
+
void setMode(const Mode);
+ Mode getMode(){return _mode;}
+
+ enum DeviceConnectionStatus{
+ Disconnected,
+ Connected
+ };
+
+#if 0
+ void setDeviceConnectionStatus(const DeviceConnectionStatus);
+ DeviceConnectionStatus getDeviceConnectionStatus(){return _deviceConnectStatus;}
+#endif
signals:
void sigModeModify(const Mode);
+ void sigDeviceConnnectionStatusModify(const DeviceConnectionStatus);
public slots:
private:
Mode _mode;
+ DeviceConnectionStatus _deviceConnectStatus;
};
#endif // GLOBAL_H
diff --git a/src/images.qrc b/src/images.qrc
index a413b45..f739f40 100644
--- a/src/images.qrc
+++ b/src/images.qrc
@@ -2,5 +2,8 @@
images/start.png
images/stop.png
+ images/connect.png
+ images/new.png
+ images/real_time_widget.png
diff --git a/src/images/connect.png b/src/images/connect.png
new file mode 100644
index 0000000..bc64b19
Binary files /dev/null and b/src/images/connect.png differ
diff --git a/src/images/new.png b/src/images/new.png
new file mode 100644
index 0000000..24a432e
Binary files /dev/null and b/src/images/new.png differ
diff --git a/src/images/real_time_widget.png b/src/images/real_time_widget.png
new file mode 100644
index 0000000..ce7f7ca
Binary files /dev/null and b/src/images/real_time_widget.png differ
diff --git a/src/images/stop.png b/src/images/stop.png
index eda97b1..178b4b0 100644
Binary files a/src/images/stop.png and b/src/images/stop.png differ
diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp
index 99172f4..a63d0df 100644
--- a/src/mainwindow.cpp
+++ b/src/mainwindow.cpp
@@ -1,7 +1,10 @@
+#include
+
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "global.h"
#include "serialport.h"
+#include "dataparser.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
@@ -9,9 +12,12 @@ MainWindow::MainWindow(QWidget *parent)
, _centralWidget(new CentralWidget)
,_leftWidget(new LeftWidget)
,_expertmentSettingForm(new ExperimentSettingForm)
+ ,_realTimeDataForm(new RealTimeDataForm)
{
ui->setupUi(this);
+ setActionEnable(false);
+
this->setToolTip(".....");
// resize(2222,1111);
@@ -29,9 +35,6 @@ MainWindow::~MainWindow()
void MainWindow::connections()
{
//ui
-// connect(ui->actionshitu,&QAction::triggered,
-// [&]{_expertmentSettingForm->show();});
-
connect(_expertmentSettingForm,&ExperimentSettingForm::sigConnectToDevice,
SerialPort::instance(),&SerialPort::slotConnectToDevice);
//dynamic data
@@ -42,8 +45,56 @@ void MainWindow::connections()
_centralWidget,&CentralWidget::slotModeModify);
}
-
-void MainWindow::on_actionstart_triggered()
+void MainWindow::setActionEnable(const bool flag)
{
-
+ if(flag){
+ ui->actionNew->setEnabled(true);
+ ui->actionStart->setEnabled(true);
+ ui->actionStop->setEnabled(true);
+ ui->actionRealTimeWidget->setEnabled(true);
+ }else{
+ ui->actionNew->setEnabled(false);
+ ui->actionStart->setEnabled(false);
+ ui->actionStop->setEnabled(false);
+ ui->actionRealTimeWidget->setEnabled(false);
+ }
+}
+
+void MainWindow::on_actionStop_triggered()
+{
+ QByteArray ba = DataParser::setDeviceStartStop(DeviceStartMode::Stop);
+ SerialPort::instance()->slotSendData(ba);
+ SerialPort::instance()->slotCloseSp();
+}
+
+void MainWindow::on_actionNew_triggered()
+{
+ _expertmentSettingForm->show();
+}
+
+void MainWindow::on_actionStart_triggered()
+{
+ QByteArray ba = DataParser::setDeviceStartStop(DeviceStartMode::Start);
+ SerialPort::instance()->slotSendData(ba);
+}
+
+void MainWindow::on_actionReadOnly_triggered()
+{
+ Global::instance()->setMode(Global::Mode::ExperimentStart);
+ SerialPort::instance()->openSp();
+}
+
+void MainWindow::on_actionRealTimeWidget_triggered()
+{
+ _realTimeDataForm->show();
+}
+
+void MainWindow::on_actionConnectToDev_triggered()
+{
+ if(SerialPort::instance()->openSp()){
+ setActionEnable(true);
+ Global::instance()->setMode(Global::Mode::ConnectedToDev);
+ }else{
+ QMessageBox::warning(this, "warnning", "Serial Port open failed.");
+ }
}
diff --git a/src/mainwindow.h b/src/mainwindow.h
index a3705f5..b704a15 100644
--- a/src/mainwindow.h
+++ b/src/mainwindow.h
@@ -6,6 +6,7 @@
#include "centralwidget.h"
#include "leftwidget.h"
#include "experimentsettingform.h"
+#include "realtimedataform.h"
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
@@ -19,14 +20,20 @@ public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private slots:
- void on_actionstart_triggered();
-
+ void on_actionConnectToDev_triggered();
+ void on_actionNew_triggered();
+ void on_actionStart_triggered();
+ void on_actionStop_triggered();
+ void on_actionReadOnly_triggered();
+ void on_actionRealTimeWidget_triggered();
private:
void connections();
+ void setActionEnable(const bool);
private:
Ui::MainWindow *ui;
CentralWidget *_centralWidget;
LeftWidget*_leftWidget;
ExperimentSettingForm *_expertmentSettingForm;
+ RealTimeDataForm* _realTimeDataForm;
};
#endif // MAINWINDOW_H
diff --git a/src/mainwindow.ui b/src/mainwindow.ui
index 259c828..ab0fb22 100644
--- a/src/mainwindow.ui
+++ b/src/mainwindow.ui
@@ -27,13 +27,13 @@
文件
-
-
+
-
+
+
+
+ :/images/new.png:/images/new.png
+
新建
-
-
- 22
-
-
-
+
:/images/start.png:/images/start.png
- start
+ 开始
+
+
+ true
+
+
+
+
+ 只读数据
+
+
+
+
+
+ :/images/stop.png:/images/stop.png
+
+
+ 停止
+
+
+
+
+
+ :/images/real_time_widget.png:/images/real_time_widget.png
+
+
+ 实时窗口
+
+
+
+
+
+ :/images/connect.png:/images/connect.png
+
+
+ 连接设备
diff --git a/src/serialport/serialport.cpp b/src/serialport/serialport.cpp
index 03f4f6f..bfaf193 100644
--- a/src/serialport/serialport.cpp
+++ b/src/serialport/serialport.cpp
@@ -9,6 +9,7 @@
#include "protocol.h"
#include "defines.h"
#include "dataparser.h"
+#include "global.h"
using namespace std;
@@ -94,7 +95,7 @@ void SerialPort::slotReadData()
{
QByteArray ba = _sp->readAll();
-#if 1
+#if 0
// 将 QByteArray 转换为十六进制字符串
QString hexData = ba.toHex(' '); // ' ' 作为分隔符,可选参数
qDebug() << "receive info (hex):" << hexData;
@@ -120,7 +121,9 @@ void SerialPort::slotReadData()
QString formattedColdTemp = QString::number(cd.cold_temp, 'f', 3);
qDebug() << "cold temp:" << formattedColdTemp;
- emit sigSendCommonData(cd);
+ if(Global::Mode::ExperimentStart == Global::instance()->getMode()){
+ emit sigSendCommonData(cd);
+ }
#if 0
CommonData *serialPortData =
@@ -137,8 +140,12 @@ void SerialPort::slotReadData()
#endif
}
-void SerialPort::openSp()
+bool SerialPort::openSp()
{
+ if(_sp != nullptr && _sp->isOpen()){
+ return true;
+ }
+
foreach (const QSerialPortInfo &info, QSerialPortInfo::availablePorts())
{
u16 pid = info.productIdentifier();
@@ -154,7 +161,7 @@ void SerialPort::openSp()
if (_sp == nullptr)
{
qDebug() << "Device not found.";
- return;
+ return false;
}
// 设置波特率和读写方向
@@ -173,7 +180,7 @@ void SerialPort::openSp()
if (!_sp->open(QIODevice::ReadWrite))
{
qDebug() << "open failed." << _sp->error();
- exit(0);
+ return false;
}
else
{
@@ -181,8 +188,10 @@ void SerialPort::openSp()
// 设置 DTR 信号为就绪状态(true 表示低电平)
_sp->setDataTerminalReady(true);
}
+ return true;
}
+
void SerialPort::sendCmd(const SerialPort::E_CMD_TYPE e)
{
#if 1
@@ -335,7 +344,14 @@ void SerialPort::slotSendData(const QByteArray &ba)
{
qDebug() << "slotSendData:" << ba.size();
- _sp->write(ba);
+ if(_sp != nullptr && _sp->isOpen()){
+ _sp->write(ba);
+ }else{
+ qDebug()<<"sp not open.";
+ // qErrnoWarning("sp not open.");
+ return;
+ }
+
#if 0
// 将 QByteArray 转换为十六进制字符串
QString hexData = ba.toHex(' '); // ' ' 作为分隔符,可选参数
@@ -362,5 +378,7 @@ void SerialPort::slotSendData(const QByteArray &ba)
void SerialPort::slotCloseSp()
{
- _sp->close();
+ if(_sp != nullptr && _sp->isOpen()){
+ _sp->close();
+ }
}
diff --git a/src/serialport/serialport.h b/src/serialport/serialport.h
index 0f8434e..f864775 100644
--- a/src/serialport/serialport.h
+++ b/src/serialport/serialport.h
@@ -22,6 +22,7 @@ public:
void sendCmd(const E_CMD_TYPE e);
static void parserTest();
+ bool openSp();
public slots:
void slotConnectToDevice(const QByteArray&);
void slotSendData(const QByteArray&);
@@ -34,7 +35,6 @@ protected:
private slots:
void slotReadData();
private:
- void openSp();
void to_hex(char* in_char, int char_length, char* out_char);
void displayPortInfo();
private:
diff --git a/src/ui/centralwidget.cpp b/src/ui/centralwidget.cpp
index 21aaa00..5a3d3a7 100644
--- a/src/ui/centralwidget.cpp
+++ b/src/ui/centralwidget.cpp
@@ -36,7 +36,7 @@ CentralWidget::CentralWidget(QWidget *parent)
void CentralWidget::slotModeModify(const Global::Mode mode)
{
- if (Global::Mode::EXPERIMENT == mode)
+ if (Global::Mode::ExperimentStart == mode)
{
// 创建画布,设置画布上的点数据
_customPlot->addGraph();
@@ -48,7 +48,7 @@ void CentralWidget::slotModeModify(const Global::Mode mode)
_customPlot->xAxis->setRange(0, 400);
_customPlot->yAxis->setRange(-20, 20);
}
- else if (Global::Mode::ANALYZE == mode)
+ else if (Global::Mode::Analysis == mode)
{
}
}
diff --git a/src/ui/experimentsettingform.cpp b/src/ui/experimentsettingform.cpp
index ffdab01..064df31 100644
--- a/src/ui/experimentsettingform.cpp
+++ b/src/ui/experimentsettingform.cpp
@@ -21,12 +21,10 @@ ExperimentSettingForm::ExperimentSettingForm(QWidget *parent) :
connect(ui->checkBox_phase_4,&QCheckBox::clicked,
this,&ExperimentSettingForm::slotPhase4StateChanged);
- connect(ui->pushButton_connect_to_device,&QPushButton::clicked,
- this,&ExperimentSettingForm::slotConnectToDevice);
+// connect(ui->pushButton_connect_to_device,&QPushButton::clicked,
+// this,&ExperimentSettingForm::slotConnectToDevice);
connect(ui->pushButton_cancel,&QPushButton::clicked,
this,&ExperimentSettingForm::slotCancel);
-
-
}
ExperimentSettingForm::~ExperimentSettingForm()
@@ -170,7 +168,7 @@ void ExperimentSettingForm::slotConnectToDevice()
qDebug()<<"ba size:"<setMode(Global::Mode::EXPERIMENT);
+ Global::instance()->setMode(Global::Mode::ConnectedToDev);
#if 0
QByteArray startBa = DataParser::setDeviceStartStop(DeviceStartMode::Start);
@@ -182,7 +180,7 @@ void ExperimentSettingForm::slotConnectToDevice()
void ExperimentSettingForm::slotCancel()
{
-
+ hide();
}
void ExperimentSettingForm::slotPhaseCheck()
{
@@ -225,4 +223,7 @@ void ExperimentSettingForm::slotPhaseCheck()
}
}
-
+void ExperimentSettingForm::on_pushButton_connect_to_device_clicked()
+{
+ slotConnectToDevice();
+}
diff --git a/src/ui/experimentsettingform.h b/src/ui/experimentsettingform.h
index 6ee654b..34d2c8b 100644
--- a/src/ui/experimentsettingform.h
+++ b/src/ui/experimentsettingform.h
@@ -17,6 +17,9 @@ public:
signals:
void sigConnectToDevice(const QByteArray&);
+private slots:
+ void on_pushButton_connect_to_device_clicked();
+
private:
void uiReset();
//slot