Skip to content

Commit 809ad51

Browse files
committed
qt: read header and data separately to avoid mix of different packets
1 parent 5f07ed7 commit 809ad51

File tree

1 file changed

+16
-5
lines changed

1 file changed

+16
-5
lines changed

qt/programmer.cpp

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -244,7 +244,7 @@ int Programmer::readChip(uint8_t *buf, uint32_t addr, uint32_t len)
244244
int ret;
245245
uint8_t rx_buf[CDC_BUF_SIZE];
246246
RespHeader *dataResp;
247-
RespBadBlock *badBlock;
247+
RespBadBlock badBlock;
248248
uint32_t offset = 0;
249249
Cmd cmd = { .code = CMD_NAND_READ };
250250
ReadCmd readCmd = { .cmd = cmd, .addr = addr, .len = len };
@@ -255,7 +255,7 @@ int Programmer::readChip(uint8_t *buf, uint32_t addr, uint32_t len)
255255
while (len)
256256
{
257257
serialPort.waitForReadyRead(READ_WRITE_TIMEOUT_MS);
258-
ret = serialPort.read((char *)rx_buf, sizeof(rx_buf));
258+
ret = serialPort.read((char *)rx_buf, sizeof(RespHeader));
259259
if (ret < 0)
260260
{
261261
qCritical() << "Failed to read data " << serialPort.error()
@@ -275,9 +275,10 @@ int Programmer::readChip(uint8_t *buf, uint32_t addr, uint32_t len)
275275
{
276276
if (dataResp->info == STATUS_BAD_BLOCK)
277277
{
278-
badBlock = (RespBadBlock *)dataResp;
278+
if (readRespBadBlockAddress(&badBlock))
279+
return -1;
279280
qInfo() << "Bad block at" << QString("0x%1").
280-
arg(badBlock->addr, 8, 16, QLatin1Char('0'));
281+
arg(badBlock.addr, 8, 16, QLatin1Char('0'));
281282
}
282283
else
283284
return handleStatus(dataResp);
@@ -291,11 +292,21 @@ int Programmer::readChip(uint8_t *buf, uint32_t addr, uint32_t len)
291292
return -1;
292293
}
293294

294-
ret -= sizeof(RespHeader);
295+
serialPort.waitForReadyRead(READ_WRITE_TIMEOUT_MS);
296+
ret = serialPort.read((char *)dataResp->data, dataResp->info);
297+
if (ret < 0)
298+
{
299+
qCritical() << "Failed to read data " << serialPort.error()
300+
<< serialPort.errorString();
301+
return -1;
302+
}
303+
295304
if (dataResp->info != ret)
296305
{
297306
qCritical() << "Programmer error: expected to receive " <<
298307
dataResp->info << "but received" << ret << "Bytes";
308+
for (int i = 0; i < ret; i++)
309+
qInfo() << dataResp->data[i];
299310
return -1;
300311
}
301312

0 commit comments

Comments
 (0)