summaryrefslogtreecommitdiffstats
path: root/src/serialport/qserialportinfo_osx.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/serialport/qserialportinfo_osx.cpp')
-rw-r--r--src/serialport/qserialportinfo_osx.cpp38
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);