summaryrefslogtreecommitdiff
path: root/src/serialport/qserialportinfo_unix.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/serialport/qserialportinfo_unix.cpp')
-rw-r--r--src/serialport/qserialportinfo_unix.cpp80
1 files changed, 47 insertions, 33 deletions
diff --git a/src/serialport/qserialportinfo_unix.cpp b/src/serialport/qserialportinfo_unix.cpp
index 4fc6650..61d21d6 100644
--- a/src/serialport/qserialportinfo_unix.cpp
+++ b/src/serialport/qserialportinfo_unix.cpp
@@ -234,6 +234,45 @@ QString getUdevPropertyValue(struct ::udev_device *dev, const char *name)
return QString::fromLatin1(::udev_device_get_property_value(dev, name));
}
+static
+bool checkUdevForSerial8250Driver(struct ::udev_device *dev)
+{
+ const QString driverName = QString::fromLatin1(::udev_device_get_driver(dev));
+ return (driverName == QStringLiteral("serial8250"));
+}
+
+static
+QString getUdevModelName(struct ::udev_device *dev)
+{
+ return getUdevPropertyValue(dev, "ID_MODEL")
+ .replace(QLatin1Char('_'), QLatin1Char(' '));
+}
+
+static
+QString getUdevVendorName(struct ::udev_device *dev)
+{
+ return getUdevPropertyValue(dev, "ID_VENDOR")
+ .replace(QLatin1Char('_'), QLatin1Char(' '));
+}
+
+static
+quint16 getUdevModelIdentifier(struct ::udev_device *dev, bool &hasIdentifier)
+{
+ return getUdevPropertyValue(dev, "ID_MODEL_ID").toInt(&hasIdentifier, 16);
+}
+
+static
+quint16 getUdevVendorIdentifier(struct ::udev_device *dev, bool &hasIdentifier)
+{
+ return getUdevPropertyValue(dev, "ID_VENDOR_ID").toInt(&hasIdentifier, 16);
+}
+
+static
+QString getUdevSerialNumber(struct ::udev_device *dev)
+{
+ return getUdevPropertyValue(dev,"ID_SERIAL_SHORT");
+}
+
QList<QSerialPortInfo> availablePortsByUdev()
{
#ifndef LINK_LIBUDEV
@@ -276,43 +315,18 @@ QList<QSerialPortInfo> availablePortsByUdev()
if (parentdev) {
- QString subsys = QString::fromLatin1(::udev_device_get_subsystem(parentdev));
-
- if (subsys == QStringLiteral("usb-serial")
- || subsys == QStringLiteral("usb")) {
- serialPortInfo.d_ptr->description =
- getUdevPropertyValue(dev.data(), "ID_MODEL").replace(QLatin1Char('_'), QLatin1Char(' '));
-
- serialPortInfo.d_ptr->manufacturer =
- getUdevPropertyValue(dev.data(), "ID_VENDOR").replace(QLatin1Char('_'), QLatin1Char(' '));
-
- serialPortInfo.d_ptr->serialNumber = getUdevPropertyValue(dev.data(),"ID_SERIAL_SHORT");
-
- serialPortInfo.d_ptr->vendorIdentifier =
- getUdevPropertyValue(dev.data(), "ID_VENDOR_ID").toInt(&serialPortInfo.d_ptr->hasVendorIdentifier, 16);
-
- serialPortInfo.d_ptr->productIdentifier =
- getUdevPropertyValue(dev.data(), "ID_MODEL_ID").toInt(&serialPortInfo.d_ptr->hasProductIdentifier, 16);
-
- } else if (subsys == QStringLiteral("pnp")) {
- // TODO: Obtain more information
- } else if (subsys == QStringLiteral("platform")) {
+ if (checkUdevForSerial8250Driver(parentdev))
continue;
- } else if (subsys == QStringLiteral("pci")) {
- serialPortInfo.d_ptr->description =
- getUdevPropertyValue(dev.data(), "ID_MODEL");
- serialPortInfo.d_ptr->manufacturer =
- getUdevPropertyValue(dev.data(), "ID_VENDOR");
+ serialPortInfo.d_ptr->description = getUdevModelName(dev.data());
+ serialPortInfo.d_ptr->manufacturer = getUdevVendorName(dev.data());
+ serialPortInfo.d_ptr->serialNumber = getUdevSerialNumber(dev.data());
- serialPortInfo.d_ptr->vendorIdentifier =
- getUdevPropertyValue(dev.data(), "ID_VENDOR_ID").toInt(&serialPortInfo.d_ptr->hasVendorIdentifier, 16);
+ serialPortInfo.d_ptr->vendorIdentifier = getUdevModelIdentifier(
+ dev.data(), serialPortInfo.d_ptr->hasVendorIdentifier);
- serialPortInfo.d_ptr->productIdentifier =
- getUdevPropertyValue(dev.data(), "ID_MODEL_ID").toInt(&serialPortInfo.d_ptr->hasProductIdentifier, 16);
- } else {
- // FIXME: Obtain more information
- }
+ serialPortInfo.d_ptr->productIdentifier = getUdevVendorIdentifier(
+ dev.data(), serialPortInfo.d_ptr->hasProductIdentifier);
} else {
if (serialPortInfo.d_ptr->portName.startsWith(rfcommDeviceName)) {
bool ok;