/* * Unofficial Qt Serial Port Library * * Copyright (c) 2010 Inbiza Systems Inc. All rights reserved. * * This program is free software: you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published by the * Free Software Foundation, either version 3 of the License, or (at your * option) any later version. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see * * author labs@inbiza.com */ #ifndef TNX_QWINCOMMEVTNOTIFIER_H__ #define TNX_QWINCOMMEVTNOTIFIER_H__ #include #include #include "qserialport.h" namespace TNX { class QWinCommEvtNotifier : public QObject { Q_OBJECT /** */ class NotifierThread : public QThread { public: NotifierThread(HANDLE hnd, HANDLE &suspendEvent, QWinCommEvtNotifier *parent) : QThread(parent), parent_(parent), commHandle_(hnd), suspendEvent_(suspendEvent), doquit_(false) {} inline Qt::HANDLE threadId() const { return threadId_; } inline void terminate() { doquit_ = true; } protected: void run(); private: QWinCommEvtNotifier *parent_; Qt::HANDLE threadId_; HANDLE commHandle_; HANDLE &suspendEvent_; volatile bool doquit_; }; public: QWinCommEvtNotifier(HANDLE hComm, QObject *parent = 0); ~QWinCommEvtNotifier(); void setEnabled(bool); inline bool suspend() { return ResetEvent(suspendEvent_); } inline bool resume() { return SetEvent(suspendEvent_); } signals: void activated(int); private: // numOfBytes is for future use inline void bytesPending(int /*numOfBytes*/) { emit activated(0); } private: NotifierThread *notifier_; HANDLE commHandle_; HANDLE suspendEvent_; private: Q_DISABLE_COPY(QWinCommEvtNotifier) }; } // namespace #endif // TNX_QWINCOMMEVTNOTIFIER_H__