diff --git a/ChangeLog.md b/ChangeLog.md index 739a03f9311062d660cc84ba734ef85364e5ae65..4a2c6c520420b5717683aaed342e185bc44123bb 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -14,8 +14,9 @@ Note: This file only contains high level features or important fixes. ## 4.0 -## 4.0.8 - Not yet released +## 4.0.9 - Not yet released +* Don't auto-connect to second Cube Orange/Yellow composite port * Plan: Fix bugs associated with mission commands which specify and altitude but no lat/lon * Fix bug which could prevent view switching from working after altitude mode warning dialog would pop up diff --git a/src/comm/QGCSerialPortInfo.cc b/src/comm/QGCSerialPortInfo.cc index 4cf191454c77d3af75447b683ece018b010ea28e..3835e8db99d33f043823cc5124afc016e6a2a1e3 100644 --- a/src/comm/QGCSerialPortInfo.cc +++ b/src/comm/QGCSerialPortInfo.cc @@ -294,10 +294,35 @@ QString QGCSerialPortInfo::_boardTypeToString(BoardType_t boardType) QList QGCSerialPortInfo::availablePorts(void) { + // Cube Orange/Yellow are composite devices which expose two usb ports over a single usb connection. + // The first port is the mavlink connection, the second is the SLCAN connection by default. + // We don't expose the second port as being available to QGC. + + static const int hexCubeVID = 11694; + static const int hexCubeOrangePID = 4118; + static const int hexCubeYellowPID = 4114; + + bool cubeOrangeAlreadySeen = false; + bool cubeYellowAlreadySeen = false; + QList list; for(QSerialPortInfo portInfo: QSerialPortInfo::availablePorts()) { if (!isSystemPort(&portInfo)) { + if (portInfo.vendorIdentifier() == hexCubeVID && portInfo.productIdentifier() == hexCubeOrangePID) { + if (cubeOrangeAlreadySeen) { + continue; + } + qCDebug(QGCSerialPortInfoLog) << "Skipping secondary port on Cube Orange" << portInfo.portName(); + cubeOrangeAlreadySeen = true; + } + if (portInfo.vendorIdentifier() == hexCubeVID && portInfo.productIdentifier() == hexCubeYellowPID) { + if (cubeYellowAlreadySeen) { + continue; + } + qCDebug(QGCSerialPortInfoLog) << "Skipping secondary port on Cube Yellow" << portInfo.portName(); + cubeYellowAlreadySeen = true; + } list << *((QGCSerialPortInfo*)&portInfo); } }