Commit 8c58db2f authored by Lorenz Meier's avatar Lorenz Meier

Merge pull request #907 from DonLakeFlyer/FlashFix

More stability changes
parents e1616d01 c12df96f
......@@ -119,6 +119,12 @@ Again:
bool PX4Bootloader::write(QSerialPort* port, const uint8_t* data, qint64 maxSize)
{
// Make sure we don't overflow output buffer
while (port->bytesToWrite() > 50) {
int bump = 0;
bump++;
}
qint64 bytesWritten = port->write((const char*)data, maxSize);
if (bytesWritten == -1) {
_errorString = tr("Write failed: %1").arg(port->errorString());
......@@ -147,34 +153,35 @@ bool PX4Bootloader::write(QSerialPort* port, const uint8_t byte)
bool PX4Bootloader::read(QSerialPort* port, uint8_t* data, qint64 maxSize, bool warnOnError, int readTimeout)
{
qint64 bytesRead;
if (port->bytesAvailable() < maxSize) {
if (!port->waitForReadyRead(readTimeout)) {
_errorString = tr("Timeout waiting for read bytes available: %1").arg(port->errorString());
qint64 bytesToRead = 0;
while (bytesToRead < maxSize) {
if (port->bytesAvailable() == 0) {
if (!port->waitForReadyRead(readTimeout)) {
_errorString = tr("Timeout waiting for byte to be available");
if (warnOnError) {
qWarning() << _errorString;
}
return false;
}
Q_ASSERT(port->bytesAvailable() != 0);
}
qint64 bytesRead;
bytesRead = port->read((char*)&data[bytesToRead], maxSize);
if (bytesRead == -1) {
_errorString = tr("Read failed: Could not read 1 byte, error: %1").arg(port->errorString());
if (warnOnError) {
qWarning() << _errorString;
}
return false;
} else {
Q_ASSERT(bytesRead != 0);
bytesToRead += bytesRead;
}
}
bytesRead = port->read((char*)data, maxSize);
if (bytesRead == -1) {
_errorString = tr("Read failed: Could not read %1 resonse, error: 12").arg(port->errorString());
if (warnOnError) {
qWarning() << _errorString;
}
return false;
}
if (bytesRead != maxSize) {
_errorString = tr("In correct number of bytes returned for read: actual(%1) expected(%2)").arg(bytesRead).arg(maxSize);
if (warnOnError) {
qWarning() << _errorString;
}
return false;
}
return true;
}
......
......@@ -144,7 +144,7 @@ void PX4FirmwareUpgradeThreadWorker::_findBootloaderOnce(void)
} else {
_closeFind();
_bootloaderPort->close();
delete _bootloaderPort;
_bootloaderPort->deleteLater();
_bootloaderPort = NULL;
qDebug() << "Bootloader error:" << _bootloader->errorString();
emit error(commandBootloader, _bootloader->errorString());
......@@ -153,7 +153,7 @@ void PX4FirmwareUpgradeThreadWorker::_findBootloaderOnce(void)
} else {
_closeFind();
_bootloaderPort->close();
delete _bootloaderPort;
_bootloaderPort->deleteLater();
_bootloaderPort = NULL;
qDebug() << "Bootloader sync failed";
emit bootloaderSyncFailed();
......@@ -189,7 +189,7 @@ void PX4FirmwareUpgradeThreadWorker::timeout(void)
void PX4FirmwareUpgradeThreadWorker::sendBootloaderReboot(void)
{
_bootloader->sendBootloaderReboot(_bootloaderPort);
delete _bootloaderPort;
_bootloaderPort->deleteLater();
_bootloaderPort = NULL;
}
......@@ -197,7 +197,7 @@ void PX4FirmwareUpgradeThreadWorker::program(const QString firmwareFilename)
{
qDebug() << "Program";
if (!_bootloader->program(_bootloaderPort, firmwareFilename)) {
delete _bootloaderPort;
_bootloaderPort->deleteLater();
_bootloaderPort = NULL;
qDebug() << "Program failed:" << _bootloader->errorString();
emit error(commandProgram, _bootloader->errorString());
......@@ -217,7 +217,7 @@ void PX4FirmwareUpgradeThreadWorker::verify(const QString firmwareFilename)
qDebug() << "Verify complete";
emit complete(commandVerify);
}
delete _bootloaderPort;
_bootloaderPort->deleteLater();
_bootloaderPort = NULL;
}
......@@ -225,7 +225,7 @@ void PX4FirmwareUpgradeThreadWorker::erase(void)
{
qDebug() << "Erase";
if (!_bootloader->erase(_bootloaderPort)) {
delete _bootloaderPort;
_bootloaderPort->deleteLater();
_bootloaderPort = NULL;
qDebug() << "Erase failed:" << _bootloader->errorString();
emit error(commandErase, _bootloader->errorString());
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment