--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/sapi_sensor/src/sensorcallback.cpp Mon Mar 30 12:51:10 2009 +0300
@@ -0,0 +1,267 @@
+/*
+* Copyright (c) 2006-2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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: Contaions implementaion for sensor callback class
+*
+*/
+
+#include "sensorcallback.h"
+#include "sensorservice.hrh"
+
+
+
+/*
+-----------------------------------------------------------------------------
+ CSensorCallback* CSensorCallback::NewL()
+ Description : Two-phased constructor.
+ Return values : CSensorCallback object pointer
+
+-----------------------------------------------------------------------------
+*/
+CSensorCallback* CSensorCallback::NewL( MLiwNotifyCallback* aCallBack,
+ TInt32 aTransactionid)
+
+ {
+ CSensorCallback* self = new ( ELeave ) CSensorCallback( aCallBack,
+ aTransactionid );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+ return self;
+
+ }
+
+/*
+-----------------------------------------------------------------------------
+ void CSensorCallback::DataNotificationL()
+ Description : Called by sensor framework when sensor
+ channel data is received to send received
+ data to the client
+ Return values : N/A
+
+-----------------------------------------------------------------------------
+*/
+void CSensorCallback::DataNotificationL( CSensrvChannel& aChannel )
+ {
+
+ //Array for orientation data
+ const TPtrC gOrientationArr[] =
+ {
+ KUndefined(),
+ KDisplayUp(),
+ KDisplayDown(),
+ KDisplayLeftUp(),
+ KDisplayRightUp(),
+ KDisplayUpwards(),
+ KDisplayDownwards()
+ };
+
+ //Conversion from Localtime returned by Sensor FW to UTC time
+ TTime utcNow;
+ utcNow.UniversalTime();
+ TTime localNow;
+ localNow.HomeTime();
+ // convert UTC time to local time
+ TTimeIntervalMicroSeconds diff = localNow.MicroSecondsFrom( utcNow );
+
+ CleanupStack :: PushL( this );
+ CLiwGenericParamList* outParamList = CLiwGenericParamList :: NewL();
+ CleanupStack :: PushL( outParamList );
+ CLiwGenericParamList* inputParamList = CLiwGenericParamList :: NewL();
+ CleanupStack :: PushL( inputParamList );
+ TSensrvChannelInfo info = aChannel.GetChannelInfo();
+
+ TLiwGenericParam errorparam(KErrorCode , TLiwVariant(( TInt32 )KErrNone)) ;
+ outParamList->AppendL(errorparam);
+
+ CLiwDefaultMap* chnlDataMap = CLiwDefaultMap::NewL() ;
+ CleanupStack::PushL( chnlDataMap );
+
+ switch( info.iChannelType )
+ {
+ case EFindAccelerometerXYZAxisData:
+ {
+ TSensrvAccelerometerAxisData accData;
+ TPckg<TSensrvAccelerometerAxisData> accPackage( accData );
+ aChannel.GetData( accPackage );
+
+ chnlDataMap->InsertL( KDataType ,
+ TLiwVariant( KAcclmtrAxisData ) );
+ chnlDataMap->InsertL( KTimeStamp ,
+ TLiwVariant((TTime)( accData.iTimeStamp - diff ) ) );
+ chnlDataMap->InsertL( KXAxisData ,
+ TLiwVariant((TInt32)( accData.iAxisX ) ) );
+ chnlDataMap->InsertL( KYAxisData ,
+ TLiwVariant((TInt32)( accData.iAxisY ) ) );
+ chnlDataMap->InsertL( KZAxisData ,
+ TLiwVariant((TInt32)( accData.iAxisZ ) ) );
+
+ break;
+ }
+ case EFindAccelerometerDoubleTappingData:
+ {
+ TSensrvTappingData accData;
+ TPckg<TSensrvTappingData> accPackage( accData );
+ aChannel.GetData( accPackage );
+
+ chnlDataMap->InsertL( KDataType ,
+ TLiwVariant( KAcclmtrDoubleTappingData ) );
+ chnlDataMap->InsertL( KTimeStamp ,
+ TLiwVariant((TTime)( accData.iTimeStamp - diff ) ) );
+ chnlDataMap->InsertL( KDirection ,
+ TLiwVariant( (TInt32)(accData.iDirection) ) );
+
+ break;
+ }
+
+ case EFindOrientationData:
+ {
+ TSensrvOrientationData accData;
+ TPckg<TSensrvOrientationData> accPackage( accData );
+ aChannel.GetData( accPackage );
+
+ chnlDataMap->InsertL( KDataType ,
+ TLiwVariant( KOrientationData ) );
+ chnlDataMap->InsertL( KTimeStamp ,
+ TLiwVariant((TTime)( accData.iTimeStamp - diff ) ) );
+
+ TInt orientation = accData.iDeviceOrientation;
+ chnlDataMap->InsertL( KDeviceOrientation,
+ TLiwVariant( gOrientationArr[orientation] ) );
+ break;
+ }
+
+ case EFindRotationData:
+ {
+ TSensrvRotationData accData;
+ TPckg<TSensrvRotationData> accPackage( accData );
+ aChannel.GetData( accPackage );
+
+ chnlDataMap->InsertL( KDataType , TLiwVariant( KRotationData ) );
+ chnlDataMap->InsertL( KTimeStamp ,
+ TLiwVariant( (TTime) ( accData.iTimeStamp - diff ) ) );
+ chnlDataMap->InsertL ( KAbtXAxis ,
+ TLiwVariant((TInt32)( accData.iDeviceRotationAboutXAxis ) ) );
+ chnlDataMap->InsertL( KAbtYAxis ,
+ TLiwVariant((TInt32)( accData.iDeviceRotationAboutYAxis ) ) );
+ chnlDataMap->InsertL( KAbtZAxis ,
+ TLiwVariant((TInt32)( accData.iDeviceRotationAboutZAxis ) ) );
+
+
+ break;
+ }
+
+ }
+
+ TLiwGenericParam outParm( KReturnValue , TLiwVariant( chnlDataMap ) ) ;
+
+ outParamList->AppendL( outParm ) ;
+ CleanupStack::Pop( chnlDataMap );
+ chnlDataMap->DecRef();
+
+ //Notify user with the data received from a particular sensor channel
+ iCallBack->HandleNotifyL( iTransactionId , KLiwEventInProgress , *outParamList , *inputParamList ) ;
+
+ CleanupStack::PopAndDestroy( inputParamList );
+ CleanupStack::PopAndDestroy( outParamList );
+ CleanupStack::Pop( this );
+ }
+
+
+/*
+-----------------------------------------------------------------------------
+ void CSensorCallback::DataReceived()
+ Description : Called by sensor framework when sensor
+ channel data is received
+ Return values : N/A
+
+-----------------------------------------------------------------------------
+*/
+void CSensorCallback::DataReceived( CSensrvChannel& aChannel,
+ TInt /*aCount*/,
+ TInt /*aDataLost*/ )
+
+ {
+ TInt err = 0;
+ TRAP( err , DataNotificationL( aChannel ) );
+ }
+
+/*
+-----------------------------------------------------------------------------
+ void CSensorCallback::DataError()
+ Description : Called by sensor framework when an
+ error occurs
+ Return values : N/A
+
+-----------------------------------------------------------------------------
+*/
+void CSensorCallback::DataError( CSensrvChannel& /*aChannel*/,
+ TSensrvErrorSeverity /*aError*/ )
+ {
+ }
+
+
+/*
+-----------------------------------------------------------------------------
+ void CSensorCallback::GetDataListenerInterfaceL()
+ Description : Returns a pointer to a specified interface - to allow
+ future extension of this class without breaking binary
+ compatibility
+ Return values : N/A
+
+-----------------------------------------------------------------------------
+*/
+void CSensorCallback::GetDataListenerInterfaceL( TUid /*aInterfaceUid*/,
+ TAny*& aInterface )
+ {
+ aInterface = NULL; // Extension interfaces are not supported
+ }
+
+
+/*
+-----------------------------------------------------------------------------
+ CSensorCallback::CSensorCallback()
+ Description : Constructor
+ Return values : N/A
+-----------------------------------------------------------------------------
+*/
+CSensorCallback::CSensorCallback( MLiwNotifyCallback* aCallBack,
+ TInt32 aTransactionid )
+ :iCallBack( aCallBack ),
+ iTransactionId( aTransactionid )
+ {
+ }
+
+/*
+-----------------------------------------------------------------------------
+ void CSensorCallback::ConstructL()
+ Description : Symbian 2nd phase constructor can leave.
+ Return values : N/A
+-----------------------------------------------------------------------------
+*/
+void CSensorCallback::ConstructL()
+ {
+ }
+
+/*
+-----------------------------------------------------------------------------
+ CSensorCallback::~CSensorCallback()
+ Description : Destructor, free allocated resources
+ Return values : N/A
+-----------------------------------------------------------------------------
+*/
+CSensorCallback::~CSensorCallback()
+ {
+ }
+
+