summaryrefslogtreecommitdiffstats
path: root/src/plugins/sensorgestures
diff options
context:
space:
mode:
authorLorn Potter <lorn.potter@nokia.com>2012-05-16 10:45:30 +1000
committerThe Qt Project <gerrit-noreply@qt-project.org>2012-11-14 04:18:47 +0100
commit5e2502dc7c8ab86c023b8cddb840b1728169a13d (patch)
tree83bf0d2b42accc4f5dd68fde590a6708196b9206 /src/plugins/sensorgestures
parentce33c04b01fcd368c506335c2f105efbe9f4f702 (diff)
remove the need to use QTimer and use timestamps instead.
Change-Id: I6327357de9f84df3db86d714747210fe62547818 Reviewed-by: Lorn Potter <lorn.potter@gmail.com>
Diffstat (limited to 'src/plugins/sensorgestures')
-rw-r--r--src/plugins/sensorgestures/qtsensors/qhoversensorgesturerecognizer.cpp33
-rw-r--r--src/plugins/sensorgestures/qtsensors/qhoversensorgesturerecognizer.h8
-rw-r--r--src/plugins/sensorgestures/qtsensors/qpickupsensorgesturerecognizer.cpp150
-rw-r--r--src/plugins/sensorgestures/qtsensors/qpickupsensorgesturerecognizer.h13
-rw-r--r--src/plugins/sensorgestures/qtsensors/qshake2recognizer.cpp35
-rw-r--r--src/plugins/sensorgestures/qtsensors/qshake2recognizer.h5
-rw-r--r--src/plugins/sensorgestures/qtsensors/qslamgesturerecognizer.cpp20
-rw-r--r--src/plugins/sensorgestures/qtsensors/qslamgesturerecognizer.h3
-rw-r--r--src/plugins/sensorgestures/qtsensors/qtsensorgesturesensorhandler.cpp3
-rw-r--r--src/plugins/sensorgestures/qtsensors/qturnoversensorgesturerecognizer.cpp3
-rw-r--r--src/plugins/sensorgestures/qtsensors/qturnoversensorgesturerecognizer.h2
-rw-r--r--src/plugins/sensorgestures/qtsensors/qtwistsensorgesturerecognizer.cpp4
-rw-r--r--src/plugins/sensorgestures/qtsensors/qtwistsensorgesturerecognizer.h2
-rw-r--r--src/plugins/sensorgestures/qtsensors/qwhipsensorgesturerecognizer.cpp34
-rw-r--r--src/plugins/sensorgestures/qtsensors/qwhipsensorgesturerecognizer.h7
15 files changed, 194 insertions, 128 deletions
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 <math.h>
+#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 <QSensorGestureRecognizer>
-#include <QTimer>
#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 <QtCore/qmath.h>
#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 <qsensorgesturerecognizer.h>
-#include <QTimer>
-
#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 <bool> detectingNegativeList;
- QList <qreal> zList;
+ QList <qreal> pitchList;
+ QList <qreal> 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 <QDebug>
-#include <QTimer>
#include "qshake2recognizer.h"
#include <math.h>
@@ -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 <QDebug>
-#include <QTimer>
#include <qsensorgesturerecognizer.h>
@@ -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<qreal> 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 <QOrientationReading::Orientation> 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 <QtCore/qmath.h>
+#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 <bool> negativeList;
QList<qreal> zList;
+
+ quint64 lastTimestamp;
+
+ bool timerActive;
+ quint64 lapsedTime;
+
};
QT_END_NAMESPACE