diff -r 000000000000 -r 4e1aa6a622a0 sysstatemgmt/systemstateplugins/gsapolicy/inc/gsastatepolicystartup.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sysstatemgmt/systemstateplugins/gsapolicy/inc/gsastatepolicystartup.h Tue Feb 02 00:53:00 2010 +0200 @@ -0,0 +1,111 @@ +// Copyright (c) 2007-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: +// + +#ifndef __GSASTATEPOLICYSTARTUP_H__ +#define __GSASTATEPOLICYSTARTUP_H__ + +#include +#include +#include + +class CSsmCommandListResourceReader; + +/** +Startup state policy plug-in for GSA. This is a polymorphic dll. +Implements MSsmStatePolicy to initialize, prepare and return command list using CSsmCommandListResourceReader. +Implements MSsmConditionalCallback to decide whether to include a command in a command list or not. + +For internal use, implements a fallback mechanism to launch 'sysstart.exe' when static command list for 'start-up' state is not found. +This is required during migration from 'sysstart' to 'ssma start-up' and is not required for writing a new 'start-up' state policy. + +@internalComponent +@released + +@see MSsmStatePolicy +@see MSsmConditionalCallback +*/ +NONSHARABLE_CLASS(CGsaStatePolicyStartup) : public CBase, public MSsmStatePolicy, public MSsmConditionalCallback + { +public: + IMPORT_C static MSsmStatePolicy* NewL(); + + //from MSsmStatePolicy + TResponse TransitionAllowed(const TSsmStateTransition& aRequest, TSsmStateTransition const* aCurrent, + TSsmStateTransition const* aQueued, const RMessagePtr2& aMessage); + void Initialize(TRequestStatus& aStatus); + void InitializeCancel(); + void PrepareCommandList(TSsmState aState, TInt aReason, TRequestStatus& aStatus); + void PrepareCommandListCancel(); + CSsmCommandList* CommandList(); + TBool GetNextState(TSsmState aCurrentTransition, TInt aReason, TInt aError, TInt aSeverity, TSsmState& aNextState); + void Release(); + + // from MSsmConditionalCallback + TBool ConditionalCommandAllowedL(CResourceFile& aResourceFile, TInt aResourceId); + +private: + ~CGsaStatePolicyStartup(); + CGsaStatePolicyStartup(); + + void ConstructL(); + TBool TransitionSupported(const TSsmState& aRequestedState) const; + void GetCommandListPath(TUint aBootMode, TDes& aCmdListPath); + TInt GetBootupCountL(); + +private: + TInt iHardwareReason; + TInt iSoftwareReason; + TInt iSubStatesCount; + TUint16 iRequestedSubState; + TBool iLaunchSysStart; + TBool iLaunchSysAgt2SrvAndWServ; + + RArray iSubStates; + RArray iCurrentlySupportedTransitions; + CSsmCommandListResourceReader* iCommandListResourceReader; + RFs iFs; + + // Possible panic codes within Startup policy + enum TStartupPanicCodes + { + /** + Panic when command list resource reader is NULL + */ + EInvalidResourceReader = 1, + /** + Panic when Main state supplied is not 'ESsmStartup' + */ + EInvalidStartupState, + /** + Panic when ConditionalCommandAllowedL is called for a command which hasn't implemented conditional_information + */ + EConditionalInfoNotImplemented, + /** + Panic on Emulator (__WINS__) instead of moving to Fail state when CLE returns an error during the execution of a command with a severity other than ECmdIgnoreFailure. + Fail policy would issue a re-start(TPowerState::EPwRestart) which is not supported on emulator. On H4hrp a re-start is issued by Fail policy. + */ + EEmulatorPowerOff, + /** + Substate for transition is not found in the command list id. + */ + ESubStateIndexNotFound, + /** + File for persisting reboot counts not found + */ + EBootupCountFileNotFound + }; + }; + +#endif //__GSASTATEPOLICYSTARTUP_H__