diff options
Diffstat (limited to 'src/plugins/sensorgestures/shake/qshakerecognizer.cpp')
-rw-r--r-- | src/plugins/sensorgestures/shake/qshakerecognizer.cpp | 124 |
1 files changed, 0 insertions, 124 deletions
diff --git a/src/plugins/sensorgestures/shake/qshakerecognizer.cpp b/src/plugins/sensorgestures/shake/qshakerecognizer.cpp deleted file mode 100644 index d2739c8..0000000 --- a/src/plugins/sensorgestures/shake/qshakerecognizer.cpp +++ /dev/null @@ -1,124 +0,0 @@ -// Copyright (C) 2016 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -#include <QDebug> -#include <QTimer> - -#include "qshakerecognizer.h" - -QShakeSensorGestureRecognizer::QShakeSensorGestureRecognizer(QObject *parent) - : QSensorGestureRecognizer(parent) - , timerTimeout(450) - , active(0) - , shaking(0) - , shakeCount(0) -{ -} - -QShakeSensorGestureRecognizer::~QShakeSensorGestureRecognizer() -{ -} - -void QShakeSensorGestureRecognizer::create() -{ - accel = new QAccelerometer(this); - accel->connectToBackend(); - accel->setDataRate(50); - - qoutputrangelist outputranges = accel->outputRanges(); - - if (outputranges.count() > 0) - accelRange = (int)(outputranges.at(0).maximum *2) / 9.8; //approx range in g's - else - 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() -{ - active = accel->start(); - return active; -} - -bool QShakeSensorGestureRecognizer::stop() -{ - accel->stop(); - active = accel->isActive(); - return !active; -} - -bool QShakeSensorGestureRecognizer::isActive() -{ - return active; -} - -QString QShakeSensorGestureRecognizer::id() const -{ - return QString("QtSensors.shake"); -} - -#define NUMBER_SHAKES 3 -#define THRESHOLD 25 - -void QShakeSensorGestureRecognizer::accelChanged() -{ - qreal x = accel->reading()->x(); - qreal y = accel->reading()->y(); - qreal z = accel->reading()->z(); - - currentData.x = x; - currentData.y = y; - currentData.z = z; - - 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; - } - - 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 (wasShake) { - - shakeCount++; - if (shakeCount > NUMBER_SHAKES) { - timer->start(); - } - } - - prevData.x = currentData.x; - prevData.y = currentData.y; - prevData.z = currentData.z; -} - -void QShakeSensorGestureRecognizer::timeout() -{ - shakeCount = 0; - shaking = false; -} - -bool QShakeSensorGestureRecognizer::checkForShake(AccelData prevSensorData, AccelData currentSensorData, qreal threshold) -{ - double deltaX = qAbs(prevSensorData.x - currentSensorData.x); - double deltaY = qAbs(prevSensorData.y - currentSensorData.y); - double deltaZ = qAbs(prevSensorData.z - currentSensorData.z); - - return (deltaX > threshold - || deltaY > threshold - || deltaZ > threshold); -} - |