From aa446903000d468e93ce92ca1176f8886edb17d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Patrick=20Jos=C3=A9=20Pereira?= Date: Thu, 9 May 2019 13:13:55 -0300 Subject: [PATCH 1/3] QGCSerialPortInfo: Add const in canFlash function MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Patrick José Pereira --- src/comm/QGCSerialPortInfo.cc | 2 +- src/comm/QGCSerialPortInfo.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/comm/QGCSerialPortInfo.cc b/src/comm/QGCSerialPortInfo.cc index 1818835..eff879c 100644 --- a/src/comm/QGCSerialPortInfo.cc +++ b/src/comm/QGCSerialPortInfo.cc @@ -340,7 +340,7 @@ bool QGCSerialPortInfo::isSystemPort(QSerialPortInfo* port) return false; } -bool QGCSerialPortInfo::canFlash(void) +bool QGCSerialPortInfo::canFlash(void) const { BoardType_t boardType; QString name; diff --git a/src/comm/QGCSerialPortInfo.h b/src/comm/QGCSerialPortInfo.h index 7c394bc..3accd3d 100644 --- a/src/comm/QGCSerialPortInfo.h +++ b/src/comm/QGCSerialPortInfo.h @@ -43,7 +43,7 @@ public: bool getBoardInfo(BoardType_t& boardType, QString& name) const; /// @return true: we can flash this board type - bool canFlash(void); + bool canFlash(void) const; /// @return true: Board is currently in bootloader bool isBootloader(void) const; From 6917d469f207e43caa17fd9db6f04e2e06d75a47 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Patrick=20Jos=C3=A9=20Pereira?= Date: Thu, 9 May 2019 13:15:16 -0300 Subject: [PATCH 2/3] FirmwareUpgradeController: Add availableBoardsName function MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Patrick José Pereira --- src/VehicleSetup/FirmwareUpgradeController.cc | 17 +++++++++++++++++ src/VehicleSetup/FirmwareUpgradeController.h | 7 +++++++ 2 files changed, 24 insertions(+) diff --git a/src/VehicleSetup/FirmwareUpgradeController.cc b/src/VehicleSetup/FirmwareUpgradeController.cc index 365e5d0..97e4a33 100644 --- a/src/VehicleSetup/FirmwareUpgradeController.cc +++ b/src/VehicleSetup/FirmwareUpgradeController.cc @@ -127,6 +127,23 @@ void FirmwareUpgradeController::cancel(void) _threadController->cancel(); } +QStringList FirmwareUpgradeController::availableBoardsName(void) +{ + QGCSerialPortInfo::BoardType_t boardType; + QString boardName; + QStringList names; + + auto ports = QGCSerialPortInfo::availablePorts(); + for(const auto info : ports) { + if(info.canFlash()) { + info.getBoardInfo(boardType, boardName); + names.append(boardName); + } + } + + return names; +} + void FirmwareUpgradeController::_foundBoard(bool firstAttempt, const QSerialPortInfo& info, int boardType, QString boardName) { _foundBoardInfo = info; diff --git a/src/VehicleSetup/FirmwareUpgradeController.h b/src/VehicleSetup/FirmwareUpgradeController.h index 112117f..6ba76f4 100644 --- a/src/VehicleSetup/FirmwareUpgradeController.h +++ b/src/VehicleSetup/FirmwareUpgradeController.h @@ -152,6 +152,13 @@ public: bool pixhawkBoard(void) const { return _foundBoardType == QGCSerialPortInfo::BoardTypePixhawk; } bool px4FlowBoard(void) const { return _foundBoardType == QGCSerialPortInfo::BoardTypePX4Flow; } + /** + * @brief Return a human friendly string of available boards + * + * @return availableBoardNames + */ + Q_INVOKABLE QStringList availableBoardsName(void); + signals: void boardFound(void); void noBoardFound(void); From 8371c95c373018a3ead73b3e0f8b812cb7b0a8b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Patrick=20Jos=C3=A9=20Pereira?= Date: Thu, 9 May 2019 13:16:41 -0300 Subject: [PATCH 3/3] FirmwareUpgrade: Add warning message about multiple devices connected MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Patrick José Pereira --- src/VehicleSetup/FirmwareUpgrade.qml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/VehicleSetup/FirmwareUpgrade.qml b/src/VehicleSetup/FirmwareUpgrade.qml index 113506a..ad6326c 100644 --- a/src/VehicleSetup/FirmwareUpgrade.qml +++ b/src/VehicleSetup/FirmwareUpgrade.qml @@ -118,6 +118,13 @@ SetupPage { // Board was found right away, so something is already plugged in before we've started upgrade statusTextArea.append(qgcUnplugText1) statusTextArea.append(qgcUnplugText2) + + var availableDevices = controller.availableBoardsName() + if(availableDevices.length > 1) { + statusTextArea.append(highlightPrefix + qsTr("Multiple devices detected! Remove all detected devices to perform the firmware upgrade.")) + statusTextArea.append(qsTr("Detected [%1]: ").arg(availableDevices.length) + availableDevices.join(", ")) + } + QGroundControl.multiVehicleManager.activeVehicle.autoDisconnect = true } else { // We end up here when we detect a board plugged in after we've started upgrade