Skip to content

Commit b58aed8

Browse files
committed
qt: Refactored Select command to use thread and removed unused functions
1 parent f386cf8 commit b58aed8

9 files changed

+29
-423
lines changed

qt/main_window.cpp

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -271,14 +271,21 @@ void MainWindow::slotProgWrite()
271271
prog->writeChip(buffer, START_ADDRESS, bufferSize, pageSize);
272272
}
273273

274-
void MainWindow::selectChipCb()
274+
void MainWindow::slotProgSelectCompleted(int status)
275275
{
276-
qInfo() << "Chip has been selected successfully";
276+
disconnect(prog, SIGNAL(selectChipCompleted(int)), this,
277+
SLOT(slotProgSelectCompleted(int)));
278+
279+
if (!status)
280+
qInfo() << "Chip has been selected successfully";
277281
}
278282

279283
void MainWindow::slotSelectChip(int selectedChipNum)
280284
{
281285
this->selectedChipNum = selectedChipNum;
282-
prog->selectChip(std::bind(&MainWindow::selectChipCb, this),
283-
selectedChipNum);
286+
287+
connect(prog, SIGNAL(selectChipCompleted(int)), this,
288+
SLOT(slotProgSelectCompleted(int)));
289+
290+
prog->selectChip(selectedChipNum);
284291
}

qt/main_window.h

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -34,17 +34,12 @@ class MainWindow : public QMainWindow
3434
void initBufTable();
3535
void resetBufTable();
3636

37-
void readChipIdCb(ChipId id);
38-
void selectChipCb();
39-
void eraseChipCb();
40-
void readChipCb(int status);
41-
void writeChipCb(int status);
42-
4337
private slots:
4438
void slotProgReadDeviceIdCompleted(int status);
4539
void slotProgReadCompleted(int status);
4640
void slotProgWriteCompleted(int status);
4741
void slotProgEraseCompleted(int status);
42+
void slotProgSelectCompleted(int status);
4843

4944
public slots:
5045
void slotFileOpen();

qt/programmer.cpp

Lines changed: 14 additions & 83 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,6 @@
1616

1717
Programmer::Programmer(QObject *parent) : QObject(parent)
1818
{
19-
serialPortReader = new SerialPortReader(&serialPort, this);
20-
serialPortWriter = new SerialPortWriter(&serialPort, this);
2119
}
2220

2321
Programmer::~Programmer()
@@ -67,56 +65,6 @@ bool Programmer::isConnected()
6765
return isConn;
6866
}
6967

