--- /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 <e32std.h>
+#include <e32base.h>
+
+#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