--- 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 <sensrvgeneralproperties.h>
+
/**
* 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