From 55f39fe09aaf6208fd27c3c6060d4ab0171f77b1 Mon Sep 17 00:00:00 2001 From: Denis Shienkov Date: Wed, 16 Sep 2015 15:52:02 +0300 Subject: Allow to enumerate the tty0tty devices on Linux Now QSPI return a list of virtual serial ports which are created by the tty0tty driver: http://sourceforge.net/p/tty0tty/wiki/Home/ Change-Id: I7389b5ac656d54056baffd0922596feff9fe3788 Reviewed-by: Sergey Belyashov Reviewed-by: Denis Shienkov --- src/serialport/qserialportinfo_unix.cpp | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/src/serialport/qserialportinfo_unix.cpp b/src/serialport/qserialportinfo_unix.cpp index f3f5a27..f52516f 100644 --- a/src/serialport/qserialportinfo_unix.cpp +++ b/src/serialport/qserialportinfo_unix.cpp @@ -75,7 +75,8 @@ static QStringList filteredDeviceFilePaths() << QStringLiteral("ttymxc*") // Motorola IMX serial ports (i.e. Freescale i.MX). << QStringLiteral("ttyAMA*") // AMBA serial device for embedded platform on ARM (i.e. Raspberry Pi). << QStringLiteral("rfcomm*") // Bluetooth serial device. - << QStringLiteral("ircomm*"); // IrDA serial device. + << QStringLiteral("ircomm*") // IrDA serial device. + << QStringLiteral("tnt*"); // Virtual tty0tty serial device. #elif defined(Q_OS_FREEBSD) << QStringLiteral("cu*"); #elif defined(Q_OS_QNX) @@ -436,6 +437,15 @@ static bool isRfcommDevice(const QString &portName) return true; } +// provided by the tty0tty driver +static bool isVirtualNullModemDevice(const QString &portName) +{ + if (!portName.startsWith(QLatin1String("tnt"))) + return false; + + return true; +} + static QString ueventProperty(const QDir &targetDir, const QByteArray &pattern) { QFile f(QFileInfo(targetDir, QStringLiteral("uevent")).absoluteFilePath()); @@ -530,8 +540,10 @@ QList availablePortsBySysfs(bool &ok) const QString driverName = deviceDriver(targetDir); if (driverName.isEmpty()) { - if (!isRfcommDevice(priv.portName)) + if (!isRfcommDevice(priv.portName) + && !isVirtualNullModemDevice(priv.portName)) { continue; + } } priv.device = QSerialPortInfoPrivate::portNameToSystemLocation(priv.portName); @@ -700,8 +712,10 @@ QList availablePortsByUdev(bool &ok) priv.vendorIdentifier = deviceVendorIdentifier(dev.data(), priv.hasVendorIdentifier); priv.productIdentifier = deviceProductIdentifier(dev.data(), priv.hasProductIdentifier); } else { - if (!isRfcommDevice(priv.portName)) + if (!isRfcommDevice(priv.portName) + && !isVirtualNullModemDevice(priv.portName)) { continue; + } } serialPortInfoList.append(priv); -- cgit v1.2.1