diff -r 61bc0f252b2b -r bac7acad7cb3 camerauis/cameraxui/cxengine/src/sensor/xqdeviceorientation_p.cpp --- a/camerauis/cameraxui/cxengine/src/sensor/xqdeviceorientation_p.cpp Tue Aug 31 15:03:46 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,203 +0,0 @@ -/* -* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - initial contribution. -* -* Contributors: -* -* Description: -* -*/ -#include "xqdeviceorientation_p.h" -#include - -const TInt KDefaultResolution = 15; - -XQDeviceOrientationPrivate::XQDeviceOrientationPrivate( - XQDeviceOrientation& qq) : q(qq), iResolution(KDefaultResolution) -{ - iXRotation = 0; - iYRotation = 0; - iZRotation = 0; -} - -XQDeviceOrientationPrivate::~XQDeviceOrientationPrivate() -{ - close(); -} - -void XQDeviceOrientationPrivate::open() -{ - iAccelerationSensor.addFilter(*this); - iAccelerationSensor.addFilter(iAccelerationPostFilter); - - iAccelerationSensor.open(); - iAccelerationSensor.startReceiving(); -} - -void XQDeviceOrientationPrivate::close() -{ - iAccelerationSensor.stopReceiving(); - iAccelerationSensor.close(); - iAccelerationSensor.filters().removeOne(this); -} - -void XQDeviceOrientationPrivate::setResolution(TInt resolution) -{ - iResolution = resolution; -} - -TInt XQDeviceOrientationPrivate::resolution() const -{ - return iResolution; -} - -int XQDeviceOrientationPrivate::xRotation() const -{ - return iXRotation; -} - -int XQDeviceOrientationPrivate::yRotation() const -{ - return iYRotation; -} - -int XQDeviceOrientationPrivate::zRotation() const -{ - return iZRotation; -} - -XQDeviceOrientation::DisplayOrientation - XQDeviceOrientationPrivate::orientation() const -{ - return iOrientation; -} - -bool XQDeviceOrientationPrivate::filter(int& xAcceleration, - int& yAcceleration, int& zAcceleration) -{ - TReal xAcc = xAcceleration; - TReal yAcc = yAcceleration; - TReal zAcc = zAcceleration; - - TReal angle = 0; - - //axis X rotation - if (yAcc != 0) { - Math::ATan(angle, Abs(zAcc / yAcc)); - angle *= 180 / KPi; //rad to degrees - if (zAcc > 0 && yAcc > 0) { - //do nothing - } else if (zAcc > 0 && yAcc < 0) { - angle = 90 + (90 - angle); - } else if (zAcc < 0 && yAcc < 0) { - angle += 180; - } else { - angle = 270 + (90 - angle); - } - } else { - if (zAcceleration > 0) { - angle = 90; - } else { - angle = 270; - } - } - TInt xRotation = RoundAngle(angle); - - //axis Y rotation - if (xAcc != 0) { - Math::ATan(angle, Abs(zAcc / xAcc)); - angle *= 180 / KPi; //rad to degrees - if (zAcc > 0 && xAcc > 0) { - angle += 90; - } else if (zAcc > 0 && xAcc < 0) { - angle = 270 - angle; - } else if (zAcc < 0 && xAcc < 0) { - angle += 270; - } else { - angle = 90 - angle; - } - } else { - if (zAcceleration > 0) { - angle = 180; - } else { - angle = 0; - } - } - TInt yRotation = RoundAngle(angle); - - //axis Z rotation - if (yAcc != 0) { - Math::ATan(angle, Abs(xAcc / yAcc)); - angle *= 180 / KPi; //rad to degrees - if (xAcc > 0 && yAcc > 0) { - angle = 360 - angle; - } else if (xAcc > 0 && yAcc < 0) { - angle += 180; - } else if (xAcc <= 0 && yAcc <= 0) { - angle = 180 - angle; - } else { - //Do nothing - } - } else { - if (xAcceleration > 0) { - angle = 270; - } else { - angle = 90; - } - } - TInt zRotation = RoundAngle(angle); - - iXRotation = xRotation; - iYRotation = yRotation; - iZRotation = zRotation; - - XQDeviceOrientation::DisplayOrientation orientation = - XQDeviceOrientation::OrientationUndefined; - if (((315 < xRotation && xRotation < 360) || - (0 <= xRotation && xRotation <= 45)) && - ((315 < zRotation && zRotation < 360) || - (0 <= zRotation && zRotation <= 45))) { - orientation = XQDeviceOrientation::OrientationDisplayUp; - } else if (135 < xRotation && xRotation <= 225 && 135 < zRotation && - zRotation <= 225) { - orientation = XQDeviceOrientation::OrientationDisplayDown; - } else if (225 < yRotation && yRotation <= 315 && 45 < zRotation && - zRotation <= 135) { - orientation = XQDeviceOrientation::OrientationDisplayLeftUp; - } else if (45 < yRotation && yRotation <= 135 && 225 < zRotation && - zRotation <= 315) { - orientation = XQDeviceOrientation::OrientationDisplayRightUp; - } else if (45 < xRotation && xRotation <= 135 && 135 < yRotation && - yRotation <= 225) { - orientation = XQDeviceOrientation::OrientationDisplayUpwards; - } else if (225 < xRotation && xRotation <= 315 && - ((315 < yRotation && yRotation < 360) || (0 <= yRotation && - yRotation <= 45))) { - orientation = XQDeviceOrientation::OrientationDisplayDownwards; - } - - emit q.rotationChanged(xRotation, yRotation, zRotation); - - if (orientation != iOrientation) { - if (orientation != XQDeviceOrientation::OrientationUndefined) { - emit q.orientationChanged(orientation); - } - iOrientation = orientation; - } - - return false; -} - -TInt XQDeviceOrientationPrivate::RoundAngle(TReal aAngle) const -{ - return ((TInt(aAngle) + iResolution / 2) / iResolution * iResolution) % 360; -} - -// End of file