camerauis/cameraxui/cxengine/src/sensor/xqaccsensor_p.cpp
branchRCL_3
changeset 23 61bc0f252b2b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/camerauis/cameraxui/cxengine/src/sensor/xqaccsensor_p.cpp	Tue Aug 31 15:03:46 2010 +0300
@@ -0,0 +1,147 @@
+/*
+* 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 "xqaccsensor_p.h"
+#include "xqaccsensor.h"
+#include <sensrvaccelerometersensor.h>
+#include <sensrvchannel.h>
+
+XQAccelerationSensorPrivate::XQAccelerationSensorPrivate(XQSensor& qq) :
+    XQSensorPrivate(qq)
+{
+}
+
+XQAccelerationSensorPrivate::~XQAccelerationSensorPrivate()
+{
+    close();
+    delete iXyzAxisChannel;
+}
+
+void XQAccelerationSensorPrivate::open()
+{
+    TRAP(iError,
+        if(!iXyzAxisChannel) {
+            iXyzAxisChannel = CreateChannelL(KSensrvChannelTypeIdAccelerometerXYZAxisData);
+        }
+        iXyzAxisChannel->OpenChannelL();
+    )
+}
+
+void XQAccelerationSensorPrivate::close()
+{
+    if (iXyzAxisChannel) {
+        iXyzAxisChannel->CloseChannel();
+    }
+}
+
+void XQAccelerationSensorPrivate::startReceiving()
+{
+    if (iXyzAxisChannel) {
+        TRAP(iError,
+            iXyzAxisChannel->StartDataListeningL(this, 1, 16, 0);
+        )
+    } else {
+        iError = KErrNotReady;
+    }
+}
+
+void XQAccelerationSensorPrivate::stopReceiving()
+{
+    if (iXyzAxisChannel) {
+        iXyzAxisChannel->StopDataListening();
+    }
+}
+
+void XQAccelerationSensorPrivate::DataReceived(CSensrvChannel& aChannel,
+    TInt aCount, TInt aDataLost)
+{
+    TSensrvChannelTypeId typeId = aChannel.GetChannelInfo().iChannelType;
+    if (typeId == KSensrvChannelTypeIdAccelerometerXYZAxisData) {
+        HandleXyzAxisData(aChannel, aCount, aDataLost);
+    }
+}
+
+void XQAccelerationSensorPrivate::HandleXyzAxisData(CSensrvChannel& aChannel, TInt aCount, TInt /*aDataLost*/)
+{
+    for(TInt i = 0; i < aCount; i++) {
+        TPckgBuf<TSensrvAccelerometerAxisData> dataBuf;
+        if (aChannel.GetData(dataBuf) == KErrNone) {
+            TSensrvAccelerometerAxisData data = dataBuf();
+            for (int i = iFilters.size() - 1; i >= 0; --i) {
+                XQAbstractAccelerationSensorFilter* filter = iFilters.at(i);
+                if (filter->filter(data.iAxisX, data.iAxisY, data.iAxisZ))
+                    break;
+            }
+            iXAcceleration = data.iAxisX;
+            iYAcceleration = data.iAxisY;
+            iZAcceleration = data.iAxisZ;
+        }
+    }
+}
+
+XQSensor::Error XQAccelerationSensorPrivate::error() const
+{
+    switch (iError) {
+        case KErrNone:
+            return XQSensor::NoError;
+        case KErrNoMemory:
+            return XQSensor::OutOfMemoryError;
+        case KErrNotFound:
+            return XQSensor::NotFoundError;
+        default:
+            return XQSensor::UnknownError;
+    }
+}
+
+void XQAccelerationSensorPrivate::addFilter(XQAbstractAccelerationSensorFilter& filter)
+{
+    iFilters.append(&filter);
+}
+
+QList<XQAbstractAccelerationSensorFilter*>& XQAccelerationSensorPrivate::filters()
+{
+    return iFilters;
+}
+
+int XQAccelerationSensorPrivate::xAcceleration() const
+{
+    return iXAcceleration;
+}
+
+int XQAccelerationSensorPrivate::yAcceleration() const
+{
+    return iYAcceleration;
+}
+
+int XQAccelerationSensorPrivate::zAcceleration() const
+{
+    return iZAcceleration;
+}
+
+bool XQAccelerationDataPostFilter::filter(int& xAcceleration, int& yAcceleration, int& zAcceleration)
+{
+    const int maxAcceleration = 127;    //for framework
+    xAcceleration = xAcceleration * 100 / maxAcceleration;
+    yAcceleration = yAcceleration * 100 / maxAcceleration;
+    zAcceleration = zAcceleration * 100 / maxAcceleration;
+    return false;
+}
+
+XQAccelerationDataPostFilter::XQAccelerationDataPostFilter()
+{
+}
+
+// End of file