/*
* Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of the License "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 SATNOTIFICATIONS_H
#define SATNOTIFICATIONS_H


//  INCLUDES
#include <e32base.h>    // base class cbase
#include <etelsat.h>    // etel sat response packages
#include <et_tsy.h>     // type declarations for tsy

// CONSTANTS
const TUint8 KRefreshMasterFileHeader             = 0x3F;


// FORWARD DECLARATIONS
class CSatMessHandler;
class CTsySatMessaging;
class TIsiReceiveC;
class CBerTlv;
class CTlv;

// CLASS DECLARATION
/**
*  Sat notifications base class.
*  Base class for SAT command notification classes.
*
*  @lib SIMATKTSY.LIB
*  @since Series 60 Series60_2.6
*/
class CSatNotificationsBase : public CBase
    {
    protected:    // Constructors

        /**
        * C++ default constructor.
        * @since NCP 5.0
        * @param aSatMessHandler pointer to satmessagehandler class
        * @param aSatMessaging pointer to satmessaging class
        */
        CSatNotificationsBase( CSatMessHandler* aSatMessHandler,
            CTsySatMessaging* aSatMessaging );


    public:  // Destructor

        /**
        * Destructor.
        * @since NCP 5.0
        */
        virtual ~CSatNotificationsBase();


    public:     // Pure virtuals

        /**
        * Pure virtual method for derived classes. Handles PCmd ISI messages
        * from phonet which is an interface to CellMo software.
        * @since NCP 5.0
        * @param aIsiMessage received ISI message
        * @return none
        */
        virtual void MessageReceived( const TIsiReceiveC& aIsiMessage ) = 0;

        /**
        * Pure virtual method for derived classes. Etel SAT Notification
        * request.
        * @since Series 60 Series60_2.6
        * @param aReqHandle notify request handle. The request handle
        * has to be non-null (.i.e pending request) in order to process
        * an incoming PCmd ISI message
        * @param aDataPtr pointer to a descriptor. Usually the pointer is
        * casted to a suitable ETel SAT data package in order to access
        * structured data fields and parameters. This is the first step
        * in the adaptation process, CellMo to Symbian.
        * @return none
        */
        virtual void Notify( const TTsyReqHandle aReqHandle,
            TDes8* aDataPtr = NULL ) = 0;

    public:     // New methods

        /**
        * Cancels notification request.
        * @since Series 60 Series60_2.6
        * @param aReqHandle notify request handle
        * @return status
        */
        TInt CancelNotification( const TTsyReqHandle aReqHandle );

        /**
        * Virtual method for derived classes. Handles the
        * terminal response
        * @since NCP 5.0
        * @param aRsp Pointer to a descriptor. Usually the pointer is
        * casted to a suitable ETel SAT data package in order to access
        * structured data fields and parameters. This is the first step
        * in the adaptation process, Symbian to CellMo. The terminal
        * response is reshaped into an ISI message.
        * @return status
        */
        virtual TInt TerminalResponse( TDes8* aRsp );

        /**
        * Return command details of the current proactive command
        * @since Series 60 Series60_2.6
        * @param none
        * @return reference to a descriptor containing the PCmd's command
        * details TLV.
        */
        TDes8& GetCmdDetails();

        /**
        * Return the transaction identifier of the current PCmd ISI message.
        * The transaction identifier is a CellMo specific value.
        * This value cannot be used by Etel clients.
        * @since Series 60 Series60_2.6
        * @param none
        * @return TUint8 Transaction Id value (0-255)
        */
        TUint8 GetTransactionId();


    protected: // New methods

        /**
        * Returns TsyReqhandle to the caller
        * @since Series 60 Series60_2.6
        * param none
        * @return TsyReqHandle
        */
        TTsyReqHandle TsyReqHandle();

        /**
        * Completes the notify request to Etel
        * @since Series 60 Series60_2.6
        * @param aError possible error code
        * @return none
        */
        void CompleteRequest( const TInt aError );


    protected: // Private nested class

        // CLASS DECLARATION
        /**
        *  Protected Sat notifications nested class.
        *  Contains the allowed general results for the specific command
        *
        *  @since NCP 5.1
        */
        class TAllowedResults
            {
            public:

                /**
                * C++ default constructor.
                * @since NCP 5.1
                */
                TAllowedResults();

                /**
                * Equals-operator for TAllowedResults-class. Test wether
                * the provided general result is allowed for the command
                * or not.
                * @since NCP 5.1
                * @param aResult Result to be tested
                * @return ETrue if allowed, EFalse if not.
                */
                TBool operator==( const RSat::TPCmdResult aResult ) const;

                /**
                * Nonequals-operator for TAllowedResults-class. Test wether
                * the provided general result is not allowed for the command
                * or not.
                * @since NCP 5.1
                * @param aResult Result to be tested
                * @return ETrue if not allowed, otherwise EFalse.
                */
                TBool operator!=( const RSat::TPCmdResult aResult ) const;

                /**
                * Assignment operator for TAllowedResults-class. Provided
                * general result is allowed for command.
                * (results = RSat::KSuccess)
                * @since NCP 5.1
                * @param aResult Result to be allowed
                * @return TAllowedResults-class
                */
                TAllowedResults& operator=( const RSat::TPCmdResult aResult );

                /**
                * Increment operator for TAllowedResults-class. Provided
                * general result is allowed for command.
                * (results += RSat::KPartialComprehension)
                * @since NCP 5.1
                * @param aResult Result to be allowed
                * @return TAllowedResults-class
                */
                TAllowedResults& operator+=( const RSat::TPCmdResult aResult );

                /**
                * Increment operator for TAllowedResults-class. Results allowed
                * by the provided results-class are appended.
                * (results += otherResults)
                * @since NCP 5.1
                * @param aResults Results to be allowed
                * @return TAllowedResults-class
                */
                TAllowedResults& operator+=( const TAllowedResults aResults );

                /**
                * Increment operator for TAllowedResults-class. Provided
                * general result is allowed for command.
                * (results = results + RSat::KSuccess)
                * @since NCP 5.1
                * @param aResult Result to be allowed
                * @return TAllowedResults-class
                */
                TAllowedResults& operator+( const RSat::TPCmdResult aResult );


            private:    // Methods

                /**
                * Creates 64-bit field from the provided general result
                * @since NCP 5.1
                * @param aResult Result to be converted
                * @return Bit field representing the general result
                */
                inline TUint64 CreateBitField( const RSat::TPCmdResult aResult ) const;

            private:    // Members

                // Bit field holding the allowed results
                TUint64     iResultField;
            };


    protected: // Data

        // Sat messagehandler pointer
        CSatMessHandler*    iSatMessHandler;

        // Sat messaging pointer
        CTsySatMessaging*   iSatMessaging;

        // Command details Tlv
        TBuf8<5>            iCommandDetails;

        // Transaction ID (0-255)
        TUint8              iTransId;

        // Request handle, coming from ETel
        TTsyReqHandle       iReqHandle;

        // Bit field for allowed general results for specific command
        TAllowedResults     iAllowedResults;

    private: // Friend methods

        /**
        * Overwrite the default plus operator for general results. Combines
        * results into TAllowedResults-class. Has to be declared as a friend
        * method to enable the usage of internal TAllowedResults-class.
        * (results = RSat::KSuccess + RSat::KPartialComprehension)
        * @since NCP 5.1
        * @param aResultA First result to be allowed
        * @param aResultB Second result to be allowed
        * @return TAllowedResults-class
        */
        friend TAllowedResults operator+( const RSat::TPCmdResult aResultA,
            const RSat::TPCmdResult aResultB );
    };


/**
*  SAT Display Text notification class.
*  Instantiated by CSatMessaging class.
*  This PCmd instructs the SAT to display a text message.
*  It allows SIM to define the priority of that message,
*  and the text string format.
*
*  @lib SIMATKTSY.lib
*  @since Series 60 Series60_2.6
*/
class CSatNotifyDisplayText : public CSatNotificationsBase
    {
    public:  // Constructors and destructor

        /**
        * C++ default constructor.
        * @since NCP 5.0
        * @param aSatMessHandler pointer to satmessagehandler class
        * @param aSatMessaging pointer to satmessaging class
        */
        CSatNotifyDisplayText( CSatMessHandler* aSatMessHandler,
            CTsySatMessaging* aSatMessaging );

        /**
        * Destructor.
        */
        ~CSatNotifyDisplayText();


    public: // Methods from base classes

        /**
        * From CSatNotificationsBase Handles DisplayText PCmd ISI message
        * @since NCP 5.0
        * @param aIsiMessage received ISI message
        * @return none
        */
        void MessageReceived( const TIsiReceiveC& aIsiMessage );

        /**
        * From CSatNotificationsBase Notification request received from
        * ETel client
        * @since Series 60 Series60_2.6
        * @param aReqHandle request handle from ETel
        * @param aDataPtr pointer to parameter class
        * @return none
        */
        void Notify( const TTsyReqHandle aReqHandle, TDes8* aDataPtr = NULL );

        /**
        * From CSatNotificationsBase Handles the Display text terminal response
        * @since Series 60 Series60_2.6
        * @param aRsp pointer to a descriptor containing the response structure
        * @return status
        */
        TInt TerminalResponse( TDes8* aRsp );


    private: // Data

        // Package allocated by an Etel client
        RSat::TDisplayTextV2Pckg* iDisplayTextV2Pckg;
    };


