diff options
author | Denis Shienkov <denis.shienkov@gmail.com> | 2014-12-04 16:14:51 +0300 |
---|---|---|
committer | Denis Shienkov <denis.shienkov@gmail.com> | 2014-12-04 21:05:18 +0100 |
commit | 5c11aaee8394e02dd52ea2b1e5e0092bfcf15148 (patch) | |
tree | 241ab02cd1bcf07a403f9f198f048962dedebfde | |
parent | c5fbdb8014c6374aaecf277e109ee2ce5b99afdc (diff) | |
download | qtserialport-5c11aaee8394e02dd52ea2b1e5e0092bfcf15148.tar.gz |
Detect of Bluetooth SPP (rfcomm) device with SysFs
Change-Id: I41d67e9ca8d9cb6042b4d8de756a22d18b077dcd
Reviewed-by: Sergey Belyashov <Sergey.Belyashov@gmail.com>
-rw-r--r-- | src/serialport/qserialportinfo_unix.cpp | 30 |
1 files 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<QSerialPortInfo> 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<QSerialPortInfo> 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); |