5 changed files with 195 additions and 51 deletions
@ -0,0 +1,106 @@ |
|||||||
|
/*=====================================================================
|
||||||
|
|
||||||
|
QGroundControl Open Source Ground Control Station |
||||||
|
|
||||||
|
(c) 2009 - 2015 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
|
||||||
|
|
||||||
|
This file is part of the QGROUNDCONTROL project |
||||||
|
|
||||||
|
QGROUNDCONTROL is free software: you can redistribute it and/or modify |
||||||
|
it under the terms of the GNU General Public License as published by |
||||||
|
the Free Software Foundation, either version 3 of the License, or |
||||||
|
(at your option) any later version. |
||||||
|
|
||||||
|
QGROUNDCONTROL is distributed in the hope that it will be useful, |
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||||
|
GNU General Public License for more details. |
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License |
||||||
|
along with QGROUNDCONTROL. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
======================================================================*/ |
||||||
|
|
||||||
|
#include "QGCSerialPortInfo.h" |
||||||
|
|
||||||
|
QGC_LOGGING_CATEGORY(QGCSerialPortInfoLog, "QGCSerialPortInfoLog") |
||||||
|
|
||||||
|
QGCSerialPortInfo::QGCSerialPortInfo(const QSerialPort & port) : |
||||||
|
QSerialPortInfo(port) |
||||||
|
{ |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
QGCSerialPortInfo::BoardType_t QGCSerialPortInfo::boardType(void) const |
||||||
|
{ |
||||||
|
if (isNull()) { |
||||||
|
return BoardTypeUnknown; |
||||||
|
} |
||||||
|
|
||||||
|
BoardType_t boardType = BoardTypeUnknown; |
||||||
|
|
||||||
|
switch (vendorIdentifier()) { |
||||||
|
case px4VendorId: |
||||||
|
if (productIdentifier() == pixhawkFMUV2ProductId || productIdentifier() == pixhawkFMUV2OldBootloaderProductId) { |
||||||
|
qCDebug(QGCSerialPortInfoLog) << "Found PX4 FMU V2"; |
||||||
|
boardType = BoardTypePX4FMUV2; |
||||||
|
} else if (productIdentifier() == pixhawkFMUV1ProductId) { |
||||||
|
qCDebug(QGCSerialPortInfoLog) << "Found PX4 FMU V1"; |
||||||
|
boardType = BoardTypePX4FMUV1; |
||||||
|
} else if (productIdentifier() == px4FlowProductId) { |
||||||
|
qCDebug(QGCSerialPortInfoLog) << "Found PX4 Flow"; |
||||||
|
boardType = BoardTypePX4Flow; |
||||||
|
} else if (productIdentifier() == AeroCoreProductId) { |
||||||
|
qCDebug(QGCSerialPortInfoLog) << "Found AeroCore"; |
||||||
|
boardType = BoardTypeAeroCore; |
||||||
|
} |
||||||
|
break; |
||||||
|
case threeDRRadioVendorId: |
||||||
|
if (productIdentifier() == threeDRRadioProductId) { |
||||||
|
qCDebug(QGCSerialPortInfoLog) << "Found 3DR Radio"; |
||||||
|
boardType = BoardType3drRadio; |
||||||
|
} |
||||||
|
break; |
||||||
|
} |
||||||
|
|
||||||
|
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") { |
||||||
|
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") { |
||||||
|
qCDebug(QGCSerialPortInfoLog) << "Found PX4 FMU V1 (by name matching fallback)"; |
||||||
|
boardType = BoardTypePX4FMUV1; |
||||||
|
} else if (description().startsWith("PX4 FMU")) { |
||||||
|
qCDebug(QGCSerialPortInfoLog) << "Found PX4 FMU, assuming V2 (by name matching fallback)"; |
||||||
|
boardType = BoardTypePX4FMUV2; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
return boardType; |
||||||
|
} |
||||||
|
|
||||||
|
QList<QGCSerialPortInfo> QGCSerialPortInfo::availablePorts(void) |
||||||
|
{ |
||||||
|
QList<QGCSerialPortInfo> list; |
||||||
|
|
||||||
|
foreach(QSerialPortInfo portInfo, QSerialPortInfo::availablePorts()) { |
||||||
|
list << *((QGCSerialPortInfo*)&portInfo); |
||||||
|
} |
||||||
|
|
||||||
|
return list; |
||||||
|
} |
||||||
|
|
||||||
|
bool QGCSerialPortInfo::boardTypePixhawk(void) const |
||||||
|
{ |
||||||
|
BoardType_t boardType = this->boardType(); |
||||||
|
|
||||||
|
return boardType == BoardTypePX4FMUV1 || boardType == BoardTypePX4FMUV2 || boardType == BoardTypeAeroCore; |
||||||
|
} |
||||||
|
|
||||||
|
bool QGCSerialPortInfo::isBootloader(void) const |
||||||
|
{ |
||||||
|
// FIXME: Check SerialLink bootloade detect code which is different
|
||||||
|
return boardTypePixhawk() && description().contains("BL"); |
||||||
|
} |
Loading…
Reference in new issue