telephonyserverplugins/simatktsy/src/csateventdownloadtsy.cpp
changeset 0 3553901f7fa8
child 19 630d2f34d719
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/simatktsy/src/csateventdownloadtsy.cpp	Tue Feb 02 01:41:59 2010 +0200
@@ -0,0 +1,931 @@
+// Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// Name        : CSatEventDownloadTsy.cpp
+// Part of     : Common SIM ATK TSY / commonsimatktsy
+// EventDownload-related functionality of Sat Tsy
+// Version     : 1.0
+//
+
+
+
+#include <satcs.h>                  // Etel SAT IPC definitions
+#include "CSatDataPackage.h"        // Parameter packing 
+#include "CSatEventDownloadTsy.h"   // Class header
+#include "CSatTsy.h"                // Sat Tsy class
+#include "cmmmessagemanagerbase.h"  // Message manager class for forwarding req.
+#include "TfLogger.h"               // For TFLOGSTRING
+#include "CBerTlv.h"                // Ber Tlv
+#include "TTlv.h"					// TTlv class
+#include "MSatTsy_IPCDefs.h"        // Sat Tsy internal request types
+#include "CSatNotificationsTsy.h"  	// KTonNpiBit8
+
+// -----------------------------------------------------------------------------
+// CSatEventDownloadTsy::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CSatEventDownloadTsy* CSatEventDownloadTsy::NewL
+        (    
+        CSatTsy* aSatTsy  
+        )
+    { 
+    TFLOGSTRING( "CSAT: CSatEventDownloadTsy::NewL" );
+    CSatEventDownloadTsy* const satEventDownloadTsy = 
+        new ( ELeave ) CSatEventDownloadTsy();
+    CleanupStack::PushL( satEventDownloadTsy );
+    satEventDownloadTsy->iSatTsy = aSatTsy;
+    satEventDownloadTsy->ConstructL();
+    CleanupStack::Pop( satEventDownloadTsy );
+    TFLOGSTRING( "CSAT: CSatEventDownloadTsy::NewL, end of method" );
+    return satEventDownloadTsy;
+    }
+
+// -----------------------------------------------------------------------------
+// CSatEventDownloadTsy::~CSatEventDownloadTsy
+// Destructor
+// -----------------------------------------------------------------------------
+//    
+CSatEventDownloadTsy::~CSatEventDownloadTsy
+        (    
+        void   
+        )
+    {
+    TFLOGSTRING( "CSAT: CSatEventDownloadTsy::~CSatEventDownloadTsy" );
+    // Unregister.
+    iSatTsy->MessageManager()->RegisterTsyObject(
+		CMmMessageManagerBase::ESatEventDownloadTsyObjType, NULL );
+    }
+
+// -----------------------------------------------------------------------------
+// CSatEventDownloadTsy::CSatEventDownloadTsy
+// C++ constructor
+// -----------------------------------------------------------------------------
+//
+CSatEventDownloadTsy::CSatEventDownloadTsy
+        (
+        void
+        )
+    {
+    TFLOGSTRING( "CSAT: CSatEventDownloadTsy::CSatEventDownloadTsy" );
+    }
+
+// -----------------------------------------------------------------------------
+// CSatEventDownloadTsy::ConstructL
+// Symbian 2nd phase constructor. Initialises internal attributes.
+// -----------------------------------------------------------------------------
+//    
+void CSatEventDownloadTsy::ConstructL
+        (    
+        void
+        )
+    {
+    TFLOGSTRING( "CSAT: CSatEventDownloadTsy::ConstructL" );
+    // Register .
+    iSatTsy->MessageManager()->RegisterTsyObject(
+		CMmMessageManagerBase::ESatEventDownloadTsyObjType, this );
+	iSetUpCallOngoing = EFalse; 
+	iForceLocationStatusEnvelope = EFalse;
+    }
+    
+// -----------------------------------------------------------------------------
+// CSatEventDownloadTsy::DoExtFuncL
+// Handles event download IPC requests originating from ETel
+// -----------------------------------------------------------------------------
+//
+TInt CSatEventDownloadTsy::DoExtFuncL
+        (
+        const TTsyReqHandle aTsyReqHandle, 
+        const TInt /*aIpc*/, 
+        const TDataPackage& aPackage 
+        )
+    {
+    TFLOGSTRING2( "CSAT: CSatEventDownloadTsy::DoExtFuncL\
+        . Handle:%d", aTsyReqHandle );
+
+    TInt ret ( KErrNotSupported );
+
+    // Get parameters (eventList, eventInfo) from package
+    RSat::TEventDownloadBaseV2Pckg* eventInfoPckg =
+        (RSat::TEventDownloadBaseV2Pckg*)aPackage.Des2n();
+    RSat::TEventDownloadBaseV2& eventInfo = (*eventInfoPckg)();
+    RSat::TEventList& singleEvent = *(RSat::TEventList*)aPackage.Ptr1();
+
+    if ( RSat::KSatV2 == eventInfo.ExtensionId() )
+        {
+        // Branch and do whatever is necessary according to the event type..
+        switch ( singleEvent )
+            {
+            case RSat::KUserActivity:
+                {
+                ret = CreateUserActivityEnvelopeL();
+                break;
+                }
+            case RSat::KIdleScreenAvailable:
+                {
+                ret = CreateIdleScreenAvailableEnvelopeL();
+                break;
+                }
+            case RSat::KBrowserTermination:
+                {
+                ret = CreateBrowserTerminationEnvelopeL(
+                    ( ( RSat::TBrowserTerminationEventV2* )&eventInfo )->iCause );
+                break;
+                }
+            case RSat::KLanguageSelection:
+                {
+                ret = CreateLanguageSelectionEnvelopeL(
+                    ( ( RSat::TLanguageSelectionEventV2* )&eventInfo )->iLanguage );
+                break;
+                }
+            case RSat::KDataAvailable:
+            	{            	
+                // DataAvailable will trigger a ReceiveData PCmd
+                ret = CreateDataAvailableEnvelopeL(
+                    ( ( RSat::TDataAvailableEventV2* )&eventInfo )->iStatus,
+                    ( ( RSat::TDataAvailableEventV2* )&eventInfo )->iLength );
+                break;
+            	}
+            case RSat::KChannelStatus:
+            	{
+                // When the ME detects one of the following changes:
+                // -	a link is error, or
+                // -	any other error,
+                // which is not resulting from the execution of a proactive 
+                // command, the ME shall inform the SIM that this has occurred.
+                ret = CreateChannelStatusEnvelopeL(
+                    ( ( RSat::TChannelStatusEventV2* )&eventInfo )->iStatus );
+                break;
+            	}
+            // TSY is responsible for these events
+            // but they are not reported to ETel
+            //case RSat::KMTCall:
+            //case RSat::KCallConnected:
+            //case RSat::KCallDisconnected:
+            //case RSat::KLocationStatus:
+            //case RSat::KAccessTechnologyChange:
+
+            // Events that can be reported by client, but are not supported by TSY
+            //case RSat::KCardReaderStatus:
+            //case RSat::KDisplayParamsChanges:
+            //case RSat::KLocalConnection:
+            default:
+                {
+                ret = KErrNotSupported;
+                TFLOGSTRING( "CSAT: CSatEventDownloadTsy::DoExtFuncL, not supported" );
+                break;
+                }
+            } // End switch  
+
+        } // End if extensionid.
+
+    // Complete the request
+    iSatTsy->ReqCompleted( aTsyReqHandle, ret );
+
+    return KErrNone;
+    }
+    
+// -----------------------------------------------------------------------------
+// CSatEventDownloadTsy::SetUpEventList
+// Sets up event list 
+// -----------------------------------------------------------------------------
+//  
+void CSatEventDownloadTsy::SetUpEventList
+        (
+        TUint32 aEvents        // Bit mask of enabled events
+        )
+    {
+    TFLOGSTRING( "CSAT: CSatEventDownloadTsy::SetUpEventList" );
+    iEventList.SetEventList( aEvents );
+        
+    // Force sending of envelope at least once, if location status event set
+    if ( iEventList.IsEnabled( RSat::KLocationStatus ) )
+        {
+        iForceLocationStatusEnvelope = ETrue;
+        }
+    // Reset flag if removal of event list or not location status event
+    else
+        {
+        iForceLocationStatusEnvelope = EFalse;
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CSatEventDownloadTsy::SetSetUpCallStatus
+// Set SetUpCall status
+// -----------------------------------------------------------------------------
+//
+void CSatEventDownloadTsy::SetSetUpCallStatus
+        (
+        const TBool aStatus // SetUpCall status
+        )
+    {
+    TFLOGSTRING( "CSAT: CSatEventDownloadTsy::SetSetUpCallStatus" );
+    iSetUpCallOngoing = aStatus;
+    }
+
+// -----------------------------------------------------------------------------
+// CSatEventDownloadTsy::CancelService
+// Since event download is served at once 
+// we don't have to do anything here
+// -----------------------------------------------------------------------------
+//
+TInt CSatEventDownloadTsy::CancelService
+        (
+        const TInt /*aIpc*/,
+        const TTsyReqHandle /*aTsyReqHandle*/
+        )
+    {
+    TFLOGSTRING( "CSAT: CSatEventDownloadTsy::CancelService" );
+    // Since event download is served at once, there's anything to do here
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// CSatEventDownloadTsy::CompleteMTCallL
+// Creates MT call envelope to NAA
+// Not supported yet
+// -----------------------------------------------------------------------------
+//
+TInt CSatEventDownloadTsy::CompleteMTCallL
+        (
+        const CSatDataPackage* aDataPackage
+        )
+    {
+    TFLOGSTRING( "CSAT: CSatEventDownloadTsy::CompleteMTCallL" );    
+    TInt ret( KErrNone );
+
+    if ( iEventList.IsEnabled( RSat::KMTCall ) )
+        {
+		TMTCallEnvelope* mTCallEnvelope;
+    	aDataPackage->UnPackData( &mTCallEnvelope );        
+        // Create envelope
+        TTlv envelope;
+        envelope.Begin  ( KBerTlvEventDownloadTag );
+
+        // Event list
+        envelope.AddTag ( KTlvEventListTag );
+        envelope.AddByte( KEventMTCall );
+
+        // Device identities
+        envelope.AddTag ( KTlvDeviceIdentityTag );
+        envelope.AddByte( KNetwork );
+        envelope.AddByte( KSim );
+
+        // Transaction identifier
+        envelope.AddTag ( KTlvTransactionIdentifierTag );
+        envelope.AddByte( mTCallEnvelope->iCmdNumber );
+
+        if ( NULL != mTCallEnvelope->iTONandNPI )
+            {
+            // Bits 1 - 4 are NPI, bits 5 - 7 TON
+            // Bit 8 always 1 -> OR'd to be sure of that
+            // See 3GPP TS 11.11 10.5.1
+            // and 3GPP 04.08 figure 10.5.91
+            mTCallEnvelope->iTONandNPI |= KTonNpiBit8;
+
+            envelope.AddTag ( KTlvAddressTag );
+            envelope.AddByte( mTCallEnvelope->iTONandNPI );
+
+            if ( mTCallEnvelope->iDiallingNumber.Length() )
+                {
+                // Optional dialling number
+                envelope.AddData( mTCallEnvelope->iDiallingNumber );
+                }
+            else
+            	{
+            	TFLOGSTRING( "CSAT: CSatEventDownloadTsy::CompleteMTCallL,\
+            	    Dialling number missing" );
+            	}
+            }            
+		else
+        	{	
+        	TFLOGSTRING( "CSAT: CSatEventDownloadTsy::CompleteMTCallL,\
+            	TON and NPI missing" );
+        	}
+        	
+        // If subaddress present
+        if ( mTCallEnvelope->iCalledPartySubAddress.Length() )
+            {
+            // Optional called party subaddress
+            envelope.AddTag( KTlvSubaddressTag );
+            envelope.AddData( mTCallEnvelope->iCalledPartySubAddress );
+            }
+        else
+        	{
+        	TFLOGSTRING( "CSAT: CSatEventDownloadTsy::CompleteMTCallL,\
+            	Subaddress missing" );
+        	}
+
+        // Prepare data
+        TPtrC8 data = envelope.End();
+        // Pack data
+        CSatDataPackage dataPackage;
+	    dataPackage.PackData( &data );
+        // Forward request to the DOS
+        ret = iSatTsy->MessageManager()->HandleRequestL( 
+		    ESatEventDownload, &dataPackage );
+        }
+	else
+    	{
+        TFLOGSTRING( "CSAT: CSatEventDownloadTsy::CompleteMTCallL\
+            Event not enabled" );
+        }
+
+    return ret;
+    }
+
+// -----------------------------------------------------------------------------
+// CSatEventDownloadTsy::CompleteCallConnectedL
+// Creates Call connected envelope to NAA
+// -----------------------------------------------------------------------------
+//
+TInt CSatEventDownloadTsy::CompleteCallConnectedL
+        (
+        const CSatDataPackage* aDataPackage
+        )
+    {
+    TFLOGSTRING( "CSAT: CSatEventDownloadTsy::CompleteCallConnectedL" );    
+    TInt ret = KErrNone;
+    
+    if ( iEventList.IsEnabled( RSat::KCallConnected ) )
+        {
+	    TUint8 cmdNumber;
+	    TBool nearEnd;
+	    aDataPackage->UnPackData( cmdNumber, nearEnd );
+	    
+	    TFLOGSTRING2( "CSAT: CSatEventDownloadTsy::CompleteCallConnectedL \
+	        ( cmdNumber=%d )", ( TInt )cmdNumber ); 
+	               
+        // Create envelope
+        TTlv envelope;
+        envelope.Begin( KBerTlvEventDownloadTag );
+
+        // Event list
+        envelope.AddTag( KTlvEventListTag );
+        envelope.AddByte( KEventCallConnected );
+        // Device identities
+        envelope.AddTag( KTlvDeviceIdentityTag );
+        envelope.AddByte( nearEnd ? KMe : KNetwork );
+        envelope.AddByte( KSim );
+        // Transaction identifier
+        envelope.AddTag( KTlvTransactionIdentifierTag );
+        envelope.AddByte( cmdNumber );
+        // Prepare data
+        TPtrC8 data = envelope.End();
+        // Pack data
+        CSatDataPackage dataPackage;
+	    dataPackage.PackData( &data );
+        // Check if the call is SetUpCall originated and it's an MO call
+        if ( iSetUpCallOngoing && !nearEnd )
+            {
+            // Forward data to CNotifySetUpCall it will be send after a 
+            // terminal resp of set up call.  
+            iSatTsy->StoreCallConnectedEvent( envelope.End() );
+            }
+        else
+            {
+            // Forward request to the DOS
+             ret = iSatTsy->MessageManager()->HandleRequestL( 
+		        ESatEventDownload, &dataPackage );
+            }
+        }
+    else
+        {
+        TFLOGSTRING( "CSAT: CSatEventDownloadTsy::CompleteCallConnectedL,\
+            Event not enabled" );
+        }
+    return ret;
+    }
+
+// -----------------------------------------------------------------------------
+// CSatEventDownloadTsy::CompleteCallDisconnectedL
+// Creates Call disconnected envelope to NAA
+// -----------------------------------------------------------------------------
+//
+TInt CSatEventDownloadTsy::CompleteCallDisconnectedL
+        (
+        const CSatDataPackage* aDataPackage
+        )
+    {
+    TFLOGSTRING( "CSAT: CSatEventDownloadTsy::CompleteCallDisconnectedL" );
+    TInt ret = KErrNone;
+
+    if ( iEventList.IsEnabled( RSat::KCallDisconnected ) )
+        {
+	    TCallDisconnectedEnvelope* callDisconnectedEnvelope;
+    	// Unpack data
+    	aDataPackage->UnPackData( &callDisconnectedEnvelope );
+    	// Unpack structure 
+    	TUint8 cmdNumber = callDisconnectedEnvelope->iCmdNumber;
+    	TBool nearEnd = callDisconnectedEnvelope->iNearEnd;
+    	TBool causeGiven = callDisconnectedEnvelope->iCauseGiven;
+    	const TDesC8& cause = callDisconnectedEnvelope->iCause; 
+    	TFLOGSTRING2( "CSAT: CSatEventDownloadTsy::CompleteCallDisconnectedL \
+        	( cmdNumber=%d )", ( TInt )cmdNumber );    	       
+        // Create envelope
+        TTlv envelope;
+        envelope.Begin  ( KBerTlvEventDownloadTag );
+        // Event list
+        envelope.AddTag ( KTlvEventListTag );
+        envelope.AddByte( KEventCallDisconnected );
+        // Device identities
+        envelope.AddTag ( KTlvDeviceIdentityTag );
+        envelope.AddByte( nearEnd ? KMe : KNetwork );
+        envelope.AddByte( KSim );
+        // Transaction identifier
+        envelope.AddTag ( KTlvTransactionIdentifierTag );
+        envelope.AddByte( cmdNumber );
+        // Cause
+        if ( causeGiven )
+            {
+            envelope.AddTag ( KTlvCauseTag );
+            envelope.AddData( cause );
+            }
+        else
+            {
+            TFLOGSTRING( "CSAT: CSatEventDownloadTsy::\
+                CompleteCallDisconnectedL, cause not given" );
+            }
+        // Prepare data
+        TPtrC8 data = envelope.End();
+        // Pack data
+        CSatDataPackage dataPackage;
+	    dataPackage.PackData( &data );
+        // Forward request to the DOS
+        ret = iSatTsy->MessageManager()->HandleRequestL( 
+		    ESatEventDownload, &dataPackage );
+        }
+    else
+        {
+        TFLOGSTRING( "CSAT: CSatEventDownloadTsy::CompleteCallDisconnectedL,\
+            Event not enabled" );
+        }
+    return ret;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CSatEventDownloadTsy::CompleteLocationStatusL
+// Creates Location status envelope to NAA
+// -----------------------------------------------------------------------------
+//
+TInt CSatEventDownloadTsy::CompleteLocationStatusL
+        (
+        const CSatDataPackage* aDataPackage
+        )
+	{
+	TFLOGSTRING( "CSAT: CSatEventDownloadTsy::CompleteLocationStatusL" );	       	
+    TInt ret( KErrNone );
+
+    if ( iEventList.IsEnabled( RSat::KLocationStatus ) )
+        {
+	    CSatTsy::TLocationStatusEnvelope* locationStatusEnvelope;
+	    // Unpack data
+	    aDataPackage->UnPackData( &locationStatusEnvelope );
+	    // Unpack structure 
+	    TUint8 locationStatus = locationStatusEnvelope->iLocationStatus;
+	    TBuf8<KCountryCodeLength> operatorCode = 
+	        locationStatusEnvelope->iCountryCode;
+	    TUint16 locationAreaCode = locationStatusEnvelope->iLocationAreaCode;
+	    TUint16 cellId = locationStatusEnvelope->iCellId;
+
+	    TFLOGSTRING2( "CSAT: CSatEventDownloadTsy::CompleteLocationStatusL \
+	        ( locationStatus=%d )", ( TInt )locationStatus );
+                
+        // Send location status envelope only if there
+        // have been changes or we're sending first
+        // envelope after setup event list pcmd
+        if ( ( iLocationStatus != locationStatus ) ||
+             ( iOperatorCode   != operatorCode ) ||
+             ( iLocationaAreaCode != locationAreaCode )||
+             ( iCellId != cellId ) || 
+             iForceLocationStatusEnvelope ) 
+            {
+            TFLOGSTRING( "CSAT: CSatEventDownload::\
+                CompleteLocationStatusEnvelopeL, -- saving" );
+
+            // Cache values
+            iLocationStatus = locationStatus;
+            iOperatorCode = operatorCode;
+            iLocationaAreaCode  = locationAreaCode;
+            iCellId = cellId;
+
+            // Create envelope
+            TTlv envelope;
+            envelope.Begin  ( KBerTlvEventDownloadTag );
+            // Event list
+            envelope.AddTag ( KTlvEventListTag );
+            envelope.AddByte( KEventLocationStatus );
+            // Device identities
+            envelope.AddTag ( KTlvDeviceIdentityTag );
+            envelope.AddByte( KMe );
+            envelope.AddByte( KSim );
+            // Locationstatus
+            envelope.AddTag ( KTlvLocationStatusTag );
+            envelope.AddByte( TUint8(locationStatus) );
+
+            // Location information, this is included only if status indicates 
+            // normal service
+            if ( KLocationStatusNormalService == locationStatus )
+                {
+                TFLOGSTRING( "CSAT: CSatEventDownload::CompleteLocationStatusEnvelopeL\
+                    -- sending" );
+                envelope.AddTag ( KTlvLocationInformationTag );
+                envelope.AddData( operatorCode );        
+                // Mobile country & network codes
+                envelope.AddByte( TUint8( locationAreaCode >> 8 ) );// Hi byte
+                envelope.AddByte( TUint8( locationAreaCode >> 0 ) );// Lo byte
+                envelope.AddByte( TUint8( cellId >> 8 ) );          // Hi byte
+                envelope.AddByte( TUint8( cellId >> 0 ) );          // Lo byte
+                }
+            else
+                {
+                // Do nothing
+                }
+            
+            // Reset the flag
+            iForceLocationStatusEnvelope = EFalse;
+
+            // Prepare data
+            TPtrC8 data = envelope.End();
+            // Pack data
+            CSatDataPackage dataPackage;
+	        dataPackage.PackData( &data );
+            // Forward request to the DOS
+            ret = iSatTsy->MessageManager()->HandleRequestL( 
+		        ESatEventDownload, &dataPackage );
+            }
+        else
+            {
+            // Do nothing
+            }
+        }
+    else
+        {
+        TFLOGSTRING( "CSAT: CSatEventDownloadTsy::\
+            CompleteLocationStatusEnvelopeL, Event not enabled" );
+        }             
+
+    return ret;
+    }
+
+// -----------------------------------------------------------------------------
+// CSatEventDownloadTsy::CompleteAccessTechnologyChangeL
+// Creates access technology change envelope to NAA
+// -----------------------------------------------------------------------------
+//
+TInt CSatEventDownloadTsy::CompleteAccessTechnologyChangeL
+        (
+		const CSatDataPackage* aDataPackage
+        )
+    {
+    TFLOGSTRING( "CSAT: CSatEventDownloadTsy::\
+    		CompleteAccessTechnologyChangeEnvelopeL" );
+    TInt ret( KErrNone );
+
+    if ( iEventList.IsEnabled( RSat::KAccessTechnologyChange ) )
+        {
+	    TUint8 accTechChange; 
+		aDataPackage->UnPackData( accTechChange );        
+        // create envelope
+        TTlv envelope;
+        envelope.Begin  ( KBerTlvEventDownloadTag );
+
+        // event list
+        envelope.AddTag ( KTlvEventListTag );
+        envelope.AddByte( KEventAccessTechnologyChange );
+
+        // device identities
+        envelope.AddTag ( KTlvDeviceIdentityTag );
+        envelope.AddByte( KMe );
+        envelope.AddByte( KSim );
+
+        // channel status
+        envelope.AddTag( KTlvAccessTechnologyTag );
+        envelope.AddByte( accTechChange );
+        
+        // Prepare data
+        TPtrC8 data = envelope.End();
+        // Pack data
+        CSatDataPackage dataPackage;
+        dataPackage.PackData( &data );
+        // Forward request to the DOS
+        ret = iSatTsy->MessageManager()->HandleRequestL( 
+	        ESatEventDownload, &dataPackage );
+        }
+    else
+        {
+        TFLOGSTRING( "CSAT: CSatEventDownloadTsy::\
+            CompleteAccessTechnologyChangeL, Event not enabled" );
+        }        
+
+    return ret;
+    }
+// -----------------------------------------------------------------------------
+// CSatEventDownloadTsy::CreateUserActivityEnvelopeL
+// Send user activity envelope to NAA
+// -----------------------------------------------------------------------------
+//
+TInt CSatEventDownloadTsy::CreateUserActivityEnvelopeL
+        (
+        // None
+        )
+    {
+    TFLOGSTRING( "CSAT: CSatEventDownloadTsy::CreateUserActivityEnvelopeL" );
+    TInt ret = KErrNone;
+    if ( iEventList.IsEnabled( RSat::KUserActivity ) )
+        {
+        // Create envelope
+        TTlv envelope;
+        envelope.Begin  ( KBerTlvEventDownloadTag );
+        // Event list
+        envelope.AddTag ( KTlvEventListTag );
+        envelope.AddByte( KEventUserActivity );
+        // Device identities
+        envelope.AddTag ( KTlvDeviceIdentityTag );
+        envelope.AddByte( KMe );
+        envelope.AddByte( KSim );
+        // Prepare data
+        TPtrC8 data = envelope.End();
+        // Pack data
+        CSatDataPackage dataPackage;
+	    dataPackage.PackData( &data );
+        // Forward request to the DOS
+        ret = iSatTsy->MessageManager()->HandleRequestL( 
+		    ESatEventDownload, &dataPackage );
+        
+        // Remove from event list
+        iEventList.RemoveFromEventList( RSat::KUserActivity );
+        }
+    else
+        {
+        TFLOGSTRING( "CSAT: CSatEventDownloadTsy::CreateUserActivityEnvelopeL,\
+            Event not enabled" );
+        }
+    return ret;
+    }
+
+// -----------------------------------------------------------------------------
+// CSatEventDownloadTsy::CreateIdleScreenAvailableEnvelopeL
+// Send idle screen available envelope to NAA
+// -----------------------------------------------------------------------------
+//
+TInt CSatEventDownloadTsy::CreateIdleScreenAvailableEnvelopeL
+        (
+        // None
+        )
+    {
+    TFLOGSTRING("CSAT: CSatEventDownloadTsy::\
+        CreateIdleScreenAvailableEnvelopeL");
+    TInt ret = KErrNone;
+
+    if ( iEventList.IsEnabled( RSat::KIdleScreenAvailable ) )
+        {
+        // Create envelope
+        TTlv envelope;
+        envelope.Begin  ( KBerTlvEventDownloadTag );
+        // Event list
+        envelope.AddTag ( KTlvEventListTag );
+        envelope.AddByte( KEventIdleScreenAvailable );
+        // Device identities
+        envelope.AddTag ( KTlvDeviceIdentityTag );
+        envelope.AddByte( KDisplay );
+        envelope.AddByte( KSim );       
+        // Prepare data
+        TPtrC8 data = envelope.End();        
+        // Pack data
+        CSatDataPackage dataPackage;
+	    dataPackage.PackData( &data );
+        // Forward request to the DOS
+        ret = iSatTsy->MessageManager()->HandleRequestL( 
+		    ESatEventDownload, &dataPackage );
+        
+        if ( KErrNone == ret )
+            {
+            // Remove from event list
+            iEventList.RemoveFromEventList( RSat::KIdleScreenAvailable );
+            }
+        else
+            {
+            TFLOGSTRING("CSAT: CSatEventDownloadTsy::\
+                CreateIdleScreenAvailableEnvelopeL, Error in forwarding req.");
+            }
+        }
+    else
+        {
+        TFLOGSTRING( "CSAT: CSatEventDownloadTsy::\
+            CreateIdleScreenAvailableEnvelopeL, Event not enabled" );
+        }
+    return ret;
+    }
+
+// -----------------------------------------------------------------------------
+// CSatEventDownloadTsy::CreateBrowserTerminationEnvelopeL
+// Send browser termination envelope to NAA
+// -----------------------------------------------------------------------------
+//
+TInt CSatEventDownloadTsy::CreateBrowserTerminationEnvelopeL
+        (
+        const RSat::TBrowserTerminationCause aCause
+        )
+    {
+    TFLOGSTRING2( "CSAT: CSatEventDownloadTsy::\
+        CreateBrowserTerminationEnvelopeL, ( cause=%d )",( TInt )aCause );
+
+    TInt ret = KErrNone;
+
+    if ( iEventList.IsEnabled( RSat::KBrowserTermination ) )
+        {
+        // Create envelope
+        TTlv envelope;
+        envelope.Begin  ( KBerTlvEventDownloadTag );
+        // Event list
+        envelope.AddTag ( KTlvEventListTag );
+        envelope.AddByte( KEventBrowserTermination );
+        // Device identities
+        envelope.AddTag ( KTlvDeviceIdentityTag );
+        envelope.AddByte( KMe );
+        envelope.AddByte( KSim );
+        // Cause
+        envelope.AddTag( KTlvBrowserTerminationCauseTag );
+        envelope.AddByte(
+            TUint8( ( RSat::EUserTermination == aCause ) ?
+            KBrowserTerminationUser : KBrowserTerminationError ) );
+        // Prepare data
+        TPtrC8 data = envelope.End();        
+        // Pack data
+        CSatDataPackage dataPackage;
+	    dataPackage.PackData( &data );        
+        // Forward request to the DOS
+        ret = iSatTsy->MessageManager()->HandleRequestL( 
+		    ESatEventDownload, &dataPackage );
+        }
+    else
+        {
+        TFLOGSTRING( "CSAT: CSatEventDownloadTsy::\
+            CreateBrowserTerminationEnvelopeL, Event not enabled" );
+        }
+
+    return ret;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CSatEventDownloadTsy::CreateLanguageSelectionEnvelopeL
+// Send Language selection envelope to NAA
+// -----------------------------------------------------------------------------
+//
+TInt CSatEventDownloadTsy::CreateLanguageSelectionEnvelopeL
+        (
+        const TUint16 aLanguage
+        )
+    {
+    TFLOGSTRING2( "CSAT: CSatEventDownloadTsy::\
+        CreateLanguageSelectionEnvelopeL, (language=%d)", ( TInt )aLanguage );
+    
+    TInt ret = KErrNone;
+
+    if ( iEventList.IsEnabled(RSat::KLanguageSelection ) )
+        {
+        // Create envelope
+        TTlv envelope;
+        envelope.Begin  ( KBerTlvEventDownloadTag );
+        // Event list
+        envelope.AddTag ( KTlvEventListTag );
+        envelope.AddByte( KEventLanguageSelection );
+        // Device identities
+        envelope.AddTag ( KTlvDeviceIdentityTag );
+        envelope.AddByte( KMe );
+        envelope.AddByte( KSim );
+        // Language
+        envelope.AddTag( KTlvLanguageTag );
+        envelope.AddByte( TUint8( ( aLanguage >> 8 ) & 0x7f ) );// MSB
+        envelope.AddByte( TUint8( ( aLanguage >> 0 ) & 0x7f ) );// LSB    
+        // Prepare data
+        TPtrC8 data = envelope.End();        
+        // Pack data
+        CSatDataPackage dataPackage;
+	    dataPackage.PackData( &data );        
+        
+        // Forward request to the DOS
+        ret = iSatTsy->MessageManager()->HandleRequestL( 
+		    ESatEventDownload, &dataPackage );
+        }
+    else
+    	{
+        TFLOGSTRING( "CSAT: CSatEventDownloadTsy::\
+            CreateLanguageSelectionEnvelopeL, Event not enabled" );	
+    	}
+    return ret;
+    }
+
+// -----------------------------------------------------------------------------
+// CSatEventDownloadTsy::CreateDataAvailableEnvelopeL
+// Create data available envelope to NAA
+// -----------------------------------------------------------------------------
+//
+TInt CSatEventDownloadTsy::CreateDataAvailableEnvelopeL
+        (
+        const RSat::TChannelStatus aStatus,
+		const TInt8 aLength    
+        )
+    {
+    TFLOGSTRING("CSAT: CSatEventDownload::CreateDataAvailableEnvelopeL");
+
+    TInt ret = KErrNone;
+
+    if ( iEventList.IsEnabled( RSat::KDataAvailable ) )
+        {
+        // Create envelope
+        TTlv envelope;
+        envelope.Begin( KBerTlvEventDownloadTag );
+        // Event list
+        envelope.AddTag( KTlvEventListTag );
+        envelope.AddByte( KEventDataAvailable );
+        // Device identities
+        envelope.AddTag( KTlvDeviceIdentityTag );
+        envelope.AddByte( KMe );
+        envelope.AddByte( KSim );
+        // Channel status
+        envelope.AddTag( KTlvChannelStatusTag );
+        envelope.AddData( aStatus );
+        // Channel data length
+        envelope.AddTag( KTlvChannelDataLengthTag );
+        envelope.AddByte( aLength );
+        // Prepare data
+        TPtrC8 data = envelope.End();
+        // Pack data
+        CSatDataPackage dataPackage;
+	    dataPackage.PackData( &data );        
+        // Forward request to the DOS
+        ret = iSatTsy->MessageManager()->HandleRequestL( 
+		    ESatEventDownload, &dataPackage );
+        }
+    else
+    	{
+        TFLOGSTRING( "CSAT: CSatEventDownloadTsy::CreateDataAvailableEnvelopeL\
+            Event not enabled" );	
+    	}
+    return ret;
+    }
+
+// -----------------------------------------------------------------------------
+// CSatEventDownloadTsy::CreateChannelStatusEnvelopeL
+// Create channel status envelope to NAA
+// -----------------------------------------------------------------------------
+//
+TInt CSatEventDownloadTsy::CreateChannelStatusEnvelopeL
+        (
+        const RSat::TChannelStatus aStatus
+        )
+    {
+    TFLOGSTRING("CSAT: CSatEventDownloadTsy::CreateChannelStatusEnvelopeL");
+    
+    TInt ret( KErrNone );
+
+    if ( iEventList.IsEnabled( RSat::KChannelStatus ) )
+        {
+        // Create envelope
+        TTlv envelope;
+        envelope.Begin  ( KBerTlvEventDownloadTag );
+        // Event list
+        envelope.AddTag ( KTlvEventListTag );
+        envelope.AddByte( KEventChannelStatus );
+        // Device identities
+        envelope.AddTag ( KTlvDeviceIdentityTag );
+        envelope.AddByte( KMe );
+        envelope.AddByte( KSim );
+        // Channel status
+        envelope.AddTag( KTlvChannelStatusTag );
+        envelope.AddData( aStatus );   
+        // Prepare data
+        TPtrC8 data = envelope.End();        
+        // Pack data
+        CSatDataPackage dataPackage;
+	    dataPackage.PackData( &data );                
+        // Forward request to the DOS
+        ret = iSatTsy->MessageManager()->HandleRequestL( 
+		    ESatEventDownload, &dataPackage );
+        }
+    else
+    	{
+        TFLOGSTRING( "CSAT: CSatEventDownloadTsy::CreateChannelStatusEnvelopeL\
+            Event not enabled" );	
+    	}        
+
+    return ret;
+    }
+  
+//  End of File 
+