diff -r e8e63152f320 -r 2a9601315dfc javaextensions/sensor/src.s60/csensorbase.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/javaextensions/sensor/src.s60/csensorbase.h Mon May 03 12:27:20 2010 +0300 @@ -0,0 +1,328 @@ +/* +* 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: Base class for Sensors +* +*/ + + +#ifndef CSENSORBASE_H +#define CSENSORBASE_H + +// INCLUDES +#include +#include + +#include "sensor.h" + +// FORWARD DECLARATIONS +class SensorListener; +class CSensorConditionBase; + +// CONSTANTS +const TInt KMaxSensorDescriptionLength = 4096; + +// CLASS DECLARATION +/** + * CSensorBase + * + */ +class CSensorBase : public Sensor, public CActive +{ + class TMethod + { + public: // Enumerations + enum TMethodType + { + ENone, + EStartDataListening, + ECancelDataListening, + EStartConditionListening, + EStopConditionListening, + ECloseChannel, + EStopServer, + ERemoveCondition + }; + public: // Constructor & Destructor + TMethod(TMethodType aMethodType) + { + iMethodType = aMethodType; + }; + ~TMethod() {}; + + public: // New methods + inline void SetSensorData(SensorData** aData) + { + iData = aData; + }; + inline void SetBufferSize(TInt aBufferSize) + { + iBufferSize = aBufferSize; + }; + inline void SetBufferingPeriod(TInt64 aBufferingPeriod) + { + iBufferingPeriod = aBufferingPeriod; + }; + inline void SetTimestampsIncluded(TBool aTimestampsIncluded) + { + iTimestampsIncluded = aTimestampsIncluded; + }; + inline void SetValiditiesIncluded(TBool aValiditiesIncluded) + { + iValiditiesIncluded = aValiditiesIncluded; + }; + inline void SetIsOneShot(TBool aIsOneShot) + { + iIsOneShot = aIsOneShot; + }; + inline void SetJavaConditionEval(TBool aJavaConditionEval) + { + iJavaConditionEval = aJavaConditionEval; + }; + inline void SetConditionToRemove(void* aCondition) + { + iConditionToRemove = aCondition; + }; + + inline SensorData** GetSensorData() + { + return iData; + }; + inline TInt GetBufferSize() + { + return iBufferSize; + }; + inline TInt64 GetBufferingPeriod() + { + return iBufferingPeriod; + }; + inline TBool GetTimestampsIncluded() + { + return iTimestampsIncluded; + }; + inline TBool GetValiditiesIncluded() + { + return iValiditiesIncluded; + }; + inline TBool GetIsOneShot() + { + return iIsOneShot; + }; + inline TInt GetJavaConditionEval() + { + return iJavaConditionEval; + }; + inline void* GetConditionToRemove() + { + return iConditionToRemove; + }; + inline TMethodType GetMethodType() + { + return iMethodType; + }; + + public: // Member data + SensorData** iData; + TInt iBufferSize; + TInt64 iBufferingPeriod; + TBool iTimestampsIncluded; + TBool iValiditiesIncluded; + TBool iIsOneShot; + TInt iJavaConditionEval; + void* iConditionToRemove; + TMethodType iMethodType; + }; + +public: + /** + * Destructor + */ + virtual ~CSensorBase(); + + /** + * Constructor + */ + CSensorBase(); + +public: // From Sensor + virtual void StartServer(); + virtual void StopServer(); + virtual int AddCondition( + void** aHandle, + int aChannelId, + double aLowerLimit, + double aUpperLimit, + int aLowerOp, + int aUpperOp); + + virtual int RemoveCondition( + void* aHandle); + + virtual int StartDataListening(SensorData** aData, + int aBufferSize, + long aBufferingPeriod, + bool aTimestampsIncluded, + bool aValiditiesIncluded, + bool aIsOneShot); + virtual int CancelDataListening(); + + virtual int StartConditionListening(int aListeningType); + + virtual int StopConditionListening(); + + virtual void CloseChannel(); + + +public: // From CActive + void RunL(); + void DoCancel(); + +public: // New methods + /** + * Creates description string for this sensor + * @return new description buffer + */ + virtual HBufC* CreateDescriptionLC() = 0; + + /** + * Creates duplicate of this class + * This method is used when new instance of specified sensor is needed + */ + virtual CSensorBase* DuplicateL() = 0; + + /** + * Start data listening + */ + virtual void StartDataListeningL() = 0; + + /** + * Cancel data listening + */ + virtual void CancelDataListeningL() = 0; + + /** + * Start condition listening + */ + virtual void StartConditionListeningL() = 0; + + /** + * Stop condition listening + */ + virtual void StopConditionListeningL() = 0; + + /** + * Close the channel + */ + virtual void CloseChannelL() = 0; + +protected: // Second phase construction + + virtual void ConstructL(); + +protected: // New methods + /** + * Creates timestamp for specified time + * @param Time to convert + * @return new timestamp value pointing for specified time + */ + TInt64 TimeStamp(const TTime& aTime); + + /* + * Interpret the value obtained from native source in terms + * Java Sensor API + * @param aValue value obtained from native source + * @return int value in terms of this specific sensor for Java + */ + virtual TReal InterpretValue(TReal aValue) = 0; + + /** + * Evaluate currently set conditions + * @param aValue sensor value which is evaluated against + * conditions + * @param aChannelId ID number of the channel the value + * comes from + * @return true if one or more conditions matched, + * false if none matched + */ + TBool EvaluateConditions(TReal aValue, TInt aChannelId); + + /** + * Add native condition + * @param aHandle Native handle to created condition object. + * Filled by this method. + * @param aChannelId Number of the channel this condition + * is interested in + * @param aLowerLimit Lower limit of range condition or limit + * of limit condition + * @param aUpperLimit Upper limit of range condition or -1 + * for limit condition + * @param aLowerOp Lower operand of range condition or operand + * of limit condition + * @param aUpperOp Upper operand of range condition or -1 + * for limit condition + */ + void AddConditionL( + void** aHandle, + int aChannelId, + double aLowerLimit, + double aUpperLimit, + int aLowerOp, + int aUpperOp); + + /** + * Remove native condition + * @param aHandle Handle of the native condition object + */ + void RemoveConditionL( + void* aHandle); + +private: // New methods + /** + * Make context switch to running thread + */ + void AsyncCallback(TMethod aMethod); + +protected: // Data + + /** + * Listener, not owned + */ + SensorListener* iSensorListener; + + RPointerArray< CSensorConditionBase > iConditions; + + // active scheduler for this thread + CActiveScheduler* iActiveScheduler; + + // Data to be filled + SensorData** iData; + + TInt iBufferSize; + // Buffering period in microseconds + TInt64 iBufferingPeriod; + // Flag indicating oneshot getData call + TBool iIsOneShot; + + TBool iTimestampsIncluded; + TBool iValiditiesIncluded; + + TInt iListeningType; + TInt iJavaConditionEval; + + RThread iRunnerThread; + + RArray< TMethod > iMethodArray; + +}; + +#endif // CSENSORBASE_H