summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenis Shienkov <denis.shienkov@gmail.com>2015-12-09 22:28:03 +0300
committerDenis Shienkov <denis.shienkov@gmail.com>2015-12-10 09:49:14 +0000
commita1a98f1cffedd23fed9f0a29cd297fc255af1978 (patch)
tree6ffda0aed940df56d6a458ba930b59082567d536
parent5641fd99e3c61291cf5562b5083e93678c5d6ab4 (diff)
downloadqtserialport-a1a98f1cffedd23fed9f0a29cd297fc255af1978.tar.gz
Use pre-defined class/interface devices GUIDs
Also is added the test for verification of presence of ntddmodm.h file, which contains GUID_DEVINTERFACE_MODEM definition. In case the compiler has not this file, we define GUID_DEVINTERFACE_MODEM himself. Change-Id: I471f76f8eabd2a200702a0970aa538c780208e18 Reviewed-by: Sergey Belyashov <Sergey.Belyashov@gmail.com> Reviewed-by: Denis Shienkov <denis.shienkov@gmail.com>
-rw-r--r--config.tests/ntddmodm/main.cpp41
-rw-r--r--config.tests/ntddmodm/ntddmodm.pro4
-rw-r--r--qtserialport.pro3
-rw-r--r--src/serialport/qserialportinfo_win.cpp20
-rw-r--r--src/serialport/serialport.pro2
5 files changed, 62 insertions, 8 deletions
diff --git a/config.tests/ntddmodm/main.cpp b/config.tests/ntddmodm/main.cpp
new file mode 100644
index 0000000..4bcb97f
--- /dev/null
+++ b/config.tests/ntddmodm/main.cpp
@@ -0,0 +1,41 @@
+/****************************************************************************
+**
+** Copyright (C) 2015 Denis Shienkov <denis.shienkov@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 <windows.h>
+#include <ntddmodm.h>
+
+int main(int, char**)
+{
+ GUID guid = GUID_DEVINTERFACE_MODEM;
+ return 0;
+}
diff --git a/config.tests/ntddmodm/ntddmodm.pro b/config.tests/ntddmodm/ntddmodm.pro
new file mode 100644
index 0000000..abb9ba8
--- /dev/null
+++ b/config.tests/ntddmodm/ntddmodm.pro
@@ -0,0 +1,4 @@
+CONFIG -= qt
+CONFIG += console
+
+SOURCES += main.cpp
diff --git a/qtserialport.pro b/qtserialport.pro
index b8e7231..95eb99b 100644
--- a/qtserialport.pro
+++ b/qtserialport.pro
@@ -6,4 +6,7 @@ lessThan(QT_MAJOR_VERSION, 5) {
requires(!winrt)
requires(!ios)
+load(configure)
+qtCompileTest(ntddmodm)
+
load(qt_parts)
diff --git a/src/serialport/qserialportinfo_win.cpp b/src/serialport/qserialportinfo_win.cpp
index 06987f2..123b066 100644
--- a/src/serialport/qserialportinfo_win.cpp
+++ b/src/serialport/qserialportinfo_win.cpp
@@ -44,9 +44,17 @@
#include <vector>
#include <initguid.h>
+#include <devguid.h> // for GUID_DEVCLASS_PORTS and GUID_DEVCLASS_MODEM
+#include <winioctl.h> // for GUID_DEVINTERFACE_COMPORT
#include <setupapi.h>
#include <cfgmgr32.h>
+#ifdef QT_NO_REDEFINE_GUID_DEVINTERFACE_MODEM
+# include <ntddmodm.h> // for GUID_DEVINTERFACE_MODEM
+#else
+ DEFINE_GUID(GUID_DEVINTERFACE_MODEM, 0x2c7089aa, 0x2e0e, 0x11d1, 0xb1, 0x14, 0x00, 0xc0, 0x4f, 0xc2, 0xaa, 0xe4);
+#endif
+
QT_BEGIN_NAMESPACE
typedef QPair<QUuid, DWORD> GuidFlagsPair;
@@ -54,14 +62,10 @@ typedef QPair<QUuid, DWORD> GuidFlagsPair;
static inline const QList<GuidFlagsPair>& guidFlagsPairs()
{
static const QList<GuidFlagsPair> guidFlagsPairList = QList<GuidFlagsPair>()
- // Standard Setup Ports Class GUID
- << qMakePair(QUuid(0x4D36E978, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18), DWORD(DIGCF_PRESENT))
- // Standard Setup Modems Class GUID
- << qMakePair(QUuid(0x4D36E96D, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18), DWORD(DIGCF_PRESENT))
- // Standard Serial Port Device Interface Class GUID
- << qMakePair(QUuid(0x86E0D1E0, 0x8089, 0x11D0, 0x9C, 0xE4, 0x08, 0x00, 0x3E, 0x30, 0x1F, 0x73), DWORD(DIGCF_PRESENT | DIGCF_DEVICEINTERFACE))
- // Standard Modem Device Interface Class GUID
- << qMakePair(QUuid(0x2C7089AA, 0x2E0E, 0x11D1, 0xB1, 0x14, 0x00, 0xC0, 0x4F, 0xC2, 0xAA, 0xE4), DWORD(DIGCF_PRESENT | DIGCF_DEVICEINTERFACE));
+ << qMakePair(QUuid(GUID_DEVCLASS_PORTS), DWORD(DIGCF_PRESENT))
+ << qMakePair(QUuid(GUID_DEVCLASS_MODEM), DWORD(DIGCF_PRESENT))
+ << qMakePair(QUuid(GUID_DEVINTERFACE_COMPORT), DWORD(DIGCF_PRESENT | DIGCF_DEVICEINTERFACE))
+ << qMakePair(QUuid(GUID_DEVINTERFACE_MODEM), DWORD(DIGCF_PRESENT | DIGCF_DEVICEINTERFACE));
return guidFlagsPairList;
}
diff --git a/src/serialport/serialport.pro b/src/serialport/serialport.pro
index 40c0339..92d0795 100644
--- a/src/serialport/serialport.pro
+++ b/src/serialport/serialport.pro
@@ -3,6 +3,8 @@ QT = core-private
QMAKE_DOCS = $$PWD/doc/qtserialport.qdocconf
+config_ntddmodm: DEFINES += QT_NO_REDEFINE_GUID_DEVINTERFACE_MODEM
+
load(qt_module)
include($$PWD/serialport-lib.pri)