From 5c11aaee8394e02dd52ea2b1e5e0092bfcf15148 Mon Sep 17 00:00:00 2001 From: Denis Shienkov Date: Thu, 4 Dec 2014 16:14:51 +0300 Subject: Detect of Bluetooth SPP (rfcomm) device with SysFs Change-Id: I41d67e9ca8d9cb6042b4d8de756a22d18b077dcd Reviewed-by: Sergey Belyashov --- src/serialport/qserialportinfo_unix.cpp | 30 +++++++++++++++++++----------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/src/serialport/qserialportinfo_unix.cpp b/src/serialport/qserialportinfo_unix.cpp index 58eb62b..07587ec 100644 --- a/src/serialport/qserialportinfo_unix.cpp +++ b/src/serialport/qserialportinfo_unix.cpp @@ -132,6 +132,18 @@ static bool isValidSerial8250(const QString &systemLocation) return false; } +static bool isRfcommDevice(const QString &portName) +{ + if (!portName.startsWith(QStringLiteral("rfcomm"))) + return false; + + bool ok; + const int portNumber = portName.mid(6).toInt(&ok); + if (!ok || (portNumber < 0) || (portNumber > 255)) + return false; + return true; +} + static QString ueventProperty(const QDir &targetDir, const QByteArray &pattern) { QFile f(QFileInfo(targetDir, QStringLiteral("uevent")).absoluteFilePath()); @@ -218,16 +230,18 @@ QList availablePortsBySysfs(bool &ok) QDir targetDir(fileInfo.symLinkTarget()); - const QString driverName = deviceDriver(targetDir); - if (driverName.isEmpty()) - continue; - QSerialPortInfoPrivate priv; priv.portName = deviceName(targetDir); if (priv.portName.isEmpty()) continue; + const QString driverName = deviceDriver(targetDir); + if (driverName.isEmpty()) { + if (!isRfcommDevice(priv.portName)) + continue; + } + priv.device = QSerialPortInfoPrivate::portNameToSystemLocation(priv.portName); if (isSerial8250Driver(driverName) && !isValidSerial8250(priv.device)) continue; @@ -394,14 +408,8 @@ QList availablePortsByUdev(bool &ok) priv.vendorIdentifier = deviceVendorIdentifier(dev.data(), priv.hasVendorIdentifier); priv.productIdentifier = deviceProductIdentifier(dev.data(), priv.hasProductIdentifier); } else { - if (priv.portName.startsWith(rfcommDeviceName)) { - bool ok; - int portNumber = priv.portName.mid(rfcommDeviceName.length()).toInt(&ok); - if (!ok || (portNumber < 0) || (portNumber > 255)) - continue; - } else { + if (!isRfcommDevice(priv.portName)) continue; - } } serialPortInfoList.append(priv); -- cgit v1.2.1