From 09a3dc28ecc6564390e10bb9865cc336275d34cf Mon Sep 17 00:00:00 2001 From: Don Gagne Date: Mon, 11 Jan 2016 13:59:01 -0800 Subject: [PATCH] Fix RadioFlash Verify was failing due to incorrect READ_MULTI max size --- src/VehicleSetup/Bootloader.cc | 6 +++--- src/VehicleSetup/Bootloader.h | 4 ++-- src/VehicleSetup/FirmwareImage.cc | 3 ++- src/VehicleSetup/PX4FirmwareUpgradeThread.cc | 10 +++++++--- 4 files changed, 14 insertions(+), 9 deletions(-) diff --git a/src/VehicleSetup/Bootloader.cc b/src/VehicleSetup/Bootloader.cc index 7cb464ca8e..dd3a41f6f6 100644 --- a/src/VehicleSetup/Bootloader.cc +++ b/src/VehicleSetup/Bootloader.cc @@ -273,7 +273,7 @@ bool Bootloader::_ihxProgram(QextSerialPort* port, const FirmwareImage* image) return false; } - qCDebug(FirmwareUpgradeVerboseLog) << QString("Bootloader::_ihxProgram - address:%1 size:%2 block:%3").arg(flashAddress).arg(bytes.count()).arg(index); + qCDebug(FirmwareUpgradeVerboseLog) << QString("Bootloader::_ihxProgram - address:0x%1 size:%2 block:%3").arg(flashAddress, 8, 16, QLatin1Char('0')).arg(bytes.count()).arg(index); // Set flash address @@ -400,7 +400,7 @@ bool Bootloader::_binVerifyBytes(QextSerialPort* port, const FirmwareImage* imag _write(port, (uint8_t)bytesToRead) && _write(port, PROTO_EOC)) { port->flush(); - if (_read(port, readBuf, sizeof(readBuf))) { + if (_read(port, readBuf, bytesToRead)) { if (_getCommandResponse(port)) { failed = false; } @@ -479,7 +479,7 @@ bool Bootloader::_ihxVerifyBytes(QextSerialPort* port, const FirmwareImage* imag } else { bytesToRead = bytesLeftToRead; } - + failed = true; if (_write(port, PROTO_READ_MULTI) && _write(port, bytesToRead) && diff --git a/src/VehicleSetup/Bootloader.h b/src/VehicleSetup/Bootloader.h index c5eefbb14a..a5a8ab5336 100644 --- a/src/VehicleSetup/Bootloader.h +++ b/src/VehicleSetup/Bootloader.h @@ -134,8 +134,8 @@ private: INFO_BOARD_REV = 3, ///< board revision INFO_FLASH_SIZE = 4, ///< max firmware size in bytes - PROG_MULTI_MAX = 64, ///< write size for PROTO_PROG_MULTI, must be multiple of 4 - READ_MULTI_MAX = 255 ///< read size for PROTO_READ_MULTI, must be multiple of 4 + PROG_MULTI_MAX = 64, ///< write size for PROTO_PROG_MULTI, must be multiple of 4 + READ_MULTI_MAX = 0x28 ///< read size for PROTO_READ_MULTI, must be multiple of 4. Sik Radio max size is 0x28 }; uint32_t _boardID; ///< board id for currently connected board diff --git a/src/VehicleSetup/FirmwareImage.cc b/src/VehicleSetup/FirmwareImage.cc index 146d81b48c..b782326ecb 100644 --- a/src/VehicleSetup/FirmwareImage.cc +++ b/src/VehicleSetup/FirmwareImage.cc @@ -165,7 +165,8 @@ bool FirmwareImage::_ihxLoad(const QString& ihxFilename) if (appendToLastBlock) { _ihxBlocks[_ihxBlocks.count() - 1].bytes += bytes; - qCDebug(FirmwareUpgradeVerboseLog) << QString("_ihxLoad - append - address:%1 size:%2 block:%3").arg(address).arg(blockByteCount).arg(ihxBlockCount()); + // Too noisy even for verbose + //qCDebug(FirmwareUpgradeVerboseLog) << QString("_ihxLoad - append - address:%1 size:%2 block:%3").arg(address).arg(blockByteCount).arg(ihxBlockCount()); } else { IntelHexBlock_t block; diff --git a/src/VehicleSetup/PX4FirmwareUpgradeThread.cc b/src/VehicleSetup/PX4FirmwareUpgradeThread.cc index 0c8c853134..a061859515 100644 --- a/src/VehicleSetup/PX4FirmwareUpgradeThread.cc +++ b/src/VehicleSetup/PX4FirmwareUpgradeThread.cc @@ -95,7 +95,7 @@ void PX4FirmwareUpgradeThreadWorker::_startFindBoardLoop(void) void PX4FirmwareUpgradeThreadWorker::_findBoardOnce(void) { - qCDebug(FirmwareUpgradeLog) << "_findBoardOnce"; + qCDebug(FirmwareUpgradeVerboseLog) << "_findBoardOnce"; QGCSerialPortInfo portInfo; QGCSerialPortInfo::BoardType_t boardType; @@ -200,9 +200,9 @@ void PX4FirmwareUpgradeThreadWorker::_3drRadioForceBootloader(const QGCSerialPor emit error("Unable to reboot radio (ready read)"); return; } - QGC::SLEEP::msleep(700); port.close(); - + QGC::SLEEP::msleep(2000); + // The bootloader should be waiting for us now _findBootloader(portInfo, true /* radio mode */, true /* errorOnNotFound */); @@ -232,6 +232,10 @@ bool PX4FirmwareUpgradeThreadWorker::_findBootloader(const QGCSerialPortInfo& po } } + if (radioMode) { + QGC::SLEEP::msleep(2000); + } + if (_bootloader->sync(_bootloaderPort)) { bool success; -- GitLab