summaryrefslogtreecommitdiff
path: root/src/serialport
diff options
context:
space:
mode:
authorDenis Shienkov <denis.shienkov@gmail.com>2016-04-30 14:07:05 +0300
committerDenis Shienkov <denis.shienkov@gmail.com>2016-05-02 11:43:44 +0000
commita11fa1dfd529948da961d3d292926a15f9b7005b (patch)
treea6390c7f7fcab6ade07b72a5b36726ebd2224ae8 /src/serialport
parent84feab670cce8414ad54f4d19b46291c7fdb14cf (diff)
downloadqtserialport-a11fa1dfd529948da961d3d292926a15f9b7005b.tar.gz
Drop the Win CE support
Now we can drop the WinCE (5/6) support, because its compilers do not support the C++11 features, that lead to the further API limitations and so on. Change-Id: I2431d15b1361f1e093fc09ff7fbe824daeac3984 Reviewed-by: Frank Meerkoetter <frank.meerkoetter@basyskom.com> Reviewed-by: Sergey Belyashov <Sergey.Belyashov@gmail.com> Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
Diffstat (limited to 'src/serialport')
-rw-r--r--src/serialport/qserialport.cpp5
-rw-r--r--src/serialport/qserialport.h2
-rw-r--r--src/serialport/qserialport_p.h28
-rw-r--r--src/serialport/qserialport_wince.cpp756
-rw-r--r--src/serialport/qserialportinfo_wince.cpp173
-rw-r--r--src/serialport/serialport-lib.pri6
6 files changed, 4 insertions, 966 deletions
diff --git a/src/serialport/qserialport.cpp b/src/serialport/qserialport.cpp
index 3d11b31..ba2f5fc 100644
--- a/src/serialport/qserialport.cpp
+++ b/src/serialport/qserialport.cpp
@@ -100,10 +100,7 @@ QSerialPortPrivate::QSerialPortPrivate()
, settingsRestoredOnClose(true)
#endif
, isBreakEnabled(false)
-#if defined(Q_OS_WINCE)
- , handle(INVALID_HANDLE_VALUE)
- , eventNotifier(0)
-#elif defined(Q_OS_WIN32)
+#if defined(Q_OS_WIN32)
, handle(INVALID_HANDLE_VALUE)
, readChunkBuffer(ReadChunkSize, 0)
, communicationStarted(false)
diff --git a/src/serialport/qserialport.h b/src/serialport/qserialport.h
index 530b3fc..4772724 100644
--- a/src/serialport/qserialport.h
+++ b/src/serialport/qserialport.h
@@ -71,7 +71,7 @@ class Q_SERIALPORT_EXPORT QSerialPort : public QIODevice
#endif
Q_PROPERTY(bool breakEnabled READ isBreakEnabled WRITE setBreakEnabled NOTIFY breakEnabledChanged)
-#if defined(Q_OS_WIN32) || defined(Q_OS_WINCE)
+#if defined(Q_OS_WIN32)
typedef void* Handle;
#else
typedef int Handle;
diff --git a/src/serialport/qserialport_p.h b/src/serialport/qserialport_p.h
index e84066a..ae2089d 100644
--- a/src/serialport/qserialport_p.h
+++ b/src/serialport/qserialport_p.h
@@ -58,10 +58,7 @@
#include <private/qringbuffer_p.h>
#include <private/qiodevice_p.h>
-#if defined(Q_OS_WINCE)
-# include <QtCore/qmutex.h>
-# include <qt_windows.h>
-#elif defined(Q_OS_WIN32)
+#if defined(Q_OS_WIN32)
# include <qt_windows.h>
#elif defined(Q_OS_UNIX)
# include <QtCore/qlockfile.h>
@@ -184,28 +181,7 @@ public:
bool settingsRestoredOnClose;
bool isBreakEnabled;
-#if defined(Q_OS_WINCE)
-
- bool initialize(DWORD eventMask);
- bool updateDcb();
-
- bool waitForReadOrWrite(bool *selectForRead, bool *selectForWrite,
- bool checkRead, bool checkWrite,
- int msecs);
-
- bool notifyRead();
- bool notifyWrite();
-
- DCB currentDcb;
- DCB restoredDcb;
- COMMTIMEOUTS currentCommTimeouts;
- COMMTIMEOUTS restoredCommTimeouts;
- HANDLE handle;
-
- QThread *eventNotifier;
- QMutex settingsChangeMutex;
-
-#elif defined(Q_OS_WIN32)
+#if defined(Q_OS_WIN32)
bool initialize();
bool setDcb(DCB *dcb);
diff --git a/src/serialport/qserialport_wince.cpp b/src/serialport/qserialport_wince.cpp
deleted file mode 100644
index 4cfcef3..0000000
--- a/src/serialport/qserialport_wince.cpp
+++ /dev/null
@@ -1,756 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Denis Shienkov <denis.shienkov@gmail.com>
-** Copyright (C) 2012 Laszlo Papp <lpapp@kde.org>
-** Copyright (C) 2012 Andre Hartmann <aha_1980@gmx.de>
-** 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$
-**
-****************************************************************************/
-
-#include "qserialport_p.h"
-
-#include <QtCore/qelapsedtimer.h>
-#include <QtCore/qthread.h>
-#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
-
-class QSerialPortPrivate;
-
-class CommEventNotifier : public QThread
-{
- Q_OBJECT
-signals:
- void eventMask(quint32 mask);
-
-public:
- CommEventNotifier(DWORD mask, QSerialPortPrivate *d, QObject *parent)
- : QThread(parent), dptr(d) {
- connect(this, &CommEventNotifier::eventMask, this, &CommEventNotifier::processNotification);
- ::SetCommMask(dptr->handle, mask);
- }
-
- virtual ~CommEventNotifier() {
- ::SetCommMask(dptr->handle, 0);
- }
-
-protected:
- void run() Q_DECL_OVERRIDE {
- DWORD mask = 0;
- while (true) {
- if (::WaitCommEvent(dptr->handle, &mask, FALSE)) {
- // Wait until complete the operation changes the port settings,
- // see updateDcb().
- dptr->settingsChangeMutex.lock();
- dptr->settingsChangeMutex.unlock();
- emit eventMask(quint32(mask));
- }
- }
- }
-
-private slots:
- void processNotification(quint32 eventMask) {
-
- bool error = false;
-
- // Check for unexpected event. This event triggered when pulled previously
- // opened device from the system, when opened as for not to read and not to
- // write options and so forth.
- if ((eventMask == 0)
- || ((eventMask & (EV_ERR | EV_RXCHAR | EV_TXEMPTY)) == 0)) {
- error = true;
- }
-
- if (EV_RXCHAR & eventMask)
- dptr->notifyRead();
- if (EV_TXEMPTY & eventMask)
- dptr->notifyWrite();
- }
-
-private:
- QSerialPortPrivate *dptr;
-};
-
-class WaitCommEventBreaker : public QThread
-{
- Q_OBJECT
-public:
- WaitCommEventBreaker(HANDLE handle, int timeout, QObject *parent = Q_NULLPTR)
- : QThread(parent), handle(handle), timeout(timeout), worked(false) {
- start();
- }
-
- virtual ~WaitCommEventBreaker() {
- stop();
- wait();
- }
-
- void stop() {
- exit(0);
- }
-
- bool isWorked() const {
- return worked;
- }
-
-protected:
- void run() {
- QTimer timer;
- QObject::connect(&timer, &QTimer::timeout, this, &WaitCommEventBreaker::processTimeout, Qt::DirectConnection);
- timer.start(timeout);
- exec();
- worked = true;
- }
-
-private slots:
- void processTimeout() {
- ::SetCommMask(handle, 0);
- stop();
- }
-
-private:
- HANDLE handle;
- int timeout;
- mutable bool worked;
-};
-
-#include "qserialport_wince.moc"
-
-bool QSerialPortPrivate::open(QIODevice::OpenMode mode)
-{
- DWORD desiredAccess = 0;
- DWORD eventMask = 0;
-
- if (mode & QIODevice::ReadOnly) {
- desiredAccess |= GENERIC_READ;
- eventMask |= EV_RXCHAR;
- }
- if (mode & QIODevice::WriteOnly) {
- desiredAccess |= GENERIC_WRITE;
- eventMask |= EV_TXEMPTY;
- }
-
- handle = ::CreateFile(reinterpret_cast<const wchar_t*>(systemLocation.utf16()),
- desiredAccess, 0, Q_NULLPTR, OPEN_EXISTING, 0, Q_NULLPTR);
-
- if (handle == INVALID_HANDLE_VALUE) {
- setError(getSystemError());
- return false;
- }
-
- if (initialize(eventMask))
- return true;
-
- ::CloseHandle(handle);
- return false;
-}
-
-void QSerialPortPrivate::close()
-{
- if (eventNotifier) {
- eventNotifier->terminate();
- eventNotifier->wait();
- delete eventNotifier;
- eventNotifier = Q_NULLPTR;
- }
-
- if (settingsRestoredOnClose) {
- ::SetCommState(handle, &restoredDcb);
- ::SetCommTimeouts(handle, &restoredCommTimeouts);
- }
-
- ::CloseHandle(handle);
- handle = INVALID_HANDLE_VALUE;
-}
-
-QSerialPort::PinoutSignals QSerialPortPrivate::pinoutSignals()
-{
- DWORD modemStat = 0;
-
- if (!::GetCommModemStatus(handle, &modemStat)) {
- setError(getSystemError());
- return QSerialPort::NoSignal;
- }
-
- QSerialPort::PinoutSignals ret = QSerialPort::NoSignal;
-
- if (modemStat & MS_CTS_ON)
- ret |= QSerialPort::ClearToSendSignal;
- if (modemStat & MS_DSR_ON)
- ret |= QSerialPort::DataSetReadySignal;
- if (modemStat & MS_RING_ON)
- ret |= QSerialPort::RingIndicatorSignal;
- if (modemStat & MS_RLSD_ON)
- ret |= QSerialPort::DataCarrierDetectSignal;
-
- DWORD bytesReturned = 0;
- if (!::DeviceIoControl(handle, IOCTL_SERIAL_GET_DTRRTS, Q_NULLPTR, 0,
- &modemStat, sizeof(modemStat),
- &bytesReturned, Q_NULLPTR)) {
- setError(getSystemError());
- return ret;
- }
-
- if (modemStat & SERIAL_DTR_STATE)
- ret |= QSerialPort::DataTerminalReadySignal;
- if (modemStat & SERIAL_RTS_STATE)
- ret |= QSerialPort::RequestToSendSignal;
-
- return ret;
-}
-
-bool QSerialPortPrivate::setDataTerminalReady(bool set)
-{
- if (!::EscapeCommFunction(handle, set ? SETDTR : CLRDTR)) {
- setError(getSystemError());
- return false;
- }
-
- currentDcb.fDtrControl = set ? DTR_CONTROL_ENABLE : DTR_CONTROL_DISABLE;
- return true;
-}
-
-bool QSerialPortPrivate::setRequestToSend(bool set)
-{
- if (!::EscapeCommFunction(handle, set ? SETRTS : CLRRTS)) {
- setError(getSystemError());
- return false;
- }
-
- return true;
-}
-
-bool QSerialPortPrivate::flush()
-{
- return notifyWrite() && ::FlushFileBuffers(handle);
-}
-
-bool QSerialPortPrivate::clear(QSerialPort::Directions directions)
-{
- DWORD flags = 0;
- if (directions & QSerialPort::Input)
- flags |= PURGE_RXABORT | PURGE_RXCLEAR;
- if (directions & QSerialPort::Output)
- flags |= PURGE_TXABORT | PURGE_TXCLEAR;
- return ::PurgeComm(handle, flags);
-}
-
-bool QSerialPortPrivate::sendBreak(int duration)
-{
- if (!setBreakEnabled(true))
- return false;
-
- ::Sleep(duration);
-
- if (!setBreakEnabled(false))
- return false;
-
- return true;
-}
-
-bool QSerialPortPrivate::setBreakEnabled(bool set)
-{
- if (set ? !::SetCommBreak(handle) : !::ClearCommBreak(handle)) {
- setError(getSystemError());
- return false;
- }
-
- return true;
-}
-
-bool QSerialPortPrivate::waitForReadyRead(int msec)
-{
- if (!buffer.isEmpty())
- return true;
-
- QElapsedTimer stopWatch;
- stopWatch.start();
-
- forever {
- bool readyToRead = false;
- bool readyToWrite = false;
- if (!waitForReadOrWrite(&readyToRead, &readyToWrite,
- true, !writeBuffer.isEmpty(),
- qt_subtract_from_timeout(msec, stopWatch.elapsed()))) {
- return false;
- }
- if (readyToRead) {
- if (notifyRead())
- return true;
- }
- if (readyToWrite)
- notifyWrite();
- }
- return false;
-}
-
-bool QSerialPortPrivate::waitForBytesWritten(int msec)
-{
- if (writeBuffer.isEmpty())
- return false;
-
- QElapsedTimer stopWatch;
- stopWatch.start();
-
- forever {
- bool readyToRead = false;
- bool readyToWrite = false;
- if (!waitForReadOrWrite(&readyToRead, &readyToWrite,
- true, !writeBuffer.isEmpty(),
- qt_subtract_from_timeout(msec, stopWatch.elapsed()))) {
- return false;
- }
- if (readyToRead) {
- if (!notifyRead())
- return false;
- }
- if (readyToWrite) {
- if (notifyWrite())
- return true;
- }
- }
- return false;
-}
-
-bool QSerialPortPrivate::setBaudRate()
-{
- return setBaudRate(inputBaudRate, QSerialPort::AllDirections);
-}
-
-bool QSerialPortPrivate::setBaudRate(qint32 baudRate, QSerialPort::Directions directions)
-{
- if (directions != QSerialPort::AllDirections) {
- setError(QSerialPortErrorInfo(QSerialPort::UnsupportedOperationError, QSerialPort::tr("Custom baud rate direction is unsupported")));
- return false;
- }
- currentDcb.BaudRate = baudRate;
- return updateDcb();
-}
-
-bool QSerialPortPrivate::setDataBits(QSerialPort::DataBits dataBits)
-{
- currentDcb.ByteSize = dataBits;
- return updateDcb();
-}
-
-bool QSerialPortPrivate::setParity(QSerialPort::Parity parity)
-{
- currentDcb.fParity = TRUE;
- switch (parity) {
- case QSerialPort::NoParity:
- currentDcb.Parity = NOPARITY;
- currentDcb.fParity = FALSE;
- break;
- case QSerialPort::OddParity:
- currentDcb.Parity = ODDPARITY;
- break;
- case QSerialPort::EvenParity:
- currentDcb.Parity = EVENPARITY;
- break;
- case QSerialPort::MarkParity:
- currentDcb.Parity = MARKPARITY;
- break;
- case QSerialPort::SpaceParity:
- currentDcb.Parity = SPACEPARITY;
- break;
- default:
- currentDcb.Parity = NOPARITY;
- currentDcb.fParity = FALSE;
- break;
- }
- return updateDcb();
-}
-
-bool QSerialPortPrivate::setStopBits(QSerialPort::StopBits stopBits)
-{
- switch (stopBits) {
- case QSerialPort::OneStop:
- currentDcb.StopBits = ONESTOPBIT;
- break;
- case QSerialPort::OneAndHalfStop:
- currentDcb.StopBits = ONE5STOPBITS;
- break;
- case QSerialPort::TwoStop:
- currentDcb.StopBits = TWOSTOPBITS;
- break;
- default:
- currentDcb.StopBits = ONESTOPBIT;
- break;
- }
- return updateDcb();
-}
-
-bool QSerialPortPrivate::setFlowControl(QSerialPort::FlowControl flowControl)
-{
- currentDcb.fInX = FALSE;
- currentDcb.fOutX = FALSE;
- currentDcb.fOutxCtsFlow = FALSE;
- currentDcb.fRtsControl = RTS_CONTROL_DISABLE;
- switch (flowControl) {
- case QSerialPort::NoFlowControl:
- break;
- case QSerialPort::SoftwareControl:
- currentDcb.fInX = TRUE;
- currentDcb.fOutX = TRUE;
- break;
- case QSerialPort::HardwareControl:
- currentDcb.fOutxCtsFlow = TRUE;
- currentDcb.fRtsControl = RTS_CONTROL_HANDSHAKE;
- break;
- default:
- break;
- }
- return updateDcb();
-}
-
-bool QSerialPortPrivate::notifyRead()
-{
- Q_Q(QSerialPort);
-
- DWORD bytesToRead = ReadChunkSize;
-
- if (readBufferMaxSize && bytesToRead > (readBufferMaxSize - buffer.size())) {
- bytesToRead = readBufferMaxSize - buffer.size();
- if (bytesToRead == 0) {
- // Buffer is full. User must read data from the buffer
- // before we can read more from the port.
- return false;
- }
- }
-
- char *ptr = buffer.reserve(bytesToRead);
-
- DWORD readBytes = 0;
- BOOL sucessResult = ::ReadFile(handle, ptr, bytesToRead, &readBytes, Q_NULLPTR);
-
- if (!sucessResult) {
- buffer.chop(bytesToRead);
- setError(QSerialPortErrorInfo(QSerialPort::ReadError));
- return false;
- }
-
- buffer.chop(bytesToRead - qMax(readBytes, DWORD(0)));
-
- if (readBytes > 0)
- emit q->readyRead();
-
- return true;
-}
-
-bool QSerialPortPrivate::notifyWrite()
-{
- Q_Q(QSerialPort);
-
- int nextSize = writeBuffer.nextDataBlockSize();
-
- const char *ptr = writeBuffer.readPointer();
-
- DWORD bytesWritten = 0;
- if (!::WriteFile(handle, ptr, nextSize, &bytesWritten, Q_NULLPTR)) {
- setError(QSerialPortErrorInfo(QSerialPort::WriteError));
- return false;
- }
-
- writeBuffer.free(bytesWritten);
-
- if (bytesWritten > 0)
- emit q->bytesWritten(bytesWritten);
-
- return true;
-}
-
-qint64 QSerialPortPrivate::writeData(const char *data, qint64 maxSize)
-{
- ::memcpy(writeBuffer.reserve(maxSize), data, maxSize);
- if (!writeBuffer.isEmpty())
- notifyWrite();
- return maxSize;
-}
-
-inline bool QSerialPortPrivate::initialize(DWORD eventMask)
-{
- Q_Q(QSerialPort);
-
- ::ZeroMemory(&restoredDcb, sizeof(restoredDcb));
- restoredDcb.DCBlength = sizeof(restoredDcb);
-
- if (!::GetCommState(handle, &restoredDcb)) {
- setError(getSystemError());
- return false;
- }
-
- currentDcb = restoredDcb;
- currentDcb.fBinary = true;
- currentDcb.fInX = false;
- currentDcb.fOutX = false;
- currentDcb.fAbortOnError = false;
- currentDcb.fNull = false;
- currentDcb.fErrorChar = false;
-
- if (currentDcb.fDtrControl == DTR_CONTROL_HANDSHAKE)
- currentDcb.fDtrControl = DTR_CONTROL_DISABLE;
-
- if (!updateDcb())
- return false;
-
- if (!::GetCommTimeouts(handle, &restoredCommTimeouts)) {
- setError(getSystemError());
- return false;
- }
-
- ::memset(&currentCommTimeouts, 0, sizeof(currentCommTimeouts));
- currentCommTimeouts.ReadIntervalTimeout = MAXDWORD;
-
- if (!::SetCommTimeouts(handle, &currentCommTimeouts)) {
- setError(getSystemError());
- return false;
- }
-
- eventNotifier = new CommEventNotifier(eventMask, this, q);
- eventNotifier->start();
-
- return true;
-}
-
-bool QSerialPortPrivate::updateDcb()
-{
- QMutexLocker locker(&settingsChangeMutex);
-
- DWORD eventMask = 0;
- // Save the event mask
- if (!::GetCommMask(handle, &eventMask))
- return false;
-
- // Break event notifier from WaitCommEvent
- ::SetCommMask(handle, 0);
- // Change parameters
- bool ret = ::SetCommState(handle, &currentDcb);
- if (!ret)
- setError(getSystemError());
- // Restore the event mask
- ::SetCommMask(handle, eventMask);
-
- return ret;
-}
-
-QSerialPortErrorInfo QSerialPortPrivate::getSystemError(int systemErrorCode) const
-{
- if (systemErrorCode == -1)
- systemErrorCode = ::GetLastError();
-
- QSerialPortErrorInfo error;
- error.errorString = qt_error_string(systemErrorCode);
-
- switch (systemErrorCode) {
- case ERROR_IO_PENDING:
- error.errorCode = QSerialPort::NoError;
- break;
- case ERROR_MORE_DATA:
- error.errorCode = QSerialPort::NoError;
- break;
- case ERROR_FILE_NOT_FOUND:
- error.errorCode = QSerialPort::DeviceNotFoundError;
- break;
- case ERROR_PATH_NOT_FOUND:
- error.errorCode = QSerialPort::DeviceNotFoundError;
- break;
- case ERROR_INVALID_NAME:
- error.errorCode = QSerialPort::DeviceNotFoundError;
- break;
- case ERROR_ACCESS_DENIED:
- error.errorCode = QSerialPort::PermissionError;
- break;
- case ERROR_INVALID_HANDLE:
- error.errorCode = QSerialPort::ResourceError;
- break;
- case ERROR_INVALID_PARAMETER:
- error.errorCode = QSerialPort::UnsupportedOperationError;
- break;
- case ERROR_BAD_COMMAND:
- error.errorCode = QSerialPort::ResourceError;
- break;
- case ERROR_DEVICE_REMOVED:
- error.errorCode = QSerialPort::ResourceError;
- break;
- default:
- error.errorCode = QSerialPort::UnknownError;
- break;
- }
- return error;
-}
-
-bool QSerialPortPrivate::waitForReadOrWrite(bool *selectForRead, bool *selectForWrite,
- bool checkRead, bool checkWrite,
- int msecs)
-{
- DWORD eventMask = 0;
- // FIXME: Here the situation is not properly handled with zero timeout:
- // breaker can work out before you call a method WaitCommEvent()
- // and so it will loop forever!
- WaitCommEventBreaker breaker(handle, qMax(msecs, 0));
- ::WaitCommEvent(handle, &eventMask, Q_NULLPTR);
- breaker.stop();
-
- if (breaker.isWorked()) {
- setError(QSerialPortErrorInfo(QSerialPort::TimeoutError));
- } else {
- if (checkRead) {
- Q_ASSERT(selectForRead);
- *selectForRead = eventMask & EV_RXCHAR;
- }
- if (checkWrite) {
- Q_ASSERT(selectForWrite);
- *selectForWrite = eventMask & EV_TXEMPTY;
- }
-
- return true;
- }
-
- return false;
-}
-
-static const QList<qint32> standardBaudRatePairList()
-{
-
- static const QList<qint32> standardBaudRatesTable = QList<qint32>()
-
- #ifdef CBR_110
- << CBR_110
- #endif
-
- #ifdef CBR_300
- << CBR_300
- #endif
-
- #ifdef CBR_600
- << CBR_600
- #endif
-
- #ifdef CBR_1200
- << CBR_1200
- #endif
-
- #ifdef CBR_2400
- << CBR_2400
- #endif
-
- #ifdef CBR_4800
- << CBR_4800
- #endif
-
- #ifdef CBR_9600
- << CBR_9600
- #endif
-
- #ifdef CBR_14400
- << CBR_14400
- #endif
-
- #ifdef CBR_19200
- << CBR_19200
- #endif
-
- #ifdef CBR_38400
- << CBR_38400
- #endif
-
- #ifdef CBR_56000
- << CBR_56000
- #endif
-
- #ifdef CBR_57600
- << CBR_57600
- #endif
-
- #ifdef CBR_115200
- << CBR_115200
- #endif
-
- #ifdef CBR_128000
- << CBR_128000
- #endif
-
- #ifdef CBR_256000
- << CBR_256000
- #endif
- ;
-
- return standardBaudRatesTable;
-};
-
-QList<qint32> QSerialPortPrivate::standardBaudRates()
-{
- return standardBaudRatePairList();
-}
-
-QSerialPort::Handle QSerialPort::handle() const
-{
- Q_D(const QSerialPort);
- return d->handle;
-}
-
-QT_END_NAMESPACE
diff --git a/src/serialport/qserialportinfo_wince.cpp b/src/serialport/qserialportinfo_wince.cpp
deleted file mode 100644
index 4abf2c2..0000000
--- a/src/serialport/qserialportinfo_wince.cpp
+++ /dev/null
@@ -1,173 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2011-2012 Denis Shienkov <denis.shienkov@gmail.com>
-** Copyright (C) 2011 Sergey Belyashov <Sergey.Belyashov@gmail.com>
-** Copyright (C) 2012 Laszlo Papp <lpapp@kde.org>
-** 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$
-**
-****************************************************************************/
-
-#include "qserialportinfo.h"
-#include "qserialportinfo_p.h"
-#include "qserialport_p.h"
-
-#include <QtCore/qstringlist.h>
-
-QT_BEGIN_NAMESPACE
-
-static QString findDescription(HKEY parentKeyHandle, const QString &subKey)
-{
- const static QString valueName(QStringLiteral("FriendlyName"));
-
- QString result;
- HKEY hSubKey = Q_NULLPTR;
- LONG res = ::RegOpenKeyEx(parentKeyHandle, reinterpret_cast<const wchar_t *>(subKey.utf16()),
- 0, KEY_QUERY_VALUE | KEY_ENUMERATE_SUB_KEYS, &hSubKey);
-
- if (res == ERROR_SUCCESS) {
-
- DWORD dataType = 0;
- DWORD dataSize = 0;
- res = ::RegQueryValueEx(hSubKey, reinterpret_cast<const wchar_t *>(valueName.utf16()),
- Q_NULLPTR, &dataType, Q_NULLPTR, &dataSize);
-
- if (res == ERROR_SUCCESS) {
- QByteArray data(dataSize, 0);
- res = ::RegQueryValueEx(hSubKey, reinterpret_cast<const wchar_t *>(valueName.utf16()),
- Q_NULLPTR, Q_NULLPTR,
- reinterpret_cast<unsigned char *>(data.data()),
- &dataSize);
-
- if (res == ERROR_SUCCESS) {
- switch (dataType) {
- case REG_EXPAND_SZ:
- case REG_SZ:
- if (dataSize)
- result = QString::fromWCharArray(reinterpret_cast<const wchar_t *>(data.constData()));
- break;
- default:
- break;
- }
- }
- } else {
- DWORD index = 0;
- dataSize = 255; // Max. key length (see MSDN).
- QByteArray data(dataSize, 0);
- while (::RegEnumKeyEx(hSubKey, index++,
- reinterpret_cast<wchar_t *>(data.data()), &dataSize,
- Q_NULLPTR, Q_NULLPTR, Q_NULLPTR, Q_NULLPTR) == ERROR_SUCCESS) {
-
- result = findDescription(hSubKey,
- QString::fromUtf16(reinterpret_cast<ushort *>(data.data()), dataSize));
- if (!result.isEmpty())
- break;
- }
- }
- ::RegCloseKey(hSubKey);
- }
- return result;
-}
-
-QList<QSerialPortInfo> QSerialPortInfo::availablePorts()
-{
- QList<QSerialPortInfo> serialPortInfoList;
-
- DEVMGR_DEVICE_INFORMATION di;
- di.dwSize = sizeof(di);
- const HANDLE hSearch = ::FindFirstDevice(DeviceSearchByLegacyName,
- L"COM*",
- &di);
- if (hSearch != INVALID_HANDLE_VALUE) {
- do {
- QSerialPortInfoPrivate priv;
- priv.device = QString::fromWCharArray(di.szLegacyName);
- priv.portName = QSerialPortInfoPrivate::portNameFromSystemLocation(priv.device);
- priv.description = findDescription(HKEY_LOCAL_MACHINE,
- QString::fromWCharArray(di.szDeviceKey));
-
- serialPortInfoList.append(priv);
-
- } while (::FindNextDevice(hSearch, &di));
- ::FindClose(hSearch);
- }
-
- return serialPortInfoList;
-}
-
-#if QT_DEPRECATED_SINCE(5, 6)
-bool QSerialPortInfo::isBusy() const
-{
- const HANDLE handle = ::CreateFile(reinterpret_cast<const wchar_t*>(systemLocation().utf16()),
- GENERIC_READ | GENERIC_WRITE, 0, Q_NULLPTR, OPEN_EXISTING, 0, Q_NULLPTR);
-
- if (handle == INVALID_HANDLE_VALUE) {
- if (::GetLastError() == ERROR_ACCESS_DENIED)
- return true;
- } else {
- ::CloseHandle(handle);
- }
- return false;
-}
-#endif // QT_DEPRECATED_SINCE(5, 6)
-
-#if QT_DEPRECATED_SINCE(5, 2)
-bool QSerialPortInfo::isValid() const
-{
- const HANDLE handle = ::CreateFile(reinterpret_cast<const wchar_t*>(systemLocation().utf16()),
- GENERIC_READ | GENERIC_WRITE, 0, Q_NULLPTR, OPEN_EXISTING, 0, Q_NULLPTR);
-
- if (handle == INVALID_HANDLE_VALUE) {
- if (::GetLastError() != ERROR_ACCESS_DENIED)
- return false;
- } else {
- ::CloseHandle(handle);
- }
- return true;
-}
-#endif // QT_DEPRECATED_SINCE(5, 2)
-
-QString QSerialPortInfoPrivate::portNameToSystemLocation(const QString &source)
-{
- return source.endsWith(QLatin1Char(':'))
- ? source : (source + QLatin1Char(':'));
-}
-
-QString QSerialPortInfoPrivate::portNameFromSystemLocation(const QString &source)
-{
- return source.endsWith(QLatin1Char(':'))
- ? source.mid(0, source.size() - 1) : source;
-}
-
-QT_END_NAMESPACE
diff --git a/src/serialport/serialport-lib.pri b/src/serialport/serialport-lib.pri
index 7179bea..02dc3e5 100644
--- a/src/serialport/serialport-lib.pri
+++ b/src/serialport/serialport-lib.pri
@@ -27,12 +27,6 @@ win32:!wince* {
LIBS_PRIVATE += -lsetupapi -ladvapi32
}
-wince* {
- SOURCES += \
- $$PWD/qserialport_wince.cpp \
- $$PWD/qserialportinfo_wince.cpp
-}
-
unix {
SOURCES += \
$$PWD/qserialport_unix.cpp