diff --git a/src/VehicleSetup/PX4FirmwareUpgradeThread.cc b/src/VehicleSetup/PX4FirmwareUpgradeThread.cc index a0618595155d5e6cddb9141afd0531baf254283b..e4892406075076bba993067dbe0515317a930ea1 100644 --- a/src/VehicleSetup/PX4FirmwareUpgradeThread.cc +++ b/src/VehicleSetup/PX4FirmwareUpgradeThread.cc @@ -210,7 +210,7 @@ void PX4FirmwareUpgradeThreadWorker::_3drRadioForceBootloader(const QGCSerialPor bool PX4FirmwareUpgradeThreadWorker::_findBootloader(const QGCSerialPortInfo& portInfo, bool radioMode, bool errorOnNotFound) { - qCDebug(FirmwareUpgradeLog) << "_findBootloader"; + qCDebug(FirmwareUpgradeLog) << "_findBootloader" << portInfo.systemLocation(); uint32_t bootloaderVersion = 0; uint32_t boardID; @@ -218,14 +218,15 @@ bool PX4FirmwareUpgradeThreadWorker::_findBootloader(const QGCSerialPortInfo& po _bootloaderPort = new QextSerialPort(QextSerialPort::Polling); - Q_CHECK_PTR(_bootloaderPort); if (radioMode) { _bootloaderPort->setBaudRate(BAUD115200); } // Wait a little while for the USB port to initialize. + bool openFailed = true; for (int i=0; i<10; i++) { if (_bootloader->open(_bootloaderPort, portInfo.systemLocation())) { + openFailed = false; break; } else { QGC::SLEEP::msleep(100); @@ -236,6 +237,16 @@ bool PX4FirmwareUpgradeThreadWorker::_findBootloader(const QGCSerialPortInfo& po QGC::SLEEP::msleep(2000); } + if (openFailed) { + qCDebug(FirmwareUpgradeLog) << "Bootloader open port failed:" << _bootloader->errorString(); + if (errorOnNotFound) { + emit error(_bootloader->errorString()); + } + _bootloaderPort->deleteLater(); + _bootloaderPort = NULL; + return false; + } + if (_bootloader->sync(_bootloaderPort)) { bool success;