--- /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