/**
*  SAT Get Inkey notification class.
*  Instantiated by CSatMessaging class.
*  This PCmd instructs the SAT to display text and expect the user
*  to enter a single character. Any response entered by the user shall
*  be passed transparently by the SAT to the SIM.
*
*  @lib SIMATKTSY.lib
*  @since Series 60 Series60_2.6
*/
class CSatNotifyGetInkey : public CSatNotificationsBase
    {
    public:  // Constructors and destructor

        /**
        * C++ default constructor.
        * @since NCP 5.0
        * @param aSatMessHandler pointer to satmessagehandler class
        * @param aSatMessaging pointer to satmessaging class
        */
        CSatNotifyGetInkey( CSatMessHandler* aSatMessHandler,
            CTsySatMessaging* aSatMessaging );

        /**
        * Destructor.
        */
        ~CSatNotifyGetInkey();


    public: // Methods from base classes

        /**
        * From CSatNotificationsBase Handles GetInkey PCmd ISI message
        * @since NCP 5.0
        * @param aIsiMessage received ISI message
        * @return none
        */
        void MessageReceived( const TIsiReceiveC& aIsiMessage );

        /**
        * From CSatNotificationsBase Notification request received from
        * ETel client
        * @since Series 60 Series60_2.6
        * @param aReqHandle request handle from ETel
        * @param aDataPtr pointer to parameter class
        * @return none
        */
        void Notify( const TTsyReqHandle aReqHandle, TDes8* aDataPtr = NULL );

        /**
        * From CSatNotificationsBase Handles the Get Inkey terminal response
        * @since Series 60 Series60_2.6
        * @param aRsp pointer to a descriptor containing the response structure
        * @return status
        */
        TInt TerminalResponse( TDes8* aRsp );


    private: // Data

        // Package allocated by an Etel client
        RSat::TGetInkeyV2Pckg* iGetInkeyV2Pckg;
    };


/**
*  SAT Get Input notification class.
*  Instantiated by CSatMessaging class.
*  This PCmd instructs the SAT to display text and that any
*  response string entered by the user shall be passed
*  by the SAT to the SIM. If the SIM provides a default text,
*  the SAT shall display this default text, which user may accept,
*  reject or edit as the response string.
*
*  @lib SIMATKTSY.lib
*  @since Series 60 Series60_2.6
*/
class CSatNotifyGetInput : public CSatNotificationsBase
    {
    public:  // Constructors and destructor

        /**
        * C++ default constructor.
        * @since NCP 5.0
        * @param aSatMessHandler pointer to satmessagehandler class
        * @param aSatMessaging pointer to satmessaging class
        */
        CSatNotifyGetInput( CSatMessHandler* aSatMessHandler,
            CTsySatMessaging* aSatMessaging );

        /**
        * Destructor.
        */
        ~CSatNotifyGetInput();


    public: // Methods from base classes

        /**
        * From CSatNotificationsBase Handles GetInput PCmd ISI message
        * @since NCP 5.0
        * @param aIsiMessage received ISI message
        * @return none
        */
        void MessageReceived( const TIsiReceiveC& aIsiMessage );

        /**
        * From CSatNotificationsBase Notification request received from
        * ETel client
        * @since Series 60 Series60_2.6
        * @param aReqHandle request handle from ETel
        * @param aDataPtr pointer to parameter class
        * @return none
        */
        void Notify( const TTsyReqHandle aReqHandle, TDes8* aDataPtr = NULL );

        /**
        * From CSatNotificationsBase Handles the Get Input terminal response
        * @since Series 60 Series60_2.6
        * @param aRsp pointer to a descriptor containing the response structure
        * @return status
        */
        TInt TerminalResponse( TDes8* aRsp );


    private: // Data

        // Package received from ETel
        RSat::TGetInputV1Pckg* iGetInputV1Pckg;
    };


/**
*  SAT Play Tone notification class.
*  Instantiated by CSatMessaging class.
*  This PCmd instructs the SAT to play an audio tone.
*
*  @lib SIMATKTSY.lib
*  @since Series 60 Series60_2.6
*/
class CSatNotifyPlayTone : public CSatNotificationsBase
    {
    public:  // Constructors and destructor

        /**
        * C++ default constructor.
        * @since NCP 5.0
        * @param aSatMessHandler pointer to satmessagehandler class
        * @param aSatMessaging pointer to satmessaging class
        */
        CSatNotifyPlayTone( CSatMessHandler* aSatMessHandler,
            CTsySatMessaging* aSatMessaging );

        /**
        * Destructor.
        */
        ~CSatNotifyPlayTone();


    public: // Methods from base classes

        /**
        * From CSatNotificationsBase Handles PlayTone PCmd ISI message
        * @since NCP 5.0
        * @param aIsiMessage received ISI message
        * @return none
        */
        void MessageReceived( const TIsiReceiveC& aIsiMessage );

        /**
        * From CSatNotificationsBase Notification request received from
        * ETel client
        * @since Series 60 Series60_2.6
        * @param aReqHandle request handle from ETel
        * @param aDataPtr pointer to parameter class
        * @return none
        */
        void Notify( const TTsyReqHandle aReqHandle, TDes8* aDataPtr = NULL );

        /**
        * From CSatNotificationsBase Handles the Play Tone terminal response
        * @since Series 60 Series60_2.6
        * @param aRsp pointer to a descriptor containing the response structure
        * @return status
        */
        TInt TerminalResponse( TDes8* aRsp );


    private: // Data

        // Package received from ETel
        RSat::TPlayToneV2Pckg* iPlayToneV2Pckg;
    };


/**
*  SAT PollInterval notification class.
*  Instantiated by CSatMessaging class.
*  This PCmd negotiates how often the ME shall send STATUS commands
*  related to Proactive Polling
*  Does not require any interaction with the Symbian OS side, and has no impact
*  on the Etel SAT client.
*
*  @lib SIMATKTSY.lib
*  @since Series 60 Series60_2.6
*/
class CSatNotifyPollInterval : public CSatNotificationsBase
    {
    public:  // Constructors and destructor

        /**
        * C++ default constructor.
        * @since NCP 5.0
        * @param aSatMessHandler pointer to satmessagehandler class
        * @param aSatMessaging pointer to satmessaging class
        */
        CSatNotifyPollInterval( CSatMessHandler* aSatMessHandler,
            CTsySatMessaging* aSatMessaging );

        /**
        * Destructor.
        */
        ~CSatNotifyPollInterval();


    public: // Methods from base classes

        /**
        * From CSatNotificationsBase Handles PollInterval PCmd ISI message
        * @since NCP 5.0
        * @param aIsiMessage received ISI message
        * @return none
        */
        void MessageReceived( const TIsiReceiveC& aIsiMessage );

        /**
        * From CSatNotificationsBase Notification request received from
        * ETel client. Not used in this PCmd since there is no interaction
        * required with Etel SAT client.
        * @since NCP 5.0
        * @param aReqHandle request handle from ETel
        * @param aDataPtr pointer to parameter class
        * @return none
        */
        void Notify( const TTsyReqHandle aReqHandle, TDes8* aDataPtr = NULL );
    };


