summaryrefslogtreecommitdiffstats
path: root/src/plugins/sensorgestures/shake
diff options
context:
space:
mode:
authorLorn Potter <lorn.potter@nokia.com>2012-05-10 09:00:58 +1000
committerQt by Nokia <qt-info@nokia.com>2012-05-11 11:51:15 +0200
commitfb06538ffb57d82ae63b61dc7798f740fe27ba3e (patch)
tree229bbde8fa8b856e5999ea3f340f68ab35254957 /src/plugins/sensorgestures/shake
parentd45a9503de3f94a9630a34efb0e9ea02f894856e (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.cpp36
-rw-r--r--src/plugins/sensorgestures/shake/qshakerecognizer.h4
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;