Skip to content

Commit c5a8ece

Browse files
committed
Modify Serial
1 parent b73661b commit c5a8ece

7 files changed

+83
-59
lines changed

Serial

ShellerTerminal.pro

+6-14
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,17 @@ CONFIG += c++11
99
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
1010

1111
SOURCES += \
12+
../../Libs/serial/serial.cpp \
13+
../../Libs/sheller/Source/crc.c \
14+
../../Libs/sheller/Source/sheller.c \
1215
core.cpp \
1316
main.cpp \
1417
mainwindow.cpp
1518

1619
HEADERS += \
20+
../../Libs/serial/serial.h \
21+
../../Libs/sheller/Source/crc.h \
22+
../../Libs/sheller/Source/sheller.h \
1723
core.h \
1824
mainwindow.h
1925

@@ -24,17 +30,3 @@ FORMS += \
2430
qnx: target.path = /tmp/$${TARGET}/bin
2531
else: unix:!android: target.path = /opt/$${TARGET}/bin
2632
!isEmpty(target.path): INSTALLS += target
27-
28-
# Serial as external static library
29-
win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../../Libs/serial/build/release/ -lserial
30-
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../../Libs/serial/build/debug/ -lserial
31-
else:unix: LIBS += -L$$PWD/../../Libs/serial/build/ -lserial
32-
33-
INCLUDEPATH += $$PWD/../../Libs/serial
34-
DEPENDPATH += $$PWD/../../Libs/serial
35-
36-
win32-g++:CONFIG(release, debug|release): PRE_TARGETDEPS += $$PWD/../../Libs/serial/build/release/libserial.a
37-
else:win32-g++:CONFIG(debug, debug|release): PRE_TARGETDEPS += $$PWD/../../Libs/serial/build/debug/libserial.a
38-
else:win32:!win32-g++:CONFIG(release, debug|release): PRE_TARGETDEPS += $$PWD/../../Libs/serial/build/release/serial.lib
39-
else:win32:!win32-g++:CONFIG(debug, debug|release): PRE_TARGETDEPS += $$PWD/../../Libs/serial/build/debug/serial.lib
40-
else:unix: PRE_TARGETDEPS += $$PWD/../../Libs/serial/build/libserial.a

core.cpp

+11-18
Original file line numberDiff line numberDiff line change
@@ -1,46 +1,39 @@
11
#include "core.h"
22

3-
#include <QDebug>
4-
#include <QThread>
5-
63
Core::Core()
74
{
8-
qDebug() << "Core::constructor called";
5+
serial = new Serial;
6+
serial->moveToThread(&serialThread);
7+
connect(&serialThread, &QThread::started, serial, &Serial::loop);
8+
serialThread.start();
99
}
1010

1111
Core::~Core()
1212
{
13-
serial->quit();
14-
serial->wait();
13+
serial->disableLoop();
14+
serialThread.quit();
15+
serialThread.wait();
1516
delete serial;
1617
}
1718

