From 6e8bc699d4ee14a4abd6c5b0b6f1a5ad0abbe52c Mon Sep 17 00:00:00 2001 From: Lorn Potter Date: Thu, 24 May 2012 16:50:07 +1000 Subject: fix false positive sensor gesture recognition when slam is too close to head Change-Id: Ic6aa24ca44b6cb61c1592bd8536a092d7ec0fc90 Reviewed-by: Lorn Potter --- .../qtsensors/qhoversensorgesturerecognizer.cpp | 25 +++++++++++++++++++--- .../qtsensors/qhoversensorgesturerecognizer.h | 2 ++ 2 files changed, 24 insertions(+), 3 deletions(-) (limited to 'src') 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; -- cgit v1.2.3