Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package qt6-serialport for openSUSE:Factory checked in at 2022-04-20 16:56:00 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/qt6-serialport (Old) and /work/SRC/openSUSE:Factory/.qt6-serialport.new.1941 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "qt6-serialport" Wed Apr 20 16:56:00 2022 rev:6 rq:970807 version:6.3.0 Changes: -------- --- /work/SRC/openSUSE:Factory/qt6-serialport/qt6-serialport.changes 2022-03-29 18:15:04.731111679 +0200 +++ /work/SRC/openSUSE:Factory/.qt6-serialport.new.1941/qt6-serialport.changes 2022-04-20 16:56:19.002566256 +0200 @@ -1,0 +2,11 @@ +Fri Apr 8 11:57:00 UTC 2022 - Christophe Giboudeaux <christo...@krop.fr> + +- Update to 6.3.0: + * https://www.qt.io/blog/qt-6.3-released + +------------------------------------------------------------------- +Tue Mar 29 12:28:40 UTC 2022 - Christophe Giboudeaux <christo...@krop.fr> + +- Update to 6.3.0-rc + +------------------------------------------------------------------- Old: ---- qtserialport-everywhere-src-6.2.4.tar.xz New: ---- qtserialport-everywhere-src-6.3.0.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ qt6-serialport.spec ++++++ --- /var/tmp/diff_new_pack.ibE2i0/_old 2022-04-20 16:56:19.654566865 +0200 +++ /var/tmp/diff_new_pack.ibE2i0/_new 2022-04-20 16:56:19.662566873 +0200 @@ -1,7 +1,7 @@ # # spec file for package qt6-serialport # -# Copyright (c) 2021 SUSE LLC +# Copyright (c) 2022 SUSE LLC # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -16,8 +16,8 @@ # -%define real_version 6.2.4 -%define short_version 6.2 +%define real_version 6.3.0 +%define short_version 6.3 %define tar_name qtserialport-everywhere-src %define tar_suffix %{nil} # @@ -27,7 +27,7 @@ %endif # Name: qt6-serialport%{?pkg_suffix} -Version: 6.2.4 +Version: 6.3.0 Release: 0 Summary: Qt 6 SerialPort library License: LGPL-3.0-only OR (GPL-2.0-only OR GPL-3.0-or-later) ++++++ qtserialport-everywhere-src-6.2.4.tar.xz -> qtserialport-everywhere-src-6.3.0.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtserialport-everywhere-src-6.2.4/.QT-ENTERPRISE-LICENSE-AGREEMENT new/qtserialport-everywhere-src-6.3.0/.QT-ENTERPRISE-LICENSE-AGREEMENT --- old/qtserialport-everywhere-src-6.2.4/.QT-ENTERPRISE-LICENSE-AGREEMENT 2022-03-10 11:21:31.744042600 +0100 +++ new/qtserialport-everywhere-src-6.3.0/.QT-ENTERPRISE-LICENSE-AGREEMENT 2022-04-06 19:56:41.389723300 +0200 @@ -1,5 +1,5 @@ QT LICENSE AGREEMENT -Agreement version 4.4 +Agreement version 4.4.1 This Qt License Agreement ("Agreement") is a legal agreement for the licensing of Licensed Software (as defined below) between The Qt Company (as defined @@ -233,7 +233,7 @@ United States or a legal entity incorporated outside of the United States or having its registered office outside of the United States, The Qt Company Ltd., a Finnish company with its registered office at - Bertel Jungin aukio D3A, 02600 Espoo, Finland. + Miestentie 7, 02150 Espoo, Finland. "Third-Party Software" shall have the meaning set forth in Section 4. @@ -1054,8 +1054,8 @@ - Appendix 1: Licensed Software details - Appendix 2: Pricing - Appendix 3: Add-on Software details (optional) -- Appendix 4: Non-commercial and educational Licenses (optional) -- Appendix 5: Small business and startup Licenses (optional) +- Appendix 4: Small business and startup Licenses (optional) +- Appendix 5: Non-commercial and educational Licenses (optional) - Appendix 6: License Reporting (optional) - Appendix 7: Marketing Rights (optional) - Appendix 8: Intentionally left blank (optional) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtserialport-everywhere-src-6.2.4/.cmake.conf new/qtserialport-everywhere-src-6.3.0/.cmake.conf --- old/qtserialport-everywhere-src-6.2.4/.cmake.conf 2022-03-04 05:15:43.000000000 +0100 +++ new/qtserialport-everywhere-src-6.3.0/.cmake.conf 2022-04-05 16:01:25.000000000 +0200 @@ -1,2 +1,2 @@ -set(QT_REPO_MODULE_VERSION "6.2.4") -set(QT_REPO_MODULE_PRERELEASE_VERSION_SEGMENT "") +set(QT_REPO_MODULE_VERSION "6.3.0") +set(QT_REPO_MODULE_PRERELEASE_VERSION_SEGMENT "alpha1") diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtserialport-everywhere-src-6.2.4/.qmake.conf new/qtserialport-everywhere-src-6.3.0/.qmake.conf --- old/qtserialport-everywhere-src-6.2.4/.qmake.conf 2022-03-04 05:15:43.000000000 +0100 +++ new/qtserialport-everywhere-src-6.3.0/.qmake.conf 1970-01-01 01:00:00.000000000 +0100 @@ -1,5 +0,0 @@ -load(qt_build_config) - -DEFINES += QT_NO_FOREACH QT_NO_JAVA_STYLE_ITERATORS - -MODULE_VERSION = 6.2.4 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtserialport-everywhere-src-6.2.4/.tag new/qtserialport-everywhere-src-6.3.0/.tag --- old/qtserialport-everywhere-src-6.2.4/.tag 2022-03-04 05:15:43.000000000 +0100 +++ new/qtserialport-everywhere-src-6.3.0/.tag 2022-04-05 16:01:25.000000000 +0200 @@ -1 +1 @@ -f41e290b17e68764da0bf88ded99f2180d79b83b +da602a3e43d7c5dae6c62e597284de9eba0f430e diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtserialport-everywhere-src-6.2.4/dependencies.yaml new/qtserialport-everywhere-src-6.3.0/dependencies.yaml --- old/qtserialport-everywhere-src-6.2.4/dependencies.yaml 2022-03-04 05:15:43.000000000 +0100 +++ new/qtserialport-everywhere-src-6.3.0/dependencies.yaml 2022-04-05 16:01:25.000000000 +0200 @@ -1,4 +1,4 @@ dependencies: ../qtbase: - ref: d3b5353380797f3b67599ccebc5dc916057681e5 + ref: 9554d315aa74eaba1726405ee09117e2ebc6111f required: true diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtserialport-everywhere-src-6.2.4/examples/serialport/blockingreceiver/CMakeLists.txt new/qtserialport-everywhere-src-6.3.0/examples/serialport/blockingreceiver/CMakeLists.txt --- old/qtserialport-everywhere-src-6.2.4/examples/serialport/blockingreceiver/CMakeLists.txt 2022-03-04 05:15:43.000000000 +0100 +++ new/qtserialport-everywhere-src-6.3.0/examples/serialport/blockingreceiver/CMakeLists.txt 2022-04-05 16:01:25.000000000 +0200 @@ -1,32 +1,27 @@ cmake_minimum_required(VERSION 3.16) project(blockingreceiver LANGUAGES CXX) -set(CMAKE_INCLUDE_CURRENT_DIR ON) - set(CMAKE_AUTOMOC ON) -set(CMAKE_AUTORCC ON) -set(CMAKE_AUTOUIC ON) if(NOT DEFINED INSTALL_EXAMPLESDIR) - set(INSTALL_EXAMPLESDIR "examples") + set(INSTALL_EXAMPLESDIR "examples") endif() set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/serialport/blockingreceiver") -find_package(Qt6 COMPONENTS Core) -find_package(Qt6 COMPONENTS Gui) -find_package(Qt6 COMPONENTS Widgets) -find_package(Qt6 COMPONENTS SerialPort) +find_package(Qt6 REQUIRED COMPONENTS Core Gui SerialPort Widgets) qt_add_executable(blockingreceiver dialog.cpp dialog.h main.cpp receiverthread.cpp receiverthread.h ) + set_target_properties(blockingreceiver PROPERTIES WIN32_EXECUTABLE TRUE MACOSX_BUNDLE TRUE ) + target_link_libraries(blockingreceiver PRIVATE Qt::Core Qt::Gui diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtserialport-everywhere-src-6.2.4/examples/serialport/blockingsender/CMakeLists.txt new/qtserialport-everywhere-src-6.3.0/examples/serialport/blockingsender/CMakeLists.txt --- old/qtserialport-everywhere-src-6.2.4/examples/serialport/blockingsender/CMakeLists.txt 2022-03-04 05:15:43.000000000 +0100 +++ new/qtserialport-everywhere-src-6.3.0/examples/serialport/blockingsender/CMakeLists.txt 2022-04-05 16:01:25.000000000 +0200 @@ -1,32 +1,27 @@ cmake_minimum_required(VERSION 3.16) project(blockingsender LANGUAGES CXX) -set(CMAKE_INCLUDE_CURRENT_DIR ON) - set(CMAKE_AUTOMOC ON) -set(CMAKE_AUTORCC ON) -set(CMAKE_AUTOUIC ON) if(NOT DEFINED INSTALL_EXAMPLESDIR) - set(INSTALL_EXAMPLESDIR "examples") + set(INSTALL_EXAMPLESDIR "examples") endif() set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/serialport/blockingsender") -find_package(Qt6 COMPONENTS Core) -find_package(Qt6 COMPONENTS Gui) -find_package(Qt6 COMPONENTS Widgets) -find_package(Qt6 COMPONENTS SerialPort) +find_package(Qt6 REQUIRED COMPONENTS Core Gui SerialPort Widgets) qt_add_executable(blockingsender dialog.cpp dialog.h main.cpp senderthread.cpp senderthread.h ) + set_target_properties(blockingsender PROPERTIES WIN32_EXECUTABLE TRUE MACOSX_BUNDLE TRUE ) + target_link_libraries(blockingsender PRIVATE Qt::Core Qt::Gui diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtserialport-everywhere-src-6.2.4/examples/serialport/cenumerator/CMakeLists.txt new/qtserialport-everywhere-src-6.3.0/examples/serialport/cenumerator/CMakeLists.txt --- old/qtserialport-everywhere-src-6.2.4/examples/serialport/cenumerator/CMakeLists.txt 2022-03-04 05:15:43.000000000 +0100 +++ new/qtserialport-everywhere-src-6.3.0/examples/serialport/cenumerator/CMakeLists.txt 2022-04-05 16:01:25.000000000 +0200 @@ -1,28 +1,25 @@ cmake_minimum_required(VERSION 3.16) project(cenumerator LANGUAGES CXX) -set(CMAKE_INCLUDE_CURRENT_DIR ON) - set(CMAKE_AUTOMOC ON) -set(CMAKE_AUTORCC ON) -set(CMAKE_AUTOUIC ON) if(NOT DEFINED INSTALL_EXAMPLESDIR) - set(INSTALL_EXAMPLESDIR "examples") + set(INSTALL_EXAMPLESDIR "examples") endif() set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/serialport/cenumerator") -find_package(Qt6 COMPONENTS Core) -find_package(Qt6 COMPONENTS SerialPort) +find_package(Qt6 REQUIRED COMPONENTS Core SerialPort) qt_add_executable(cenumerator main.cpp ) + set_target_properties(cenumerator PROPERTIES WIN32_EXECUTABLE FALSE MACOSX_BUNDLE FALSE ) + target_link_libraries(cenumerator PRIVATE Qt::Core Qt::SerialPort diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtserialport-everywhere-src-6.2.4/examples/serialport/creaderasync/CMakeLists.txt new/qtserialport-everywhere-src-6.3.0/examples/serialport/creaderasync/CMakeLists.txt --- old/qtserialport-everywhere-src-6.2.4/examples/serialport/creaderasync/CMakeLists.txt 2022-03-04 05:15:43.000000000 +0100 +++ new/qtserialport-everywhere-src-6.3.0/examples/serialport/creaderasync/CMakeLists.txt 2022-04-05 16:01:25.000000000 +0200 @@ -1,29 +1,26 @@ cmake_minimum_required(VERSION 3.16) project(creaderasync LANGUAGES CXX) -set(CMAKE_INCLUDE_CURRENT_DIR ON) - set(CMAKE_AUTOMOC ON) -set(CMAKE_AUTORCC ON) -set(CMAKE_AUTOUIC ON) if(NOT DEFINED INSTALL_EXAMPLESDIR) - set(INSTALL_EXAMPLESDIR "examples") + set(INSTALL_EXAMPLESDIR "examples") endif() set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/serialport/creaderasync") -find_package(Qt6 COMPONENTS Core) -find_package(Qt6 COMPONENTS SerialPort) +find_package(Qt6 REQUIRED COMPONENTS Core SerialPort) qt_add_executable(creaderasync main.cpp serialportreader.cpp serialportreader.h ) + set_target_properties(creaderasync PROPERTIES WIN32_EXECUTABLE FALSE MACOSX_BUNDLE FALSE ) + target_link_libraries(creaderasync PRIVATE Qt::Core Qt::SerialPort diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtserialport-everywhere-src-6.2.4/examples/serialport/creadersync/CMakeLists.txt new/qtserialport-everywhere-src-6.3.0/examples/serialport/creadersync/CMakeLists.txt --- old/qtserialport-everywhere-src-6.2.4/examples/serialport/creadersync/CMakeLists.txt 2022-03-04 05:15:43.000000000 +0100 +++ new/qtserialport-everywhere-src-6.3.0/examples/serialport/creadersync/CMakeLists.txt 2022-04-05 16:01:25.000000000 +0200 @@ -1,28 +1,25 @@ cmake_minimum_required(VERSION 3.16) project(creadersync LANGUAGES CXX) -set(CMAKE_INCLUDE_CURRENT_DIR ON) - set(CMAKE_AUTOMOC ON) -set(CMAKE_AUTORCC ON) -set(CMAKE_AUTOUIC ON) if(NOT DEFINED INSTALL_EXAMPLESDIR) - set(INSTALL_EXAMPLESDIR "examples") + set(INSTALL_EXAMPLESDIR "examples") endif() set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/serialport/creadersync") -find_package(Qt6 COMPONENTS Core) -find_package(Qt6 COMPONENTS SerialPort) +find_package(Qt6 REQUIRED COMPONENTS Core SerialPort) qt_add_executable(creadersync main.cpp ) + set_target_properties(creadersync PROPERTIES WIN32_EXECUTABLE FALSE MACOSX_BUNDLE FALSE ) + target_link_libraries(creadersync PRIVATE Qt::Core Qt::SerialPort diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtserialport-everywhere-src-6.2.4/examples/serialport/cwriterasync/CMakeLists.txt new/qtserialport-everywhere-src-6.3.0/examples/serialport/cwriterasync/CMakeLists.txt --- old/qtserialport-everywhere-src-6.2.4/examples/serialport/cwriterasync/CMakeLists.txt 2022-03-04 05:15:43.000000000 +0100 +++ new/qtserialport-everywhere-src-6.3.0/examples/serialport/cwriterasync/CMakeLists.txt 2022-04-05 16:01:25.000000000 +0200 @@ -1,29 +1,26 @@ cmake_minimum_required(VERSION 3.16) project(cwriterasync LANGUAGES CXX) -set(CMAKE_INCLUDE_CURRENT_DIR ON) - set(CMAKE_AUTOMOC ON) -set(CMAKE_AUTORCC ON) -set(CMAKE_AUTOUIC ON) if(NOT DEFINED INSTALL_EXAMPLESDIR) - set(INSTALL_EXAMPLESDIR "examples") + set(INSTALL_EXAMPLESDIR "examples") endif() set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/serialport/cwriterasync") -find_package(Qt6 COMPONENTS Core) -find_package(Qt6 COMPONENTS SerialPort) +find_package(Qt6 REQUIRED COMPONENTS Core SerialPort) qt_add_executable(cwriterasync main.cpp serialportwriter.cpp serialportwriter.h ) + set_target_properties(cwriterasync PROPERTIES WIN32_EXECUTABLE FALSE MACOSX_BUNDLE FALSE ) + target_link_libraries(cwriterasync PRIVATE Qt::Core Qt::SerialPort diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtserialport-everywhere-src-6.2.4/examples/serialport/cwritersync/CMakeLists.txt new/qtserialport-everywhere-src-6.3.0/examples/serialport/cwritersync/CMakeLists.txt --- old/qtserialport-everywhere-src-6.2.4/examples/serialport/cwritersync/CMakeLists.txt 2022-03-04 05:15:43.000000000 +0100 +++ new/qtserialport-everywhere-src-6.3.0/examples/serialport/cwritersync/CMakeLists.txt 2022-04-05 16:01:25.000000000 +0200 @@ -1,28 +1,25 @@ cmake_minimum_required(VERSION 3.16) project(cwritersync LANGUAGES CXX) -set(CMAKE_INCLUDE_CURRENT_DIR ON) - set(CMAKE_AUTOMOC ON) -set(CMAKE_AUTORCC ON) -set(CMAKE_AUTOUIC ON) if(NOT DEFINED INSTALL_EXAMPLESDIR) - set(INSTALL_EXAMPLESDIR "examples") + set(INSTALL_EXAMPLESDIR "examples") endif() set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/serialport/cwritersync") -find_package(Qt6 COMPONENTS Core) -find_package(Qt6 COMPONENTS SerialPort) +find_package(Qt6 REQUIRED COMPONENTS Core SerialPort) qt_add_executable(cwritersync main.cpp ) + set_target_properties(cwritersync PROPERTIES WIN32_EXECUTABLE FALSE MACOSX_BUNDLE FALSE ) + target_link_libraries(cwritersync PRIVATE Qt::Core Qt::SerialPort diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtserialport-everywhere-src-6.2.4/examples/serialport/enumerator/CMakeLists.txt new/qtserialport-everywhere-src-6.3.0/examples/serialport/enumerator/CMakeLists.txt --- old/qtserialport-everywhere-src-6.2.4/examples/serialport/enumerator/CMakeLists.txt 2022-03-04 05:15:43.000000000 +0100 +++ new/qtserialport-everywhere-src-6.3.0/examples/serialport/enumerator/CMakeLists.txt 2022-04-05 16:01:25.000000000 +0200 @@ -1,30 +1,25 @@ cmake_minimum_required(VERSION 3.16) project(enumerator LANGUAGES CXX) -set(CMAKE_INCLUDE_CURRENT_DIR ON) - set(CMAKE_AUTOMOC ON) -set(CMAKE_AUTORCC ON) -set(CMAKE_AUTOUIC ON) if(NOT DEFINED INSTALL_EXAMPLESDIR) - set(INSTALL_EXAMPLESDIR "examples") + set(INSTALL_EXAMPLESDIR "examples") endif() set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/serialport/enumerator") -find_package(Qt6 COMPONENTS Core) -find_package(Qt6 COMPONENTS Gui) -find_package(Qt6 COMPONENTS Widgets) -find_package(Qt6 COMPONENTS SerialPort) +find_package(Qt6 REQUIRED COMPONENTS Core Gui SerialPort Widgets) qt_add_executable(enumerator main.cpp ) + set_target_properties(enumerator PROPERTIES WIN32_EXECUTABLE TRUE MACOSX_BUNDLE TRUE ) + target_link_libraries(enumerator PRIVATE Qt::Core Qt::Gui diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtserialport-everywhere-src-6.2.4/examples/serialport/receiver/CMakeLists.txt new/qtserialport-everywhere-src-6.3.0/examples/serialport/receiver/CMakeLists.txt --- old/qtserialport-everywhere-src-6.2.4/examples/serialport/receiver/CMakeLists.txt 2022-03-04 05:15:43.000000000 +0100 +++ new/qtserialport-everywhere-src-6.3.0/examples/serialport/receiver/CMakeLists.txt 2022-04-05 16:01:25.000000000 +0200 @@ -1,31 +1,26 @@ cmake_minimum_required(VERSION 3.16) project(receiver LANGUAGES CXX) -set(CMAKE_INCLUDE_CURRENT_DIR ON) - set(CMAKE_AUTOMOC ON) -set(CMAKE_AUTORCC ON) -set(CMAKE_AUTOUIC ON) if(NOT DEFINED INSTALL_EXAMPLESDIR) - set(INSTALL_EXAMPLESDIR "examples") + set(INSTALL_EXAMPLESDIR "examples") endif() set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/serialport/receiver") -find_package(Qt6 COMPONENTS Core) -find_package(Qt6 COMPONENTS Gui) -find_package(Qt6 COMPONENTS Widgets) -find_package(Qt6 COMPONENTS SerialPort) +find_package(Qt6 REQUIRED COMPONENTS Core Gui SerialPort Widgets) qt_add_executable(receiver dialog.cpp dialog.h main.cpp ) + set_target_properties(receiver PROPERTIES WIN32_EXECUTABLE TRUE MACOSX_BUNDLE TRUE ) + target_link_libraries(receiver PRIVATE Qt::Core Qt::Gui diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtserialport-everywhere-src-6.2.4/examples/serialport/sender/CMakeLists.txt new/qtserialport-everywhere-src-6.3.0/examples/serialport/sender/CMakeLists.txt --- old/qtserialport-everywhere-src-6.2.4/examples/serialport/sender/CMakeLists.txt 2022-03-04 05:15:43.000000000 +0100 +++ new/qtserialport-everywhere-src-6.3.0/examples/serialport/sender/CMakeLists.txt 2022-04-05 16:01:25.000000000 +0200 @@ -1,31 +1,26 @@ cmake_minimum_required(VERSION 3.16) project(sender LANGUAGES CXX) -set(CMAKE_INCLUDE_CURRENT_DIR ON) - set(CMAKE_AUTOMOC ON) -set(CMAKE_AUTORCC ON) -set(CMAKE_AUTOUIC ON) if(NOT DEFINED INSTALL_EXAMPLESDIR) - set(INSTALL_EXAMPLESDIR "examples") + set(INSTALL_EXAMPLESDIR "examples") endif() set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/serialport/sender") -find_package(Qt6 COMPONENTS Core) -find_package(Qt6 COMPONENTS Gui) -find_package(Qt6 COMPONENTS Widgets) -find_package(Qt6 COMPONENTS SerialPort) +find_package(Qt6 REQUIRED COMPONENTS Core Gui SerialPort Widgets) qt_add_executable(sender dialog.cpp dialog.h main.cpp ) + set_target_properties(sender PROPERTIES WIN32_EXECUTABLE TRUE MACOSX_BUNDLE TRUE ) + target_link_libraries(sender PRIVATE Qt::Core Qt::Gui diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtserialport-everywhere-src-6.2.4/examples/serialport/terminal/CMakeLists.txt new/qtserialport-everywhere-src-6.3.0/examples/serialport/terminal/CMakeLists.txt --- old/qtserialport-everywhere-src-6.2.4/examples/serialport/terminal/CMakeLists.txt 2022-03-04 05:15:43.000000000 +0100 +++ new/qtserialport-everywhere-src-6.3.0/examples/serialport/terminal/CMakeLists.txt 2022-04-05 16:01:25.000000000 +0200 @@ -1,22 +1,16 @@ cmake_minimum_required(VERSION 3.16) project(terminal LANGUAGES CXX) -set(CMAKE_INCLUDE_CURRENT_DIR ON) - set(CMAKE_AUTOMOC ON) -set(CMAKE_AUTORCC ON) set(CMAKE_AUTOUIC ON) if(NOT DEFINED INSTALL_EXAMPLESDIR) - set(INSTALL_EXAMPLESDIR "examples") + set(INSTALL_EXAMPLESDIR "examples") endif() set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/serialport/terminal") -find_package(Qt6 COMPONENTS Core) -find_package(Qt6 COMPONENTS Gui) -find_package(Qt6 COMPONENTS Widgets) -find_package(Qt6 COMPONENTS SerialPort) +find_package(Qt6 REQUIRED COMPONENTS Core Gui SerialPort Widgets) qt_add_executable(terminal console.cpp console.h @@ -24,10 +18,12 @@ mainwindow.cpp mainwindow.h mainwindow.ui settingsdialog.cpp settingsdialog.h settingsdialog.ui ) + set_target_properties(terminal PROPERTIES WIN32_EXECUTABLE TRUE MACOSX_BUNDLE TRUE ) + target_link_libraries(terminal PRIVATE Qt::Core Qt::Gui @@ -35,7 +31,6 @@ Qt::Widgets ) - # Resources: set(terminal_resource_files "images/application-exit.png" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtserialport-everywhere-src-6.2.4/include/QtSerialPort/6.2.4/QtSerialPort/private/qserialport_p.h new/qtserialport-everywhere-src-6.3.0/include/QtSerialPort/6.2.4/QtSerialPort/private/qserialport_p.h --- old/qtserialport-everywhere-src-6.2.4/include/QtSerialPort/6.2.4/QtSerialPort/private/qserialport_p.h 2022-03-04 05:15:43.000000000 +0100 +++ new/qtserialport-everywhere-src-6.3.0/include/QtSerialPort/6.2.4/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-everywhere-src-6.2.4/include/QtSerialPort/6.2.4/QtSerialPort/private/qserialportinfo_p.h new/qtserialport-everywhere-src-6.3.0/include/QtSerialPort/6.2.4/QtSerialPort/private/qserialportinfo_p.h --- old/qtserialport-everywhere-src-6.2.4/include/QtSerialPort/6.2.4/QtSerialPort/private/qserialportinfo_p.h 2022-03-04 05:15:43.000000000 +0100 +++ new/qtserialport-everywhere-src-6.3.0/include/QtSerialPort/6.2.4/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-everywhere-src-6.2.4/include/QtSerialPort/6.2.4/QtSerialPort/private/qtntdll_p.h new/qtserialport-everywhere-src-6.3.0/include/QtSerialPort/6.2.4/QtSerialPort/private/qtntdll_p.h --- old/qtserialport-everywhere-src-6.2.4/include/QtSerialPort/6.2.4/QtSerialPort/private/qtntdll_p.h 2022-03-04 05:15:43.000000000 +0100 +++ new/qtserialport-everywhere-src-6.3.0/include/QtSerialPort/6.2.4/QtSerialPort/private/qtntdll_p.h 1970-01-01 01:00:00.000000000 +0100 @@ -1 +0,0 @@ -#include "../../../../../src/serialport/qtntdll_p.h" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtserialport-everywhere-src-6.2.4/include/QtSerialPort/6.2.4/QtSerialPort/private/qtudev_p.h new/qtserialport-everywhere-src-6.3.0/include/QtSerialPort/6.2.4/QtSerialPort/private/qtudev_p.h --- old/qtserialport-everywhere-src-6.2.4/include/QtSerialPort/6.2.4/QtSerialPort/private/qtudev_p.h 2022-03-04 05:15:43.000000000 +0100 +++ new/qtserialport-everywhere-src-6.3.0/include/QtSerialPort/6.2.4/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-everywhere-src-6.2.4/include/QtSerialPort/6.3.0/QtSerialPort/private/qserialport_p.h new/qtserialport-everywhere-src-6.3.0/include/QtSerialPort/6.3.0/QtSerialPort/private/qserialport_p.h --- old/qtserialport-everywhere-src-6.2.4/include/QtSerialPort/6.3.0/QtSerialPort/private/qserialport_p.h 1970-01-01 01:00:00.000000000 +0100 +++ new/qtserialport-everywhere-src-6.3.0/include/QtSerialPort/6.3.0/QtSerialPort/private/qserialport_p.h 2022-04-05 16:01:25.000000000 +0200 @@ -0,0 +1 @@ +#include "../../../../../src/serialport/qserialport_p.h" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtserialport-everywhere-src-6.2.4/include/QtSerialPort/6.3.0/QtSerialPort/private/qserialportinfo_p.h new/qtserialport-everywhere-src-6.3.0/include/QtSerialPort/6.3.0/QtSerialPort/private/qserialportinfo_p.h --- old/qtserialport-everywhere-src-6.2.4/include/QtSerialPort/6.3.0/QtSerialPort/private/qserialportinfo_p.h 1970-01-01 01:00:00.000000000 +0100 +++ new/qtserialport-everywhere-src-6.3.0/include/QtSerialPort/6.3.0/QtSerialPort/private/qserialportinfo_p.h 2022-04-05 16:01:25.000000000 +0200 @@ -0,0 +1 @@ +#include "../../../../../src/serialport/qserialportinfo_p.h" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtserialport-everywhere-src-6.2.4/include/QtSerialPort/6.3.0/QtSerialPort/private/qtudev_p.h new/qtserialport-everywhere-src-6.3.0/include/QtSerialPort/6.3.0/QtSerialPort/private/qtudev_p.h --- old/qtserialport-everywhere-src-6.2.4/include/QtSerialPort/6.3.0/QtSerialPort/private/qtudev_p.h 1970-01-01 01:00:00.000000000 +0100 +++ new/qtserialport-everywhere-src-6.3.0/include/QtSerialPort/6.3.0/QtSerialPort/private/qtudev_p.h 2022-04-05 16:01:25.000000000 +0200 @@ -0,0 +1 @@ +#include "../../../../../src/serialport/qtudev_p.h" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtserialport-everywhere-src-6.2.4/include/QtSerialPort/6.3.0/QtSerialPort/private/qwinoverlappedionotifier_p.h new/qtserialport-everywhere-src-6.3.0/include/QtSerialPort/6.3.0/QtSerialPort/private/qwinoverlappedionotifier_p.h --- old/qtserialport-everywhere-src-6.2.4/include/QtSerialPort/6.3.0/QtSerialPort/private/qwinoverlappedionotifier_p.h 1970-01-01 01:00:00.000000000 +0100 +++ new/qtserialport-everywhere-src-6.3.0/include/QtSerialPort/6.3.0/QtSerialPort/private/qwinoverlappedionotifier_p.h 2022-04-05 16:01:25.000000000 +0200 @@ -0,0 +1 @@ +#include "../../../../../src/serialport/qwinoverlappedionotifier_p.h" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtserialport-everywhere-src-6.2.4/include/QtSerialPort/headers.pri new/qtserialport-everywhere-src-6.3.0/include/QtSerialPort/headers.pri --- old/qtserialport-everywhere-src-6.2.4/include/QtSerialPort/headers.pri 2022-03-10 11:21:31.000000000 +0100 +++ new/qtserialport-everywhere-src-6.3.0/include/QtSerialPort/headers.pri 2022-04-06 19:56:41.000000000 +0200 @@ -1,6 +1,6 @@ SYNCQT.HEADER_FILES = qserialport.h qserialportglobal.h qserialportinfo.h SYNCQT.GENERATED_HEADER_FILES = QSerialPort QSerialPortInfo qtserialportversion.h QtSerialPortVersion QtSerialPort -SYNCQT.PRIVATE_HEADER_FILES = qserialport_p.h qserialportinfo_p.h qtntdll_p.h qtudev_p.h +SYNCQT.PRIVATE_HEADER_FILES = qserialport_p.h qserialportinfo_p.h qtudev_p.h qwinoverlappedionotifier_p.h SYNCQT.QPA_HEADER_FILES = SYNCQT.CLEAN_HEADER_FILES = qserialport.h qserialportglobal.h qserialportinfo.h SYNCQT.INJECTIONS = diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtserialport-everywhere-src-6.2.4/include/QtSerialPort/qtserialportversion.h new/qtserialport-everywhere-src-6.3.0/include/QtSerialPort/qtserialportversion.h --- old/qtserialport-everywhere-src-6.2.4/include/QtSerialPort/qtserialportversion.h 2022-03-10 11:21:31.000000000 +0100 +++ new/qtserialport-everywhere-src-6.3.0/include/QtSerialPort/qtserialportversion.h 2022-04-06 19:56:41.000000000 +0200 @@ -2,8 +2,8 @@ #ifndef QT_QTSERIALPORT_VERSION_H #define QT_QTSERIALPORT_VERSION_H -#define QTSERIALPORT_VERSION_STR "6.2.4" +#define QTSERIALPORT_VERSION_STR "6.3.0" -#define QTSERIALPORT_VERSION 0x060204 +#define QTSERIALPORT_VERSION 0x060300 #endif // QT_QTSERIALPORT_VERSION_H diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtserialport-everywhere-src-6.2.4/src/serialport/CMakeLists.txt new/qtserialport-everywhere-src-6.3.0/src/serialport/CMakeLists.txt --- old/qtserialport-everywhere-src-6.2.4/src/serialport/CMakeLists.txt 2022-03-04 05:15:43.000000000 +0100 +++ new/qtserialport-everywhere-src-6.3.0/src/serialport/CMakeLists.txt 2022-04-05 16:01:25.000000000 +0200 @@ -16,16 +16,12 @@ Qt::Core PRIVATE_MODULE_INTERFACE Qt::CorePrivate + GENERATE_CPP_EXPORTS ) ## Scopes: ##################################################################### -qt_internal_extend_target(SerialPort CONDITION config_ntddmodm - DEFINES - QT_NO_REDEFINE_GUID_DEVINTERFACE_MODEM -) - qt_internal_extend_target(SerialPort CONDITION QT_FEATURE_libudev AND UNIX DEFINES LINK_LIBUDEV @@ -37,7 +33,8 @@ SOURCES qserialport_win.cpp qserialportinfo_win.cpp - qtntdll_p.h + qwinoverlappedionotifier.cpp + qwinoverlappedionotifier_p.h LIBRARIES advapi32 setupapi diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtserialport-everywhere-src-6.2.4/src/serialport/configure.cmake new/qtserialport-everywhere-src-6.3.0/src/serialport/configure.cmake --- old/qtserialport-everywhere-src-6.2.4/src/serialport/configure.cmake 2022-03-04 05:15:43.000000000 +0100 +++ new/qtserialport-everywhere-src-6.3.0/src/serialport/configure.cmake 2022-04-05 16:01:25.000000000 +0200 @@ -37,7 +37,7 @@ CONDITION TEST_ntddmodm DISABLE INPUT_ntddmodm STREQUAL 'no' ) -qt_feature_definition("ntddmodm" "QT_NO_REDEFINE_GUID_DEVINTERFACE_MODEM" NEGATE) +qt_feature_definition("ntddmodm" "QT_NO_REDEFINE_GUID_DEVINTERFACE_MODEM") qt_configure_add_summary_section(NAME "Serial Port") qt_configure_add_summary_entry(ARGS "ntddmodm") qt_configure_end_summary_section() # end of "Serial Port" section diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtserialport-everywhere-src-6.2.4/src/serialport/doc/qtserialport.qdocconf new/qtserialport-everywhere-src-6.3.0/src/serialport/doc/qtserialport.qdocconf --- old/qtserialport-everywhere-src-6.2.4/src/serialport/doc/qtserialport.qdocconf 2022-03-04 05:15:43.000000000 +0100 +++ new/qtserialport-everywhere-src-6.3.0/src/serialport/doc/qtserialport.qdocconf 2022-04-05 16:01:25.000000000 +0200 @@ -13,10 +13,6 @@ qhp.QtSerialPort.indexTitle = Qt Serial Port qhp.QtSerialPort.indexRoot = -qhp.QtSerialPort.filterAttributes = qtserialport $QT_VERSION qtrefdoc -qhp.QtSerialPort.customFilters.Qt.name = QtSerialPort $QT_VERSION -qhp.QtSerialPort.customFilters.Qt.filterAttributes = qtserialport $QT_VERSION - qhp.QtSerialPort.subprojects = classes examples qhp.QtSerialPort.subprojects.classes.title = C++ Classes diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtserialport-everywhere-src-6.2.4/src/serialport/qserialport.h new/qtserialport-everywhere-src-6.3.0/src/serialport/qserialport.h --- old/qtserialport-everywhere-src-6.2.4/src/serialport/qserialport.h 2022-03-04 05:15:43.000000000 +0100 +++ new/qtserialport-everywhere-src-6.3.0/src/serialport/qserialport.h 2022-04-05 16:01:25.000000000 +0200 @@ -244,6 +244,7 @@ #if defined(Q_OS_WIN32) Q_PRIVATE_SLOT(d_func(), bool _q_startAsyncWrite()) + Q_PRIVATE_SLOT(d_func(), void _q_notified(quint32, quint32, OVERLAPPED*)) #endif }; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtserialport-everywhere-src-6.2.4/src/serialport/qserialport_p.h new/qtserialport-everywhere-src-6.3.0/src/serialport/qserialport_p.h --- old/qtserialport-everywhere-src-6.2.4/src/serialport/qserialport_p.h 2022-03-04 05:15:43.000000000 +0100 +++ new/qtserialport-everywhere-src-6.3.0/src/serialport/qserialport_p.h 2022-04-05 16:01:25.000000000 +0200 @@ -106,6 +106,7 @@ QT_BEGIN_NAMESPACE +class QWinOverlappedIoNotifier; class QTimer; class QSocketNotifier; @@ -210,6 +211,7 @@ bool setDcb(DCB *dcb); bool getDcb(DCB *dcb); + OVERLAPPED *waitForNotified(QDeadlineTimer deadline); qint64 queuedBytesCount(QSerialPort::Direction direction) const; @@ -219,15 +221,10 @@ bool startAsyncCommunication(); bool _q_startAsyncWrite(); - void handleNotification(DWORD bytesTransferred, DWORD errorCode, - OVERLAPPED *overlapped); + void _q_notified(DWORD numberOfBytes, DWORD errorCode, OVERLAPPED *overlapped); void emitReadyRead(); - static void CALLBACK ioCompletionRoutine( - DWORD errorCode, DWORD bytesTransfered, - OVERLAPPED *overlappedBase); - DCB restoredDcb; COMMTIMEOUTS currentCommTimeouts; COMMTIMEOUTS restoredCommTimeouts; @@ -237,12 +234,11 @@ bool communicationStarted = false; bool writeStarted = false; bool readStarted = false; - qint64 writeBytesTransferred = 0; - qint64 readBytesTransferred = 0; + QWinOverlappedIoNotifier *notifier = nullptr; QTimer *startAsyncWriteTimer = nullptr; - class Overlapped *communicationCompletionOverlapped = nullptr; - class Overlapped *readCompletionOverlapped = nullptr; - class Overlapped *writeCompletionOverlapped = nullptr; + OVERLAPPED communicationOverlapped; + OVERLAPPED readCompletionOverlapped; + OVERLAPPED writeCompletionOverlapped; DWORD triggeredEventMask = 0; #elif defined(Q_OS_UNIX) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtserialport-everywhere-src-6.2.4/src/serialport/qserialport_win.cpp new/qtserialport-everywhere-src-6.3.0/src/serialport/qserialport_win.cpp --- old/qtserialport-everywhere-src-6.2.4/src/serialport/qserialport_win.cpp 2022-03-04 05:15:43.000000000 +0100 +++ new/qtserialport-everywhere-src-6.3.0/src/serialport/qserialport_win.cpp 2022-04-05 16:01:25.000000000 +0200 @@ -40,7 +40,7 @@ ****************************************************************************/ #include "qserialport_p.h" -#include "qtntdll_p.h" +#include "qwinoverlappedionotifier_p.h" #include <QtCore/qcoreevent.h> #include <QtCore/qelapsedtimer.h> @@ -49,6 +49,37 @@ #include <QtCore/qtimer.h> #include <algorithm> +#ifndef CTL_CODE +# define CTL_CODE(DeviceType, Function, Method, Access) ( \ + ((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method) \ + ) +#endif + +#ifndef FILE_DEVICE_SERIAL_PORT +# define FILE_DEVICE_SERIAL_PORT 27 +#endif + +#ifndef METHOD_BUFFERED +# define METHOD_BUFFERED 0 +#endif + +#ifndef FILE_ANY_ACCESS +# define FILE_ANY_ACCESS 0x00000000 +#endif + +#ifndef IOCTL_SERIAL_GET_DTRRTS +# define IOCTL_SERIAL_GET_DTRRTS \ + CTL_CODE(FILE_DEVICE_SERIAL_PORT, 30, METHOD_BUFFERED, FILE_ANY_ACCESS) +#endif + +#ifndef SERIAL_DTR_STATE +# define SERIAL_DTR_STATE 0x00000001 +#endif + +#ifndef SERIAL_RTS_STATE +# define SERIAL_RTS_STATE 0x00000002 +#endif + QT_BEGIN_NAMESPACE static inline void qt_set_common_props(DCB *dcb) @@ -143,117 +174,8 @@ } } -// Translate NT-callbacks to Win32 callbacks. -static VOID WINAPI qt_apc_routine( - PVOID context, - PIO_STATUS_BLOCK ioStatusBlock, - DWORD reserved) -{ - Q_UNUSED(reserved); - - const DWORD errorCode = ::RtlNtStatusToDosError(ioStatusBlock->Status); - const DWORD bytesTransfered = NT_SUCCESS(ioStatusBlock->Status) - ? DWORD(ioStatusBlock->Information) : 0; - const LPOVERLAPPED overlapped = CONTAINING_RECORD(ioStatusBlock, - OVERLAPPED, Internal); - - (reinterpret_cast<LPOVERLAPPED_COMPLETION_ROUTINE>(context)) - (errorCode, bytesTransfered, overlapped); -} - -// Alertable analog of DeviceIoControl function. -static BOOL qt_device_io_control_ex( - HANDLE deviceHandle, - DWORD ioControlCode, - LPVOID inputBuffer, - DWORD inputBufferSize, - LPVOID outputBuffer, - DWORD outputBufferSize, - LPOVERLAPPED overlapped, - LPOVERLAPPED_COMPLETION_ROUTINE completionRoutine) -{ - const auto ioStatusBlock = reinterpret_cast<PIO_STATUS_BLOCK>( - &overlapped->Internal); - ioStatusBlock->Status = STATUS_PENDING; - - const NTSTATUS status = ::NtDeviceIoControlFile( - deviceHandle, - nullptr, - qt_apc_routine, - reinterpret_cast<PVOID>(completionRoutine), - ioStatusBlock, - ioControlCode, - inputBuffer, - inputBufferSize, - outputBuffer, - outputBufferSize); - - if (!NT_SUCCESS(status)) { - ::SetLastError(::RtlNtStatusToDosError(status)); - return false; - } - - return true; -} - -// Alertable analog of WaitCommEvent function. -static BOOL qt_wait_comm_event_ex( - HANDLE deviceHandle, - LPDWORD eventsMask, - LPOVERLAPPED overlapped, - LPOVERLAPPED_COMPLETION_ROUTINE completionRoutine) -{ - return qt_device_io_control_ex( - deviceHandle, - IOCTL_SERIAL_WAIT_ON_MASK, - nullptr, - 0, - eventsMask, - sizeof(DWORD), - overlapped, - completionRoutine); -} - -struct RuntimeHelper -{ - QLibrary ntLibrary; - QBasicMutex mutex; -}; - -Q_GLOBAL_STATIC(RuntimeHelper, helper) - -class Overlapped final : public OVERLAPPED -{ - Q_DISABLE_COPY(Overlapped) -public: - explicit Overlapped(QSerialPortPrivate *d); - void clear(); - - QSerialPortPrivate *dptr = nullptr; -}; - -Overlapped::Overlapped(QSerialPortPrivate *d) - : dptr(d) -{ -} - -void Overlapped::clear() -{ - ::ZeroMemory(this, sizeof(OVERLAPPED)); -} - bool QSerialPortPrivate::open(QIODevice::OpenMode mode) { - { - QMutexLocker locker(&helper()->mutex); - static bool symbolsResolved = resolveNtdllSymbols(&helper()->ntLibrary); - if (!symbolsResolved) { - setError(QSerialPortErrorInfo(QSerialPort::OpenError, - helper()->ntLibrary.errorString())); - return false; - } - } - DWORD desiredAccess = 0; if (mode & QIODevice::ReadOnly) @@ -278,44 +200,17 @@ void QSerialPortPrivate::close() { - delete startAsyncWriteTimer; - startAsyncWriteTimer = nullptr; - - if (communicationStarted) { - communicationCompletionOverlapped->dptr = nullptr; - ::CancelIoEx(handle, communicationCompletionOverlapped); - // The object will be deleted in the I/O callback. - communicationCompletionOverlapped = nullptr; - communicationStarted = false; - } else { - delete communicationCompletionOverlapped; - communicationCompletionOverlapped = nullptr; - } + ::CancelIo(handle); - if (readStarted) { - readCompletionOverlapped->dptr = nullptr; - ::CancelIoEx(handle, readCompletionOverlapped); - // The object will be deleted in the I/O callback. - readCompletionOverlapped = nullptr; - readStarted = false; - } else { - delete readCompletionOverlapped; - readCompletionOverlapped = nullptr; - }; + delete notifier; + notifier = nullptr; - if (writeStarted) { - writeCompletionOverlapped->dptr = nullptr; - ::CancelIoEx(handle, writeCompletionOverlapped); - // The object will be deleted in the I/O callback. - writeCompletionOverlapped = nullptr; - writeStarted = false; - } else { - delete writeCompletionOverlapped; - writeCompletionOverlapped = nullptr; - } + delete startAsyncWriteTimer; + startAsyncWriteTimer = nullptr; - readBytesTransferred = 0; - writeBytesTransferred = 0; + communicationStarted = false; + readStarted = false; + writeStarted = false; writeBuffer.clear(); if (settingsRestoredOnClose) { @@ -447,25 +342,30 @@ if (!writeStarted && !_q_startAsyncWrite()) return false; + const qint64 initialReadBufferSize = buffer.size(); + qint64 currentReadBufferSize = initialReadBufferSize; + QDeadlineTimer deadline(msecs); do { - if (readBytesTransferred <= 0) { - const qint64 remaining = deadline.remainingTime(); - const DWORD result = ::SleepEx( - remaining == -1 ? INFINITE : DWORD(remaining), - TRUE); - if (result != WAIT_IO_COMPLETION) - continue; - } + const OVERLAPPED *overlapped = waitForNotified(deadline); + if (!overlapped) + return false; - if (readBytesTransferred > 0) { - readBytesTransferred = 0; - return true; + if (overlapped == &readCompletionOverlapped) { + const qint64 readBytesForOneReadOperation = qint64(buffer.size()) - currentReadBufferSize; + if (readBytesForOneReadOperation == QSERIALPORT_BUFFERSIZE) { + currentReadBufferSize = buffer.size(); + } else if (readBytesForOneReadOperation == 0) { + if (initialReadBufferSize != currentReadBufferSize) + return true; + } else { + return true; + } } + } while (!deadline.hasExpired()); - setError(getSystemError(WAIT_TIMEOUT)); return false; } @@ -479,23 +379,15 @@ QDeadlineTimer deadline(msecs); - do { - if (writeBytesTransferred <= 0) { - const qint64 remaining = deadline.remainingTime(); - const DWORD result = ::SleepEx( - remaining == -1 ? INFINITE : DWORD(remaining), - TRUE); - if (result != WAIT_IO_COMPLETION) - continue; - } + for (;;) { + const OVERLAPPED *overlapped = waitForNotified(deadline); + if (!overlapped) + return false; - if (writeBytesTransferred > 0) { - writeBytesTransferred = 0; + if (overlapped == &writeCompletionOverlapped) return true; - } - } while (!deadline.hasExpired()); + } - setError(getSystemError(WAIT_TIMEOUT)); return false; } @@ -576,10 +468,6 @@ bool QSerialPortPrivate::completeAsyncRead(qint64 bytesTransferred) { - // Store the number of transferred bytes which are - // required only in waitForReadyRead() method. - readBytesTransferred = bytesTransferred; - if (bytesTransferred == qint64(-1)) { readStarted = false; return false; @@ -607,10 +495,6 @@ { Q_Q(QSerialPort); - // Store the number of transferred bytes which are - // required only in waitForBytesWritten() method. - writeBytesTransferred = bytesTransferred; - if (writeStarted) { if (bytesTransferred == qint64(-1)) { writeChunkBuffer.clear(); @@ -631,16 +515,8 @@ if (communicationStarted) return true; - if (!communicationCompletionOverlapped) - communicationCompletionOverlapped = new Overlapped(this); - - communicationCompletionOverlapped->clear(); - communicationStarted = true; - if (!::qt_wait_comm_event_ex(handle, - &triggeredEventMask, - communicationCompletionOverlapped, - ioCompletionRoutine)) { - communicationStarted = false; + ::ZeroMemory(&communicationOverlapped, sizeof(communicationOverlapped)); + if (!::WaitCommEvent(handle, &triggeredEventMask, &communicationOverlapped)) { QSerialPortErrorInfo error = getSystemError(); if (error.errorCode != QSerialPort::NoError) { if (error.errorCode == QSerialPort::PermissionError) @@ -649,6 +525,7 @@ return false; } } + communicationStarted = true; return true; } @@ -670,27 +547,23 @@ Q_ASSERT(int(bytesToRead) <= readChunkBuffer.size()); - if (!readCompletionOverlapped) - readCompletionOverlapped = new Overlapped(this); + ::ZeroMemory(&readCompletionOverlapped, sizeof(readCompletionOverlapped)); + if (::ReadFile(handle, readChunkBuffer.data(), bytesToRead, nullptr, &readCompletionOverlapped)) { + readStarted = true; + return true; + } - readCompletionOverlapped->clear(); - readStarted = true; - if (!::ReadFileEx(handle, - readChunkBuffer.data(), - bytesToRead, - readCompletionOverlapped, - ioCompletionRoutine)) { - readStarted = false; - QSerialPortErrorInfo error = getSystemError(); - if (error.errorCode != QSerialPort::NoError) { - if (error.errorCode == QSerialPort::PermissionError) - error.errorCode = QSerialPort::ResourceError; - if (error.errorCode != QSerialPort::ResourceError) - error.errorCode = QSerialPort::ReadError; - setError(error); - return false; - } + QSerialPortErrorInfo error = getSystemError(); + if (error.errorCode != QSerialPort::NoError) { + if (error.errorCode == QSerialPort::PermissionError) + error.errorCode = QSerialPort::ResourceError; + if (error.errorCode != QSerialPort::ResourceError) + error.errorCode = QSerialPort::ReadError; + setError(error); + return false; } + + readStarted = true; return true; } @@ -700,18 +573,10 @@ return true; writeChunkBuffer = writeBuffer.read(); + ::ZeroMemory(&writeCompletionOverlapped, sizeof(writeCompletionOverlapped)); + if (!::WriteFile(handle, writeChunkBuffer.constData(), + writeChunkBuffer.size(), nullptr, &writeCompletionOverlapped)) { - if (!writeCompletionOverlapped) - writeCompletionOverlapped = new Overlapped(this); - - writeCompletionOverlapped->clear(); - writeStarted = true; - if (!::WriteFileEx(handle, - writeChunkBuffer.constData(), - writeChunkBuffer.size(), - writeCompletionOverlapped, - ioCompletionRoutine)) { - writeStarted = false; QSerialPortErrorInfo error = getSystemError(); if (error.errorCode != QSerialPort::NoError) { if (error.errorCode != QSerialPort::ResourceError) @@ -720,29 +585,25 @@ return false; } } + + writeStarted = true; return true; } -void QSerialPortPrivate::handleNotification(DWORD bytesTransferred, DWORD errorCode, - OVERLAPPED *overlapped) +void QSerialPortPrivate::_q_notified(DWORD numberOfBytes, DWORD errorCode, OVERLAPPED *overlapped) { - // This occurred e.g. after calling the CloseHandle() function, - // just skip handling at all. - if (handle == INVALID_HANDLE_VALUE) - return; - const QSerialPortErrorInfo error = getSystemError(errorCode); if (error.errorCode != QSerialPort::NoError) { setError(error); return; } - if (overlapped == communicationCompletionOverlapped) - completeAsyncCommunication(bytesTransferred); - else if (overlapped == readCompletionOverlapped) - completeAsyncRead(bytesTransferred); - else if (overlapped == writeCompletionOverlapped) - completeAsyncWrite(bytesTransferred); + if (overlapped == &communicationOverlapped) + completeAsyncCommunication(numberOfBytes); + else if (overlapped == &readCompletionOverlapped) + completeAsyncRead(numberOfBytes); + else if (overlapped == &writeCompletionOverlapped) + completeAsyncWrite(numberOfBytes); else Q_ASSERT(!"Unknown OVERLAPPED activated"); } @@ -772,6 +633,16 @@ return maxSize; } +OVERLAPPED *QSerialPortPrivate::waitForNotified(QDeadlineTimer deadline) +{ + OVERLAPPED *overlapped = notifier->waitForAnyNotified(deadline); + if (!overlapped) { + setError(getSystemError(WAIT_TIMEOUT)); + return nullptr; + } + return overlapped; +} + qint64 QSerialPortPrivate::queuedBytesCount(QSerialPort::Direction direction) const { COMSTAT comstat; @@ -784,6 +655,8 @@ inline bool QSerialPortPrivate::initialize(QIODevice::OpenMode mode) { + Q_Q(QSerialPort); + DCB dcb; if (!getDcb(&dcb)) return false; @@ -819,8 +692,17 @@ return false; } - if ((eventMask & EV_RXCHAR) && !startAsyncCommunication()) + notifier = new QWinOverlappedIoNotifier(q); + QObjectPrivate::connect(notifier, &QWinOverlappedIoNotifier::notified, + this, &QSerialPortPrivate::_q_notified); + notifier->setHandle(handle); + notifier->setEnabled(true); + + if ((eventMask & EV_RXCHAR) && !startAsyncCommunication()) { + delete notifier; + notifier = nullptr; return false; + } return true; } @@ -920,17 +802,4 @@ return d->handle; } -void QSerialPortPrivate::ioCompletionRoutine( - DWORD errorCode, DWORD bytesTransfered, - OVERLAPPED *overlappedBase) -{ - const auto overlapped = static_cast<Overlapped *>(overlappedBase); - if (overlapped->dptr) { - overlapped->dptr->handleNotification(bytesTransfered, errorCode, - overlappedBase); - } else { - delete overlapped; - } -} - QT_END_NAMESPACE diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtserialport-everywhere-src-6.2.4/src/serialport/qserialportglobal.h new/qtserialport-everywhere-src-6.3.0/src/serialport/qserialportglobal.h --- old/qtserialport-everywhere-src-6.2.4/src/serialport/qserialportglobal.h 2022-03-04 05:15:43.000000000 +0100 +++ new/qtserialport-everywhere-src-6.3.0/src/serialport/qserialportglobal.h 2022-04-05 16:01:25.000000000 +0200 @@ -43,19 +43,6 @@ #include <QtCore/qstring.h> #include <QtCore/qglobal.h> - -QT_BEGIN_NAMESPACE - -#ifndef QT_STATIC -# if defined(QT_BUILD_SERIALPORT_LIB) -# define Q_SERIALPORT_EXPORT Q_DECL_EXPORT -# else -# define Q_SERIALPORT_EXPORT Q_DECL_IMPORT -# endif -#else -# define Q_SERIALPORT_EXPORT -#endif - -QT_END_NAMESPACE +#include <QtSerialPort/qtserialportexports.h> #endif // QSERIALPORTGLOBAL_H diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtserialport-everywhere-src-6.2.4/src/serialport/qtntdll_p.h new/qtserialport-everywhere-src-6.3.0/src/serialport/qtntdll_p.h --- old/qtserialport-everywhere-src-6.2.4/src/serialport/qtntdll_p.h 2022-03-04 05:15:43.000000000 +0100 +++ new/qtserialport-everywhere-src-6.3.0/src/serialport/qtntdll_p.h 1970-01-01 01:00:00.000000000 +0100 @@ -1,158 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2019 Denis Shienkov <denis.shien...@gmail.com> -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QtSerialPort module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** 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 https://www.qt.io/terms-conditions. For further -** information use the contact form at https://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 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QTNTDLL_P_H -#define QTNTDLL_P_H - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists purely as an -// implementation detail. This header file may change from version to -// version without notice, or even be removed. -// -// We mean it. -// - -#include <QtCore/qlibrary.h> -#include <QtCore/qstring.h> -#include <QtCore/qdebug.h> - -#include <qt_windows.h> - -// Internal control codes. - -#ifndef CTL_CODE -# define CTL_CODE(DeviceType, Function, Method, Access) ( \ - ((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method) \ - ) -#endif - -#ifndef FILE_DEVICE_SERIAL_PORT -# define FILE_DEVICE_SERIAL_PORT 27 -#endif - -#ifndef METHOD_BUFFERED -# define METHOD_BUFFERED 0 -#endif - -#ifndef FILE_ANY_ACCESS -# define FILE_ANY_ACCESS 0x00000000 -#endif - -#ifndef IOCTL_SERIAL_GET_DTRRTS -# define IOCTL_SERIAL_GET_DTRRTS \ - CTL_CODE(FILE_DEVICE_SERIAL_PORT, 30, METHOD_BUFFERED, FILE_ANY_ACCESS) -#endif - -#ifndef SERIAL_DTR_STATE -# define SERIAL_DTR_STATE 0x00000001 -#endif - -#ifndef SERIAL_RTS_STATE -# define SERIAL_RTS_STATE 0x00000002 -#endif - -#ifndef IOCTL_SERIAL_WAIT_ON_MASK -# define IOCTL_SERIAL_WAIT_ON_MASK \ - CTL_CODE(FILE_DEVICE_SERIAL_PORT, 18, METHOD_BUFFERED, FILE_ANY_ACCESS) -#endif - -// Internal NT-based data types. - -#ifndef NT_SUCCESS -#define NT_SUCCESS(status) (((NTSTATUS)(status)) >= 0) -#endif - -typedef struct _IO_STATUS_BLOCK { - union { - NTSTATUS Status; - PVOID Pointer; - } DUMMYUNIONNAME; - - ULONG_PTR Information; -} IO_STATUS_BLOCK, *PIO_STATUS_BLOCK; - -typedef VOID (WINAPI *PIO_APC_ROUTINE) ( - PVOID ApcContext, - PIO_STATUS_BLOCK IoStatusBlock, - ULONG Reserved - ); - -// Resolving macros. - -#define GENERATE_SYMBOL_VARIABLE(returnType, symbolName, ...) \ - typedef returnType (WINAPI *fp_##symbolName)(__VA_ARGS__); \ - static fp_##symbolName symbolName; - -#define RESOLVE_SYMBOL(symbolName) \ - symbolName = reinterpret_cast<fp_##symbolName>(resolveNtdllSymbol(ntLibrary, #symbolName)); \ - if (!symbolName) \ - return false; - -GENERATE_SYMBOL_VARIABLE(ULONG, RtlNtStatusToDosError, NTSTATUS) -GENERATE_SYMBOL_VARIABLE(NTSTATUS, NtDeviceIoControlFile, HANDLE, HANDLE, PIO_APC_ROUTINE, PVOID, PIO_STATUS_BLOCK, ULONG, PVOID, ULONG, PVOID, ULONG) - -inline QFunctionPointer resolveNtdllSymbol(QLibrary *ntLibrary, const char *symbolName) -{ - QFunctionPointer symbolFunctionPointer = ntLibrary->resolve(symbolName); - if (!symbolFunctionPointer) - qWarning("Failed to resolve the symbol: %s", symbolName); - - return symbolFunctionPointer; -} - -inline bool resolveNtdllSymbols(QLibrary *ntLibrary) -{ - if (!ntLibrary->isLoaded()) { - ntLibrary->setFileName(QStringLiteral("ntdll")); - if (!ntLibrary->load()) { - qWarning("Failed to load the library: %s", qPrintable(ntLibrary->fileName())); - return false; - } - } - - RESOLVE_SYMBOL(RtlNtStatusToDosError) - RESOLVE_SYMBOL(NtDeviceIoControlFile) - - return true; -} - -#endif // QTNTDLL_P_H diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtserialport-everywhere-src-6.2.4/src/serialport/qwinoverlappedionotifier.cpp new/qtserialport-everywhere-src-6.3.0/src/serialport/qwinoverlappedionotifier.cpp --- old/qtserialport-everywhere-src-6.2.4/src/serialport/qwinoverlappedionotifier.cpp 2022-03-04 05:15:43.000000000 +0100 +++ new/qtserialport-everywhere-src-6.3.0/src/serialport/qwinoverlappedionotifier.cpp 2022-04-05 16:01:25.000000000 +0200 @@ -313,13 +313,13 @@ return 0; } - DWORD msecs = deadline.remainingTime(); + qint64 msecs = deadline.remainingTime(); if (msecs == 0) iocp->drainQueue(); if (msecs == -1) msecs = INFINITE; - const DWORD wfso = WaitForSingleObject(hSemaphore, msecs); + const DWORD wfso = WaitForSingleObject(hSemaphore, DWORD(msecs)); switch (wfso) { case WAIT_OBJECT_0: return dispatchNextIoResult(); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtserialport-everywhere-src-6.2.4/src/serialport/qwinoverlappedionotifier_p.h new/qtserialport-everywhere-src-6.3.0/src/serialport/qwinoverlappedionotifier_p.h --- old/qtserialport-everywhere-src-6.2.4/src/serialport/qwinoverlappedionotifier_p.h 1970-01-01 01:00:00.000000000 +0100 +++ new/qtserialport-everywhere-src-6.3.0/src/serialport/qwinoverlappedionotifier_p.h 2022-04-05 16:01:25.000000000 +0200 @@ -0,0 +1,91 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the QtCore module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** 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 https://www.qt.io/terms-conditions. For further +** information use the contact form at https://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 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QWINOVERLAPPEDIONOTIFIER_P_H +#define QWINOVERLAPPEDIONOTIFIER_P_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +#include <QtCore/private/qglobal_p.h> +#include <qobject.h> +#include <qdeadlinetimer.h> + +typedef struct _OVERLAPPED OVERLAPPED; + +QT_BEGIN_NAMESPACE + +class QWinOverlappedIoNotifierPrivate; + +class QWinOverlappedIoNotifier : public QObject +{ + Q_OBJECT + Q_DISABLE_COPY(QWinOverlappedIoNotifier) + Q_DECLARE_PRIVATE(QWinOverlappedIoNotifier) + Q_PRIVATE_SLOT(d_func(), void _q_notified()) + friend class QWinIoCompletionPort; +public: + QWinOverlappedIoNotifier(QObject *parent = 0); + ~QWinOverlappedIoNotifier(); + + void setHandle(Qt::HANDLE h); + Qt::HANDLE handle() const; + + void setEnabled(bool enabled); + OVERLAPPED *waitForAnyNotified(QDeadlineTimer deadline); + bool waitForNotified(QDeadlineTimer deadline, OVERLAPPED *overlapped); + +Q_SIGNALS: + void notified(quint32 numberOfBytes, quint32 errorCode, OVERLAPPED *overlapped); +#if !defined(Q_QDOC) + void _q_notify(); +#endif +}; + +QT_END_NAMESPACE + +#endif // QWINOVERLAPPEDIONOTIFIER_P_H