summaryrefslogtreecommitdiffstats
path: root/tools/runonphone/symbianutils/virtualserialdevice.h
diff options
context:
space:
mode:
authorSergio Ahumada <sergio.ahumada@nokia.com>2011-08-08 10:40:36 (GMT)
committerSergio Ahumada <sergio.ahumada@nokia.com>2011-08-08 10:40:36 (GMT)
commitbb070cae0cde7a83d519582e5872908f7eb2b51b (patch)
tree89bc5b2e8a24418372b7fdb6c3c0778639ece956 /tools/runonphone/symbianutils/virtualserialdevice.h
parent16502c81a92cc4a0c4d8753372b568cdc61f0c53 (diff)
parent82a18deee74bef3e545bf6426164dbe12548e5d9 (diff)
downloadQt-bb070cae0cde7a83d519582e5872908f7eb2b51b.zip
Qt-bb070cae0cde7a83d519582e5872908f7eb2b51b.tar.gz
Qt-bb070cae0cde7a83d519582e5872908f7eb2b51b.tar.bz2
Merge remote-tracking branch 'upstream/4.8'
Diffstat (limited to 'tools/runonphone/symbianutils/virtualserialdevice.h')
-rw-r--r--tools/runonphone/symbianutils/virtualserialdevice.h127
1 files changed, 127 insertions, 0 deletions
diff --git a/tools/runonphone/symbianutils/virtualserialdevice.h b/tools/runonphone/symbianutils/virtualserialdevice.h
new file mode 100644
index 0000000..9b65eef
--- /dev/null
+++ b/tools/runonphone/symbianutils/virtualserialdevice.h
@@ -0,0 +1,127 @@
+/****************************************************************************
+**
+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the tools applications of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** GNU Lesser General Public License Usage
+** This file may be used under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation and
+** appearing in the file LICENSE.LGPL included in the packaging of this
+** file. Please review the following information to ensure the GNU Lesser
+** General Public License version 2.1 requirements will be met:
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU General
+** Public License version 3.0 as published by the Free Software Foundation
+** and appearing in the file LICENSE.GPL included in the packaging of this
+** file. Please review the following information to ensure the GNU General
+** Public License version 3.0 requirements will be met:
+** http://www.gnu.org/copyleft/gpl.html.
+**
+** Other Usage
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef VIRTUALSERIALPORT_H
+#define VIRTUALSERIALPORT_H
+
+#include <QtCore/QIODevice>
+#include <QtCore/QString>
+#include <QtCore/QMutex>
+
+QT_BEGIN_NAMESPACE
+class QWaitCondition;
+QT_END_NAMESPACE
+
+#include "symbianutils_global.h"
+
+namespace SymbianUtils {
+
+class VirtualSerialDevicePrivate;
+
+class SYMBIANUTILS_EXPORT VirtualSerialDevice : public QIODevice
+{
+ Q_OBJECT
+public:
+ explicit VirtualSerialDevice(const QString &name, QObject *parent = 0);
+ ~VirtualSerialDevice();
+
+ bool open(OpenMode mode);
+ void close();
+ const QString &getPortName() const;
+ void flush();
+
+ qint64 bytesAvailable() const;
+ bool isSequential() const;
+ bool waitForBytesWritten(int msecs);
+ bool waitForReadyRead(int msecs);
+
+protected:
+ qint64 readData(char *data, qint64 maxSize);
+ qint64 writeData(const char *data, qint64 maxSize);
+
+private:
+ Q_DISABLE_COPY(VirtualSerialDevice)
+ void platInit();
+ void platClose();
+ void emitBytesWrittenIfNeeded(QMutexLocker &locker, qint64 len);
+
+private:
+ QString portName;
+ mutable QMutex lock;
+ QList<QByteArray> pendingWrites;
+ bool emittingBytesWritten;
+ QWaitCondition* waiterForBytesWritten;
+ VirtualSerialDevicePrivate *d;
+
+// Platform-specific stuff
+#ifdef Q_OS_WIN
+private:
+ qint64 writeNextBuffer(QMutexLocker &locker);
+ void doWriteCompleted(QMutexLocker &locker);
+private slots:
+ void writeCompleted();
+ void commEventOccurred();
+#endif
+
+#ifdef Q_OS_UNIX
+private:
+ bool tryWrite(const char *data, qint64 maxSize, qint64 &bytesWritten);
+ enum FlushPendingOption {
+ NothingSpecial = 0,
+ StopAfterWritingOneBuffer = 1,
+ EmitBytesWrittenAsync = 2, // Needed so we don't emit bytesWritten signal directly from writeBytes
+ };
+ Q_DECLARE_FLAGS(FlushPendingOptions, FlushPendingOption)
+ bool tryFlushPendingBuffers(QMutexLocker& locker, FlushPendingOptions flags = NothingSpecial);
+
+private slots:
+ void writeHasUnblocked(int fileHandle);
+
+signals:
+ void AsyncCall_emitBytesWrittenIfNeeded(qint64 len);
+
+#endif
+
+};
+
+} // namespace SymbianUtils
+
+#endif // VIRTUALSERIALPORT_H