Commit be4e5dc3 authored by Don Gagne's avatar Don Gagne

Use new QGCSerialPortInfo

parent 946b7ea8
...@@ -109,23 +109,23 @@ void FirmwareUpgradeController::_foundBoard(bool firstAttempt, const QSerialPort ...@@ -109,23 +109,23 @@ void FirmwareUpgradeController::_foundBoard(bool firstAttempt, const QSerialPort
{ {
_foundBoardInfo = info; _foundBoardInfo = info;
switch (type) { switch (type) {
case FoundBoardPX4FMUV1: case QGCSerialPortInfo::BoardTypePX4FMUV1:
_foundBoardType = "PX4 FMU V1"; _foundBoardType = "PX4 FMU V1";
_startFlashWhenBootloaderFound = false; _startFlashWhenBootloaderFound = false;
break; break;
case FoundBoardPX4FMUV2: case QGCSerialPortInfo::BoardTypePX4FMUV2:
_foundBoardType = "Pixhawk"; _foundBoardType = "Pixhawk";
_startFlashWhenBootloaderFound = false; _startFlashWhenBootloaderFound = false;
break; break;
case FoundBoardAeroCore: case QGCSerialPortInfo::BoardTypeAeroCore:
_foundBoardType = "AeroCore"; _foundBoardType = "AeroCore";
_startFlashWhenBootloaderFound = false; _startFlashWhenBootloaderFound = false;
break; break;
case FoundBoardPX4Flow: case QGCSerialPortInfo::BoardTypePX4Flow:
_foundBoardType = "PX4 Flow"; _foundBoardType = "PX4 Flow";
_startFlashWhenBootloaderFound = false; _startFlashWhenBootloaderFound = false;
break; break;
case FoundBoard3drRadio: case QGCSerialPortInfo::BoardType3drRadio:
_foundBoardType = "3DR Radio"; _foundBoardType = "3DR Radio";
if (!firstAttempt) { if (!firstAttempt) {
// Radio always flashes latest firmware, so we can start right away without // Radio always flashes latest firmware, so we can start right away without
......
...@@ -29,10 +29,8 @@ ...@@ -29,10 +29,8 @@
#include "Bootloader.h" #include "Bootloader.h"
#include "QGCLoggingCategory.h" #include "QGCLoggingCategory.h"
#include "QGC.h" #include "QGC.h"
#include "SerialPortIds.h"
#include <QTimer> #include <QTimer>
#include <QSerialPortInfo>
#include <QDebug> #include <QDebug>
#include <QSerialPort> #include <QSerialPort>
...@@ -99,8 +97,8 @@ void PX4FirmwareUpgradeThreadWorker::_findBoardOnce(void) ...@@ -99,8 +97,8 @@ void PX4FirmwareUpgradeThreadWorker::_findBoardOnce(void)
{ {
qCDebug(FirmwareUpgradeLog) << "_findBoardOnce"; qCDebug(FirmwareUpgradeLog) << "_findBoardOnce";
QSerialPortInfo portInfo; QGCSerialPortInfo portInfo;
PX4FirmwareUpgradeFoundBoardType_t boardType; QGCSerialPortInfo::BoardType_t boardType;
if (_findBoardFromPorts(portInfo, boardType)) { if (_findBoardFromPorts(portInfo, boardType)) {
if (!_foundBoard) { if (!_foundBoard) {
...@@ -108,7 +106,7 @@ void PX4FirmwareUpgradeThreadWorker::_findBoardOnce(void) ...@@ -108,7 +106,7 @@ void PX4FirmwareUpgradeThreadWorker::_findBoardOnce(void)
_foundBoardPortInfo = portInfo; _foundBoardPortInfo = portInfo;
emit foundBoard(_findBoardFirstAttempt, portInfo, boardType); emit foundBoard(_findBoardFirstAttempt, portInfo, boardType);
if (!_findBoardFirstAttempt) { if (!_findBoardFirstAttempt) {
if (boardType == FoundBoard3drRadio) { if (boardType == QGCSerialPortInfo::BoardType3drRadio) {
_3drRadioForceBootloader(portInfo); _3drRadioForceBootloader(portInfo);
return; return;
} else { } else {
...@@ -131,11 +129,9 @@ void PX4FirmwareUpgradeThreadWorker::_findBoardOnce(void) ...@@ -131,11 +129,9 @@ void PX4FirmwareUpgradeThreadWorker::_findBoardOnce(void)
_timerRetry->start(); _timerRetry->start();
} }
bool PX4FirmwareUpgradeThreadWorker::_findBoardFromPorts(QSerialPortInfo& portInfo, PX4FirmwareUpgradeFoundBoardType_t& type) bool PX4FirmwareUpgradeThreadWorker::_findBoardFromPorts(QGCSerialPortInfo& portInfo, QGCSerialPortInfo::BoardType_t& boardType)
{ {
bool found = false; foreach (QGCSerialPortInfo info, QGCSerialPortInfo::availablePorts()) {
foreach (QSerialPortInfo info, QSerialPortInfo::availablePorts()) {
qCDebug(FirmwareUpgradeLog) << "Serial Port --------------"; qCDebug(FirmwareUpgradeLog) << "Serial Port --------------";
qCDebug(FirmwareUpgradeLog) << "\tport name:" << info.portName(); qCDebug(FirmwareUpgradeLog) << "\tport name:" << info.portName();
qCDebug(FirmwareUpgradeLog) << "\tdescription:" << info.description(); qCDebug(FirmwareUpgradeLog) << "\tdescription:" << info.description();
...@@ -143,55 +139,8 @@ bool PX4FirmwareUpgradeThreadWorker::_findBoardFromPorts(QSerialPortInfo& portIn ...@@ -143,55 +139,8 @@ bool PX4FirmwareUpgradeThreadWorker::_findBoardFromPorts(QSerialPortInfo& portIn
qCDebug(FirmwareUpgradeLog) << "\tvendor ID:" << info.vendorIdentifier(); qCDebug(FirmwareUpgradeLog) << "\tvendor ID:" << info.vendorIdentifier();
qCDebug(FirmwareUpgradeLog) << "\tproduct ID:" << info.productIdentifier(); qCDebug(FirmwareUpgradeLog) << "\tproduct ID:" << info.productIdentifier();
if (!info.portName().isEmpty()) { boardType = info.boardType();
switch (info.vendorIdentifier()) { if (boardType != QGCSerialPortInfo::BoardTypeUnknown) {
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) {
portInfo = info; portInfo = info;
return true; return true;
} }
...@@ -200,7 +149,7 @@ bool PX4FirmwareUpgradeThreadWorker::_findBoardFromPorts(QSerialPortInfo& portIn ...@@ -200,7 +149,7 @@ bool PX4FirmwareUpgradeThreadWorker::_findBoardFromPorts(QSerialPortInfo& portIn
return false; return false;
} }
void PX4FirmwareUpgradeThreadWorker::_3drRadioForceBootloader(const QSerialPortInfo& portInfo) void PX4FirmwareUpgradeThreadWorker::_3drRadioForceBootloader(const QGCSerialPortInfo& portInfo)
{ {
// First make sure we can't get the bootloader // First make sure we can't get the bootloader
...@@ -257,7 +206,7 @@ void PX4FirmwareUpgradeThreadWorker::_3drRadioForceBootloader(const QSerialPortI ...@@ -257,7 +206,7 @@ void PX4FirmwareUpgradeThreadWorker::_3drRadioForceBootloader(const QSerialPortI
_findBootloader(portInfo, true /* radio mode */, true /* errorOnNotFound */); _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"; qCDebug(FirmwareUpgradeLog) << "_findBootloader";
......
...@@ -30,25 +30,17 @@ ...@@ -30,25 +30,17 @@
#include "Bootloader.h" #include "Bootloader.h"
#include "FirmwareImage.h" #include "FirmwareImage.h"
#include "QGCSerialPortInfo.h"
#include <QObject> #include <QObject>
#include <QThread> #include <QThread>
#include <QTimer> #include <QTimer>
#include <QTime> #include <QTime>
#include <QSerialPortInfo>
#include "qextserialport.h" #include "qextserialport.h"
#include <stdint.h> #include <stdint.h>
typedef enum {
FoundBoardPX4FMUV1,
FoundBoardPX4FMUV2,
FoundBoardPX4Flow,
FoundBoard3drRadio,
FoundBoardAeroCore
} PX4FirmwareUpgradeFoundBoardType_t;
class PX4FirmwareUpgradeThreadController; class PX4FirmwareUpgradeThreadController;
/// @brief Used to run bootloader commands on a seperate thread. These routines are mainly meant to to be called /// @brief Used to run bootloader commands on a seperate thread. These routines are mainly meant to to be called
...@@ -64,7 +56,7 @@ public: ...@@ -64,7 +56,7 @@ public:
signals: signals:
void updateProgress(int curr, int total); 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 noBoardFound(void);
void boardGone(void); void boardGone(void);
void foundBootloader(int bootloaderVersion, int boardID, int flashSize); void foundBootloader(int bootloaderVersion, int boardID, int flashSize);
...@@ -85,9 +77,9 @@ private slots: ...@@ -85,9 +77,9 @@ private slots:
void _cancel(void); void _cancel(void);
private: private:
bool _findBoardFromPorts(QSerialPortInfo& portInfo, PX4FirmwareUpgradeFoundBoardType_t& type); bool _findBoardFromPorts(QGCSerialPortInfo& portInfo, QGCSerialPortInfo::BoardType_t& boardType);
bool _findBootloader(const QSerialPortInfo& portInfo, bool radioMode, bool errorOnNotFound); bool _findBootloader(const QGCSerialPortInfo& portInfo, bool radioMode, bool errorOnNotFound);
void _3drRadioForceBootloader(const QSerialPortInfo& portInfo); void _3drRadioForceBootloader(const QGCSerialPortInfo& portInfo);
bool _erase(void); bool _erase(void);
PX4FirmwareUpgradeThreadController* _controller; PX4FirmwareUpgradeThreadController* _controller;
...@@ -100,7 +92,7 @@ private: ...@@ -100,7 +92,7 @@ private:
bool _foundBoard; ///< true: board is currently connected bool _foundBoard; ///< true: board is currently connected
bool _findBoardFirstAttempt; ///< true: this is our first try looking for a board 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 /// @brief Provides methods to interact with the bootloader. The commands themselves are signalled
...@@ -128,7 +120,7 @@ public: ...@@ -128,7 +120,7 @@ public:
signals: signals:
/// @brief Emitted by the find board process when it finds a board. /// @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); void noBoardFound(void);
...@@ -163,7 +155,7 @@ signals: ...@@ -163,7 +155,7 @@ signals:
void _cancel(void); void _cancel(void);
private slots: 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 _noBoardFound(void) { emit noBoardFound(); }
void _boardGone(void) { emit boardGone(); } void _boardGone(void) { emit boardGone(); }
void _foundBootloader(int bootloaderVersion, int boardID, int flashSize) { emit foundBootloader(bootloaderVersion, boardID, flashSize); } void _foundBootloader(int bootloaderVersion, int boardID, int flashSize) { emit foundBootloader(bootloaderVersion, boardID, flashSize); }
......
...@@ -34,18 +34,13 @@ This file is part of the QGROUNDCONTROL project ...@@ -34,18 +34,13 @@ This file is part of the QGROUNDCONTROL project
#include <QDebug> #include <QDebug>
#ifndef __ios__ #ifndef __ios__
#ifdef __android__ #include "QGCSerialPortInfo.h"
#include "qserialportinfo.h"
#else
#include <QSerialPortInfo>
#endif
#endif #endif
#include "LinkManager.h" #include "LinkManager.h"
#include "MainWindow.h" #include "MainWindow.h"
#include "QGCMessageBox.h" #include "QGCMessageBox.h"
#include "QGCApplication.h" #include "QGCApplication.h"
#include "SerialPortIds.h"
#include "QGCApplication.h" #include "QGCApplication.h"
QGC_LOGGING_CATEGORY(LinkManagerLog, "LinkManagerLog") QGC_LOGGING_CATEGORY(LinkManagerLog, "LinkManagerLog")
...@@ -489,9 +484,9 @@ void LinkManager::_updateConfigurationList(void) ...@@ -489,9 +484,9 @@ void LinkManager::_updateConfigurationList(void)
} }
bool saveList = false; bool saveList = false;
QStringList currentPorts; QStringList currentPorts;
QList<QSerialPortInfo> portList = QSerialPortInfo::availablePorts(); QList<QGCSerialPortInfo> portList = QGCSerialPortInfo::availablePorts();
// Iterate Comm Ports // Iterate Comm Ports
foreach (QSerialPortInfo portInfo, portList) { foreach (QGCSerialPortInfo portInfo, portList) {
#if 0 #if 0
// Too noisy for most logging, so turn on as needed // Too noisy for most logging, so turn on as needed
qCDebug(LinkManagerLog) << "-----------------------------------------------------"; qCDebug(LinkManagerLog) << "-----------------------------------------------------";
...@@ -504,8 +499,15 @@ void LinkManager::_updateConfigurationList(void) ...@@ -504,8 +499,15 @@ void LinkManager::_updateConfigurationList(void)
#endif #endif
// Save port name // Save port name
currentPorts << portInfo.systemLocation(); 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()); SerialConfiguration* pSerial = _findSerialConfiguration(portInfo.systemLocation());
if (pSerial) { if (pSerial) {
//-- If this port is configured make sure it has the preferred flag set //-- If this port is configured make sure it has the preferred flag set
...@@ -514,45 +516,34 @@ void LinkManager::_updateConfigurationList(void) ...@@ -514,45 +516,34 @@ void LinkManager::_updateConfigurationList(void)
saveList = true; saveList = true;
} }
} else { } else {
// Lets create a new Serial configuration automatically switch (boardType) {
if (portInfo.description() == "AeroCore") { 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())); 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())); pSerial = new SerialConfiguration(QString("PX4Flow on %1").arg(portInfo.portName().trimmed()));
} else if (portInfo.description().contains("PX4")) { break;
pSerial = new SerialConfiguration(QString("Pixhawk on %1").arg(portInfo.portName().trimmed())); case QGCSerialPortInfo::BoardType3drRadio:
} else { pSerial = new SerialConfiguration(QString("3DR Radio on %1").arg(portInfo.portName().trimmed()));
continue; default:
} qWarning() << "Internal error";
pSerial->setDynamic(true); break;
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;
} }
} else {
// Lets create a new Serial configuration automatically (an assumption at best) pSerial->setBaud(boardType == QGCSerialPortInfo::BoardType3drRadio ? 57600 : 115200);
pSerial = new SerialConfiguration(QString("3DR Radio on %1").arg(portInfo.portName().trimmed()));
pSerial->setDynamic(true); pSerial->setDynamic(true);
pSerial->setPreferred(true); pSerial->setPreferred(true);
pSerial->setBaud(57600);
pSerial->setPortName(portInfo.systemLocation()); pSerial->setPortName(portInfo.systemLocation());
addLinkConfiguration(pSerial); addLinkConfiguration(pSerial);
saveList = true; saveList = true;
} }
} }
} }
// Now we go through the current configuration list and make sure any dynamic config has gone away // Now we go through the current configuration list and make sure any dynamic config has gone away
QList<LinkConfiguration*> _confToDelete; QList<LinkConfiguration*> _confToDelete;
foreach (LinkConfiguration* pLink, _linkConfigurations) { foreach (LinkConfiguration* pLink, _linkConfigurations) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment