Skip to content

Commit c81da81

Browse files
committed
qt: chip selected command changed to use async read/write
1 parent 716531c commit c81da81

File tree

4 files changed

+47
-15
lines changed

4 files changed

+47
-15
lines changed

qt/main_window.cpp

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -265,8 +265,13 @@ void MainWindow::slotProgWrite()
265265
qInfo() << "Data has been successfully written";
266266
}
267267

268+
void MainWindow::selectChipCb()
269+
{
270+
qInfo() << "Chip has been selected successfully";
271+
}
272+
268273
void MainWindow::slotSelectChip(int selectedChipNum)
269274
{
270-
if (!prog->selectChip(selectedChipNum))
271-
qInfo() << "Chip successfully set";
275+
prog->selectChip(std::bind(&MainWindow::selectChipCb, this),
276+
selectedChipNum);
272277
}

qt/main_window.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ class MainWindow : public QMainWindow
2828
void insertBufferRow(quint8 *readBuf, quint32 size, quint32 rowNum,
2929
quint32 address);
3030
void readChipIdCb(ChipId id);
31+
void selectChipCb();
3132

3233
public slots:
3334
void slotFileOpen();

qt/programmer.cpp

Lines changed: 36 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -488,27 +488,51 @@ int Programmer::writeChip(uint8_t *buf, uint32_t addr, uint32_t len)
488488
return 0;
489489
}
490490

491-
int Programmer::selectChip(uint32_t chipNum)
491+
void Programmer::readRespSelectChipCb(int status)
492492
{
493-
RespHeader resp;
494-
Cmd cmd = { .code = CMD_NAND_SELECT };
495-
SelectCmd selectCmd = { .cmd = cmd, .chipNum = chipNum };
493+
uint size;
494+
RespHeader *header;
496495

497-
if (sendCmd(&selectCmd.cmd, sizeof(SelectCmd)))
498-
return -1;
496+
if (status == SerialPortReader::READ_ERROR)
497+
return;
499498

500-
if (readRespHead(&resp))
501-
return -1;
499+
size = readData.size();
500+
if (size < sizeof(RespHeader))
501+
{
502+
qCritical() << "Header size of chip ID response is wrong:" << size;
503+
return;
504+
}
502505

503-
switch (resp.code)
506+
header = (RespHeader *)readData.data();
507+
switch (header->code)
504508
{
505509
case RESP_STATUS:
506-
return handleStatus(&resp);
510+
if (header->info == STATUS_OK)
511+
selectChipCb();
512+
else
513+
qCritical() << "Programmer error: failed to select chip";
514+
break;
507515
default:
508-
return handleWrongResp(resp.code);
516+
handleWrongResp(header->code);
517+
break;
509518
}
519+
}
510520

511-
return 0;
521+
void Programmer::selectChip(std::function<void(void)> callback,
522+
uint32_t chipNum)
523+
{
524+
Cmd cmd = { .code = CMD_NAND_SELECT };
525+
SelectCmd selectCmd = { .cmd = cmd, .chipNum = chipNum };
526+
527+
readData.clear();
528+
serialPortReader->read(std::bind(&Programmer::readRespSelectChipCb, this,
529+
std::placeholders::_1), &readData);
530+
531+
selectChipCb = callback;
532+
writeData.clear();
533+
writeData.append((const char *)&selectCmd, sizeof(selectCmd));
534+
serialPortWriter->write(std::bind(&Programmer::sendCmdCb, this,
535+
std::placeholders::_1), &writeData);
512536
}
513537

514538

qt/programmer.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,12 +117,14 @@ class Programmer : public QObject
117117
QSerialPort serialPort;
118118
bool isConn;
119119
std::function<void(ChipId)> readChipIdCb;
120+
std::function<void(void)> selectChipCb;
120121

121122
int sendCmd(Cmd *cmd, size_t size);
122123
void sendCmdCb(int status);
123124
int readRespHead(RespHeader *respHead);
124125
int readRespBadBlockAddress(RespBadBlock *badBlock);
125126
void readRespChipIdCb(int status);
127+
void readRespSelectChipCb(int status);
126128
int handleStatus(RespHeader *respHead);
127129
int handleWrongResp(uint8_t code);
128130
public:
@@ -140,7 +142,7 @@ class Programmer : public QObject
140142
int eraseChip(uint32_t addr, uint32_t len);
141143
int readChip(uint8_t *buf, uint32_t addr, uint32_t len);
142144
int writeChip(uint8_t *buf, uint32_t addr, uint32_t len);
143-
int selectChip(uint32_t chipNum);
145+
void selectChip(std::function<void(void)> callback, uint32_t chipNum);
144146
};
145147

146148
#endif // PROGRAMMER_H

0 commit comments

Comments
 (0)