/**
*  SAT SetUpMenu notification class.
*  Instantiated by CSatMessaging class.
*  The SIM shall supply a set of menu items, which shall be used as
*  a main menu in SAT application. The user has then the opportunity
*  to choose one of these menu items at his own discretion.
*  Each item comprises a short identifier (used to indicate the selection)
*  and a text string. Also an Alpha identifier is supplied which acts as
*  a title for the list of menu items.
*
*  @lib SIMATKTSY.lib
*  @since Series 60 Series60_2.6
*/
class CSatNotifySetUpMenu : public CSatNotificationsBase
    {
    public:  // Constructors and destructor

        /**
        * C++ default constructor.
        * @since NCP 5.0
        * @param aSatMessHandler pointer to satmessagehandler class
        * @param aSatMessaging pointer to satmessaging class
        */
        CSatNotifySetUpMenu( CSatMessHandler* aSatMessHandler,
            CTsySatMessaging* aSatMessaging );

        /**
        * Destructor.
        */
        ~CSatNotifySetUpMenu();


    public: // Methods from base classes

        /**
        * From CSatNotificationsBase Handles SetUpMenu PCmd ISI message
        * @since NCP 5.0
        * @param aIsiMessage received ISI message
        * @return none
        */
        void MessageReceived( const TIsiReceiveC& aIsiMessage );

        /**
        * From CSatNotificationsBase Notification request received from
        * ETel client.
        * @since NCP 5.0
        * @param aReqHandle request handle from ETel
        * @param aDataPtr pointer to parameter class
        * @return none
        */
        void Notify( const TTsyReqHandle aReqHandle, TDes8* aDataPtr = NULL );

        /**
        * From CSatNotificationsBase Handles the SetUpMenu terminal response
        * @since Series 60 Series60_2.6
        * @param aRsp pointer to a descriptor containing the response structure
        * @return status
        */
        TInt TerminalResponse( TDes8* aRsp );


    public: // New methods

        /**
        * From CSatNotificationsBase Handles the SetUpMenu terminal response
        * @since Series 60 Series60_2.6
        * @param none
        * @return TDes16& reference to a descriptor containing
        * a SAT application name
        */
        TDes16& SatApplicationName();


    private: // Data

        // Package received from ETel
        RSat::TSetUpMenuV2Pckg*     iSetUpMenuV2Pckg;

        // Toolkit name
        TBuf<RSat::KAlphaIdMaxSize> iToolKitName;

        // Buffer for isimessage. Used only if cmd is received before a notify
        HBufC8*                     iSatIsiMsg;

        //Flag for items next indicator
        TBool                       iItemsNextIndicatorRemoved;
    };


/**
*  SAT SelectItem notification class.
*  Instantiated by CSatMessaging class.
*  The SIM shall supply a set of items from which the user may
*  choose one. Each item comprises a short identifier
*  (used to indicate the selection) and a text string.
*  Optionally the SIM may include an alpha identifier. This is intended
*  to act as a title for the list of items.
*
*  @lib SIMATKTSY.lib
*  @since Series 60 Series60_2.6
*/
class CSatNotifySelectItem : public CSatNotificationsBase
    {
    public:  // Constructors and destructor

        /**
        * C++ default constructor.
        * @since NCP 5.0
        * @param aSatMessHandler pointer to satmessagehandler class
        * @param aSatMessaging pointer to satmessaging class
        */
        CSatNotifySelectItem( CSatMessHandler* aSatMessHandler,
            CTsySatMessaging* aSatMessaging );

        /**
        * Destructor.
        */
        ~CSatNotifySelectItem();


    public: // Methods from base classes

        /**
        * Initializer
        * @param aSatMessHandler pointer to satmessagehandler class
        * @param aSatMessaging pointer to satmessaging class
        */
        void ConstructL( CSatMessHandler* aSatMessHandler,
            CTsySatMessaging* aSatMessaging );

        /**
        * From CSatNotificationsBase Handles SelectItem PCmd ISI message
        * @since NCP 5.0
        * @param aIsiMessage received ISI message
        * @return none
        */
        void MessageReceived( const TIsiReceiveC& aIsiMessage );

        /**
        * From CSatNotificationsBase Notification request received from
        * ETel client
        * @since Series 60 Series60_2.6
        * @param aReqHandle request handle from ETel
        * @param aDataPtr pointer to parameter class
        * @return none
        */
        void Notify( const TTsyReqHandle aReqHandle, TDes8* aDataPtr = NULL );

        /**
        * From CSatNotificationsBase Handles the SelectItem terminal response
        * @since Series 60 Series60_2.6
        * @param aRsp pointer to a descriptor containing the response structure
        * @return status
        */
        TInt TerminalResponse( TDes8* aRsp );


    private: // Data

        // Package allocated by an Etel client
        RSat::TSelectItemV2Pckg*    iSelectItemV2Pckg;

        //Flag for items next indicator
        TBool                       iItemNextIndicatorRemoved;
    };


/**
*  SAT SendSm notification class.
*  Instantiated by CSatMessaging class.
*  This PCmd instructs the SAT to send a short message to the
*  network.
*
*  @lib SIMATKTSY.lib
*  @since Series 60 Series60_2.6
*/
class CSatNotifySendSm : public CSatNotificationsBase
    {
    public:  // Constructors and destructor

        /**
        * C++ default constructor.
        * @since NCP 5.0
        * @param aSatMessHandler pointer to satmessagehandler class
        * @param aSatMessaging pointer to satmessaging class
        */
        CSatNotifySendSm( CSatMessHandler* aSatMessHandler,
            CTsySatMessaging* aSatMessaging );

        /**
        * Destructor.
        */
        ~CSatNotifySendSm();


    public: // Methods from base classes

        /**
        * From CSatNotificationsBase Handles SendSm PCmd ISI message
        * @since NCP 5.0
        * @param aIsiMessage received ISI message
        * @return none
        */
        void MessageReceived( const TIsiReceiveC& aIsiMessage );

        /**
        * From CSatNotificationsBase Notification request received from
        * ETel client
        * @since Series 60 Series60_2.6
        * @param aReqHandle request handle from ETel
        * @param aDataPtr pointer to parameter class
        * @return none
        */
        void Notify( const TTsyReqHandle aReqHandle, TDes8* aDataPtr = NULL );

        /**
        * From CSatNotificationsBase Handles the SendSm terminal response
        * @since Series 60 Series60_2.6
        * @param aRsp pointer to a descriptor containing the response structure
        * @return status
        */
        TInt TerminalResponse( TDes8* aRsp );


    public: // New methods

        /**
        * From CSatNotificationsBase Get index of TP-UDL(User Data Length)
        * field from Tpdu
        * @param aTpdu pointer to Tpdu data
        * @return TUint8 index of TP-UDL field
        */
        TUint8 GetTpUdlIndex( TPtrC8 aTpdu );

        /**
        * From CSatNotificationsBase Get index of TP-DCS(Data Coding Scheme)
        * field from Tpdu
        * @param aTpdu pointer to Tpdu data
        * @return TUint8 index of TP-DCS field
        */
        TUint8 GetTpDcsIndex( TPtrC8 aTpdu );

        /**
        * From CSatNotificationsBase Check TPDU validity
        * @since Series 60 Series60_2.6
        * @param aTpdu pointer to Tpdu data
        * @return TInt KErrNone or KErrCorrupt
        */
        TInt CheckTpdu( TPtrC8 aTpdu );

        /**
        * From CSatNotificationsBase Pack SMS if it is required by the sim
        * @since Series 60 Series60_2.6
        * @param aTpdu pointer to received Tpdu data
        * @param aSendSm reference to package containing packed sms data
        * @return TInt KErrNone or KErrCorrupt
        */
        TInt PackSms( TPtrC8 aTpdu, TTpdu& aSendSm );


    private: // Data

        // Package allocated by an Etel client
        RSat::TSendSmV1Pckg* iSendSmV1Pckg;

    };


/**
*  SAT SendDtmf notification class.
*  Instantiated by CSatMessaging class.
*  This PCmd instructs the SAT to send a DTMF string towards the network.
*
*  @lib SIMATKTSY.lib
*  @since Series 60 Series60_2.6
*/
class CSatNotifySendDtmf : public CSatNotificationsBase
    {
    public:  // Constructors and destructor

        /**
        * C++ default constructor.
        * @since NCP 5.0
        * @param aSatMessHandler pointer to satmessagehandler class
        * @param aSatMessaging pointer to satmessaging class
        */
        CSatNotifySendDtmf( CSatMessHandler* aSatMessHandler,
            CTsySatMessaging* aSatMessaging );

        /**
        * Destructor.
        */
        ~CSatNotifySendDtmf();


    public: // Methods from base classes

        /**
        * From CSatNotificationsBase Handles SendDtmf PCmd ISI message
        * @since NCP 5.0
        * @param aIsiMessage received ISI message
        * @return none
        */
        void MessageReceived( const TIsiReceiveC& aIsiMessage );

        /**
        * From CSatNotificationsBase Notification request received from
        * ETel client
        * @since Series 60 Series60_2.6
        * @param aReqHandle request handle from ETel
        * @param aDataPtr pointer to parameter class
        * @return none
        */
        void Notify( const TTsyReqHandle aReqHandle, TDes8* aDataPtr = NULL );

        /**
        * From CSatNotificationsBase Handles the SendDtmf terminal response
        * @since Series 60 Series60_2.6
        * @param aRsp pointer to a descriptor containing the response structure
        * @return status
        */
        TInt TerminalResponse( TDes8* aRsp );


    private: // Data

        // Package allocated by an Etel client
        RSat::TSendDtmfV1Pckg* iSendDtmfV1Pckg;
    };


