From 79ca9ff2e8fb94e58a0891964bec18a1230fd6c3 Mon Sep 17 00:00:00 2001 From: Lorn Potter Date: Tue, 14 Feb 2012 17:13:47 +1000 Subject: finalize slam gesture, and fix up some others. Change-Id: I307492e32ea04d29d8f29cc91f40298d00ae7201 Reviewed-by: Lincoln Ramsay --- .../qtsensors/qpickupsensorgesturerecognizer.cpp | 30 ++++++++++------------ .../qtsensors/qpickupsensorgesturerecognizer.h | 1 + .../qtsensors/qslamgesturerecognizer.cpp | 29 +++------------------ .../qtsensors/qwhipsensorgesturerecognizer.cpp | 7 +++-- 4 files changed, 21 insertions(+), 46 deletions(-) (limited to 'src/plugins/sensorgestures') diff --git a/src/plugins/sensorgestures/qtsensors/qpickupsensorgesturerecognizer.cpp b/src/plugins/sensorgestures/qtsensors/qpickupsensorgesturerecognizer.cpp index 1a85e242..c0b8f4be 100644 --- a/src/plugins/sensorgestures/qtsensors/qpickupsensorgesturerecognizer.cpp +++ b/src/plugins/sensorgestures/qtsensors/qpickupsensorgesturerecognizer.cpp @@ -110,14 +110,16 @@ bool QPickupSensorGestureRecognizer::isActive() return active; } +#define PICKUP_BOTTOM_THRESHOLD 15 +#define PICKUP_TOP_THRESHOLD 60 void QPickupSensorGestureRecognizer::accelChanged() { qreal x = accel->reading()->x(); - qreal xdiff = pXaxis - x; qreal y = accel->reading()->y(); - qreal ydiff = pYaxis - y; qreal z = accel->reading()->z(); + qreal xdiff = pXaxis - x; + qreal ydiff = pYaxis - y; qreal zdiff = pZaxis - z; roll = calc(calcRoll(x, y, z)); @@ -125,16 +127,16 @@ void QPickupSensorGestureRecognizer::accelChanged() if (xdiff < 0.7 && ydiff < .7 && zdiff < .7) { atRest = true; } else { - if (atRest && roll > 15 ) { -// roll = calc(calcRoll(x, y, z)); - atRest = false; - okToSignal = true; - } + atRest = false; } - - if (atRest&& - okToSignal && (roll < 60 && roll > 15) - && (y > 5.0 && y < 8.9) && (z > 5.0 && z < 7.9)) { + if (roll > PICKUP_BOTTOM_THRESHOLD + && (fabs(lastRoll - roll) > PICKUP_BOTTOM_THRESHOLD)) { + okToSignal = true; + detectedRoll = roll; + } + if (atRest + && okToSignal + && (roll < PICKUP_TOP_THRESHOLD && roll > PICKUP_BOTTOM_THRESHOLD)) { if (!timer->isActive()) { timer->start(); } @@ -155,15 +157,11 @@ void QPickupSensorGestureRecognizer::timeout() qreal y = accel->reading()->y(); qreal z = accel->reading()->z(); - qreal thisroll = calc(calcRoll(x, y, z)); - qreal pitch = calc(calcPitch(x, y, z)); - qreal difference = thisroll - roll; -//qDebug() << Q_FUNC_INFO << thisroll << pitch; if (atRest && (pitch > -6 && pitch < 6) - && (roll < 60 && roll > 15) + && (roll < PICKUP_TOP_THRESHOLD && roll > PICKUP_BOTTOM_THRESHOLD) && (y > 5.0 && y < 8.9) && (z > 5.0 && z < 7.9)) { Q_EMIT pickup(); diff --git a/src/plugins/sensorgestures/qtsensors/qpickupsensorgesturerecognizer.h b/src/plugins/sensorgestures/qtsensors/qpickupsensorgesturerecognizer.h index 65a3f322..3870fd03 100644 --- a/src/plugins/sensorgestures/qtsensors/qpickupsensorgesturerecognizer.h +++ b/src/plugins/sensorgestures/qtsensors/qpickupsensorgesturerecognizer.h @@ -86,6 +86,7 @@ private: qreal calc(qreal yrot); qreal lastRoll; + qreal detectedRoll; }; QT_END_NAMESPACE diff --git a/src/plugins/sensorgestures/qtsensors/qslamgesturerecognizer.cpp b/src/plugins/sensorgestures/qtsensors/qslamgesturerecognizer.cpp index 37708d95..f45bdcad 100644 --- a/src/plugins/sensorgestures/qtsensors/qslamgesturerecognizer.cpp +++ b/src/plugins/sensorgestures/qtsensors/qslamgesturerecognizer.cpp @@ -113,12 +113,10 @@ bool QSlamSensorGestureRecognizer::isActive() return active; } -#define SLAM_FACTOR 5.0 +#define SLAM_FACTOR -20.0 void QSlamSensorGestureRecognizer::accelChanged() { - qreal x = accel->reading()->x(); - qreal y = accel->reading()->y(); qreal z = accel->reading()->z(); //// very hacky @@ -127,17 +125,7 @@ void QSlamSensorGestureRecognizer::accelChanged() if (currentOrientation == QOrientationReading::FaceUp) { z = z - 9.8; } - if (currentOrientation == QOrientationReading::LeftUp - || currentOrientation == QOrientationReading::RightUp) { - x = x - 9.8; - } - if (currentOrientation == QOrientationReading::TopUp - ||currentOrientation == QOrientationReading::TopDown ) { - y = y - 9.8; - } - qreal diffX = lastX - x; - qreal diffY = lastY - y; qreal diffZ = lastZ - z; if (detecting && slamMap.count() > 5 && slamMap.at(5) == true) { @@ -147,26 +135,15 @@ void QSlamSensorGestureRecognizer::accelChanged() if (slamMap.count() > 5) slamMap.removeLast(); - if (fabs(x) > SLAM_FACTOR - || fabs(y) > SLAM_FACTOR - || fabs(z) > SLAM_FACTOR) { - + if (z < SLAM_FACTOR) { slamMap.insert(0,true); - - - if (!detecting && !timer->isActive() - && (fabs(diffX) < SLAM_FACTOR + 3 - ||fabs(diffY) < SLAM_FACTOR + 3 - ||fabs(diffZ) < SLAM_FACTOR + 3)) { + if (!detecting && !timer->isActive()) { timer->start(); detecting = true; } } else { slamMap.insert(0,false); } - - lastX = x; - lastY = y; lastZ = z; } diff --git a/src/plugins/sensorgestures/qtsensors/qwhipsensorgesturerecognizer.cpp b/src/plugins/sensorgestures/qtsensors/qwhipsensorgesturerecognizer.cpp index 4869f7e4..3ed4b900 100644 --- a/src/plugins/sensorgestures/qtsensors/qwhipsensorgesturerecognizer.cpp +++ b/src/plugins/sensorgestures/qtsensors/qwhipsensorgesturerecognizer.cpp @@ -60,7 +60,8 @@ inline qreal calcYaw(double Ax, double Ay, double Az) } QWhipSensorGestureRecognizer::QWhipSensorGestureRecognizer(QObject *parent) : - QSensorGestureRecognizer(parent), whipIt(0), lastX(0) + QSensorGestureRecognizer(parent), whipIt(0), lastX(0), + detectedX(0) { } @@ -137,8 +138,7 @@ void QWhipSensorGestureRecognizer::accelChanged() if (whipIt) { if (((!wasNegative && difference > accelRange * WHIP_THRESHOLD_FACTOR) || (wasNegative && difference < -accelRange * WHIP_THRESHOLD_FACTOR)) - && abs(degreesZ) < WHIP_DEGREES - && abs(detectedX) < abs(x)) { + && abs(degreesZ) < WHIP_DEGREES) { Q_EMIT whip(); Q_EMIT detected("whip"); whipIt = false; @@ -148,7 +148,6 @@ void QWhipSensorGestureRecognizer::accelChanged() || (difference < 0 && difference > -accelRange * WHIP_DETECTION_FACTOR)) && abs(degreesZ) < WHIP_DEGREES && orientation->reading()->orientation() != QOrientationReading::FaceUp) { - detectedX = x; // start of gesture timer->start(); -- cgit v1.2.3