18-
void Core::run()
19+
void Core::loop()
1920
{
20-
qDebug() << "Core::run begin";
21-
serial = new Serial;
22-
serial->start();
23-
24-
while(runEnabled) {
21+
while(loopEnabled) {
2522
if (!serial->isEmpty()) {
2623
QByteArray recvData = serial->read();
27-
qDebug() << "BL: Receive: " << recvData.toHex('.');
2824
emit appendReceivedData(recvData);
2925
}
3026
QThread().currentThread()->msleep(1);
3127
}
32-
33-
qDebug() << "Core::run end";
3428
}
3529

3630
Serial *Core::getSerial()
3731
{
3832
return serial;
3933
}
4034

41-
void Core::quit()
35+
void Core::disableLoop()
4236
{
43-
qDebug() << "Core::quit called";
44-
runEnabled = false;
37+
loopEnabled = false;
4538
}
4639

core.h

+9-7
Original file line numberDiff line numberDiff line change
@@ -2,28 +2,30 @@
22
#define CORE_H
33

44
#include <QTimer>
5+
#include <QDebug>
56
#include <QThread>
67
#include <QObject>
78

8-
#include "serial.h"
9+
#include "../../Libs/serial/serial.h"
910

10-
class Core : public QThread
11+
class Core : public QObject
1112
{
1213
Q_OBJECT
1314

14-
Serial *serial = nullptr;
15-
bool runEnabled = true;
15+
bool loopEnabled = true;
16+
17+
Serial *serial = nullptr;
18+
QThread serialThread;
1619

1720
public:
1821
Core();
1922
~Core();
2023

21-
void run() override;
22-
24+
void loop();
2325
Serial *getSerial();
2426

2527
public slots:
26-
void quit();
28+
void disableLoop();
2729

2830
signals:
2931
void appendReceivedData(QByteArray data);

mainwindow.cpp

+48-14
Original file line numberDiff line numberDiff line change
@@ -4,68 +4,104 @@
44
#include <QDebug>
55
#include <QSerialPortInfo>
66

7+
void MainWindow::configApp()
8+
{
9+
10+
}
11+
712
MainWindow::MainWindow(QWidget *parent)
813
: QMainWindow(parent)
914
, ui(new Ui::MainWindow)
1015
{
1116
ui->setupUi(this);
1217

13-
core = new Core();
18+
setWindowIcon(QIcon("ShellerIcon.ico"));
19+
setFixedSize(QSize(550, 450));
1420

15-
core->start();
21+
QtConcurrent::run(this, &MainWindow::configApp);
22+
23+
core = new Core();
24+
core->moveToThread(&coreThread);
25+
QObject::connect(&coreThread, &QThread::started, core, &Core::loop);
1626
QObject::connect(core, &Core::appendReceivedData, this, &MainWindow::displayData);
27+
coreThread.start();
1728

1829
updateSerialPortsFuture = QtConcurrent::run(this, &MainWindow::updateSerialPortsNames);
19-
20-
setWindowIcon(QIcon("ShellerIcon.ico"));
21-
setFixedSize(QSize(500, 450));
2230
}
2331

2432
MainWindow::~MainWindow()
2533
{
34+
core->disableLoop();
35+
coreThread.quit();
36+
coreThread.wait();
37+
delete core;
38+
2639
continueUpdatedSerialPorts = false;
2740
updateSerialPortsFuture.waitForFinished();
2841

29-
core->quit();
30-
core->wait();
31-
32-
delete core;
3342
delete ui;
3443
}
3544

3645
void MainWindow::on_serialButton_clicked()
3746
{
3847
if (ui->serialButton->text() == "Connect") {
39-
if (core->getSerial()->connectTo(ui->serialName_ComboBox->currentText(), ui->serialSpeed_ComboBox->currentText())) {
40-
qDebug() << "SerialPorts successffull open";
48+
QString portName = ui->serialName_ComboBox->currentText();
49+
QString portSpeed = ui->serialSpeed_ComboBox->currentText();
50+
51+
core->getSerial()->setSheller(ui->spinBox->value(), ui->spinBox_2->value(), ui->spinBox_3->value());
52+
if (core->getSerial()->connectTo(portName, portSpeed)) {
4153
ui->serialButton->setText("Disconnect");
54+
ui->statusBar->showMessage("Connected to " + portName + " with speed " + portSpeed);
55+
ui->serialName_ComboBox->setEnabled(false);
56+
ui->serialSpeed_ComboBox->setEnabled(false);
57+
58+
ui->spinBox->setEnabled(false);
59+
ui->spinBox_2->setEnabled(false);
60+
ui->spinBox_3->setEnabled(false);
4261
}
4362
} else {
4463
core->getSerial()->disconnect();
4564
ui->serialButton->setText("Connect");
65+
ui->serialName_ComboBox->setEnabled(true);
66+
ui->serialSpeed_ComboBox->setEnabled(true);
67+
ui->spinBox->setEnabled(true);
68+
ui->spinBox_2->setEnabled(true);
69+
ui->spinBox_3->setEnabled(true);
4670
}
4771
}
4872

4973
void MainWindow::updateSerialPortsNames()
5074
{
5175
while(continueUpdatedSerialPorts) {
5276
static clock_t time = clock();
53-
if ((clock() - time) >= 1000) {
77+
if ((clock() - time) >= 100) {
5478
time = clock();
5579
auto info = QSerialPortInfo::availablePorts();
80+
QString portNamesString = "Available ports: ";
5681
QList<QString> currentPortsNames;
5782
for (auto &el: info) {
83+
portNamesString += el.portName() + " ";
5884
currentPortsNames.push_back(el.portName());
5985
}
6086

87+
if (!core->getSerial()->isConnected()) {
88+
if (info.size()) {
89+
ui->statusBar->showMessage(portNamesString);
90+
} else {
91+
ui->statusBar->showMessage("Not available ports");
92+
}
93+
}
94+
6195
if (currentPortsNames != portsNames) {
6296
portsNames = currentPortsNames;
97+
ui->serialName_ComboBox->setCurrentIndex(-1);
6398
ui->serialName_ComboBox->clear();
6499
if (currentPortsNames.size() > 0) {
65100
ui->serialName_ComboBox->addItems(currentPortsNames);
66101
ui->serialName_ComboBox->setCurrentIndex(0);
67102
}
68103
}
104+
69105
}
70106
QThread().currentThread()->msleep(1);
71107
}
@@ -117,9 +153,7 @@ void MainWindow::displayData(QByteArray data)
117153
ui->textEdit->append(data.toHex('.'));
118154
}
119155

120-
121156
void MainWindow::on_pushButton_3_clicked()
122157
{
123158
ui->textEdit->clear();
124159
}
125-

mainwindow.h

+3-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
#include <QtConcurrent/QtConcurrent>
66

77
#include "core.h"
8-
#include "serial.h"
98

109
QT_BEGIN_NAMESPACE
1110
namespace Ui { class MainWindow; }
@@ -16,12 +15,15 @@ class MainWindow : public QMainWindow
1615
Q_OBJECT
1716

1817
Core *core = nullptr;
18+
QThread coreThread;
19+
1920

2021
QList<QString> portsNames;
2122
bool continueUpdatedSerialPorts = true;
2223
QFuture<void> updateSerialPortsFuture;
2324
void updateSerialPortsNames();
2425

26+
void configApp();
2527

2628
public:
2729
MainWindow(QWidget *parent = nullptr);

mainwindow.ui

+5-4
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
<rect>
1010
<x>0</x>
1111
<y>0</y>
12-
<width>500</width>
12+
<width>539</width>
1313
<height>450</height>
1414
</rect>
1515
</property>
@@ -211,7 +211,7 @@
211211
<item>
212212
<widget class="QSpinBox" name="spinBox_2">
213213
<property name="minimum">
214-
<number>8</number>
214+
<number>2</number>
215215
</property>
216216
<property name="maximum">
217217
<number>64</number>
@@ -360,11 +360,12 @@
360360
<rect>
361361
<x>0</x>
362362
<y>0</y>
363-
<width>500</width>
364-
<height>26</height>
363+
<width>539</width>
364+
<height>21</height>
365365
</rect>
366366
</property>
367367
</widget>
368+
<widget class="QStatusBar" name="statusBar"/>
368369
</widget>
369370
<resources/>
370371
<connections/>

0 commit comments

Comments
 (0)