summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenis Shienkov <denis.shienkov@gmail.com>2014-07-01 18:57:59 +0400
committerDenis Shienkov <denis.shienkov@gmail.com>2014-07-09 09:13:08 +0200
commit3c48b918339b25fa21595d7bed6dc8b9e5ca65b0 (patch)
tree92984c235983144bd7ac54d444e7acf07e7949ab
parenta55dbce3d1a5f75647d5325f94af9d76a41cdede (diff)
downloadqtserialport-3c48b918339b25fa21595d7bed6dc8b9e5ca65b0.tar.gz
Make independent implementation of QSerialPortInfo for OS X
Building in OS X uses some shared code from the serialportinfo_unix.cpp module with the OS X specific code from the serialportinfo_mac.cpp module. Thus, all code of the serialportinfo_unix.cpp module, which not related with the OS X, is shielded by a macro. It adds an excessive garbage for readability in this module and also some confusion in the *.pri file. It makes sense to make implementation of the serialportinfo_mac.cpp module completely independent, that will simplify maintaining of source code. Besides are added tests which can reveal declared but not implemented methods in building, and also to check a correctness of default values at running. Tested build on OS X 10.8.4 with Qt4, an then on Android with Qt5. Change-Id: I67935b64e2b623fb8d4c14d59e1b87f1eac71c3e Reviewed-by: Bernard Pratz <guyzmo+qt@m0g.net> Reviewed-by: Peter Kümmel <syntheticpp@gmx.net> Reviewed-by: Denis Shienkov <denis.shienkov@gmail.com>
-rw-r--r--src/serialport/qserialportinfo_mac.cpp35
-rw-r--r--src/serialport/qserialportinfo_unix.cpp8
-rw-r--r--src/serialport/serialport-lib.pri11
-rw-r--r--tests/manual/qserialportinfo/tst_qserialportinfo.cpp21
4 files changed, 62 insertions, 13 deletions
diff --git a/src/serialport/qserialportinfo_mac.cpp b/src/serialport/qserialportinfo_mac.cpp
index 2c2564e..d540b15 100644
--- a/src/serialport/qserialportinfo_mac.cpp
+++ b/src/serialport/qserialportinfo_mac.cpp
@@ -43,6 +43,7 @@
#include "qserialportinfo.h"
#include "qserialportinfo_p.h"
+#include "qserialport_unix_p.h"
#include <sys/param.h>
@@ -290,4 +291,38 @@ QList<QSerialPortInfo> QSerialPortInfo::availablePorts()
return serialPortInfoList;
}
+QList<qint32> QSerialPortInfo::standardBaudRates()
+{
+ return QSerialPortPrivate::standardBaudRates();
+}
+
+bool QSerialPortInfo::isBusy() const
+{
+ QString lockFilePath = serialPortLockFilePath(portName());
+ if (lockFilePath.isEmpty())
+ return false;
+
+ QFile reader(lockFilePath);
+ if (!reader.open(QIODevice::ReadOnly))
+ return false;
+
+ QByteArray pidLine = reader.readLine();
+ pidLine.chop(1);
+ if (pidLine.isEmpty())
+ return false;
+
+ qint64 pid = pidLine.toLongLong();
+
+ if (pid && (::kill(pid, 0) == -1) && (errno == ESRCH))
+ return false; // PID doesn't exist anymore
+
+ return true;
+}
+
+bool QSerialPortInfo::isValid() const
+{
+ QFile f(systemLocation());
+ return f.exists();
+}
+
QT_END_NAMESPACE
diff --git a/src/serialport/qserialportinfo_unix.cpp b/src/serialport/qserialportinfo_unix.cpp
index ce5f3a9..0ed8703 100644
--- a/src/serialport/qserialportinfo_unix.cpp
+++ b/src/serialport/qserialportinfo_unix.cpp
@@ -55,16 +55,10 @@
#include <sys/types.h> // kill
#include <signal.h> // kill
-#ifndef Q_OS_MAC
-
#include "qtudev_p.h"
-#endif
-
QT_BEGIN_NAMESPACE
-#ifndef Q_OS_MAC
-
static QStringList filteredDeviceFilePaths()
{
static const QStringList deviceFileNameFilterList = QStringList()
@@ -379,8 +373,6 @@ QList<QSerialPortInfo> QSerialPortInfo::availablePorts()
return serialPortInfoList;
}
-#endif
-
QList<qint32> QSerialPortInfo::standardBaudRates()
{
return QSerialPortPrivate::standardBaudRates();
diff --git a/src/serialport/serialport-lib.pri b/src/serialport/serialport-lib.pri
index 166a6fa..9c9b076 100644
--- a/src/serialport/serialport-lib.pri
+++ b/src/serialport/serialport-lib.pri
@@ -78,11 +78,14 @@ unix:!symbian {
$$PWD/qserialport_unix_p.h
SOURCES += \
- $$PWD/qserialport_unix.cpp \
- $$PWD/qserialportinfo_unix.cpp
+ $$PWD/qserialport_unix.cpp
- macx {
- SOURCES += $$PWD/qserialportinfo_mac.cpp
+ !mac {
+ SOURCES += \
+ $$PWD/qserialportinfo_unix.cpp
+ } else {
+ SOURCES += \
+ $$PWD/qserialportinfo_mac.cpp
LIBS_PRIVATE += -framework IOKit -framework CoreFoundation
}
diff --git a/tests/manual/qserialportinfo/tst_qserialportinfo.cpp b/tests/manual/qserialportinfo/tst_qserialportinfo.cpp
index c73aa00..1908dc0 100644
--- a/tests/manual/qserialportinfo/tst_qserialportinfo.cpp
+++ b/tests/manual/qserialportinfo/tst_qserialportinfo.cpp
@@ -54,6 +54,7 @@ class tst_QSerialPortInfo : public QObject
private slots:
void serialPortInfoList();
+ void standardBaudRateList();
void constructors();
void assignment();
};
@@ -64,9 +65,27 @@ void tst_QSerialPortInfo::serialPortInfoList()
QCOMPARE(list.isEmpty(), false);
}
+void tst_QSerialPortInfo::standardBaudRateList()
+{
+ QList<qint32> list(QSerialPortInfo::standardBaudRates());
+ QCOMPARE(list.isEmpty(), false);
+}
+
void tst_QSerialPortInfo::constructors()
{
- // FIXME
+ QSerialPortInfo serialPortInfo;
+ QCOMPARE(serialPortInfo.portName().isEmpty(), true);
+ QCOMPARE(serialPortInfo.systemLocation().isEmpty(), true);
+ QCOMPARE(serialPortInfo.description().isEmpty(), true);
+ QCOMPARE(serialPortInfo.manufacturer().isEmpty(), true);
+ QCOMPARE(serialPortInfo.serialNumber().isEmpty(), true);
+ QCOMPARE(serialPortInfo.vendorIdentifier(), quint16(0));
+ QCOMPARE(serialPortInfo.productIdentifier(), quint16(0));
+ QCOMPARE(serialPortInfo.hasVendorIdentifier(), false);
+ QCOMPARE(serialPortInfo.hasProductIdentifier(), false);
+ QCOMPARE(serialPortInfo.isNull(), false);
+ QCOMPARE(serialPortInfo.isBusy(), false);
+ QCOMPARE(serialPortInfo.isValid(), false);
}
void tst_QSerialPortInfo::assignment()