/**
*  SAT SendSs notification class.
*  Instantiated by CSatMessaging class.
*  This PCmd instructs the SAT to send a SS string towards the network.
*
*  @lib SIMATKTSY.lib
*  @since Series 60 Series60_2.6
*/
class CSatNotifySendSs : public CSatNotificationsBase
    {
    public:  // Constructors and destructor

        /**
        * C++ default constructor.
        * @since NCP 5.0
        * @param aSatMessHandler pointer to satmessagehandler class
        * @param aSatMessaging pointer to satmessaging class
        */
        CSatNotifySendSs( CSatMessHandler* aSatMessHandler,
            CTsySatMessaging* aSatMessaging );

        /**
        * Destructor.
        */
        ~CSatNotifySendSs();


    public: // Methods from base classes

        /**
        * From CSatNotificationsBase Handles SendSs PCmd ISI message
        * @since NCP 5.0
        * @param aIsiMessage received ISI message
        * @return none
        */
        void MessageReceived( const TIsiReceiveC& aIsiMessage );

        /**
        * From CSatNotificationsBase Notification request received from
        * ETel client
        * @since Series 60 Series60_2.6
        * @param aReqHandle request handle from ETel
        * @param aDataPtr pointer to parameter class
        * @return none
        */
        void Notify( const TTsyReqHandle aReqHandle, TDes8* aDataPtr = NULL );

        /**
        * From CSatNotificationsBase Handles the SendSs terminal response
        * @since Series 60 Series60_2.6
        * @param aRsp pointer to a descriptor containing the response structure
        * @return status
        */
        TInt TerminalResponse( TDes8* aRsp );


    public: // New methods

        /**
        * From CSatNotificationsBase Checks SS string if it is call forwarding
        * and append '+' character.
        * @since Series 60 Series60_2.6
        * @param aSource Original string is received from SIM
        * @param aSsString SS string compatible with ETel SAT
        * @return none
        */
        void CheckCallForwarding( TPtrC8 aSource, RSat::TSsString& aSsString );

        /**
        * From CSatNotificationsBase Checks validity of SS string.
        * If string includes undefined SS
        * characters or length is zero then return KErrCorrupt
        * @since Series 60 Series60_2.6
        * @param aSsString Original string is received from SIM
        * @return TInt KErrNone or KErrCorrupt
        */
        TInt CheckSsStringValidity( TPtrC8 aSsString );


    private: // Data

        // Package allocated by an Etel client
        RSat::TSendSsV1Pckg*    iSendSsV1Pckg;
    };


/**
*  SAT SendUssd notification class.
*  Instantiated by CSatMessaging class.
*  This PCmd instructs the SAT to send a USSD string towards the network.
*
*  @lib SIMATKTSY.lib
*  @since Series 60 Series60_2.6
*/
class CSatNotifySendUssd : public CSatNotificationsBase
    {
    public:  // Constructors and destructor

        /**
        * C++ default constructor.
        * @since NCP 5.0
        * @param aSatMessHandler pointer to satmessagehandler class
        * @param aSatMessaging pointer to satmessaging class
        */
        CSatNotifySendUssd( CSatMessHandler* aSatMessHandler,
            CTsySatMessaging* aSatMessaging );

        /**
        * Destructor.
        */
        ~CSatNotifySendUssd();


    public: // Methods from base classes

        /**
        * From CSatNotificationsBase Handles SendUssd PCmd ISI message
        * @since NCP 5.0
        * @param aIsiMessage received ISI message
        * @return none
        */
        void MessageReceived( const TIsiReceiveC& aIsiMessage );

        /**
        * From CSatNotificationsBase Notification request received from
        * ETel client
        * @since Series 60 Series60_2.6
        * @param aReqHandle request handle from ETel
        * @param aDataPtr pointer to parameter class
        * @return none
        */
        void Notify( const TTsyReqHandle aReqHandle, TDes8* aDataPtr = NULL );

        /**
        * From CSatNotificationsBase Handles the SendUssd terminal response
        * @since Series 60 Series60_2.6
        * @param aRsp pointer to a descriptor containing the response structure
        * @return status
        */
        TInt TerminalResponse( TDes8* aRsp );


    private: // Data

        // Package allocated by an Etel client
        RSat::TSendUssdV1Pckg*  iSendUssdV1Pckg;
    };


/**
*  SAT SetUpCall notification class.
*  Instantiated by CSatMessaging class.
*  This PCmd instructs the SAT to setup a call.
*  Can be setup in three different ways:
*  - Set up a call, only if not currently busy on another call
*  - Set up a call, put all other call on hold
*  - Set up a call, disconnect other calls
*
*  @lib SIMATKTSY.lib
*  @since Series 60 Series60_2.6
*/
class CSatNotifySetUpCall : public CSatNotificationsBase
    {
    public:  // Constructors and destructor

        /**
        * C++ default constructor.
        * @since NCP 5.0
        * @param aSatMessHandler pointer to satmessagehandler class
        * @param aSatMessaging pointer to satmessaging class
        */
        CSatNotifySetUpCall( CSatMessHandler* aSatMessHandler,
            CTsySatMessaging* aSatMessaging );

        /**
        * Destructor.
        */
        ~CSatNotifySetUpCall();


    public: // Methods from base classes

        /**
        * From CSatNotificationsBase Handles SetUpCall PCmd ISI message
        * @since NCP 5.0
        * @param aIsiMessage received ISI message
        * @return none
        */
        void MessageReceived( const TIsiReceiveC& aIsiMessage );

        /**
        * From CSatNotificationsBase Notification request received from
        * ETel client
        * @since Series 60 Series60_2.6
        * @param aReqHandle request handle from ETel
        * @param aDataPtr pointer to parameter class
        * @return none
        */
        void Notify( const TTsyReqHandle aReqHandle, TDes8* aDataPtr = NULL );

        /**
        * From CSatNotificationsBase Handles the SetUpCall terminal response
        * @since Series 60 Series60_2.6
        * @param aRsp pointer to a descriptor containing the response structure
        * @return status
        */
        TInt TerminalResponse( TDes8* aRsp );


    public: // New methods

        /**
        * From CSatNotificationsBase Cache call connected event
        * @since Series 60 Series60_2.6
        * @param aEnvelope reference to a descriptor containing envelope data.
        * @return none
        */
        void StoreCallConnectedEvent( const TDesC8& aEnvelope );


    private: // Data

        // Package allocated by an Etel client
        RSat::TSetUpCallV1Pckg* iSetUpCallV1Pckg;

        // Cache for Call connected event
        TBuf8<12>               iCallConnectedEvent;

    };


/**
*  SAT Refresh notification class.
*  Instantiated by CSatMessaging class.
*  The purpose of this PCmd is to allow the SAT
*  (which alerts other applications in the phone) to be notified
*  of the changes in SIM configuration that have occurred as
*  the result of a SIM application activity. It is up to SAT to
*  ensure this is done correctly..
*
*  @lib SIMATKTSY.lib
*  @since Series 60 Series60_2.6
*/
class CSatNotifyRefresh : public CSatNotificationsBase
    {
    public: // Data types

        // Enumaration of cache EF files.
        enum TCachedSimAtkFiles
            {
            KCacheEFSST     = 0x01, // SIM Service table
            KCacheEFCBMID   = 0x02, // CB DataDownload message IDs
            // Next 0x04, 0x08 etc..
            };

    public: // Constructors and destructor

        /**
        * C++ default constructor.
        * @since NCP 5.0
        * @param aSatMessHandler pointer to satmessagehandler class
        * @param aSatMessaging pointer to satmessaging class
        */
        CSatNotifyRefresh( CSatMessHandler* aSatMessHandler,
            CTsySatMessaging* aSatMessaging );

        /**
        * Destructor.
        */
        ~CSatNotifyRefresh();


    public: // Methods from base classes

        /**
        * From CSatNotificationsBase Handles Refresh PCmd ISI message
        * @since NCP 5.0
        * @param aIsiMessage received ISI message
        * @return none
        */
        void MessageReceived( const TIsiReceiveC& aIsiMessage );

        /**
        * From CSatNotificationsBase Notification request received from
        * ETel client
        * @since Series 60 Series60_2.6
        * @param aReqHandle request handle from ETel
        * @param aDataPtr pointer to parameter class
        * @return none
        */
        void Notify( const TTsyReqHandle aReqHandle, TDes8* aDataPtr = NULL );

        /**
        * From CSatNotificationsBase Handles the Refresh terminal response
        * @since Series 60 Series60_2.6
        * @param aRsp pointer to a descriptor containing the response structure
        * @return status
        */
        TInt TerminalResponse( TDes8* aRsp );


    public: // New methods

        /**
        * From CSatNotificationsBase Notification request for RefreshRequired
        * received from Etel client
        * @since Series 60 Series60_2.6
        * @param aReqHandle request handle from ETel
        * @param aDataPtr pointer to parameter class
        * @return none
        */
        void NotifyRefreshRequired( const TTsyReqHandle aRegHandle,
            TDes8* aDataPtr = NULL );

        /**
        * From CSatNotificationsBase Cancels notification of
        * RefreshRequiredParams request.
        * @since Series 60 Series60_2.6
        * @param aReqHandle notify request handle
        * @return status
        */
        TInt CancelRefreshRequiredNotification(
            const TTsyReqHandle aReqHandle );

        /**
        * From CSatNotificationsBase Response for RefreshRequired notification
        * @since Series 60 Series60_2.6
        * @param aDataPtr Pointer to descriptor containing response data
        * @return TInt
        */
        TInt RefreshAllowed( TDesC8* aDataPtr );

        /**
        * From CSatNotificationsBase Overloads original protected
        * CompleteRequest method from Base class.
        * @since Series 60 Series60_2.6
        * @param aError possible error code
        * @return none
        */
        void CompleteRequest( const TInt aError );

        /**
        * From CSatNotificationsBase Returns list of files that are
        * cached in SIM ATK TSY
        * @since Series 60 Series60_2.6
        * @param none
        * @return TUin16 iInternalCache
        */
        TUint16 CachedFiles() const;


    private: // New methods

        /**
        * Maps a 3GPP refresh value to UICC refresh value
        * @param a3GppRefresh Command Qualifier from 3GPP spec
        * @return TUint8 ServiceType from UICC specification
        */
        TUint8 Map3GppRefreshToUiccValues( const TUint8 a3GppRefresh );


    private: // Data

        // Package allocated by an Etel client
        RSat::TRefreshV2Pckg*                  iRefreshV2Pckg;

        // Package allocated by an Etel client
        RSat::TRefreshV2Pckg*                  iRefreshRequiredV2Pckg;

        // file list with full path
        TBuf8<RSat::KRefreshedFileListMaxSize> iFileList;

        // To store Aplication id
        TBuf8<RSat::KAidMaxSize>               iAid;

        // Request handle for Refresh Required, coming from ETel
        TTsyReqHandle                          iReqHandleRefreshRequired;

        // List of files that are cached in SIM ATK TSY
        TUint16                                iInternalCache;
    };


