From 1c99076a1f55a28ac6c745d1df05226401f11107 Mon Sep 17 00:00:00 2001 From: Lorn Potter Date: Thu, 1 Mar 2012 11:05:52 +1000 Subject: share sensors among the recognizers in QtSensors recognizer. Change-Id: Ie08046de2e293b8b6271851ce8b740832a6de315 Reviewed-by: Lorn Potter --- .../qtsensors/qcoversensorgesturerecognizer.cpp | 78 +++++---- .../qtsensors/qcoversensorgesturerecognizer.h | 23 +-- .../qdoubletapsensorgesturerecognizer.cpp | 26 +-- .../qtsensors/qdoubletapsensorgesturerecognizer.h | 7 +- .../qtsensors/qhoversensorgesturerecognizer.cpp | 50 +++--- .../qtsensors/qhoversensorgesturerecognizer.h | 13 +- .../qtsensors/qpickupsensorgesturerecognizer.cpp | 48 +++--- .../qtsensors/qpickupsensorgesturerecognizer.h | 10 +- .../sensorgestures/qtsensors/qshake2recognizer.cpp | 32 ++-- .../sensorgestures/qtsensors/qshake2recognizer.h | 12 +- .../qtsensors/qslamgesturerecognizer.cpp | 70 ++++---- .../qtsensors/qslamgesturerecognizer.h | 6 +- .../qtsensors/qtsensorgestureplugin.cpp | 31 ++-- .../qtsensors/qtsensorgestureplugin.h | 3 + .../qtsensors/qtsensorgesturesensorhandler.cpp | 192 +++++++++++++++++++++ .../qtsensors/qtsensorgesturesensorhandler.h | 100 +++++++++++ src/plugins/sensorgestures/qtsensors/qtsensors.pro | 6 +- .../qtsensors/qturnoversensorgesturerecognizer.cpp | 53 +++--- .../qtsensors/qturnoversensorgesturerecognizer.h | 12 +- .../qtsensors/qtwistsensorgesturerecognizer.cpp | 68 ++++---- .../qtsensors/qtwistsensorgesturerecognizer.h | 8 +- .../qtsensors/qwhipsensorgesturerecognizer.cpp | 77 +++++---- .../qtsensors/qwhipsensorgesturerecognizer.h | 12 +- .../sensorgestures/shake/qshakerecognizer.cpp | 1 - 24 files changed, 642 insertions(+), 296 deletions(-) create mode 100644 src/plugins/sensorgestures/qtsensors/qtsensorgesturesensorhandler.cpp create mode 100644 src/plugins/sensorgestures/qtsensors/qtsensorgesturesensorhandler.h (limited to 'src/plugins/sensorgestures') diff --git a/src/plugins/sensorgestures/qtsensors/qcoversensorgesturerecognizer.cpp b/src/plugins/sensorgestures/qtsensors/qcoversensorgesturerecognizer.cpp index 9053be00..47a08f53 100644 --- a/src/plugins/sensorgestures/qtsensors/qcoversensorgesturerecognizer.cpp +++ b/src/plugins/sensorgestures/qtsensors/qcoversensorgesturerecognizer.cpp @@ -39,15 +39,14 @@ ** ****************************************************************************/ - #include "qcoversensorgesturerecognizer.h" -#include +#include "qtsensorgesturesensorhandler.h" QT_BEGIN_NAMESPACE QCoverSensorGestureRecognizer::QCoverSensorGestureRecognizer(QObject *parent) : QSensorGestureRecognizer(parent), - detecting(0), lastProx(0) + detecting(0), lastProx(0), proximityReading(0), active(0) { } @@ -57,12 +56,6 @@ QCoverSensorGestureRecognizer::~QCoverSensorGestureRecognizer() void QCoverSensorGestureRecognizer::create() { - proximity = new QIRProximitySensor(this); - proximity->connectToBackend(); - - orientation = new QOrientationSensor(this); - orientation->connectToBackend(); - timer = new QTimer(this); connect(timer,SIGNAL(timeout()),this,SLOT(timeout())); timer->setSingleShot(true); @@ -76,60 +69,83 @@ QString QCoverSensorGestureRecognizer::id() const bool QCoverSensorGestureRecognizer::start() { - connect(proximity,SIGNAL(readingChanged()),this,SLOT(proximityChanged())); - proximity->start(); - orientation->start(); - lastProx = proximity->reading()->reflectance(); - return proximity->isActive(); + if (QtSensorGestureSensorHandler::instance()->startSensor(QtSensorGestureSensorHandler::IrProximity)) { + if (QtSensorGestureSensorHandler::instance()->startSensor(QtSensorGestureSensorHandler::Orientation)) { + active = true; + connect(QtSensorGestureSensorHandler::instance(),SIGNAL(irProximityReadingChanged(QIRProximityReading *)), + this,SLOT(proximityChanged(QIRProximityReading *))); + + connect(QtSensorGestureSensorHandler::instance(),SIGNAL(orientationReadingChanged(QOrientationReading *)), + this,SLOT(orientationReadingChanged(QOrientationReading *))); + } else { + QtSensorGestureSensorHandler::instance()->stopSensor(QtSensorGestureSensorHandler::IrProximity); + active = false; + } + } else { + active = false; + } + return active; } bool QCoverSensorGestureRecognizer::stop() { - proximity->stop(); - orientation->stop(); - disconnect(proximity,SIGNAL(readingChanged()),this,SLOT(proximityChanged())); - return proximity->isActive(); + QtSensorGestureSensorHandler::instance()->stopSensor(QtSensorGestureSensorHandler::IrProximity); + QtSensorGestureSensorHandler::instance()->stopSensor(QtSensorGestureSensorHandler::Orientation); + + disconnect(QtSensorGestureSensorHandler::instance(),SIGNAL(irProximityReadingChanged(QIRProximityReading *)), + this,SLOT(proximityChanged(QIRProximityReading *))); + disconnect(QtSensorGestureSensorHandler::instance(),SIGNAL(orientationReadingChanged(QOrientationReading *)), + this,SLOT(orientationReadingChanged(QOrientationReading *))); + + active = false; + + return active; } bool QCoverSensorGestureRecognizer::isActive() { - return proximity->isActive(); + return active; } -void QCoverSensorGestureRecognizer::proximityChanged() -{// look at case of face up->face down->face up. - - qreal refl = proximity->reading()->reflectance(); - qreal difference = lastProx - refl; +void QCoverSensorGestureRecognizer::proximityChanged(QIRProximityReading *reading) +{ + proximityReading = reading->reflectance(); + qreal difference = lastProx - proximityReading; if (qAbs(difference) < .15) { return; } - - if (orientation->reading()->orientation() == QOrientationReading::FaceUp - && refl > .55) { + // look at case of face up->face down->face up. + if (orientationReading->orientation() == QOrientationReading::FaceUp + && proximityReading > .55) { if (!timer->isActive()) { timer->start(); detecting = true; } } - if (refl < .55) { + if (proximityReading < .55) { if (timer->isActive()) { timer->stop(); detecting = false; } } - lastProx = refl; + lastProx = proximityReading; +} + +void QCoverSensorGestureRecognizer::orientationReadingChanged(QOrientationReading *reading) +{ + orientationReading = reading; } void QCoverSensorGestureRecognizer::timeout() { - if (detecting && orientation->reading()->orientation() == QOrientationReading::FaceUp - && proximity->reading()->reflectance() > 0.55) { + if ((orientationReading->orientation() == QOrientationReading::FaceUp) + && proximityReading > 0.55) { Q_EMIT cover(); Q_EMIT detected("cover"); detecting = false; } + lastProx = proximityReading; } QT_END_NAMESPACE diff --git a/src/plugins/sensorgestures/qtsensors/qcoversensorgesturerecognizer.h b/src/plugins/sensorgestures/qtsensors/qcoversensorgesturerecognizer.h index c6dddf6d..475ad518 100644 --- a/src/plugins/sensorgestures/qtsensors/qcoversensorgesturerecognizer.h +++ b/src/plugins/sensorgestures/qtsensors/qcoversensorgesturerecognizer.h @@ -43,13 +43,11 @@ #ifndef QCOVERSENSORGESTURERECOGNIZER_H #define QCOVERSENSORGESTURERECOGNIZER_H -#include -#include -#include -#include - #include #include + +#include "qtsensorgesturesensorhandler.h" + QT_BEGIN_NAMESPACE class QCoverSensorGestureRecognizer : public QSensorGestureRecognizer @@ -70,18 +68,21 @@ Q_SIGNALS: void cover(); private slots: - void proximityChanged(); + void proximityChanged(QIRProximityReading *reading); + void orientationReadingChanged(QOrientationReading *reading); void timeout(); - private: - QIRProximitySensor *proximity; - QOrientationSensor *orientation; + + QOrientationReading *orientationReading; + qreal proximityReading; QTimer *timer; + bool lastProx; + QtSensorGestureSensorHandler *handler; + bool active; bool detecting; - qreal lastProx; - }; + QT_END_NAMESPACE #endif // QCOVERSENSORGESTURERECOGNIZER_H diff --git a/src/plugins/sensorgestures/qtsensors/qdoubletapsensorgesturerecognizer.cpp b/src/plugins/sensorgestures/qtsensors/qdoubletapsensorgesturerecognizer.cpp index 38f32293..ab495fbc 100644 --- a/src/plugins/sensorgestures/qtsensors/qdoubletapsensorgesturerecognizer.cpp +++ b/src/plugins/sensorgestures/qtsensors/qdoubletapsensorgesturerecognizer.cpp @@ -54,8 +54,6 @@ QDoubleTapSensorGestureRecognizer::~QDoubleTapSensorGestureRecognizer() void QDoubleTapSensorGestureRecognizer::create() { - tapSensor = new QTapSensor(this); - tapSensor->connectToBackend(); } @@ -66,26 +64,32 @@ QString QDoubleTapSensorGestureRecognizer::id() const bool QDoubleTapSensorGestureRecognizer::start() { - connect(tapSensor,SIGNAL(readingChanged()),this,SLOT(tapChanged())); - tapSensor->start(); - return isActive(); + if (QtSensorGestureSensorHandler::instance()->startSensor(QtSensorGestureSensorHandler::Tap)) { + active = true; + connect(QtSensorGestureSensorHandler::instance(),SIGNAL(dTabReadingChanged(QTapReading *)), + this,SLOT(tapChanged(QTapReading *))); + } else { + active = false; + } + return active; } bool QDoubleTapSensorGestureRecognizer::stop() { - tapSensor->stop(); - disconnect(tapSensor,SIGNAL(readingChanged()),this,SLOT(tapChanged())); - return isActive(); + QtSensorGestureSensorHandler::instance()->stopSensor(QtSensorGestureSensorHandler::Tap); + disconnect(QtSensorGestureSensorHandler::instance(),SIGNAL(dTabReadingChanged(QTapReading *)), + this,SLOT(tapChanged(QTapReading *))); + active = false; + return active; } bool QDoubleTapSensorGestureRecognizer::isActive() { - return tapSensor->isActive(); + return active; } -void QDoubleTapSensorGestureRecognizer::tapChanged() +void QDoubleTapSensorGestureRecognizer::tapChanged(QTapReading *reading) { - QTapReading *reading = tapSensor->reading(); if (reading->isDoubleTap()) { Q_EMIT doubletap(); Q_EMIT detected("doubletap"); diff --git a/src/plugins/sensorgestures/qtsensors/qdoubletapsensorgesturerecognizer.h b/src/plugins/sensorgestures/qtsensors/qdoubletapsensorgesturerecognizer.h index 8c52cdd7..5571e766 100644 --- a/src/plugins/sensorgestures/qtsensors/qdoubletapsensorgesturerecognizer.h +++ b/src/plugins/sensorgestures/qtsensors/qdoubletapsensorgesturerecognizer.h @@ -46,6 +46,9 @@ #include #include + +#include "qtsensorgesturesensorhandler.h" + QT_BEGIN_NAMESPACE class QDoubleTapSensorGestureRecognizer : public QSensorGestureRecognizer @@ -56,7 +59,6 @@ public: ~QDoubleTapSensorGestureRecognizer(); void create(); - QString id() const; bool start(); bool stop(); @@ -66,10 +68,11 @@ Q_SIGNALS: void doubletap(); private slots: - void tapChanged(); + void tapChanged(QTapReading *reading); private: QTapSensor *tapSensor; + bool active; }; QT_END_NAMESPACE diff --git a/src/plugins/sensorgestures/qtsensors/qhoversensorgesturerecognizer.cpp b/src/plugins/sensorgestures/qtsensors/qhoversensorgesturerecognizer.cpp index a441cda6..bb392d9b 100644 --- a/src/plugins/sensorgestures/qtsensors/qhoversensorgesturerecognizer.cpp +++ b/src/plugins/sensorgestures/qtsensors/qhoversensorgesturerecognizer.cpp @@ -47,7 +47,7 @@ QT_BEGIN_NAMESPACE QHoverSensorGestureRecognizer::QHoverSensorGestureRecognizer(QObject *parent) : QSensorGestureRecognizer(parent), - hoverOk(0), lastLightReading(0), detecting(0) + hoverOk(0), lastLightReading(0), detecting(0), active(0) { } @@ -57,9 +57,6 @@ QHoverSensorGestureRecognizer::~QHoverSensorGestureRecognizer() void QHoverSensorGestureRecognizer::create() { - irProx = new QIRProximitySensor(this); - irProx->connectToBackend(); - timer = new QTimer(this); connect(timer,SIGNAL(timeout()),this,SLOT(timeout())); timer->setSingleShot(true); @@ -78,50 +75,57 @@ QString QHoverSensorGestureRecognizer::id() const bool QHoverSensorGestureRecognizer::start() { - connect(irProx,SIGNAL(readingChanged()), this,SLOT(proxyChanged())); - irProx->start(); - return irProx->isActive(); + if (QtSensorGestureSensorHandler::instance()->startSensor(QtSensorGestureSensorHandler::IrProximity)) { + active = true; + connect(QtSensorGestureSensorHandler::instance(),SIGNAL(irProximityReadingChanged(QIRProximityReading *)), + this,SLOT(irProximityReadingChanged(QIRProximityReading *))); + } else { + active = false; + } + return active; } bool QHoverSensorGestureRecognizer::stop() { - irProx->stop(); - disconnect(irProx,SIGNAL(readingChanged()),this,SLOT(proxyChanged())); - return irProx->isActive(); + QtSensorGestureSensorHandler::instance()->stopSensor(QtSensorGestureSensorHandler::IrProximity); + disconnect(QtSensorGestureSensorHandler::instance(),SIGNAL(irProximityReadingChanged(QIRProximityReading *)), + this,SLOT(irProximityReadingChanged(QIRProximityReading *))); + active = false; + return active; } bool QHoverSensorGestureRecognizer::isActive() { - return irProx->isActive(); + return active; } -void QHoverSensorGestureRecognizer::proxyChanged() +void QHoverSensorGestureRecognizer::irProximityReadingChanged(QIRProximityReading *reading) { - qreal refl = irProx->reading()->reflectance(); + reflectance = reading->reflectance(); - if (refl > .51) { + if (reflectance > .51) { hoverOk = false; detecting = false; return; } - if (!detecting && (refl > .40 && refl < .50)) { + if (!detecting && (reflectance > .35 && reflectance < .50)) { detecting = true; timer->start(); timer2->start(); - detectedHigh = refl; + detectedHigh = reflectance; } else if (hoverOk && detecting - && refl < .33 - && detectedHigh + && reflectance < .33 + // && detectedHigh ) { // went light again after 1 seconds - Q_EMIT hover(); - Q_EMIT detected("hover"); - hoverOk = false; - detecting = false; + Q_EMIT hover(); + Q_EMIT detected("hover"); + hoverOk = false; + detecting = false; } - if (refl > .60) + if (reflectance > .60) detecting = false; } diff --git a/src/plugins/sensorgestures/qtsensors/qhoversensorgesturerecognizer.h b/src/plugins/sensorgestures/qtsensors/qhoversensorgesturerecognizer.h index 0efdf026..5d19007c 100644 --- a/src/plugins/sensorgestures/qtsensors/qhoversensorgesturerecognizer.h +++ b/src/plugins/sensorgestures/qtsensors/qhoversensorgesturerecognizer.h @@ -44,10 +44,9 @@ #define QHOVERSENSORGESTURERECOGNIZER_H #include -#include #include -#include -#include + +#include "qtsensorgesturesensorhandler.h" QT_BEGIN_NAMESPACE @@ -60,7 +59,6 @@ public: ~QHoverSensorGestureRecognizer(); void create(); - QString id() const; bool start(); bool stop(); @@ -70,11 +68,12 @@ Q_SIGNALS: void hover(); private slots: - void proxyChanged(); + void irProximityReadingChanged(QIRProximityReading *reading); void timeout(); void timeout2(); private: - QIRProximitySensor *irProx; +// bool proximity; + qreal reflectance; QTimer *timer; QTimer *timer2; @@ -84,6 +83,8 @@ private: qreal detectedHigh; qreal lastProx; + bool active; + }; QT_END_NAMESPACE #endif // QHOVERSENSORGESTURERECOGNIZER_H diff --git a/src/plugins/sensorgestures/qtsensors/qpickupsensorgesturerecognizer.cpp b/src/plugins/sensorgestures/qtsensors/qpickupsensorgesturerecognizer.cpp index 74d86043..124ec2c3 100644 --- a/src/plugins/sensorgestures/qtsensors/qpickupsensorgesturerecognizer.cpp +++ b/src/plugins/sensorgestures/qtsensors/qpickupsensorgesturerecognizer.cpp @@ -49,7 +49,7 @@ QT_BEGIN_NAMESPACE QPickupSensorGestureRecognizer::QPickupSensorGestureRecognizer(QObject *parent) : QSensorGestureRecognizer(parent),atRest(1),okToSignal(1), - lastpitch(0), detecting(0) + lastpitch(0), detecting(0), active(0) { } @@ -59,8 +59,6 @@ QPickupSensorGestureRecognizer::~QPickupSensorGestureRecognizer() void QPickupSensorGestureRecognizer::create() { - accel = new QAccelerometer(this); - accel->connectToBackend(); timer = new QTimer(this); connect(timer,SIGNAL(timeout()),this,SLOT(timeout())); @@ -76,19 +74,24 @@ QString QPickupSensorGestureRecognizer::id() const bool QPickupSensorGestureRecognizer::start() { - connect(accel,SIGNAL(readingChanged()),this,SLOT(accelChanged())); - accel->start(); - - active = accel->isActive(); + if (QtSensorGestureSensorHandler::instance()->startSensor(QtSensorGestureSensorHandler::Accel)) { + active = true; + connect(QtSensorGestureSensorHandler::instance(),SIGNAL(accelReadingChanged(QAccelerometerReading *)), + this,SLOT(accelChanged(QAccelerometerReading *))); + } else { + active = false; + } return active; + } bool QPickupSensorGestureRecognizer::stop() { - accel->stop(); - active = accel->isActive(); - disconnect(accel,SIGNAL(readingChanged()),this,SLOT(accelChanged())); - return !active; + QtSensorGestureSensorHandler::instance()->stopSensor(QtSensorGestureSensorHandler::Accel); + disconnect(QtSensorGestureSensorHandler::instance(),SIGNAL(accelReadingChanged(QAccelerometerReading*)), + this,SLOT(accelChanged(QAccelerometerReading *))); + active = false; + return active; } bool QPickupSensorGestureRecognizer::isActive() @@ -99,13 +102,14 @@ bool QPickupSensorGestureRecognizer::isActive() #define PICKUP_BOTTOM_THRESHOLD 20 #define PICKUP_TOP_THRESHOLD 87 -void QPickupSensorGestureRecognizer::accelChanged() +void QPickupSensorGestureRecognizer::accelChanged(QAccelerometerReading *reading) { - qreal x = accel->reading()->x(); - qreal y = accel->reading()->y(); - qreal z = accel->reading()->z(); + accelReading = reading; + qreal x = reading->x(); qreal xdiff = pXaxis - x; + qreal y = reading->y(); qreal ydiff = pYaxis - y; + qreal z = reading->z(); qreal zdiff = pZaxis - z; pitch = qAtan(y / qSqrt(x*x + z*z)) * RADIANS_TO_DEGREES; @@ -131,10 +135,8 @@ void QPickupSensorGestureRecognizer::accelChanged() detectingNegativeList.insert(0,true); atRest = true; } - qDebug() << z << pitch << (lastpitch - pitch) << detecting; if (!atRest && !detecting && (lastpitch - pitch < -PICKUP_BOTTOM_THRESHOLD)) { - qDebug() << Q_FUNC_INFO << "start detecting"; detecting = true; if (!timer->isActive()) { timer->start(); @@ -153,21 +155,19 @@ void QPickupSensorGestureRecognizer::accelChanged() void QPickupSensorGestureRecognizer::timeout() { - qreal x = accel->reading()->x(); - qreal y = accel->reading()->y(); - qreal z = accel->reading()->z(); + qreal x = accelReading->x(); + qreal y = accelReading->y(); + qreal z = accelReading->z(); qreal roll = qAtan(x / qSqrt(y*y + z*z)) * RADIANS_TO_DEGREES; bool ok = true; - qDebug() << "zlist" << zList; for (int i = 0; i < zList.count() - 1; i++) { if (zList.at(i) < 0) { ok = false; } } - qDebug() << "negativeList" << detectingNegativeList; if (ok) { for (int i = 0; i < detectingNegativeList.count() - 1; i++) { if (detectingNegativeList.at(i) == true) { @@ -175,8 +175,6 @@ void QPickupSensorGestureRecognizer::timeout() } } } - qDebug() << Q_FUNC_INFO << y << z << roll << pitch - << okToSignal << ok; if (ok && detecting && okToSignal @@ -198,5 +196,5 @@ void QPickupSensorGestureRecognizer::clear() detecting = false; detectingNegativeList.clear(); } - QT_END_NAMESPACE + diff --git a/src/plugins/sensorgestures/qtsensors/qpickupsensorgesturerecognizer.h b/src/plugins/sensorgestures/qtsensors/qpickupsensorgesturerecognizer.h index d37be6b9..1125d17f 100644 --- a/src/plugins/sensorgestures/qtsensors/qpickupsensorgesturerecognizer.h +++ b/src/plugins/sensorgestures/qtsensors/qpickupsensorgesturerecognizer.h @@ -44,9 +44,10 @@ #define QPICKUPSENSORGESTURERECOGNIZER_H #include -#include -#include #include + +#include "qtsensorgesturesensorhandler.h" + QT_BEGIN_NAMESPACE class QPickupSensorGestureRecognizer : public QSensorGestureRecognizer @@ -67,10 +68,10 @@ Q_SIGNALS: void pickup(); private slots: - void accelChanged(); + void accelChanged(QAccelerometerReading *reading); void timeout(); private: - QAccelerometer *accel; + QAccelerometerReading *accelReading; QTimer *timer; bool active; @@ -90,7 +91,6 @@ private: QList zList; void clear(); - }; QT_END_NAMESPACE #endif // QPICKUPSENSORGESTURERECOGNIZER_H diff --git a/src/plugins/sensorgestures/qtsensors/qshake2recognizer.cpp b/src/plugins/sensorgestures/qtsensors/qshake2recognizer.cpp index 80b19d88..8bb4d527 100644 --- a/src/plugins/sensorgestures/qtsensors/qshake2recognizer.cpp +++ b/src/plugins/sensorgestures/qtsensors/qshake2recognizer.cpp @@ -51,8 +51,7 @@ QT_BEGIN_NAMESPACE QShake2SensorGestureRecognizer::QShake2SensorGestureRecognizer(QObject *parent) : QSensorGestureRecognizer(parent) , active(0),shaking(0), shakeCount(0), - shakeDirection(QShake2SensorGestureRecognizer::ShakeUndefined) -{ + shakeDirection(QShake2SensorGestureRecognizer::ShakeUndefined){ timerTimeout = 750; } @@ -62,9 +61,6 @@ QShake2SensorGestureRecognizer::~QShake2SensorGestureRecognizer() void QShake2SensorGestureRecognizer::create() { - accel = new QAccelerometer(this); - accel->connectToBackend(); - timer = new QTimer(this); connect(timer,SIGNAL(timeout()),this,SLOT(timeout())); timer->setSingleShot(true); @@ -73,18 +69,24 @@ void QShake2SensorGestureRecognizer::create() bool QShake2SensorGestureRecognizer::start() { - connect(accel,SIGNAL(readingChanged()),this,SLOT(accelChanged())); - active = accel->start(); + if (QtSensorGestureSensorHandler::instance()->startSensor(QtSensorGestureSensorHandler::Accel)) { + active = true; + connect(QtSensorGestureSensorHandler::instance(),SIGNAL(accelReadingChanged(QAccelerometerReading *)), + this,SLOT(accelChanged(QAccelerometerReading *))); + } else { + active = false; + } return active; } bool QShake2SensorGestureRecognizer::stop() { - accel->stop(); - active = accel->isActive(); - disconnect(accel,SIGNAL(readingChanged()),this,SLOT(accelChanged())); - return !active; + QtSensorGestureSensorHandler::instance()->stopSensor(QtSensorGestureSensorHandler::Accel); + disconnect(QtSensorGestureSensorHandler::instance(),SIGNAL(accelReadingChanged(QAccelerometerReading *)), + this,SLOT(accelChanged(QAccelerometerReading *))); + active = false; + return active; } bool QShake2SensorGestureRecognizer::isActive() @@ -100,11 +102,11 @@ QString QShake2SensorGestureRecognizer::id() const #define NUMBER_SHAKES 3 #define THRESHOLD 25 -void QShake2SensorGestureRecognizer::accelChanged() +void QShake2SensorGestureRecognizer::accelChanged(QAccelerometerReading *reading) { - qreal x = accel->reading()->x(); - qreal y = accel->reading()->y(); - qreal z = accel->reading()->z(); + qreal x = reading->x(); + qreal y = reading->y(); + qreal z = reading->z(); currentData.x = x; currentData.y = y; diff --git a/src/plugins/sensorgestures/qtsensors/qshake2recognizer.h b/src/plugins/sensorgestures/qtsensors/qshake2recognizer.h index ff3de8cf..7c8adf76 100644 --- a/src/plugins/sensorgestures/qtsensors/qshake2recognizer.h +++ b/src/plugins/sensorgestures/qtsensors/qshake2recognizer.h @@ -42,15 +42,13 @@ #ifndef QSHAKERECOGNIZER_H #define QSHAKERECOGNIZER_H - -#include -#include -#include - #include #include #include + +#include "qtsensorgesturesensorhandler.h" + QT_BEGIN_NAMESPACE struct ShakeData { @@ -94,12 +92,12 @@ Q_SIGNALS: void shakeDown(); private slots: - void accelChanged(); + void accelChanged(QAccelerometerReading *reading); void timeout(); private: - QAccelerometer *accel; + QAccelerometerReading *accelReading; bool active; diff --git a/src/plugins/sensorgestures/qtsensors/qslamgesturerecognizer.cpp b/src/plugins/sensorgestures/qtsensors/qslamgesturerecognizer.cpp index 1bcc1518..27ea950e 100644 --- a/src/plugins/sensorgestures/qtsensors/qslamgesturerecognizer.cpp +++ b/src/plugins/sensorgestures/qtsensors/qslamgesturerecognizer.cpp @@ -40,6 +40,8 @@ ****************************************************************************/ #include "qslamgesturerecognizer.h" +#include "qtsensorgesturesensorhandler.h" + #include QT_BEGIN_NAMESPACE @@ -62,21 +64,7 @@ QSlamSensorGestureRecognizer::~QSlamSensorGestureRecognizer() void QSlamSensorGestureRecognizer::create() { - accel = new QAccelerometer(this); - accel->connectToBackend(); - - orientation = new QOrientationSensor(this); - orientation->connectToBackend(); - timer = new QTimer(this); - - qoutputrangelist outputranges = accel->outputRanges(); - - if (outputranges.count() > 0) - accelRange = (int)(outputranges.at(0).maximum *2);//39 - else - accelRange = 40; //this should never happen - connect(timer,SIGNAL(timeout()),this,SLOT(timeout())); timer->setSingleShot(true); timer->setInterval(1250); @@ -90,21 +78,37 @@ QString QSlamSensorGestureRecognizer::id() const bool QSlamSensorGestureRecognizer::start() { - connect(accel,SIGNAL(readingChanged()),this,SLOT(accelChanged())); - accel->setDataRate(10); - active = accel->start(); - orientation->start(); + connect(QtSensorGestureSensorHandler::instance(),SIGNAL(orientationReadingChanged(QOrientationReading *)), + this,SLOT(orientationReadingChanged(QOrientationReading *))); + + connect(QtSensorGestureSensorHandler::instance(),SIGNAL(accelReadingChanged(QAccelerometerReading *)), + this,SLOT(accelChanged(QAccelerometerReading *))); + if (QtSensorGestureSensorHandler::instance()->startSensor(QtSensorGestureSensorHandler::Accel)) { + if (QtSensorGestureSensorHandler::instance()->startSensor(QtSensorGestureSensorHandler::Orientation)) { + active = true; + accelRange = QtSensorGestureSensorHandler::instance()->accelRange; + } else { + QtSensorGestureSensorHandler::instance()->stopSensor(QtSensorGestureSensorHandler::Accel); + active = false; + } + } else { + active = false; + } return active; } bool QSlamSensorGestureRecognizer::stop() { - accel->stop(); - orientation->stop(); - active = accel->isActive(); - disconnect(accel,SIGNAL(readingChanged()),this,SLOT(accelChanged())); - return !active; + QtSensorGestureSensorHandler::instance()->stopSensor(QtSensorGestureSensorHandler::Accel); + QtSensorGestureSensorHandler::instance()->stopSensor(QtSensorGestureSensorHandler::Orientation); + disconnect(QtSensorGestureSensorHandler::instance(),SIGNAL(orientationReadingChanged(QOrientationReading *)), + this,SLOT(orientationReadingChanged(QOrientationReading *))); + + disconnect(QtSensorGestureSensorHandler::instance(),SIGNAL(accelReadingChanged(QAccelerometerReading *)), + this,SLOT(accelChanged(QAccelerometerReading *))); + active = false; + return active; } bool QSlamSensorGestureRecognizer::isActive() @@ -113,19 +117,22 @@ bool QSlamSensorGestureRecognizer::isActive() return active; } -#define SLAM_FACTOR -16 +void QSlamSensorGestureRecognizer::orientationReadingChanged(QOrientationReading *reading) +{ + orientationReading = reading; +} + +#define SLAM_FACTOR -16.0 #define SLAM_WIGGLE_FACTOR 0.95 -void QSlamSensorGestureRecognizer::accelChanged() +void QSlamSensorGestureRecognizer::accelChanged(QAccelerometerReading *reading) { - qreal x = accel->reading()->x(); - qreal y = accel->reading()->y(); - qreal z = accel->reading()->z(); + qreal x = reading->x(); + qreal y = reading->y(); + qreal z = reading->z(); //// very hacky - QOrientationReading::Orientation currentOrientation = orientation->reading()->orientation(); - - if (currentOrientation == QOrientationReading::FaceUp) { + if (orientationReading->orientation() == QOrientationReading::FaceUp) { z = z - 9.8; } @@ -138,7 +145,6 @@ void QSlamSensorGestureRecognizer::accelChanged() if (slamMap.count() > 5) slamMap.removeLast(); - if (z < SLAM_FACTOR && qAbs(diffX) < (accelRange *SLAM_WIGGLE_FACTOR) && qAbs(diffY) < (accelRange *SLAM_WIGGLE_FACTOR)) { diff --git a/src/plugins/sensorgestures/qtsensors/qslamgesturerecognizer.h b/src/plugins/sensorgestures/qtsensors/qslamgesturerecognizer.h index 38777b8c..e5f71d62 100644 --- a/src/plugins/sensorgestures/qtsensors/qslamgesturerecognizer.h +++ b/src/plugins/sensorgestures/qtsensors/qslamgesturerecognizer.h @@ -67,12 +67,14 @@ Q_SIGNALS: void slam(); private slots: - void accelChanged(); + void accelChanged(QAccelerometerReading *reading); + void orientationReadingChanged(QOrientationReading *reading); void timeout(); + private: QAccelerometer *accel; - QOrientationSensor *orientation; + QOrientationReading *orientationReading; QTimer *timer; int accelRange; bool active; diff --git a/src/plugins/sensorgestures/qtsensors/qtsensorgestureplugin.cpp b/src/plugins/sensorgestures/qtsensors/qtsensorgestureplugin.cpp index eeedf1c9..e770d362 100644 --- a/src/plugins/sensorgestures/qtsensors/qtsensorgestureplugin.cpp +++ b/src/plugins/sensorgestures/qtsensors/qtsensorgestureplugin.cpp @@ -88,39 +88,28 @@ QList QtSensorGesturePlugin::createRecognizers() { QList recognizers; -// QSensorGestureRecognizer *sRec1 = new QCirclesSensorGestureRecognizer(this); -// recognizers.append(sRec1); + recognizers.append(new QCoverSensorGestureRecognizer(this)); - QSensorGestureRecognizer *sRec2 = new QCoverSensorGestureRecognizer(this); - recognizers.append(sRec2); + recognizers.append(new QDoubleTapSensorGestureRecognizer(this)); - QSensorGestureRecognizer *sRec3 = new QDoubleTapSensorGestureRecognizer(this); - recognizers.append(sRec3); + recognizers.append(new QHoverSensorGestureRecognizer(this)); - QSensorGestureRecognizer *sRec4 = new QHoverSensorGestureRecognizer(this); - recognizers.append(sRec4); + recognizers.append(new QPickupSensorGestureRecognizer(this)); - QSensorGestureRecognizer *sRec5 = new QPickupSensorGestureRecognizer(this); - recognizers.append(sRec5); + recognizers.append(new QShake2SensorGestureRecognizer(this)); - QSensorGestureRecognizer *sRec6 = new QShake2SensorGestureRecognizer(this); - recognizers.append(sRec6); + recognizers.append(new QSlamSensorGestureRecognizer(this)); - QSensorGestureRecognizer *sRec10 = new QSlamSensorGestureRecognizer(this); - recognizers.append(sRec10); + recognizers.append(new QTurnoverSensorGestureRecognizer(this)); - QSensorGestureRecognizer *sRec7 = new QTurnoverSensorGestureRecognizer(this); - recognizers.append(sRec7); + recognizers.append(new QWhipSensorGestureRecognizer(this)); - QSensorGestureRecognizer *sRec8 = new QWhipSensorGestureRecognizer(this); - recognizers.append(sRec8); - - QSensorGestureRecognizer *sRec9 = new QTwistSensorGestureRecognizer(this); - recognizers.append(sRec9); + recognizers.append(new QTwistSensorGestureRecognizer(this)); return recognizers; } + Q_EXPORT_PLUGIN2(qtsensorgestures_plugin, QtSensorGesturePlugin) QT_END_NAMESPACE diff --git a/src/plugins/sensorgestures/qtsensors/qtsensorgestureplugin.h b/src/plugins/sensorgestures/qtsensors/qtsensorgestureplugin.h index 980f42f7..75e4a2f8 100644 --- a/src/plugins/sensorgestures/qtsensors/qtsensorgestureplugin.h +++ b/src/plugins/sensorgestures/qtsensors/qtsensorgestureplugin.h @@ -46,6 +46,7 @@ #include #include + QT_BEGIN_NAMESPACE class QtSensorGesturePlugin : public QObject, public QSensorGesturePluginInterface @@ -61,6 +62,8 @@ public: QStringList gestureSignals() const; QStringList supportedIds() const; QString name() const { return "QtSensorGestures"; } + }; + QT_END_NAMESPACE #endif // QTSENSORGESTURESPLUGIN_H diff --git a/src/plugins/sensorgestures/qtsensors/qtsensorgesturesensorhandler.cpp b/src/plugins/sensorgestures/qtsensors/qtsensorgesturesensorhandler.cpp new file mode 100644 index 00000000..676e94f9 --- /dev/null +++ b/src/plugins/sensorgestures/qtsensors/qtsensorgesturesensorhandler.cpp @@ -0,0 +1,192 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the QtSensors 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. +** +** 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$ +** +****************************************************************************/ + +#include + +#include "qtsensorgesturesensorhandler.h" + +QtSensorGestureSensorHandler::QtSensorGestureSensorHandler(QObject *parent) : + QObject(parent), + accel(0), orientation(0), proximity(0), irProx(0),tapSensor(0) +{ +} + +QtSensorGestureSensorHandler* QtSensorGestureSensorHandler::instance() +{ + static QtSensorGestureSensorHandler *instance = 0; + if (!instance) { + instance = new QtSensorGestureSensorHandler; + } + return instance; +} + +void QtSensorGestureSensorHandler::accelChanged() +{ + Q_EMIT accelReadingChanged(accel->reading()); +} + +void QtSensorGestureSensorHandler::orientationChanged() +{ + Q_EMIT orientationReadingChanged(orientation->reading()); +} + +void QtSensorGestureSensorHandler::proximityChanged() +{ + Q_EMIT proximityReadingChanged(proximity->reading()); +} + +void QtSensorGestureSensorHandler::irProximityChanged() +{ + Q_EMIT irProximityReadingChanged(irProx->reading()); +} + +void QtSensorGestureSensorHandler::doubletap() +{ + Q_EMIT dTabReadingChanged(tapSensor->reading()); +} + +bool QtSensorGestureSensorHandler::startSensor(SensorGestureSensors sensor) +{ + bool ok = true; + switch (sensor) { + case Accel: + //accel + if (!accel) { + accel = new QAccelerometer(this); + ok = accel->connectToBackend(); + qoutputrangelist outputranges = accel->outputRanges(); + + if (outputranges.count() > 0) + accelRange = (int)(outputranges.at(0).maximum *2);//39 + else + accelRange = 39; //this should never happen + connect(accel,SIGNAL(readingChanged()),this,SLOT(accelChanged())); + } + if (ok && !accel->isActive()) + accel->start(); + break; + case Orientation: + //orientation + if (!orientation) { + orientation = new QOrientationSensor(this); + ok = orientation->connectToBackend(); + connect(orientation,SIGNAL(readingChanged()),this,SLOT(orientationChanged())); + } + if (ok && !orientation->isActive()) + orientation->start(); + break; + case Proximity: + //proximity + if (!proximity) { + proximity = new QProximitySensor(this); + ok = proximity->connectToBackend(); + connect(proximity,SIGNAL(readingChanged()),this,SLOT(proximityChanged())); + } + if (ok && !proximity->isActive()) + proximity->start(); + break; + case IrProximity: + //irproximity + if (!irProx) { + irProx = new QIRProximitySensor(this); + ok = irProx->connectToBackend(); + connect(irProx,SIGNAL(readingChanged()),this,SLOT(irProximityChanged())); + } + if (ok && !irProx->isActive()) + irProx->start(); + break; + case Tap: + //dtap + if (!tapSensor) { + tapSensor = new QTapSensor(this); + ok = tapSensor->connectToBackend(); + connect(tapSensor,SIGNAL(readingChanged()),this,SLOT(doubletap())); + } + if (ok && !tapSensor->isActive()) + tapSensor->start(); + break; + }; + int val = usedSensorsMap.value(sensor); + usedSensorsMap.insert(sensor,++val); + + return ok; +} + +void QtSensorGestureSensorHandler::stopSensor(SensorGestureSensors sensor) +{ + // qDebug() << __FUNCTION__ << sensor; + if (usedSensorsMap.value(sensor) == 0) + return; + int val = usedSensorsMap.value(sensor); + usedSensorsMap.insert(sensor,--val); + switch (sensor) { + case Accel: + //accel + if (usedSensorsMap.value(sensor) == 0) { + accel->stop(); + } + break; + case Orientation: + if (usedSensorsMap.value(sensor) == 0) { + orientation->stop(); + } + //orientation + break; + case Proximity: + if (usedSensorsMap.value(sensor) == 0) { + proximity->stop(); + } + //proximity + break; + case IrProximity: + if (usedSensorsMap.value(sensor) == 0) { + irProx->stop(); + } + //irproximity + break; + case Tap: + if (usedSensorsMap.value(sensor) == 0) { + tapSensor->stop(); + } + //dtap + break; + }; +} diff --git a/src/plugins/sensorgestures/qtsensors/qtsensorgesturesensorhandler.h b/src/plugins/sensorgestures/qtsensors/qtsensorgesturesensorhandler.h new file mode 100644 index 00000000..f7da59f1 --- /dev/null +++ b/src/plugins/sensorgestures/qtsensors/qtsensorgesturesensorhandler.h @@ -0,0 +1,100 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the QtSensors 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. +** +** 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 QTSENSORGESTURESENSORHANDLER_H +#define QTSENSORGESTURESENSORHANDLER_H + +#include + +#include +#include +#include +#include +#include +#include +#include + +class QtSensorGestureSensorHandler : public QObject +{ + Q_OBJECT + Q_ENUMS(SensorGestureSensors) +public: + explicit QtSensorGestureSensorHandler(QObject *parent = 0); + + enum SensorGestureSensors { + Accel = 0, + Orientation, + Proximity, + IrProximity, + Tap + }; + static QtSensorGestureSensorHandler *instance(); + qreal accelRange; + +public slots: + void accelChanged(); + void orientationChanged(); + void proximityChanged(); + void irProximityChanged(); + void doubletap(); + + bool startSensor(SensorGestureSensors sensor); + void stopSensor(SensorGestureSensors sensor); + +Q_SIGNALS: + void accelReadingChanged(QAccelerometerReading *reading); + void orientationReadingChanged(QOrientationReading *reading); + void proximityReadingChanged(QProximityReading *reading); + void irProximityReadingChanged(QIRProximityReading *reading); + void dTabReadingChanged(QTapReading *reading); + +private: + QAccelerometer *accel; + QOrientationSensor *orientation; + QProximitySensor *proximity; + QIRProximitySensor *irProx; + QTapSensor *tapSensor; + + QMap usedSensorsMap; + +}; + +#endif // QTSENSORGESTURESENSORHANDLER_H diff --git a/src/plugins/sensorgestures/qtsensors/qtsensors.pro b/src/plugins/sensorgestures/qtsensors/qtsensors.pro index 745b9863..e469fda9 100644 --- a/src/plugins/sensorgestures/qtsensors/qtsensors.pro +++ b/src/plugins/sensorgestures/qtsensors/qtsensors.pro @@ -16,7 +16,8 @@ HEADERS += qtsensorgestureplugin.h \ qslamgesturerecognizer.h \ qturnoversensorgesturerecognizer.h \ qtwistsensorgesturerecognizer.h \ - qwhipsensorgesturerecognizer.h + qwhipsensorgesturerecognizer.h \ + qtsensorgesturesensorhandler.h SOURCES += qtsensorgestureplugin.cpp \ qcoversensorgesturerecognizer.cpp \ @@ -27,7 +28,8 @@ SOURCES += qtsensorgestureplugin.cpp \ qslamgesturerecognizer.cpp \ qturnoversensorgesturerecognizer.cpp \ qtwistsensorgesturerecognizer.cpp \ - qwhipsensorgesturerecognizer.cpp + qwhipsensorgesturerecognizer.cpp \ + qtsensorgesturesensorhandler.cpp target.path += $$[QT_INSTALL_PLUGINS]/sensorgestures INSTALLS += target diff --git a/src/plugins/sensorgestures/qtsensors/qturnoversensorgesturerecognizer.cpp b/src/plugins/sensorgestures/qtsensors/qturnoversensorgesturerecognizer.cpp index 17da1a7e..ac4ce5db 100644 --- a/src/plugins/sensorgestures/qtsensors/qturnoversensorgesturerecognizer.cpp +++ b/src/plugins/sensorgestures/qtsensors/qturnoversensorgesturerecognizer.cpp @@ -42,6 +42,8 @@ #include #include "qturnoversensorgesturerecognizer.h" +#include "qtsensorgesturesensorhandler.h" + QT_BEGIN_NAMESPACE // turnover and put down i.e. facedown @@ -49,7 +51,7 @@ QT_BEGIN_NAMESPACE QTurnoverSensorGestureRecognizer::QTurnoverSensorGestureRecognizer(QObject *parent) : QSensorGestureRecognizer(parent), isClose(0) - , isFaceDown(0) + , isFaceDown(0), active(0) { } @@ -59,30 +61,41 @@ QTurnoverSensorGestureRecognizer::~QTurnoverSensorGestureRecognizer() void QTurnoverSensorGestureRecognizer::create() { - orientation = new QOrientationSensor(this); - orientation->connectToBackend(); - proximity = new QProximitySensor(this); - proximity->connectToBackend(); - - } bool QTurnoverSensorGestureRecognizer::start() { - connect(orientation,SIGNAL(readingChanged()),this,SLOT(orientationChanged())); - connect(proximity,SIGNAL(readingChanged()),this,SLOT(proximityChanged())); - active = (orientation->start() && proximity->start()); + if (QtSensorGestureSensorHandler::instance()->startSensor(QtSensorGestureSensorHandler::Proximity)) { + if (QtSensorGestureSensorHandler::instance()->startSensor(QtSensorGestureSensorHandler::Orientation)) { + active = true; + connect(QtSensorGestureSensorHandler::instance(),SIGNAL(proximityReadingChanged(QProximityReading *)), + this,SLOT(proximityChanged(QProximityReading *))); + + connect(QtSensorGestureSensorHandler::instance(),SIGNAL(orientationReadingChanged(QOrientationReading *)), + this,SLOT(orientationReadingChanged(QOrientationReading *))); + } else { + QtSensorGestureSensorHandler::instance()->stopSensor(QtSensorGestureSensorHandler::Proximity); + active = false; + } + } else { + active = false; + } return active; } bool QTurnoverSensorGestureRecognizer::stop() { - orientation->stop(); - proximity->stop(); - active = (orientation->isActive() && proximity->isActive()); - disconnect(orientation,SIGNAL(readingChanged()),this,SLOT(orientationChanged())); - disconnect(proximity,SIGNAL(readingChanged()),this,SLOT(proximityChanged())); - return !active; + QtSensorGestureSensorHandler::instance()->stopSensor(QtSensorGestureSensorHandler::Proximity); + QtSensorGestureSensorHandler::instance()->stopSensor(QtSensorGestureSensorHandler::Orientation); + + disconnect(QtSensorGestureSensorHandler::instance(),SIGNAL(proximityReadingChanged(QProximityReading *)), + this,SLOT(proximityChanged(QProximityReading *))); + disconnect(QtSensorGestureSensorHandler::instance(),SIGNAL(orientationReadingChanged(QOrientationReading *)), + this,SLOT(orientationReadingChanged(QOrientationReading *))); + + active = false; + + return active; } bool QTurnoverSensorGestureRecognizer::isActive() @@ -95,15 +108,15 @@ QString QTurnoverSensorGestureRecognizer::id() const return QString("QtSensors.turnover"); } -void QTurnoverSensorGestureRecognizer::proximityChanged() +void QTurnoverSensorGestureRecognizer::proximityChanged(QProximityReading *reading) { - isClose = proximity->reading()->close(); + isClose = reading->close(); isRecognized(); } -void QTurnoverSensorGestureRecognizer::orientationChanged() +void QTurnoverSensorGestureRecognizer::orientationReadingChanged(QOrientationReading *reading) { - switch (orientation->reading()->orientation()) { + switch (reading->orientation()) { case QOrientationReading::FaceDown: { isFaceDown = true; diff --git a/src/plugins/sensorgestures/qtsensors/qturnoversensorgesturerecognizer.h b/src/plugins/sensorgestures/qtsensors/qturnoversensorgesturerecognizer.h index 3462a4e4..d32611e4 100644 --- a/src/plugins/sensorgestures/qtsensors/qturnoversensorgesturerecognizer.h +++ b/src/plugins/sensorgestures/qtsensors/qturnoversensorgesturerecognizer.h @@ -42,11 +42,9 @@ #ifndef QTURNOVERSENSORGESTURERECOGNIZER_H #define QTURNOVERSENSORGESTURERECOGNIZER_H -#include -#include -#include - #include +#include "qtsensorgesturesensorhandler.h" + QT_BEGIN_NAMESPACE class QTurnoverSensorGestureRecognizer : public QSensorGestureRecognizer @@ -65,12 +63,10 @@ Q_SIGNALS: void turnover(); private slots: - void orientationChanged(); - void proximityChanged(); + void orientationReadingChanged(QOrientationReading *reading); + void proximityChanged(QProximityReading *reading); private: - QOrientationSensor *orientation; - QProximitySensor *proximity; bool isClose; bool isFaceDown; diff --git a/src/plugins/sensorgestures/qtsensors/qtwistsensorgesturerecognizer.cpp b/src/plugins/sensorgestures/qtsensors/qtwistsensorgesturerecognizer.cpp index a5a8cab6..3db09ba2 100644 --- a/src/plugins/sensorgestures/qtsensors/qtwistsensorgesturerecognizer.cpp +++ b/src/plugins/sensorgestures/qtsensors/qtwistsensorgesturerecognizer.cpp @@ -61,25 +61,10 @@ QTwistSensorGestureRecognizer::~QTwistSensorGestureRecognizer() void QTwistSensorGestureRecognizer::create() { - accel = new QAccelerometer(this); - accel->connectToBackend(); - accel->setDataRate(5); - orientation = new QOrientationSensor(this); - orientation->connectToBackend(); - timer = new QTimer(this); - - qoutputrangelist outputranges = accel->outputRanges(); - - if (outputranges.count() > 0) - accelRange = (int)(outputranges.at(0).maximum * 2); - else - accelRange = 44; //this should never happen - connect(timer,SIGNAL(timeout()),this,SLOT(timeout())); timer->setSingleShot(true); timer->setInterval(500); - } QString QTwistSensorGestureRecognizer::id() const @@ -89,20 +74,36 @@ QString QTwistSensorGestureRecognizer::id() const bool QTwistSensorGestureRecognizer::start() { - connect(accel,SIGNAL(readingChanged()),this,SLOT(accelChanged())); - active = accel->start(); - orientation->start(); + if (QtSensorGestureSensorHandler::instance()->startSensor(QtSensorGestureSensorHandler::Accel)) { + if (QtSensorGestureSensorHandler::instance()->startSensor(QtSensorGestureSensorHandler::Orientation)) { + accelRange = QtSensorGestureSensorHandler::instance()->accelRange; + active = true; + connect(QtSensorGestureSensorHandler::instance(),SIGNAL(orientationReadingChanged(QOrientationReading *)), + this,SLOT(orientationReadingChanged(QOrientationReading *))); + + connect(QtSensorGestureSensorHandler::instance(),SIGNAL(accelReadingChanged(QAccelerometerReading *)), + this,SLOT(accelChanged(QAccelerometerReading *))); + } else { + QtSensorGestureSensorHandler::instance()->stopSensor(QtSensorGestureSensorHandler::Accel); + active = false; + } + } else { + active = false; + } return active; } bool QTwistSensorGestureRecognizer::stop() { - accel->stop(); - disconnect(accel,SIGNAL(readingChanged()),this,SLOT(accelChanged())); - - active = accel->isActive(); - orientation->stop(); - return !active; + QtSensorGestureSensorHandler::instance()->stopSensor(QtSensorGestureSensorHandler::Accel); + QtSensorGestureSensorHandler::instance()->stopSensor(QtSensorGestureSensorHandler::Orientation); + disconnect(QtSensorGestureSensorHandler::instance(),SIGNAL(orientationReadingChanged(QOrientationReading *)), + this,SLOT(orientationReadingChanged(QOrientationReading *))); + + disconnect(QtSensorGestureSensorHandler::instance(),SIGNAL(accelReadingChanged(QAccelerometerReading *)), + this,SLOT(accelChanged(QAccelerometerReading *))); + active = false; + return active; } bool QTwistSensorGestureRecognizer::isActive() @@ -113,11 +114,16 @@ bool QTwistSensorGestureRecognizer::isActive() #define RESTING_VARIANCE 25 #define THRESHOLD_DEGREES 50 -void QTwistSensorGestureRecognizer::accelChanged() +void QTwistSensorGestureRecognizer::orientationReadingChanged(QOrientationReading *reading) +{ + orientationReading = reading; +} + +void QTwistSensorGestureRecognizer::accelChanged(QAccelerometerReading *reading) { - qreal x = accel->reading()->x(); - qreal y = accel->reading()->y(); - qreal z = accel->reading()->z(); + qreal x = reading->x(); + qreal y = reading->y(); + qreal z = reading->z(); qreal diffX = lastX - x; qreal diffY = lastY - y; @@ -157,11 +163,11 @@ void QTwistSensorGestureRecognizer::accelChanged() detecting = true; timer->start(); lastRoll = degrees; - lastOrientation = orientation->reading()->orientation(); + lastOrientation = orientationReading->orientation(); } - if (detecting && (orientation->reading()->orientation() == QOrientationReading::TopUp - || orientation->reading()->orientation() == QOrientationReading::TopDown)) { + if (detecting && (orientationReading->orientation() == QOrientationReading::TopUp + || orientationReading->orientation() == QOrientationReading::TopDown)) { detecting = false; timer->stop(); diff --git a/src/plugins/sensorgestures/qtsensors/qtwistsensorgesturerecognizer.h b/src/plugins/sensorgestures/qtsensors/qtwistsensorgesturerecognizer.h index df366060..6beb7c82 100644 --- a/src/plugins/sensorgestures/qtsensors/qtwistsensorgesturerecognizer.h +++ b/src/plugins/sensorgestures/qtsensors/qtwistsensorgesturerecognizer.h @@ -46,6 +46,7 @@ #include #include #include +#include "qtsensorgesturesensorhandler.h" QT_BEGIN_NAMESPACE @@ -68,12 +69,13 @@ Q_SIGNALS: void twistRight(); private slots: - void accelChanged(); + void accelChanged(QAccelerometerReading *reading); + void orientationReadingChanged(QOrientationReading *reading); void timeout(); private: - QAccelerometer *accel; - QOrientationSensor *orientation; + + QOrientationReading *orientationReading; QTimer *timer; int accelRange; qreal lastRoll; diff --git a/src/plugins/sensorgestures/qtsensors/qwhipsensorgesturerecognizer.cpp b/src/plugins/sensorgestures/qtsensors/qwhipsensorgesturerecognizer.cpp index 676b42ae..8d4eb1a5 100644 --- a/src/plugins/sensorgestures/qtsensors/qwhipsensorgesturerecognizer.cpp +++ b/src/plugins/sensorgestures/qtsensors/qwhipsensorgesturerecognizer.cpp @@ -41,6 +41,7 @@ #include "qwhipsensorgesturerecognizer.h" +#include "qtsensorgesturesensorhandler.h" #include @@ -48,7 +49,7 @@ QT_BEGIN_NAMESPACE QWhipSensorGestureRecognizer::QWhipSensorGestureRecognizer(QObject *parent) : QSensorGestureRecognizer(parent), whipIt(0), lastX(0), - detectedX(0) + detectedX(0), active(0) { } @@ -58,25 +59,10 @@ QWhipSensorGestureRecognizer::~QWhipSensorGestureRecognizer() void QWhipSensorGestureRecognizer::create() { - accel = new QAccelerometer(this); - accel->connectToBackend(); - - orientation = new QOrientationSensor(this); - orientation->connectToBackend(); - timer = new QTimer(this); - - qoutputrangelist outputranges = accel->outputRanges(); - - if (outputranges.count() > 0) - accelRange = (int)(outputranges.at(0).maximum); - else - accelRange = 44; //this should never happen - connect(timer,SIGNAL(timeout()),this,SLOT(timeout())); timer->setSingleShot(true); timer->setInterval(750); - } QString QWhipSensorGestureRecognizer::id() const @@ -86,19 +72,36 @@ QString QWhipSensorGestureRecognizer::id() const bool QWhipSensorGestureRecognizer::start() { - connect(accel,SIGNAL(readingChanged()),this,SLOT(accelChanged())); - active = accel->start(); - orientation->start(); + if (QtSensorGestureSensorHandler::instance()->startSensor(QtSensorGestureSensorHandler::Accel)) { + if (QtSensorGestureSensorHandler::instance()->startSensor(QtSensorGestureSensorHandler::Orientation)) { + accelRange = QtSensorGestureSensorHandler::instance()->accelRange; + active = true; + connect(QtSensorGestureSensorHandler::instance(),SIGNAL(orientationReadingChanged(QOrientationReading *)), + this,SLOT(orientationReadingChanged(QOrientationReading *))); + + connect(QtSensorGestureSensorHandler::instance(),SIGNAL(accelReadingChanged(QAccelerometerReading *)), + this,SLOT(accelChanged(QAccelerometerReading *))); + } else { + QtSensorGestureSensorHandler::instance()->stopSensor(QtSensorGestureSensorHandler::Accel); + active = false; + } + } else { + active = false; + } return active; } bool QWhipSensorGestureRecognizer::stop() { - accel->stop(); - active = accel->isActive(); - orientation->stop(); - disconnect(accel,SIGNAL(readingChanged()),this,SLOT(accelChanged())); - return !active; + QtSensorGestureSensorHandler::instance()->stopSensor(QtSensorGestureSensorHandler::Accel); + QtSensorGestureSensorHandler::instance()->stopSensor(QtSensorGestureSensorHandler::Orientation); + disconnect(QtSensorGestureSensorHandler::instance(),SIGNAL(orientationReadingChanged(QOrientationReading *)), + this,SLOT(orientationReadingChanged(QOrientationReading *))); + + disconnect(QtSensorGestureSensorHandler::instance(),SIGNAL(accelReadingChanged(QAccelerometerReading *)), + this,SLOT(accelChanged(QAccelerometerReading *))); + active = false; + return active; } bool QWhipSensorGestureRecognizer::isActive() @@ -107,7 +110,7 @@ bool QWhipSensorGestureRecognizer::isActive() } #define WHIP_THRESHOLD_FACTOR 0.85 //37 -#define WHIP_DETECTION_FACTOR 0.3 // 11.7 +#define WHIP_DETECTION_FACTOR 0.15 // 5.85 #define WHIP_DEGREES 25 @@ -117,24 +120,28 @@ bool QWhipSensorGestureRecognizer::isActive() #define RADIANS_TO_DEGREES 57.2957795 -void QWhipSensorGestureRecognizer::accelChanged() +void QWhipSensorGestureRecognizer::orientationReadingChanged(QOrientationReading *reading) { - qreal x = accel->reading()->x(); + orientationReading = reading; +} + +void QWhipSensorGestureRecognizer::accelChanged(QAccelerometerReading *reading) +{ + qreal x = reading->x(); qreal difference = lastX - x; + if (qAbs(difference) < 1) return; - qreal y = accel->reading()->y(); - qreal z = accel->reading()->z(); + qreal y = reading->y(); + qreal z = reading->z(); qreal roll = qAtan(x / qSqrt(y*y + z*z)) * RADIANS_TO_DEGREES; - QOrientationReading::Orientation currentOrientation = orientation->reading()->orientation(); - if (whipIt) { - if (currentOrientation == QOrientationReading::TopUp - && roll > WHIP_Y_DEGREES + if (/*orientationReading->orientation() == QOrientationReading::TopUp + && */ roll > WHIP_Y_DEGREES && ((!wasNegative && qAbs(detectedX - x) > accelRange * WHIP_THRESHOLD_FACTOR) || (wasNegative && detectedX - x > (accelRange * WHIP_THRESHOLD_FACTOR))) ) { Q_EMIT whip(); @@ -143,8 +150,8 @@ void QWhipSensorGestureRecognizer::accelChanged() timer->stop(); } } else if (!timer->isActive() - && currentOrientation == QOrientationReading::TopUp - && roll < -WHIP_Y_DEGREES + // && orientationReading->orientation() == QOrientationReading::TopUp + && roll < WHIP_Y_DEGREES && ((difference > accelRange * WHIP_DETECTION_FACTOR) || (difference < -accelRange * WHIP_DETECTION_FACTOR))) { detectedX = x; diff --git a/src/plugins/sensorgestures/qtsensors/qwhipsensorgesturerecognizer.h b/src/plugins/sensorgestures/qtsensors/qwhipsensorgesturerecognizer.h index 6d22af68..234a69a7 100644 --- a/src/plugins/sensorgestures/qtsensors/qwhipsensorgesturerecognizer.h +++ b/src/plugins/sensorgestures/qtsensors/qwhipsensorgesturerecognizer.h @@ -44,8 +44,8 @@ #define QWHIPSENSORGESTURERECOGNIZER_H #include -#include -#include + +#include "qtsensorgesturesensorhandler.h" QT_BEGIN_NAMESPACE @@ -67,11 +67,12 @@ Q_SIGNALS: void whip(); private slots: - void accelChanged(); + void accelChanged(QAccelerometerReading *reading); + void orientationReadingChanged(QOrientationReading *reading); void timeout(); + private: - QAccelerometer *accel; - QOrientationSensor *orientation; + QOrientationReading *orientationReading; QTimer *timer; int accelRange; bool whipIt; @@ -85,5 +86,6 @@ private: qreal roll; }; + QT_END_NAMESPACE #endif // QWHIPSENSORGESTURERECOGNIZER_H diff --git a/src/plugins/sensorgestures/shake/qshakerecognizer.cpp b/src/plugins/sensorgestures/shake/qshakerecognizer.cpp index b85d770b..41df8591 100644 --- a/src/plugins/sensorgestures/shake/qshakerecognizer.cpp +++ b/src/plugins/sensorgestures/shake/qshakerecognizer.cpp @@ -73,7 +73,6 @@ void QShakeSensorGestureRecognizer::create() bool QShakeSensorGestureRecognizer::start() { active = accel->start(); - return active; } -- cgit v1.2.3