diff --git a/src/VehicleSetup/Bootloader.cc b/src/VehicleSetup/Bootloader.cc index 86138b60c0a78405107ae277920651d05277bcd7..3be196732e9c96df1fc3385c97b4dd5c9f324335 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 c4449afed29bc1db01c6208a94b4115af0bb1f90..2facbf772a2ba618600e24b0a838027839afe19c 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);