/**
*  SAT SimSessionEnd notification class.
*  Instantiated by CSatMessaging class.
*  SIM Session end tells the client when the last PCmd in SIM application has
*  been processed, i.e. the SIM application has ended.
*
*  @lib SIMATKTSY.lib
*  @since Series 60 Series60_2.6
*/
class CSatNotifySimSessionEnd : public CSatNotificationsBase
    {
    public:  // Constructors and destructor

        /**
        * C++ default constructor.
        * @since NCP 5.0
        * @param aSatMessHandler pointer to satmessagehandler class
        * @param aSatMessaging pointer to satmessaging class
        */
        CSatNotifySimSessionEnd( CSatMessHandler* aSatMessHandler,
            CTsySatMessaging* aSatMessaging );

        /**
        * Destructor.
        */
        ~CSatNotifySimSessionEnd();


    public: // Methods from base classes

        /**
        * From CSatNotificationsBase Handles SimSessionEnd PCmd ISI message
        * @since NCP 5.0
        * @param aIsiMessage received ISI message
        * @return none
        */
        void MessageReceived( const TIsiReceiveC& /*aIsiMessage*/ );

        /**
        * From CSatNotificationsBase Notification request received from
        * ETel client
        * @since Series 60 Series60_2.6
        * @param aReqHandle request handle from ETel
        * @param aDataPtr pointer to parameter class
        * @return none
        */
        void Notify( const TTsyReqHandle aReqHandle, TDes8* aDataPtr = NULL );
    };


/**
*  SAT SetUpIdleModeText notification class.
*  Instantiated by CSatMessaging class.
*  This PCmd instructs the SAT to change the text displayed
*  by the mobile equipment whenever it is in idle mode.
*
*  @lib SIMATKTSY.lib
*  @since Series 60 Series60_2.6
*/
class CSatNotifySetUpIdleModeText : public CSatNotificationsBase
    {
    public:  // Constructors and destructor

        /**
        * C++ default constructor.
        * @since NCP 5.0
        * @param aSatMessHandler pointer to satmessagehandler class
        * @param aSatMessaging pointer to satmessaging class
        */
        CSatNotifySetUpIdleModeText( CSatMessHandler* aSatMessHandler,
            CTsySatMessaging* aSatMessaging );

        /**
        * Destructor.
        */
        ~CSatNotifySetUpIdleModeText();


    public: // Methods from base classes

        /**
        * From CSatNotificationsBase Handles SetUpIdleModeText PCmd ISI message
        * @since NCP 5.0
        * @param aIsiMessage received ISI message
        * @return none
        */
        void MessageReceived( const TIsiReceiveC& aIsiMessage );

        /**
        * From CSatNotificationsBase Notification request received from
        * ETel client
        * @since Series 60 Series60_2.6
        * @param aReqHandle request handle from ETel
        * @param aDataPtr pointer to parameter class
        * @return none
        */
        void Notify( const TTsyReqHandle aReqHandle, TDes8* aDataPtr = NULL );

        /**
        * From CSatNotificationsBase Handles the SetUpIdleModeText
        * terminal response
        * @since Series 60 Series60_2.6
        * @param aRsp pointer to a descriptor containing the response structure
        * @return status
        */
        TInt TerminalResponse( TDes8* aRsp );


    private: // Data

        // Package allocated by an Etel client
        RSat::TSetUpIdleModeTextV1Pckg* iSetUpIdleModeTextV1Pckg;

    };


/**
*  SAT CallControlRequest notification class.
*  Instantiated by CSatMessaging class.
*  CallControlRequest is not treated as a proactive command in Series60.
*  The method CompleteNotification is used to notify an Etel SAT client
*  that the SIM Applet has provided an alpha identifier in response to
*  a CallControl envelope. The class CSatCC implements the CallControl
*  functionality.
*
*  @lib SIMATKTSY.lib
*  @since Series 60 Series60_2.6
*/
class CSatNotifyCallControlRequest : public CSatNotificationsBase
    {
    public:  // Constructors and destructor

        /**
        * C++ default constructor.
        * @since NCP 5.0
        * @param aSatMessHandler pointer to satmessagehandler class
        * @param aSatMessaging pointer to satmessaging class
        */
        CSatNotifyCallControlRequest( CSatMessHandler* aSatMessHandler,
            CTsySatMessaging* aSatMessaging );

        /**
        * Destructor.
        */
        ~CSatNotifyCallControlRequest();


    public: // Methods from base classes

        /**
        * From CSatNotificationsBase Handles CallControlRequest PCmd ISI message
        * Not in use.
        * @since NCP 5.0
        * @param aIsiMessage received ISI message
        * @return none
        */
        void MessageReceived( const TIsiReceiveC& /*aIsiMessage*/ );

        /**
        * From CSatNotificationsBase Notification request received from
        * ETel client
        * @since Series 60 Series60_2.6
        * @param aReqHandle request handle from ETel
        * @param aDataPtr pointer to parameter class
        * @return none
        */
        void Notify( const TTsyReqHandle aReqHandle, TDes8* aDataPtr = NULL );


    public: // New methods

        /**
        * From CSatNotificationsBase Notification completion
        * @since Series 60 Series60_2.6
        * @param aAlphaId alpha identifier in Etel SAT format
        * @param aResult call control result in Etel SAT format
        * @return none
        */
        void CompleteNotification( TDesC& aAlphaId,
            RSat::TControlResult aResult );

        /**
        * From CSatNotificationsBase Notification completion for CC GPRS
        * @param aAlphaId: Alpha identifier in Etel SAT format
        * @param aPdpContextParameters: PDP Context Parameters
        * @param aResult: Call control result in Etel SAT format
        * @return none
        */
        void CompleteNotification(
            const TDesC& aAlphaId,
            const RSat::TControlResult aResult );

        /**
        * From CSatNotificationsBase Notification completion
        * @param aCcResult CC result mapped to ISA values
        * @param aEnvelopeResponse response data received from SIM application
        * @return none
        */
        void CompleteNotificationL( const TUint8 aCcResult,
            TPtrC8 aEnvelopeResponse );

    private: // Data

        // Package allocated by an Etel client
        RSat::TCallControlV5Pckg*   iCallControlPckg;
    };


