diff options
author | Liang Qi <liang.qi@theqtcompany.com> | 2016-02-15 21:04:41 +0100 |
---|---|---|
committer | Liang Qi <liang.qi@theqtcompany.com> | 2016-02-15 21:04:41 +0100 |
commit | 5bee9d9f0f8cf5415ad9337aed88bccac3c15ce1 (patch) | |
tree | 7aa21cde3da0200a293ece5ca0cb1330f5513b3b /src/serialport/qserialportinfo_osx.cpp | |
parent | e5c93da50f3b05d312f0e3dec50baf9fcbd5ffdc (diff) | |
parent | 26ea44e3b45de4a33515c826f6f5c9aa501f57fd (diff) |
Merge remote-tracking branch 'origin/5.6' into 5.7v5.7.0-alpha1
Conflicts:
.qmake.conf
Change-Id: I0dcaa0ea10fa9ca4a04f5c3837ea70028fc9c0b8
Diffstat (limited to 'src/serialport/qserialportinfo_osx.cpp')
-rw-r--r-- | src/serialport/qserialportinfo_osx.cpp | 38 |
1 files changed, 27 insertions, 11 deletions
diff --git a/src/serialport/qserialportinfo_osx.cpp b/src/serialport/qserialportinfo_osx.cpp index 72b1b53e..54912729 100644 --- a/src/serialport/qserialportinfo_osx.cpp +++ b/src/serialport/qserialportinfo_osx.cpp @@ -89,10 +89,10 @@ static quint16 searchShortIntProperty(io_registry_entry_t ioRegistryEntry, return value; } -static bool isCompleteInfo(const QSerialPortInfoPrivate &priv) +static bool isCompleteInfo(const QSerialPortInfoPrivate &priv, const QString &calloutDevice, const QString &dialinDevice) { - return !priv.portName.isEmpty() - && !priv.device.isEmpty() + return !calloutDevice.isEmpty() + && !dialinDevice.isEmpty() && !priv.manufacturer.isEmpty() && !priv.description.isEmpty() && !priv.serialNumber.isEmpty() @@ -100,11 +100,16 @@ static bool isCompleteInfo(const QSerialPortInfoPrivate &priv) && priv.hasVendorIdentifier; } -static QString deviceSystemLocation(io_registry_entry_t ioRegistryEntry) +static QString calloutDeviceSystemLocation(io_registry_entry_t ioRegistryEntry) { return searchStringProperty(ioRegistryEntry, QCFString(kIOCalloutDeviceKey)); } +static QString dialinDeviceSystemLocation(io_registry_entry_t ioRegistryEntry) +{ + return searchStringProperty(ioRegistryEntry, QCFString(kIODialinDeviceKey)); +} + static QString deviceDescription(io_registry_entry_t ioRegistryEntry) { QString result = searchStringProperty(ioRegistryEntry, QCFString(kIOPropertyProductNameKey)); @@ -168,12 +173,15 @@ QList<QSerialPortInfo> QSerialPortInfo::availablePorts() QSerialPortInfoPrivate priv; + QString calloutDevice; + QString dialinDevice; + forever { - if (priv.device.isEmpty()) { - priv.device = deviceSystemLocation(serialPortService); - if (!priv.device.isEmpty()) - priv.portName = QSerialPortInfoPrivate::portNameFromSystemLocation(priv.device); - } + if (calloutDevice.isEmpty()) + calloutDevice = calloutDeviceSystemLocation(serialPortService); + + if (dialinDevice.isEmpty()) + dialinDevice = dialinDeviceSystemLocation(serialPortService); if (priv.description.isEmpty()) priv.description = deviceDescription(serialPortService); @@ -196,7 +204,7 @@ QList<QSerialPortInfo> QSerialPortInfo::availablePorts() priv.hasProductIdentifier); } - if (isCompleteInfo(priv)) { + if (isCompleteInfo(priv, calloutDevice, dialinDevice)) { ::IOObjectRelease(serialPortService); break; } @@ -206,7 +214,15 @@ QList<QSerialPortInfo> QSerialPortInfo::availablePorts() break; } - serialPortInfoList.append(priv); + QSerialPortInfoPrivate calloutCandidate = priv; + calloutCandidate.device = calloutDevice; + calloutCandidate.portName = QSerialPortInfoPrivate::portNameFromSystemLocation(calloutDevice); + serialPortInfoList.append(calloutCandidate); + + QSerialPortInfoPrivate dialinCandidate = priv; + dialinCandidate.device = dialinDevice; + dialinCandidate.portName = QSerialPortInfoPrivate::portNameFromSystemLocation(dialinDevice); + serialPortInfoList.append(dialinCandidate); } ::IOObjectRelease(serialPortIterator); |