summaryrefslogtreecommitdiffstats
path: root/src/plugins/sensorgestures
diff options
context:
space:
mode:
authorLorn Potter <lorn.potter@nokia.com>2012-03-01 11:05:52 +1000
committerQt by Nokia <qt-info@nokia.com>2012-03-01 11:09:23 +0100
commit1c99076a1f55a28ac6c745d1df05226401f11107 (patch)
tree9ab51a2b516dbf9b5a6861b7008320368dfc6c9f /src/plugins/sensorgestures
parentd75fefbcce3dae2eda571905ae0d3485f038956c (diff)
share sensors among the recognizers in QtSensors recognizer.
Change-Id: Ie08046de2e293b8b6271851ce8b740832a6de315 Reviewed-by: Lorn Potter <lorn.potter@nokia.com>
Diffstat (limited to 'src/plugins/sensorgestures')
-rw-r--r--src/plugins/sensorgestures/qtsensors/qcoversensorgesturerecognizer.cpp78
-rw-r--r--src/plugins/sensorgestures/qtsensors/qcoversensorgesturerecognizer.h23
-rw-r--r--src/plugins/sensorgestures/qtsensors/qdoubletapsensorgesturerecognizer.cpp26
-rw-r--r--src/plugins/sensorgestures/qtsensors/qdoubletapsensorgesturerecognizer.h7
-rw-r--r--src/plugins/sensorgestures/qtsensors/qhoversensorgesturerecognizer.cpp50
-rw-r--r--src/plugins/sensorgestures/qtsensors/qhoversensorgesturerecognizer.h13
-rw-r--r--src/plugins/sensorgestures/qtsensors/qpickupsensorgesturerecognizer.cpp48
-rw-r--r--src/plugins/sensorgestures/qtsensors/qpickupsensorgesturerecognizer.h10
-rw-r--r--src/plugins/sensorgestures/qtsensors/qshake2recognizer.cpp32
-rw-r--r--src/plugins/sensorgestures/qtsensors/qshake2recognizer.h12
-rw-r--r--src/plugins/sensorgestures/qtsensors/qslamgesturerecognizer.cpp70
-rw-r--r--src/plugins/sensorgestures/qtsensors/qslamgesturerecognizer.h6
-rw-r--r--src/plugins/sensorgestures/qtsensors/qtsensorgestureplugin.cpp31
-rw-r--r--src/plugins/sensorgestures/qtsensors/qtsensorgestureplugin.h3
-rw-r--r--src/plugins/sensorgestures/qtsensors/qtsensorgesturesensorhandler.cpp192
-rw-r--r--src/plugins/sensorgestures/qtsensors/qtsensorgesturesensorhandler.h100
-rw-r--r--src/plugins/sensorgestures/qtsensors/qtsensors.pro6
-rw-r--r--src/plugins/sensorgestures/qtsensors/qturnoversensorgesturerecognizer.cpp53
-rw-r--r--src/plugins/sensorgestures/qtsensors/qturnoversensorgesturerecognizer.h12
-rw-r--r--src/plugins/sensorgestures/qtsensors/qtwistsensorgesturerecognizer.cpp68
-rw-r--r--src/plugins/sensorgestures/qtsensors/qtwistsensorgesturerecognizer.h8
-rw-r--r--src/plugins/sensorgestures/qtsensors/qwhipsensorgesturerecognizer.cpp77
-rw-r--r--src/plugins/sensorgestures/qtsensors/qwhipsensorgesturerecognizer.h12
-rw-r--r--src/plugins/sensorgestures/shake/qshakerecognizer.cpp1
24 files changed, 642 insertions, 296 deletions
diff --git a/src/plugins/sensorgestures/qtsensors/qcoversensorgesturerecognizer.cpp b/src/plugins/sensorgestures/qtsensors/qcoversensorgesturerecognizer.cpp
index 9053be00..47a08f53 100644
--- a/src/plugins/sensorgestures/qtsensors/qcoversensorgesturerecognizer.cpp
+++ b/src/plugins/sensorgestures/qtsensors/qcoversensorgesturerecognizer.cpp
@@ -39,15 +39,14 @@
**
****************************************************************************/
-
#include "qcoversensorgesturerecognizer.h"
-#include <math.h>
+#include "qtsensorgesturesensorhandler.h"
QT_BEGIN_NAMESPACE
QCoverSensorGestureRecognizer::QCoverSensorGestureRecognizer(QObject *parent) :
QSensorGestureRecognizer(parent),
- detecting(0), lastProx(0)
+ detecting(0), lastProx(0), proximityReading(0), active(0)
{
}
@@ -57,12 +56,6 @@ QCoverSensorGestureRecognizer::~QCoverSensorGestureRecognizer()
void QCoverSensorGestureRecognizer::create()
{
- proximity = new QIRProximitySensor(this);
- proximity->connectToBackend();
-
- orientation = new QOrientationSensor(this);
- orientation->connectToBackend();
-
timer = new QTimer(this);
connect(timer,SIGNAL(timeout()),this,SLOT(timeout()));
timer->setSingleShot(true);
@@ -76,60 +69,83 @@ QString QCoverSensorGestureRecognizer::id() const
bool QCoverSensorGestureRecognizer::start()
{
- connect(proximity,SIGNAL(readingChanged()),this,SLOT(proximityChanged()));
- proximity->start();
- orientation->start();
- lastProx = proximity->reading()->reflectance();
- return proximity->isActive();
+ if (QtSensorGestureSensorHandler::instance()->startSensor(QtSensorGestureSensorHandler::IrProximity)) {
+ if (QtSensorGestureSensorHandler::instance()->startSensor(QtSensorGestureSensorHandler::Orientation)) {
+ active = true;
+ connect(QtSensorGestureSensorHandler::instance(),SIGNAL(irProximityReadingChanged(QIRProximityReading *)),
+ this,SLOT(proximityChanged(QIRProximityReading *)));
+
+ connect(QtSensorGestureSensorHandler::instance(),SIGNAL(orientationReadingChanged(QOrientationReading *)),
+ this,SLOT(orientationReadingChanged(QOrientationReading *)));
+ } else {
+ QtSensorGestureSensorHandler::instance()->stopSensor(QtSensorGestureSensorHandler::IrProximity);
+ active = false;
+ }
+ } else {
+ active = false;
+ }
+ return active;
}
bool QCoverSensorGestureRecognizer::stop()
{
- proximity->stop();
- orientation->stop();
- disconnect(proximity,SIGNAL(readingChanged()),this,SLOT(proximityChanged()));
- return proximity->isActive();
+ QtSensorGestureSensorHandler::instance()->stopSensor(QtSensorGestureSensorHandler::IrProximity);
+ QtSensorGestureSensorHandler::instance()->stopSensor(QtSensorGestureSensorHandler::Orientation);
+
+ disconnect(QtSensorGestureSensorHandler::instance(),SIGNAL(irProximityReadingChanged(QIRProximityReading *)),
+ this,SLOT(proximityChanged(QIRProximityReading *)));
+ disconnect(QtSensorGestureSensorHandler::instance(),SIGNAL(orientationReadingChanged(QOrientationReading *)),
+ this,SLOT(orientationReadingChanged(QOrientationReading *)));
+
+ active = false;
+
+ return active;
}
bool QCoverSensorGestureRecognizer::isActive()
{
- return proximity->isActive();
+ return active;
}
-void QCoverSensorGestureRecognizer::proximityChanged()
-{// look at case of face up->face down->face up.
-
- qreal refl = proximity->reading()->reflectance();
- qreal difference = lastProx - refl;
+void QCoverSensorGestureRecognizer::proximityChanged(QIRProximityReading *reading)
+{
+ proximityReading = reading->reflectance();
+ qreal difference = lastProx - proximityReading;
if (qAbs(difference) < .15) {
return;
}
-
- if (orientation->reading()->orientation() == QOrientationReading::FaceUp
- && refl > .55) {
+ // look at case of face up->face down->face up.
+ if (orientationReading->orientation() == QOrientationReading::FaceUp
+ && proximityReading > .55) {
if (!timer->isActive()) {
timer->start();
detecting = true;
}
}
- if (refl < .55) {
+ if (proximityReading < .55) {
if (timer->isActive()) {
timer->stop();
detecting = false;
}
}
- lastProx = refl;
+ lastProx = proximityReading;
+}
+
+void QCoverSensorGestureRecognizer::orientationReadingChanged(QOrientationReading *reading)
+{
+ orientationReading = reading;
}
void QCoverSensorGestureRecognizer::timeout()
{
- if (detecting && orientation->reading()->orientation() == QOrientationReading::FaceUp
- && proximity->reading()->reflectance() > 0.55) {
+ if ((orientationReading->orientation() == QOrientationReading::FaceUp)
+ && proximityReading > 0.55) {
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 c6dddf6d..475ad518 100644
--- a/src/plugins/sensorgestures/qtsensors/qcoversensorgesturerecognizer.h
+++ b/src/plugins/sensorgestures/qtsensors/qcoversensorgesturerecognizer.h
@@ -43,13 +43,11 @@
#ifndef QCOVERSENSORGESTURERECOGNIZER_H
#define QCOVERSENSORGESTURERECOGNIZER_H
-#include <QtSensors/QSensor>
-#include <QProximitySensor>
-#include <QtSensors/QOrientationSensor>
-#include <QIRProximitySensor>
-
#include <qsensorgesturerecognizer.h>
#include <QTimer>
+
+#include "qtsensorgesturesensorhandler.h"
+
QT_BEGIN_NAMESPACE
class QCoverSensorGestureRecognizer : public QSensorGestureRecognizer
@@ -70,18 +68,21 @@ Q_SIGNALS:
void cover();
private slots:
- void proximityChanged();
+ void proximityChanged(QIRProximityReading *reading);
+ void orientationReadingChanged(QOrientationReading *reading);
void timeout();
-
private:
- QIRProximitySensor *proximity;
- QOrientationSensor *orientation;
+
+ QOrientationReading *orientationReading;
+ qreal proximityReading;
QTimer *timer;
+ bool lastProx;
+ QtSensorGestureSensorHandler *handler;
+ bool active;
bool detecting;
- qreal lastProx;
-
};
+
QT_END_NAMESPACE
#endif // QCOVERSENSORGESTURERECOGNIZER_H
diff --git a/src/plugins/sensorgestures/qtsensors/qdoubletapsensorgesturerecognizer.cpp b/src/plugins/sensorgestures/qtsensors/qdoubletapsensorgesturerecognizer.cpp
index 38f32293..ab495fbc 100644
--- a/src/plugins/sensorgestures/qtsensors/qdoubletapsensorgesturerecognizer.cpp
+++ b/src/plugins/sensorgestures/qtsensors/qdoubletapsensorgesturerecognizer.cpp
@@ -54,8 +54,6 @@ QDoubleTapSensorGestureRecognizer::~QDoubleTapSensorGestureRecognizer()
void QDoubleTapSensorGestureRecognizer::create()
{
- tapSensor = new QTapSensor(this);
- tapSensor->connectToBackend();
}
@@ -66,26 +64,32 @@ QString QDoubleTapSensorGestureRecognizer::id() const
bool QDoubleTapSensorGestureRecognizer::start()
{
- connect(tapSensor,SIGNAL(readingChanged()),this,SLOT(tapChanged()));
- tapSensor->start();
- return isActive();
+ if (QtSensorGestureSensorHandler::instance()->startSensor(QtSensorGestureSensorHandler::Tap)) {
+ active = true;
+ connect(QtSensorGestureSensorHandler::instance(),SIGNAL(dTabReadingChanged(QTapReading *)),
+ this,SLOT(tapChanged(QTapReading *)));
+ } else {
+ active = false;
+ }
+ return active;
}
bool QDoubleTapSensorGestureRecognizer::stop()
{
- tapSensor->stop();
- disconnect(tapSensor,SIGNAL(readingChanged()),this,SLOT(tapChanged()));
- return isActive();
+ QtSensorGestureSensorHandler::instance()->stopSensor(QtSensorGestureSensorHandler::Tap);
+ disconnect(QtSensorGestureSensorHandler::instance(),SIGNAL(dTabReadingChanged(QTapReading *)),
+ this,SLOT(tapChanged(QTapReading *)));
+ active = false;
+ return active;
}
bool QDoubleTapSensorGestureRecognizer::isActive()
{
- return tapSensor->isActive();
+ return active;
}
-void QDoubleTapSensorGestureRecognizer::tapChanged()
+void QDoubleTapSensorGestureRecognizer::tapChanged(QTapReading *reading)
{
- QTapReading *reading = tapSensor->reading();
if (reading->isDoubleTap()) {
Q_EMIT doubletap();
Q_EMIT detected("doubletap");
diff --git a/src/plugins/sensorgestures/qtsensors/qdoubletapsensorgesturerecognizer.h b/src/plugins/sensorgestures/qtsensors/qdoubletapsensorgesturerecognizer.h
index 8c52cdd7..5571e766 100644
--- a/src/plugins/sensorgestures/qtsensors/qdoubletapsensorgesturerecognizer.h
+++ b/src/plugins/sensorgestures/qtsensors/qdoubletapsensorgesturerecognizer.h
@@ -46,6 +46,9 @@
#include <qsensorgesturerecognizer.h>
#include <QTapSensor>
+
+#include "qtsensorgesturesensorhandler.h"
+
QT_BEGIN_NAMESPACE
class QDoubleTapSensorGestureRecognizer : public QSensorGestureRecognizer
@@ -56,7 +59,6 @@ public:
~QDoubleTapSensorGestureRecognizer();
void create();
-
QString id() const;
bool start();
bool stop();
@@ -66,10 +68,11 @@ Q_SIGNALS:
void doubletap();
private slots:
- void tapChanged();
+ void tapChanged(QTapReading *reading);
private:
QTapSensor *tapSensor;
+ bool active;
};
QT_END_NAMESPACE
diff --git a/src/plugins/sensorgestures/qtsensors/qhoversensorgesturerecognizer.cpp b/src/plugins/sensorgestures/qtsensors/qhoversensorgesturerecognizer.cpp
index a441cda6..bb392d9b 100644
--- a/src/plugins/sensorgestures/qtsensors/qhoversensorgesturerecognizer.cpp
+++ b/src/plugins/sensorgestures/qtsensors/qhoversensorgesturerecognizer.cpp
@@ -47,7 +47,7 @@ QT_BEGIN_NAMESPACE
QHoverSensorGestureRecognizer::QHoverSensorGestureRecognizer(QObject *parent) :
QSensorGestureRecognizer(parent),
- hoverOk(0), lastLightReading(0), detecting(0)
+ hoverOk(0), lastLightReading(0), detecting(0), active(0)
{
}
@@ -57,9 +57,6 @@ QHoverSensorGestureRecognizer::~QHoverSensorGestureRecognizer()
void QHoverSensorGestureRecognizer::create()
{
- irProx = new QIRProximitySensor(this);
- irProx->connectToBackend();
-
timer = new QTimer(this);
connect(timer,SIGNAL(timeout()),this,SLOT(timeout()));
timer->setSingleShot(true);
@@ -78,50 +75,57 @@ QString QHoverSensorGestureRecognizer::id() const
bool QHoverSensorGestureRecognizer::start()
{
- connect(irProx,SIGNAL(readingChanged()), this,SLOT(proxyChanged()));
- irProx->start();
- return irProx->isActive();
+ if (QtSensorGestureSensorHandler::instance()->startSensor(QtSensorGestureSensorHandler::IrProximity)) {
+ active = true;
+ connect(QtSensorGestureSensorHandler::instance(),SIGNAL(irProximityReadingChanged(QIRProximityReading *)),
+ this,SLOT(irProximityReadingChanged(QIRProximityReading *)));
+ } else {
+ active = false;
+ }
+ return active;
}
bool QHoverSensorGestureRecognizer::stop()
{
- irProx->stop();
- disconnect(irProx,SIGNAL(readingChanged()),this,SLOT(proxyChanged()));
- return irProx->isActive();
+ QtSensorGestureSensorHandler::instance()->stopSensor(QtSensorGestureSensorHandler::IrProximity);
+ disconnect(QtSensorGestureSensorHandler::instance(),SIGNAL(irProximityReadingChanged(QIRProximityReading *)),
+ this,SLOT(irProximityReadingChanged(QIRProximityReading *)));
+ active = false;
+ return active;
}
bool QHoverSensorGestureRecognizer::isActive()
{
- return irProx->isActive();
+ return active;
}
-void QHoverSensorGestureRecognizer::proxyChanged()
+void QHoverSensorGestureRecognizer::irProximityReadingChanged(QIRProximityReading *reading)
{
- qreal refl = irProx->reading()->reflectance();
+ reflectance = reading->reflectance();
- if (refl > .51) {
+ if (reflectance > .51) {
hoverOk = false;
detecting = false;
return;
}
- if (!detecting && (refl > .40 && refl < .50)) {
+ if (!detecting && (reflectance > .35 && reflectance < .50)) {
detecting = true;
timer->start();
timer2->start();
- detectedHigh = refl;
+ detectedHigh = reflectance;
} else if (hoverOk && detecting
- && refl < .33
- && detectedHigh
+ && reflectance < .33
+ // && detectedHigh
) {
// went light again after 1 seconds
- Q_EMIT hover();
- Q_EMIT detected("hover");
- hoverOk = false;
- detecting = false;
+ Q_EMIT hover();
+ Q_EMIT detected("hover");
+ hoverOk = false;
+ detecting = false;
}
- if (refl > .60)
+ if (reflectance > .60)
detecting = false;
}
diff --git a/src/plugins/sensorgestures/qtsensors/qhoversensorgesturerecognizer.h b/src/plugins/sensorgestures/qtsensors/qhoversensorgesturerecognizer.h
index 0efdf026..5d19007c 100644
--- a/src/plugins/sensorgestures/qtsensors/qhoversensorgesturerecognizer.h
+++ b/src/plugins/sensorgestures/qtsensors/qhoversensorgesturerecognizer.h
@@ -44,10 +44,9 @@
#define QHOVERSENSORGESTURERECOGNIZER_H
#include <QSensorGestureRecognizer>
-#include <QtSensors/QSensor>
#include <QTimer>
-#include <QProximitySensor>
-#include <QIRProximitySensor>
+
+#include "qtsensorgesturesensorhandler.h"
QT_BEGIN_NAMESPACE
@@ -60,7 +59,6 @@ public:
~QHoverSensorGestureRecognizer();
void create();
-
QString id() const;
bool start();
bool stop();
@@ -70,11 +68,12 @@ Q_SIGNALS:
void hover();
private slots:
- void proxyChanged();
+ void irProximityReadingChanged(QIRProximityReading *reading);
void timeout();
void timeout2();
private:
- QIRProximitySensor *irProx;
+// bool proximity;
+ qreal reflectance;
QTimer *timer;
QTimer *timer2;
@@ -84,6 +83,8 @@ private:
qreal detectedHigh;
qreal lastProx;
+ bool active;
+
};
QT_END_NAMESPACE
#endif // QHOVERSENSORGESTURERECOGNIZER_H
diff --git a/src/plugins/sensorgestures/qtsensors/qpickupsensorgesturerecognizer.cpp b/src/plugins/sensorgestures/qtsensors/qpickupsensorgesturerecognizer.cpp
index 74d86043..124ec2c3 100644
--- a/src/plugins/sensorgestures/qtsensors/qpickupsensorgesturerecognizer.cpp
+++ b/src/plugins/sensorgestures/qtsensors/qpickupsensorgesturerecognizer.cpp
@@ -49,7 +49,7 @@ QT_BEGIN_NAMESPACE
QPickupSensorGestureRecognizer::QPickupSensorGestureRecognizer(QObject *parent) :
QSensorGestureRecognizer(parent),atRest(1),okToSignal(1),
- lastpitch(0), detecting(0)
+ lastpitch(0), detecting(0), active(0)
{
}
@@ -59,8 +59,6 @@ QPickupSensorGestureRecognizer::~QPickupSensorGestureRecognizer()
void QPickupSensorGestureRecognizer::create()
{
- accel = new QAccelerometer(this);
- accel->connectToBackend();
timer = new QTimer(this);
connect(timer,SIGNAL(timeout()),this,SLOT(timeout()));
@@ -76,19 +74,24 @@ QString QPickupSensorGestureRecognizer::id() const
bool QPickupSensorGestureRecognizer::start()
{
- connect(accel,SIGNAL(readingChanged()),this,SLOT(accelChanged()));
- accel->start();
-
- active = accel->isActive();
+ if (QtSensorGestureSensorHandler::instance()->startSensor(QtSensorGestureSensorHandler::Accel)) {
+ active = true;
+ connect(QtSensorGestureSensorHandler::instance(),SIGNAL(accelReadingChanged(QAccelerometerReading *)),
+ this,SLOT(accelChanged(QAccelerometerReading *)));
+ } else {
+ active = false;
+ }
return active;
+
}
bool QPickupSensorGestureRecognizer::stop()
{
- accel->stop();
- active = accel->isActive();
- disconnect(accel,SIGNAL(readingChanged()),this,SLOT(accelChanged()));
- return !active;
+ QtSensorGestureSensorHandler::instance()->stopSensor(QtSensorGestureSensorHandler::Accel);
+ disconnect(QtSensorGestureSensorHandler::instance(),SIGNAL(accelReadingChanged(QAccelerometerReading*)),
+ this,SLOT(accelChanged(QAccelerometerReading *)));
+ active = false;
+ return active;
}
bool QPickupSensorGestureRecognizer::isActive()
@@ -99,13 +102,14 @@ bool QPickupSensorGestureRecognizer::isActive()
#define PICKUP_BOTTOM_THRESHOLD 20
#define PICKUP_TOP_THRESHOLD 87
-void QPickupSensorGestureRecognizer::accelChanged()
+void QPickupSensorGestureRecognizer::accelChanged(QAccelerometerReading *reading)
{
- qreal x = accel->reading()->x();
- qreal y = accel->reading()->y();
- qreal z = accel->reading()->z();
+ accelReading = reading;
+ qreal x = reading->x();
qreal xdiff = pXaxis - x;
+ qreal y = reading->y();
qreal ydiff = pYaxis - y;
+ qreal z = reading->z();
qreal zdiff = pZaxis - z;
pitch = qAtan(y / qSqrt(x*x + z*z)) * RADIANS_TO_DEGREES;
@@ -131,10 +135,8 @@ void QPickupSensorGestureRecognizer::accelChanged()
detectingNegativeList.insert(0,true);
atRest = true;
}
- qDebug() << z << pitch << (lastpitch - pitch) << detecting;
if (!atRest && !detecting && (lastpitch - pitch < -PICKUP_BOTTOM_THRESHOLD)) {
- qDebug() << Q_FUNC_INFO << "start detecting";
detecting = true;
if (!timer->isActive()) {
timer->start();
@@ -153,21 +155,19 @@ void QPickupSensorGestureRecognizer::accelChanged()
void QPickupSensorGestureRecognizer::timeout()
{
- qreal x = accel->reading()->x();
- qreal y = accel->reading()->y();
- qreal z = accel->reading()->z();
+ qreal x = accelReading->x();
+ qreal y = accelReading->y();
+ qreal z = accelReading->z();
qreal roll = qAtan(x / qSqrt(y*y + z*z)) * RADIANS_TO_DEGREES;
bool ok = true;
- qDebug() << "zlist" << zList;
for (int i = 0; i < zList.count() - 1; i++) {
if (zList.at(i) < 0) {
ok = false;
}
}
- qDebug() << "negativeList" << detectingNegativeList;
if (ok) {
for (int i = 0; i < detectingNegativeList.count() - 1; i++) {
if (detectingNegativeList.at(i) == true) {
@@ -175,8 +175,6 @@ void QPickupSensorGestureRecognizer::timeout()
}
}
}
- qDebug() << Q_FUNC_INFO << y << z << roll << pitch
- << okToSignal << ok;
if (ok && detecting
&& okToSignal
@@ -198,5 +196,5 @@ void QPickupSensorGestureRecognizer::clear()
detecting = false;
detectingNegativeList.clear();
}
-
QT_END_NAMESPACE
+
diff --git a/src/plugins/sensorgestures/qtsensors/qpickupsensorgesturerecognizer.h b/src/plugins/sensorgestures/qtsensors/qpickupsensorgesturerecognizer.h
index d37be6b9..1125d17f 100644
--- a/src/plugins/sensorgestures/qtsensors/qpickupsensorgesturerecognizer.h
+++ b/src/plugins/sensorgestures/qtsensors/qpickupsensorgesturerecognizer.h
@@ -44,9 +44,10 @@
#define QPICKUPSENSORGESTURERECOGNIZER_H
#include <qsensorgesturerecognizer.h>
-#include <QtSensors/QSensor>
-#include <QtSensors/QAccelerometer>
#include <QTimer>
+
+#include "qtsensorgesturesensorhandler.h"
+
QT_BEGIN_NAMESPACE
class QPickupSensorGestureRecognizer : public QSensorGestureRecognizer
@@ -67,10 +68,10 @@ Q_SIGNALS:
void pickup();
private slots:
- void accelChanged();
+ void accelChanged(QAccelerometerReading *reading);
void timeout();
private:
- QAccelerometer *accel;
+ QAccelerometerReading *accelReading;
QTimer *timer;
bool active;
@@ -90,7 +91,6 @@ private:
QList <qreal> zList;
void clear();
-
};
QT_END_NAMESPACE
#endif // QPICKUPSENSORGESTURERECOGNIZER_H
diff --git a/src/plugins/sensorgestures/qtsensors/qshake2recognizer.cpp b/src/plugins/sensorgestures/qtsensors/qshake2recognizer.cpp
index 80b19d88..8bb4d527 100644
--- a/src/plugins/sensorgestures/qtsensors/qshake2recognizer.cpp
+++ b/src/plugins/sensorgestures/qtsensors/qshake2recognizer.cpp
@@ -51,8 +51,7 @@ QT_BEGIN_NAMESPACE
QShake2SensorGestureRecognizer::QShake2SensorGestureRecognizer(QObject *parent)
: QSensorGestureRecognizer(parent)
, active(0),shaking(0), shakeCount(0),
- shakeDirection(QShake2SensorGestureRecognizer::ShakeUndefined)
-{
+ shakeDirection(QShake2SensorGestureRecognizer::ShakeUndefined){
timerTimeout = 750;
}
@@ -62,9 +61,6 @@ QShake2SensorGestureRecognizer::~QShake2SensorGestureRecognizer()
void QShake2SensorGestureRecognizer::create()
{
- accel = new QAccelerometer(this);
- accel->connectToBackend();
-
timer = new QTimer(this);
connect(timer,SIGNAL(timeout()),this,SLOT(timeout()));
timer->setSingleShot(true);
@@ -73,18 +69,24 @@ void QShake2SensorGestureRecognizer::create()
bool QShake2SensorGestureRecognizer::start()
{
- connect(accel,SIGNAL(readingChanged()),this,SLOT(accelChanged()));
- active = accel->start();
+ if (QtSensorGestureSensorHandler::instance()->startSensor(QtSensorGestureSensorHandler::Accel)) {
+ active = true;
+ connect(QtSensorGestureSensorHandler::instance(),SIGNAL(accelReadingChanged(QAccelerometerReading *)),
+ this,SLOT(accelChanged(QAccelerometerReading *)));
+ } else {
+ active = false;
+ }
return active;
}
bool QShake2SensorGestureRecognizer::stop()
{
- accel->stop();
- active = accel->isActive();
- disconnect(accel,SIGNAL(readingChanged()),this,SLOT(accelChanged()));
- return !active;
+ QtSensorGestureSensorHandler::instance()->stopSensor(QtSensorGestureSensorHandler::Accel);
+ disconnect(QtSensorGestureSensorHandler::instance(),SIGNAL(accelReadingChanged(QAccelerometerReading *)),
+ this,SLOT(accelChanged(QAccelerometerReading *)));
+ active = false;
+ return active;
}
bool QShake2SensorGestureRecognizer::isActive()
@@ -100,11 +102,11 @@ QString QShake2SensorGestureRecognizer::id() const
#define NUMBER_SHAKES 3
#define THRESHOLD 25
-void QShake2SensorGestureRecognizer::accelChanged()
+void QShake2SensorGestureRecognizer::accelChanged(QAccelerometerReading *reading)
{
- qreal x = accel->reading()->x();
- qreal y = accel->reading()->y();
- qreal z = accel->reading()->z();
+ qreal x = reading->x();
+ qreal y = reading->y();
+ qreal z = reading->z();
currentData.x = x;
currentData.y = y;
diff --git a/src/plugins/sensorgestures/qtsensors/qshake2recognizer.h b/src/plugins/sensorgestures/qtsensors/qshake2recognizer.h
index ff3de8cf..7c8adf76 100644
--- a/src/plugins/sensorgestures/qtsensors/qshake2recognizer.h
+++ b/src/plugins/sensorgestures/qtsensors/qshake2recognizer.h
@@ -42,15 +42,13 @@
#ifndef QSHAKERECOGNIZER_H
#define QSHAKERECOGNIZER_H
-
-#include <QtSensors/QSensor>
-#include <QtSensors/QAccelerometer>
-#include <QtSensors/QAccelerometerFilter>
-
#include <QDebug>
#include <QTimer>
#include <qsensorgesturerecognizer.h>
+
+#include "qtsensorgesturesensorhandler.h"
+
QT_BEGIN_NAMESPACE
struct ShakeData {
@@ -94,12 +92,12 @@ Q_SIGNALS:
void shakeDown();
private slots:
- void accelChanged();
+ void accelChanged(QAccelerometerReading *reading);
void timeout();
private:
- QAccelerometer *accel;
+ QAccelerometerReading *accelReading;
bool active;
diff --git a/src/plugins/sensorgestures/qtsensors/qslamgesturerecognizer.cpp b/src/plugins/sensorgestures/qtsensors/qslamgesturerecognizer.cpp
index 1bcc1518..27ea950e 100644
--- a/src/plugins/sensorgestures/qtsensors/qslamgesturerecognizer.cpp
+++ b/src/plugins/sensorgestures/qtsensors/qslamgesturerecognizer.cpp
@@ -40,6 +40,8 @@
****************************************************************************/
#include "qslamgesturerecognizer.h"
+#include "qtsensorgesturesensorhandler.h"
+
#include <QtCore/qmath.h>
QT_BEGIN_NAMESPACE
@@ -62,21 +64,7 @@ QSlamSensorGestureRecognizer::~QSlamSensorGestureRecognizer()
void QSlamSensorGestureRecognizer::create()
{
- accel = new QAccelerometer(this);
- accel->connectToBackend();
-
- orientation = new QOrientationSensor(this);
- orientation->connectToBackend();
-
timer = new QTimer(this);
-
- qoutputrangelist outputranges = accel->outputRanges();
-
- if (outputranges.count() > 0)
- accelRange = (int)(outputranges.at(0).maximum *2);//39
- else
- accelRange = 40; //this should never happen
-
connect(timer,SIGNAL(timeout()),this,SLOT(timeout()));
timer->setSingleShot(true);
timer->setInterval(1250);
@@ -90,21 +78,37 @@ QString QSlamSensorGestureRecognizer::id() const
bool QSlamSensorGestureRecognizer::start()
{
- connect(accel,SIGNAL(readingChanged()),this,SLOT(accelChanged()));
- accel->setDataRate(10);
- active = accel->start();
- orientation->start();
+ connect(QtSensorGestureSensorHandler::instance(),SIGNAL(orientationReadingChanged(QOrientationReading *)),
+ this,SLOT(orientationReadingChanged(QOrientationReading *)));
+
+ connect(QtSensorGestureSensorHandler::instance(),SIGNAL(accelReadingChanged(QAccelerometerReading *)),
+ this,SLOT(accelChanged(QAccelerometerReading *)));
+ if (QtSensorGestureSensorHandler::instance()->startSensor(QtSensorGestureSensorHandler::Accel)) {
+ if (QtSensorGestureSensorHandler::instance()->startSensor(QtSensorGestureSensorHandler::Orientation)) {
+ active = true;
+ accelRange = QtSensorGestureSensorHandler::instance()->accelRange;
+ } else {
+ QtSensorGestureSensorHandler::instance()->stopSensor(QtSensorGestureSensorHandler::Accel);
+ active = false;
+ }
+ } else {
+ active = false;
+ }
return active;
}
bool QSlamSensorGestureRecognizer::stop()
{
- accel->stop();
- orientation->stop();
- active = accel->isActive();
- disconnect(accel,SIGNAL(readingChanged()),this,SLOT(accelChanged()));
- return !active;
+ QtSensorGestureSensorHandler::instance()->stopSensor(QtSensorGestureSensorHandler::Accel);
+ QtSensorGestureSensorHandler::instance()->stopSensor(QtSensorGestureSensorHandler::Orientation);
+ disconnect(QtSensorGestureSensorHandler::instance(),SIGNAL(orientationReadingChanged(QOrientationReading *)),
+ this,SLOT(orientationReadingChanged(QOrientationReading *)));
+
+ disconnect(QtSensorGestureSensorHandler::instance(),SIGNAL(accelReadingChanged(QAccelerometerReading *)),
+ this,SLOT(accelChanged(QAccelerometerReading *)));
+ active = false;
+ return active;
}
bool QSlamSensorGestureRecognizer::isActive()
@@ -113,19 +117,22 @@ bool QSlamSensorGestureRecognizer::isActive()
return active;
}
-#define SLAM_FACTOR -16
+void QSlamSensorGestureRecognizer::orientationReadingChanged(QOrientationReading *reading)
+{
+ orientationReading = reading;
+}
+
+#define SLAM_FACTOR -16.0
#define SLAM_WIGGLE_FACTOR 0.95
-void QSlamSensorGestureRecognizer::accelChanged()
+void QSlamSensorGestureRecognizer::accelChanged(QAccelerometerReading *reading)
{
- qreal x = accel->reading()->x();
- qreal y = accel->reading()->y();
- qreal z = accel->reading()->z();
+ qreal x = reading->x();
+ qreal y = reading->y();
+ qreal z = reading->z();
//// very hacky
- QOrientationReading::Orientation currentOrientation = orientation->reading()->orientation();
-
- if (currentOrientation == QOrientationReading::FaceUp) {
+ if (orientationReading->orientation() == QOrientationReading::FaceUp) {
z = z - 9.8;
}
@@ -138,7 +145,6 @@ void QSlamSensorGestureRecognizer::accelChanged()
if (slamMap.count() > 5)
slamMap.removeLast();
-
if (z < SLAM_FACTOR
&& qAbs(diffX) < (accelRange *SLAM_WIGGLE_FACTOR)
&& qAbs(diffY) < (accelRange *SLAM_WIGGLE_FACTOR)) {
diff --git a/src/plugins/sensorgestures/qtsensors/qslamgesturerecognizer.h b/src/plugins/sensorgestures/qtsensors/qslamgesturerecognizer.h
index 38777b8c..e5f71d62 100644
--- a/src/plugins/sensorgestures/qtsensors/qslamgesturerecognizer.h
+++ b/src/plugins/sensorgestures/qtsensors/qslamgesturerecognizer.h
@@ -67,12 +67,14 @@ Q_SIGNALS:
void slam();
private slots:
- void accelChanged();
+ void accelChanged(QAccelerometerReading *reading);
+ void orientationReadingChanged(QOrientationReading *reading);
void timeout();
+
private:
QAccelerometer *accel;
- QOrientationSensor *orientation;
+ QOrientationReading *orientationReading;
QTimer *timer;
int accelRange;
bool active;
diff --git a/src/plugins/sensorgestures/qtsensors/qtsensorgestureplugin.cpp b/src/plugins/sensorgestures/qtsensors/qtsensorgestureplugin.cpp
index eeedf1c9..e770d362 100644
--- a/src/plugins/sensorgestures/qtsensors/qtsensorgestureplugin.cpp
+++ b/src/plugins/sensorgestures/qtsensors/qtsensorgestureplugin.cpp
@@ -88,39 +88,28 @@ QList <QSensorGestureRecognizer *> QtSensorGesturePlugin::createRecognizers()
{
QList <QSensorGestureRecognizer *> recognizers;
-// QSensorGestureRecognizer *sRec1 = new QCirclesSensorGestureRecognizer(this);
-// recognizers.append(sRec1);
+ recognizers.append(new QCoverSensorGestureRecognizer(this));
- QSensorGestureRecognizer *sRec2 = new QCoverSensorGestureRecognizer(this);
- recognizers.append(sRec2);
+ recognizers.append(new QDoubleTapSensorGestureRecognizer(this));
- QSensorGestureRecognizer *sRec3 = new QDoubleTapSensorGestureRecognizer(this);
- recognizers.append(sRec3);
+ recognizers.append(new QHoverSensorGestureRecognizer(this));
- QSensorGestureRecognizer *sRec4 = new QHoverSensorGestureRecognizer(this);
- recognizers.append(sRec4);
+ recognizers.append(new QPickupSensorGestureRecognizer(this));
- QSensorGestureRecognizer *sRec5 = new QPickupSensorGestureRecognizer(this);
- recognizers.append(sRec5);
+ recognizers.append(new QShake2SensorGestureRecognizer(this));
- QSensorGestureRecognizer *sRec6 = new QShake2SensorGestureRecognizer(this);
- recognizers.append(sRec6);
+ recognizers.append(new QSlamSensorGestureRecognizer(this));
- QSensorGestureRecognizer *sRec10 = new QSlamSensorGestureRecognizer(this);
- recognizers.append(sRec10);
+ recognizers.append(new QTurnoverSensorGestureRecognizer(this));
- QSensorGestureRecognizer *sRec7 = new QTurnoverSensorGestureRecognizer(this);
- recognizers.append(sRec7);
+ recognizers.append(new QWhipSensorGestureRecognizer(this));
- QSensorGestureRecognizer *sRec8 = new QWhipSensorGestureRecognizer(this);
- recognizers.append(sRec8);
-
- QSensorGestureRecognizer *sRec9 = new QTwistSensorGestureRecognizer(this);
- recognizers.append(sRec9);
+ recognizers.append(new QTwistSensorGestureRecognizer(this));
return recognizers;
}
+
Q_EXPORT_PLUGIN2(qtsensorgestures_plugin, QtSensorGesturePlugin)
QT_END_NAMESPACE
diff --git a/src/plugins/sensorgestures/qtsensors/qtsensorgestureplugin.h b/src/plugins/sensorgestures/qtsensors/qtsensorgestureplugin.h
index 980f42f7..75e4a2f8 100644
--- a/src/plugins/sensorgestures/qtsensors/qtsensorgestureplugin.h
+++ b/src/plugins/sensorgestures/qtsensors/qtsensorgestureplugin.h
@@ -46,6 +46,7 @@
#include <QStringList>
#include <qsensorgestureplugininterface.h>
+
QT_BEGIN_NAMESPACE
class QtSensorGesturePlugin : public QObject, public QSensorGesturePluginInterface
@@ -61,6 +62,8 @@ public:
QStringList gestureSignals() const;
QStringList supportedIds() const;
QString name() const { return "QtSensorGestures"; }
+
};
+
QT_END_NAMESPACE
#endif // QTSENSORGESTURESPLUGIN_H
diff --git a/src/plugins/sensorgestures/qtsensors/qtsensorgesturesensorhandler.cpp b/src/plugins/sensorgestures/qtsensors/qtsensorgesturesensorhandler.cpp
new file mode 100644
index 00000000..676e94f9
--- /dev/null
+++ b/src/plugins/sensorgestures/qtsensors/qtsensorgesturesensorhandler.cpp
@@ -0,0 +1,192 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/
+**
+** This file is part of the QtSensors module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** GNU Lesser General Public License Usage
+** This file may be used under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation and
+** appearing in the file LICENSE.LGPL included in the packaging of this
+** file. Please review the following information to ensure the GNU Lesser
+** General Public License version 2.1 requirements will be met:
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU General
+** Public License version 3.0 as published by the Free Software Foundation
+** and appearing in the file LICENSE.GPL included in the packaging of this
+** file. Please review the following information to ensure the GNU General
+** Public License version 3.0 requirements will be met:
+** http://www.gnu.org/copyleft/gpl.html.
+**
+** Other Usage
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QDebug>
+
+#include "qtsensorgesturesensorhandler.h"
+
+QtSensorGestureSensorHandler::QtSensorGestureSensorHandler(QObject *parent) :
+ QObject(parent),
+ accel(0), orientation(0), proximity(0), irProx(0),tapSensor(0)
+{
+}
+
+QtSensorGestureSensorHandler* QtSensorGestureSensorHandler::instance()
+{
+ static QtSensorGestureSensorHandler *instance = 0;
+ if (!instance) {
+ instance = new QtSensorGestureSensorHandler;
+ }
+ return instance;
+}
+
+void QtSensorGestureSensorHandler::accelChanged()
+{
+ Q_EMIT accelReadingChanged(accel->reading());
+}
+
+void QtSensorGestureSensorHandler::orientationChanged()
+{
+ Q_EMIT orientationReadingChanged(orientation->reading());
+}
+
+void QtSensorGestureSensorHandler::proximityChanged()
+{
+ Q_EMIT proximityReadingChanged(proximity->reading());
+}
+
+void QtSensorGestureSensorHandler::irProximityChanged()
+{
+ Q_EMIT irProximityReadingChanged(irProx->reading());
+}
+
+void QtSensorGestureSensorHandler::doubletap()
+{
+ Q_EMIT dTabReadingChanged(tapSensor->reading());
+}
+
+bool QtSensorGestureSensorHandler::startSensor(SensorGestureSensors sensor)
+{
+ bool ok = true;
+ switch (sensor) {
+ case Accel:
+ //accel
+ if (!accel) {
+ accel = new QAccelerometer(this);
+ ok = accel->connectToBackend();
+ qoutputrangelist outputranges = accel->outputRanges();
+
+ if (outputranges.count() > 0)
+ accelRange = (int)(outputranges.at(0).maximum *2);//39
+ else
+ accelRange = 39; //this should never happen
+ connect(accel,SIGNAL(readingChanged()),this,SLOT(accelChanged()));
+ }
+ if (ok && !accel->isActive())
+ accel->start();
+ break;
+ case Orientation:
+ //orientation
+ if (!orientation) {
+ orientation = new QOrientationSensor(this);
+ ok = orientation->connectToBackend();
+ connect(orientation,SIGNAL(readingChanged()),this,SLOT(orientationChanged()));
+ }
+ if (ok && !orientation->isActive())
+ orientation->start();
+ break;
+ case Proximity:
+ //proximity
+ if (!proximity) {
+ proximity = new QProximitySensor(this);
+ ok = proximity->connectToBackend();
+ connect(proximity,SIGNAL(readingChanged()),this,SLOT(proximityChanged()));
+ }
+ if (ok && !proximity->isActive())
+ proximity->start();
+ break;
+ case IrProximity:
+ //irproximity
+ if (!irProx) {
+ irProx = new QIRProximitySensor(this);
+ ok = irProx->connectToBackend();
+ connect(irProx,SIGNAL(readingChanged()),this,SLOT(irProximityChanged()));
+ }
+ if (ok && !irProx->isActive())
+ irProx->start();
+ break;
+ case Tap:
+ //dtap
+ if (!tapSensor) {
+ tapSensor = new QTapSensor(this);
+ ok = tapSensor->connectToBackend();
+ connect(tapSensor,SIGNAL(readingChanged()),this,SLOT(doubletap()));
+ }
+ if (ok && !tapSensor->isActive())
+ tapSensor->start();
+ break;
+ };
+ int val = usedSensorsMap.value(sensor);
+ usedSensorsMap.insert(sensor,++val);
+
+ return ok;
+}
+
+void QtSensorGestureSensorHandler::stopSensor(SensorGestureSensors sensor)
+{
+ // qDebug() << __FUNCTION__ << sensor;
+ if (usedSensorsMap.value(sensor) == 0)
+ return;
+ int val = usedSensorsMap.value(sensor);
+ usedSensorsMap.insert(sensor,--val);
+ switch (sensor) {
+ case Accel:
+ //accel
+ if (usedSensorsMap.value(sensor) == 0) {
+ accel->stop();
+ }
+ break;
+ case Orientation:
+ if (usedSensorsMap.value(sensor) == 0) {
+ orientation->stop();
+ }
+ //orientation
+ break;
+ case Proximity:
+ if (usedSensorsMap.value(sensor) == 0) {
+ proximity->stop();
+ }
+ //proximity
+ break;
+ case IrProximity:
+ if (usedSensorsMap.value(sensor) == 0) {
+ irProx->stop();
+ }
+ //irproximity
+ break;
+ case Tap:
+ if (usedSensorsMap.value(sensor) == 0) {
+ tapSensor->stop();
+ }
+ //dtap
+ break;
+ };
+}
diff --git a/src/plugins/sensorgestures/qtsensors/qtsensorgesturesensorhandler.h b/src/plugins/sensorgestures/qtsensors/qtsensorgesturesensorhandler.h
new file mode 100644
index 00000000..f7da59f1
--- /dev/null
+++ b/src/plugins/sensorgestures/qtsensors/qtsensorgesturesensorhandler.h
@@ -0,0 +1,100 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/
+**
+** This file is part of the QtSensors module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** GNU Lesser General Public License Usage
+** This file may be used under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation and
+** appearing in the file LICENSE.LGPL included in the packaging of this
+** file. Please review the following information to ensure the GNU Lesser
+** General Public License version 2.1 requirements will be met:
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU General
+** Public License version 3.0 as published by the Free Software Foundation
+** and appearing in the file LICENSE.GPL included in the packaging of this
+** file. Please review the following information to ensure the GNU General
+** Public License version 3.0 requirements will be met:
+** http://www.gnu.org/copyleft/gpl.html.
+**
+** Other Usage
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QTSENSORGESTURESENSORHANDLER_H
+#define QTSENSORGESTURESENSORHANDLER_H
+
+#include <QObject>
+
+#include <QtSensors/QAccelerometer>
+#include <QtSensors/QAccelerometerFilter>
+#include <QtSensors/QSensor>
+#include <QtSensors/QOrientationSensor>
+#include <QtSensors/QProximitySensor>
+#include <QtSensors/QIRProximitySensor>
+#include <QtSensors/QTapSensor>
+
+class QtSensorGestureSensorHandler : public QObject
+{
+ Q_OBJECT
+ Q_ENUMS(SensorGestureSensors)
+public:
+ explicit QtSensorGestureSensorHandler(QObject *parent = 0);
+
+ enum SensorGestureSensors {
+ Accel = 0,
+ Orientation,
+ Proximity,
+ IrProximity,
+ Tap
+ };
+ static QtSensorGestureSensorHandler *instance();
+ qreal accelRange;
+
+public slots:
+ void accelChanged();
+ void orientationChanged();
+ void proximityChanged();
+ void irProximityChanged();
+ void doubletap();
+
+ bool startSensor(SensorGestureSensors sensor);
+ void stopSensor(SensorGestureSensors sensor);
+
+Q_SIGNALS:
+ void accelReadingChanged(QAccelerometerReading *reading);
+ void orientationReadingChanged(QOrientationReading *reading);
+ void proximityReadingChanged(QProximityReading *reading);
+ void irProximityReadingChanged(QIRProximityReading *reading);
+ void dTabReadingChanged(QTapReading *reading);
+
+private:
+ QAccelerometer *accel;
+ QOrientationSensor *orientation;
+ QProximitySensor *proximity;
+ QIRProximitySensor *irProx;
+ QTapSensor *tapSensor;
+
+ QMap<SensorGestureSensors, int> usedSensorsMap;
+
+};
+
+#endif // QTSENSORGESTURESENSORHANDLER_H
diff --git a/src/plugins/sensorgestures/qtsensors/qtsensors.pro b/src/plugins/sensorgestures/qtsensors/qtsensors.pro
index 745b9863..e469fda9 100644
--- a/src/plugins/sensorgestures/qtsensors/qtsensors.pro
+++ b/src/plugins/sensorgestures/qtsensors/qtsensors.pro
@@ -16,7 +16,8 @@ HEADERS += qtsensorgestureplugin.h \
qslamgesturerecognizer.h \
qturnoversensorgesturerecognizer.h \
qtwistsensorgesturerecognizer.h \
- qwhipsensorgesturerecognizer.h
+ qwhipsensorgesturerecognizer.h \
+ qtsensorgesturesensorhandler.h
SOURCES += qtsensorgestureplugin.cpp \
qcoversensorgesturerecognizer.cpp \
@@ -27,7 +28,8 @@ SOURCES += qtsensorgestureplugin.cpp \
qslamgesturerecognizer.cpp \
qturnoversensorgesturerecognizer.cpp \
qtwistsensorgesturerecognizer.cpp \
- qwhipsensorgesturerecognizer.cpp
+ qwhipsensorgesturerecognizer.cpp \
+ qtsensorgesturesensorhandler.cpp
target.path += $$[QT_INSTALL_PLUGINS]/sensorgestures
INSTALLS += target
diff --git a/src/plugins/sensorgestures/qtsensors/qturnoversensorgesturerecognizer.cpp b/src/plugins/sensorgestures/qtsensors/qturnoversensorgesturerecognizer.cpp
index 17da1a7e..ac4ce5db 100644
--- a/src/plugins/sensorgestures/qtsensors/qturnoversensorgesturerecognizer.cpp
+++ b/src/plugins/sensorgestures/qtsensors/qturnoversensorgesturerecognizer.cpp
@@ -42,6 +42,8 @@
#include <QtSensors/QSensor>
#include "qturnoversensorgesturerecognizer.h"
+#include "qtsensorgesturesensorhandler.h"
+
QT_BEGIN_NAMESPACE
// turnover and put down i.e. facedown
@@ -49,7 +51,7 @@ QT_BEGIN_NAMESPACE
QTurnoverSensorGestureRecognizer::QTurnoverSensorGestureRecognizer(QObject *parent) :
QSensorGestureRecognizer(parent),
isClose(0)
- , isFaceDown(0)
+ , isFaceDown(0), active(0)
{
}
@@ -59,30 +61,41 @@ QTurnoverSensorGestureRecognizer::~QTurnoverSensorGestureRecognizer()
void QTurnoverSensorGestureRecognizer::create()
{
- orientation = new QOrientationSensor(this);
- orientation->connectToBackend();
- proximity = new QProximitySensor(this);
- proximity->connectToBackend();
-
-
}
bool QTurnoverSensorGestureRecognizer::start()
{
- connect(orientation,SIGNAL(readingChanged()),this,SLOT(orientationChanged()));
- connect(proximity,SIGNAL(readingChanged()),this,SLOT(proximityChanged()));
- active = (orientation->start() && proximity->start());
+ if (QtSensorGestureSensorHandler::instance()->startSensor(QtSensorGestureSensorHandler::Proximity)) {
+ if (QtSensorGestureSensorHandler::instance()->startSensor(QtSensorGestureSensorHandler::Orientation)) {
+ active = true;
+ 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::Proximity);
+ active = false;
+ }
+ } else {
+ active = false;
+ }
return active;
}
bool QTurnoverSensorGestureRecognizer::stop()
{
- orientation->stop();
- proximity->stop();
- active = (orientation->isActive() && proximity->isActive());
- disconnect(orientation,SIGNAL(readingChanged()),this,SLOT(orientationChanged()));
- disconnect(proximity,SIGNAL(readingChanged()),this,SLOT(proximityChanged()));
- return !active;
+ QtSensorGestureSensorHandler::instance()->stopSensor(QtSensorGestureSensorHandler::Proximity);
+ QtSensorGestureSensorHandler::instance()->stopSensor(QtSensorGestureSensorHandler::Orientation);
+
+ disconnect(QtSensorGestureSensorHandler::instance(),SIGNAL(proximityReadingChanged(QProximityReading *)),
+ this,SLOT(proximityChanged(QProximityReading *)));
+ disconnect(QtSensorGestureSensorHandler::instance(),SIGNAL(orientationReadingChanged(QOrientationReading *)),
+ this,SLOT(orientationReadingChanged(QOrientationReading *)));
+
+ active = false;
+
+ return active;
}
bool QTurnoverSensorGestureRecognizer::isActive()
@@ -95,15 +108,15 @@ QString QTurnoverSensorGestureRecognizer::id() const
return QString("QtSensors.turnover");
}
-void QTurnoverSensorGestureRecognizer::proximityChanged()
+void QTurnoverSensorGestureRecognizer::proximityChanged(QProximityReading *reading)
{
- isClose = proximity->reading()->close();
+ isClose = reading->close();
isRecognized();
}
-void QTurnoverSensorGestureRecognizer::orientationChanged()
+void QTurnoverSensorGestureRecognizer::orientationReadingChanged(QOrientationReading *reading)
{
- switch (orientation->reading()->orientation()) {
+ switch (reading->orientation()) {
case QOrientationReading::FaceDown:
{
isFaceDown = true;
diff --git a/src/plugins/sensorgestures/qtsensors/qturnoversensorgesturerecognizer.h b/src/plugins/sensorgestures/qtsensors/qturnoversensorgesturerecognizer.h
index 3462a4e4..d32611e4 100644
--- a/src/plugins/sensorgestures/qtsensors/qturnoversensorgesturerecognizer.h
+++ b/src/plugins/sensorgestures/qtsensors/qturnoversensorgesturerecognizer.h
@@ -42,11 +42,9 @@
#ifndef QTURNOVERSENSORGESTURERECOGNIZER_H
#define QTURNOVERSENSORGESTURERECOGNIZER_H
-#include <QtSensors/QSensor>
-#include <QtSensors/QOrientationSensor>
-#include <QtSensors/QProximitySensor>
-
#include <qsensorgesturerecognizer.h>
+#include "qtsensorgesturesensorhandler.h"
+
QT_BEGIN_NAMESPACE
class QTurnoverSensorGestureRecognizer : public QSensorGestureRecognizer
@@ -65,12 +63,10 @@ Q_SIGNALS:
void turnover();
private slots:
- void orientationChanged();
- void proximityChanged();
+ void orientationReadingChanged(QOrientationReading *reading);
+ void proximityChanged(QProximityReading *reading);
private:
- QOrientationSensor *orientation;
- QProximitySensor *proximity;
bool isClose;
bool isFaceDown;
diff --git a/src/plugins/sensorgestures/qtsensors/qtwistsensorgesturerecognizer.cpp b/src/plugins/sensorgestures/qtsensors/qtwistsensorgesturerecognizer.cpp
index a5a8cab6..3db09ba2 100644
--- a/src/plugins/sensorgestures/qtsensors/qtwistsensorgesturerecognizer.cpp
+++ b/src/plugins/sensorgestures/qtsensors/qtwistsensorgesturerecognizer.cpp
@@ -61,25 +61,10 @@ QTwistSensorGestureRecognizer::~QTwistSensorGestureRecognizer()
void QTwistSensorGestureRecognizer::create()
{
- accel = new QAccelerometer(this);
- accel->connectToBackend();
- accel->setDataRate(5);
- orientation = new QOrientationSensor(this);
- orientation->connectToBackend();
-
timer = new QTimer(this);
-
- qoutputrangelist outputranges = accel->outputRanges();
-
- if (outputranges.count() > 0)
- accelRange = (int)(outputranges.at(0).maximum * 2);
- else
- accelRange = 44; //this should never happen
-
connect(timer,SIGNAL(timeout()),this,SLOT(timeout()));
timer->setSingleShot(true);
timer->setInterval(500);
-
}
QString QTwistSensorGestureRecognizer::id() const
@@ -89,20 +74,36 @@ QString QTwistSensorGestureRecognizer::id() const
bool QTwistSensorGestureRecognizer::start()
{
- connect(accel,SIGNAL(readingChanged()),this,SLOT(accelChanged()));
- active = accel->start();
- orientation->start();
+ if (QtSensorGestureSensorHandler::instance()->startSensor(QtSensorGestureSensorHandler::Accel)) {
+ if (QtSensorGestureSensorHandler::instance()->startSensor(QtSensorGestureSensorHandler::Orientation)) {
+ accelRange = QtSensorGestureSensorHandler::instance()->accelRange;
+ active = true;
+ connect(QtSensorGestureSensorHandler::instance(),SIGNAL(orientationReadingChanged(QOrientationReading *)),
+ this,SLOT(orientationReadingChanged(QOrientationReading *)));
+
+ connect(QtSensorGestureSensorHandler::instance(),SIGNAL(accelReadingChanged(QAccelerometerReading *)),
+ this,SLOT(accelChanged(QAccelerometerReading *)));
+ } else {
+ QtSensorGestureSensorHandler::instance()->stopSensor(QtSensorGestureSensorHandler::Accel);
+ active = false;
+ }
+ } else {
+ active = false;
+ }
return active;
}
bool QTwistSensorGestureRecognizer::stop()
{
- accel->stop();
- disconnect(accel,SIGNAL(readingChanged()),this,SLOT(accelChanged()));
-
- active = accel->isActive();
- orientation->stop();
- return !active;
+ QtSensorGestureSensorHandler::instance()->stopSensor(QtSensorGestureSensorHandler::Accel);
+ QtSensorGestureSensorHandler::instance()->stopSensor(QtSensorGestureSensorHandler::Orientation);
+ disconnect(QtSensorGestureSensorHandler::instance(),SIGNAL(orientationReadingChanged(QOrientationReading *)),
+ this,SLOT(orientationReadingChanged(QOrientationReading *)));
+
+ disconnect(QtSensorGestureSensorHandler::instance(),SIGNAL(accelReadingChanged(QAccelerometerReading *)),
+ this,SLOT(accelChanged(QAccelerometerReading *)));
+ active = false;
+ return active;
}
bool QTwistSensorGestureRecognizer::isActive()
@@ -113,11 +114,16 @@ bool QTwistSensorGestureRecognizer::isActive()
#define RESTING_VARIANCE 25
#define THRESHOLD_DEGREES 50
-void QTwistSensorGestureRecognizer::accelChanged()
+void QTwistSensorGestureRecognizer::orientationReadingChanged(QOrientationReading *reading)
+{
+ orientationReading = reading;
+}
+
+void QTwistSensorGestureRecognizer::accelChanged(QAccelerometerReading *reading)
{
- qreal x = accel->reading()->x();
- qreal y = accel->reading()->y();
- qreal z = accel->reading()->z();
+ qreal x = reading->x();
+ qreal y = reading->y();
+ qreal z = reading->z();
qreal diffX = lastX - x;
qreal diffY = lastY - y;
@@ -157,11 +163,11 @@ void QTwistSensorGestureRecognizer::accelChanged()
detecting = true;
timer->start();
lastRoll = degrees;
- lastOrientation = orientation->reading()->orientation();
+ lastOrientation = orientationReading->orientation();
}
- if (detecting && (orientation->reading()->orientation() == QOrientationReading::TopUp
- || orientation->reading()->orientation() == QOrientationReading::TopDown)) {
+ if (detecting && (orientationReading->orientation() == QOrientationReading::TopUp
+ || orientationReading->orientation() == QOrientationReading::TopDown)) {
detecting = false;
timer->stop();
diff --git a/src/plugins/sensorgestures/qtsensors/qtwistsensorgesturerecognizer.h b/src/plugins/sensorgestures/qtsensors/qtwistsensorgesturerecognizer.h
index df366060..6beb7c82 100644
--- a/src/plugins/sensorgestures/qtsensors/qtwistsensorgesturerecognizer.h
+++ b/src/plugins/sensorgestures/qtsensors/qtwistsensorgesturerecognizer.h
@@ -46,6 +46,7 @@
#include <qsensorgesturerecognizer.h>
#include <QtSensors/QAccelerometer>
#include <QtSensors/QOrientationSensor>
+#include "qtsensorgesturesensorhandler.h"
QT_BEGIN_NAMESPACE
@@ -68,12 +69,13 @@ Q_SIGNALS:
void twistRight();
private slots:
- void accelChanged();
+ void accelChanged(QAccelerometerReading *reading);
+ void orientationReadingChanged(QOrientationReading *reading);
void timeout();
private:
- QAccelerometer *accel;
- QOrientationSensor *orientation;
+
+ QOrientationReading *orientationReading;
QTimer *timer;
int accelRange;
qreal lastRoll;
diff --git a/src/plugins/sensorgestures/qtsensors/qwhipsensorgesturerecognizer.cpp b/src/plugins/sensorgestures/qtsensors/qwhipsensorgesturerecognizer.cpp
index 676b42ae..8d4eb1a5 100644
--- a/src/plugins/sensorgestures/qtsensors/qwhipsensorgesturerecognizer.cpp
+++ b/src/plugins/sensorgestures/qtsensors/qwhipsensorgesturerecognizer.cpp
@@ -41,6 +41,7 @@
#include "qwhipsensorgesturerecognizer.h"
+#include "qtsensorgesturesensorhandler.h"
#include <QtCore/qmath.h>
@@ -48,7 +49,7 @@ QT_BEGIN_NAMESPACE
QWhipSensorGestureRecognizer::QWhipSensorGestureRecognizer(QObject *parent) :
QSensorGestureRecognizer(parent), whipIt(0), lastX(0),
- detectedX(0)
+ detectedX(0), active(0)
{
}
@@ -58,25 +59,10 @@ QWhipSensorGestureRecognizer::~QWhipSensorGestureRecognizer()
void QWhipSensorGestureRecognizer::create()
{
- accel = new QAccelerometer(this);
- accel->connectToBackend();
-
- orientation = new QOrientationSensor(this);
- orientation->connectToBackend();
-
timer = new QTimer(this);
-
- qoutputrangelist outputranges = accel->outputRanges();
-
- if (outputranges.count() > 0)
- accelRange = (int)(outputranges.at(0).maximum);
- else
- accelRange = 44; //this should never happen
-
connect(timer,SIGNAL(timeout()),this,SLOT(timeout()));
timer->setSingleShot(true);
timer->setInterval(750);
-
}
QString QWhipSensorGestureRecognizer::id() const
@@ -86,19 +72,36 @@ QString QWhipSensorGestureRecognizer::id() const
bool QWhipSensorGestureRecognizer::start()
{
- connect(accel,SIGNAL(readingChanged()),this,SLOT(accelChanged()));
- active = accel->start();
- orientation->start();
+ if (QtSensorGestureSensorHandler::instance()->startSensor(QtSensorGestureSensorHandler::Accel)) {
+ if (QtSensorGestureSensorHandler::instance()->startSensor(QtSensorGestureSensorHandler::Orientation)) {
+ accelRange = QtSensorGestureSensorHandler::instance()->accelRange;
+ active = true;
+ connect(QtSensorGestureSensorHandler::instance(),SIGNAL(orientationReadingChanged(QOrientationReading *)),
+ this,SLOT(orientationReadingChanged(QOrientationReading *)));
+
+ connect(QtSensorGestureSensorHandler::instance(),SIGNAL(accelReadingChanged(QAccelerometerReading *)),
+ this,SLOT(accelChanged(QAccelerometerReading *)));
+ } else {
+ QtSensorGestureSensorHandler::instance()->stopSensor(QtSensorGestureSensorHandler::Accel);
+ active = false;
+ }
+ } else {
+ active = false;
+ }
return active;
}
bool QWhipSensorGestureRecognizer::stop()
{
- accel->stop();
- active = accel->isActive();
- orientation->stop();
- disconnect(accel,SIGNAL(readingChanged()),this,SLOT(accelChanged()));
- return !active;
+ QtSensorGestureSensorHandler::instance()->stopSensor(QtSensorGestureSensorHandler::Accel);
+ QtSensorGestureSensorHandler::instance()->stopSensor(QtSensorGestureSensorHandler::Orientation);
+ disconnect(QtSensorGestureSensorHandler::instance(),SIGNAL(orientationReadingChanged(QOrientationReading *)),
+ this,SLOT(orientationReadingChanged(QOrientationReading *)));
+
+ disconnect(QtSensorGestureSensorHandler::instance(),SIGNAL(accelReadingChanged(QAccelerometerReading *)),
+ this,SLOT(accelChanged(QAccelerometerReading *)));
+ active = false;
+ return active;
}
bool QWhipSensorGestureRecognizer::isActive()
@@ -107,7 +110,7 @@ bool QWhipSensorGestureRecognizer::isActive()
}
#define WHIP_THRESHOLD_FACTOR 0.85 //37
-#define WHIP_DETECTION_FACTOR 0.3 // 11.7
+#define WHIP_DETECTION_FACTOR 0.15 // 5.85
#define WHIP_DEGREES 25
@@ -117,24 +120,28 @@ bool QWhipSensorGestureRecognizer::isActive()
#define RADIANS_TO_DEGREES 57.2957795
-void QWhipSensorGestureRecognizer::accelChanged()
+void QWhipSensorGestureRecognizer::orientationReadingChanged(QOrientationReading *reading)
{
- qreal x = accel->reading()->x();
+ orientationReading = reading;
+}
+
+void QWhipSensorGestureRecognizer::accelChanged(QAccelerometerReading *reading)
+{
+ qreal x = reading->x();
qreal difference = lastX - x;
+
if (qAbs(difference) < 1)
return;
- qreal y = accel->reading()->y();
- qreal z = accel->reading()->z();
+ qreal y = reading->y();
+ qreal z = reading->z();
qreal roll = qAtan(x / qSqrt(y*y + z*z)) * RADIANS_TO_DEGREES;
- QOrientationReading::Orientation currentOrientation = orientation->reading()->orientation();
-
if (whipIt) {
- if (currentOrientation == QOrientationReading::TopUp
- && roll > WHIP_Y_DEGREES
+ if (/*orientationReading->orientation() == QOrientationReading::TopUp
+ && */ roll > WHIP_Y_DEGREES
&& ((!wasNegative && qAbs(detectedX - x) > accelRange * WHIP_THRESHOLD_FACTOR)
|| (wasNegative && detectedX - x > (accelRange * WHIP_THRESHOLD_FACTOR))) ) {
Q_EMIT whip();
@@ -143,8 +150,8 @@ void QWhipSensorGestureRecognizer::accelChanged()
timer->stop();
}
} else if (!timer->isActive()
- && currentOrientation == QOrientationReading::TopUp
- && roll < -WHIP_Y_DEGREES
+ // && orientationReading->orientation() == QOrientationReading::TopUp
+ && roll < WHIP_Y_DEGREES
&& ((difference > accelRange * WHIP_DETECTION_FACTOR)
|| (difference < -accelRange * WHIP_DETECTION_FACTOR))) {
detectedX = x;
diff --git a/src/plugins/sensorgestures/qtsensors/qwhipsensorgesturerecognizer.h b/src/plugins/sensorgestures/qtsensors/qwhipsensorgesturerecognizer.h
index 6d22af68..234a69a7 100644
--- a/src/plugins/sensorgestures/qtsensors/qwhipsensorgesturerecognizer.h
+++ b/src/plugins/sensorgestures/qtsensors/qwhipsensorgesturerecognizer.h
@@ -44,8 +44,8 @@
#define QWHIPSENSORGESTURERECOGNIZER_H
#include <qsensorgesturerecognizer.h>
-#include <QtSensors/QAccelerometer>
-#include <QtSensors/QOrientationSensor>
+
+#include "qtsensorgesturesensorhandler.h"
QT_BEGIN_NAMESPACE
@@ -67,11 +67,12 @@ Q_SIGNALS:
void whip();
private slots:
- void accelChanged();
+ void accelChanged(QAccelerometerReading *reading);
+ void orientationReadingChanged(QOrientationReading *reading);
void timeout();
+
private:
- QAccelerometer *accel;
- QOrientationSensor *orientation;
+ QOrientationReading *orientationReading;
QTimer *timer;
int accelRange;
bool whipIt;
@@ -85,5 +86,6 @@ private:
qreal roll;
};
+
QT_END_NAMESPACE
#endif // QWHIPSENSORGESTURERECOGNIZER_H
diff --git a/src/plugins/sensorgestures/shake/qshakerecognizer.cpp b/src/plugins/sensorgestures/shake/qshakerecognizer.cpp
index b85d770b..41df8591 100644
--- a/src/plugins/sensorgestures/shake/qshakerecognizer.cpp
+++ b/src/plugins/sensorgestures/shake/qshakerecognizer.cpp
@@ -73,7 +73,6 @@ void QShakeSensorGestureRecognizer::create()
bool QShakeSensorGestureRecognizer::start()
{
active = accel->start();
-
return active;
}