summaryrefslogtreecommitdiffstats
path: root/src/plugins/sensorgestures/qtsensors/qpickupsensorgesturerecognizer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/sensorgestures/qtsensors/qpickupsensorgesturerecognizer.cpp')
-rw-r--r--src/plugins/sensorgestures/qtsensors/qpickupsensorgesturerecognizer.cpp67
1 files changed, 16 insertions, 51 deletions
diff --git a/src/plugins/sensorgestures/qtsensors/qpickupsensorgesturerecognizer.cpp b/src/plugins/sensorgestures/qtsensors/qpickupsensorgesturerecognizer.cpp
index e90f52db..f0dbbe0d 100644
--- a/src/plugins/sensorgestures/qtsensors/qpickupsensorgesturerecognizer.cpp
+++ b/src/plugins/sensorgestures/qtsensors/qpickupsensorgesturerecognizer.cpp
@@ -41,29 +41,15 @@
#include "qpickupsensorgesturerecognizer.h"
-#define _USE_MATH_DEFINES
#include <QtCore/qmath.h>
-#ifndef M_PI
-#define M_PI 3.14159265358979323846264338327950288419717
-#endif
-#ifndef M_PI_2
-#define M_PI_2 1.57079632679489661923
-#endif
-QT_BEGIN_NAMESPACE
+#define RADIANS_TO_DEGREES 57.2957795
-inline qreal calcPitch(double Ax, double Ay, double Az)
-{
- return (float)-qAtan2(Ax, qSqrt(Ay * Ay + Az * Az));
-}
-inline qreal calcRoll(double Ax, double Ay, double Az)
-{
- return (float)qAtan2(Ay, (qSqrt(Ax * Ax + Az * Az)));
-}
+QT_BEGIN_NAMESPACE
QPickupSensorGestureRecognizer::QPickupSensorGestureRecognizer(QObject *parent) :
QSensorGestureRecognizer(parent),atRest(1),okToSignal(1),
- lastRoll(0)
+ lastpitch(0), detecting(0)
{
}
@@ -110,7 +96,7 @@ bool QPickupSensorGestureRecognizer::isActive()
return active;
}
-#define PICKUP_BOTTOM_THRESHOLD 15
+#define PICKUP_BOTTOM_THRESHOLD 30
#define PICKUP_TOP_THRESHOLD 60
void QPickupSensorGestureRecognizer::accelChanged()
@@ -122,33 +108,27 @@ void QPickupSensorGestureRecognizer::accelChanged()
qreal ydiff = pYaxis - y;
qreal zdiff = pZaxis - z;
- roll = calc(calcRoll(x, y, z));
+ pitch = qAtan(y / qSqrt(x*x + z*z)) * RADIANS_TO_DEGREES;
- if (xdiff < 0.7 && ydiff < .7 && zdiff < .7) {
+ if (qAbs(xdiff) < 0.7 && qAbs(ydiff) < .7 && qAbs(zdiff) < .7) {
atRest = true;
} else {
atRest = false;
}
- if (roll > PICKUP_BOTTOM_THRESHOLD
- && (qAbs(lastRoll - roll) > PICKUP_BOTTOM_THRESHOLD)) {
- okToSignal = true;
- detectedRoll = roll;
- }
- if (atRest
- && okToSignal
- && (roll < PICKUP_TOP_THRESHOLD && roll > PICKUP_BOTTOM_THRESHOLD)) {
+
+ if (!atRest && (lastpitch - pitch < -PICKUP_BOTTOM_THRESHOLD)) {
+ detecting = true;
if (!timer->isActive()) {
timer->start();
}
+ lastpitch = pitch;
}
- // initial at ~0, z = 9.8
- // at 'focus' when y == 6 to 8 && z == 5 to 7
-
pXaxis = x;
pYaxis = y;
pZaxis = z;
- lastRoll = roll;
+ if (atRest && !detecting)
+ lastpitch = pitch;
}
void QPickupSensorGestureRecognizer::timeout()
@@ -157,11 +137,9 @@ void QPickupSensorGestureRecognizer::timeout()
qreal y = accel->reading()->y();
qreal z = accel->reading()->z();
- qreal pitch = calc(calcPitch(x, y, z));
-
- if (atRest
- && (pitch > -6 && pitch < 6)
- && (roll < PICKUP_TOP_THRESHOLD && roll > PICKUP_BOTTOM_THRESHOLD)
+ qreal roll = qAtan(x / qSqrt(y*y + z*z)) * RADIANS_TO_DEGREES;
+ if ((roll > -6 && roll < 6)
+ && (pitch < PICKUP_TOP_THRESHOLD && pitch > PICKUP_BOTTOM_THRESHOLD)
&& (y > 5.0 && y < 8.9)
&& (z > 5.0 && z < 7.9)) {
Q_EMIT pickup();
@@ -169,20 +147,7 @@ void QPickupSensorGestureRecognizer::timeout()
okToSignal = false;
}
-}
-
-qreal QPickupSensorGestureRecognizer::calc(qreal yrot)
-{
- qreal aG = 1 * sin(yrot);
- qreal aK = 1 * cos(yrot);
-
- yrot = qAtan2(aG, aK);
- if (yrot > M_PI_2)
- yrot = M_PI - yrot;
- else if (yrot < -M_PI_2)
- yrot = -(M_PI + yrot);
-
- return yrot * 180 / M_PI;
+ detecting = false;
}
QT_END_NAMESPACE