diff -r 06b8e2af4411 -r 6fbed849b4f4 qtmobility/plugins/sensors/symbian/rotationsensorsym.cpp --- a/qtmobility/plugins/sensors/symbian/rotationsensorsym.cpp Fri Jun 11 14:26:25 2010 +0300 +++ b/qtmobility/plugins/sensors/symbian/rotationsensorsym.cpp Wed Jun 23 19:08:38 2010 +0300 @@ -42,10 +42,15 @@ // Internal Headers #include "rotationsensorsym.h" +#include + /** * set the id of the proximity sensor */ -const char *CRotationSensorSym::id("sym.rotation"); +char const * const CRotationSensorSym::id("sym.rotation"); + +const TInt KMinimumRange = -180; +const TInt KMaximumRange = 180; /** * Factory function, this is used to create the rotation sensor object @@ -96,8 +101,33 @@ // Get a lock on the reading data iBackendData.iReadingLock.Wait(); // To Do verify with ds and ramsay - iReading.setX(iData.iDeviceRotationAboutXAxis); - iReading.setY(iData.iDeviceRotationAboutYAxis-180); + + // For x axis symbian provides reading from 0 to 359 range + // This logic maps value to Qt range -90 to 90 + if(iData.iDeviceRotationAboutXAxis >= 0 && iData.iDeviceRotationAboutXAxis <= 180) + { + iReading.setX(90 - iData.iDeviceRotationAboutXAxis); + } + else if(iData.iDeviceRotationAboutXAxis > 180 && iData.iDeviceRotationAboutXAxis <= 270) + { + iReading.setX(iData.iDeviceRotationAboutXAxis - 270); + } + else if(iData.iDeviceRotationAboutXAxis > 270 && iData.iDeviceRotationAboutXAxis < 360) + { + iReading.setX(iData.iDeviceRotationAboutXAxis - 270); + } + + // For y axis symbian provides reading from 0 to 359 range + // This logic maps value to Qt range -180 to 180 + if(iData.iDeviceRotationAboutYAxis >= 0 && iData.iDeviceRotationAboutYAxis <= 180) + { + iReading.setY(iData.iDeviceRotationAboutYAxis); + } + else if(iData.iDeviceRotationAboutYAxis > 180 && iData.iDeviceRotationAboutYAxis < 360) + { + iReading.setY(iData.iDeviceRotationAboutYAxis - 360); + } + if(iData.iDeviceRotationAboutZAxis == TSensrvRotationData::KSensrvRotationUndefined) { sensor()->setProperty("hasZ", QVariant(FALSE)); @@ -105,7 +135,16 @@ else { sensor()->setProperty("hasZ", QVariant(TRUE)); - iReading.setZ(iData.iDeviceRotationAboutZAxis-180); + // For z axis symbian provides reading from 0 to 359 range + // This logic maps value to Qt range -180 to 180 + if(iData.iDeviceRotationAboutZAxis >= 0 && iData.iDeviceRotationAboutZAxis <= 180) + { + iReading.setZ(iData.iDeviceRotationAboutZAxis); + } + else if(iData.iDeviceRotationAboutZAxis > 180 && iData.iDeviceRotationAboutZAxis < 360) + { + iReading.setZ(iData.iDeviceRotationAboutZAxis - 360); + } } // Set the timestamp iReading.setTimestamp(iData.iTimeStamp.Int64()); @@ -113,6 +152,25 @@ iBackendData.iReadingLock.Signal(); } +/** + * Overriding this method in rotation sensor to hard code value of + * mesurement range from -180 to 180 as Qt wants + * Symbian provides measurement range from 0 to 359 + */ +void CRotationSensorSym::GetMeasurementrangeAndAccuracy() + { + TReal accuracy = 0; + TSensrvProperty accuracyProperty; + TRAPD(err, iBackendData.iSensorChannel->GetPropertyL(KSensrvPropIdChannelAccuracy, ESensrvSingleProperty, accuracyProperty)); + if(err == KErrNone) + { + accuracyProperty.GetValue(accuracy); + } + // Hard coding values -180 and 180 as Qt expects y and z axis + // values range from -180 to 180. + addOutputRange(KMinimumRange, KMaximumRange, accuracy); + } + /** * Second phase constructor