// Copyright (c) 2005-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 __STARTUP_HRH__
#define __STARTUP_HRH__

/** Identifiers for different command types.

Note: To add a new command type, extend this enum and add a
new struct to startup.rh. The struct should start with a WORD
member initialised to the newly-added value.

@publishedPartner
@deprecated Instead of this use TSsmCommandType
*/
enum TStartupCommandType
	{
	/**
	This command is used for starting processes.
	*/
	EStartupProcess = 1,
	/**
	This command is used for starting apps.
	*/
	EStartupApp,
	/**
	This command is used for starting or killing the splash screen.
	*/
	EStartupSplashScreen,
	/**
	This command is used to force the apparc server to initialise.
	*/
	EInitAppArcServer,
	/**
	This command is used to call a function within a DLL using
	the ordinal number.
	*/
	EStartupDLL,
	/**
	This command is used to check that all previous processes and
	apps with start_method EDeferredWaitForStart have rendezvoused.
	*/
	EMultipleWait
#ifdef SYMBIAN_PROCESS_MONITORING_AND_STARTUP
	,
	/**
	This command is used for starting processes with extended sysstart V2 functionality.
	*/
	EStartupProcess2,
	/**
	This command is used for starting applications with extended sysstart V2 functionality.
	*/
	EStartupApp2,
	/**
	This command is used for starting AMAStarter with a particular DSC
	*/
	EStartupAMAStarter
#endif	// SYMBIAN_PROCESS_MONITORING_AND_STARTUP
	};

/** Identifiers for starting up an application. Presently there are
two methods of startup.

@publishedPartner
@deprecated Instead of this use TSsmCommandType
*/
enum TStartupType
	{
	/**
	For starting exes.
	*/
	EStartProcess = 1,
	/**
	For starting apps.
	*/
	EStartApp
	};

/** Identifiers for each startup state. Used to inform state-aware
applications of a change of state.

@publishedPartner
@deprecated Instead of this use TSsmStartupSubStates
*/
enum TStartupStateIdentifier
	{
	/**
	Undefined state.
	*/
	EStartupStateUndefined = 0x00,
	/**
	@internalComponent
	Reserved for future use.
	*/
	EReservedStartUpState1 = 0x08,
	/**
	Within this state all ROM based(static) components or resources
	that are critical to the operation of the phone function are started.
	*/
	EStartupStateCriticalStatic = 0x10,
	/**
	@internalComponent
	Reserved for future use.
	*/
	EReservedStartUpState2 = 0x18,
	/**
	Within this state all non-ROM based(dynamic) components or resources
	that are critical to the operation of the phone function are started.
	*/
	EStartupStateCriticalDynamic = 0x20,
	/**
	Networking state.
	*/
	EStartupStateNetworkingCritical = 0x28,
	/**
	Within this state all ROM based(static) or non-ROM based(dynamic) components
	or resources that are non-critical to the operation of the phone function
	are started.
	*/
	EStartupStateNonCritical = 0x30,
	/**
	@internalComponent
	Reserved for future use.
	*/
	EReservedStartUpState4 = 0x38,
	/**
	@internalComponent
	Reserved for future use.
	*/
	EReservedStartUpState5 = 0x40
	};

/** Identifiers for each start-up method.

@publishedPartner
@deprecated Instead of this use TSsmExecutionBehaviour
*/
enum TStartMethod
	{
	/**
	By using this type the starter can continue immediately
	with executing its next command.
	*/
	EFireAndForget = 1,
	/**
	By using this type the starter cannot continue with the
	next command until a rendezvous has been made with the started process.
	*/
	EWaitForStart,
	/**
	By using this type the starter will continue with the next command
	before a rendezvous has been made with the current command.
	However the rendezvous will be checked later when a MULTIPLE_WAIT command
	is encountered.
	*/
	EDeferredWaitForStart
	};



/** Identifier for the no of retries on state transition failure.

@publishedPartner
@deprecated 
*/
enum TNoOfRetries
	{
	/**
 	On state transition failure do not re-attempt the transition.
	*/
	ERetry0,
	/**
 	On state transition failure re-attempt the transition once.
	*/
	ERetry1
	};


/**  Identifier for the action to be taken on state transition
failure (after a re-attempt has already been made if required).

@publishedPartner
@deprecated Instead of this use TSsmRecoveryMethod
*/
enum TActionOnStateTransitionFailure
	{
	/**
 	Ignore the state transition failure. Carry on with actions
 	corresponding to the next state.
	*/
	EIgnoreFailure,

	/**
 	Panic the system starter if state transition failed. This
 	will cause the device to re-boot.
	*/
	EPanicOnFailure
	};

/**  Identifier for the action to be taken on command failure.
This is used with the fail_on_error fields within START_PROCESS_INFO, START_APP_INFO, START_DLL_INFO, and MULTIPLE_WAIT structures.
These structures rely on this enum being a boolean value so it must not hold more than 2 values: EIgnoreCommandFailure=0 and EPanicOnCommandFailure=1.

@publishedPartner
@deprecated Instead of this use TSsmRecoveryMethod
*/
enum TActionOnCommandFailure
	{
	/**
 	Ignore the command failure.
	*/
	EIgnoreCommandFailure,

	/**
 	Panic the system starter if command fails. This
 	will cause the device to re-boot.
	*/
	EPanicOnCommandFailure
	};

#ifdef SYMBIAN_PROCESS_MONITORING_AND_STARTUP
/**  Identifier for the action to be taken on command failure.  
This should be used to set the retry_failure_recovery_method when using START_PROCESS_INFO2 or START_APP_INFO2 structures

@publishedPartner
@deprecated Instead of this use TSsmRecoveryMethod
*/
enum TRecoveryMethod
	{
	/**
	Ignore the command failure
	*/
	EIgnoreOnFailure,
	/**
	Reboot the OS
	*/
	ERestartOS,
	/**
	Reboot the OS in a particular mode
	*/
	ERestartOSWithMode
	};
#endif	// SYMBIAN_PROCESS_MONITORING_AND_STARTUP

#endif	// __STARTUP_HRH__