/**
*  SAT LaunchBrowser notification class.
*  Instantiated by CSatMessaging class.
*  This PCmd instructs the SAT to start a web browser application instance on
*  the mobile equipment.
*
*  @lib SIMATKTSY.lib
*  @since Series 60 Series60_2.6
*/
class CSatNotifyLaunchBrowser : public CSatNotificationsBase
    {
    public:  // Constructors and destructor

        /**
        * C++ default constructor.
        * @since NCP 5.0
        * @param aSatMessHandler pointer to satmessagehandler class
        * @param aSatMessaging pointer to satmessaging class
        */
        CSatNotifyLaunchBrowser( CSatMessHandler* aSatMessHandler,
            CTsySatMessaging* aSatMessaging );

        /**
        * Destructor.
        */
        ~CSatNotifyLaunchBrowser();


    public: // Methods from base classes

        /**
        * From CSatNotificationsBase Handles LaunchBrowser PCmd ISI message
        * @since NCP 5.0
        * @param aIsiMessage received ISI message
        * @return none
        */
        void MessageReceived( const TIsiReceiveC& aIsiMessage );

        /**
        * From CSatNotificationsBase Notification request received from
        * ETel client
        * @since Series 60 Series60_2.6
        * @param aReqHandle request handle from ETel
        * @param aDataPtr pointer to parameter class
        * @return none
        */
        void Notify( const TTsyReqHandle aReqHandle, TDes8* aDataPtr = NULL );

        /**
        * From CSatNotificationsBase Handles the LaunchBrowser terminal
        * response
        * @since Series 60 Series60_2.6
        * @param aRsp pointer to a descriptor containing the response structure
        * @return status
        */
        TInt TerminalResponse( TDes8* aRsp );


    private: // Data

        // Package allocated by an Etel client
        RSat::TLaunchBrowserV2Pckg* iLaunchBrowserV2Pckg;
    };


/**
*  SAT SetUpEventList notification class.
*  Instantiated by CSatMessaging class.
*  This PCmd instructs the SAT to set up an event list in order
*  to be able to process events received from ETel SAT clients
*  or CellMo clients.
*
*  @lib SIMATKTSY.lib
*  @since Series 60 Series60_2.6
*/
class CSatNotifySetUpEventList : public CSatNotificationsBase
    {
    public:  // Constructors and destructor

        /**
        * C++ default constructor.
        * @since NCP 5.0
        * @param aSatMessHandler pointer to satmessagehandler class
        * @param aSatMessaging pointer to satmessaging class
        */
        CSatNotifySetUpEventList( CSatMessHandler* aSatMessHandler,
            CTsySatMessaging* aSatMessaging );

        /**
        * Destructor.
        */
        ~CSatNotifySetUpEventList();


    public: // Methods from base classes

        /**
        * From CSatNotificationsBase Handles SetUpEventList PCmd ISI message
        * @since NCP 5.0
        * @param aIsiMessage received ISI message
        * @return none
        */
        void MessageReceived( const TIsiReceiveC& aIsiMessage );

        /**
        * From CSatNotificationsBase Notification request received from
        * ETel client
        * @since Series 60 Series60_2.6
        * @param aReqHandle request handle from ETel
        * @param aDataPtr pointer to parameter class
        * @return none
        */
        void Notify( const TTsyReqHandle aReqHandle, TDes8* aDataPtr = NULL );

        /**
        * From CSatNotificationsBase Handles the SetUpEventList terminal
        * response
        * @since Series 60 Series60_2.6
        * @param aRsp pointer to a descriptor containing the response structure
        * @return status
        */
        TInt TerminalResponse( TDes8* aRsp );


    private: // Data

        // Package allocated by an Etel client
        RSat::TSetUpEventListV1Pckg*    iSetUpEventListV1Pckg;

        // Command qualifier
        TUint8                          iCmdQualifier;

        // Event list
        TUint                           iEvents;
    };


/**
*  SAT PollingOff notification class.
*  Instantiated by CSatMessaging class.
*  This PCmd resets how often the ME shall send STATUS commands
*  related to Proactive Polling. The default value for reset is 25 seconds.
*  Does not require any interaction with the Symbian OS side, and has no impact
*  on the Etel SAT client.
*
*  @lib SIMATKTSY.lib
*  @since Series 60 Series60_2.6
*/
class CSatNotifyPollingOff : public CSatNotificationsBase
    {
    public:  // Constructors and destructor

        /**
        * C++ default constructor.
        * @since NCP 5.0
        * @param aSatMessHandler pointer to satmessagehandler class
        * @param aSatMessaging pointer to satmessaging class
        */
        CSatNotifyPollingOff( CSatMessHandler* aSatMessHandler,
            CTsySatMessaging* aSatMessaging );

        /**
        * Destructor.
        */
        ~CSatNotifyPollingOff();

    public: // Methods from base classes

        /**
        * From CSatNotificationsBase Handles PollingOff PCmd ISI message
        * @since NCP 5.0
        * @param aIsiMessage to received ISI message
        * @return none
        */
        void MessageReceived( const TIsiReceiveC& aIsiMessage );

        /**
        * From CSatNotificationsBase Notification request received from
        * ETel client. Not used in this PCmd since there is no interaction
        * required with Etel SAT client.
        * @since NCP 5.0
        * @param aReqHandle request handle from ETel
        * @param aDataPtr pointer to parameter class
        * @return none
        */
        void Notify( const TTsyReqHandle aReqHandle, TDes8* aDataPtr = NULL );
    };


/**
*  SAT LocalInfo notification class.
*  Instantiated by CSatMessaging class.
*  This PCmd instructs the SAT to provide local information. Some
*  of the subfunctionality do not require interaction with Etel.
*
*  @lib SIMATKTSY.lib
*  @since Series 60 Series60_2.6
*/
class CSatNotifyLocalInfo : public CSatNotificationsBase
    {
    public:  // Constructors and destructor

        /**
        * C++ default constructor.
        * @since NCP 5.0
        * @param aSatMessHandler pointer to satmessagehandler class
        * @param aSatMessaging pointer to satmessaging class
        */
        CSatNotifyLocalInfo( CSatMessHandler* aSatMessHandler,
            CTsySatMessaging* aSatMessaging );

        /**
        * Destructor.
        */
        ~CSatNotifyLocalInfo();


    public: // Methods from base classes

        /**
        * From CSatNotificationsBase Handles LocalInfo PCmd ISI message
        * @since NCP 5.0
        * @param aIsiMessage received ISI message
        * @return none
        */
        void MessageReceived( const TIsiReceiveC& aIsiMessage );

        /**
        * From CSatNotificationsBase Notification request received from
        * ETel client
        * @since Series 60 Series60_2.6
        * @param aReqHandle request handle from ETel
        * @param aDataPtr pointer to parameter class
        * @return none
        */
        void Notify( const TTsyReqHandle aReqHandle,
                             TDes8* aDataPtr = NULL );

        /**
        * From CSatNotificationsBase Handles the LocalInfo terminal response
        * @since Series 60 Series60_2.6
        * @param aRsp pointer to a descriptor containing the response structure
        * @return status
        */
        TInt TerminalResponse( TDes8* aRsp = NULL );


    public: // New methods

        /**
        * From CSatNotificationsBase Handles the LocalInfo terminal response
        * @since Series 60 Series60_2.6
        * @param aClearSatus If true clear status
        * @return TBool iLocalInfoIsOngoing
        */
        TBool LocalInfoStatus( TBool aClearStatus = EFalse );

        /**
        * From CSatNotificationsBase Handles the LocalInfo terminal response
        * @param aClearSatus If true clear status
        * @return TBool iLocalInfoAccTechOngoing
        */
        TBool LocalInfoAccTechStatus( TBool aClearStatus = EFalse );

    private: // Data

        // Package allocated by an Etel client
        RSat::TLocalInfoV3Pckg* iLocalInfoV3Pckg;

        // Response package allocated by SimAtkTsy. In use when terminal
        // response result and parameters are determined in SimAtkTsy.
        RSat::TLocalInfoRspV3 iLocalInfoRspV3;

        // Flags
        TBool iLocalInfoIsOngoing;
        TBool iLocalInfoAccTechOngoing;
    };


/**
*  SAT TimerManagement notification class.
*  Instantiated by CSatMessaging class.
*  This PCmd instructs the SAT to start one timer. Up to 8 timers.
*  Does not require any interaction with the Symbian OS side, and has no impact
*  on the Etel SAT client.
*
*  @lib SIMATKTSY.lib
*  @since Series 60 Series60_2.6
*/
class CSatNotifyTimerMgmt : public CSatNotificationsBase
    {
    public:  // Constructors and destructor

        /**
        * C++ default constructor.
        * @since NCP 5.0
        * @param aSatMessHandler pointer to satmessagehandler class
        * @param aSatMessaging pointer to satmessaging class
        */
        CSatNotifyTimerMgmt( CSatMessHandler* aSatMessHandler,
            CTsySatMessaging* aSatMessaging );

        /**
        * Destructor.
        */
        ~CSatNotifyTimerMgmt();

    public: // Methods from base classes

        /**
        * From CSatNotificationsBase Handles TimerManagement PCmd ISI message
        * @since NCP 5.0
        * @param aIsiMessage received ISI message
        * @return none
        */
        void MessageReceived( const TIsiReceiveC& aIsiMessage );

        /**
        * From CSatNotificationsBase Notification request received from
        * ETel client. Not used in this PCmd since there is no interaction
        * required with Etel SAT client.
        * @since NCP 5.0
        * @param aReqHandle request handle from ETel
        * @param aDataPtr pointer to parameter class
        * @return none
        */
        void Notify( const TTsyReqHandle aReqHandle, TDes8* aDataPtr = NULL );


    private:    // New methods
        /**
        * From CSatNotificationsBase Converts time to seconds
        * @since Series 60 Series60_2.6
        * @param aTime pointer to time data
        * @return TUint32 time expressed in seconds
        */
        TUint32 ConvertToSeconds( TPtrC8 time );


    private: // Data

        // Command qualifier
        TUint8 iCmdQualifier;
    };


