From 25db638d26a0d3ca6a403987d40e142f498b21ad Mon Sep 17 00:00:00 2001 From: Kevin Krammer Date: Tue, 20 Mar 2012 13:55:50 +0100 Subject: Use main thread event loop for navigator event processing Removes the need for an extra thread by creating the event handler's socket notifier in the context of the main thread. Backport of 9dc86ac0f2d019f93665c1ae0e3c2cd33fd88bce Change-Id: I5c31d904191f45698085e8fd576481018e072ef4 Reviewed-by: Sean Harmer Reviewed-by: Robin Burchell --- src/plugins/platforms/blackberry/blackberry.pro | 4 +- .../platforms/blackberry/qbbintegration.cpp | 16 +- src/plugins/platforms/blackberry/qbbintegration.h | 4 +- .../blackberry/qbbnavigatoreventhandler.cpp | 259 +++++++++++++++++++ .../blackberry/qbbnavigatoreventhandler.h | 75 ++++++ .../platforms/blackberry/qbbnavigatorthread.cpp | 282 --------------------- .../platforms/blackberry/qbbnavigatorthread.h | 76 ------ 7 files changed, 349 insertions(+), 367 deletions(-) create mode 100644 src/plugins/platforms/blackberry/qbbnavigatoreventhandler.cpp create mode 100644 src/plugins/platforms/blackberry/qbbnavigatoreventhandler.h delete mode 100644 src/plugins/platforms/blackberry/qbbnavigatorthread.cpp delete mode 100644 src/plugins/platforms/blackberry/qbbnavigatorthread.h diff --git a/src/plugins/platforms/blackberry/blackberry.pro b/src/plugins/platforms/blackberry/blackberry.pro index 9978945..0e55090 100644 --- a/src/plugins/platforms/blackberry/blackberry.pro +++ b/src/plugins/platforms/blackberry/blackberry.pro @@ -11,7 +11,7 @@ SOURCES = main.cpp \ qbbglwindowsurface.cpp \ qbbinputcontext.cpp \ qbbintegration.cpp \ - qbbnavigatorthread.cpp \ + qbbnavigatoreventhandler.cpp \ qbbscreen.cpp \ qbbwindow.cpp \ qbbrasterwindowsurface.cpp \ @@ -24,7 +24,7 @@ HEADERS = qbbbuffer.h \ qbbeventthread.h \ qbbinputcontext.h \ qbbintegration.h \ - qbbnavigatorthread.h \ + qbbnavigatoreventhandler.h \ qbbglcontext.h \ qbbglwindowsurface.h \ qbbscreen.h \ diff --git a/src/plugins/platforms/blackberry/qbbintegration.cpp b/src/plugins/platforms/blackberry/qbbintegration.cpp index cc16938..7cada16 100644 --- a/src/plugins/platforms/blackberry/qbbintegration.cpp +++ b/src/plugins/platforms/blackberry/qbbintegration.cpp @@ -44,7 +44,7 @@ #include "qbbeventthread.h" #include "qbbglcontext.h" #include "qbbglwindowsurface.h" -#include "qbbnavigatorthread.h" +#include "qbbnavigatoreventhandler.h" #include "qbbrasterwindowsurface.h" #include "qbbscreen.h" #include "qbbwindow.h" @@ -93,9 +93,15 @@ QBBIntegration::QBBIntegration() : mEventThread = new QBBEventThread(mContext, *QBBScreen::primaryDisplay()); mEventThread->start(); - // create/start navigator thread - mNavigatorThread = new QBBNavigatorThread(*QBBScreen::primaryDisplay()); - mNavigatorThread->start(); + // Create/start navigator event handler + // Not on BlackBerry, it has specialised event dispatcher which also handles navigator events +#ifndef Q_OS_BLACKBERRY + mNavigatorEventHandler = new QBBNavigatorEventHandler(*QBBScreen::primaryDisplay()); + + // delay invocation of start() to the time the event loop is up and running + // needed to have the QThread internals of the main thread properly initialized + QMetaObject::invokeMethod(mNavigatorEventHandler, "start", Qt::QueuedConnection); +#endif #ifdef QBBLOCALETHREAD_ENABLED // Start the locale change monitoring thread. @@ -127,7 +133,7 @@ QBBIntegration::~QBBIntegration() delete mEventThread; // stop/destroy navigator thread - delete mNavigatorThread; + delete mNavigatorEventHandler; // destroy all displays QBBScreen::destroyDisplays(); diff --git a/src/plugins/platforms/blackberry/qbbintegration.h b/src/plugins/platforms/blackberry/qbbintegration.h index 8c20b6c..2a9fceb 100644 --- a/src/plugins/platforms/blackberry/qbbintegration.h +++ b/src/plugins/platforms/blackberry/qbbintegration.h @@ -47,7 +47,7 @@ QT_BEGIN_NAMESPACE class QBBEventThread; -class QBBNavigatorThread; +class QBBNavigatorEventHandler; class QBBLocaleThread; class QBBIntegration : public QPlatformIntegration @@ -77,7 +77,7 @@ public: private: screen_context_t mContext; QBBEventThread *mEventThread; - QBBNavigatorThread *mNavigatorThread; + QBBNavigatorEventHandler *mNavigatorEventHandler; QBBLocaleThread *mLocaleThread; QPlatformFontDatabase *mFontDb; bool mPaintUsingOpenGL; diff --git a/src/plugins/platforms/blackberry/qbbnavigatoreventhandler.cpp b/src/plugins/platforms/blackberry/qbbnavigatoreventhandler.cpp new file mode 100644 index 0000000..877e91c --- /dev/null +++ b/src/plugins/platforms/blackberry/qbbnavigatoreventhandler.cpp @@ -0,0 +1,259 @@ +/**************************************************************************** +** +** Copyright (C) 2011 - 2012 Research In Motion +** +** Contact: Research In Motion +** Contact: Klarälvdalens Datakonsult AB +** +** This file is part of the QtCore module 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. +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//#define QBBNAVIGATOREVENTHANDLER_DEBUG + + +#include "qbbnavigatoreventhandler.h" +#include "qbbscreen.h" + +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#define NAV_CONTROL_PATH "/pps/services/navigator/control" +#define PPS_BUFFER_SIZE 4096 + +QBBNavigatorEventHandler::QBBNavigatorEventHandler(QBBScreen& primaryScreen) + : mPrimaryScreen(primaryScreen), + mFd(-1), + mReadNotifier(0) +{ +} + +QBBNavigatorEventHandler::~QBBNavigatorEventHandler() +{ + delete mReadNotifier; + + if (mFd != -1) + close(mFd); + +#if defined(QBBNAVIGATOREVENTHANDLER_DEBUG) + qDebug() << "QBB: navigator event handler stopped"; +#endif +} + +void QBBNavigatorEventHandler::start() +{ +#if defined(QBBNAVIGATOREVENTHANDLER_DEBUG) + qDebug() << "QBB: navigator event handler started"; +#endif + + // open connection to navigator + errno = 0; + mFd = open(NAV_CONTROL_PATH, O_RDWR); + if (mFd == -1) { + qWarning("QBB: failed to open navigator pps, errno=%d", errno); + return; + } + + mReadNotifier = new QSocketNotifier(mFd, QSocketNotifier::Read); + connect(mReadNotifier, SIGNAL(activated(int)), this, SLOT(readData())); +} + +void QBBNavigatorEventHandler::parsePPS(const QByteArray &ppsData, QByteArray &msg, QByteArray &dat, QByteArray &id) +{ +#if defined(QBBNAVIGATOREVENTHANDLER_DEBUG) + qDebug() << "PPS: data=" << ppsData; +#endif + + // tokenize pps data into lines + QList lines = ppsData.split('\n'); + + // validate pps object + if (lines.size() == 0 || lines.at(0) != "@control") { + qFatal("QBB: unrecognized pps object, data=%s", ppsData.constData()); + } + + // parse pps object attributes and extract values + for (int i = 1; i < lines.size(); i++) { + + // tokenize current attribute + const QByteArray &attr = lines.at(i); + +#if defined(QBBNAVIGATOREVENTHANDLER_DEBUG) + qDebug() << "PPS: attr=" << attr; +#endif + + int firstColon = attr.indexOf(':'); + if (firstColon == -1) { + // abort - malformed attribute + continue; + } + + int secondColon = attr.indexOf(':', firstColon + 1); + if (secondColon == -1) { + // abort - malformed attribute + continue; + } + + QByteArray key = attr.left(firstColon); + QByteArray value = attr.mid(secondColon + 1); + +#if defined(QBBNAVIGATOREVENTHANDLER_DEBUG) + qDebug() << "PPS: key=" << key; + qDebug() << "PPS: val=" << value; +#endif + + // save attribute value + if (key == "msg") { + msg = value; + } else if (key == "dat") { + dat = value; + } else if (key == "id") { + id = value; + } else { + qFatal("QBB: unrecognized pps attribute, attr=%s", key.constData()); + } + } +} + +void QBBNavigatorEventHandler::replyPPS(const QByteArray &res, const QByteArray &id, const QByteArray &dat) +{ + // construct pps message + QByteArray ppsData = "res::"; + ppsData += res; + ppsData += "\nid::"; + ppsData += id; + if (!dat.isEmpty()) { + ppsData += "\ndat::"; + ppsData += dat; + } + ppsData += "\n"; + +#if defined(QBBNAVIGATOREVENTHANDLER_DEBUG) + qDebug() << "PPS reply=" << ppsData; +#endif + + // send pps message to navigator + errno = 0; + int bytes = write(mFd, ppsData.constData(), ppsData.size()); + if (bytes == -1) { + qFatal("QBB: failed to write navigator pps, errno=%d", errno); + } +} + +void QBBNavigatorEventHandler::handleMessage(const QByteArray &msg, const QByteArray &dat, const QByteArray &id) +{ +#if defined(QBBNAVIGATOREVENTHANDLER_DEBUG) + qDebug() << "PPS: msg=" << msg << ", dat=" << dat << ", id=" << id; +#endif + + // check message type + if (msg == "orientationCheck") { + + // reply to navigator that (any) orientation is acceptable +#if defined(QBBNAVIGATOREVENTHANDLER_DEBUG) + qDebug() << "PPS: orientation check, o=" << dat; +#endif + replyPPS(msg, id, "true"); + + } else if (msg == "orientation") { + + // update screen geometry and reply to navigator that we're ready +#if defined(QBBNAVIGATOREVENTHANDLER_DEBUG) + qDebug() << "PPS: orientation, o=" << dat; +#endif + mPrimaryScreen.setRotation( dat.toInt() ); + QWindowSystemInterface::handleScreenGeometryChange(0); + replyPPS(msg, id, ""); + + } else if (msg == "SWIPE_DOWN") { + + // simulate menu key press +#if defined(QBBNAVIGATOREVENTHANDLER_DEBUG) + qDebug() << "PPS: menu"; +#endif + QWidget *w = QApplication::activeWindow(); + QWindowSystemInterface::handleKeyEvent(w, QEvent::KeyPress, Qt::Key_Menu, Qt::NoModifier); + QWindowSystemInterface::handleKeyEvent(w, QEvent::KeyRelease, Qt::Key_Menu, Qt::NoModifier); + + } else if (msg == "exit") { + + // shutdown everything +#if defined(QBBNAVIGATOREVENTHANDLER_DEBUG) + qDebug() << "PPS: exit"; +#endif + QApplication::quit(); + } +} + +void QBBNavigatorEventHandler::readData() +{ +#if defined(QBBNAVIGATOREVENTHANDLER_DEBUG) + qDebug() << "QBB: reading navigator data"; +#endif + + // allocate buffer for pps data + char buffer[PPS_BUFFER_SIZE]; + + // attempt to read pps data + errno = 0; + int bytes = qt_safe_read(mFd, buffer, PPS_BUFFER_SIZE - 1); + if (bytes == -1) { + qFatal("QBB: failed to read navigator pps, errno=%d", errno); + } + + // check if pps data was received + if (bytes > 0) { + + // ensure data is null terminated + buffer[bytes] = '\0'; + + // process received message + QByteArray ppsData(buffer); + QByteArray msg; + QByteArray dat; + QByteArray id; + parsePPS(ppsData, msg, dat, id); + handleMessage(msg, dat, id); + } + +} diff --git a/src/plugins/platforms/blackberry/qbbnavigatoreventhandler.h b/src/plugins/platforms/blackberry/qbbnavigatoreventhandler.h new file mode 100644 index 0000000..4bac909 --- /dev/null +++ b/src/plugins/platforms/blackberry/qbbnavigatoreventhandler.h @@ -0,0 +1,75 @@ +/**************************************************************************** +** +** Copyright (C) 2011 - 2012 Research In Motion +** +** Contact: Research In Motion +** Contact: Klarälvdalens Datakonsult AB +** +** This file is part of the QtCore module 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. +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QBBNAVIGATOREVENTHANDLER_H +#define QBBNAVIGATOREVENTHANDLER_H + +#include + +QT_BEGIN_NAMESPACE + +class QBBScreen; +class QSocketNotifier; + +class QBBNavigatorEventHandler : public QObject +{ + Q_OBJECT +public: + QBBNavigatorEventHandler(QBBScreen& primaryScreen); + virtual ~QBBNavigatorEventHandler(); + +public Q_SLOTS: + void start(); + +private Q_SLOTS: + void readData(); + +private: + QBBScreen& mPrimaryScreen; + int mFd; + QSocketNotifier *mReadNotifier; + + void parsePPS(const QByteArray &ppsData, QByteArray &msg, QByteArray &dat, QByteArray &id); + void replyPPS(const QByteArray &res, const QByteArray &id, const QByteArray &dat); + void handleMessage(const QByteArray &msg, const QByteArray &dat, const QByteArray &id); +}; + +QT_END_NAMESPACE + +#endif // QBBNAVIGATOREVENTHANDLER_H diff --git a/src/plugins/platforms/blackberry/qbbnavigatorthread.cpp b/src/plugins/platforms/blackberry/qbbnavigatorthread.cpp deleted file mode 100644 index 675e812..0000000 --- a/src/plugins/platforms/blackberry/qbbnavigatorthread.cpp +++ /dev/null @@ -1,282 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2011 - 2012 Research In Motion -** -** Contact: Research In Motion -** Contact: Klarälvdalens Datakonsult AB -** -** This file is part of the QtCore module 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. -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -//#define QBBNAVIGATORTHREAD_DEBUG - - -#include "qbbnavigatorthread.h" -#include "qbbscreen.h" - -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include - -#define NAV_CONTROL_PATH "/pps/services/navigator/control" -#define PPS_BUFFER_SIZE 4096 - -QBBNavigatorThread::QBBNavigatorThread(QBBScreen& primaryScreen) - : mPrimaryScreen(primaryScreen), - mFd(-1), - mReadNotifier(0) -{ -} - -QBBNavigatorThread::~QBBNavigatorThread() -{ - // block until thread terminates - shutdown(); - - delete mReadNotifier; -} - -void QBBNavigatorThread::run() -{ -#if defined(QBBNAVIGATORTHREAD_DEBUG) - qDebug() << "QBB: navigator thread started"; -#endif - - // open connection to navigator - errno = 0; - mFd = open(NAV_CONTROL_PATH, O_RDWR); - if (mFd == -1) { - qWarning("QBB: failed to open navigator pps, errno=%d", errno); - return; - } - - mReadNotifier = new QSocketNotifier(mFd, QSocketNotifier::Read); - // using direct connection to get the slot called in this thread's context - connect(mReadNotifier, SIGNAL(activated(int)), this, SLOT(readData()), Qt::DirectConnection); - - exec(); - - // close connection to navigator - close(mFd); - -#if defined(QBBNAVIGATORTHREAD_DEBUG) - qDebug() << "QBB: navigator thread stopped"; -#endif -} - -void QBBNavigatorThread::shutdown() -{ -#if defined(QBBNAVIGATORTHREAD_DEBUG) - qDebug() << "QBB: navigator thread shutdown begin"; -#endif - - // signal thread to terminate - quit(); - - // block until thread terminates - wait(); - -#if defined(QBBNAVIGATORTHREAD_DEBUG) - qDebug() << "QBB: navigator thread shutdown end"; -#endif -} - -void QBBNavigatorThread::parsePPS(const QByteArray &ppsData, QByteArray &msg, QByteArray &dat, QByteArray &id) -{ -#if defined(QBBNAVIGATORTHREAD_DEBUG) - qDebug() << "PPS: data=" << ppsData; -#endif - - // tokenize pps data into lines - QList lines = ppsData.split('\n'); - - // validate pps object - if (lines.size() == 0 || lines.at(0) != "@control") { - qFatal("QBB: unrecognized pps object, data=%s", ppsData.constData()); - } - - // parse pps object attributes and extract values - for (int i = 1; i < lines.size(); i++) { - - // tokenize current attribute - const QByteArray &attr = lines.at(i); - -#if defined(QBBNAVIGATORTHREAD_DEBUG) - qDebug() << "PPS: attr=" << attr; -#endif - - int firstColon = attr.indexOf(':'); - if (firstColon == -1) { - // abort - malformed attribute - continue; - } - - int secondColon = attr.indexOf(':', firstColon + 1); - if (secondColon == -1) { - // abort - malformed attribute - continue; - } - - QByteArray key = attr.left(firstColon); - QByteArray value = attr.mid(secondColon + 1); - -#if defined(QBBNAVIGATORTHREAD_DEBUG) - qDebug() << "PPS: key=" << key; - qDebug() << "PPS: val=" << value; -#endif - - // save attribute value - if (key == "msg") { - msg = value; - } else if (key == "dat") { - dat = value; - } else if (key == "id") { - id = value; - } else { - qFatal("QBB: unrecognized pps attribute, attr=%s", key.constData()); - } - } -} - -void QBBNavigatorThread::replyPPS(const QByteArray &res, const QByteArray &id, const QByteArray &dat) -{ - // construct pps message - QByteArray ppsData = "res::"; - ppsData += res; - ppsData += "\nid::"; - ppsData += id; - if (!dat.isEmpty()) { - ppsData += "\ndat::"; - ppsData += dat; - } - ppsData += "\n"; - -#if defined(QBBNAVIGATORTHREAD_DEBUG) - qDebug() << "PPS reply=" << ppsData; -#endif - - // send pps message to navigator - errno = 0; - int bytes = write(mFd, ppsData.constData(), ppsData.size()); - if (bytes == -1) { - qFatal("QBB: failed to write navigator pps, errno=%d", errno); - } -} - -void QBBNavigatorThread::handleMessage(const QByteArray &msg, const QByteArray &dat, const QByteArray &id) -{ -#if defined(QBBNAVIGATORTHREAD_DEBUG) - qDebug() << "PPS: msg=" << msg << ", dat=" << dat << ", id=" << id; -#endif - - // check message type - if (msg == "orientationCheck") { - - // reply to navigator that (any) orientation is acceptable -#if defined(QBBNAVIGATORTHREAD_DEBUG) - qDebug() << "PPS: orientation check, o=" << dat; -#endif - replyPPS(msg, id, "true"); - - } else if (msg == "orientation") { - - // update screen geometry and reply to navigator that we're ready -#if defined(QBBNAVIGATORTHREAD_DEBUG) - qDebug() << "PPS: orientation, o=" << dat; -#endif - mPrimaryScreen.setRotation( dat.toInt() ); - QWindowSystemInterface::handleScreenGeometryChange(0); - replyPPS(msg, id, ""); - - } else if (msg == "SWIPE_DOWN") { - - // simulate menu key press -#if defined(QBBNAVIGATORTHREAD_DEBUG) - qDebug() << "PPS: menu"; -#endif - QWidget *w = QApplication::activeWindow(); - QWindowSystemInterface::handleKeyEvent(w, QEvent::KeyPress, Qt::Key_Menu, Qt::NoModifier); - QWindowSystemInterface::handleKeyEvent(w, QEvent::KeyRelease, Qt::Key_Menu, Qt::NoModifier); - - } else if (msg == "exit") { - - // shutdown everything -#if defined(QBBNAVIGATORTHREAD_DEBUG) - qDebug() << "PPS: exit"; -#endif - QApplication::quit(); - } -} - -void QBBNavigatorThread::readData() -{ -#if defined(QBBNAVIGATORTHREAD_DEBUG) - qDebug() << "QBB: reading navigator data"; -#endif - - // allocate buffer for pps data - char buffer[PPS_BUFFER_SIZE]; - - // attempt to read pps data - errno = 0; - int bytes = qt_safe_read(mFd, buffer, PPS_BUFFER_SIZE - 1); - if (bytes == -1) { - qFatal("QBB: failed to read navigator pps, errno=%d", errno); - } - - // check if pps data was received - if (bytes > 0) { - - // ensure data is null terminated - buffer[bytes] = '\0'; - - // process received message - QByteArray ppsData(buffer); - QByteArray msg; - QByteArray dat; - QByteArray id; - parsePPS(ppsData, msg, dat, id); - handleMessage(msg, dat, id); - } - -} diff --git a/src/plugins/platforms/blackberry/qbbnavigatorthread.h b/src/plugins/platforms/blackberry/qbbnavigatorthread.h deleted file mode 100644 index a4dd23a..0000000 --- a/src/plugins/platforms/blackberry/qbbnavigatorthread.h +++ /dev/null @@ -1,76 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2011 - 2012 Research In Motion -** -** Contact: Research In Motion -** Contact: Klarälvdalens Datakonsult AB -** -** This file is part of the QtCore module 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. -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QBBNAVIGATORTHREAD_H -#define QBBNAVIGATORTHREAD_H - -#include - -QT_BEGIN_NAMESPACE - -class QBBScreen; -class QSocketNotifier; - -class QBBNavigatorThread : public QThread -{ - Q_OBJECT -public: - QBBNavigatorThread(QBBScreen& primaryScreen); - virtual ~QBBNavigatorThread(); - -protected: - virtual void run(); - -private Q_SLOTS: - void readData(); - -private: - QBBScreen& mPrimaryScreen; - int mFd; - QSocketNotifier *mReadNotifier; - - void shutdown(); - void parsePPS(const QByteArray &ppsData, QByteArray &msg, QByteArray &dat, QByteArray &id); - void replyPPS(const QByteArray &res, const QByteArray &id, const QByteArray &dat); - void handleMessage(const QByteArray &msg, const QByteArray &dat, const QByteArray &id); -}; - -QT_END_NAMESPACE - -#endif // QBBNAVIGATORTHREAD_H -- cgit v0.12