From 5e2502dc7c8ab86c023b8cddb840b1728169a13d Mon Sep 17 00:00:00 2001 From: Lorn Potter Date: Wed, 16 May 2012 10:45:30 +1000 Subject: remove the need to use QTimer and use timestamps instead. Change-Id: I6327357de9f84df3db86d714747210fe62547818 Reviewed-by: Lorn Potter --- .../qtsensors/qhoversensorgesturerecognizer.cpp | 33 +++-- .../qtsensors/qhoversensorgesturerecognizer.h | 8 +- .../qtsensors/qpickupsensorgesturerecognizer.cpp | 150 +++++++++++---------- .../qtsensors/qpickupsensorgesturerecognizer.h | 13 +- .../sensorgestures/qtsensors/qshake2recognizer.cpp | 35 +++-- .../sensorgestures/qtsensors/qshake2recognizer.h | 5 +- .../qtsensors/qslamgesturerecognizer.cpp | 20 ++- .../qtsensors/qslamgesturerecognizer.h | 3 + .../qtsensors/qtsensorgesturesensorhandler.cpp | 3 +- .../qtsensors/qturnoversensorgesturerecognizer.cpp | 3 +- .../qtsensors/qturnoversensorgesturerecognizer.h | 2 +- .../qtsensors/qtwistsensorgesturerecognizer.cpp | 4 +- .../qtsensors/qtwistsensorgesturerecognizer.h | 2 - .../qtsensors/qwhipsensorgesturerecognizer.cpp | 34 +++-- .../qtsensors/qwhipsensorgesturerecognizer.h | 7 +- 15 files changed, 194 insertions(+), 128 deletions(-) (limited to 'src/plugins/sensorgestures') diff --git a/src/plugins/sensorgestures/qtsensors/qhoversensorgesturerecognizer.cpp b/src/plugins/sensorgestures/qtsensors/qhoversensorgesturerecognizer.cpp index 63d56fa9..13923f80 100644 --- a/src/plugins/sensorgestures/qtsensors/qhoversensorgesturerecognizer.cpp +++ b/src/plugins/sensorgestures/qtsensors/qhoversensorgesturerecognizer.cpp @@ -43,12 +43,15 @@ #include "qhoversensorgesturerecognizer.h" #include +#define TIMER2_TIMEOUT 5000 + QT_BEGIN_NAMESPACE QHoverSensorGestureRecognizer::QHoverSensorGestureRecognizer(QObject *parent) : QSensorGestureRecognizer(parent), - orientationReading(0), - hoverOk(0), detecting(0), active(0), initialReflectance(0), useHack(0) + orientationReading(0),reflectance(0), + hoverOk(0), detecting(0), active(0), initialReflectance(0), useHack(0), + lastTimestamp(0), timer2Active(0), lapsedTime2(0) { } @@ -58,10 +61,7 @@ QHoverSensorGestureRecognizer::~QHoverSensorGestureRecognizer() void QHoverSensorGestureRecognizer::create() { - timer2 = new QTimer(this); - connect(timer2,SIGNAL(timeout()),this,SLOT(timeout2())); - timer2->setSingleShot(true); - timer2->setInterval(3000); + } QString QHoverSensorGestureRecognizer::id() const @@ -90,6 +90,8 @@ bool QHoverSensorGestureRecognizer::start() detectedHigh = 0; initialReflectance = 0; useHack = false; + timer2Active = false; + lapsedTime2 = 0; return active; } @@ -102,6 +104,8 @@ bool QHoverSensorGestureRecognizer::stop() disconnect(QtSensorGestureSensorHandler::instance(),SIGNAL(orientationReadingChanged(QOrientationReading *)), this,SLOT(orientationReadingChanged(QOrientationReading *))); active = false; + timer2Active = false; + initialReflectance = 0; return active; } @@ -144,7 +148,6 @@ void QHoverSensorGestureRecognizer::irProximityReadingChanged(QIRProximityReadin detectedHigh = 0; } - qreal detectedPercent = 100 - (detectedHigh / reflectance * 100); qint16 percentCheck; @@ -153,9 +156,13 @@ void QHoverSensorGestureRecognizer::irProximityReadingChanged(QIRProximityReadin else percentCheck = -101; + quint64 timestamp = reading->timestamp(); + if (!detecting && checkForHovering()) { detecting = true; + detecting = true; + timer2Active = true; detectedHigh = reflectance; } else if (detecting && detectedPercent < percentCheck @@ -166,11 +173,19 @@ void QHoverSensorGestureRecognizer::irProximityReadingChanged(QIRProximityReadin hoverOk = false; detecting = false; detectedHigh = 0; - timer2->stop(); + timer2Active = false;; } if (detecting && reflectance < 0.2) { timeout(); } + if (timer2Active && lastTimestamp > 0) + lapsedTime2 += (timestamp - lastTimestamp )/1000; + + if (timer2Active && lapsedTime2 >= TIMER2_TIMEOUT) { + timeout2(); + } + + lastTimestamp = reading->timestamp(); } bool QHoverSensorGestureRecognizer::checkForHovering() @@ -192,7 +207,7 @@ void QHoverSensorGestureRecognizer::timeout() { if (checkForHovering()) { hoverOk = true; - timer2->start(); + timer2Active = true; } else { detecting = false; detectedHigh = 0; diff --git a/src/plugins/sensorgestures/qtsensors/qhoversensorgesturerecognizer.h b/src/plugins/sensorgestures/qtsensors/qhoversensorgesturerecognizer.h index 1fb0349f..cb9d81aa 100644 --- a/src/plugins/sensorgestures/qtsensors/qhoversensorgesturerecognizer.h +++ b/src/plugins/sensorgestures/qtsensors/qhoversensorgesturerecognizer.h @@ -44,7 +44,6 @@ #define QHOVERSENSORGESTURERECOGNIZER_H #include -#include #include "qtsensorgesturesensorhandler.h" @@ -75,8 +74,6 @@ private slots: private: QOrientationReading *orientationReading; qreal reflectance; - - QTimer *timer2; bool hoverOk; bool detecting; @@ -86,6 +83,11 @@ private: bool checkForHovering(); bool useHack; + quint64 lastTimestamp; + + bool timer2Active; + quint64 lapsedTime2; + }; QT_END_NAMESPACE #endif // QHOVERSENSORGESTURERECOGNIZER_H diff --git a/src/plugins/sensorgestures/qtsensors/qpickupsensorgesturerecognizer.cpp b/src/plugins/sensorgestures/qtsensors/qpickupsensorgesturerecognizer.cpp index 55724dc7..3fd0b2a2 100644 --- a/src/plugins/sensorgestures/qtsensors/qpickupsensorgesturerecognizer.cpp +++ b/src/plugins/sensorgestures/qtsensors/qpickupsensorgesturerecognizer.cpp @@ -44,14 +44,17 @@ #include #define RADIANS_TO_DEGREES 57.2957795 +#define TIMER_TIMEOUT 250 QT_BEGIN_NAMESPACE QPickupSensorGestureRecognizer::QPickupSensorGestureRecognizer(QObject *parent) : QSensorGestureRecognizer(parent) + , accelReading(0) , active(0) - , atRest(1) - , okToSignal(1) + , pXaxis(0) + , pYaxis(0) + , pZaxis(0) , lastpitch(0) , detecting(0) { @@ -63,12 +66,6 @@ QPickupSensorGestureRecognizer::~QPickupSensorGestureRecognizer() void QPickupSensorGestureRecognizer::create() { - timer = new QTimer(this); - - connect(timer,SIGNAL(timeout()),this,SLOT(timeout())); - timer->setSingleShot(true); - timer->setInterval(750); - } QString QPickupSensorGestureRecognizer::id() const @@ -79,12 +76,15 @@ QString QPickupSensorGestureRecognizer::id() const bool QPickupSensorGestureRecognizer::start() { if (QtSensorGestureSensorHandler::instance()->startSensor(QtSensorGestureSensorHandler::Accel)) { - active = true; - connect(QtSensorGestureSensorHandler::instance(),SIGNAL(accelReadingChanged(QAccelerometerReading *)), - this,SLOT(accelChanged(QAccelerometerReading *))); - } else { - active = false; - } + active = true; + connect(QtSensorGestureSensorHandler::instance(),SIGNAL(accelReadingChanged(QAccelerometerReading *)), + this,SLOT(accelChanged(QAccelerometerReading *))); + } else { + QtSensorGestureSensorHandler::instance()->stopSensor(QtSensorGestureSensorHandler::Accel); + active = false; + } + clear(); + return active; } @@ -95,7 +95,6 @@ bool QPickupSensorGestureRecognizer::stop() disconnect(QtSensorGestureSensorHandler::instance(),SIGNAL(accelReadingChanged(QAccelerometerReading*)), this,SLOT(accelChanged(QAccelerometerReading *))); active = false; - timer->stop(); return active; } @@ -105,102 +104,113 @@ bool QPickupSensorGestureRecognizer::isActive() return active; } -#define PICKUP_BOTTOM_THRESHOLD 20 -#define PICKUP_TOP_THRESHOLD 87 +#define PICKUP_BOTTOM_THRESHOLD 25 +#define PICKUP_TOP_THRESHOLD 80 +#define PICKUP_ANGLE_THRESHOLD 25 +#define PICKUP_ROLL_THRESHOLD 13 void QPickupSensorGestureRecognizer::accelChanged(QAccelerometerReading *reading) { accelReading = reading; const qreal x = reading->x(); - const qreal xdiff = pXaxis - x; const qreal y = reading->y(); - const qreal ydiff = pYaxis - y; const qreal z = reading->z(); + const qreal xdiff = pXaxis - x; + const qreal ydiff = pYaxis - y; const qreal zdiff = pZaxis - z; - pitch = qAtan(y / qSqrt(x*x + z*z)) * RADIANS_TO_DEGREES; + qreal pitch = qAtan(y / qSqrt(x*x + z*z)) * RADIANS_TO_DEGREES; + qreal roll = qAtan(x / qSqrt(y*y + z*z)) * RADIANS_TO_DEGREES; - if (zList.count() > 5) - zList.removeLast(); + if ((qAbs(xdiff) < 0.7 && qAbs(ydiff) < .7 && qAbs(zdiff) < .7) + || z < 0) { + detecting = false; + } else if (pitch > PICKUP_BOTTOM_THRESHOLD && pitch < PICKUP_TOP_THRESHOLD) { + detecting = true; + } - if (qAbs(xdiff) < 0.7 && qAbs(ydiff) < .7 && qAbs(zdiff) < .7) { - atRest = true; - } else { - atRest = false; + if ( pitchList.count() > 21) { + pitchList.removeFirst(); + } + if ( rollList.count() > 21) { + rollList.removeFirst(); } - if (detectingNegativeList.count() > 5) - detectingNegativeList.removeLast(); - - if (!detecting) { - zList.insert(0,z); + if (pitch > 1) { + pitchList.append(pitch); } - if (detecting && z < 0) { - okToSignal = false; - detecting = false; - detectingNegativeList.insert(0,true); - atRest = true; + if (roll > 1) { + rollList.append(roll); } - if (!atRest && !detecting && (lastpitch - pitch < -PICKUP_BOTTOM_THRESHOLD)) { - detecting = true; - if (!timer->isActive()) { - timer->start(); - } - detectedPitchDifference = lastpitch - pitch; - lastpitch = pitch; - okToSignal = true; + if (detecting && pitchList.count() > 5 ) { + timeout(); } + lastpitch = pitch; pXaxis = x; pYaxis = y; pZaxis = z; - if (atRest && !detecting) - lastpitch = pitch; } void QPickupSensorGestureRecognizer::timeout() { - const qreal x = accelReading->x(); - const qreal y = accelReading->y(); - const qreal z = accelReading->z(); - - const qreal roll = qAtan(x / qSqrt(y*y + z*z)) * RADIANS_TO_DEGREES; + qreal averageRoll = 0; + for (int r = 0; r < rollList.count(); r++) { + averageRoll += rollList.at(r); + } + averageRoll /= rollList.count(); - bool ok = true; - for (int i = 0; i < zList.count() - 1; i++) { - if (zList.at(i) < 0) { - ok = false; - } + if (averageRoll > PICKUP_ROLL_THRESHOLD) { + clear(); + return; + } + if (pitchList.isEmpty() + || pitchList.at(0) > PICKUP_BOTTOM_THRESHOLD) { + clear(); + return; } - if (ok) { - for (int i = 0; i < detectingNegativeList.count() - 1; i++) { - if (detectingNegativeList.at(i) == true) { - ok = false; + qreal previousPitch = 0; + qreal startPitch = -1.0; + int goodCount = 0; + + qreal averagePitch = 0; + for (int i = 0; i < pitchList.count(); i++) { + averagePitch += pitchList.at(i); + if (previousPitch < pitchList.at(i) + && qAbs(pitchList.at(i)) - qAbs(previousPitch) < 20) { + if (goodCount == 1 && previousPitch != 0) { + startPitch = previousPitch; } + goodCount++; } + + previousPitch = pitchList.at(i); + } + averagePitch /= pitchList.count(); + + if (averagePitch < 5) { + clear(); + return; } - if (ok && detecting - && okToSignal - && qAbs(roll) < 10 - && (pitch < PICKUP_TOP_THRESHOLD - && pitch > PICKUP_BOTTOM_THRESHOLD) - && (y > 4.0 && y < 10) - && (z > 4.0 && z < 10)) { + if (goodCount >= 3 && + (pitchList.last() < PICKUP_TOP_THRESHOLD + && pitchList.last() > PICKUP_BOTTOM_THRESHOLD) + && startPitch > 0 + && (pitchList.last() - startPitch) > PICKUP_ANGLE_THRESHOLD) { Q_EMIT pickup(); Q_EMIT detected("pickup"); } clear(); } - void QPickupSensorGestureRecognizer::clear() { - okToSignal = false; + pitchList.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 d7156c5d..2fd249fc 100644 --- a/src/plugins/sensorgestures/qtsensors/qpickupsensorgesturerecognizer.h +++ b/src/plugins/sensorgestures/qtsensors/qpickupsensorgesturerecognizer.h @@ -44,8 +44,6 @@ #define QPICKUPSENSORGESTURERECOGNIZER_H #include -#include - #include "qtsensorgesturesensorhandler.h" QT_BEGIN_NAMESPACE @@ -69,26 +67,21 @@ Q_SIGNALS: private slots: void accelChanged(QAccelerometerReading *reading); + void timeout(); private: QAccelerometerReading *accelReading; - QTimer *timer; bool active; - bool atRest; - bool okToSignal; - qreal pXaxis; qreal pYaxis; qreal pZaxis; - qreal pitch; qreal lastpitch; - qreal detectedPitchDifference; bool detecting; - QList detectingNegativeList; - QList zList; + QList pitchList; + QList rollList; void clear(); }; diff --git a/src/plugins/sensorgestures/qtsensors/qshake2recognizer.cpp b/src/plugins/sensorgestures/qtsensors/qshake2recognizer.cpp index cab6f45a..98f381f0 100644 --- a/src/plugins/sensorgestures/qtsensors/qshake2recognizer.cpp +++ b/src/plugins/sensorgestures/qtsensors/qshake2recognizer.cpp @@ -40,7 +40,6 @@ ****************************************************************************/ #include -#include #include "qshake2recognizer.h" #include @@ -54,6 +53,9 @@ QShake2SensorGestureRecognizer::QShake2SensorGestureRecognizer(QObject *parent) , shakeDirection(QShake2SensorGestureRecognizer::ShakeUndefined) , shaking(0) , shakeCount(0) + , lapsedTime(0) + , lastTimestamp(0), + timerActive(0) { timerTimeout = 250; } @@ -64,15 +66,10 @@ QShake2SensorGestureRecognizer::~QShake2SensorGestureRecognizer() void QShake2SensorGestureRecognizer::create() { - timer = new QTimer(this); - connect(timer,SIGNAL(timeout()),this,SLOT(timeout())); - timer->setSingleShot(true); - timer->setInterval(timerTimeout); } bool QShake2SensorGestureRecognizer::start() { - if (QtSensorGestureSensorHandler::instance()->startSensor(QtSensorGestureSensorHandler::Accel)) { active = true; connect(QtSensorGestureSensorHandler::instance(),SIGNAL(accelReadingChanged(QAccelerometerReading *)), @@ -86,6 +83,7 @@ bool QShake2SensorGestureRecognizer::start() shakeCount = 0; shaking = false; shakeDirection = QShake2SensorGestureRecognizer::ShakeUndefined; + return active; } @@ -95,7 +93,6 @@ bool QShake2SensorGestureRecognizer::stop() disconnect(QtSensorGestureSensorHandler::instance(),SIGNAL(accelReadingChanged(QAccelerometerReading *)), this,SLOT(accelChanged(QAccelerometerReading *))); active = false; - timer->stop(); return active; } @@ -118,6 +115,8 @@ void QShake2SensorGestureRecognizer::accelChanged(QAccelerometerReading *reading const qreal y = reading->y(); const qreal z = reading->z(); + const quint64 timestamp = reading->timestamp(); + currentData.x = x; currentData.y = y; currentData.z = z; @@ -132,13 +131,15 @@ void QShake2SensorGestureRecognizer::accelChanged(QAccelerometerReading *reading return; } - bool wasShake = checkForShake(prevData, currentData, THRESHOLD); + bool wasShake; + wasShake = checkForShake(prevData, currentData, THRESHOLD); if (!shaking && wasShake && shakeCount == NUMBER_SHAKES) { shaking = true; shakeCount = 0; - + lapsedTime = 0; + timerActive = false; switch (shakeDirection) { case QShake2SensorGestureRecognizer::ShakeLeft: Q_EMIT shakeLeft(); @@ -159,6 +160,7 @@ void QShake2SensorGestureRecognizer::accelChanged(QAccelerometerReading *reading default: break; }; + } else if (wasShake) { if (shakeCount == 0 && shakeDirection == QShake2SensorGestureRecognizer::ShakeUndefined) { @@ -167,7 +169,6 @@ void QShake2SensorGestureRecognizer::accelChanged(QAccelerometerReading *reading const int ydiff = prevData.x - currentData.y; const int max = qMax(qAbs(ydiff), qAbs(xdiff)); - if (max == qAbs(xdiff)) { if (isNegative(xdiff)) shakeDirection = QShake2SensorGestureRecognizer::ShakeLeft; @@ -182,14 +183,21 @@ void QShake2SensorGestureRecognizer::accelChanged(QAccelerometerReading *reading } } shakeCount++; - if (shakeCount == 3) { - timer->start(); + if (shakeCount == NUMBER_SHAKES) { + timerActive = true; } } + if (timerActive && lastTimestamp > 0) + lapsedTime += (timestamp - lastTimestamp )/1000; + + if (timerActive && lapsedTime >= timerTimeout) { + timeout(); + } prevData.x = currentData.x; prevData.y = currentData.y; prevData.z = currentData.z; + lastTimestamp = timestamp; } void QShake2SensorGestureRecognizer::timeout() @@ -197,6 +205,9 @@ void QShake2SensorGestureRecognizer::timeout() shakeCount = 0; shaking = false; shakeDirection = QShake2SensorGestureRecognizer::ShakeUndefined; + timerActive = false; + lapsedTime = 0; + lastTimestamp = 0; } bool QShake2SensorGestureRecognizer::checkForShake(ShakeData prevSensorData, ShakeData currentSensorData, qreal threshold) diff --git a/src/plugins/sensorgestures/qtsensors/qshake2recognizer.h b/src/plugins/sensorgestures/qtsensors/qshake2recognizer.h index d2348ee8..232d2adc 100644 --- a/src/plugins/sensorgestures/qtsensors/qshake2recognizer.h +++ b/src/plugins/sensorgestures/qtsensors/qshake2recognizer.h @@ -43,7 +43,6 @@ #define QSHAKERECOGNIZER_H #include -#include #include @@ -81,7 +80,6 @@ public: bool stop(); bool isActive(); - QTimer *timer; int timerTimeout; @@ -112,6 +110,9 @@ private: int threshold; bool isNegative(qreal num); + qreal lapsedTime; + quint64 lastTimestamp; + bool timerActive; }; QT_END_NAMESPACE #endif // QSHAKERECOGNIZER_H diff --git a/src/plugins/sensorgestures/qtsensors/qslamgesturerecognizer.cpp b/src/plugins/sensorgestures/qtsensors/qslamgesturerecognizer.cpp index 8c9fa913..a6e8339a 100644 --- a/src/plugins/sensorgestures/qtsensors/qslamgesturerecognizer.cpp +++ b/src/plugins/sensorgestures/qtsensors/qslamgesturerecognizer.cpp @@ -58,7 +58,10 @@ QSlamSensorGestureRecognizer::QSlamSensorGestureRecognizer(QObject *parent) : detecting(0), accelX(0), roll(0), - resting(0) + resting(0), + lastTimestamp(0), + lapsedTime(0), + timerActive(0) { } @@ -132,7 +135,7 @@ void QSlamSensorGestureRecognizer::accelChanged(QAccelerometerReading *reading) const qreal x = reading->x(); const qreal y = reading->y(); const qreal z = reading->z(); - + quint64 timestamp = reading->timestamp(); if (qAbs(lastX - x) < SLAM_RESTING_FACTOR && qAbs(lastY - y) < SLAM_RESTING_FACTOR @@ -146,6 +149,15 @@ void QSlamSensorGestureRecognizer::accelChanged(QAccelerometerReading *reading) restingList.removeLast(); restingList.insert(0, resting); + + if (timerActive && lastTimestamp > 0) + lapsedTime += (timestamp - lastTimestamp )/1000; + + if (timerActive && lapsedTime >= 250) { + doSlam(); + } + lastTimestamp = timestamp; + if (orientationReading == 0) { return; } @@ -167,7 +179,7 @@ void QSlamSensorGestureRecognizer::accelChanged(QAccelerometerReading *reading) } if (detecting && qAbs(difference) > (accelRange * SLAM_DETECTION_FACTOR)) { - QTimer::singleShot(225,this,SLOT(doSlam())); + timerActive = true; } if (detecting && (qAbs(difference) < SLAM_ZERO_FACTOR && qAbs(difference) > 0)) { @@ -197,6 +209,8 @@ void QSlamSensorGestureRecognizer::doSlam() restingList.clear(); detecting = false; } + timerActive = false; + lapsedTime = 0; } QT_END_NAMESPACE diff --git a/src/plugins/sensorgestures/qtsensors/qslamgesturerecognizer.h b/src/plugins/sensorgestures/qtsensors/qslamgesturerecognizer.h index 7798292a..49450334 100644 --- a/src/plugins/sensorgestures/qtsensors/qslamgesturerecognizer.h +++ b/src/plugins/sensorgestures/qtsensors/qslamgesturerecognizer.h @@ -92,6 +92,9 @@ private: bool resting; bool hasBeenResting(); + quint64 lastTimestamp; + quint64 lapsedTime; + bool timerActive; }; QT_END_NAMESPACE diff --git a/src/plugins/sensorgestures/qtsensors/qtsensorgesturesensorhandler.cpp b/src/plugins/sensorgestures/qtsensors/qtsensorgesturesensorhandler.cpp index bba26917..31a3f784 100644 --- a/src/plugins/sensorgestures/qtsensors/qtsensorgesturesensorhandler.cpp +++ b/src/plugins/sensorgestures/qtsensors/qtsensorgesturesensorhandler.cpp @@ -92,7 +92,7 @@ bool QtSensorGestureSensorHandler::startSensor(SensorGestureSensors sensor) if (accel == 0x0) { accel = new QAccelerometer(this); ok = accel->connectToBackend(); - accel->setDataRate(50); + accel->setDataRate(100); qoutputrangelist outputranges = accel->outputRanges(); if (outputranges.count() > 0) @@ -129,6 +129,7 @@ bool QtSensorGestureSensorHandler::startSensor(SensorGestureSensors sensor) //irproximity if (irProx == 0x0) { irProx = new QIRProximitySensor(this); + irProx->setDataRate(50); ok = irProx->connectToBackend(); connect(irProx,SIGNAL(readingChanged()),this,SLOT(irProximityChanged())); } diff --git a/src/plugins/sensorgestures/qtsensors/qturnoversensorgesturerecognizer.cpp b/src/plugins/sensorgestures/qtsensors/qturnoversensorgesturerecognizer.cpp index 6805dcac..8e30d3e8 100644 --- a/src/plugins/sensorgestures/qtsensors/qturnoversensorgesturerecognizer.cpp +++ b/src/plugins/sensorgestures/qtsensors/qturnoversensorgesturerecognizer.cpp @@ -111,7 +111,8 @@ QString QTurnoverSensorGestureRecognizer::id() const void QTurnoverSensorGestureRecognizer::proximityChanged(QProximityReading *reading) { isClose = reading->close(); - isRecognized(); + if (isClose) + isRecognized(); } void QTurnoverSensorGestureRecognizer::orientationReadingChanged(QOrientationReading *reading) diff --git a/src/plugins/sensorgestures/qtsensors/qturnoversensorgesturerecognizer.h b/src/plugins/sensorgestures/qtsensors/qturnoversensorgesturerecognizer.h index 4dc6e445..3319ac50 100644 --- a/src/plugins/sensorgestures/qtsensors/qturnoversensorgesturerecognizer.h +++ b/src/plugins/sensorgestures/qtsensors/qturnoversensorgesturerecognizer.h @@ -65,6 +65,7 @@ Q_SIGNALS: private slots: void orientationReadingChanged(QOrientationReading *reading); void proximityChanged(QProximityReading *reading); + void isRecognized(); private: @@ -72,7 +73,6 @@ private: bool isFaceDown; bool active; - void isRecognized(); QList zList; }; diff --git a/src/plugins/sensorgestures/qtsensors/qtwistsensorgesturerecognizer.cpp b/src/plugins/sensorgestures/qtsensors/qtwistsensorgesturerecognizer.cpp index 6d2f73ef..db0e9009 100644 --- a/src/plugins/sensorgestures/qtsensors/qtwistsensorgesturerecognizer.cpp +++ b/src/plugins/sensorgestures/qtsensors/qtwistsensorgesturerecognizer.cpp @@ -47,7 +47,7 @@ QT_BEGIN_NAMESPACE #define RADIANS_TO_DEGREES 57.2957795 - +#define TIMER_TIMEOUT 750 QTwistSensorGestureRecognizer::QTwistSensorGestureRecognizer(QObject *parent) : QSensorGestureRecognizer(parent) , orientationReading(0) @@ -92,6 +92,7 @@ bool QTwistSensorGestureRecognizer::start() active = false; } + return active; } @@ -144,7 +145,6 @@ bool QTwistSensorGestureRecognizer::checkOrientation() return true; } - void QTwistSensorGestureRecognizer::accelChanged(QAccelerometerReading *reading) { if (orientationReading == 0) diff --git a/src/plugins/sensorgestures/qtsensors/qtwistsensorgesturerecognizer.h b/src/plugins/sensorgestures/qtsensors/qtwistsensorgesturerecognizer.h index 94c2a960..a4b9ceb4 100644 --- a/src/plugins/sensorgestures/qtsensors/qtwistsensorgesturerecognizer.h +++ b/src/plugins/sensorgestures/qtsensors/qtwistsensorgesturerecognizer.h @@ -92,9 +92,7 @@ private: int decreaseCount; qreal lastAngle; QList orientationList; - qreal detectedAngle; - }; QT_END_NAMESPACE #endif // QWFLICKSENSORGESTURERECOGNIZER_H diff --git a/src/plugins/sensorgestures/qtsensors/qwhipsensorgesturerecognizer.cpp b/src/plugins/sensorgestures/qtsensors/qwhipsensorgesturerecognizer.cpp index 88af230b..d07a2eaa 100644 --- a/src/plugins/sensorgestures/qtsensors/qwhipsensorgesturerecognizer.cpp +++ b/src/plugins/sensorgestures/qtsensors/qwhipsensorgesturerecognizer.cpp @@ -45,6 +45,8 @@ #include +#define TIMER_TIMEOUT 850 + QT_BEGIN_NAMESPACE QWhipSensorGestureRecognizer::QWhipSensorGestureRecognizer(QObject *parent) @@ -56,7 +58,11 @@ QWhipSensorGestureRecognizer::QWhipSensorGestureRecognizer(QObject *parent) lastY(0), lastZ(0), detecting(0), - whipOk(0){ + whipOk(0) + , lastTimestamp(0) + , timerActive(0) + , lapsedTime(0) +{ } QWhipSensorGestureRecognizer::~QWhipSensorGestureRecognizer() @@ -65,10 +71,6 @@ QWhipSensorGestureRecognizer::~QWhipSensorGestureRecognizer() void QWhipSensorGestureRecognizer::create() { - timer = new QTimer(this); - connect(timer,SIGNAL(timeout()),this,SLOT(timeout())); - timer->setSingleShot(true); - timer->setInterval(850); } QString QWhipSensorGestureRecognizer::id() const @@ -94,6 +96,9 @@ bool QWhipSensorGestureRecognizer::start() } else { active = false; } + lastTimestamp = 0; + timerActive = false; + lapsedTime = 0; return active; } @@ -107,8 +112,6 @@ bool QWhipSensorGestureRecognizer::stop() disconnect(QtSensorGestureSensorHandler::instance(),SIGNAL(accelReadingChanged(QAccelerometerReading *)), this,SLOT(accelChanged(QAccelerometerReading *))); active = false; - timer->stop(); - return active; } @@ -131,6 +134,8 @@ void QWhipSensorGestureRecognizer::accelChanged(QAccelerometerReading *reading) const qreal y = reading->y(); qreal z = reading->z(); + quint64 timestamp = reading->timestamp(); + if (zList.count() > 4) zList.removeLast(); @@ -163,14 +168,13 @@ void QWhipSensorGestureRecognizer::accelChanged(QAccelerometerReading *reading) if (negativeList.count() > 5) negativeList.removeLast(); - if (z < WHIP_FACTOR && qAbs(diffX) > -(accelRange * .1285)//-5.0115 && qAbs(lastX) < 7 && qAbs(x) < 7) { whipMap.insert(0,true); - if (!detecting && !timer->isActive()) { - timer->start(); + if (!detecting && !timerActive) { + timerActive = true; detecting = true; } } else { @@ -190,6 +194,13 @@ void QWhipSensorGestureRecognizer::accelChanged(QAccelerometerReading *reading) lastX = x; lastY = y; lastZ = z; + + if (timerActive && lastTimestamp > 0) + lapsedTime += (timestamp - lastTimestamp )/1000; + + if (timerActive && lapsedTime >= TIMER_TIMEOUT) { + timeout(); + } } void QWhipSensorGestureRecognizer::timeout() @@ -211,6 +222,7 @@ void QWhipSensorGestureRecognizer::checkForWhip() whipOk = true; else return; + if (whipOk) { bool ok = true; for (int i = 0; i < negativeList.count() - 1; i++) { @@ -224,7 +236,7 @@ void QWhipSensorGestureRecognizer::checkForWhip() } detecting = false; whipMap.clear(); - timer->stop(); + timerActive = false; } } diff --git a/src/plugins/sensorgestures/qtsensors/qwhipsensorgesturerecognizer.h b/src/plugins/sensorgestures/qtsensors/qwhipsensorgesturerecognizer.h index ba7b84c3..e3ad7a05 100644 --- a/src/plugins/sensorgestures/qtsensors/qwhipsensorgesturerecognizer.h +++ b/src/plugins/sensorgestures/qtsensors/qwhipsensorgesturerecognizer.h @@ -73,7 +73,6 @@ private slots: private: QOrientationReading *orientationReading; - QTimer *timer; qreal accelRange; bool active; @@ -91,6 +90,12 @@ private: QList negativeList; QList zList; + + quint64 lastTimestamp; + + bool timerActive; + quint64 lapsedTime; + }; QT_END_NAMESPACE -- cgit v1.2.3