Hello community, here is the log from the commit of package libqt5-qtserialport for openSUSE:Factory checked in at 2016-06-25 01:54:50 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/libqt5-qtserialport (Old) and /work/SRC/openSUSE:Factory/.libqt5-qtserialport.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "libqt5-qtserialport" Changes: -------- --- /work/SRC/openSUSE:Factory/libqt5-qtserialport/libqt5-qtserialport.changes 2016-05-17 17:05:36.000000000 +0200 +++ /work/SRC/openSUSE:Factory/.libqt5-qtserialport.new/libqt5-qtserialport.changes 2016-06-25 01:54:52.000000000 +0200 @@ -1,0 +2,7 @@ +Wed Jun 8 14:15:20 UTC 2016 - hrvoje.sen...@gmail.com + +- Update to 5.6.1 + * For more details please see: + http://blog.qt.io/blog/2016/06/08/qt-5-6-1-released/ + +------------------------------------------------------------------- Old: ---- qtserialport-opensource-src-5.6.0.tar.xz New: ---- qtserialport-opensource-src-5.6.1.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ libqt5-qtserialport.spec ++++++ --- /var/tmp/diff_new_pack.oKxYAy/_old 2016-06-25 01:54:53.000000000 +0200 +++ /var/tmp/diff_new_pack.oKxYAy/_new 2016-06-25 01:54:53.000000000 +0200 @@ -21,15 +21,15 @@ %define libname libQt5SerialPort5 Name: libqt5-qtserialport -Version: 5.6.0 +Version: 5.6.1 Release: 0 Summary: Qt 5 Serial Port Addon License: SUSE-LGPL-2.1-with-digia-exception-1.1 or GPL-3.0 Group: Development/Libraries/X11 Url: http://qt.digia.com %define base_name libqt5 -%define real_version 5.6.0 -%define so_version 5.6.0 +%define real_version 5.6.1 +%define so_version 5.6.1 %define tar_version qtserialport-opensource-src-%{real_version} Source: %{tar_version}.tar.xz Source1: baselibs.conf @@ -89,6 +89,14 @@ API guarantees. The packages that build against these have to require the exact Qt version. +%package examples +Summary: Qt5 Serial Port examples +Group: Development/Libraries/X11 +Recommends: %{name}-devel + +%description examples +Examples for libqt5-qtserialport module. + %post -n %libname -p /sbin/ldconfig %postun -n %libname -p /sbin/ldconfig @@ -128,4 +136,9 @@ %{_libqt5_libdir}/pkgconfig/Qt5SerialPort.pc %{_libqt5_archdatadir}/mkspecs/modules/qt_lib_serialport*.pri +%files examples +%defattr(-,root,root,755) +%doc LGPL_EXCEPTION.txt LICENSE.* +%{_libqt5_examplesdir}/ + %changelog ++++++ qtserialport-opensource-src-5.6.0.tar.xz -> qtserialport-opensource-src-5.6.1.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtserialport-opensource-src-5.6.0/.qmake.conf new/qtserialport-opensource-src-5.6.1/.qmake.conf --- old/qtserialport-opensource-src-5.6.0/.qmake.conf 2016-02-18 08:26:48.000000000 +0100 +++ new/qtserialport-opensource-src-5.6.1/.qmake.conf 2016-05-20 08:00:50.000000000 +0200 @@ -1,3 +1,3 @@ load(qt_build_config) -MODULE_VERSION = 5.6.0 +MODULE_VERSION = 5.6.1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtserialport-opensource-src-5.6.0/.tag new/qtserialport-opensource-src-5.6.1/.tag --- old/qtserialport-opensource-src-5.6.0/.tag 2016-02-18 08:26:48.000000000 +0100 +++ new/qtserialport-opensource-src-5.6.1/.tag 2016-05-20 08:00:50.000000000 +0200 @@ -1 +1 @@ -03d492e49e74eefa1c83e37e833d862f4b9f1e45 +c1355ae41ee46437e9d6583dc4ea452a82b6b53b diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtserialport-opensource-src-5.6.0/dist/changes-5.6.1 new/qtserialport-opensource-src-5.6.1/dist/changes-5.6.1 --- old/qtserialport-opensource-src-5.6.0/dist/changes-5.6.1 1970-01-01 01:00:00.000000000 +0100 +++ new/qtserialport-opensource-src-5.6.1/dist/changes-5.6.1 2016-05-20 08:00:50.000000000 +0200 @@ -0,0 +1,31 @@ +Qt 5.6.1 is a bug-fix release. It maintains both forward and backward +compatibility (source and binary) with Qt 5.6.0. + +For more details, refer to the online documentation included in this +distribution. The documentation is also available online: + + http://doc.qt.io/qt-5/index.html + +The Qt version 5.6 series is binary compatible with the 5.5.x series. +Applications compiled for 5.5 will continue to run with 5.6. + +Some of the changes listed in this file include issue tracking numbers +corresponding to tasks in the Qt Bug Tracker: + + https://bugreports.qt.io/ + +Each of these identifiers can be entered in the bug tracker to obtain more +information about a particular change. + +**************************************************************************** +* Library * +**************************************************************************** + + - QSerialPortInfo: + * Added enumeration of dial-in serial ports on FreeBSD. + * [QTBUG-50895] Added enumeration of dial-in serial ports on OS X. + * Added receiving of USB dongle's serial number on Windows. + + - QSerialPort: + * Prohibited changing of RTS in HardwareFlowControl mode. + * [QTBUG-48677] Fixed reading of data remainder with the CDC USB device on Windows. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtserialport-opensource-src-5.6.0/examples/serialport/blockingmaster/blockingmaster.pro new/qtserialport-opensource-src-5.6.1/examples/serialport/blockingmaster/blockingmaster.pro --- old/qtserialport-opensource-src-5.6.0/examples/serialport/blockingmaster/blockingmaster.pro 2016-02-18 08:26:48.000000000 +0100 +++ new/qtserialport-opensource-src-5.6.1/examples/serialport/blockingmaster/blockingmaster.pro 2016-05-20 08:00:50.000000000 +0200 @@ -11,3 +11,6 @@ main.cpp \ dialog.cpp \ masterthread.cpp + +target.path = $$[QT_INSTALL_EXAMPLES]/serialport/blockingmaster +INSTALLS += target diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtserialport-opensource-src-5.6.0/examples/serialport/blockingslave/blockingslave.pro new/qtserialport-opensource-src-5.6.1/examples/serialport/blockingslave/blockingslave.pro --- old/qtserialport-opensource-src-5.6.0/examples/serialport/blockingslave/blockingslave.pro 2016-02-18 08:26:48.000000000 +0100 +++ new/qtserialport-opensource-src-5.6.1/examples/serialport/blockingslave/blockingslave.pro 2016-05-20 08:00:50.000000000 +0200 @@ -11,3 +11,6 @@ main.cpp \ dialog.cpp \ slavethread.cpp + +target.path = $$[QT_INSTALL_EXAMPLES]/serialport/blockingslave +INSTALLS += target diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtserialport-opensource-src-5.6.0/examples/serialport/cenumerator/cenumerator.pro new/qtserialport-opensource-src-5.6.1/examples/serialport/cenumerator/cenumerator.pro --- old/qtserialport-opensource-src-5.6.0/examples/serialport/cenumerator/cenumerator.pro 2016-02-18 08:26:48.000000000 +0100 +++ new/qtserialport-opensource-src-5.6.1/examples/serialport/cenumerator/cenumerator.pro 2016-05-20 08:00:50.000000000 +0200 @@ -9,3 +9,6 @@ SOURCES += \ main.cpp + +target.path = $$[QT_INSTALL_EXAMPLES]/serialport/cenumerator +INSTALLS += target diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtserialport-opensource-src-5.6.0/examples/serialport/creaderasync/creaderasync.pro new/qtserialport-opensource-src-5.6.1/examples/serialport/creaderasync/creaderasync.pro --- old/qtserialport-opensource-src-5.6.0/examples/serialport/creaderasync/creaderasync.pro 2016-02-18 08:26:48.000000000 +0100 +++ new/qtserialport-opensource-src-5.6.1/examples/serialport/creaderasync/creaderasync.pro 2016-05-20 08:00:50.000000000 +0200 @@ -13,3 +13,6 @@ SOURCES += \ main.cpp \ serialportreader.cpp + +target.path = $$[QT_INSTALL_EXAMPLES]/serialport/creaderasync +INSTALLS += target diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtserialport-opensource-src-5.6.0/examples/serialport/creadersync/creadersync.pro new/qtserialport-opensource-src-5.6.1/examples/serialport/creadersync/creadersync.pro --- old/qtserialport-opensource-src-5.6.0/examples/serialport/creadersync/creadersync.pro 2016-02-18 08:26:48.000000000 +0100 +++ new/qtserialport-opensource-src-5.6.1/examples/serialport/creadersync/creadersync.pro 2016-05-20 08:00:50.000000000 +0200 @@ -9,3 +9,6 @@ SOURCES += \ main.cpp + +target.path = $$[QT_INSTALL_EXAMPLES]/serialport/creadersync +INSTALLS += target diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtserialport-opensource-src-5.6.0/examples/serialport/cwriterasync/cwriterasync.pro new/qtserialport-opensource-src-5.6.1/examples/serialport/cwriterasync/cwriterasync.pro --- old/qtserialport-opensource-src-5.6.0/examples/serialport/cwriterasync/cwriterasync.pro 2016-02-18 08:26:48.000000000 +0100 +++ new/qtserialport-opensource-src-5.6.1/examples/serialport/cwriterasync/cwriterasync.pro 2016-05-20 08:00:50.000000000 +0200 @@ -13,3 +13,6 @@ SOURCES += \ main.cpp \ serialportwriter.cpp + +target.path = $$[QT_INSTALL_EXAMPLES]/serialport/cwriterasync +INSTALLS += target diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtserialport-opensource-src-5.6.0/examples/serialport/cwritersync/cwritersync.pro new/qtserialport-opensource-src-5.6.1/examples/serialport/cwritersync/cwritersync.pro --- old/qtserialport-opensource-src-5.6.0/examples/serialport/cwritersync/cwritersync.pro 2016-02-18 08:26:48.000000000 +0100 +++ new/qtserialport-opensource-src-5.6.1/examples/serialport/cwritersync/cwritersync.pro 2016-05-20 08:00:50.000000000 +0200 @@ -9,3 +9,6 @@ SOURCES += \ main.cpp + +target.path = $$[QT_INSTALL_EXAMPLES]/serialport/cwritersync +INSTALLS += target diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtserialport-opensource-src-5.6.0/examples/serialport/enumerator/enumerator.pro new/qtserialport-opensource-src-5.6.1/examples/serialport/enumerator/enumerator.pro --- old/qtserialport-opensource-src-5.6.0/examples/serialport/enumerator/enumerator.pro 2016-02-18 08:26:48.000000000 +0100 +++ new/qtserialport-opensource-src-5.6.1/examples/serialport/enumerator/enumerator.pro 2016-05-20 08:00:50.000000000 +0200 @@ -5,3 +5,6 @@ SOURCES += \ main.cpp + +target.path = $$[QT_INSTALL_EXAMPLES]/serialport/enumerator +INSTALLS += target diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtserialport-opensource-src-5.6.0/examples/serialport/master/master.pro new/qtserialport-opensource-src-5.6.1/examples/serialport/master/master.pro --- old/qtserialport-opensource-src-5.6.0/examples/serialport/master/master.pro 2016-02-18 08:26:48.000000000 +0100 +++ new/qtserialport-opensource-src-5.6.1/examples/serialport/master/master.pro 2016-05-20 08:00:50.000000000 +0200 @@ -13,3 +13,6 @@ SOURCES += \ main.cpp \ dialog.cpp + +target.path = $$[QT_INSTALL_EXAMPLES]/serialport/master +INSTALLS += target diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtserialport-opensource-src-5.6.0/examples/serialport/serialport.pro new/qtserialport-opensource-src-5.6.1/examples/serialport/serialport.pro --- old/qtserialport-opensource-src-5.6.0/examples/serialport/serialport.pro 2016-02-18 08:26:48.000000000 +0100 +++ new/qtserialport-opensource-src-5.6.1/examples/serialport/serialport.pro 2016-05-20 08:00:50.000000000 +0200 @@ -1,4 +1,3 @@ TEMPLATE = subdirs -CONFIG += ordered SUBDIRS = cenumerator creaderasync creadersync cwriterasync cwritersync -!isEmpty(QT.widgets.name):SUBDIRS += enumerator terminal blockingmaster blockingslave +!isEmpty(QT.widgets.name):SUBDIRS += enumerator terminal blockingmaster blockingslave master slave diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtserialport-opensource-src-5.6.0/examples/serialport/slave/slave.pro new/qtserialport-opensource-src-5.6.1/examples/serialport/slave/slave.pro --- old/qtserialport-opensource-src-5.6.0/examples/serialport/slave/slave.pro 2016-02-18 08:26:48.000000000 +0100 +++ new/qtserialport-opensource-src-5.6.1/examples/serialport/slave/slave.pro 2016-05-20 08:00:50.000000000 +0200 @@ -13,3 +13,6 @@ SOURCES += \ main.cpp \ dialog.cpp + +target.path = $$[QT_INSTALL_EXAMPLES]/serialport/slave +INSTALLS += target diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtserialport-opensource-src-5.6.0/examples/serialport/terminal/terminal.pro new/qtserialport-opensource-src-5.6.1/examples/serialport/terminal/terminal.pro --- old/qtserialport-opensource-src-5.6.0/examples/serialport/terminal/terminal.pro 2016-02-18 08:26:48.000000000 +0100 +++ new/qtserialport-opensource-src-5.6.1/examples/serialport/terminal/terminal.pro 2016-05-20 08:00:50.000000000 +0200 @@ -20,3 +20,6 @@ RESOURCES += \ terminal.qrc + +target.path = $$[QT_INSTALL_EXAMPLES]/serialport/terminal +INSTALLS += target diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtserialport-opensource-src-5.6.0/include/QtSerialPort/5.6.0/QtSerialPort/private/qserialport_p.h new/qtserialport-opensource-src-5.6.1/include/QtSerialPort/5.6.0/QtSerialPort/private/qserialport_p.h --- old/qtserialport-opensource-src-5.6.0/include/QtSerialPort/5.6.0/QtSerialPort/private/qserialport_p.h 2016-02-18 08:26:48.000000000 +0100 +++ new/qtserialport-opensource-src-5.6.1/include/QtSerialPort/5.6.0/QtSerialPort/private/qserialport_p.h 1970-01-01 01:00:00.000000000 +0100 @@ -1 +0,0 @@ -#include "../../../../../src/serialport/qserialport_p.h" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtserialport-opensource-src-5.6.0/include/QtSerialPort/5.6.0/QtSerialPort/private/qserialportinfo_p.h new/qtserialport-opensource-src-5.6.1/include/QtSerialPort/5.6.0/QtSerialPort/private/qserialportinfo_p.h --- old/qtserialport-opensource-src-5.6.0/include/QtSerialPort/5.6.0/QtSerialPort/private/qserialportinfo_p.h 2016-02-18 08:26:48.000000000 +0100 +++ new/qtserialport-opensource-src-5.6.1/include/QtSerialPort/5.6.0/QtSerialPort/private/qserialportinfo_p.h 1970-01-01 01:00:00.000000000 +0100 @@ -1 +0,0 @@ -#include "../../../../../src/serialport/qserialportinfo_p.h" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtserialport-opensource-src-5.6.0/include/QtSerialPort/5.6.0/QtSerialPort/private/qtudev_p.h new/qtserialport-opensource-src-5.6.1/include/QtSerialPort/5.6.0/QtSerialPort/private/qtudev_p.h --- old/qtserialport-opensource-src-5.6.0/include/QtSerialPort/5.6.0/QtSerialPort/private/qtudev_p.h 2016-02-18 08:26:48.000000000 +0100 +++ new/qtserialport-opensource-src-5.6.1/include/QtSerialPort/5.6.0/QtSerialPort/private/qtudev_p.h 1970-01-01 01:00:00.000000000 +0100 @@ -1 +0,0 @@ -#include "../../../../../src/serialport/qtudev_p.h" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtserialport-opensource-src-5.6.0/include/QtSerialPort/5.6.1/QtSerialPort/private/qserialport_p.h new/qtserialport-opensource-src-5.6.1/include/QtSerialPort/5.6.1/QtSerialPort/private/qserialport_p.h --- old/qtserialport-opensource-src-5.6.0/include/QtSerialPort/5.6.1/QtSerialPort/private/qserialport_p.h 1970-01-01 01:00:00.000000000 +0100 +++ new/qtserialport-opensource-src-5.6.1/include/QtSerialPort/5.6.1/QtSerialPort/private/qserialport_p.h 2016-05-20 08:00:50.000000000 +0200 @@ -0,0 +1 @@ +#include "../../../../../src/serialport/qserialport_p.h" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtserialport-opensource-src-5.6.0/include/QtSerialPort/5.6.1/QtSerialPort/private/qserialportinfo_p.h new/qtserialport-opensource-src-5.6.1/include/QtSerialPort/5.6.1/QtSerialPort/private/qserialportinfo_p.h --- old/qtserialport-opensource-src-5.6.0/include/QtSerialPort/5.6.1/QtSerialPort/private/qserialportinfo_p.h 1970-01-01 01:00:00.000000000 +0100 +++ new/qtserialport-opensource-src-5.6.1/include/QtSerialPort/5.6.1/QtSerialPort/private/qserialportinfo_p.h 2016-05-20 08:00:50.000000000 +0200 @@ -0,0 +1 @@ +#include "../../../../../src/serialport/qserialportinfo_p.h" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtserialport-opensource-src-5.6.0/include/QtSerialPort/5.6.1/QtSerialPort/private/qtudev_p.h new/qtserialport-opensource-src-5.6.1/include/QtSerialPort/5.6.1/QtSerialPort/private/qtudev_p.h --- old/qtserialport-opensource-src-5.6.0/include/QtSerialPort/5.6.1/QtSerialPort/private/qtudev_p.h 1970-01-01 01:00:00.000000000 +0100 +++ new/qtserialport-opensource-src-5.6.1/include/QtSerialPort/5.6.1/QtSerialPort/private/qtudev_p.h 2016-05-20 08:00:50.000000000 +0200 @@ -0,0 +1 @@ +#include "../../../../../src/serialport/qtudev_p.h" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtserialport-opensource-src-5.6.0/include/QtSerialPort/qtserialportversion.h new/qtserialport-opensource-src-5.6.1/include/QtSerialPort/qtserialportversion.h --- old/qtserialport-opensource-src-5.6.0/include/QtSerialPort/qtserialportversion.h 2016-03-13 17:25:40.000000000 +0100 +++ new/qtserialport-opensource-src-5.6.1/include/QtSerialPort/qtserialportversion.h 2016-06-02 09:03:52.000000000 +0200 @@ -2,8 +2,8 @@ #ifndef QT_QTSERIALPORT_VERSION_H #define QT_QTSERIALPORT_VERSION_H -#define QTSERIALPORT_VERSION_STR "5.6.0" +#define QTSERIALPORT_VERSION_STR "5.6.1" -#define QTSERIALPORT_VERSION 0x050600 +#define QTSERIALPORT_VERSION 0x050601 #endif // QT_QTSERIALPORT_VERSION_H Files old/qtserialport-opensource-src-5.6.0/src/serialport/doc/images/blockingmaster-example.png and new/qtserialport-opensource-src-5.6.1/src/serialport/doc/images/blockingmaster-example.png differ Files old/qtserialport-opensource-src-5.6.0/src/serialport/doc/images/blockingslave-example.png and new/qtserialport-opensource-src-5.6.1/src/serialport/doc/images/blockingslave-example.png differ Files old/qtserialport-opensource-src-5.6.0/src/serialport/doc/images/enumerator-example.png and new/qtserialport-opensource-src-5.6.1/src/serialport/doc/images/enumerator-example.png differ Files old/qtserialport-opensource-src-5.6.0/src/serialport/doc/images/terminal-example.png and new/qtserialport-opensource-src-5.6.1/src/serialport/doc/images/terminal-example.png differ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtserialport-opensource-src-5.6.0/src/serialport/doc/qtserialport.qdocconf new/qtserialport-opensource-src-5.6.1/src/serialport/doc/qtserialport.qdocconf --- old/qtserialport-opensource-src-5.6.0/src/serialport/doc/qtserialport.qdocconf 2016-02-18 08:26:48.000000000 +0100 +++ new/qtserialport-opensource-src-5.6.1/src/serialport/doc/qtserialport.qdocconf 2016-05-20 08:00:50.000000000 +0200 @@ -34,7 +34,7 @@ imagedirs += images excludedirs += ../qt4support -examplesinstallpath = qtserialport/serialport +examplesinstallpath = serialport depends += qtcore qtdoc qtnetwork qmake diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtserialport-opensource-src-5.6.0/src/serialport/qserialport.cpp new/qtserialport-opensource-src-5.6.1/src/serialport/qserialport.cpp --- old/qtserialport-opensource-src-5.6.0/src/serialport/qserialport.cpp 2016-02-18 08:26:48.000000000 +0100 +++ new/qtserialport-opensource-src-5.6.1/src/serialport/qserialport.cpp 2016-05-20 08:00:50.000000000 +0200 @@ -955,6 +955,11 @@ return false; } + if (d->flowControl == QSerialPort::HardwareControl) { + d->setError(QSerialPortErrorInfo(QSerialPort::UnsupportedOperationError)); + return false; + } + const bool requestToSend = isRequestToSend(); const bool retval = d->setRequestToSend(set); if (retval && (requestToSend != set)) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtserialport-opensource-src-5.6.0/src/serialport/qserialport_p.h new/qtserialport-opensource-src-5.6.1/src/serialport/qserialport_p.h --- old/qtserialport-opensource-src-5.6.0/src/serialport/qserialport_p.h 2016-02-18 08:26:48.000000000 +0100 +++ new/qtserialport-opensource-src-5.6.1/src/serialport/qserialport_p.h 2016-05-20 08:00:50.000000000 +0200 @@ -206,6 +206,8 @@ bool getDcb(DCB *dcb); OVERLAPPED *waitForNotified(int msecs); + qint64 queuedBytesCount(QSerialPort::Direction direction) const; + bool completeAsyncCommunication(qint64 bytesTransferred); bool completeAsyncRead(qint64 bytesTransferred); bool completeAsyncWrite(qint64 bytesTransferred); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtserialport-opensource-src-5.6.0/src/serialport/qserialport_unix.cpp new/qtserialport-opensource-src-5.6.1/src/serialport/qserialport_unix.cpp --- old/qtserialport-opensource-src-5.6.0/src/serialport/qserialport_unix.cpp 2016-02-18 08:26:48.000000000 +0100 +++ new/qtserialport-opensource-src-5.6.1/src/serialport/qserialport_unix.cpp 2016-05-20 08:00:50.000000000 +0200 @@ -244,15 +244,11 @@ ::ioctl(descriptor, TIOCNXCL); #endif - if (readNotifier) { - delete readNotifier; - readNotifier = Q_NULLPTR; - } + delete readNotifier; + readNotifier = Q_NULLPTR; - if (writeNotifier) { - delete writeNotifier; - writeNotifier = Q_NULLPTR; - } + delete writeNotifier; + writeNotifier = Q_NULLPTR; qt_safe_close(descriptor); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtserialport-opensource-src-5.6.0/src/serialport/qserialport_win.cpp new/qtserialport-opensource-src-5.6.1/src/serialport/qserialport_win.cpp --- old/qtserialport-opensource-src-5.6.0/src/serialport/qserialport_win.cpp 2016-02-18 08:26:48.000000000 +0100 +++ new/qtserialport-opensource-src-5.6.1/src/serialport/qserialport_win.cpp 2016-05-20 08:00:50.000000000 +0200 @@ -106,15 +106,11 @@ { ::CancelIo(handle); - if (notifier) { - delete notifier; - notifier = Q_NULLPTR; - } + delete notifier; + notifier = Q_NULLPTR; - if (startAsyncWriteTimer) { - delete startAsyncWriteTimer; - startAsyncWriteTimer = Q_NULLPTR; - } + delete startAsyncWriteTimer; + startAsyncWriteTimer = Q_NULLPTR; communicationStarted = false; readStarted = false; @@ -437,10 +433,13 @@ readStarted = false; bool result = true; - if (bytesTransferred == ReadChunkSize) + if (bytesTransferred == ReadChunkSize + || queuedBytesCount(QSerialPort::Input) > 0) { result = startAsyncRead(); - else if (readBufferMaxSize == 0 || readBufferMaxSize > buffer.size()) + } else if (readBufferMaxSize == 0 + || readBufferMaxSize > buffer.size()) { result = startAsyncCommunication(); + } if (bytesTransferred > 0) emitReadyRead(); @@ -598,6 +597,16 @@ return overlapped; } +qint64 QSerialPortPrivate::queuedBytesCount(QSerialPort::Direction direction) const +{ + COMSTAT comstat; + if (::ClearCommError(handle, Q_NULLPTR, &comstat) == 0) + return -1; + return (direction == QSerialPort::Input) + ? comstat.cbInQue + : ((direction == QSerialPort::Output) ? comstat.cbOutQue : -1); +} + inline bool QSerialPortPrivate::initialize() { Q_Q(QSerialPort); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtserialport-opensource-src-5.6.0/src/serialport/qserialportinfo.cpp new/qtserialport-opensource-src-5.6.1/src/serialport/qserialportinfo.cpp --- old/qtserialport-opensource-src-5.6.0/src/serialport/qserialportinfo.cpp 2016-02-18 08:26:48.000000000 +0100 +++ new/qtserialport-opensource-src-5.6.1/src/serialport/qserialportinfo.cpp 2016-05-20 08:00:50.000000000 +0200 @@ -36,6 +36,7 @@ #include "qserialportinfo.h" #include "qserialportinfo_p.h" #include "qserialport.h" +#include "qserialport_p.h" QT_BEGIN_NAMESPACE @@ -283,9 +284,13 @@ /*! \fn QList<qint32> QSerialPortInfo::standardBaudRates() - Returns a list of available standard baud rates supported by - the current serial port. + Returns a list of available standard baud rates supported + by the target platform. */ +QList<qint32> QSerialPortInfo::standardBaudRates() +{ + return QSerialPortPrivate::standardBaudRates(); +} /*! \fn QList<QSerialPortInfo> QSerialPortInfo::availablePorts() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtserialport-opensource-src-5.6.0/src/serialport/qserialportinfo.h new/qtserialport-opensource-src-5.6.1/src/serialport/qserialportinfo.h --- old/qtserialport-opensource-src-5.6.0/src/serialport/qserialportinfo.h 2016-02-18 08:26:48.000000000 +0100 +++ new/qtserialport-opensource-src-5.6.1/src/serialport/qserialportinfo.h 2016-05-20 08:00:50.000000000 +0200 @@ -86,9 +86,6 @@ QSerialPortInfo(const QSerialPortInfoPrivate &dd); friend QList<QSerialPortInfo> availablePortsByUdev(bool &ok); friend QList<QSerialPortInfo> availablePortsBySysfs(bool &ok); -#ifdef Q_OS_FREEBSD - friend QList<QSerialPortInfo> availablePortsBySysctl(bool &ok); -#endif friend QList<QSerialPortInfo> availablePortsByFiltersOfDevices(bool &ok); QScopedPointer<QSerialPortInfoPrivate, QSerialPortInfoPrivateDeleter> d_ptr; }; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtserialport-opensource-src-5.6.0/src/serialport/qserialportinfo_freebsd.cpp new/qtserialport-opensource-src-5.6.1/src/serialport/qserialportinfo_freebsd.cpp --- old/qtserialport-opensource-src-5.6.0/src/serialport/qserialportinfo_freebsd.cpp 1970-01-01 01:00:00.000000000 +0100 +++ new/qtserialport-opensource-src-5.6.1/src/serialport/qserialportinfo_freebsd.cpp 2016-05-20 08:00:50.000000000 +0200 @@ -0,0 +1,378 @@ +/**************************************************************************** +** +** Copyright (C) 2016 Denis Shienkov <denis.shien...@gmail.com> +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the QtSerialPort module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL21$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 or version 3 as published by the Free +** Software Foundation and appearing in the file LICENSE.LGPLv21 and +** LICENSE.LGPLv3 included in the packaging of this file. Please review the +** following information to ensure the GNU Lesser General Public License +** requirements will be met: https://www.gnu.org/licenses/lgpl.html and +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** As a special exception, The Qt Company gives you certain additional +** rights. These rights are described in The Qt Company LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qserialportinfo.h" +#include "qserialportinfo_p.h" +#include "qserialport_p.h" + +#include <QtCore/qdatastream.h> +#include <QtCore/qvector.h> +#include <QtCore/qdir.h> + +#include <errno.h> +#include <sys/types.h> // kill +#include <signal.h> // kill + +#include <sys/sysctl.h> // sysctl, sysctlnametomib + +QT_BEGIN_NAMESPACE + +static QString deviceProperty(const QString &source, const QByteArray &pattern) +{ + const int firstbound = source.indexOf(QLatin1String(pattern)); + if (firstbound == -1) + return QString(); + const int lastbound = source.indexOf(QLatin1Char(' '), firstbound); + return source.mid(firstbound + pattern.size(), lastbound - firstbound - pattern.size()); +} + +static QString deviceName(const QString &pnpinfo) +{ + return deviceProperty(pnpinfo, "ttyname="); +} + +static QString deviceCount(const QString &pnpinfo) +{ + return deviceProperty(pnpinfo, "ttyports="); +} + +static quint16 deviceProductIdentifier(const QString &pnpinfo, bool &hasIdentifier) +{ + QString result = deviceProperty(pnpinfo, "product="); + return result.toInt(&hasIdentifier, 16); +} + +static quint16 deviceVendorIdentifier(const QString &pnpinfo, bool &hasIdentifier) +{ + QString result = deviceProperty(pnpinfo, "vendor="); + return result.toInt(&hasIdentifier, 16); +} + +static QString deviceSerialNumber(const QString &pnpinfo) +{ + QString serialNumber = deviceProperty(pnpinfo, "sernum="); + serialNumber.remove(QLatin1Char('"')); + return serialNumber; +} + +// A 'desc' string contains the both description and manufacturer +// properties, which are not possible to extract from the source +// string. Besides, this string can contains an other information, +// which should be excluded from the result. +static QString deviceDescriptionAndManufacturer(const QString &desc) +{ + const int classindex = desc.indexOf(QLatin1String(", class ")); + if (classindex == -1) + return desc; + return desc.mid(0, classindex); +} + +struct NodeInfo +{ + QString name; + QString value; +}; + +static QVector<int> mibFromName(const QString &name) +{ + size_t mibsize = 0; + if (::sysctlnametomib(name.toLocal8Bit().constData(), Q_NULLPTR, &mibsize) < 0 + || mibsize == 0) { + return QVector<int>(); + } + QVector<int> mib(mibsize); + if (::sysctlnametomib(name.toLocal8Bit().constData(), &mib[0], &mibsize) < 0) + return QVector<int>(); + + return mib; +} + +static QVector<int> nextOid(const QVector<int> &previousOid) +{ + QVector<int> mib; + mib.append(0); // Magic undocumented code (CTL_UNSPEC ?) + mib.append(2); // Magic undocumented code + foreach (int code, previousOid) + mib.append(code); + + size_t requiredLength = 0; + if (::sysctl(&mib[0], mib.count(), Q_NULLPTR, &requiredLength, Q_NULLPTR, 0) < 0) + return QVector<int>(); + const size_t oidLength = requiredLength / sizeof(int); + QVector<int> oid(oidLength, 0); + if (::sysctl(&mib[0], mib.count(), &oid[0], &requiredLength, Q_NULLPTR, 0) < 0) + return QVector<int>(); + + if (previousOid.first() != oid.first()) + return QVector<int>(); + + return oid; +} + +static NodeInfo nodeForOid(const QVector<int> &oid) +{ + QVector<int> mib; + mib.append(0); // Magic undocumented code (CTL_UNSPEC ?) + mib.append(1); // Magic undocumented code + foreach (int code, oid) + mib.append(code); + + // query node name + size_t requiredLength = 0; + if (::sysctl(&mib[0], mib.count(), Q_NULLPTR, &requiredLength, Q_NULLPTR, 0) < 0) + return NodeInfo(); + QByteArray name(requiredLength, 0); + if (::sysctl(&mib[0], mib.count(), name.data(), &requiredLength, Q_NULLPTR, 0) < 0) + return NodeInfo(); + + // query node value + requiredLength = 0; + if (::sysctl(&oid[0], oid.count(), Q_NULLPTR, &requiredLength, Q_NULLPTR, 0) < 0) + return NodeInfo(); + QByteArray value(requiredLength, 0); + if (::sysctl(&oid[0], oid.count(), value.data(), &requiredLength, Q_NULLPTR, 0) < 0) + return NodeInfo(); + + // query value format + mib[1] = 4; // Magic undocumented code + requiredLength = 0; + if (::sysctl(&mib[0], mib.count(), Q_NULLPTR, &requiredLength, Q_NULLPTR, 0) < 0) + return NodeInfo(); + QByteArray buf(requiredLength, 0); + if (::sysctl(&mib[0], mib.count(), buf.data(), &requiredLength, Q_NULLPTR, 0) < 0) + return NodeInfo(); + + QDataStream in(buf); + in.setByteOrder(QDataStream::LittleEndian); + quint32 kind = 0; + qint8 format = 0; + in >> kind >> format; + + NodeInfo result; + + // we need only the string-type value + if (format == 'A') { + result.name = QString::fromLocal8Bit(name.constData()); + result.value = QString::fromLocal8Bit(value.constData()); + } + + return result; +} + +static QList<NodeInfo> enumerateDesiredNodes(const QVector<int> &mib) +{ + QList<NodeInfo> nodes; + + QVector<int> oid = mib; + + forever { + const QVector<int> nextoid = nextOid(oid); + if (nextoid.isEmpty()) + break; + + const NodeInfo node = nodeForOid(nextoid); + if (!node.name.isEmpty()) { + if (node.name.endsWith(QLatin1String("\%desc")) + || node.name.endsWith(QLatin1String("\%pnpinfo"))) { + nodes.append(node); + } + } + + oid = nextoid; + } + + return nodes; +} + +QList<QSerialPortInfo> QSerialPortInfo::availablePorts() +{ + const QVector<int> mib = mibFromName(QLatin1String("dev")); + if (mib.isEmpty()) + return QList<QSerialPortInfo>(); + + const QList<NodeInfo> nodes = enumerateDesiredNodes(mib); + if (nodes.isEmpty()) + return QList<QSerialPortInfo>(); + + QDir deviceDir(QLatin1String("/dev")); + if (!(deviceDir.exists() && deviceDir.isReadable())) + return QList<QSerialPortInfo>(); + + deviceDir.setNameFilters(QStringList() << QLatin1String("cua*") << QLatin1String("tty*")); + deviceDir.setFilter(QDir::Files | QDir::System | QDir::NoSymLinks); + + QList<QSerialPortInfo> cuaCandidates; + QList<QSerialPortInfo> ttyCandidates; + + foreach (const QString &portName, deviceDir.entryList()) { + if (portName.endsWith(QLatin1String(".init")) + || portName.endsWith(QLatin1String(".lock"))) { + continue; + } + + QSerialPortInfoPrivate priv; + priv.portName = portName; + priv.device = QSerialPortInfoPrivate::portNameToSystemLocation(portName); + + foreach (const NodeInfo &node, nodes) { + const int pnpinfoindex = node.name.indexOf(QLatin1String("\%pnpinfo")); + if (pnpinfoindex == -1) + continue; + + if (node.value.isEmpty()) + continue; + + QString ttyname = deviceName(node.value); + if (ttyname.isEmpty()) + continue; + + const QString ttyportscount = deviceCount(node.value); + if (ttyportscount.isEmpty()) + continue; + + const int count = ttyportscount.toInt(); + if (count == 0) + continue; + if (count > 1) { + bool matched = false; + for (int i = 0; i < count; ++i) { + const QString ends = QString(QLatin1String("%1.%2")).arg(ttyname).arg(i); + if (portName.endsWith(ends)) { + matched = true; + break; + } + } + + if (!matched) + continue; + } else { + if (!portName.endsWith(ttyname)) + continue; + } + + priv.serialNumber = deviceSerialNumber(node.value); + priv.vendorIdentifier = deviceVendorIdentifier(node.value, priv.hasVendorIdentifier); + priv.productIdentifier = deviceProductIdentifier(node.value, priv.hasProductIdentifier); + + const QString nodebase = node.name.mid(0, pnpinfoindex); + const QString descnode = QString(QLatin1String("%1\%desc")).arg(nodebase); + + // search for description and manufacturer properties + foreach (const NodeInfo &node, nodes) { + if (node.name != descnode) + continue; + + if (node.value.isEmpty()) + continue; + + // We can not separate the description and the manufacturer + // properties from the node value, so lets just duplicate it. + priv.description = deviceDescriptionAndManufacturer(node.value); + priv.manufacturer = priv.description; + break; + } + + break; + } + + 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; +} + +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; +} + +#if QT_DEPRECATED_SINCE(5, 2) +bool QSerialPortInfo::isValid() const +{ + QFile f(systemLocation()); + return f.exists(); +} +#endif // QT_DEPRECATED_SINCE(5, 2) + +QString QSerialPortInfoPrivate::portNameToSystemLocation(const QString &source) +{ + return (source.startsWith(QLatin1Char('/')) + || source.startsWith(QLatin1String("./")) + || source.startsWith(QLatin1String("../"))) + ? source : (QLatin1String("/dev/") + source); +} + +QString QSerialPortInfoPrivate::portNameFromSystemLocation(const QString &source) +{ + return source.startsWith(QLatin1String("/dev/")) + ? source.mid(5) : source; +} + +QT_END_NAMESPACE diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtserialport-opensource-src-5.6.0/src/serialport/qserialportinfo_osx.cpp new/qtserialport-opensource-src-5.6.1/src/serialport/qserialportinfo_osx.cpp --- old/qtserialport-opensource-src-5.6.0/src/serialport/qserialportinfo_osx.cpp 2016-02-18 08:26:48.000000000 +0100 +++ new/qtserialport-opensource-src-5.6.1/src/serialport/qserialportinfo_osx.cpp 2016-05-20 08:00:50.000000000 +0200 @@ -83,10 +83,10 @@ return value; } -static bool isCompleteInfo(const QSerialPortInfoPrivate &priv) +static bool isCompleteInfo(const QSerialPortInfoPrivate &priv, const QString &calloutDevice, const QString &dialinDevice) { - return !priv.portName.isEmpty() - && !priv.device.isEmpty() + return !calloutDevice.isEmpty() + && !dialinDevice.isEmpty() && !priv.manufacturer.isEmpty() && !priv.description.isEmpty() && !priv.serialNumber.isEmpty() @@ -94,11 +94,16 @@ && priv.hasVendorIdentifier; } -static QString deviceSystemLocation(io_registry_entry_t ioRegistryEntry) +static QString calloutDeviceSystemLocation(io_registry_entry_t ioRegistryEntry) { return searchStringProperty(ioRegistryEntry, QCFString(kIOCalloutDeviceKey)); } +static QString dialinDeviceSystemLocation(io_registry_entry_t ioRegistryEntry) +{ + return searchStringProperty(ioRegistryEntry, QCFString(kIODialinDeviceKey)); +} + static QString deviceDescription(io_registry_entry_t ioRegistryEntry) { QString result = searchStringProperty(ioRegistryEntry, QCFString(kIOPropertyProductNameKey)); @@ -162,12 +167,15 @@ QSerialPortInfoPrivate priv; + QString calloutDevice; + QString dialinDevice; + forever { - if (priv.device.isEmpty()) { - priv.device = deviceSystemLocation(serialPortService); - if (!priv.device.isEmpty()) - priv.portName = QSerialPortInfoPrivate::portNameFromSystemLocation(priv.device); - } + if (calloutDevice.isEmpty()) + calloutDevice = calloutDeviceSystemLocation(serialPortService); + + if (dialinDevice.isEmpty()) + dialinDevice = dialinDeviceSystemLocation(serialPortService); if (priv.description.isEmpty()) priv.description = deviceDescription(serialPortService); @@ -190,7 +198,7 @@ priv.hasProductIdentifier); } - if (isCompleteInfo(priv)) { + if (isCompleteInfo(priv, calloutDevice, dialinDevice)) { ::IOObjectRelease(serialPortService); break; } @@ -200,7 +208,15 @@ break; } - serialPortInfoList.append(priv); + QSerialPortInfoPrivate calloutCandidate = priv; + calloutCandidate.device = calloutDevice; + calloutCandidate.portName = QSerialPortInfoPrivate::portNameFromSystemLocation(calloutDevice); + serialPortInfoList.append(calloutCandidate); + + QSerialPortInfoPrivate dialinCandidate = priv; + dialinCandidate.device = dialinDevice; + dialinCandidate.portName = QSerialPortInfoPrivate::portNameFromSystemLocation(dialinDevice); + serialPortInfoList.append(dialinCandidate); } ::IOObjectRelease(serialPortIterator); @@ -208,11 +224,6 @@ return serialPortInfoList; } -QList<qint32> QSerialPortInfo::standardBaudRates() -{ - return QSerialPortPrivate::standardBaudRates(); -} - #if QT_DEPRECATED_SINCE(5, 6) bool QSerialPortInfo::isBusy() const { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtserialport-opensource-src-5.6.0/src/serialport/qserialportinfo_unix.cpp new/qtserialport-opensource-src-5.6.1/src/serialport/qserialportinfo_unix.cpp --- old/qtserialport-opensource-src-5.6.0/src/serialport/qserialportinfo_unix.cpp 2016-02-18 08:26:48.000000000 +0100 +++ new/qtserialport-opensource-src-5.6.1/src/serialport/qserialportinfo_unix.cpp 2016-05-20 08:00:50.000000000 +0200 @@ -42,21 +42,12 @@ #include <QtCore/qdir.h> #include <QtCore/qscopedpointer.h> -#ifdef Q_OS_FREEBSD -#include <QtCore/qdatastream.h> -#include <QtCore/qvector.h> -#endif - #include <private/qcore_unix_p.h> #include <errno.h> #include <sys/types.h> // kill #include <signal.h> // kill -#ifdef Q_OS_FREEBSD -#include <sys/sysctl.h> // sysctl, sysctlnametomib -#endif - #include "qtudev_p.h" QT_BEGIN_NAMESPACE @@ -152,287 +143,13 @@ return false; } -#ifdef Q_OS_FREEBSD - -static QString deviceProperty(const QString &pnpinfo, const QByteArray &pattern) -{ - const int firstbound = pnpinfo.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()); -} - -static QString deviceName(const QString &pnpinfo) -{ - return deviceProperty(pnpinfo, "ttyname="); -} - -static QString deviceCount(const QString &pnpinfo) -{ - return deviceProperty(pnpinfo, "ttyports="); -} - -static quint16 deviceProductIdentifier(const QString &pnpinfo, bool &hasIdentifier) -{ - QString result = deviceProperty(pnpinfo, "product="); - return result.toInt(&hasIdentifier, 16); -} - -static quint16 deviceVendorIdentifier(const QString &pnpinfo, bool &hasIdentifier) -{ - QString result = deviceProperty(pnpinfo, "vendor="); - return result.toInt(&hasIdentifier, 16); -} - -static QString deviceSerialNumber(const QString &pnpinfo) -{ - QString serialNumber = deviceProperty(pnpinfo, "sernum="); - serialNumber.remove(QLatin1Char('"')); - return serialNumber; -} - -// A 'desc' string contains the both description and manufacturer -// properties, which are not possible to extract from the source -// string. Besides, this string can contains an other information, -// which should be excluded from the result. -static QString deviceDescriptionAndManufacturer(const QString &desc) -{ - const int classindex = desc.indexOf(QLatin1String(", class ")); - if (classindex == -1) - return desc; - return desc.mid(0, classindex); -} - -struct NodeInfo -{ - QString name; - QString value; -}; - -static QVector<int> mibFromName(const QString &name) -{ - size_t mibsize = 0; - if (::sysctlnametomib(name.toLocal8Bit().constData(), Q_NULLPTR, &mibsize) < 0 - || mibsize == 0) { - return QVector<int>(); - } - QVector<int> mib(mibsize); - if (::sysctlnametomib(name.toLocal8Bit().constData(), &mib[0], &mibsize) < 0) - return QVector<int>(); - - return mib; -} - -static QVector<int> nextOid(const QVector<int> &previousOid) -{ - QVector<int> mib; - mib.append(0); // Magic undocumented code (CTL_UNSPEC ?) - mib.append(2); // Magic undocumented code - foreach (int code, previousOid) - mib.append(code); - - size_t requiredLength = 0; - if (::sysctl(&mib[0], mib.count(), Q_NULLPTR, &requiredLength, Q_NULLPTR, 0) < 0) - return QVector<int>(); - const size_t oidLength = requiredLength / sizeof(int); - QVector<int> oid(oidLength, 0); - if (::sysctl(&mib[0], mib.count(), &oid[0], &requiredLength, Q_NULLPTR, 0) < 0) - return QVector<int>(); - - if (previousOid.first() != oid.first()) - return QVector<int>(); - - return oid; -} - -static NodeInfo nodeForOid(const QVector<int> &oid) -{ - QVector<int> mib; - mib.append(0); // Magic undocumented code (CTL_UNSPEC ?) - mib.append(1); // Magic undocumented code - foreach (int code, oid) - mib.append(code); - - // query node name - size_t requiredLength = 0; - if (::sysctl(&mib[0], mib.count(), Q_NULLPTR, &requiredLength, Q_NULLPTR, 0) < 0) - return NodeInfo(); - QByteArray name(requiredLength, 0); - if (::sysctl(&mib[0], mib.count(), name.data(), &requiredLength, Q_NULLPTR, 0) < 0) - return NodeInfo(); - - // query node value - requiredLength = 0; - if (::sysctl(&oid[0], oid.count(), Q_NULLPTR, &requiredLength, Q_NULLPTR, 0) < 0) - return NodeInfo(); - QByteArray value(requiredLength, 0); - if (::sysctl(&oid[0], oid.count(), value.data(), &requiredLength, Q_NULLPTR, 0) < 0) - return NodeInfo(); - - // query value format - mib[1] = 4; // Magic undocumented code - requiredLength = 0; - if (::sysctl(&mib[0], mib.count(), Q_NULLPTR, &requiredLength, Q_NULLPTR, 0) < 0) - return NodeInfo(); - QByteArray buf(requiredLength, 0); - if (::sysctl(&mib[0], mib.count(), buf.data(), &requiredLength, Q_NULLPTR, 0) < 0) - return NodeInfo(); - - QDataStream in(buf); - in.setByteOrder(QDataStream::LittleEndian); - quint32 kind = 0; - qint8 format = 0; - in >> kind >> format; - - NodeInfo result; - - // we need only the string-type value - if (format == 'A') { - result.name = QString::fromLocal8Bit(name.constData()); - result.value = QString::fromLocal8Bit(value.constData()); - } - - return result; -} - -static QList<NodeInfo> enumerateDesiredNodes(const QVector<int> &mib) -{ - QList<NodeInfo> nodes; - - QVector<int> oid = mib; - - forever { - const QVector<int> nextoid = nextOid(oid); - if (nextoid.isEmpty()) - break; - - const NodeInfo node = nodeForOid(nextoid); - if (!node.name.isEmpty()) { - if (node.name.endsWith("\%desc") - || node.name.endsWith("\%pnpinfo")) { - nodes.append(node); - } - } - - oid = nextoid; - } - - return nodes; -} - -QList<QSerialPortInfo> availablePortsBySysctl(bool &ok) -{ - const QVector<int> mib = mibFromName(QLatin1String("dev")); - if (mib.isEmpty()) { - ok = false; - return QList<QSerialPortInfo>(); - } - - const QList<NodeInfo> nodes = enumerateDesiredNodes(mib); - if (nodes.isEmpty()) { - ok = false; - return QList<QSerialPortInfo>(); - } - - QDir deviceDir(QLatin1String("/dev")); - if (!(deviceDir.exists() && deviceDir.isReadable())) { - ok = false; - return QList<QSerialPortInfo>(); - } - - deviceDir.setNameFilters(QStringList() << QLatin1String("cua*")); - deviceDir.setFilter(QDir::Files | QDir::System | QDir::NoSymLinks); - - QList<QSerialPortInfo> serialPortInfoList; - - foreach (const QString &portName, deviceDir.entryList()) { - if (portName.endsWith(QLatin1String(".init")) - || portName.endsWith(QLatin1String(".lock"))) { - continue; - } - - QSerialPortInfoPrivate priv; - priv.portName = portName; - priv.device = QSerialPortInfoPrivate::portNameToSystemLocation(portName); - - foreach (const NodeInfo &node, nodes) { - const int pnpinfoindex = node.name.indexOf(QLatin1String("\%pnpinfo")); - if (pnpinfoindex == -1) - continue; - - if (node.value.isEmpty()) - continue; - - QString ttyname = deviceName(node.value); - if (ttyname.isEmpty()) - continue; - - const QString ttyportscount = deviceCount(node.value); - if (ttyportscount.isEmpty()) - continue; - - const int count = ttyportscount.toInt(); - if (count == 0) - continue; - if (count > 1) { - bool matched = false; - for (int i = 0; i < count; ++i) { - const QString ends = QString(QLatin1String("%1.%2")).arg(ttyname).arg(i); - if (portName.endsWith(ends)) { - matched = true; - break; - } - } - - if (!matched) - continue; - } else { - if (!portName.endsWith(ttyname)) - continue; - } - - priv.serialNumber = deviceSerialNumber(node.value); - priv.vendorIdentifier = deviceVendorIdentifier(node.value, priv.hasVendorIdentifier); - priv.productIdentifier = deviceProductIdentifier(node.value, priv.hasProductIdentifier); - - const QString nodebase = node.name.mid(0, pnpinfoindex); - const QString descnode = QString(QLatin1String("%1\%desc")).arg(nodebase); - - // search for description and manufacturer properties - foreach (const NodeInfo &node, nodes) { - if (node.name != descnode) - continue; - - if (node.value.isEmpty()) - continue; - - // We can not separate the description and the manufacturer - // properties from the node value, so lets just duplicate it. - priv.description = deviceDescriptionAndManufacturer(node.value); - priv.manufacturer = priv.description; - break; - } - - break; - } - - serialPortInfoList.append(priv); - } - - ok = true; - return serialPortInfoList; -} - -#endif // Q_OS_FREEBSD - static bool isRfcommDevice(const QString &portName) { if (!portName.startsWith(QLatin1String("rfcomm"))) return false; bool ok; - const int portNumber = portName.mid(6).toInt(&ok); + const int portNumber = portName.midRef(6).toInt(&ok); if (!ok || (portNumber < 0) || (portNumber > 255)) return false; return true; @@ -736,22 +453,12 @@ serialPortInfoList = availablePortsBySysfs(ok); #endif -#ifdef Q_OS_FREEBSD - if (!ok) - serialPortInfoList = availablePortsBySysctl(ok); -#endif - if (!ok) serialPortInfoList = availablePortsByFiltersOfDevices(ok); return serialPortInfoList; } -QList<qint32> QSerialPortInfo::standardBaudRates() -{ - return QSerialPortPrivate::standardBaudRates(); -} - #if QT_DEPRECATED_SINCE(5, 6) bool QSerialPortInfo::isBusy() const { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtserialport-opensource-src-5.6.0/src/serialport/qserialportinfo_win.cpp new/qtserialport-opensource-src-5.6.1/src/serialport/qserialportinfo_win.cpp --- old/qtserialport-opensource-src-5.6.0/src/serialport/qserialportinfo_win.cpp 2016-02-18 08:26:48.000000000 +0100 +++ new/qtserialport-opensource-src-5.6.1/src/serialport/qserialportinfo_win.cpp 2016-05-20 08:00:50.000000000 +0200 @@ -264,16 +264,22 @@ return instanceIdentifier.mid(firstbound + 1, lastbound - firstbound - 1); } -static QString deviceSerialNumber(const QString &instanceIdentifier, +static QString deviceSerialNumber(QString instanceIdentifier, DEVINST deviceInstanceNumber) { - QString result = parseDeviceSerialNumber(instanceIdentifier); - if (result.isEmpty()) { - const DEVINST parentNumber = parentDeviceInstanceNumber(deviceInstanceNumber); - const QString parentInstanceIdentifier = deviceInstanceIdentifier(parentNumber); - result = parseDeviceSerialNumber(parentInstanceIdentifier); + forever { + const QString result = parseDeviceSerialNumber(instanceIdentifier); + if (!result.isEmpty()) + return result; + deviceInstanceNumber = parentDeviceInstanceNumber(deviceInstanceNumber); + if (deviceInstanceNumber == 0) + break; + instanceIdentifier = deviceInstanceIdentifier(deviceInstanceNumber); + if (instanceIdentifier.isEmpty()) + break; } - return result; + + return QString(); } QList<QSerialPortInfo> QSerialPortInfo::availablePorts() @@ -345,11 +351,6 @@ return serialPortInfoList; } -QList<qint32> QSerialPortInfo::standardBaudRates() -{ - return QSerialPortPrivate::standardBaudRates(); -} - #if QT_DEPRECATED_SINCE(5, 6) bool QSerialPortInfo::isBusy() const { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtserialport-opensource-src-5.6.0/src/serialport/qserialportinfo_wince.cpp new/qtserialport-opensource-src-5.6.1/src/serialport/qserialportinfo_wince.cpp --- old/qtserialport-opensource-src-5.6.0/src/serialport/qserialportinfo_wince.cpp 2016-02-18 08:26:48.000000000 +0100 +++ new/qtserialport-opensource-src-5.6.1/src/serialport/qserialportinfo_wince.cpp 2016-05-20 08:00:50.000000000 +0200 @@ -120,11 +120,6 @@ return serialPortInfoList; } -QList<qint32> QSerialPortInfo::standardBaudRates() -{ - return QSerialPortPrivate::standardBaudRates(); -} - #if QT_DEPRECATED_SINCE(5, 6) bool QSerialPortInfo::isBusy() const { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtserialport-opensource-src-5.6.0/src/serialport/serialport-lib.pri new/qtserialport-opensource-src-5.6.1/src/serialport/serialport-lib.pri --- old/qtserialport-opensource-src-5.6.0/src/serialport/serialport-lib.pri 2016-02-18 08:26:48.000000000 +0100 +++ new/qtserialport-opensource-src-5.6.1/src/serialport/serialport-lib.pri 2016-05-20 08:00:50.000000000 +0200 @@ -37,14 +37,17 @@ SOURCES += \ $$PWD/qserialport_unix.cpp - !osx { - SOURCES += \ - $$PWD/qserialportinfo_unix.cpp - } else { + osx { SOURCES += \ $$PWD/qserialportinfo_osx.cpp LIBS_PRIVATE += -framework IOKit -framework CoreFoundation + } else:freebsd { + SOURCES += \ + $$PWD/qserialportinfo_freebsd.cpp + } else { + SOURCES += \ + $$PWD/qserialportinfo_unix.cpp } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtserialport-opensource-src-5.6.0/src/serialport/serialport.pro new/qtserialport-opensource-src-5.6.1/src/serialport/serialport.pro --- old/qtserialport-opensource-src-5.6.0/src/serialport/serialport.pro 2016-02-18 08:26:48.000000000 +0100 +++ new/qtserialport-opensource-src-5.6.1/src/serialport/serialport.pro 2016-05-20 08:00:50.000000000 +0200 @@ -5,8 +5,8 @@ config_ntddmodm: DEFINES += QT_NO_REDEFINE_GUID_DEVINTERFACE_MODEM -load(qt_module) - include($$PWD/serialport-lib.pri) +load(qt_module) + PRECOMPILED_HEADER =