commit fdc93e494e9ecd863b1f4e5a02a8b197a0a8de46
Author: 168492376 <168492376@qq.com>
Date: Mon Jan 13 23:00:58 2025 +0800
first version
diff --git a/.gitmodules b/.gitmodules
new file mode 100644
index 0000000..49e6a9b
--- /dev/null
+++ b/.gitmodules
@@ -0,0 +1,3 @@
+[submodule "3rdparty/CSerialPort"]
+ path = 3rdparty/CSerialPort
+ url = https://github.com/itas109/CSerialPort.git
diff --git a/3rdparty/CSerialPort b/3rdparty/CSerialPort
new file mode 160000
index 0000000..c3928be
--- /dev/null
+++ b/3rdparty/CSerialPort
@@ -0,0 +1 @@
+Subproject commit c3928be6d674bd3bb6df2c81b2486bcd4b82304b
diff --git a/images/left_arrow_gray.png b/images/left_arrow_gray.png
new file mode 100644
index 0000000..a3fd9a4
Binary files /dev/null and b/images/left_arrow_gray.png differ
diff --git a/images/left_arrow_green.png b/images/left_arrow_green.png
new file mode 100644
index 0000000..43ef9b9
Binary files /dev/null and b/images/left_arrow_green.png differ
diff --git a/images/right_arrow_gray.png b/images/right_arrow_gray.png
new file mode 100644
index 0000000..ecc1b9c
Binary files /dev/null and b/images/right_arrow_gray.png differ
diff --git a/images/right_arrow_green.png b/images/right_arrow_green.png
new file mode 100644
index 0000000..bbf0672
Binary files /dev/null and b/images/right_arrow_green.png differ
diff --git a/img.qrc b/img.qrc
new file mode 100644
index 0000000..09f45bd
--- /dev/null
+++ b/img.qrc
@@ -0,0 +1,8 @@
+
+
+ images/right_arrow_green.png
+ images/left_arrow_green.png
+ images/right_arrow_gray.png
+ images/left_arrow_gray.png
+
+
diff --git a/logo.ico b/logo.ico
new file mode 100644
index 0000000..fa2f84d
Binary files /dev/null and b/logo.ico differ
diff --git a/main.cpp b/main.cpp
new file mode 100644
index 0000000..d871ca9
--- /dev/null
+++ b/main.cpp
@@ -0,0 +1,13 @@
+
+#include "mainwindow.h"
+
+#include
+
+
+int main(int argc, char *argv[])
+{
+ QApplication a(argc, argv);
+ MainWindow w;
+ w.show();
+ return a.exec();
+}
diff --git a/mainwindow.cpp b/mainwindow.cpp
new file mode 100644
index 0000000..b38b9ce
--- /dev/null
+++ b/mainwindow.cpp
@@ -0,0 +1,22 @@
+
+#include "mainwindow.h"
+#include "ui_mainwindow.h"
+#include "serialConfigWidget.h"
+
+MainWindow::MainWindow(QWidget *parent)
+ : QMainWindow(parent)
+ , ui(new Ui::MainWindow)
+{
+ ui->setupUi(this);
+ this->setWindowTitle("串口转发工具V1.0");
+
+ QWidget *wdg = new SerialConfigWidget();
+ ui->verticalLayout->addWidget(wdg);
+}
+
+MainWindow::~MainWindow()
+{
+ delete ui;
+}
+
+
diff --git a/mainwindow.h b/mainwindow.h
new file mode 100644
index 0000000..1cafe77
--- /dev/null
+++ b/mainwindow.h
@@ -0,0 +1,26 @@
+
+#ifndef MAINWINDOW_H
+#define MAINWINDOW_H
+
+#include
+
+
+
+QT_BEGIN_NAMESPACE
+namespace Ui { class MainWindow; }
+QT_END_NAMESPACE
+
+class MainWindow : public QMainWindow
+
+{
+ Q_OBJECT
+
+public:
+ MainWindow(QWidget *parent = nullptr);
+ ~MainWindow();
+
+private:
+ Ui::MainWindow *ui;
+};
+
+#endif // MAINWINDOW_H
diff --git a/mainwindow.ui b/mainwindow.ui
new file mode 100644
index 0000000..71b774f
--- /dev/null
+++ b/mainwindow.ui
@@ -0,0 +1,42 @@
+
+
+ MainWindow
+
+
+
+ 0
+ 0
+ 555
+ 500
+
+
+
+ MainWindow
+
+
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+ -
+
+
+
+
+
+
+
+
+
diff --git a/serialConfigWidget.cpp b/serialConfigWidget.cpp
new file mode 100644
index 0000000..46bc72f
--- /dev/null
+++ b/serialConfigWidget.cpp
@@ -0,0 +1,169 @@
+#include "serialConfigWidget.h"
+#include "ui_serialConfigWidget.h"
+#include
+#include
+#include
+#include
+#include
+#include
+
+SerialConfigWidget::SerialConfigWidget(QWidget *parent) :
+ QWidget(parent),
+ ui(new Ui::SerialConfigWidget)
+{
+ ui->setupUi(this);
+ m_SerialPort1.connectReadEvent(this);
+ m_SerialPort2.connectReadEvent(this);
+ refreshCom();
+ connect(this,SIGNAL(displayTextSignal(QString)),this,SLOT(displayText(QString)),Qt::QueuedConnection);
+}
+
+SerialConfigWidget::~SerialConfigWidget()
+{
+ delete ui;
+}
+
+void SerialConfigWidget::refreshCom()
+{
+ QString currentTxt1 = ui->cmbCom1->currentText();
+ QString currentTxt2 = ui->cmbCom2->currentText();
+ QStringList nameList;
+ foreach(const QSerialPortInfo &info,QSerialPortInfo::availablePorts())
+ {
+ nameList.append(info.portName());
+ }
+ std::sort(nameList.begin(), nameList.end(), [&](QString &s1, QString &s2){
+ if(s1.size()==s2.size()){
+ return s1cmbCom1->clear();
+ ui->cmbCom1->addItems(nameList);
+ if(!currentTxt1.isEmpty()){
+ ui->cmbCom1->setCurrentText(currentTxt1);
+ }
+
+ ui->cmbCom2->clear();
+ ui->cmbCom2->addItems(nameList);
+ if(!currentTxt2.isEmpty()){
+ ui->cmbCom2->setCurrentText(currentTxt2);
+ }
+}
+
+void SerialConfigWidget::on_toolBtnRefresh_clicked()
+{
+ refreshCom();
+}
+
+
+void SerialConfigWidget::on_toolBtnOk_clicked()
+{
+ if(ui->toolBtnOk->isChecked()){
+ QString portName1 = ui->cmbCom1->currentText();
+ QString baud1 = ui->cmbBaud1->currentText();
+
+ m_SerialPort1.init(portName1.toStdString().c_str(),baud1.toInt(),
+ itas109::Parity::ParityNone,itas109::DataBits::DataBits8,
+ itas109::StopBits::StopOne);
+ m_SerialPort1.setReadIntervalTimeout(readIntervalTimeoutMS);
+ if(!m_SerialPort1.open()){
+ QMessageBox::warning(NULL,tr("警告"),portName1 + tr("打开错误") + QString("\n\ncode: %1\nmessage: %2").arg(
+ m_SerialPort1.getLastError()).arg(m_SerialPort1.getLastErrorMsg()));
+ ui->toolBtnOk->setChecked(false);
+ return ;
+ }
+
+ QString portName2 = ui->cmbCom2->currentText();
+ QString baud2 = ui->cmbBaud2->currentText();
+
+ m_SerialPort2.init(portName2.toStdString().c_str(),baud2.toInt(),
+ itas109::Parity::ParityNone,itas109::DataBits::DataBits8,
+ itas109::StopBits::StopOne);
+ m_SerialPort2.setReadIntervalTimeout(readIntervalTimeoutMS);
+ if(!m_SerialPort2.open()){
+ QMessageBox::warning(NULL,tr("警告"),portName2 + tr("打开错误") + QString("\n\ncode: %1\nmessage: %2").arg(
+ m_SerialPort2.getLastError()).arg(m_SerialPort2.getLastErrorMsg()));
+ m_SerialPort1.close();
+ ui->toolBtnOk->setChecked(false);
+ return ;
+ }
+
+ ui->toolBtnOk->setStyleSheet("color:green");
+ ui->cmbCom1->setDisabled(true);
+ ui->cmbBaud1->setDisabled(true);
+ ui->cmbCom2->setDisabled(true);
+ ui->cmbBaud2->setDisabled(true);
+ ui->toolBtnRefresh->setDisabled(true);
+ ui->toolBtnOk->setChecked(true);
+ }else{
+ m_SerialPort1.close();
+ m_SerialPort2.close();
+ ui->toolBtnOk->setStyleSheet("color:balck");
+ ui->cmbCom1->setEnabled(true);
+ ui->cmbBaud1->setEnabled(true);
+ ui->cmbCom2->setEnabled(true);
+ ui->cmbBaud2->setEnabled(true);
+ ui->toolBtnRefresh->setEnabled(true);
+ ui->toolBtnOk->setChecked(false);
+ }
+
+}
+
+void SerialConfigWidget::displayText(const QString &txt)
+{
+ ui->plainTextEdit->appendPlainText(txt.trimmed());
+}
+
+void SerialConfigWidget::onReadEvent(const char *portName, unsigned int readBufferLen)
+{
+ QMutexLocker locker(&mtx);
+ if(portName && std::strcmp(portName,m_SerialPort1.getPortName())==0){
+ int recLen = 0;
+ char * str = NULL;
+ str = new char[readBufferLen];
+ if(str){
+ recLen = m_SerialPort1.readData(str, readBufferLen);
+ }
+
+ if(str && recLen > 0)
+ {
+ // TODO: 中文需要由两个字符拼接,否则显示为空""
+ //QString m_str = QString::fromLocal8Bit(str,recLen);
+ //emitUpdateReceive(m_str);
+ m_SerialPort2.writeData(str,recLen);
+ QString txt = QString("%1:%2").arg(QString::fromLocal8Bit(portName,std::strlen(portName))).arg(QString::fromLocal8Bit(str,recLen));
+ emit displayTextSignal(txt);
+ }
+
+ if(str)
+ {
+ delete[] str;
+ str = NULL;
+ }
+ }else if(portName && std::strcmp(portName,m_SerialPort2.getPortName())==0){
+ int recLen = 0;
+ char * str = NULL;
+ str = new char[readBufferLen];
+ if(str){
+ recLen = m_SerialPort2.readData(str, readBufferLen);
+ }
+
+ if(str && recLen > 0)
+ {
+ // TODO: 中文需要由两个字符拼接,否则显示为空""
+ //QString m_str = QString::fromLocal8Bit(str,recLen);
+ //emitUpdateReceive(m_str);
+ m_SerialPort1.writeData(str,recLen);
+ QString txt = QString("%1:%2").arg(QString::fromLocal8Bit(portName,std::strlen(portName))).arg(QString::fromLocal8Bit(str,recLen));
+ emit displayTextSignal(txt);
+ }
+
+ if(str)
+ {
+ delete[] str;
+ str = NULL;
+ }
+ }
+}
+
diff --git a/serialConfigWidget.h b/serialConfigWidget.h
new file mode 100644
index 0000000..7e92db3
--- /dev/null
+++ b/serialConfigWidget.h
@@ -0,0 +1,41 @@
+#ifndef SERIALCONFIGWIDGET_H
+#define SERIALCONFIGWIDGET_H
+
+#include
+#include
+#include "CSerialPort/SerialPort.h"
+
+using namespace itas109;
+
+namespace Ui {
+class SerialConfigWidget;
+}
+
+class SerialConfigWidget : public QWidget ,public CSerialPortListener
+{
+ Q_OBJECT
+
+public:
+ explicit SerialConfigWidget(QWidget *parent = nullptr);
+ ~SerialConfigWidget();
+
+signals:
+ void displayTextSignal(const QString &txt);
+
+private slots:
+ void on_toolBtnRefresh_clicked();
+ void on_toolBtnOk_clicked();
+ void displayText(const QString &txt);
+
+private slots:
+ void onReadEvent(const char *portName, unsigned int readBufferLen) override;
+
+private:
+ Ui::SerialConfigWidget *ui;
+ CSerialPort m_SerialPort1,m_SerialPort2;
+ int readIntervalTimeoutMS = 50;
+ QMutex mtx;
+ void refreshCom();
+};
+
+#endif // SERIALCONFIGWIDGET_H
diff --git a/serialConfigWidget.ui b/serialConfigWidget.ui
new file mode 100644
index 0000000..3b5bc7f
--- /dev/null
+++ b/serialConfigWidget.ui
@@ -0,0 +1,284 @@
+
+
+ SerialConfigWidget
+
+
+
+ 0
+ 0
+ 702
+ 374
+
+
+
+
+ 0
+ 0
+
+
+
+ Form
+
+
+
+ 4
+
+
+ 4
+
+
+ 4
+
+
+ 4
+
+
+ 0
+
+ -
+
+
+ QGroupBox{border:none}
+
+
+
+
+
+ true
+
+
+
-
+
+
+ 串口号:
+
+
+
+ -
+
+
+ -
+
+
+ 波特率:
+
+
+
+ -
+
+
+ true
+
+
-
+
+ 115200
+
+
+ -
+
+ 230400
+
+
+ -
+
+ 460800
+
+
+ -
+
+ 921600
+
+
+
+
+
+
+
+ -
+
+
+ QGroupBox{border:none}
+
+
+
+
+
+ true
+
+
+
-
+
+
+ 串口号:
+
+
+
+ -
+
+
+ -
+
+
+ 波特率:
+
+
+
+ -
+
+
+ true
+
+
-
+
+ 115200
+
+
+ -
+
+ 230400
+
+
+ -
+
+ 460800
+
+
+ -
+
+ 921600
+
+
+
+
+
+
+
+ -
+
+
+ QGroupBox{border:none}
+
+
+
+
+
+
-
+
+
+ 刷新
+
+
+
+ -
+
+
+ 确定
+
+
+ true
+
+
+ false
+
+
+
+
+
+
+ -
+
+
+ QGroupBox{border:none}
+
+
+
+
+
+ false
+
+
+
+ 0
+
+
-
+
+
+
+ 0
+ 0
+
+
+
+
+ 40
+ 12
+
+
+
+
+ 40
+ 12
+
+
+
+ false
+
+
+
+
+
+ :/images/images/left_arrow_gray.png
+
+
+ true
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 40
+ 12
+
+
+
+
+ 40
+ 12
+
+
+
+
+
+
+ :/images/images/right_arrow_gray.png
+
+
+ true
+
+
+
+
+
+
+ -
+
+
+ 10000
+
+
+
+
+
+
+
+
+
+
diff --git a/serialTransferTool.pro b/serialTransferTool.pro
new file mode 100644
index 0000000..63f8011
--- /dev/null
+++ b/serialTransferTool.pro
@@ -0,0 +1,39 @@
+QT += core gui serialport
+
+greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
+
+CONFIG += c++17
+
+# You can make your code fail to compile if it uses deprecated APIs.
+# In order to do so, uncomment the following line.
+#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
+
+msvc{
+ QMAKE_CFLAGS += /utf-8
+ QMAKE_CXXFLAGS += /utf-8
+}
+
+include($$PWD/3rdparty/CSerialPort/examples/CommQT/commqt.pri)
+
+SOURCES += \
+ main.cpp \
+ mainwindow.cpp \
+ serialConfigWidget.cpp
+
+HEADERS += \
+ mainwindow.h \
+ serialConfigWidget.h
+
+FORMS += \
+ mainwindow.ui \
+ serialConfigWidget.ui
+
+# Default rules for deployment.
+qnx: target.path = /tmp/$${TARGET}/bin
+else: unix:!android: target.path = /opt/$${TARGET}/bin
+!isEmpty(target.path): INSTALLS += target
+
+RESOURCES += \
+ img.qrc
+
+RC_ICONS = logo.ico