summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenis Shienkov <denis.shienkov@gmail.com>2014-12-04 16:14:51 +0300
committerDenis Shienkov <denis.shienkov@gmail.com>2014-12-04 21:05:18 +0100
commit5c11aaee8394e02dd52ea2b1e5e0092bfcf15148 (patch)
tree241ab02cd1bcf07a403f9f198f048962dedebfde
parentc5fbdb8014c6374aaecf277e109ee2ce5b99afdc (diff)
downloadqtserialport-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.cpp30
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);