Skip to content

Commit ddc18c4

Browse files
committed
Implemented progress indication for read command
1 parent a91b414 commit ddc18c4

File tree

6 files changed

+38
-0
lines changed

6 files changed

+38
-0
lines changed

qt/main_window.cpp

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -299,9 +299,13 @@ void MainWindow::slotProgErase()
299299

300300
void MainWindow::slotProgReadCompleted(int status)
301301
{
302+
disconnect(prog, SIGNAL(readChipProgress(unsigned int)), this,
303+
SLOT(slotProgReadProgress(unsigned int)));
302304
disconnect(prog, SIGNAL(readChipCompleted(int)), this,
303305
SLOT(slotProgReadCompleted(int)));
304306

307+
setProgress(100);
308+
305309
if (status)
306310
{
307311
buffer.clear();
@@ -313,6 +317,16 @@ void MainWindow::slotProgReadCompleted(int status)
313317
static_cast<uint32_t>(buffer.size()));
314318
}
315319

320+
void MainWindow::slotProgReadProgress(unsigned int progress)
321+
{
322+
uint32_t progressPercent;
323+
int index = ui->chipSelectComboBox->currentIndex();
324+
uint32_t readSize = chipDb.sizeGetById(CHIP_INDEX2ID(index));
325+
326+
progressPercent = progress * 100ULL / readSize;
327+
setProgress(progressPercent);
328+
}
329+
316330
void MainWindow::slotProgRead()
317331
{
318332
int index = ui->chipSelectComboBox->currentIndex();
@@ -329,9 +343,12 @@ void MainWindow::slotProgRead()
329343
buffer.resize(static_cast<int>(readSize));
330344

331345
qInfo() << "Reading data ...";
346+
setProgress(0);
332347

333348
connect(prog, SIGNAL(readChipCompleted(int)), this,
334349
SLOT(slotProgReadCompleted(int)));
350+
connect(prog, SIGNAL(readChipProgress(unsigned int)), this,
351+
SLOT(slotProgReadProgress(unsigned int)));
335352

336353
prog->readChip(buffer.data(), START_ADDRESS, readSize, true);
337354
}

qt/main_window.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ private slots:
4242
void slotProgConnectCompleted(int status);
4343
void slotProgReadDeviceIdCompleted(int status);
4444
void slotProgReadCompleted(int status);
45+
void slotProgReadProgress(unsigned int progress);
4546
void slotProgWriteCompleted(int status);
4647
void slotProgEraseCompleted(int status);
4748
void slotProgEraseProgress(unsigned int progress);

qt/programmer.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -192,16 +192,25 @@ void Programmer::eraseChip(uint32_t addr, uint32_t len)
192192

193193
void Programmer::readCb(int ret)
194194
{
195+
QObject::disconnect(&reader, SIGNAL(progress(unsigned int)), this,
196+
SLOT(readProgressCb(unsigned int)));
195197
QObject::disconnect(&reader, SIGNAL(result(int)), this, SLOT(readCb(int)));
196198
emit readChipCompleted(ret);
197199
}
198200

201+
void Programmer::readProgressCb(unsigned int progress)
202+
{
203+
emit readChipProgress(progress);
204+
}
205+
199206
void Programmer::readChip(uint8_t *buf, uint32_t addr, uint32_t len,
200207
bool isReadLess)
201208
{
202209
ReadCmd readCmd;
203210

204211
QObject::connect(&reader, SIGNAL(result(int)), this, SLOT(readCb(int)));
212+
QObject::connect(&reader, SIGNAL(progress(unsigned int)), this,
213+
SLOT(readProgressCb(unsigned int)));
205214

206215
readCmd.cmd.code = CMD_NAND_READ;
207216
readCmd.addr = addr;

qt/programmer.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ class Programmer : public QObject
5858
void readChipIdCompleted(int ret);
5959
void writeChipCompleted(int ret);
6060
void readChipCompleted(int ret);
61+
void readChipProgress(unsigned int ret);
6162
void eraseChipCompleted(int ret);
6263
void eraseChipProgress(unsigned int progress);
6364
void readChipBadBlocksCompleted(int ret);
@@ -67,6 +68,7 @@ private slots:
6768
void readChipIdCb(int ret);
6869
void writeCb(int ret);
6970
void readCb(int ret);
71+
void readProgressCb(unsigned int progress);
7072
void eraseChipCb(int ret);
7173
void eraseProgressChipCb(unsigned int progress);
7274
void readChipBadBlocksCb(int ret);

qt/reader.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212

1313
#define READ_TIMEOUT 5000
1414
#define BUF_SIZE 4096
15+
#define NOTIFY_LIMIT 131072 // 128KB
1516

1617
Q_DECLARE_METATYPE(QtMsgType)
1718

@@ -29,6 +30,7 @@ void Reader::init(const QString &portName, qint32 baudRate, uint8_t *rbuf,
2930
this->isReadLess = isReadLess;
3031
readOffset = 0;
3132
bytesRead = 0;
33+
bytesReadNotified = 0;
3234
}
3335

3436
int Reader::write(const uint8_t *data, uint32_t len)
@@ -241,6 +243,12 @@ int Reader::readData()
241243

242244
if ((offset = handlePackets(pbuf, static_cast<uint32_t>(len))) < 0)
243245
return -1;
246+
247+
if (bytesRead >= bytesReadNotified + NOTIFY_LIMIT)
248+
{
249+
emit progress(bytesRead);
250+
bytesReadNotified = bytesRead;
251+
}
244252
}
245253
while (!bytesRead || (rlen && rlen != bytesRead));
246254

qt/reader.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ class Reader : public QThread
2222
uint32_t wlen;
2323
uint32_t readOffset;
2424
uint32_t bytesRead;
25+
uint32_t bytesReadNotified;
2526
bool isSkipBB;
2627
bool isReadLess;
2728

0 commit comments

Comments
 (0)