diff options
author | Denis Shienkov <denis.shienkov@gmail.com> | 2015-09-16 15:52:02 +0300 |
---|---|---|
committer | Denis Shienkov <denis.shienkov@gmail.com> | 2015-09-17 08:01:49 +0000 |
commit | 1b474243ed2b23a4f7ecd57b339b01feac020179 (patch) | |
tree | 0e9aacaa7aedd3e387b7182cf7d8fd52a56cda9d | |
parent | 64f756d45c55c04ac3decf3976a8fb241d543f3b (diff) | |
download | qtserialport-1b474243ed2b23a4f7ecd57b339b01feac020179.tar.gz |
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/
(cherry-picked from 55f39fe09aaf6208fd27c3c6060d4ab0171f77b1)
Change-Id: I7389b5ac656d54056baffd0922596feff9fe3788
Reviewed-by: Denis Shienkov <denis.shienkov@gmail.com>
-rw-r--r-- | src/serialport/qserialportinfo_unix.cpp | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/src/serialport/qserialportinfo_unix.cpp b/src/serialport/qserialportinfo_unix.cpp index 7e64bfc..146e348 100644 --- a/src/serialport/qserialportinfo_unix.cpp +++ b/src/serialport/qserialportinfo_unix.cpp @@ -83,8 +83,9 @@ 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. -#elif defined (Q_OS_FREEBSD) + << QStringLiteral("ircomm*") // IrDA serial device. + << QStringLiteral("tnt*"); // Virtual tty0tty serial device. +#elif defined(Q_OS_FREEBSD) << QStringLiteral("cu*"); #elif defined (Q_OS_QNX) << QStringLiteral("ser*"); @@ -444,6 +445,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()); @@ -538,8 +548,10 @@ QList<QSerialPortInfo> 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); @@ -708,8 +720,10 @@ QList<QSerialPortInfo> 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); |