summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLorn Potter <lorn.potter@nokia.com>2012-05-24 16:50:07 +1000
committerQt by Nokia <qt-info@nokia.com>2012-05-24 23:41:05 +0200
commit6e8bc699d4ee14a4abd6c5b0b6f1a5ad0abbe52c (patch)
tree59942bbd5c4fe0322d79f5ccf172f383958fa96c
parent2b9190a9604135e91da5e473b61ba44b47cb7bea (diff)
fix false positive sensor gesture recognition when slam is too close to head
Change-Id: Ic6aa24ca44b6cb61c1592bd8536a092d7ec0fc90 Reviewed-by: Lorn Potter <lorn.potter@nokia.com>
-rw-r--r--src/plugins/sensorgestures/qtsensors/qhoversensorgesturerecognizer.cpp25
-rw-r--r--src/plugins/sensorgestures/qtsensors/qhoversensorgesturerecognizer.h2
-rw-r--r--tests/auto/qsensorgestures_gestures/dataset2_mock_data/sensordata_nothover2.dat204
-rw-r--r--tests/auto/qsensorgestures_gestures/tst_sensorgestures_gestures.cpp26
4 files changed, 254 insertions, 3 deletions
diff --git a/src/plugins/sensorgestures/qtsensors/qhoversensorgesturerecognizer.cpp b/src/plugins/sensorgestures/qtsensors/qhoversensorgesturerecognizer.cpp
index b19973f6..2762e2cd 100644
--- a/src/plugins/sensorgestures/qtsensors/qhoversensorgesturerecognizer.cpp
+++ b/src/plugins/sensorgestures/qtsensors/qhoversensorgesturerecognizer.cpp
@@ -71,12 +71,20 @@ QString QHoverSensorGestureRecognizer::id() const
bool QHoverSensorGestureRecognizer::start()
{
if (QtSensorGestureSensorHandler::instance()->startSensor(QtSensorGestureSensorHandler::IrProximity)) {
- active = true;
- connect(QtSensorGestureSensorHandler::instance(),SIGNAL(irProximityReadingChanged(QIRProximityReading *)),
- this,SLOT(irProximityReadingChanged(QIRProximityReading *)));
+ if (QtSensorGestureSensorHandler::instance()->startSensor(QtSensorGestureSensorHandler::Orientation)) {
+ active = true;
+ connect(QtSensorGestureSensorHandler::instance(),SIGNAL(irProximityReadingChanged(QIRProximityReading *)),
+ this,SLOT(irProximityReadingChanged(QIRProximityReading *)));
+ connect(QtSensorGestureSensorHandler::instance(),SIGNAL(orientationReadingChanged(QOrientationReading *)),
+ this,SLOT(orientationReadingChanged(QOrientationReading *)));
+ } else {
+ QtSensorGestureSensorHandler::instance()->stopSensor(QtSensorGestureSensorHandler::IrProximity);
+ active = false;
+ }
} else {
active = false;
}
+
detecting = false;
detectedHigh = 0;
initialReflectance = 0;
@@ -87,8 +95,11 @@ bool QHoverSensorGestureRecognizer::start()
bool QHoverSensorGestureRecognizer::stop()
{
QtSensorGestureSensorHandler::instance()->stopSensor(QtSensorGestureSensorHandler::IrProximity);
+ QtSensorGestureSensorHandler::instance()->stopSensor(QtSensorGestureSensorHandler::Orientation);
disconnect(QtSensorGestureSensorHandler::instance(),SIGNAL(irProximityReadingChanged(QIRProximityReading *)),
this,SLOT(irProximityReadingChanged(QIRProximityReading *)));
+ disconnect(QtSensorGestureSensorHandler::instance(),SIGNAL(orientationReadingChanged(QOrientationReading *)),
+ this,SLOT(orientationReadingChanged(QOrientationReading *)));
active = false;
return active;
}
@@ -98,6 +109,12 @@ bool QHoverSensorGestureRecognizer::isActive()
return active;
}
+
+void QHoverSensorGestureRecognizer::orientationReadingChanged(QOrientationReading *reading)
+{
+ orientationReading = reading;
+}
+
void QHoverSensorGestureRecognizer::irProximityReadingChanged(QIRProximityReading *reading)
{
reflectance = reading->reflectance();
@@ -157,6 +174,8 @@ void QHoverSensorGestureRecognizer::irProximityReadingChanged(QIRProximityReadin
bool QHoverSensorGestureRecognizer::checkForHovering()
{
+ if (orientationReading->orientation() != QOrientationReading::FaceUp)
+ return false;
if ( (reflectance > 0.2 && reflectance < 0.4)
&& (initialReflectance - reflectance) < -0.1)
return true;
diff --git a/src/plugins/sensorgestures/qtsensors/qhoversensorgesturerecognizer.h b/src/plugins/sensorgestures/qtsensors/qhoversensorgesturerecognizer.h
index 27b30151..1a6c5dc6 100644
--- a/src/plugins/sensorgestures/qtsensors/qhoversensorgesturerecognizer.h
+++ b/src/plugins/sensorgestures/qtsensors/qhoversensorgesturerecognizer.h
@@ -68,10 +68,12 @@ Q_SIGNALS:
void hover();
private slots:
+ void orientationReadingChanged(QOrientationReading *reading);
void irProximityReadingChanged(QIRProximityReading *reading);
void timeout();
void timeout2();
private:
+ QOrientationReading *orientationReading;
qreal reflectance;
QTimer *timer2;
diff --git a/tests/auto/qsensorgestures_gestures/dataset2_mock_data/sensordata_nothover2.dat b/tests/auto/qsensorgestures_gestures/dataset2_mock_data/sensordata_nothover2.dat
new file mode 100644
index 00000000..4f3c6bfe
--- /dev/null
+++ b/tests/auto/qsensorgestures_gestures/dataset2_mock_data/sensordata_nothover2.dat
@@ -0,0 +1,204 @@
+orientation:6991310589,5
+accelerometer: 6993361126,-0.440748,-0.32577,9.60065
+accelerometer: 6993380810,-0.5174,-0.172467,9.48567
+accelerometer: 6993400555,-0.5174,-0.172467,9.84977
+accelerometer: 6993440564,-0.383259,-0.555726,9.81144
+accelerometer: 6993460583,-0.651541,-0.32577,9.92642
+irProximity:6993468313,0.101961
+accelerometer: 6993480572,-0.134141,0.306608,10.0414
+proximity:6993491811,0
+accelerometer: 6993500592,-0.229956,0.249119,10.0031
+accelerometer: 6993520520,-0.229956,0.594052,9.88809
+accelerometer: 6993540570,-0.459911,0.670704,10.0797
+accelerometer: 6993560559,-0.383259,0.555726,9.54316
+irProximity:6993572286,0.117647
+accelerometer: 6993580639,-0.594052,0.651541,9.69646
+accelerometer: 6993600628,-0.613215,0.383259,9.524
+accelerometer: 6993620892,-0.574889,0.766519,9.33237
+accelerometer: 6993640912,-0.287445,1.01564,9.14074
+accelerometer: 6993660656,-0.574889,1.22643,8.96827
+irProximity:6993672933,0.156863
+accelerometer: 6993680584,-0.0766519,1.09229,9.524
+accelerometer: 6993700573,0.0958148,1.49471,10.0414
+accelerometer: 6993720746,0.344933,1.53304,10.0989
+accelerometer: 6993740551,0.287445,1.43722,10.6163
+accelerometer: 6993760601,0.229956,1.45639,10.3863
+irProximity:6993775747,0.0392157
+accelerometer: 6993780560,0.498237,1.37973,10.9995
+accelerometer: 6993800885,0.32577,1.83965,10.7888
+accelerometer: 6993820599,0.344933,2.0696,10.4247
+accelerometer: 6993840558,0.440748,2.20374,10.5588
+accelerometer: 6993860577,0.804845,2.47202,10.9612
+irProximity:6993876272,0.137255
+accelerometer: 6993880566,0.804845,2.18458,11.2295
+accelerometer: 6993900586,1.07313,2.03127,11.057
+accelerometer: 6993920910,0.824008,2.31872,10.5013
+accelerometer: 6993940930,0.996474,2.83612,10.3288
+accelerometer: 6993960919,1.87797,2.89361,10.4055
+irProximity:6993976949,0.101961
+accelerometer: 6993980938,2.33788,2.97026,10.6546
+accelerometer: 6994000866,2.51035,2.91277,9.75395
+accelerometer: 6994020947,2.85528,3.20022,9.40902
+accelerometer: 6994040936,3.60264,4.27334,9.86893
+accelerometer: 6994060925,3.89008,4.02422,9.04492
+irProximity:6994077596,0.121569
+accelerometer: 6994080945,4.40748,4.06255,8.01012
+accelerometer: 6994100689,4.61828,6.89867,7.56937
+accelerometer: 6994120923,5.5381,8.54668,7.22444
+accelerometer: 6994140942,4.48413,7.14779,5.5381
+accelerometer: 6994160809,2.0696,6.53457,2.79779
+irProximity:6994178274,0.117647
+accelerometer: 6994180920,0.153304,7.12862,1.20727
+orientation:6994180920,1
+accelerometer: 6994201001,-1.85881,7.07114,-0.440748
+accelerometer: 6994220929,-2.12709,8.2784,-1.82048
+accelerometer: 6994240918,-0.843171,7.47356,-1.36057
+accelerometer: 6994260907,0.172467,7.87598,-0.0958148
+irProximity:6994280477,0.0588235
+accelerometer: 6994280896,-0.536563,7.89514,0.459911
+accelerometer: 6994300580,-1.14978,7.91431,-0.210793
+accelerometer: 6994322339,-0.440748,8.2784,-0.632378
+accelerometer: 6994340954,0.019163,8.71915,-0.824008
+accelerometer: 6994360943,0.479074,8.66166,-0.32577
+irProximity:6994381002,0.156863
+accelerometer: 6994381024,0.344933,8.94911,-0.402422
+accelerometer: 6994400586,0.229956,9.29404,-0.172467
+accelerometer: 6994420910,0.651541,9.54316,0.0574889
+accelerometer: 6994440899,0.90066,9.56232,0.421585
+accelerometer: 6994460919,0.613215,9.42818,0.153304
+irProximity:6994481741,0.27451
+accelerometer: 6994481213,0.958148,9.60065,-0.0958148
+accelerometer: 6994501599,0.383259,9.23655,-0.747356
+accelerometer: 6994520764,-1.45639,8.14426,-0.574889
+accelerometer: 6994540814,-6.70704,4.84823,-1.16894
+accelerometer: 6994560833,-13.9698,0.5174,-0.938986
+accelerometer: 6994580517,-21.3092,-4.33083,-2.587
+irProximity:6994582265,0.270588
+accelerometer: 6994600537,-22.1141,-9.38986,-2.16542
+accelerometer: 6994620831,-13.8548,-14.1614,0.555726
+accelerometer: 6994640820,0.919823,-17.9557,4.48413
+accelerometer: 6994660779,21.4242,-17.9174,8.85329
+accelerometer: 6994680645,37.8469,-10.3288,-0.459911
+irProximity:6994683187,0.34902
+accelerometer: 6994701184,35.5665,-5.94052,-2.54868
+accelerometer: 6994720929,25.7359,-10.5205,4.86739
+accelerometer: 6994740918,21.2326,-7.62686,8.4892
+accelerometer: 6994760907,16.8251,-5.26982,7.35858
+accelerometer: 6994780713,12.5709,-3.35352,2.2229
+irProximity:6994784078,0.0862745
+accelerometer: 6994800549,10.7696,-3.89008,-0.134141
+accelerometer: 6994820935,11.4786,-3.12356,0.421585
+orientation:6994820935,4
+accelerometer: 6994840924,12.4943,-3.83259,0.114978
+accelerometer: 6994860913,12.1302,-3.06608,-0.0574889
+accelerometer: 6994880749,10.5205,-2.14625,0.804845
+irProximity:6994884969,0.141176
+accelerometer: 6994900647,10.2522,-1.5522,1.66718
+accelerometer: 6994920941,9.81144,-1.80132,2.10793
+accelerometer: 6994940930,9.0066,-1.89713,2.51035
+accelerometer: 6994960888,8.71915,-2.26123,2.85528
+accelerometer: 6994980755,8.52752,-2.2229,3.35352
+irProximity:6994985830,0.0901961
+accelerometer: 6995000775,8.22091,-2.68282,3.18105
+accelerometer: 6995020916,8.50836,-2.41453,2.77863
+accelerometer: 6995040905,8.50836,-2.51035,2.7403
+accelerometer: 6995060894,8.87245,-2.12709,2.87445
+accelerometer: 6995080761,9.10241,-2.52951,3.14273
+irProximity:6995086721,0.0941176
+accelerometer: 6995100567,9.0066,-2.29956,3.04691
+accelerometer: 6995120862,8.81497,-2.64449,3.02775
+accelerometer: 6995140759,8.6425,-2.4337,2.47202
+accelerometer: 6995160931,8.87245,-2.03127,2.41453
+accelerometer: 6995180706,9.27488,-1.95462,2.91277
+irProximity:6995187551,0.0980392
+accelerometer: 6995201153,9.3132,-2.0696,3.18105
+accelerometer: 6995220929,9.17906,-2.10793,3.23854
+accelerometer: 6995240857,8.98743,-2.29956,3.41101
+accelerometer: 6995260907,8.94911,-2.0696,3.21938
+accelerometer: 6995280713,8.83413,-2.14625,3.04691
+accelerometer: 6995300518,8.73831,-1.99295,2.9511
+accelerometer: 6995321087,8.77664,-2.12709,3.1044
+accelerometer: 6995340924,8.68083,-2.20374,3.14273
+accelerometer: 6995360882,8.66166,-2.18458,3.00859
+accelerometer: 6995380719,8.71915,-2.2229,2.9511
+irProximity:6995389303,0
+accelerometer: 6995400769,8.69999,-2.26123,3.02775
+accelerometer: 6995420910,8.7958,-2.16542,3.21938
+accelerometer: 6995440899,8.73831,-2.0696,3.23854
+accelerometer: 6995460888,8.6425,-1.97379,3.16189
+accelerometer: 6995480694,8.73831,-2.2229,3.33436
+irProximity:6995490011,0.0627451
+accelerometer: 6995500531,8.71915,-2.0696,3.54515
+accelerometer: 6995520916,8.73831,-2.18458,3.48766
+accelerometer: 6995540966,8.75748,-1.85881,3.43017
+accelerometer: 6995560925,8.91078,-1.93546,3.44933
+accelerometer: 6995580761,8.77664,-2.03127,3.23854
+irProximity:6995590963,0.0705882
+accelerometer: 6995601056,8.81497,-2.01211,3.44933
+accelerometer: 6995620862,8.71915,-2.10793,3.7751
+accelerometer: 6995640881,8.85329,-1.93546,4.02422
+accelerometer: 6995661053,8.7958,-2.24207,4.21585
+accelerometer: 6995680737,8.68083,-2.33788,3.94757
+accelerometer: 6995700543,8.73831,-2.26123,3.89008
+accelerometer: 6995720929,8.83413,-2.03127,4.63744
+accelerometer: 6995740887,8.87245,-2.03127,5.40396
+accelerometer: 6995760937,9.12157,-1.72467,6.49625
+accelerometer: 6995780896,8.73831,-1.72467,6.91783
+irProximity:6995792348,0
+accelerometer: 6995800549,8.24008,-2.47202,7.10946
+accelerometer: 6995820904,7.66519,-2.0696,7.28193
+accelerometer: 6995840924,6.78369,-2.70198,7.43523
+accelerometer: 6995860913,5.6914,-2.41453,7.53105
+orientation:6995860913,5
+accelerometer: 6995880932,4.46497,-2.10793,7.4544
+accelerometer: 6995900738,3.67929,-2.05044,7.41607
+accelerometer: 6995920910,3.23854,-1.87797,7.72268
+accelerometer: 6995940747,2.9511,-1.51387,8.50836
+accelerometer: 6995960858,2.72114,-1.43722,9.06409
+accelerometer: 6995980877,2.2229,-1.64802,8.73831
+irProximity:6995993764,0.105882
+accelerometer: 6996003003,1.66718,-1.7055,9.17906
+accelerometer: 6996020855,1.43722,-1.60969,9.40902
+accelerometer: 6996040875,1.20727,-1.83965,9.29404
+accelerometer: 6996060925,1.07313,-1.68634,9.46651
+accelerometer: 6996080945,1.24559,-1.41806,9.73479
+irProximity:6996094472,0
+accelerometer: 6996101147,0.90066,-1.30308,9.61981
+accelerometer: 6996120923,0.498237,-1.49471,9.04492
+accelerometer: 6996140912,0.5174,-1.16894,9.04492
+accelerometer: 6996160870,0.728193,-1.3989,9.48567
+accelerometer: 6996180890,0.19163,-1.09229,9.524
+accelerometer: 6996200543,0.344933,-1.24559,8.75748
+accelerometer: 6996220929,0.364096,-1.05396,9.40902
+accelerometer: 6996240918,0.364096,-1.34141,9.44734
+accelerometer: 6996260846,0.498237,-1.05396,9.61981
+accelerometer: 6996280896,0.459911,-0.958148,9.84977
+irProximity:6996295827,0.0196078
+accelerometer: 6996300549,0.32577,-0.804845,9.56232
+accelerometer: 6996320904,0.498237,-1.32224,9.14074
+accelerometer: 6996340893,0.229956,-1.51387,9.1599
+accelerometer: 6996360913,0.268282,-0.938986,9.40902
+accelerometer: 6996380902,0.364096,-1.07313,9.61981
+irProximity:6996396505,0
+accelerometer: 6996400799,-0.019163,-1.41806,9.44734
+accelerometer: 6996420880,-0.134141,-1.20727,9.8306
+accelerometer: 6996440838,-0.19163,-1.45639,9.90726
+accelerometer: 6996460827,-0.287445,-1.09229,9.84977
+accelerometer: 6996480725,0.019163,-0.440748,8.83413
+irProximity:6996497182,0.109804
+accelerometer: 6996500561,-0.344933,-1.22643,9.42818
+accelerometer: 6996522473,-0.383259,-1.37973,9.23655
+accelerometer: 6996541760,-0.594052,-1.41806,9.90726
+accelerometer: 6996561749,-0.594052,-1.57136,10.0989
+accelerometer: 6996581494,-0.498237,-1.28392,9.86893
+irProximity:6996597921,0.176471
+accelerometer: 6996601269,-0.344933,-1.13062,9.79228
+accelerometer: 6996621930,-0.249119,-1.05396,9.90726
+accelerometer: 6996641766,-0.0574889,-1.34141,10.2139
+accelerometer: 6996661419,-0.306608,-1.20727,10.3288
+accelerometer: 6996681378,-0.689867,-0.536563,10.5396
+irProximity:6996698598,0.0392157
+accelerometer: 6996701428,0.0383259,-0.843171,9.60065
+accelerometer: 6996720837,-0.134141,-0.5174,9.19823
+accelerometer: 6996740674,-0.210793,-0.766519,9.56232
+
diff --git a/tests/auto/qsensorgestures_gestures/tst_sensorgestures_gestures.cpp b/tests/auto/qsensorgestures_gestures/tst_sensorgestures_gestures.cpp
index 5ae47fd3..46795fa1 100644
--- a/tests/auto/qsensorgestures_gestures/tst_sensorgestures_gestures.cpp
+++ b/tests/auto/qsensorgestures_gestures/tst_sensorgestures_gestures.cpp
@@ -57,6 +57,7 @@ public:
private Q_SLOTS:
void initTestCase();
+ void testNotHover2();
void testNotHover();
void testNotWhip();
@@ -371,6 +372,31 @@ void tst_sensorgestures_gestures::testNotWhip()
}
+void tst_sensorgestures_gestures::testNotHover2()
+{
+// test slam when coming to close to head
+ QString name = "dataset2_mock_data/sensordata_nothover2.dat";
+
+ QStringList gestStringList;
+
+ gestStringList << "QtSensors.hover";
+ gestStringList << "QtSensors.slam";
+
+ QScopedPointer<QSensorGesture> gesture(new QSensorGesture(gestStringList));
+
+ QCOMPARE(gesture->invalidIds().count(),0);
+ QSignalSpy spy_gesture(gesture.data(), SIGNAL(detected(QString)));
+
+ QCOMPARE(mockcommonPrivate::instance()->setFile(name), true);
+ gesture.data()->startDetection();
+ QCOMPARE(gesture->isActive(),true);
+
+ QTRY_COMPARE_WITH_TIMEOUT(spy_gesture.count(),1, 2000);
+
+ QList<QVariant> arguments = spy_gesture.takeFirst();
+ QCOMPARE(arguments.at(0).toString(), QLatin1String("slam"));
+}
+
QTEST_MAIN(tst_sensorgestures_gestures)
#include "tst_sensorgestures_gestures.moc"