summaryrefslogtreecommitdiffstats
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
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>
-rw-r--r--doc/src/qtsensorgestures-plugins.qdoc8
-rw-r--r--src/plugins/sensorgestures/qtsensors/qcoversensorgesturerecognizer.cpp41
-rw-r--r--src/plugins/sensorgestures/qtsensors/qcoversensorgesturerecognizer.h6
-rw-r--r--src/plugins/sensorgestures/qtsensors/qhoversensorgesturerecognizer.cpp9
-rw-r--r--src/plugins/sensorgestures/qtsensors/qshake2recognizer.cpp13
-rw-r--r--src/plugins/sensorgestures/qtsensors/qslamgesturerecognizer.cpp55
-rw-r--r--src/plugins/sensorgestures/qtsensors/qslamgesturerecognizer.h3
-rw-r--r--src/plugins/sensorgestures/qtsensors/qtsensorgesturesensorhandler.cpp1
-rw-r--r--src/plugins/sensorgestures/qtsensors/qtwistsensorgesturerecognizer.cpp48
-rw-r--r--src/plugins/sensorgestures/qtsensors/qwhipsensorgesturerecognizer.cpp7
-rw-r--r--src/plugins/sensorgestures/shake/qshakerecognizer.cpp36
-rw-r--r--src/plugins/sensorgestures/shake/qshakerecognizer.h4
12 files changed, 118 insertions, 113 deletions
diff --git a/doc/src/qtsensorgestures-plugins.qdoc b/doc/src/qtsensorgestures-plugins.qdoc
index 72a81213..0a5b2fe0 100644
--- a/doc/src/qtsensorgestures-plugins.qdoc
+++ b/doc/src/qtsensorgestures-plugins.qdoc
@@ -117,7 +117,7 @@ For QtSensorGestures plugin:
\row
\li QtSensors.cover
\li cover
- \li Hand covers up phone display for one second, when it's face up, using the IR Proximity and Orientation sensors.
+ \li Hand covers up phone display for one second, when it's face up, using the Proximity and Orientation sensors.
\li \image sensorgesture-cover.png
\row
\li QtSensors.doubletap
@@ -127,7 +127,7 @@ For QtSensorGestures plugin:
\row
\li QtSensors.hover
\li hover
- \li Hand hovers about 5 cm above the phone for more than 1 second, then is removed when face up,
+ \li Hand hovers about 4 cm above the phone for more than 1 second, then is removed when face up,
using the IR Proximity sensor.
\li \image sensorgesture-hover.png
\row
@@ -143,8 +143,8 @@ For QtSensorGestures plugin:
\row
\li QtSensors.slam
\li slam
- \li Phone is held in a top up position with a side facing forward for a moment. Swing it with a downward motion and then
- hold stationary briefly, like it is being used to point at something with the top corner. using the Accelerometer and Orientation sensors.
+ \li Phone is held in a top up position with a side facing forward for a moment. Swing it quickly with a downward motion
+ like it is being used to point at something with the top corner. using the Accelerometer and Orientation sensors.
\li \image sensorgesture-slam_1.png
\image sensorgesture-slam_2.png
\row
diff --git a/src/plugins/sensorgestures/qtsensors/qcoversensorgesturerecognizer.cpp b/src/plugins/sensorgestures/qtsensors/qcoversensorgesturerecognizer.cpp
index bfc1f827..1af52f07 100644
--- a/src/plugins/sensorgestures/qtsensors/qcoversensorgesturerecognizer.cpp
+++ b/src/plugins/sensorgestures/qtsensors/qcoversensorgesturerecognizer.cpp
@@ -46,7 +46,7 @@ QT_BEGIN_NAMESPACE
QCoverSensorGestureRecognizer::QCoverSensorGestureRecognizer(QObject *parent) :
QSensorGestureRecognizer(parent),
- orientationReading(0), proximityReading(0),lastProx(0), active(0), detecting(0)
+ orientationReading(0), proximityReading(0),active(0), detecting(0)
{
}
@@ -59,7 +59,7 @@ void QCoverSensorGestureRecognizer::create()
timer = new QTimer(this);
connect(timer,SIGNAL(timeout()),this,SLOT(timeout()));
timer->setSingleShot(true);
- timer->setInterval(1000);
+ timer->setInterval(750);
}
QString QCoverSensorGestureRecognizer::id() const
@@ -69,16 +69,16 @@ QString QCoverSensorGestureRecognizer::id() const
bool QCoverSensorGestureRecognizer::start()
{
- if (QtSensorGestureSensorHandler::instance()->startSensor(QtSensorGestureSensorHandler::IrProximity)) {
+ if (QtSensorGestureSensorHandler::instance()->startSensor(QtSensorGestureSensorHandler::Proximity)) {
if (QtSensorGestureSensorHandler::instance()->startSensor(QtSensorGestureSensorHandler::Orientation)) {
active = true;
- connect(QtSensorGestureSensorHandler::instance(),SIGNAL(irProximityReadingChanged(QIRProximityReading *)),
- this,SLOT(proximityChanged(QIRProximityReading *)));
+ 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::IrProximity);
+ QtSensorGestureSensorHandler::instance()->stopSensor(QtSensorGestureSensorHandler::Proximity);
active = false;
}
} else {
@@ -89,13 +89,13 @@ bool QCoverSensorGestureRecognizer::start()
bool QCoverSensorGestureRecognizer::stop()
{
- QtSensorGestureSensorHandler::instance()->stopSensor(QtSensorGestureSensorHandler::IrProximity);
+ QtSensorGestureSensorHandler::instance()->stopSensor(QtSensorGestureSensorHandler::Proximity);
QtSensorGestureSensorHandler::instance()->stopSensor(QtSensorGestureSensorHandler::Orientation);
- disconnect(QtSensorGestureSensorHandler::instance(),SIGNAL(irProximityReadingChanged(QIRProximityReading *)),
- this,SLOT(proximityChanged(QIRProximityReading *)));
+ disconnect(QtSensorGestureSensorHandler::instance(),SIGNAL(proximityReadingChanged(QProximityReading *)),
+ this,SLOT(proximityChanged(QProximityReading *)));
disconnect(QtSensorGestureSensorHandler::instance(),SIGNAL(orientationReadingChanged(QOrientationReading *)),
- this,SLOT(orientationReadingChanged(QOrientationReading *)));
+ this,SLOT(orientationReadingChanged(QOrientationReading *)));
active = false;
@@ -107,32 +107,22 @@ bool QCoverSensorGestureRecognizer::isActive()
return active;
}
-void QCoverSensorGestureRecognizer::proximityChanged(QIRProximityReading *reading)
+void QCoverSensorGestureRecognizer::proximityChanged(QProximityReading *reading)
{
if (orientationReading == 0)
return;
- proximityReading = reading->reflectance();
- const qreal difference = lastProx - proximityReading;
+ proximityReading = reading->close();
- if (qAbs(difference) < .15) {
- return;
- }
// look at case of face up->face down->face up.
if (orientationReading->orientation() == QOrientationReading::FaceUp
- && proximityReading > .55) {
+ && proximityReading) {
if (!timer->isActive()) {
timer->start();
detecting = true;
}
}
- if (proximityReading < .55) {
- if (timer->isActive()) {
- timer->stop();
- detecting = false;
- }
- }
- lastProx = proximityReading;
+ lastTs = reading->timestamp();
}
void QCoverSensorGestureRecognizer::orientationReadingChanged(QOrientationReading *reading)
@@ -143,12 +133,11 @@ void QCoverSensorGestureRecognizer::orientationReadingChanged(QOrientationReadin
void QCoverSensorGestureRecognizer::timeout()
{
if ((orientationReading->orientation() == QOrientationReading::FaceUp)
- && proximityReading > 0.55) {
+ && proximityReading) {
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 475ad518..93627448 100644
--- a/src/plugins/sensorgestures/qtsensors/qcoversensorgesturerecognizer.h
+++ b/src/plugins/sensorgestures/qtsensors/qcoversensorgesturerecognizer.h
@@ -68,20 +68,20 @@ Q_SIGNALS:
void cover();
private slots:
- void proximityChanged(QIRProximityReading *reading);
+ void proximityChanged(QProximityReading *reading);
void orientationReadingChanged(QOrientationReading *reading);
void timeout();
private:
QOrientationReading *orientationReading;
- qreal proximityReading;
+ bool proximityReading;
QTimer *timer;
- bool lastProx;
QtSensorGestureSensorHandler *handler;
bool active;
bool detecting;
+ qreal lastTs;
};
QT_END_NAMESPACE
diff --git a/src/plugins/sensorgestures/qtsensors/qhoversensorgesturerecognizer.cpp b/src/plugins/sensorgestures/qtsensors/qhoversensorgesturerecognizer.cpp
index bb392d9b..8a12ee7a 100644
--- a/src/plugins/sensorgestures/qtsensors/qhoversensorgesturerecognizer.cpp
+++ b/src/plugins/sensorgestures/qtsensors/qhoversensorgesturerecognizer.cpp
@@ -103,13 +103,7 @@ void QHoverSensorGestureRecognizer::irProximityReadingChanged(QIRProximityReadin
{
reflectance = reading->reflectance();
- if (reflectance > .51) {
- hoverOk = false;
- detecting = false;
- return;
- }
-
- if (!detecting && (reflectance > .35 && reflectance < .50)) {
+ if (!detecting && (reflectance > .25 && reflectance < .50)) {
detecting = true;
timer->start();
timer2->start();
@@ -117,7 +111,6 @@ void QHoverSensorGestureRecognizer::irProximityReadingChanged(QIRProximityReadin
} else if (hoverOk && detecting
&& reflectance < .33
- // && detectedHigh
) {
// went light again after 1 seconds
Q_EMIT hover();
diff --git a/src/plugins/sensorgestures/qtsensors/qshake2recognizer.cpp b/src/plugins/sensorgestures/qtsensors/qshake2recognizer.cpp
index 738d720b..a2d0eb48 100644
--- a/src/plugins/sensorgestures/qtsensors/qshake2recognizer.cpp
+++ b/src/plugins/sensorgestures/qtsensors/qshake2recognizer.cpp
@@ -55,7 +55,7 @@ QShake2SensorGestureRecognizer::QShake2SensorGestureRecognizer(QObject *parent)
, shaking(0)
, shakeCount(0)
{
- timerTimeout = 750;
+ timerTimeout = 250;
}
QShake2SensorGestureRecognizer::~QShake2SensorGestureRecognizer()
@@ -125,7 +125,8 @@ void QShake2SensorGestureRecognizer::accelChanged(QAccelerometerReading *reading
return;
}
- if (!shaking && checkForShake(prevData, currentData, THRESHOLD) &&
+ bool wasShake = checkForShake(prevData, currentData, THRESHOLD);
+ if (!shaking && wasShake &&
shakeCount >= NUMBER_SHAKES) {
shaking = true;
shakeCount = 0;
@@ -151,7 +152,7 @@ void QShake2SensorGestureRecognizer::accelChanged(QAccelerometerReading *reading
break;
};
- } else if (checkForShake(prevData, currentData, THRESHOLD)) {
+ } else if (wasShake) {
if (shakeCount == 0 && shakeDirection == QShake2SensorGestureRecognizer::ShakeUndefined) {
@@ -174,8 +175,9 @@ void QShake2SensorGestureRecognizer::accelChanged(QAccelerometerReading *reading
}
}
shakeCount++;
- timer->start();
-
+ if (shakeCount == 3) {
+ timer->start();
+ }
}
prevData.x = currentData.x;
@@ -191,6 +193,7 @@ void QShake2SensorGestureRecognizer::timeout()
shakeDirection = QShake2SensorGestureRecognizer::ShakeUndefined;
}
+
bool QShake2SensorGestureRecognizer::checkForShake(ShakeData prevSensorData, ShakeData currentSensorData, qreal threshold)
{
const double deltaX = qAbs(prevSensorData.x - currentSensorData.x);
diff --git a/src/plugins/sensorgestures/qtsensors/qslamgesturerecognizer.cpp b/src/plugins/sensorgestures/qtsensors/qslamgesturerecognizer.cpp
index e676122d..bdf38d31 100644
--- a/src/plugins/sensorgestures/qtsensors/qslamgesturerecognizer.cpp
+++ b/src/plugins/sensorgestures/qtsensors/qslamgesturerecognizer.cpp
@@ -68,10 +68,6 @@ QSlamSensorGestureRecognizer::~QSlamSensorGestureRecognizer()
void QSlamSensorGestureRecognizer::create()
{
- timer = new QTimer(this);
- connect(timer,SIGNAL(timeout()),this,SLOT(checkForSlam()));
- timer->setSingleShot(true);
- timer->setInterval(500);
}
@@ -110,6 +106,8 @@ bool QSlamSensorGestureRecognizer::stop()
disconnect(QtSensorGestureSensorHandler::instance(),SIGNAL(accelReadingChanged(QAccelerometerReading *)),
this,SLOT(accelChanged(QAccelerometerReading *)));
+ detecting = false;
+ restingList.clear();
active = false;
return active;
}
@@ -124,9 +122,10 @@ void QSlamSensorGestureRecognizer::orientationReadingChanged(QOrientationReading
orientationReading = reading;
}
-#define SLAM_DETECTION_FACTOR 0.15 // 5.85
-
-#define SLAM_Y_DEGREES 15
+#define SLAM_DETECTION_FACTOR 0.3 // 11.7
+#define SLAM_RESTING_FACTOR 2.5
+#define SLAM_RESTING_COUNT 5
+#define SLAM_ZERO_FACTOR .02
void QSlamSensorGestureRecognizer::accelChanged(QAccelerometerReading *reading)
{
@@ -134,30 +133,28 @@ void QSlamSensorGestureRecognizer::accelChanged(QAccelerometerReading *reading)
const qreal y = reading->y();
const qreal z = reading->z();
- if (qAbs(lastX - x) < 2 && qAbs(lastY - y) < 2 && qAbs(lastZ - z) < 2) {
+
+ if (qAbs(lastX - x) < SLAM_RESTING_FACTOR
+ && qAbs(lastY - y) < SLAM_RESTING_FACTOR
+ && qAbs(lastZ - z) < SLAM_RESTING_FACTOR) {
resting = true;
} else {
resting = false;
}
- if (restingList.count() > 5)
+ if (restingList.count() > SLAM_RESTING_COUNT)
restingList.removeLast();
restingList.insert(0, resting);
- if (orientationReading == 0)
+ if (orientationReading == 0) {
return;
+ }
const qreal difference = lastX - x;
- if (!timer->isActive()
- && detecting
- && (orientationReading->orientation() == QOrientationReading::RightUp
- || orientationReading->orientation() == QOrientationReading::LeftUp)
- && resting) {
- timer->start();
- }
if (!detecting
&& orientationReading->orientation() == QOrientationReading::TopUp
+ && resting
&& hasBeenResting()) {
detectedX = x;
// start of gesture
@@ -168,13 +165,19 @@ void QSlamSensorGestureRecognizer::accelChanged(QAccelerometerReading *reading)
wasNegative = true;
restingList.clear();
}
-
+ if (detecting
+ && qAbs(difference) > (accelRange * SLAM_DETECTION_FACTOR)) {
+ QTimer::singleShot(225,this,SLOT(doSlam()));
+ }
+ if (detecting &&
+ (qAbs(difference) < SLAM_ZERO_FACTOR && qAbs(difference) > 0)) {
+ detecting = false;
+ }
lastX = x;
lastY = y;
lastZ = z;
}
-
bool QSlamSensorGestureRecognizer::hasBeenResting()
{
for (int i = 0; i < restingList.count() - 1; i++) {
@@ -185,21 +188,15 @@ bool QSlamSensorGestureRecognizer::hasBeenResting()
return true;
}
-void QSlamSensorGestureRecognizer::checkForSlam()
+void QSlamSensorGestureRecognizer::doSlam()
{
- if (!hasBeenResting()) {
- detecting = false;
- return;
- }
-
- if (detecting && (orientationReading->orientation() == QOrientationReading::RightUp // 3 or 4
- || orientationReading->orientation() == QOrientationReading::LeftUp)) {
+ if (detecting && (orientationReading->orientation() == QOrientationReading::RightUp
+ || orientationReading->orientation() == QOrientationReading::LeftUp)) {
Q_EMIT slam();
Q_EMIT detected("slam");
restingList.clear();
+ detecting = false;
}
-
- detecting = false;
}
QT_END_NAMESPACE
diff --git a/src/plugins/sensorgestures/qtsensors/qslamgesturerecognizer.h b/src/plugins/sensorgestures/qtsensors/qslamgesturerecognizer.h
index ede338fa..7d770e64 100644
--- a/src/plugins/sensorgestures/qtsensors/qslamgesturerecognizer.h
+++ b/src/plugins/sensorgestures/qtsensors/qslamgesturerecognizer.h
@@ -69,13 +69,12 @@ Q_SIGNALS:
private slots:
void accelChanged(QAccelerometerReading *reading);
void orientationReadingChanged(QOrientationReading *reading);
- void checkForSlam();
+ void doSlam();
private:
QAccelerometer *accel;
QOrientationReading *orientationReading;
- QTimer *timer;
int accelRange;
bool active;
diff --git a/src/plugins/sensorgestures/qtsensors/qtsensorgesturesensorhandler.cpp b/src/plugins/sensorgestures/qtsensors/qtsensorgesturesensorhandler.cpp
index 3ed052ce..2d7374c2 100644
--- a/src/plugins/sensorgestures/qtsensors/qtsensorgesturesensorhandler.cpp
+++ b/src/plugins/sensorgestures/qtsensors/qtsensorgesturesensorhandler.cpp
@@ -109,6 +109,7 @@ bool QtSensorGestureSensorHandler::startSensor(SensorGestureSensors sensor)
if (orientation == 0x0) {
orientation = new QOrientationSensor(this);
ok = orientation->connectToBackend();
+ orientation->setDataRate(50);
connect(orientation,SIGNAL(readingChanged()),this,SLOT(orientationChanged()));
}
if (ok && !orientation->isActive())
diff --git a/src/plugins/sensorgestures/qtsensors/qtwistsensorgesturerecognizer.cpp b/src/plugins/sensorgestures/qtsensors/qtwistsensorgesturerecognizer.cpp
index 3956f17d..002f838e 100644
--- a/src/plugins/sensorgestures/qtsensors/qtwistsensorgesturerecognizer.cpp
+++ b/src/plugins/sensorgestures/qtsensors/qtwistsensorgesturerecognizer.cpp
@@ -72,7 +72,7 @@ void QTwistSensorGestureRecognizer::create()
timer = new QTimer(this);
connect(timer,SIGNAL(timeout()),this,SLOT(timeout()));
timer->setSingleShot(true);
- timer->setInterval(500);
+ timer->setInterval(750);
}
QString QTwistSensorGestureRecognizer::id() const
@@ -142,15 +142,28 @@ void QTwistSensorGestureRecognizer::accelChanged(QAccelerometerReading *reading)
if (orientationReading == 0)
return;
+ if (negativeList.count() > 5)
+ negativeList.removeLast();
+
+ if ((((x < 0 && lastX > 0) || (x > 0 && lastX < 0)) && qAbs(diffX) > (accelRange * 0.35))
+ || (x < 0 && lastX < 0 && qAbs(diffX > accelRange * 0.35))
+ || (x > 0 && lastX > 0 && qAbs(diffX > accelRange * 0.35))
+ || (((y < 0 && lastY > 0) || (y > 0 && lastY < 0)) && qAbs(diffY) > (accelRange * 0.35))) {
+ negativeList.insert(0,true);
+ } else {
+ negativeList.insert(0,false);
+ }
+
+ if (detecting
+ && isShake()) {
+ // if shake-like:
+ detecting = false;
+ timer->stop();
+ lastRoll = degrees;
+ }
+
if (rollList.count() > 4) {
if (detecting
- && isShake()) {
- // if shake-like:
- detecting = false;
- timer->stop();
- lastRoll = degrees;
- }
- if (detecting
&& qAbs(degrees) < RESTING_VARIANCE
&& qAbs(pitch) < RESTING_VARIANCE
&& (qAbs(lastRoll + degrees) > (degrees / 2))
@@ -175,7 +188,6 @@ void QTwistSensorGestureRecognizer::accelChanged(QAccelerometerReading *reading)
detecting = true;
timer->start();
lastRoll = degrees;
- lastOrientation = orientationReading->orientation();
}
if (detecting && (orientationReading->orientation() == QOrientationReading::TopUp
@@ -187,16 +199,6 @@ void QTwistSensorGestureRecognizer::accelChanged(QAccelerometerReading *reading)
}
}
- if (negativeList.count() > 5)
- negativeList.removeLast();
-
- if ((((x < 0 && lastX > 0) || (x > 0 && lastX < 0)) && qAbs(diffX) > (accelRange * 0.5))
- || (((y < 0 && lastY > 0) || (y > 0 && lastY < 0)) && qAbs(diffY) > (accelRange * 0.5))) {
- negativeList.insert(0,true);
- } else {
- negativeList.insert(0,false);
- }
-
if (rollList.count() > 5)
rollList.removeLast();
rollList.insert(0,degrees);
@@ -208,17 +210,17 @@ void QTwistSensorGestureRecognizer::timeout()
{
detecting = false;
lastRoll = 0;
- lastOrientation = QOrientationReading::Undefined;
}
bool QTwistSensorGestureRecognizer::isShake()
{
- for (int i = 0; i < negativeList.count() - 1; i++) {
+ int count = 0;
+ for (int i = 1; i < negativeList.count() - 1; i++) {
if (negativeList.at(i)) {
- return true;
+ count++;
}
}
- return false;
+ return (count > 1);
}
diff --git a/src/plugins/sensorgestures/qtsensors/qwhipsensorgesturerecognizer.cpp b/src/plugins/sensorgestures/qtsensors/qwhipsensorgesturerecognizer.cpp
index f087dce6..c702010e 100644
--- a/src/plugins/sensorgestures/qtsensors/qwhipsensorgesturerecognizer.cpp
+++ b/src/plugins/sensorgestures/qtsensors/qwhipsensorgesturerecognizer.cpp
@@ -157,6 +157,7 @@ void QWhipSensorGestureRecognizer::accelChanged(QAccelerometerReading *reading)
if (whipMap.count() > 5)
whipMap.removeLast();
+//qDebug() << z << qAbs(diffX) << qAbs(lastX) << qAbs(x) ;
if (z < WHIP_FACTOR
&& qAbs(diffX) > -(accelRange * .1285)//-5.0115
@@ -166,6 +167,7 @@ void QWhipSensorGestureRecognizer::accelChanged(QAccelerometerReading *reading)
if (!detecting && !timer->isActive()) {
timer->start();
detecting = true;
+// qDebug() << "start detecting";
}
} else {
whipMap.insert(0,false);
@@ -196,6 +198,8 @@ void QWhipSensorGestureRecognizer::timeout()
void QWhipSensorGestureRecognizer::checkForWhip()
{
+ // qDebug() << __FUNCTION__;
+
whipOk = false;
qreal averageZ = 0;
@@ -203,11 +207,12 @@ void QWhipSensorGestureRecognizer::checkForWhip()
averageZ += az;
}
averageZ /= zList.count();
+ // qDebug() << qAbs(averageZ) << zList << whipMap;
if (qAbs(averageZ) < 5.0)
return;
- for (int i = 0; i < whipMap.count() - 2; i++) {
+ for (int i = 0; i < 3; i++) {
if (!whipMap.at(i)) {
whipOk = true;
} else {
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;