sensorservices/orientationssy/inc/SsyOrientation.h
changeset 0 4e1aa6a622a0
child 21 ccb4f6b3db21
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sensorservices/orientationssy/inc/SsyOrientation.h	Tue Feb 02 00:53:00 2010 +0200
@@ -0,0 +1,348 @@
+/*
+* Copyright (c) 2008 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:  Channel class of Orientation SSY
+*
+*/
+
+
+#ifndef __SSYORIENTATION_H__
+#define __SSYORIENTATION_H__
+
+
+// INCLUDES
+#include <sensrvdatalistener.h>
+#include <sensrvchannelinfo.h>
+#include <sensrvorientationsensor.h>
+#include <centralrepository.h>
+#include "SsyChannel.h"
+#include "SsyTrace.h"
+#include "Ssyeventtimer.h"
+#include "OrientationCRListener.h"
+#include "OrientationConfiguration.h"
+
+// FORWARD DECLARATIONS
+class CSensrvChannelFinder;
+class CSensrvChannel;
+class MSendDataCallBack;
+class CSsyOrientationEventTimer;
+class TOrientationConfiguration;
+class TAngleAndTimerConfig;
+class CSsyOrientationCRListener;
+class CSensorDataCompensator;
+
+// CONSTANTS
+/**
+ *   TRotation
+ */
+enum TRotation
+    {
+    ERotationAboutXaxis = 0,
+    ERotationAboutYaxis,
+    ERotationAboutZaxis
+    };
+
+// CLASS DECLARATION
+
+/**
+*  CSSYOrientation class
+*
+*  Orientation calculation and sensorserver client class for orientation ssy.
+*
+*  @lib orientationssy.lib
+*  @since S60 5.0
+*/
+NONSHARABLE_CLASS( CSSYOrientation ) : public CBase, 
+                                       public MSensrvDataListener, 
+                                       public MSendDataCallBack,
+                                       public MCenRepCallBack
+    {
+    
+    public:
+        
+        /**
+        * State of the timer
+        */
+        enum TTimerState
+            {
+            EUninitialized = 0,
+            EStopped,
+            ERunning
+            };
+        
+    public: // From CActive
+        void RunL();
+        void DoCancel();
+        
+        /**
+        * C++ constructor.
+        *
+        * @param aChannelType Identifies the type of the channel
+        */
+        CSSYOrientation( const TSensrvChannelTypeId aChannelType );
+
+        /**
+        * Destructor
+        */
+        virtual ~CSSYOrientation();
+        
+        /*
+         * Second Phase Consructor
+         */
+        void ConstructL();
+        
+        /**
+        * Create configurations for angles and timers
+        */
+        void CreateConfigurations();
+        
+        /**
+        * Used for creating configuration for angle definitions
+        *
+        * @param aConfigurationForState the configuration to set.
+        */
+        void SetConfigurationForState( 
+        const TOrientationConfiguration&
+              aConfigurationForState );
+        
+        /**
+        * Used for getting configuration for angle definitions
+        *
+        * @param aOrientation to get.
+        * @param aConfigurationForState that is returned.
+        */
+        void GetConfigurationForState( 
+        const TSensrvOrientationData::TSensrvDeviceOrientation aOrientation,
+             TOrientationConfiguration& aConfigurationForState );
+        
+        /**
+        * From MSensrvDataListener. Indicates data is available in the receiving buffer.
+        *
+        * @param aChannel Channel which has received the data
+        * @param aCount Number of data items received
+        * @param aDataLost Number of data items lost
+        */
+        void DataReceived( CSensrvChannel& aChannel, 
+                           TInt aCount, 
+                           TInt aDataLost );
+
+        /**
+        * From MSensrvDataListener. Data listening failed.
+        * 
+        * @param aChannel Channel that received error
+        * @param aError Error cause
+        */
+        void DataError( CSensrvChannel& aChannel, 
+                        TSensrvErrorSeverity aError );
+        
+        /** 
+        * Returns a pointer to a specified interface - to allow future extension
+        * of this class without breaking binary compatibility
+        *
+        * @since S60 5.0
+        * @param aInterfaceUid Identifier of the interface to be retrieved
+        * @param aInterface A reference to a pointer that retrieves the specified interface.
+        */
+        void GetDataListenerInterfaceL( TUid aInterfaceUid, 
+                                        TAny*& aInterface );
+        
+        /**
+        * Open channel to sensor server. Used by the channel object.
+        */
+        void OpenChannelL();
+
+        /**
+        * Close channel from sensor server. Used by the channel object.
+        */
+        void CloseChannelL();
+
+        /**
+        * Start listening a channel from sensor server. Used by the channel object.
+        */
+        void StartListeningL();
+
+        /**
+        * Stop listening a channel from sensor server. Used by the channel object.
+        */
+        void StopListeningL();
+
+        /**
+        * Register to get data from the sensor server. Used by the channel object.
+        *
+        * @param aChannel Channel object where to receive data
+        */
+        void GetDataFromHardware( CSSYChannel* aChannel );
+
+        /**
+        * Gets max data rate from accelerometer SSY
+        * 
+        * @param aProperty Contains search criteria for property. On
+        *        completion, contains found property information. This
+        *        property is set to read only as it is not owned by orientation
+        *        SSY.
+        */
+        void GetMaxDataRateL( TSensrvProperty& aProperty );
+        
+        /**
+        * Calculate device rotation based on the received data.
+        *
+        * @param aAxis1 This is Z-axis when calculating X- or Y-axis rotation.
+        *        X-axis when calculating Z-axis rotation.
+        * @param aAxis2 This is Y-axis when calculating X- or Z-axis rotation.
+        *        X-axis when calculating Y-axis rotation.
+        * @param aRotation Defines the third axis
+        * @return Rotation of calculated third axis
+        */
+        TInt CalculateDeviceRotationInDegrees( 
+                    const TInt aAxis1, 
+                    const TInt aAxis2, 
+                    const TRotation aRotation );
+        
+        /**
+        * Calculates the spherical coordinates from the acceleration vector.
+        *
+        * @param aAxisX X Axis of the vector
+        * @param aAxisY Y axis of the vector
+        * @param aAxisZ Z axis of the vector
+        * @param aZenithAngle The zenithe ange of the vector.
+        * @param aAzimuthAngle The azimuth angle of the vector.
+        * @return Standard Symbian error codes.
+        */
+        TInt CalculateSphericalPolarCoordinates( 
+                    const TInt aAxisX, 
+                    const TInt aAxisY,
+                    const TInt aAxisZ,
+                    TInt& aZenithAngle,
+                    TInt& aAzimuthAngle );
+        
+        /**
+        * Calculate device orientation based on the received data.
+        *
+        * @param aZenithAngle the calculated zenith angle.
+        * @param aAzimuthAngle the calculated azimuth angle.
+        * @return The device orientation.
+        */
+        TSensrvOrientationData::TSensrvDeviceOrientation CalculateDeviceOrientation(
+                    const TInt aZenithAngle,
+                    const TInt aAzimuthAngle );
+        
+        TBool IsOrientation(
+                    const TInt aZenithAngle,
+                    const TInt aAzimuthAngle,
+                    TInt aCorrectionToState,
+                    TInt aCorrectionToState1,
+                    TInt aCorrectionToState2,
+                    TInt aCorrectionToState3 );
+    
+    protected:
+    
+        // @see MSendDataCallBack
+        void SendDataAfterTimer();
+
+    private:
+
+        /** 
+        * Channel type. 
+        */
+        TSensrvChannelTypeId    iChannelType;
+
+        /** 
+        * Orientation ssy channel. Not owned. Pointer is assigned 
+        * in GetDataFromHardware function.
+        */
+        CSSYChannel*            iChannel;
+
+        /** 
+        * Sensor server channel finder. 
+        */
+        CSensrvChannelFinder*   iChannelFinder;
+
+        /** 
+        * List of channelinfos. 
+        */
+        RSensrvChannelInfoList  iChannelInfoList;
+
+        /** 
+        * Sensor server channel. 
+        */
+        CSensrvChannel*         iSensorChannel;
+
+        /** 
+        * Previous TSensrvOrientationData. 
+        */
+        TSensrvOrientationData  iOrientationEvent;
+        
+        /** 
+        * Current state of orientation. 
+        */
+        TSensrvOrientationData  iCurrentOrientationState;
+        
+        /** 
+        * Previous TSensrvRotationData. 
+        */
+        TSensrvRotationData     iRotationEvent;
+
+        /** 
+        * State of the timer
+        */
+        TTimerState iTimerState;
+        
+        /** 
+        * Pointer to the timer instance, owned
+        */
+        CSsyOrientationEventTimer* iEventTimer;
+        
+        /** 
+        * The array of orientation that is calculated
+        */
+        RArray<TInt> iOrientationArray;
+        
+        /** 
+        * The configuration for the current state.
+        */
+        TOrientationConfiguration iConfigForCurrentState;
+        
+        /** 
+        * The array containing the different configurations.
+        */
+        RArray<TOrientationConfiguration> iConfigArray;
+        
+        /** 
+        * Pointer to central repository, owned
+        */
+        CRepository* iRepository;
+
+#ifdef AUTO_ORIENTAION_TEST       
+        /** 
+        * Pointer to the CR listener object, owned.
+        * This is used only for test application. The testing flag must be
+        * defined in order to use this.
+        */
+        CSsyOrientationCRListener* iCRListener;
+#endif
+    
+        /**
+        * Boolean indicating is received data first one
+        */
+        TBool iFirstDataReceived;
+        
+        /**
+        * Sensor compensator.
+        */
+        CSensorDataCompensator* iCompensator;
+    
+    };
+
+#endif // __SSYORIENTATION_H__
+
+// End of File