1
0
mirror of https://bitbucket.org/librepilot/librepilot.git synced 2024-12-11 19:24:10 +01:00

OP-1398 OP-1399 Windows Qt 5.3.1 upgrade - workaround for QSerialPortInfo::availablePorts() returning spurious ports (QTBUG-39748)

This commit is contained in:
Philippe Renon 2014-07-14 20:03:19 +02:00
parent e196a1f01b
commit 89bc0b13f2
2 changed files with 21 additions and 2 deletions

View File

@ -114,12 +114,29 @@ bool sortPorts(const QSerialPortInfo &s1, const QSerialPortInfo &s2)
return s1.portName() < s2.portName(); return s1.portName() < s2.portName();
} }
QList<QSerialPortInfo> SerialConnection::availablePorts()
{
QList<QSerialPortInfo> ports = QSerialPortInfo::availablePorts();
#if QT_VERSION == 0x050301 && defined(Q_OS_WIN)
// workaround to QTBUG-39748 (https://bugreports.qt-project.org/browse/QTBUG-39748)
// Qt 5.3.1 reports spurious ports with an empty description...
QMutableListIterator<QSerialPortInfo> i(ports);
while (i.hasNext()) {
if (i.next().description().isEmpty()) {
i.remove();
}
}
#endif
return ports;
}
QList <Core::IConnection::device> SerialConnection::availableDevices() QList <Core::IConnection::device> SerialConnection::availableDevices()
{ {
QList <Core::IConnection::device> list; QList <Core::IConnection::device> list;
if (enablePolling) { if (enablePolling) {
QList<QSerialPortInfo> ports = QSerialPortInfo::availablePorts(); QList<QSerialPortInfo> ports = availablePorts();
// sort the list by port number (nice idea from PT_Dreamer :)) // sort the list by port number (nice idea from PT_Dreamer :))
qSort(ports.begin(), ports.end(), sortPorts); qSort(ports.begin(), ports.end(), sortPorts);
@ -140,7 +157,7 @@ QIODevice *SerialConnection::openDevice(const QString &deviceName)
if (serialHandle) { if (serialHandle) {
closeDevice(deviceName); closeDevice(deviceName);
} }
QList<QSerialPortInfo> ports = QSerialPortInfo::availablePorts(); QList<QSerialPortInfo> ports = availablePorts();
foreach(QSerialPortInfo port, ports) { foreach(QSerialPortInfo port, ports) {
if (port.portName() == deviceName) { if (port.portName() == deviceName) {
// we need to handle port settings here... // we need to handle port settings here...

View File

@ -106,6 +106,8 @@ private:
SerialPluginConfiguration *m_config; SerialPluginConfiguration *m_config;
SerialPluginOptionsPage *m_optionspage; SerialPluginOptionsPage *m_optionspage;
QList<QSerialPortInfo> availablePorts();
protected slots: protected slots:
void onEnumerationChanged(); void onEnumerationChanged();