103 lines
3.0 KiB
C++
103 lines
3.0 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);
|
|
setWindowTitle("Serial Helper");
|
|
}
|
|
|
|
MainWindow::~MainWindow()
|
|
{
|
|
delete ui;
|
|
}
|
|
|
|
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() == "") {
|
|
QMessageBox::information(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)) {
|
|
QMessageBox::information(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);
|
|
}
|
|
}
|
|
|