From 5b22bf8744dd2aeebb931a99b2efb0117a0e7e8a Mon Sep 17 00:00:00 2001 From: Don Gagne Date: Mon, 6 Jul 2020 09:48:40 -0700 Subject: [PATCH] Fix crash --- src/VehicleSetup/Bootloader.cc | 40 +++++++++++++++------------------- src/VehicleSetup/Bootloader.h | 2 +- 2 files changed, 18 insertions(+), 24 deletions(-) diff --git a/src/VehicleSetup/Bootloader.cc b/src/VehicleSetup/Bootloader.cc index 86138b60c..3be196732 100644 --- a/src/VehicleSetup/Bootloader.cc +++ b/src/VehicleSetup/Bootloader.cc @@ -51,33 +51,27 @@ bool Bootloader::_write(QSerialPort* port, const uint8_t byte) return _write(port, buf, 1); } -bool Bootloader::_read(QSerialPort* port, uint8_t* data, qint64 maxSize, int readTimeout) +bool Bootloader::_read(QSerialPort* port, uint8_t* data, qint64 cBytesExpected, int readTimeout) { - qint64 bytesAlreadyRead = 0; - - while (bytesAlreadyRead < maxSize) { - QElapsedTimer timeout; - timeout.start(); - while (port->bytesAvailable() < 1) { - if (timeout.elapsed() > readTimeout) { - _errorString = tr("Timeout waiting for bytes to be available"); - return false; - } - port->waitForReadyRead(100); - } - - qint64 bytesRead; - bytesRead = port->read((char*)&data[bytesAlreadyRead], maxSize); - - if (bytesRead == -1) { - _errorString = tr("Read failed: error: %1").arg(port->errorString()); + QElapsedTimer timeout; + + timeout.start(); + while (port->bytesAvailable() < cBytesExpected) { + if (timeout.elapsed() > readTimeout) { + _errorString = tr("Timeout waiting for bytes to be available"); return false; - } else { - Q_ASSERT(bytesRead != 0); - bytesAlreadyRead += bytesRead; } + port->waitForReadyRead(100); } - + + qint64 bytesRead; + bytesRead = port->read((char *)data, cBytesExpected); + + if (bytesRead != cBytesExpected) { + _errorString = tr("Read failed: error: %1").arg(port->errorString()); + return false; + } + return true; } diff --git a/src/VehicleSetup/Bootloader.h b/src/VehicleSetup/Bootloader.h index c4449afed..2facbf772 100644 --- a/src/VehicleSetup/Bootloader.h +++ b/src/VehicleSetup/Bootloader.h @@ -96,7 +96,7 @@ private: bool _write(QSerialPort* port, const uint8_t* data, qint64 maxSize); bool _write(QSerialPort* port, const uint8_t byte); - bool _read(QSerialPort* port, uint8_t* data, qint64 maxSize, int readTimeout = _readTimout); + bool _read(QSerialPort* port, uint8_t* data, qint64 cBytesExpected, int readTimeout = _readTimout); bool _sendCommand(QSerialPort* port, uint8_t cmd, int responseTimeout = _responseTimeout); bool _getCommandResponse(QSerialPort* port, const int responseTimeout = _responseTimeout); -- 2.22.0