diff options
author | Lorn Potter <lorn.potter@nokia.com> | 2012-05-10 09:00:58 +1000 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-05-11 11:51:15 +0200 |
commit | fb06538ffb57d82ae63b61dc7798f740fe27ba3e (patch) | |
tree | 229bbde8fa8b856e5999ea3f340f68ab35254957 /src/plugins/sensorgestures/shake | |
parent | d45a9503de3f94a9630a34efb0e9ea02f894856e (diff) |
fix up gestures for auto test data
slam and other gestures need to be performed the way the test data
shows.
slam is effected the most as now the gesture needs no hold at end to be
recognized, in accordance with data collected.
Change-Id: Iedfcf8e42def0b1dfe1c4d289a416ca64d8846e1
Reviewed-by: Lincoln Ramsay <lincoln.ramsay@nokia.com>
Diffstat (limited to 'src/plugins/sensorgestures/shake')
-rw-r--r-- | src/plugins/sensorgestures/shake/qshakerecognizer.cpp | 36 | ||||
-rw-r--r-- | src/plugins/sensorgestures/shake/qshakerecognizer.h | 4 |
2 files changed, 28 insertions, 12 deletions
diff --git a/src/plugins/sensorgestures/shake/qshakerecognizer.cpp b/src/plugins/sensorgestures/shake/qshakerecognizer.cpp index df64402f..a296eb0d 100644 --- a/src/plugins/sensorgestures/shake/qshakerecognizer.cpp +++ b/src/plugins/sensorgestures/shake/qshakerecognizer.cpp @@ -46,7 +46,10 @@ QShakeSensorGestureRecognizer::QShakeSensorGestureRecognizer(QObject *parent) : QSensorGestureRecognizer(parent) + , timerTimeout(450) , active(0) + , shaking(0) + , shakeCount(0) { } @@ -58,6 +61,7 @@ void QShakeSensorGestureRecognizer::create() { accel = new QAccelerometer(this); accel->connectToBackend(); + accel->setDataRate(50); qoutputrangelist outputranges = accel->outputRanges(); @@ -67,7 +71,10 @@ void QShakeSensorGestureRecognizer::create() accelRange = 4; //this should never happen connect(accel,SIGNAL(readingChanged()),this,SLOT(accelChanged())); - + timer = new QTimer(this); + connect(timer,SIGNAL(timeout()),this,SLOT(timeout())); + timer->setSingleShot(true); + timer->setInterval(timerTimeout); } bool QShakeSensorGestureRecognizer::start() @@ -109,27 +116,26 @@ void QShakeSensorGestureRecognizer::accelChanged() if (qAbs(prevData.x - currentData.x) < 1 && qAbs(prevData.y - currentData.y) < 1 && qAbs(prevData.z - currentData.z) < 1) { - prevData.x = currentData.x; prevData.y = currentData.y; prevData.z = currentData.z; return; } - - if (!shaking && checkForShake(prevData, currentData, THRESHOLD) && + bool wasShake = checkForShake(prevData, currentData, THRESHOLD); + if (!shaking && wasShake && shakeCount >= NUMBER_SHAKES) { shaking = true; shakeCount = 0; - Q_EMIT shake(); Q_EMIT detected("shake"); - } else if (checkForShake(prevData, currentData, THRESHOLD)) { + } else if (wasShake) { + shakeCount++; - } else if (!checkForShake(prevData, currentData, 200)) { - shakeCount = 0; - shaking = false; + if (shakeCount > NUMBER_SHAKES) { + timer->start(); + } } prevData.x = currentData.x; @@ -137,6 +143,11 @@ void QShakeSensorGestureRecognizer::accelChanged() prevData.z = currentData.z; } +void QShakeSensorGestureRecognizer::timeout() +{ + shakeCount = 0; + shaking = false; +} bool QShakeSensorGestureRecognizer::checkForShake(AccelData prevSensorData, AccelData currentSensorData, qreal threshold) { @@ -144,8 +155,9 @@ bool QShakeSensorGestureRecognizer::checkForShake(AccelData prevSensorData, Acce double deltaY = qAbs(prevSensorData.y - currentSensorData.y); double deltaZ = qAbs(prevSensorData.z - currentSensorData.z); - return (deltaX > threshold && deltaY > threshold) || - (deltaX > threshold && deltaZ > threshold) || - (deltaY > threshold && deltaZ > threshold); + return (deltaX > threshold + || deltaY > threshold + || deltaZ > threshold); + (deltaY > threshold && deltaZ > threshold); } diff --git a/src/plugins/sensorgestures/shake/qshakerecognizer.h b/src/plugins/sensorgestures/shake/qshakerecognizer.h index dfba26b3..96a6e2fd 100644 --- a/src/plugins/sensorgestures/shake/qshakerecognizer.h +++ b/src/plugins/sensorgestures/shake/qshakerecognizer.h @@ -73,11 +73,15 @@ public: bool stop(); bool isActive(); + QTimer *timer; + int timerTimeout; + Q_SIGNALS: void shake(); private slots: void accelChanged(); + void timeout(); private: QAccelerometer *accel; bool active; |