236 lines
5.6 KiB
C++
236 lines
5.6 KiB
C++
#include "mainwindow.h"
|
|
#include "ui_mainwindow.h"
|
|
|
|
MainWindow::MainWindow(QWidget *parent)
|
|
: QMainWindow(parent)
|
|
, ui(new Ui::MainWindow)
|
|
{
|
|
m_serialPort = new QSerialPort();
|
|
|
|
ui->setupUi(this);
|
|
}
|
|
|
|
MainWindow::~MainWindow()
|
|
{
|
|
if (m_serialPort->isOpen()) {
|
|
m_serialPort->clear();
|
|
m_serialPort->close();
|
|
qDebug() << "exiting, clear and close serial port...";
|
|
}
|
|
delete m_serialPort;
|
|
delete ui;
|
|
}
|
|
|
|
void MainWindow::msgBox(QWidget* ctx, QString title, QString content) {
|
|
QMessageBox::information(ctx, title, content);
|
|
}
|
|
|
|
void MainWindow::msgBox(QWidget* ctx, QString content) {
|
|
msgBox(ctx, "title", content);
|
|
}
|
|
|
|
void MainWindow::receiveData() {
|
|
QByteArray data = m_serialPort->readAll();
|
|
qDebug() << "\nreceived data:" << data.length() << data.toHex();
|
|
}
|
|
|
|
|
|
void MainWindow::on_btn_serial_search_clicked()
|
|
{
|
|
QStringList m_serialPortNameList;
|
|
|
|
foreach(const QSerialPortInfo &info, QSerialPortInfo::availablePorts()) {
|
|
m_serialPortNameList << info.portName();
|
|
qDebug() << "Serial port discovered:" << info.portName();
|
|
}
|
|
|
|
ui->comboBox_serial->clear();
|
|
ui->comboBox_serial->addItems(m_serialPortNameList);
|
|
if (m_serialPortNameList.length() > 0) {
|
|
ui->comboBox_serial->setCurrentIndex(0);
|
|
}
|
|
}
|
|
|
|
|
|
void MainWindow::on_btn_serial_toggle_clicked()
|
|
{
|
|
if (ui->comboBox_serial->currentText() == "") {
|
|
msgBox(this, "请选择串口");
|
|
return;
|
|
}
|
|
if (m_serialPort->isOpen()) {
|
|
m_serialPort->clear();
|
|
m_serialPort->close();
|
|
qDebug() << "Serial port closed";
|
|
ui->btn_serial_toggle->setText("打开串口");
|
|
|
|
// enable serial port comboBoxes
|
|
ui->comboBox_serial->setDisabled(false);
|
|
ui->comboBox_baud->setDisabled(false);
|
|
ui->btn_serial_search->setDisabled(false);
|
|
} else {
|
|
m_serialPort->setPortName("/dev/" + ui->comboBox_serial->currentText());
|
|
if (!m_serialPort->open(QIODevice::ReadWrite)) {
|
|
msgBox(this, "串口打开失败", "串口被占用或不存在");
|
|
qDebug() << "Serial open failed";
|
|
return;
|
|
}
|
|
qDebug() << "Serial open successful";
|
|
ui->btn_serial_toggle->setText("关闭串口");
|
|
|
|
// handle baud rate
|
|
QSerialPort::BaudRate t_BaudRate;
|
|
switch (ui->comboBox_baud->currentIndex()) {
|
|
case 0:
|
|
t_BaudRate = QSerialPort::Baud2400;
|
|
break;
|
|
case 1:
|
|
t_BaudRate = QSerialPort::Baud4800;
|
|
break;
|
|
case 2:
|
|
t_BaudRate = QSerialPort::Baud9600;
|
|
break;
|
|
case 3:
|
|
t_BaudRate = QSerialPort::Baud115200;
|
|
break;
|
|
default:
|
|
t_BaudRate = QSerialPort::Baud9600;
|
|
break;
|
|
}
|
|
|
|
// serial port configuration
|
|
m_serialPort->setBaudRate(t_BaudRate);
|
|
m_serialPort->setDataBits(QSerialPort::Data8);
|
|
m_serialPort->setFlowControl(QSerialPort::NoFlowControl);
|
|
m_serialPort->setParity(QSerialPort::NoParity);
|
|
m_serialPort->setStopBits(QSerialPort::OneStop);
|
|
connect(m_serialPort, SIGNAL(readyRead()), this, SLOT(receiveData()));
|
|
|
|
// disable serial port comboBoxes
|
|
ui->comboBox_serial->setDisabled(true);
|
|
ui->comboBox_baud->setDisabled(true);
|
|
ui->btn_serial_search->setDisabled(true);
|
|
}
|
|
}
|
|
|
|
|
|
void MainWindow::on_comboBox_sys_mode_currentIndexChanged(int index)
|
|
{
|
|
static char buff = 0xff;
|
|
switch (index) {
|
|
case 0:
|
|
buff = CTRL_CODE_SYSMODE_Disable;
|
|
break;
|
|
case 1:
|
|
buff = CTRL_CODE_SYSMODE_Telemetry;
|
|
break;
|
|
case 2:
|
|
buff = CTRL_CODE_SYSMODE_Security;
|
|
break;
|
|
}
|
|
|
|
if (!m_serialPort->isOpen()) {
|
|
msgBox(this, "未连接设备");
|
|
return;
|
|
}
|
|
|
|
m_serialPort->write(&buff, sizeof(buff));
|
|
}
|
|
|
|
|
|
void MainWindow::on_comboBox_cycle_currentIndexChanged(int index)
|
|
{
|
|
static char buff = 0xff;
|
|
switch (index) {
|
|
case 0:
|
|
buff = CTRL_CODE_CYCLE_500ms;
|
|
break;
|
|
case 1:
|
|
buff = CTRL_CODE_CYCLE_1s;
|
|
break;
|
|
case 2:
|
|
buff = CTRL_CODE_CYCLE_2s;
|
|
break;
|
|
case 3:
|
|
buff = CTRL_CODE_CYCLE_5s;
|
|
break;
|
|
}
|
|
|
|
if (!m_serialPort->isOpen()) {
|
|
msgBox(this, "未连接设备");
|
|
return;
|
|
}
|
|
|
|
m_serialPort->write(&buff, sizeof(buff));
|
|
}
|
|
|
|
|
|
void MainWindow::on_comboBox_temp_fetch_currentIndexChanged(int index)
|
|
{
|
|
static char buff = 0xff;
|
|
switch (index) {
|
|
case 0:
|
|
buff = CTRL_CODE_TEMP_Disable;
|
|
break;
|
|
case 1:
|
|
buff = CTRL_CODE_TEMP_Enable;
|
|
break;
|
|
}
|
|
|
|
if (!m_serialPort->isOpen()) {
|
|
msgBox(this, "未连接设备");
|
|
return;
|
|
}
|
|
|
|
m_serialPort->write(&buff, sizeof(buff));
|
|
}
|
|
|
|
|
|
void MainWindow::on_comboBox_body_fetch_currentIndexChanged(int index)
|
|
{
|
|
static char buff = 0xff;
|
|
switch (index) {
|
|
case 0:
|
|
buff = CTRL_CODE_BODY_Disable;
|
|
break;
|
|
case 1:
|
|
buff = CTRL_CODE_BODY_Buzzer;
|
|
break;
|
|
case 2:
|
|
buff = CTRL_CODE_BODY_Light;
|
|
break;
|
|
}
|
|
|
|
if (!m_serialPort->isOpen()) {
|
|
msgBox(this, "未连接设备");
|
|
return;
|
|
}
|
|
|
|
m_serialPort->write(&buff, sizeof(buff));
|
|
}
|
|
|
|
|
|
void MainWindow::on_comboBox_gas_fetch_currentIndexChanged(int index)
|
|
{
|
|
static char buff = 0xff;
|
|
switch (index) {
|
|
case 0:
|
|
buff = CTRL_CODE_GAS_Disable;
|
|
break;
|
|
case 1:
|
|
buff = CTRL_CODE_GAS_State;
|
|
break;
|
|
case 2:
|
|
buff = CTRL_CODE_GAS_Data;
|
|
break;
|
|
}
|
|
|
|
if (!m_serialPort->isOpen()) {
|
|
msgBox(this, "未连接设备");
|
|
return;
|
|
}
|
|
|
|
m_serialPort->write(&buff, sizeof(buff));
|
|
}
|
|
|