/**
*  SAT MoreTime notification class.
*  Instantiated by CSatMessaging class.
*  This PCmd informs the SAT that the SIM needs more time.
*  Does not require any interaction with the Symbian OS side, and has no impact
*  on the Etel SAT client.
*
*  @lib SIMATKTSY.lib
*  @since Series 60 Series60_2.6
*/
class CSatNotifyMoreTime : public CSatNotificationsBase
    {
    public:  // Constructors and destructor

        /**
        * C++ default constructor.
        * @since NCP 5.0
        * @param aSatMessHandler pointer to satmessagehandler class
        * @param aSatMessaging pointer to satmessaging class
        */
        CSatNotifyMoreTime( CSatMessHandler* aSatMessHandler,
            CTsySatMessaging* aSatMessaging );

        /**
        * Destructor.
        */
        ~CSatNotifyMoreTime();


    public: // Methods from base classes

        /**
        * From CSatNotificationsBase Handles MoreTime PCmd ISI message
        * @since NCP 5.0
        * @param aIsiMessage received ISI message
        * @return none
        */
        void MessageReceived( const TIsiReceiveC& aIsiMessage );

        /**
        * From CSatNotificationsBase Notification request received from
        * ETel client. Not used in this PCmd since there is no interaction
        * required with Etel SAT client.
        * @since NCP 5.0
        * @param aReqHandle request handle from ETel
        * @param aDataPtr pointer to parameter class
        * @return none
        */
        void Notify( const TTsyReqHandle aReqHandle, TDes8* aDataPtr = NULL );
    };


/**
*  SAT LanguageNotification notification class.
*  Instantiated by CSatMessaging class.
*  The SIM shall use this PCmd to notify the ME about the language
*  currently used for any text string within proactive commands or
*  envelope command responses.
*
*  @lib SIMATKTSY.lib
*  @since Series 60 Series60_2.6
*/
class CSatNotifyLanguageNotification : public CSatNotificationsBase
    {
    public:  // Constructors and destructor

        /**
        * C++ default constructor.
        * @since NCP 5.0
        * @param aSatMessHandler pointer to satmessagehandler class
        * @param aSatMessaging pointer to satmessaging class
        */
        CSatNotifyLanguageNotification( CSatMessHandler* aSatMessHandler,
            CTsySatMessaging* aSatMessaging );

        /**
        * Destructor.
        */
        ~CSatNotifyLanguageNotification();


    public: // Methods from base classes

        /**
        * From CSatNotificationsBase Handles LanguageNotification PCmd
        * ISI message
        * @since NCP 5.0
        * @param aIsiMessage received ISI message
        * @return none
        */
        void MessageReceived( const TIsiReceiveC& aIsiMessage );

        /**
        * From CSatNotificationsBase Notification request received from
        * ETel client
        * @since Series 60 Series60_2.6
        * @param aReqHandle request handle from ETel
        * @param aDataPtr pointer to parameter class
        * @return none
        */
        void Notify( const TTsyReqHandle aReqHandle,
                             TDes8* aDataPtr = NULL );

        /**
        * From CSatNotificationsBase Handles the LanguageNotification
        * terminal response
        * @since Series 60 Series60_2.6
        * @param aRsp pointer to a descriptor containing the response structure
        * @return status
        */
        TInt TerminalResponse( TDes8* aRsp );


    private: //Data

        // Package allocated by an Etel client
        RSat::TLanguageNotificationV2Pckg*  iLanguageNotificationV2Pckg;
    };


/**
*  SAT OpenChannel notification class.
*  Instantiated by CSatMessaging class.
*  This PCmd instructs the SAT to open either GPRS channel, or a CSD channel
*  or a local link channel, exclusively.
*
*  @lib SIMATKTSY.lib
*  @since Series 60 Series60_3.0
*/
class CSatNotifyOpenChannel : public CSatNotificationsBase
    {
    public:  // Constructors and destructor

        /**
        * C++ default constructor.
        * @since NCP 5.0
        * @param aSatMessHandler pointer to satmessagehandler class
        * @param aSatMessaging pointer to satmessaging class
        */
        CSatNotifyOpenChannel( CSatMessHandler* aSatMessHandler,
            CTsySatMessaging* aSatMessaging );

        /**
        * Destructor.
        */
        ~CSatNotifyOpenChannel();


    public: // Methods from base classes

        /**
        * From CSatNotificationsBase Handles OpenChannel PCmd ISI message
        * @since NCP 5.0
        * @param aIsiMessage received ISI message
        * @return none
        */
        void MessageReceived( const TIsiReceiveC& aIsiMessage );

        /**
        * From CSatNotificationsBase Notification request received from
        * ETel client
        * @since Series 60 Series60_2.6
        * @param aReqHandle request handle from ETel
        * @param aDataPtr pointer to parameter class
        * @return none
        */
        void Notify( const TTsyReqHandle aReqHandle, TDes8* aDataPtr = NULL );

        /**
        * From CSatNotificationsBase Handles the OpenChannel terminal response
        * @since Series 60 Series60_2.6
        * @param aRsp pointer to a descriptor containing the response structure
        * @return status
        */
        TInt TerminalResponse( TDes8* aRsp );

        /**
        * From CSatNotificationsBase Handles Bearer type and parameters data
        * @since PP 5.2
        * @param aBearerDescriptionTlv tlv containing specific data
        * @param aBearer bearer structure
        * @return none
        */
        void GetBearerTypeAndParams( CTlv& aBearerDescriptionTlv,
            RSat::TBearer& aBearer );

        /**
        * From CSatNotificationsBase Handles SIM/ME Interface transport level and
        * Data Destination Address specific data
        * @since PP 5.2
        * @param aBerTlv tlv containing specific data
        * @param aSimMeInterface SIM/ME interface structure
        * @param aDestinationAddress Data Destination address structure
        * @return KErrNone or KErrNotFound
        */
        TInt SimMeInterfaceAndDataDestinationAddress( CBerTlv& aBerTlv,
            RSat::TSimMeInterface& aSimMeInterface,
            RSat::TOtherAddress& aDestinationAddress );

        /**
        * From CSatNotificationsBase Handles Local Address specific data
        * @since PP 5.2
        * @param aBerTlv tlv containing specific data
        * @param aLocalAddress Local address structure
        * @return none
        */
        void LocalAddress( CBerTlv& aBerTlv,
            RSat::TOtherAddress& aLocalAddress );

        /**
        * From CSatNotificationsBase Handles the OpenChannel GPRS Bearer
        * specific data
        * @since PP 5.2
        * @param aBerTlv tlv containing Bearer specific data
        * @param RSat::TOpenGprsChannelV4& aOpenGprsChannelV4 data
        * @return none
        */
        void GprsBearerSpecific( CBerTlv& aBerTlv,
            RSat::TOpenGprsChannelV4& aOpenGprsChannelV4 );

    private: // Data

        // Packages allocated by ETel:

        // Base class
        RSat::TOpenChannelBaseV2Pckg*       iOpenBaseChannelV2Pckg;

        // Open Cs Channel package store
        RSat::TOpenCsChannelV2Pckg*         iOpenCsChannelV2Pckg;

        // Open Gprs Channel package store
        RSat::TOpenGprsChannelV4Pckg*       iOpenGprsChannelV4Pckg;

        // Open Local Link Channel package store
        RSat::TOpenLocalLinksChannelV2Pckg* iOpenLocalLinksChannelV2Pckg;
    };


