/*
* Copyright (c) 2004-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:
* Name        : startupadaptationcommands.h
* Part of     : System Startup / Starter
* Interface   : Domain, Startup Adaptation API
* This header file defines the startup adaptation API commands
* and their parameters.
* This file contains the following sections:
* - Command definitions
* - Command parameter definitions
* - Response parameter definitions
* Version     : %version: ou1s60rt#12.1.4 %
* This material, including documentation and any related computer
* programs, is protected by copyright controlled by Nokia.  All
* rights are reserved.  Copying, including reproducing, storing,
* adapting or translating, any or all of this material requires the
* prior written consent of Nokia.  This material also contains
* confidential information which may not be disclosed to others
* without the prior written consent of Nokia.
* Template version: 4.0
* Nokia Core OS *
*
*/



#ifndef __STARTUPADAPTATIONCOMMANDS_H__
#define __STARTUPADAPTATIONCOMMANDS_H__

#include <e32std.h>

/*****************************************************
*       Series 60 Customer
*       Needs customer implementation
*****************************************************/

/**
* All command and event definitions of Startup Adaptation API belong to
* StartupAdaptation namespace.
*
* @file
* @publishedPartner
* @released
*
*/
namespace StartupAdaptation
    {

    /**
    * Command definitions
    * All commands contain a command id and a set of parameters. The command ids
    * are defined first and after that parameters for each command.
    *
    * This interface is asynchronous. A command is interpreted of being
    * completed after a response for that command is received.
    *
    * @param field means the parameter for the command.
    * @return field means the parameter for the response.
    */
    enum TCommand
        {
        /**
        * This command is used to change the global state of an S60 device.
        *
        * When changing the global state, S60 starter server issues a state
        * change command to startup adaptation via the startup adaptation API.
        * After receiving a response, S60 starter server will publish the new
        * state using Publish & Subscribe and execute operations required in
        * that state.
        *
        * @param  TGlobalStateChangePckg The requested global state.
        * @return TResponsePckg The success status of the state change.
        */
        EGlobalStateChange = 100,

        /**
        * Security state change request. Used only when global state is security
        * check.
        *
        * @param  TSecurityStateChangePckg The requested security state.
        * @return TSecurityStateResponsePckg The success status of the state
        * change and, if the operation was successful, additional information
        * which depends on the state.
        */
        ESecurityStateChange = 101,

        /**
        * Get global startup mode.
        *
        * The global startup mode indicates the mode in which the device has
        * been started. The startup mode can also be seen as a reason for the
        * startup.
        *
        * @param  None.
        * @return TGlobalStartupModeResponsePckg The success status of the
        * operation and, if the operation was successful, the global startup
        * mode.
        */
        EGetGlobalStartupMode = 102,

        /**
        * Request Domestic OS to perform self tests.
        *
        * Before launching any software components that are using some specific
        * hardware, self-tests need to be executed for the hardware. This
        * command is used to request licensee-specific self-tests to be
        * executed. It is allowed to perform the self-tests before this command,
        * but when this command is issued, S60 starter server expects to get the
        * result of the self-tests.
        *
        * @param  None.
        * @return TResponsePckg The success status of the self tests.
        */
        EExecuteSelftests = 103,

        /**
        * Get the language codes that are stored in the SIM card preferred
        * language lists.
        *
        * Primary language list will be queried first. Unless it contains
        * at least one language that can be taken into use, the secondary
        * preferred list will be queried for. Only if there is no acceptable
        * languages in the secondary list either, will the tertiary list be
        * queried for.
        *
        * @param  TLanguageListPriorityPckg.
        * @return TLanguageListResponsePckg The list of languages mapped to
        * Symbian language codes.
        */
        EGetSIMLanguages = 104,

        /**
        * This command is used to check the validity of Real Time Clock (RTC).
        *
        * @param  None.
        * @return TResponsePckg The success status of the operation. KErrNone
        * if the RTC time is valid, any other value indicates that it is not
        * valid.
        */
        EValidateRTCTime = 107,

        /**
        * Query whether the current SIM card is different from the previous one.
        *
        * The SIM changed status indicates whether the currently inserted SIM
        * card has changed since the last startup. This information can be used
        * for example to query whether the user wants to clear phone call logs.
        *
        * S60 starter server makes this query only if there is a SIM card
        * present. This command will only be issued in ESWStateCriticalPhaseOK
        * state.
        *
        * @param  None.
        * @return TBooleanResponsePckg Success status of the operation, and if
        * the operation was successful, indication whether the SIM card has been
        * changed after the last boot or not.
        */
        EGetSimChanged = 108, //This Enum should not be used.

        /**
        * Query whether the current SIM card is among the last used cards.
        *
        * It is up to the startup adaptation to decide the number of SIM cards
        * that are considered owned.
        *
        * If the SIM owned status is false, then the SIM changed status must be
        * true.
        *
        * S60 starter server makes this query only if there is a SIM card
        * present. This command will only be issued in ESWStateCriticalPhaseOK
        * state.
        *
        * @param  None.
        * @return TBooleanResponsePckg Success status of the operation, and if
        * the operation was successful, indication whether the SIM card is among
        * the five last used cards or not.
        */
        EGetSimOwned = 109,

        /**
        * This command is used to set a wake-up alarm time so that the device is
        * powered up by an alarm when it goes off, i.e. the device will be
        * started in the alarm mode.
        *
        * @see Command EGetGlobalStartupMode.
        *
        * @param  TWakeupAlarmPckg The time for the alarm.
        * @return TResponsePckg Success status of the operation.
        */
        ESetWakeupAlarm = 110,

        /**
        * This command is used to cancel a wake-up alarm.
        *
        * @param  None.
        * @return None Cancels must always succeed.
        */
        ECancelWakeupAlarm = 111,

        /**
        * A reboot request.
        *
        * This command is used to inform the startup adaptation that a reset
        * will be executed. The command also reports the reason for the reset
        * in case there is a need for some licensee-specific actions.
        *
        * This command will only be executed in the state ESWStateShuttingDown.
        * After receiving a response to the command, the S60 starter server will
        * only clean up itself and then call UserHal::SwitchOff().
        *
        * @param  TResetReasonPckg The reason for resetting.
        * @return TResponsePckg Success status of the operation.
        */
        EExecuteReset = 112,

        /**
        * A shutdown request.
        *
        * This command is used to inform the startup adaptation that the device
        * is going to be shut down.
        *
        * This command will only be executed in the state ESWStateShuttingDown.
        * After receiving a response to the command, the S60 starter server will
        * only clean up itself and then call UserHal::SwitchOff().
        *
        * @param  None.
        * @return TResponsePckg Success status of the operation.
        */
        EExecuteShutdown = 113,

        /**
        * Restore the factory settings of Domestic OS.
        *
        * Restoring factory settings may require some licensee-specific actions
        * to be performed. This command is used to request those actions to be
        * executed. The command will be issued during start-up sequence
        * following a reset caused by user-initiated RFS operation.
        *
        * @param  TRFSReasonPckg Indicates whether normal or deep RFS is
        * required.
        * @return TResponsePckg Success status of the operation.
        */
        EExecuteDOSRfs = 114,

        /**
        * Activate RF tranceiver for making an emergency call.
        *
        * Emergency calls have a high priority in S60 devices. Emergency calls
        * must be allowed whenever they are technically possible. There are two
        * cases, where the state of the device does not allow a mobile
        * originated call, but it must allow an emergency call.
        * - When the device is in offline mode. Applies also for the global
        *   state ESWStateEmergencyCallsOnly.
        * - When the device startup is in progress and RF transceiver is not
        *   yet switched on.
        * This command is used to switch RF transceiver on for making an
        * emergency call. As soon as the emergency call is finished, there will
        * be a command for switching RF transceiver off.
        *
        * @see Command EDeactivateRfAfterEmergencyCall.
        *
        * @param  None.
        * @return TResponsePckg Success status of the operation.
        */
        EActivateRfForEmergencyCall = 115,

        /**
        * Deactivate RF transceiver after making an emergency call.
        *
        * This command is used to switch RF transceiver off after an emergency
        * call.
        *
        * @see Command EActivateRfForEmergencyCall.
        *
        * @param  None.
        * @return TResponsePckg Success status of the operation.
        */
        EDeactivateRfAfterEmergencyCall = 116,
        
        /**
        * Query whether the current boot is a hidden reset.
        * Hidden reset means that boot-time queries and animations should not
        * be shown to the user.
        *
        * Boot-time queries and animations will be hidden from the user if the
        * system is executing a controlled reset (EExecuteReset command) or
        * this query returns ETrue.
        *
        * This query should return ETrue if the ongoing boot is caused by SW
        * reset (either controlled, initiated by EExecuteReset command, or
        * uncontrolled, caused by critical SW failure).
        * This query should return EFalse if the ongoing boot is initiated by
        * any other means (such as user pressing the power key or a wakeup
        * alarm occurring).
        *
        * This command will always be issued in ESWStateStartingUiServices
        * state.
        */
        EGetHiddenReset = 117

        };

    /*
    * ==========================================================================
    * Command parameter definitions
    * ==========================================================================
    */

    /**
    * Parameter definition for EGlobalStateChange.
     * Parameter indicates the global state to move to.
    *
    * Possible state transitions are:
    * ESWStateStartingUiServices -> ESWStateStartingCriticalApps
    * ESWStateStartingCriticalApps -> ESWStateSelfTestOK
    * ESWStateSelfTestOK -> ESWStateSecurityCheck
    * ESWStateSelfTestOK -> ESWStateCharging
    * ESWStateSelfTestOK -> ESWStateAlarm
    * ESWStateSelfTestOK -> ESWStateTest
    * ESWStateSecurityCheck -> ESWStateCriticalPhaseOK
    * ESWStateSecurityCheck -> ESWStateEmergencyCallsOnly
    * ESWStateCriticalPhaseOK -> ESWStateNormalRfOn
    * ESWStateCriticalPhaseOK -> ESWStateNormalRfOff
    * ESWStateNormalRfOn -> ESWStateNormalRfOff
    * ESWStateNormalRfOn -> ESWStateNormalBTSap
    * ESWStateNormalRfOff -> ESWStateNormalRfOn
    * ESWStateNormalRfOff -> ESWStateNormalBTSap
    * ESWStateNormalBTSap -> ESWStateNormalRfOn
    * ESWStateNormalBTSap -> ESWStateNormalRfOff
    * ESWStateCharging -> ESWStateChargingToAlarm
    * ESWStateCharging -> ESWStateChargingToNormal
    * ESWStateAlarm -> ESWStateAlarmToCharging
    * ESWStateAlarm -> ESWStateAlarmToNormal
    * ESWStateChargingToAlarm -> ESWStateAlarm
    * ESWStateAlarmToCharging -> ESWStateCharging
    * ESWStateChargingToNormal -> ESWStateSecurityCheck
    * ESWStateAlarmToNormal -> ESWStateSecurityCheck
    * (Any state except ESWStateStartingUiServices, ESWStateTest,
    *  ESWStateFatalStartupError and ESWStateShuttingDown) -> ESWStateFatalStartupError
    * (Any state except ESWStateTest and ESWStateShuttingDown) -> ESWStateShuttingDown
    */
    enum TGlobalState
        {
        ESWStateStartingUiServices = 100,
        ESWStateStartingCriticalApps,
        ESWStateSelfTestOK,

        // States for the security check phase.
        ESWStateSecurityCheck,
        ESWStateCriticalPhaseOK,
        ESWStateEmergencyCallsOnly,

        // Terminal states defined by the boot mode (and some other variables such as offline mode).
        ESWStateTest,
        ESWStateCharging,
        ESWStateAlarm,
        ESWStateNormalRfOn,
        ESWStateNormalRfOff,
        ESWStateNormalBTSap,

        // States for notifying adaptation about a terminal state change.
        ESWStateAlarmToCharging,
        ESWStateChargingToAlarm,
        ESWStateChargingToNormal,
        ESWStateAlarmToNormal,

        // Shutdown-related states.
        ESWStateShuttingDown,

        // Error states.
        ESWStateFatalStartupError
        };

    /**
    * Buffer descriptor containing TGlobalState object.
    */
    typedef TPckgBuf<TGlobalState> TGlobalStateChangePckg;

    /**
    * Parameter definition for ESecurityStateChange.
    * Parameter indicates the security state to move to.
    *
    * Possible state transitions are:
    * ESIMPresent -> ESIMReadable
    * ESIMPresent -> ESIMLessOfflineSupported
    * ESIMReadable -> ESIMInvalid
    * ESIMInvalid -> ESecurityCheckFailed
    * ESIMInvalid -> ESIMRejected
    * ESIMRejected -> ESIMBlocked
    * ESIMRejected -> ESecurityCheckFailed
    * ESIMBlocked -> EPINRequired
    * ESIMBlocked -> EAskPUK
    * EPINRequired -> EAskPIN
    * EPINRequired -> ESIMCodesOK
    * EAskPIN -> EAskPUK
    * EAskPIN -> ESIMCodesOK
    * EAskPUK -> ESIMCodesOK
    * EAskPUK -> ESecurityCheckFailed
    * ESIMCodesOK -> ESIMLock
    * ESIMCodesOK -> ESECCodeRequired
    * ESIMLock -> ESecurityCheckOK
    * ESIMLock -> ESecurityCheckFailed
    * ESIMLessOfflineSupported -> ESIMLock
    * ESIMLessOfflineSupported -> ESECCodeRequired
    * ESIMLessOfflineSupported -> ESecurityCheckFailed
    * ESECCodeRequired -> EAskSEC
    * ESECCodeRequired -> ESECCodeOK
    * EAskSEC -> ESECBlocked
    * EAskSEC -> ESECCodeOK
    * ESECBlocked -> EAskSEC
    * ESECCodeOK -> ESIMLock
    */
    enum TSecurityState
        {
        ESIMPresent = 100,       ///< Response param: Yes/No
        ESIMReadable,            ///< Response param: None (wait until SIM readable)
        ESIMRejected,            ///< Response param: Yes/No
        ESIMBlocked,             ///< Response param: No/PUK1/UPUK
        EPINRequired,            ///< Response param: No/PIN1/UPIN
        ESECCodeRequired,        ///< Response param: No/SEC/Master

        ESIMLessOfflineSupported,///< Response param: None (inform adaptation only)
        ESIMLock,                ///< Response param: SimLockRestricted/SimLockRestrictionOn/
                                 ///< SimLockRestrictionPending/SimLockOk
        ESECBlocked,             ///< Response param: None (inform adaptation only)

        EAskPIN,                 ///< Response param: None (inform adaptation only)
        EAskPUK,                 ///< Response param: None (inform adaptation only)
        EAskSEC,                 ///< Response param: None (inform adaptation only)
        ESIMCodesOK,             ///< Response param: None (inform adaptation only)
        ESECCodeOK,              ///< Response param: None (inform adaptation only)
        ESecurityCheckOK,        ///< Response param: None (inform adaptation only)
        ESecurityCheckFailed,     ///< Response param: None (inform adaptation only)
        ESIMInvalid              ///< Response param: Yes/No
        };

    /**
    * Buffer descriptor containing TSecurityState object.
    */
    typedef TPckgBuf<TSecurityState> TSecurityStateChangePckg;


    /**
    * Parameter definition for EGetSIMLanguages.
    */
    enum TLanguageListPriority
        {
        /**
        * Return list of language codes based on the most preferred language
        * list. In GSM the most preferred language list is stored in EF_LI
        * (see 3GPP TS 31.102).
        */
        EPrimaryLanguages = 100,
        /**
        * Return list of language codes based on the second preferred language
        * list. In GSM the second preferred language list is stored in EF_PL
        * (see 3GPP TS 51.011).
        */
        ESecondaryLanguages,
        /**
        * Return list of language codes based on the third preferred language
        * list. In GSM the third preferred language list is stored in EF_LP
        * (see 3GPP TS 51.011).
        */
        ETertiaryLanguages,
        };

    /**
    * Buffer descriptor containing TLanguageListPriority object.
    */
    typedef TPckgBuf<TLanguageListPriority> TLanguageListPriorityPckg;

    /**
    * Parameter definition for ESetWakeupAlarm and ECancelWakeupAlarm.
    */
    NONSHARABLE_STRUCT( TWakeupAlarmTime )
        {
        /**
        * The local time for the alarm. Startup adaptation needs to take the
        * offsets into account.
        */
        TTime iTime;
        /**
        * Universal time offset in seconds.
        */
        TTimeIntervalSeconds iUniversalTimeOffset;
        /**
        * Daylight saving offset in seconds, if not taken into account by the
        * universal time offset parameter.
        */
        TTimeIntervalSeconds iDaylightSavingOffset;
        };

    /**
    * Buffer descriptor containing TWakeupAlarmTime object.
    */
    typedef TPckgBuf<TWakeupAlarmTime> TWakeupAlarmPckg;

    /**
    * Parameter definition for EExecuteReset.
    */
    enum TResetReason
        {
        /** A reset due to display language switch. */
        ELanguageSwitchReset = 100,
        /** A reset due to restoring factory settings. */
        ENormalRFSReset = 101,
        /** A reset due to restoring factory settings (deep). */
        EDeepRFSReset = 102,
        /** A reset due to firmware update. */
        EFirmwareUpdate = 104,
        /** A reset due to an error. */
        EUnknownReset = 105,
        /** A reset due to removing operator settings. */
        EOperatorSettingReset = 106,
        /** A reset due to network mode change. */
        ENetworkModeChangeReset = 107,
        /** A reset due removing/inserting SIM card. */
        ESIMStatusChangeReset = 108,
        EDRMReset = 109,
        /** A reset after restoring backed-up data. */
        EDataRestoreReset = 110,
        /** A reset required by Field Test software. */
        EFieldTestReset = 111
        };

    /**
    * Buffer descriptor containing TResetReason object.
    */
    typedef TPckgBuf<TResetReason> TResetReasonPckg;


    /**
    * Parameter definition for EExecuteDOSRfs.
    */
    enum TRFSReason
        {
        ENormalRFS = 100,
        EDeepRFS
        };

    /**
    * Buffer descriptor containing TRFSReason object.
    */
    typedef TPckgBuf<TRFSReason> TRFSReasonPckg;

    /*
    * ==========================================================================
    * Response parameter definitions
    * ==========================================================================
    */

    /**
    * Parameter definition for command responses that need only success or
    * failure information.
    */
    typedef TPckgBuf<TInt> TResponsePckg;


    /**
    * Parameter definition for ESecurityStateChange command response.
    */
    enum TSecurityStateInfo
        {
        EYes = 100,
        ENo,

        EPUK1Required,              // Only for SIMBlocked
        EUPUKRequired,              // Only for SIMBlocked

        EPIN1Required,              // Only for PINRequired
        EUPINRequired,              // Only for PINRequired

        ESecurityCodeRequired,      // Only for SECCodeRequired
        EMasterCodeRequired,        // Only for SECCodeRequired

        ESimLockRestricted,         // Only for SIMLock
        ESimLockRestrictionOn,      // Only for SIMLock
        ESimLockRestrictionPending, // Only for SIMLock
        ESimLockOk,                 // Only for SIMLock

        ENoValue                    // For SIMReadable, SIMLessOfflineSupported,
                                    // SECBlocked, AskPIN, AskPUK, AskSEC,
                                    // SIMCodesOK, SECCodeOK,
                                    // SecurityCheckOK, SecurityCheckFailed
        };

    /**
    * Parameter definition for ESecurityStateChange command response.
    */
    NONSHARABLE_STRUCT( TSecurityStateResponse )
        {
        /**
        * Indicates whether operation was successful or if not, the reason why.
        */
        TInt iErrorCode;
        /**
        * Response value. Valid only if iErrorCode is KErrNone.
        */
        TSecurityStateInfo iValue;
        };

    /**
    * Buffer descriptor containing TSecurityStateResponse object.
    */
    typedef TPckgBuf<TSecurityStateResponse> TSecurityStateResponsePckg;


    /**
    * Parameter definition for EGetGlobalStartupMode command response.
    */
    enum TGlobalStartupMode
        {
        ENormal = 100,
        EAlarm,
        ECharging,
        ETest
        };

    /**
    * Parameter definition for EGetGlobalStartupMode command response.
    */
    struct TGlobalStartupModeResponse
        {
        /**
        * Indicates whether operation was successful or if not, the reason why.
        */
        TInt iErrorCode;
        /**
        * Response value. Valid only if iErrorCode is KErrNone.
        */
        TGlobalStartupMode iValue;
        };

    /**
    * Buffer descriptor containing TGlobalStartupModeResponse object.
    */
    typedef TPckgBuf<TGlobalStartupModeResponse> TGlobalStartupModeResponsePckg;


    /**
    * Enumeration of preferred languages for EGetSIMLanguages command response.
    *
    * Implementation should map each entry in the physical list stored in
    * SIM card to a corresponding S60 preferred language code (one of the values
    * of TPreferredLanguage enumerations).
    * Implementation may skip the entries for which there is no corresponding
    * value in the TPreferredLanguage enumeration.
    */

    enum TPreferredLanguage
        {                         // ISO 639 GSM 0338
        EPrefLangEnglish = 1,     // EN      1
        EPrefLangFrench = 2,      // FR      3
        EPrefLangGerman = 3,      // DE      0
        EPrefLangSpanish = 4,     // ES      4
        EPrefLangItalian = 5,     // IT      2
        EPrefLangSwedish = 6,     // SV      6
        EPrefLangDanish = 7,      // DA      7
        EPrefLangNorwegian = 8,   // NO      10
        EPrefLangFinnish = 9,     // FI      9
        EPrefLangPortuguese = 13, // PT      8
        EPrefLangTurkish = 14,    // TR      12
        EPrefLangIcelandic = 15,  // IS      36
        EPrefLangRussian = 16,    // RU      35
        EPrefLangHungarian = 17,  // HU      13
        EPrefLangDutch = 18,      // NL      5
        EPrefLangCzech = 25,      // CS      32
        EPrefLangSlovak = 26,     // SK
        EPrefLangPolish = 27,     // PL      14
        EPrefLangSlovenian = 28,  // SL
        EPrefLangPrcChinese = 31, // ZH
        EPrefLangJapanese = 32,   // JA
        EPrefLangThai = 33,       // TH
        EPrefLangArabic = 37,     // AR      34
        EPrefLangTagalog = 39,    // TL
        EPrefLangBulgarian = 42,  // BG
        EPrefLangCatalan = 44,    // CA
        EPrefLangCroatian = 45,   // HR
        EPrefLangEstonian = 49,   // ET
        EPrefLangFarsi = 50,      // FA
        EPrefLangGreek = 54,      // EL      11
        EPrefLangHebrew = 57,     // IW      33
        EPrefLangHindi = 58,      // HI
        EPrefLangIndonesian = 59, // IN
        EPrefLangKorean = 65,     // KO
        EPrefLangLatvian = 67,    // LV
        EPrefLangLithuanian = 68, // LT
        EPrefLangMalay = 70,      // MS
        EPrefLangMarathi = 72,    // MR
        EPrefLangRomanian = 78,   // RO
        EPrefLangSerbian = 79,    // SR
        EPrefLangUkrainian = 93,  // UK
        EPrefLangUrdu = 94,       // UR
        EPrefLangVietnamese = 96, // VI
        EPrefLangBasque = 102,    // EU
        EPrefLangGalician = 103   // GL
        };


    /**
    * Array of preferred languages for EGetSIMLanguages command response.
    */
    typedef RArray<TPreferredLanguage> RLanguageList;


    /**
    * Parameter definition for EGetSIMLanguages command response.
    */
    NONSHARABLE_CLASS( RLanguageListResponse )
        {
    private:
        RLanguageListResponse( const RLanguageListResponse& );
        RLanguageListResponse& operator= ( const RLanguageListResponse& );

    public:

        /**
        * Constructor.
        */
        inline RLanguageListResponse();

        /**
        * Closes the language code array and frees all memory allocated to the
        * array.
        *
        * The function must be called before this object is destroyed.
        */
        inline void Close();

        /**
        * Use KErrNotFound to indicate that there is no SIM card present or the
        * SIM card does not contain the requested list.
        */
        TInt iErrorCode;

        /**
        * Array of zero or more languages codes.
        */
        RLanguageList iLanguages;
        };

    /**
    * Pointer descriptor representing an RLanguageListResponse object.
    */
    typedef TPckg<RLanguageListResponse> TLanguageListResponsePckg;


    /**
    * Parameter definition for command responses that need success or failure
    * information and a boolean return value.
    */
    struct TBooleanResponse
        {
        /**
        * Indicates whether operation was successful or if not, the reason why.
        */
        TInt iErrorCode;
        /**
        * Response value. Valid only if iErrorCode is KErrNone.
        */
        TBool iValue;
        };

    /**
    * Buffer descriptor containing TBooleanResponse object.
    */
    typedef TPckgBuf<TBooleanResponse> TBooleanResponsePckg;

    }

#include <ssm/startupadaptationcommands.inl>

#endif // __STARTUPADAPTATIONCOMMANDS_H__
