From be4e5dc370635ab764e62cbeba97de78cfe434c1 Mon Sep 17 00:00:00 2001 From: Don Gagne Date: Sat, 14 Nov 2015 16:41:53 -0800 Subject: [PATCH] Use new QGCSerialPortInfo --- src/VehicleSetup/FirmwareUpgradeController.cc | 10 +-- src/VehicleSetup/PX4FirmwareUpgradeThread.cc | 69 +++---------------- src/VehicleSetup/PX4FirmwareUpgradeThread.h | 24 +++---- src/comm/LinkManager.cc | 67 ++++++++---------- 4 files changed, 51 insertions(+), 119 deletions(-) diff --git a/src/VehicleSetup/FirmwareUpgradeController.cc b/src/VehicleSetup/FirmwareUpgradeController.cc index 9019f58a3..eb1eb35bb 100644 --- a/src/VehicleSetup/FirmwareUpgradeController.cc +++ b/src/VehicleSetup/FirmwareUpgradeController.cc @@ -109,23 +109,23 @@ void FirmwareUpgradeController::_foundBoard(bool firstAttempt, const QSerialPort { _foundBoardInfo = info; switch (type) { - case FoundBoardPX4FMUV1: + case QGCSerialPortInfo::BoardTypePX4FMUV1: _foundBoardType = "PX4 FMU V1"; _startFlashWhenBootloaderFound = false; break; - case FoundBoardPX4FMUV2: + case QGCSerialPortInfo::BoardTypePX4FMUV2: _foundBoardType = "Pixhawk"; _startFlashWhenBootloaderFound = false; break; - case FoundBoardAeroCore: + case QGCSerialPortInfo::BoardTypeAeroCore: _foundBoardType = "AeroCore"; _startFlashWhenBootloaderFound = false; break; - case FoundBoardPX4Flow: + case QGCSerialPortInfo::BoardTypePX4Flow: _foundBoardType = "PX4 Flow"; _startFlashWhenBootloaderFound = false; break; - case FoundBoard3drRadio: + case QGCSerialPortInfo::BoardType3drRadio: _foundBoardType = "3DR Radio"; if (!firstAttempt) { // Radio always flashes latest firmware, so we can start right away without diff --git a/src/VehicleSetup/PX4FirmwareUpgradeThread.cc b/src/VehicleSetup/PX4FirmwareUpgradeThread.cc index 58d29e385..3df01ced8 100644 --- a/src/VehicleSetup/PX4FirmwareUpgradeThread.cc +++ b/src/VehicleSetup/PX4FirmwareUpgradeThread.cc @@ -29,10 +29,8 @@ #include "Bootloader.h" #include "QGCLoggingCategory.h" #include "QGC.h" -#include "SerialPortIds.h" #include -#include #include #include @@ -99,8 +97,8 @@ void PX4FirmwareUpgradeThreadWorker::_findBoardOnce(void) { qCDebug(FirmwareUpgradeLog) << "_findBoardOnce"; - QSerialPortInfo portInfo; - PX4FirmwareUpgradeFoundBoardType_t boardType; + QGCSerialPortInfo portInfo; + QGCSerialPortInfo::BoardType_t boardType; if (_findBoardFromPorts(portInfo, boardType)) { if (!_foundBoard) { @@ -108,7 +106,7 @@ void PX4FirmwareUpgradeThreadWorker::_findBoardOnce(void) _foundBoardPortInfo = portInfo; emit foundBoard(_findBoardFirstAttempt, portInfo, boardType); if (!_findBoardFirstAttempt) { - if (boardType == FoundBoard3drRadio) { + if (boardType == QGCSerialPortInfo::BoardType3drRadio) { _3drRadioForceBootloader(portInfo); return; } else { @@ -131,11 +129,9 @@ void PX4FirmwareUpgradeThreadWorker::_findBoardOnce(void) _timerRetry->start(); } -bool PX4FirmwareUpgradeThreadWorker::_findBoardFromPorts(QSerialPortInfo& portInfo, PX4FirmwareUpgradeFoundBoardType_t& type) +bool PX4FirmwareUpgradeThreadWorker::_findBoardFromPorts(QGCSerialPortInfo& portInfo, QGCSerialPortInfo::BoardType_t& boardType) { - bool found = false; - - foreach (QSerialPortInfo info, QSerialPortInfo::availablePorts()) { + foreach (QGCSerialPortInfo info, QGCSerialPortInfo::availablePorts()) { qCDebug(FirmwareUpgradeLog) << "Serial Port --------------"; qCDebug(FirmwareUpgradeLog) << "\tport name:" << info.portName(); qCDebug(FirmwareUpgradeLog) << "\tdescription:" << info.description(); @@ -143,55 +139,8 @@ bool PX4FirmwareUpgradeThreadWorker::_findBoardFromPorts(QSerialPortInfo& portIn qCDebug(FirmwareUpgradeLog) << "\tvendor ID:" << info.vendorIdentifier(); qCDebug(FirmwareUpgradeLog) << "\tproduct ID:" << info.productIdentifier(); - if (!info.portName().isEmpty()) { - switch (info.vendorIdentifier()) { - case SerialPortIds::px4VendorId: - if (info.productIdentifier() == SerialPortIds::pixhawkFMUV2ProductId || info.productIdentifier() == SerialPortIds::pixhawkFMUV2OldBootloaderProductId) { - qCDebug(FirmwareUpgradeLog) << "Found PX4 FMU V2"; - type = FoundBoardPX4FMUV2; - found = true; - } else if (info.productIdentifier() == SerialPortIds::pixhawkFMUV1ProductId) { - qCDebug(FirmwareUpgradeLog) << "Found PX4 FMU V1"; - type = FoundBoardPX4FMUV1; - found = true; - } else if (info.productIdentifier() == SerialPortIds::px4FlowProductId) { - qCDebug(FirmwareUpgradeLog) << "Found PX4 Flow"; - type = FoundBoardPX4Flow; - found = true; - } else if (info.productIdentifier() == SerialPortIds::AeroCoreProductId) { - qCDebug(FirmwareUpgradeLog) << "Found AeroCore"; - type = FoundBoardAeroCore; - found = true; - } - break; - case SerialPortIds::threeDRRadioVendorId: - if (info.productIdentifier() == SerialPortIds::threeDRRadioProductId) { - qCDebug(FirmwareUpgradeLog) << "Found 3DR Radio"; - type = FoundBoard3drRadio; - found = true; - } - break; - } - if (!found) { - // 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 (info.description() == "PX4 FMU v2.x" || info.description() == "PX4 BL FMU v2.x") { - qCDebug(FirmwareUpgradeLog) << "Found PX4 FMU V2 (by name matching fallback)"; - type = FoundBoardPX4FMUV2; - found = true; - } else if (info.description() == "PX4 FMU v1.x" || info.description() == "PX4 BL FMU v1.x") { - qCDebug(FirmwareUpgradeLog) << "Found PX4 FMU V1 (by name matching fallback)"; - type = FoundBoardPX4FMUV1; - found = true; - } else if (info.description().startsWith("PX4 FMU")) { - qCDebug(FirmwareUpgradeLog) << "Found PX4 FMU, assuming V2 (by name matching fallback)"; - type = FoundBoardPX4FMUV2; - found = true; - } - } - } - - if (found) { + boardType = info.boardType(); + if (boardType != QGCSerialPortInfo::BoardTypeUnknown) { portInfo = info; return true; } @@ -200,7 +149,7 @@ bool PX4FirmwareUpgradeThreadWorker::_findBoardFromPorts(QSerialPortInfo& portIn return false; } -void PX4FirmwareUpgradeThreadWorker::_3drRadioForceBootloader(const QSerialPortInfo& portInfo) +void PX4FirmwareUpgradeThreadWorker::_3drRadioForceBootloader(const QGCSerialPortInfo& portInfo) { // First make sure we can't get the bootloader @@ -257,7 +206,7 @@ void PX4FirmwareUpgradeThreadWorker::_3drRadioForceBootloader(const QSerialPortI _findBootloader(portInfo, true /* radio mode */, true /* errorOnNotFound */); } -bool PX4FirmwareUpgradeThreadWorker::_findBootloader(const QSerialPortInfo& portInfo, bool radioMode, bool errorOnNotFound) +bool PX4FirmwareUpgradeThreadWorker::_findBootloader(const QGCSerialPortInfo& portInfo, bool radioMode, bool errorOnNotFound) { qCDebug(FirmwareUpgradeLog) << "_findBootloader"; diff --git a/src/VehicleSetup/PX4FirmwareUpgradeThread.h b/src/VehicleSetup/PX4FirmwareUpgradeThread.h index 758c11431..944df23d2 100644 --- a/src/VehicleSetup/PX4FirmwareUpgradeThread.h +++ b/src/VehicleSetup/PX4FirmwareUpgradeThread.h @@ -30,25 +30,17 @@ #include "Bootloader.h" #include "FirmwareImage.h" +#include "QGCSerialPortInfo.h" #include #include #include #include -#include #include "qextserialport.h" #include -typedef enum { - FoundBoardPX4FMUV1, - FoundBoardPX4FMUV2, - FoundBoardPX4Flow, - FoundBoard3drRadio, - FoundBoardAeroCore -} PX4FirmwareUpgradeFoundBoardType_t; - class PX4FirmwareUpgradeThreadController; /// @brief Used to run bootloader commands on a seperate thread. These routines are mainly meant to to be called @@ -64,7 +56,7 @@ public: signals: void updateProgress(int curr, int total); - void foundBoard(bool firstAttempt, const QSerialPortInfo& portInfo, int type); + void foundBoard(bool firstAttempt, const QGCSerialPortInfo& portInfo, int type); void noBoardFound(void); void boardGone(void); void foundBootloader(int bootloaderVersion, int boardID, int flashSize); @@ -85,9 +77,9 @@ private slots: void _cancel(void); private: - bool _findBoardFromPorts(QSerialPortInfo& portInfo, PX4FirmwareUpgradeFoundBoardType_t& type); - bool _findBootloader(const QSerialPortInfo& portInfo, bool radioMode, bool errorOnNotFound); - void _3drRadioForceBootloader(const QSerialPortInfo& portInfo); + bool _findBoardFromPorts(QGCSerialPortInfo& portInfo, QGCSerialPortInfo::BoardType_t& boardType); + bool _findBootloader(const QGCSerialPortInfo& portInfo, bool radioMode, bool errorOnNotFound); + void _3drRadioForceBootloader(const QGCSerialPortInfo& portInfo); bool _erase(void); PX4FirmwareUpgradeThreadController* _controller; @@ -100,7 +92,7 @@ private: bool _foundBoard; ///< true: board is currently connected bool _findBoardFirstAttempt; ///< true: this is our first try looking for a board - QSerialPortInfo _foundBoardPortInfo; ///< port info for found board + QGCSerialPortInfo _foundBoardPortInfo; ///< port info for found board }; /// @brief Provides methods to interact with the bootloader. The commands themselves are signalled @@ -128,7 +120,7 @@ public: signals: /// @brief Emitted by the find board process when it finds a board. - void foundBoard(bool firstAttempt, const QSerialPortInfo &portInfo, int type); + void foundBoard(bool firstAttempt, const QGCSerialPortInfo &portInfo, int boardType); void noBoardFound(void); @@ -163,7 +155,7 @@ signals: void _cancel(void); private slots: - void _foundBoard(bool firstAttempt, const QSerialPortInfo& portInfo, int type) { emit foundBoard(firstAttempt, portInfo, type); } + void _foundBoard(bool firstAttempt, const QGCSerialPortInfo& portInfo, int type) { emit foundBoard(firstAttempt, portInfo, type); } void _noBoardFound(void) { emit noBoardFound(); } void _boardGone(void) { emit boardGone(); } void _foundBootloader(int bootloaderVersion, int boardID, int flashSize) { emit foundBootloader(bootloaderVersion, boardID, flashSize); } diff --git a/src/comm/LinkManager.cc b/src/comm/LinkManager.cc index 0378b62b5..9a8ef0ede 100644 --- a/src/comm/LinkManager.cc +++ b/src/comm/LinkManager.cc @@ -34,18 +34,13 @@ This file is part of the QGROUNDCONTROL project #include #ifndef __ios__ -#ifdef __android__ -#include "qserialportinfo.h" -#else -#include -#endif +#include "QGCSerialPortInfo.h" #endif #include "LinkManager.h" #include "MainWindow.h" #include "QGCMessageBox.h" #include "QGCApplication.h" -#include "SerialPortIds.h" #include "QGCApplication.h" QGC_LOGGING_CATEGORY(LinkManagerLog, "LinkManagerLog") @@ -489,9 +484,9 @@ void LinkManager::_updateConfigurationList(void) } bool saveList = false; QStringList currentPorts; - QList portList = QSerialPortInfo::availablePorts(); + QList portList = QGCSerialPortInfo::availablePorts(); // Iterate Comm Ports - foreach (QSerialPortInfo portInfo, portList) { + foreach (QGCSerialPortInfo portInfo, portList) { #if 0 // Too noisy for most logging, so turn on as needed qCDebug(LinkManagerLog) << "-----------------------------------------------------"; @@ -504,8 +499,15 @@ void LinkManager::_updateConfigurationList(void) #endif // Save port name currentPorts << portInfo.systemLocation(); - // Is this a PX4 and NOT in bootloader mode? - if (portInfo.vendorIdentifier() == SerialPortIds::px4VendorId && !portInfo.description().contains("BL")) { + + QGCSerialPortInfo::BoardType_t boardType = portInfo.boardType(); + + if (boardType != QGCSerialPortInfo::BoardTypeUnknown) { + if (portInfo.isBootloader()) { + // Don't connect to bootloader + continue; + } + SerialConfiguration* pSerial = _findSerialConfiguration(portInfo.systemLocation()); if (pSerial) { //-- If this port is configured make sure it has the preferred flag set @@ -514,45 +516,34 @@ void LinkManager::_updateConfigurationList(void) saveList = true; } } else { - // Lets create a new Serial configuration automatically - if (portInfo.description() == "AeroCore") { + switch (boardType) { + case QGCSerialPortInfo::BoardTypePX4FMUV1: + case QGCSerialPortInfo::BoardTypePX4FMUV2: + pSerial = new SerialConfiguration(QString("Pixhawk on %1").arg(portInfo.portName().trimmed())); + break; + case QGCSerialPortInfo::BoardTypeAeroCore: pSerial = new SerialConfiguration(QString("AeroCore on %1").arg(portInfo.portName().trimmed())); - } else if (portInfo.description().contains("PX4Flow")) { + break; + case QGCSerialPortInfo::BoardTypePX4Flow: pSerial = new SerialConfiguration(QString("PX4Flow on %1").arg(portInfo.portName().trimmed())); - } else if (portInfo.description().contains("PX4")) { - pSerial = new SerialConfiguration(QString("Pixhawk on %1").arg(portInfo.portName().trimmed())); - } else { - continue; - } - pSerial->setDynamic(true); - pSerial->setPreferred(true); - pSerial->setBaud(115200); - pSerial->setPortName(portInfo.systemLocation()); - addLinkConfiguration(pSerial); - saveList = true; - } - } - // Is this an FTDI Chip? It could be a 3DR Modem - if (portInfo.vendorIdentifier() == SerialPortIds::threeDRRadioVendorId && portInfo.productIdentifier() == SerialPortIds::threeDRRadioProductId) { - SerialConfiguration* pSerial = _findSerialConfiguration(portInfo.systemLocation()); - if (pSerial) { - //-- If this port is configured make sure it has the preferred flag set, unless someone else already has it set. - if(!pSerial->isPreferred() && !saveList) { - pSerial->setPreferred(true); - saveList = true; + break; + case QGCSerialPortInfo::BoardType3drRadio: + pSerial = new SerialConfiguration(QString("3DR Radio on %1").arg(portInfo.portName().trimmed())); + default: + qWarning() << "Internal error"; + break; } - } else { - // Lets create a new Serial configuration automatically (an assumption at best) - pSerial = new SerialConfiguration(QString("3DR Radio on %1").arg(portInfo.portName().trimmed())); + + pSerial->setBaud(boardType == QGCSerialPortInfo::BoardType3drRadio ? 57600 : 115200); pSerial->setDynamic(true); pSerial->setPreferred(true); - pSerial->setBaud(57600); pSerial->setPortName(portInfo.systemLocation()); addLinkConfiguration(pSerial); saveList = true; } } } + // Now we go through the current configuration list and make sure any dynamic config has gone away QList _confToDelete; foreach (LinkConfiguration* pLink, _linkConfigurations) { -- 2.22.0