summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenis Shienkov <denis.shienkov@gmail.com>2016-02-14 17:01:12 +0000
committerDenis Shienkov <denis.shienkov@gmail.com>2016-02-15 14:31:43 +0000
commitc32a064349ddce1149afd8c524ac43f30cdddc80 (patch)
treefdd04b5109ba9dcf55ed1f59fb4c960ec777bacd
parentd516687a45954999255e4c4b26c55675e2efc376 (diff)
downloadqtserialport-c32a064349ddce1149afd8c524ac43f30cdddc80.tar.gz
Enumerate dial-in devices on FreeBSD
BSD-like systems divide serial ports into dial-in (tty) and dial-out (cua) devices. QSPI did not return a list of dial-in devices, that now has been fixed in this patch. Change-Id: I593719429e3b6641012eb046851dd08b9dc829fb Reviewed-by: Sergey Belyashov <Sergey.Belyashov@gmail.com> Reviewed-by: Denis Shienkov <denis.shienkov@gmail.com>
-rw-r--r--src/serialport/qserialportinfo_freebsd.cpp38
1 files changed, 29 insertions, 9 deletions
diff --git a/src/serialport/qserialportinfo_freebsd.cpp b/src/serialport/qserialportinfo_freebsd.cpp
index e65f09c..49612f1 100644
--- a/src/serialport/qserialportinfo_freebsd.cpp
+++ b/src/serialport/qserialportinfo_freebsd.cpp
@@ -47,13 +47,13 @@
QT_BEGIN_NAMESPACE
-static QString deviceProperty(const QString &pnpinfo, const QByteArray &pattern)
+static QString deviceProperty(const QString &source, const QByteArray &pattern)
{
- const int firstbound = pnpinfo.indexOf(QLatin1String(pattern));
+ const int firstbound = source.indexOf(QLatin1String(pattern));
if (firstbound == -1)
return QString();
- const int lastbound = pnpinfo.indexOf(QLatin1Char(' '), firstbound);
- return pnpinfo.mid(firstbound + pattern.size(), lastbound - firstbound - pattern.size());
+ const int lastbound = source.indexOf(QLatin1Char(' '), firstbound);
+ return source.mid(firstbound + pattern.size(), lastbound - firstbound - pattern.size());
}
static QString deviceName(const QString &pnpinfo)
@@ -202,8 +202,8 @@ static QList<NodeInfo> enumerateDesiredNodes(const QVector<int> &mib)
const NodeInfo node = nodeForOid(nextoid);
if (!node.name.isEmpty()) {
- if (node.name.endsWith("\%desc")
- || node.name.endsWith("\%pnpinfo")) {
+ if (node.name.endsWith(QLatin1String("\%desc"))
+ || node.name.endsWith(QLatin1String("\%pnpinfo"))) {
nodes.append(node);
}
}
@@ -228,10 +228,11 @@ QList<QSerialPortInfo> QSerialPortInfo::availablePorts()
if (!(deviceDir.exists() && deviceDir.isReadable()))
return QList<QSerialPortInfo>();
- deviceDir.setNameFilters(QStringList() << QLatin1String("cua*"));
+ deviceDir.setNameFilters(QStringList() << QLatin1String("cua*") << QLatin1String("tty*"));
deviceDir.setFilter(QDir::Files | QDir::System | QDir::NoSymLinks);
- QList<QSerialPortInfo> serialPortInfoList;
+ QList<QSerialPortInfo> cuaCandidates;
+ QList<QSerialPortInfo> ttyCandidates;
foreach (const QString &portName, deviceDir.entryList()) {
if (portName.endsWith(QLatin1String(".init"))
@@ -304,7 +305,26 @@ QList<QSerialPortInfo> QSerialPortInfo::availablePorts()
break;
}
- serialPortInfoList.append(priv);
+ if (portName.startsWith(QLatin1String("cua")))
+ cuaCandidates.append(priv);
+ else if (portName.startsWith(QLatin1String("tty")))
+ ttyCandidates.append(priv);
+ }
+
+ QList<QSerialPortInfo> serialPortInfoList;
+
+ foreach (const QSerialPortInfo &cuaCandidate, cuaCandidates) {
+ const QString cuaPortName = cuaCandidate.portName();
+ const QString cuaToken = deviceProperty(cuaPortName, "cua");
+ foreach (const QSerialPortInfo &ttyCandidate, ttyCandidates) {
+ const QString ttyPortName = ttyCandidate.portName();
+ const QString ttyToken = deviceProperty(ttyPortName, "tty");
+ if (cuaToken != ttyToken)
+ continue;
+
+ serialPortInfoList.append(cuaCandidate);
+ serialPortInfoList.append(ttyCandidate);
+ }
}
return serialPortInfoList;