70-
int Programmer::handleStatus(RespHeader *respHead)
71-
{
72-
switch (respHead->info)
73-
{
74-
case STATUS_OK:
75-
break;
76-
case STATUS_ERROR:
77-
qCritical() << "Programmer command failed";
78-
return -1;
79-
default:
80-
qCritical() << "Programmer returned unknown status code" << respHead->info;
81-
return -1;
82-
}
83-
84-
return 0;
85-
}
86-
87-
int Programmer::handleWrongResp(uint8_t code)
88-
{
89-
qCritical() << "Programmer returned wrong response code: " << code;
90-
return -1;
91-
}
92-
93-
int Programmer::readRespHeader(const QByteArray *data, uint32_t offset,
94-
RespHeader *&header)
95-
{
96-
uint size = data->size();
97-
uint bytes_left = size - offset;
98-
99-
if (bytes_left < sizeof(RespHeader))
100-
{
101-
qCritical() << "Programmer error: response header size is wrong:"
102-
<< bytes_left;
103-
return -1;
104-
}
105-
106-
header = (RespHeader *)(data->data() + offset);
107-
108-
return 0;
109-
}
110-
111-
void Programmer::sendCmdCb(int status)
112-
{
113-
if (status != SerialPortWriter::WRITE_OK)
114-
{
115-
serialPortReader->readCancel();
116-
return;
117-
}
118-
}
119-
12068
void Programmer::readChipIdCb(int ret)
12169
{
12270
emit readChipIdCompleted(ret);
@@ -207,46 +155,29 @@ void Programmer::writeChip(uint8_t *buf, uint32_t addr, uint32_t len,
207155
writer.start();
208156
}
209157

210-
void Programmer::readRespSelectChipCb(int status)
158+
void Programmer::selectChipCb(int ret)
211159
{
212-
RespHeader *header;
213-
214-
if (status == SerialPortReader::READ_ERROR)
215-
return;
216-
217-
if (readRespHeader(&readData, 0, header))
218-
return;
219-
220-
switch (header->code)
221-
{
222-
case RESP_STATUS:
223-
if (header->info == STATUS_OK)
224-
selectChipCb();
225-
else
226-
qCritical() << "Programmer error: failed to select chip";
227-
break;
228-
default:
229-
handleWrongResp(header->code);
230-
break;
231-
}
160+
QObject::disconnect(&reader, SIGNAL(result(int)), this,
161+
SLOT(selectChipCb(int)));
162+
serialPortConnect();
163+
emit selectChipCompleted(ret);
232164
}
233165

234-
void Programmer::selectChip(std::function<void(void)> callback,
235-
uint32_t chipNum)
166+
void Programmer::selectChip(uint32_t chipNum)
236167
{
237168
Cmd cmd = { .code = CMD_NAND_SELECT };
238169
SelectCmd selectCmd = { .cmd = cmd, .chipNum = chipNum };
239170

240-
readData.clear();
241-
serialPortReader->read(std::bind(&Programmer::readRespSelectChipCb, this,
242-
std::placeholders::_1), &readData, READ_TIMEOUT_MS,
243-
sizeof(RespHeader));
171+
QObject::connect(&reader, SIGNAL(result(int)), this,
172+
SLOT(selectChipCb(int)));
244173

245-
selectChipCb = callback;
174+
/* Serial port object cannot be used in other thread */
175+
serialPortDisconnect();
246176
writeData.clear();
247-
writeData.append((const char *)&selectCmd, sizeof(selectCmd));
248-
serialPortWriter->write(std::bind(&Programmer::sendCmdCb, this,
249-
std::placeholders::_1), &writeData);
177+
writeData.append((const char *)&selectCmd, sizeof(SelectCmd));
178+
reader.init(CDC_DEV_NAME, SERIAL_PORT_SPEED, NULL, 0,
179+
(uint8_t *)writeData.constData(), writeData.size());
180+
reader.start();
250181
}
251182

252183

qt/programmer.h

Lines changed: 3 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,7 @@
99
#include <QObject>
1010
#include <QtSerialPort/QSerialPort>
1111
#include <QByteArray>
12-
#include <QTimer>
1312
#include <cstdint>
14-
#include <functional>
15-
#include "serial_port_writer.h"
16-
#include "serial_port_reader.h"
1713
#include "writer.h"
1814
#include "reader.h"
1915
#include "cmd.h"
@@ -27,36 +23,13 @@ class Programmer : public QObject
2723
QSerialPort serialPort;
2824
Writer writer;
2925
Reader reader;
30-
QThread *currThread;
3126
bool isConn;
32-
std::function<void(void)> selectChipCb;
33-
uint8_t *readChipBuf;
34-
uint32_t readChipLen;
35-
uint8_t *writeChipBuf;
36-
uint32_t writeSentBytes;
37-
uint32_t writeRemainingBytes;
38-
uint32_t writeAckBytes;
39-
uint32_t writeAckBytesLim;
40-
uint32_t writeLen;
41-
bool isWriteInProgress;
42-
bool isReadError;
43-
bool schedWrite;
4427

45-
void sendCmdCb(int status);
46-
int readRespHeader(const QByteArray *data, uint32_t offset,
47-
RespHeader *&header);
48-
void readRespSelectChipCb(int status);
49-
int handleStatus(RespHeader *respHead);
50-
int handleWrongResp(uint8_t code);
51-
int handleBadBlock(QByteArray *data, uint32_t offset);
5228
int serialPortConnect();
5329
void serialPortDisconnect();
5430

5531
public:
56-
QByteArray readData;
5732
QByteArray writeData;
58-
SerialPortWriter *serialPortWriter;
59-
SerialPortReader *serialPortReader;
6033

6134
explicit Programmer(QObject *parent = 0);
6235
~Programmer();
@@ -68,19 +41,21 @@ class Programmer : public QObject
6841
void readChip(uint8_t *buf, uint32_t addr, uint32_t len);
6942
void writeChip(uint8_t *buf, uint32_t addr, uint32_t len,
7043
uint32_t pageSize);
71-
void selectChip(std::function<void(void)> callback, uint32_t chipNum);
44+
void selectChip(uint32_t chipNum);
7245

7346
signals:
7447
void readChipIdCompleted(int ret);
7548
void writeChipCompleted(int ret);
7649
void readChipCompleted(int ret);
7750
void eraseChipCompleted(int ret);
51+
void selectChipCompleted(int ret);
7852

7953
private slots:
8054
void readChipIdCb(int ret);
8155
void writeCb(int ret);
8256
void readCb(int ret);
8357
void eraseChipCb(int ret);
58+
void selectChipCb(int ret);
8459
};
8560

8661
#endif // PROGRAMMER_H

qt/qt.pro

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,6 @@ SOURCES += main.cpp\
2121
main_window.cpp \
2222
programmer.cpp \
2323
chip_db.cpp \
24-
serial_port_writer.cpp \
25-
serial_port_reader.cpp \
2624
logger.cpp \
2725
buffer_table_model.cpp \
2826
writer.cpp \
@@ -31,8 +29,6 @@ SOURCES += main.cpp\
3129
HEADERS += main_window.h \
3230
programmer.h \
3331
chip_db.h \
34-
serial_port_writer.h \
35-
serial_port_reader.h \
3632
logger.h \
3733
buffer_table_model.h \
3834
cmd.h \

qt/serial_port_reader.cpp

Lines changed: 0 additions & 87 deletions
This file was deleted.

0 commit comments

Comments
 (0)