--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/resourcemgmt/hwresourcesmgr/server/inc/HWRMLightService.h Tue Feb 02 00:53:00 2010 +0200
@@ -0,0 +1,417 @@
+/*
+* Copyright (c) 2006-2009 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:
+*
+*/
+
+
+
+
+/**
+ @file
+ @internalTechnology
+*/
+
+#ifndef HWRMLIGHTSERVICE_H
+#define HWRMLIGHTSERVICE_H
+
+// INCLUDES
+#include <e32base.h>
+#include "HWRMGenericTimer.h"
+#include "HWRMLightCommands.h"
+#include "HWRMLight.h"
+#include "HWRMService.h"
+#include "HWRMLightCommonData.h"
+#include "HWRMLightClientServer.h" // for KHWRMLightMaxTargets
+
+// CONSTANTS
+// None
+
+// MACROS
+// None
+
+// DATA TYPES
+
+/**
+* Set of datas that store single target state
+*/
+struct THWRHLightTargetStateData
+ {
+ CHWRMLight::TLightStatus iState; // Light state
+ TInt iIntensity; // Light intensity
+ TInt iOnCycleDuration; // On cycle duration (if base state is blink), ms
+ TInt iOffCycleDuration; // Off cycle duration (if base state is blink), ms.
+ TBool iFade; // Fade in or out. (not used for blink state).
+ TUint iColor; // R G B values.
+ };
+
+/**
+* Data struct for light target specific data
+*/
+struct THWRMLightTargetData
+ {
+ TInt iTarget; // The identifier of target this data refers to.
+ CHWRMGenericTimer* iTimer; // Timer pointer for duration based calls. Not owned.
+ TBool iSuspended; // Flag to indicate if this target is suspended.
+ TBool iReserved; // Flag to indicate if this target is reserved.
+ TInt iFrozenTime; // Remaining light timer duration at last release. T
+
+ THWRHLightTargetStateData iBaseState; // Stores light base state
+ THWRHLightTargetStateData iLastState; // Stores last desired light state
+ THWRHLightTargetStateData iFrozenState; // Stores freeze state for light
+ };
+
+
+// FUNCTION PROTOTYPES
+// None
+
+// FORWARD DECLARATIONS
+class CHWRMLightCommonData;
+class CHWRMPluginHandler;
+class CHWRMReservationHandler;
+
+// CLASS DECLARATION
+
+/**
+* Data storage class for light plugin requests.
+*/
+class THWRMLightPluginRequestData : public THWRMPluginRequestData
+ {
+ public:
+ TInt iTarget; // Target of the request
+
+ /**
+ * Convenience constructor
+ */
+ THWRMLightPluginRequestData(TInt aTarget,
+ const RMessage2& aRequestMessage,
+ TUint8 aTransId,
+ TInt aCommandId,
+ TBool aSplitCommand,
+ TInt aSplitCommandId,
+ TAny* aSplitCommandData)
+ : THWRMPluginRequestData(aRequestMessage, aTransId, aCommandId, aSplitCommand, aSplitCommandId, aSplitCommandData),
+ iTarget(aTarget)
+ {
+ };
+ /**
+ * Virtual destructor.
+ */
+ virtual ~THWRMLightPluginRequestData()
+ {
+ };
+ };
+
+/**
+* Hardware Resource Manager server side service object for Light sessions.
+*
+*/
+class CHWRMLightService : public CHWRMService,
+ public MHWRMGenericTimerCallback
+ {
+ private: // Enumerations
+
+ /**
+ * Private enumeration to identify state change type
+ */
+ enum TStateChangeType
+ {
+ EStateChangeFrozenState = 0,
+ EStateChangeBaseState,
+ EStateChangeLastState,
+ EStateChangeDefaultState
+ };
+
+ public: // Constructors and Destructor
+
+ /**
+ * Two-phased constructor.
+ *
+ * @param aPluginHandler The plugin handler to use with this service.
+ */
+ static CHWRMLightService* NewL(CHWRMPluginHandler* aPluginHandler,
+ CHWRMReservationHandler* aReservationHandler,
+ CHWRMLightCommonData& aLightCommonData);
+
+ /**
+ * Destructor.
+ */
+ virtual ~CHWRMLightService();
+
+ public: // Base class methods
+
+ virtual TBool ExecuteMessageL( const RMessage2& aMessage );
+ virtual void ProcessResponseL( TInt aCommandId, TUint8 aTransId, TDesC8& aData, TBool aTimeout );
+ virtual void SuspendSubResource(TInt aSubResource);
+ virtual void ResumeSubResource(TInt aSubResource);
+ virtual void ActivateSubResource(TInt aSubResource, TBool aActivate);
+
+ // From MHWRMGenericTimerCallback
+ virtual void GenericTimerFired(TInt aTimerId, TBool aCutOff);
+
+ public: // Other methods
+
+ /**
+ * Updates default sensor sensitivity to plugin
+ *
+ * @param aSensitivity New default sensitivity value.
+ */
+ void UpdateDefaultSensitivityL(TInt aSensitivity);
+
+ /**
+ * Updates default intensity to plugin
+ *
+ * @param aTarget The light target mask
+ * @param aIntensity New default intensity value for specified targets.
+ */
+ void UpdateDefaultIntensityL(TInt aTarget, TInt aIntensity);
+
+ /**
+ * Turns all unreserved system lights on.
+ */
+ void SystemLightsOn();
+
+ private:
+
+ /**
+ * C++ default constructor.
+ */
+ CHWRMLightService(CHWRMLightCommonData& aLightCommonData);
+
+ /**
+ * By default Symbian 2nd phase constructor is private.
+ */
+ void ConstructL(CHWRMPluginHandler* aPluginHandler,
+ CHWRMReservationHandler* aReservationHandler);
+
+ /**
+ * Turns lights on.
+ *
+ * @param aTarget The light target
+ * @param aDuration Duration of timer, ms
+ * @param aIntensity Intensity
+ * @param aFadeIn fade-in
+ * @param aMessage Related message
+ * @param aTimerInitiated If ETrue, call is initiated by a timer.
+ * @param aActivationInitiated If ETrue, call is initiated by activation of target.
+ */
+ void LightsOnL(TInt aTarget,
+ TInt aDuration,
+ TInt aIntensity,
+ TBool aFadeIn,
+ const RMessage2& aMessage,
+ TBool aTimerInitiated = EFalse,
+ TBool aActivationInitiated = EFalse);
+
+ /**
+ * Turns lights off.
+ *
+ * @param aTarget The light target
+ * @param aDuration Duration of timer, ms
+ * @param aFadeOut fade-out
+ * @param aMessage Related message
+ * @param aTimerInitiated If ETrue, call is initiated by a timer.
+ * @param aActivationInitiated If ETrue, call is initiated by activation of target.
+ */
+ void LightsOffL(TInt aTarget,
+ TInt aDuration,
+ TBool aFadeOut,
+ const RMessage2& aMessage,
+ TBool aTimerInitiated = EFalse,
+ TBool aActivationInitiated = EFalse);
+
+ /**
+ * Starts lights blinking
+ *
+ * @param aTarget The light target
+ * @param aDuration Duration of timer, ms
+ * @param aIntensity Intensity
+ * @param aOnCycleTime On cycle time, ms
+ * @param aOffCycleTime Off cycle time, ms
+ * @param aMessage Related message
+ * @param aTimerInitiated If ETrue, call is initiated by a timer.
+ * @param aActivationInitiated If ETrue, call is initiated by activation of target.
+ */
+ void LightsBlinkL(TInt aTarget,
+ TInt aDuration,
+ TInt aIntensity,
+ TInt aOnCycleTime,
+ TInt aOffCycleTime,
+ const RMessage2& aMessage,
+ TBool aTimerInitiated = EFalse,
+ TBool aActivationInitiated = EFalse);
+
+ /**
+ * Restores base state of the target light.
+ *
+ * @param aTargetData Reference to target data.
+ * If restoring default state, this is ignored,
+ * but still cannot be NULL reference.
+ * @param aStateType Determines which type of state is restored
+ * @param aTimerInitiated If ETrue, call is initiated by a timer.
+ * @param aDefaultTargetMask Target mask used in restoring
+ * default state. Ignored in other restores.
+ * @param aMessage A pointer to message to use in transaction. If NULL,
+ * a dummy message is used.
+ * @param aActivationInitiated If ETrue, call is initiated by activation of target.
+ */
+ void RestoreState(const THWRMLightTargetData& aTargetData,
+ TStateChangeType aStateType,
+ TBool aTimerInitiated = EFalse,
+ TInt aDefaultTargetMask = 0,
+ const RMessage2* aMessage = NULL,
+ TBool aActivationInitiated = EFalse );
+
+
+ /**
+ * Stores base states of target data objects as necessary.
+ * Also sets or cancels relevant timers.
+ *
+ * @param aTimerInitiated If ETrue, original call was timer initiated.
+ * @param aDuration Duration of the call.
+ * @param aTarget A light target. If target is mask, multiple
+ * timers can be started.
+ * @param aState The light state to be set
+ * @param aIntensity Intensity of initiating call
+ * @param aFade fade-in or fade-out of initiating call
+ * @param aOnCycleTime On cycle time of the initiating call
+ * @param aOffCycleTime Off cycle time of the initiating call
+ */
+ void UpdateTimersAndStoreStates(TBool aTimerInitiated,
+ TInt aDuration,
+ TInt aTarget,
+ CHWRMLight::TLightStatus aState,
+ TInt aIntensity,
+ TBool aFade,
+ TInt aOnCycleTime,
+ TInt aOffCycleTime);
+
+ /**
+ * Checks the validity of common API call parameters.
+ * Also checks the session handle.
+ *
+ * @param aTarget aTarget parameter of API call
+ * @param aDuration aDuration parameter of API call
+ * @param aIntensity aIntensity parameter of API call
+ * @leave KErrArgument If parameters not valid
+ * @leave KErrBadHandle If plugin handler reference is invalid.
+ */
+ void CheckCommonParametersL(TInt aTarget,
+ TInt aDuration,
+ TInt aIntensity) const;
+
+ /**
+ * Checks the validity of duration type API call parameters
+ *
+ * @param aDuration aDuration parameter of API call
+ * @leave KErrArgument If parameters not valid
+ */
+ void CheckDurationParameterL(TInt aDuration) const;
+
+ /**
+ * Checks the validity of target type API call parameters.
+ *
+ * @param aTarget aTarget parameter of API call
+ */
+ void CheckTargetParameterL(TInt aTarget) const;
+
+ /**
+ * Gets mask of unsuspended targets and checks their
+ * reservation status.
+ *
+ * @param aTarget Targets to be checked.
+ * @return Mask of unsuspended targets.
+ * @leave KErrInUse if any of unsuspended targets is
+ * reserved to some other service
+ */
+ TInt GetAndCheckUnsuspendedTargetsL(TInt aTarget) const;
+
+ /**
+ * Executes a plugin command
+ *
+ * @param aTarget Targets of the plugin command
+ * @param aMessage Message related to this command.
+ * @param aCommandId Command ID of the command.
+ * @param aPckg Command package
+ * @param aSplitCommand Indicates if this execution is part of split command.
+ */
+ void ExecutePluginCommandL(TInt aTarget,
+ const RMessage2& aMessage,
+ TInt aCommandId,
+ TDesC8& aPckg,
+ TBool aSplitCommand,
+ TInt aSplitCommandId = 0,
+ TAny* aSplitCommandData = NULL );
+
+ /**
+ * Returns suitable modified target mask for general case
+ *
+ * @param aTarget Original target
+ * @param aLightsOff ETrue if mask is needed for lights off command
+ * @return Modified target mask
+ * @leave KErrNotSupported if target is not supported at this time.
+ */
+ TInt ModifyTargetMaskL(TInt aTarget, TBool aLightsOff);
+
+ /**
+ * Cleans up light service.
+ * Attempts to restore lights to proper states.
+ */
+ void CleanupLights();
+
+ /**
+ * Releases lights.
+ * Called by ExecuteMessageL.
+ */
+ void ReleaseLights(TInt aTargetMask);
+
+ /**
+ * Reserves lights.
+ * Called by ExecuteMessageL.
+ *
+ * @param aTargetMask
+ * @param aMessage Message pointer for identifying the reserving client
+ * @param aForceNoCCoeEnv Indicates if reservation is done in force CCoeEnv mode.
+ */
+ void ReserveLightsL(const RMessage2& aMessage);
+
+ /**
+ * Turns lights on.
+ *
+ * @param aTarget The light target
+ * @param aColor color data
+ *
+ */
+ TBool SetColorL(TInt aTarget, TUint aColor, const RMessage2& aMessage, TBool aActivationInitiated = EFalse,
+ TBool aSplitCommand = EFalse, TInt aSplitCommandId = 0, TAny* aSplitCommandData = NULL);
+
+
+ private: // data
+
+ CHWRMLightCommonData& iLightCommonData; // Pointer to light data object common to all sessions. Not owned.
+ THWRMLightTargetData iTargets[KHWRMLightMaxTargets]; // Target specific datas. Owned. Each data refers to target
+ // value (KHWRMLightFirstTarget << <index>) in CHWRMLight::TLightTarget.
+ THWRHLightTargetStateData iDefaultState; // Default state of lights when no reservations are active
+ TInt iSupportedTargets; // Supported targets mask
+ TInt iFullSystemTarget; // Full system target
+ TBool iCleaningUp; // Indicates that cleanup has started. No new commands are handled.
+
+ public: // friends
+
+ friend class CHWRMLightTargetHandler;
+ };
+
+#endif // HWRMLIGHTSERVICE_H
+
+// End of File