/**
*  SAT GetChannelStatus notification class.
*  Instantiated by CSatMessaging class.
*  This PCmd instructs the SAT to tell the SIM about a channel status specified
*  in the PCmd.
*
*  @lib SIMATKTSY.lib
*  @since Series 60 Series60_3.0
*/
class CSatNotifyGetChannelStatus : public CSatNotificationsBase
    {
    public:  // Constructors and destructor

        /**
        * C++ default constructor.
        * @since NCP 5.0
        * @param aSatMessHandler pointer to satmessagehandler class
        * @param aSatMessaging pointer to satmessaging class
        */
        CSatNotifyGetChannelStatus( CSatMessHandler* aSatMessHandler,
            CTsySatMessaging* aSatMessaging );

        /**
        * Destructor.
        */
        ~CSatNotifyGetChannelStatus();


    public: // Methods from base classes

        /**
        * From CSatNotificationsBase Handles GetChannelStatus PCmd ISI message
        * @since NCP 5.0
        * @param aIsiMessage received ISI message
        * @return none
        */
        void MessageReceived( const TIsiReceiveC& aIsiMessage );

        /**
        * From CSatNotificationsBase Notification request received from
        * ETel client
        * @since Series 60 Series60_2.6
        * @param aReqHandle request handle from ETel
        * @param aDataPtr pointer to parameter class
        * @return none
        */
        void Notify( const TTsyReqHandle aReqHandle, TDes8* aDataPtr = NULL );

        /**
        * From CSatNotificationsBase Handles the GetChannelStatus
        * terminal response
        * @since Series 60 Series60_2.6
        * @param aRsp pointer to a descriptor containing the response structure
        * @return status
        */
        TInt TerminalResponse( TDes8* aRsp );


    private: // Data

        // Package allocated by an Etel client
        RSat::TGetChannelStatusV2Pckg* iGetChannelStatusRspV2Pckg;
    };


/**
*  SAT CloseChannel notification class.
*  Instantiated by CSatMessaging class.
*  This PCmd instructs the SAT to close either GPRS channel, or a CSD channel
*  or a local link channel, exclusively.
*
*  @lib SIMATKTSY.lib
*  @since Series 60 Series60_3.0
*/
class CSatNotifyCloseChannel : public CSatNotificationsBase
    {
    public:  // Constructors and destructor

        /**
        * C++ default constructor.
        * @since NCP 5.0
        * @param aSatMessHandler pointer to satmessagehandler class
        * @param aSatMessaging pointer to satmessaging class
        */
        CSatNotifyCloseChannel( CSatMessHandler* aSatMessHandler,
            CTsySatMessaging* aSatMessaging );

        /**
        * Destructor.
        */
        ~CSatNotifyCloseChannel();


    public: // Methods from base classes

        /**
        * From CSatNotificationsBase Handles CloseChannel PCmd ISI message
        * @since NCP 5.0
        * @param aIsiMessage received ISI message
        * @return none
        */
        void MessageReceived( const TIsiReceiveC& aIsiMessage );

        /**
        * From CSatNotificationsBase Notification request received from
        * ETel client
        * @since Series 60 Series60_2.6
        * @param aReqHandle request handle from ETel
        * @param aDataPtr pointer to parameter class
        * @return none
        */
        void Notify( const TTsyReqHandle aReqHandle, TDes8* aDataPtr = NULL );

        /**
        * From CSatNotificationsBase Handles the CloseChannel terminal response
        * @since Series 60 Series60_2.6
        * @param aRsp pointer to a descriptor containing the response structure
        * @return status
        */
        TInt TerminalResponse( TDes8* aRsp );


    private: // Data

        // Package allocated by an Etel client
        RSat::TCloseChannelV2Pckg*  iCloseChannelRspV2Pckg;
    };


/**
*  SAT SendData notification class.
*  Instantiated by CSatMessaging class.
*  This PCmd instructs the SAT to send data through either GPRS channel,
*  or a CSD channel or a local link channel, exclusively.
*
*  @lib SIMATKTSY.lib
*  @since Series 60 Series60_3.0
*/
class CSatNotifySendData : public CSatNotificationsBase
    {
    public:  // Constructors and destructor

        /**
        * C++ default constructor.
        * @since NCP 5.0
        * @param aSatMessHandler pointer to satmessagehandler class
        * @param aSatMessaging pointer to satmessaging class
        */
        CSatNotifySendData( CSatMessHandler* aSatMessHandler,
            CTsySatMessaging* aSatMessaging );

        /**
        * Destructor.
        */
        ~CSatNotifySendData();


    public: // Methods from base classes

        /**
        * From CSatNotificationsBase Handles SendData PCmd ISI message
        * @since NCP 5.0
        * @param aIsiMessage received ISI message
        * @return none
        */
        void MessageReceived( const TIsiReceiveC& aIsiMessage );

        /**
        * From CSatNotificationsBase Notification request received from
        * ETel client
        * @since Series 60 Series60_2.6
        * @param aReqHandle request handle from ETel
        * @param aDataPtr pointer to parameter class
        * @return none
        */
        void Notify( const TTsyReqHandle aReqHandle, TDes8* aDataPtr = NULL );

        /**
        * From CSatNotificationsBase Handles the SendData terminal response
        * @since Series 60 Series60_2.6
        * @param aRsp pointer to a descriptor containing the response structure
        * @return status
        */
        TInt TerminalResponse( TDes8* aRsp );


    private: // Data

        // Package allocated by an Etel client
        RSat::TSendDataV2Pckg*  iSendDataRspV2Pckg;
    };


/**
*  SAT ReceiveData notification class.
*  Instantiated by CSatMessaging class.
*  This PCmd instructs the SAT to receive data either from GPRS channel,
*  or a CSD channel or a local link channel, exclusively.
*
*  @lib SIMATKTSY.lib
*  @since Series 60 Series60_3.0
*/
class CSatNotifyReceiveData : public CSatNotificationsBase
    {
    public:  // Constructors and destructor

        /**
        * C++ default constructor.
        * @since NCP 5.0
        * @param aSatMessHandler pointer to satmessagehandler class
        * @param aSatMessaging pointer to satmessaging class
        */
        CSatNotifyReceiveData( CSatMessHandler* aSatMessHandler,
            CTsySatMessaging* aSatMessaging );

        /**
        * Destructor.
        */
        ~CSatNotifyReceiveData();


    public: // Methods from base classes

        /**
        * From CSatNotificationsBase Handles ReceiveData PCmd ISI message
        * @since NCP 5.0
        * @param aIsiMessage received ISI message
        * @return none
        */
        void MessageReceived( const TIsiReceiveC& aIsiMessage );

        /**
        * From CSatNotificationsBase Notification request received from
        * ETel client
        * @since Series 60 Series60_2.6
        * @param aReqHandle request handle from ETel
        * @param aDataPtr pointer to parameter class
        * @return none
        */
        void Notify( const TTsyReqHandle aReqHandle, TDes8* aDataPtr = NULL );

        /**
        * From CSatNotificationsBase Handles the ReceiveData terminal response
        * @since Series 60 Series60_2.6
        * @param aRsp pointer to a descriptor containing the response structure
        * @return status
        */
        TInt TerminalResponse( TDes8* aRsp );


    private: // Data

        // Package allocated by an Etel client
        RSat::TReceiveDataV2Pckg*   iReceiveDataRspV2Pckg;
    };


/**
*  SAT MoSmControlRequest notification class.
*  Instantiated by CSatMessaging class.
*  MoSmControlRequest is not treated as a proactive command in Series60.
*  The method CompleteNotification is used to notify an Etel SAT client
*  that the SIM Applet has provided an alpha identifier in response to
*  a CallControl envelope. The class CSatMoSmsCtrl implements the MoSmControl
*  functionality.
*
*  @lib SIMATKTSY.lib
*  @since Series 60 Series60_2.6
*/
class CSatNotifyMoSmControlRequest : public CSatNotificationsBase
    {
    public:  // Constructors and destructor

        /**
        * C++ default constructor.
        * @since NCP 5.0
        * @param aSatMessHandler pointer to satmessagehandler class
        * @param aSatMessaging pointer to satmessaging class
        */
        CSatNotifyMoSmControlRequest( CSatMessHandler* aSatMessHandler,
            CTsySatMessaging* aSatMessaging );

        /**
        * Destructor.
        */
        ~CSatNotifyMoSmControlRequest();


    public: // Methods from base classes

        /**
        * From CSatNotificationsBase Handles MoSmControlRequest PCmd ISI message
        * Not in use.
        * @since NCP 5.0
        * @param aIsiMessage received ISI message
        * @return none
        */
        void MessageReceived( const TIsiReceiveC& /*aIsiMessage*/ );

        /**
        * From CSatNotificationsBase Notification request received from
        * ETel client
        * @since Series 60 Series60_2.6
        * @param aReqHandle request handle from ETel
        * @param aDataPtr pointer to parameter class
        * @return none
        */
        void Notify( const TTsyReqHandle aReqHandle, TDes8* aDataPtr = NULL );

        /**
        * From CSatNotificationsBase Notification completion
        * @since Series 60 Series60_2.6
        * @param aAlphaId alpha identifier in Etel SAT format
        * @param aResult call control result in Etel SAT format
        * @return none
        */
        void CompleteNotification( TDesC& aAlphaId,
            RSat::TControlResult aResult );


    private: // Data

        // Package allocated by an Etel client
        RSat::TMoSmControlV1Pckg*   iMoSmControlV1Pckg;
    };

#endif // SATNOTIFICATIONS_H

// End of File
