From f0c7cf1f507e6b166c4d6748336dbc7d96eea104 Mon Sep 17 00:00:00 2001 From: Lorenz Meier Date: Thu, 3 Dec 2015 13:27:59 +0100 Subject: [PATCH] Finished FMUv4 integration --- src/VehicleSetup/FirmwareUpgradeController.cc | 3 ++- src/comm/LinkManager.cc | 1 + src/comm/QGCSerialPortInfo.cc | 10 ++++++++-- src/comm/QGCSerialPortInfo.h | 2 ++ 4 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/VehicleSetup/FirmwareUpgradeController.cc b/src/VehicleSetup/FirmwareUpgradeController.cc index 9040c9a..078e5c9 100644 --- a/src/VehicleSetup/FirmwareUpgradeController.cc +++ b/src/VehicleSetup/FirmwareUpgradeController.cc @@ -118,7 +118,8 @@ void FirmwareUpgradeController::_foundBoard(bool firstAttempt, const QSerialPort _startFlashWhenBootloaderFound = false; break; case QGCSerialPortInfo::BoardTypePX4FMUV2: - _foundBoardType = "Pixhawk"; + case QGCSerialPortInfo::BoardTypePX4FMUV4: + _foundBoardType = "Pixhawk (any version)"; _startFlashWhenBootloaderFound = false; break; case QGCSerialPortInfo::BoardTypeAeroCore: diff --git a/src/comm/LinkManager.cc b/src/comm/LinkManager.cc index 4b6ee1f..959f2a2 100644 --- a/src/comm/LinkManager.cc +++ b/src/comm/LinkManager.cc @@ -497,6 +497,7 @@ void LinkManager::_updateAutoConnectLinks(void) switch (boardType) { case QGCSerialPortInfo::BoardTypePX4FMUV1: case QGCSerialPortInfo::BoardTypePX4FMUV2: + case QGCSerialPortInfo::BoardTypePX4FMUV4: if (_autoconnectPixhawk) { pSerialConfig = new SerialConfiguration(QString("Pixhawk on %1").arg(portInfo.portName().trimmed())); } diff --git a/src/comm/QGCSerialPortInfo.cc b/src/comm/QGCSerialPortInfo.cc index 3ca0faa..4169721 100644 --- a/src/comm/QGCSerialPortInfo.cc +++ b/src/comm/QGCSerialPortInfo.cc @@ -47,7 +47,10 @@ QGCSerialPortInfo::BoardType_t QGCSerialPortInfo::boardType(void) const switch (vendorIdentifier()) { case px4VendorId: - if (productIdentifier() == pixhawkFMUV2ProductId || productIdentifier() == pixhawkFMUV2OldBootloaderProductId) { + if (productIdentifier() == pixhawkFMUV4ProductId) { + qCDebug(QGCSerialPortInfoLog) << "Found PX4 FMU V4"; + boardType = BoardTypePX4FMUV4; + } else if (productIdentifier() == pixhawkFMUV2ProductId || productIdentifier() == pixhawkFMUV2OldBootloaderProductId) { qCDebug(QGCSerialPortInfoLog) << "Found PX4 FMU V2"; boardType = BoardTypePX4FMUV2; } else if (productIdentifier() == pixhawkFMUV1ProductId) { @@ -72,7 +75,10 @@ QGCSerialPortInfo::BoardType_t QGCSerialPortInfo::boardType(void) const if (boardType == BoardTypeUnknown) { // Fall back to port name matching which could lead to incorrect board mapping. But in some cases the // vendor and product id do not come through correctly so this is used as a last chance detection method. - if (description() == "PX4 FMU v2.x" || description() == "PX4 BL FMU v2.x") { + if (description() == "PX4 FMU v4.x" || description() == "PX4 BL FMU v4.x") { + qCDebug(QGCSerialPortInfoLog) << "Found PX4 FMU V4 (by name matching fallback)"; + boardType = BoardTypePX4FMUV4; + } else if (description() == "PX4 FMU v2.x" || description() == "PX4 BL FMU v2.x") { qCDebug(QGCSerialPortInfoLog) << "Found PX4 FMU V2 (by name matching fallback)"; boardType = BoardTypePX4FMUV2; } else if (description() == "PX4 FMU v1.x" || description() == "PX4 BL FMU v1.x") { diff --git a/src/comm/QGCSerialPortInfo.h b/src/comm/QGCSerialPortInfo.h index 1fa6e31..27a614c 100644 --- a/src/comm/QGCSerialPortInfo.h +++ b/src/comm/QGCSerialPortInfo.h @@ -42,6 +42,7 @@ public: typedef enum { BoardTypePX4FMUV1, BoardTypePX4FMUV2, + BoardTypePX4FMUV4, BoardTypePX4Flow, BoardType3drRadio, BoardTypeAeroCore, @@ -52,6 +53,7 @@ public: static const int px4VendorId = 9900; ///< Vendor ID for Pixhawk board (V2 and V1) and PX4 Flow + static const int pixhawkFMUV4ProductId = 18; ///< Product ID for Pixhawk V2 board static const int pixhawkFMUV2ProductId = 17; ///< Product ID for Pixhawk V2 board static const int pixhawkFMUV2OldBootloaderProductId = 22; ///< Product ID for Bootloader on older Pixhawk V2 boards static const int pixhawkFMUV1ProductId = 16; ///< Product ID for PX4 FMU V1 board