diff -r 000000000000 -r ff3b6d0fd310 satengine/SatServer/Engine/src/CSatEventMonitorContainer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/satengine/SatServer/Engine/src/CSatEventMonitorContainer.cpp Tue Feb 02 01:11:09 2010 +0200 @@ -0,0 +1,748 @@ +/* +* Copyright (c) 2002-2007 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: Container of event monitor classes +* +*/ + + + +// INCLUDE FILES +#include +#include +#include "MSatEventMonitor.h" +#include "MSatUtils.h" +#include "MSatBIPUtils.h" +#include "MSatSystemState.h" +#include "TSatEventMonitorFactory.h" +#include "CSatEventMonitorContainer.h" +//lint -e766 Used inside TRAP macro, lint misfunction. +#include "EnginePanic.h" +#include "TUSatAPI.h" +#include "SatSOpcodes.h" +#include "SatLog.h" + +// CONSTANTS +const TUint KLangTextSize( 2 ); + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CSatEventMonitorContainer::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CSatEventMonitorContainer* CSatEventMonitorContainer::NewL( + TUSatAPI& aUsatAPI, + MSatUtils& aSatUtils ) + { + LOG( SIMPLE, "SATENGINE: CSatEventMonitorContainer::NewL calling" ) + + CSatEventMonitorContainer* self = + new( ELeave )CSatEventMonitorContainer( aUsatAPI, aSatUtils ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( /* self */ ); + + LOG( SIMPLE, "SATENGINE: CSatEventMonitorContainer::NewL exiting" ) + return self; + } + +// Destructor +CSatEventMonitorContainer::~CSatEventMonitorContainer() + { + LOG( SIMPLE, "SATENGINE: CSatEventMonitorContainer::\ + ~CSatEventMonitorContainer calling" ) + + iEventMonitors = NULL; + + LOG( SIMPLE, "SATENGINE: CSatEventMonitorContainer::\ + ~CSatEventMonitorContainer exiting" ) + } + +// ----------------------------------------------------------------------------- +// CSatEventMonitorContainer::Event +// From MSatEventObserver +// ----------------------------------------------------------------------------- +// +void CSatEventMonitorContainer::Event( TInt aEvent ) + { + LOG( SIMPLE, "SATENGINE: CSatEventMonitorContainer::Event calling" ) + + //lint -e{961} else block meaningless, event handled elsewhere. + if ( MSatUtils::EBipCommandExecuting == aEvent ) + { + LOG( SIMPLE, "EventMonitor: BIP Command Executing" ) + iBipExecuting = ETrue; + } + else if ( MSatUtils::EBipCommandDoneExecuting == aEvent ) + { + LOG( SIMPLE, "EventMonitor: BIP Command NOT executing" ) + iBipExecuting = EFalse; + + if ( iEventPending ) + { + iEventPending = EFalse; + LOG( SIMPLE, "EventMonitor: Executing pending envelope" ) + EventDownload( iPendingEvent, iPendingFirstArg, iPendingSecondArg ); + } + } + + LOG( SIMPLE, "SATENGINE: CSatEventMonitorContainer::Event exiting" ) + } + +// ----------------------------------------------------------------------------- +// CSatEventMonitorContainer::SetUpEventMonitors +// Updates all event monitors in list. +// ----------------------------------------------------------------------------- +// +TInt CSatEventMonitorContainer::SetUpEventMonitors( TUint aEvents ) + { + LOG2( SIMPLE, + "SATENGINE: CSatEventMonitorContainer::SetUpEventMonitors calling %d", + aEvents ) + const TInt monitorCount( iEventMonitors->Count() ); + TInt errCode = KErrNotSupported; + LOG2( SIMPLE, "SATENGINE: CSatEventMonitorContainer::SetUpEventMonitors \ + monitorCount: %i", monitorCount ) + // Check is events supported + if ( EventsSupported( aEvents ) ) + { + LOG( SIMPLE, "SATENGINE: CSatEventMonitorContainer::\ + SetUpEventMonitors events supported" ) + // Update all monitors from list + for ( TInt index = 0; index < monitorCount; index++ ) + { + MSatEventMonitor* monitor = iEventMonitors->At( index ); + __ASSERT_ALWAYS( monitor, PanicSatEngine( ESatEngineNullPointer ) ); + // Update monitor + errCode = monitor->UpdateMonitor( aEvents ); + + if ( KErrNone != errCode ) + { + LOG( SIMPLE, "SATENGINE: CSatEventMonitorContainer::\ + SetUpEventMonitors KErrNone != errCode" ) + // Error, cancel all monitors and end this loop + CancelAllMonitors(); + index = monitorCount; + } + } + } + + LOG2( SIMPLE, + "SATENGINE: CSatEventMonitorContainer::SetUpEventMonitors exiting %d", + errCode ) + + return errCode; + } + +// ----------------------------------------------------------------------------- +// CSatEventMonitorContainer::CancelAllMonitors +// Cancels all monitors in list. +// ----------------------------------------------------------------------------- +// +TInt CSatEventMonitorContainer::CancelAllMonitors() + { + LOG( SIMPLE, + "SATENGINE: CSatEventMonitorContainer::CancelAllMonitors calling" ) + + const TInt monitorCount( iEventMonitors->Count() ); + LOG2( SIMPLE, "SATENGINE: CSatEventMonitorContainer::CancelAllMonitors \ + monitorCount: %i", monitorCount ) + // Cancel all monitors from list + for ( TInt index = 0; index < monitorCount; index++ ) + { + MSatEventMonitor* monitor = iEventMonitors->At( index ); + __ASSERT_ALWAYS( monitor, PanicSatEngine( ESatEngineNullPointer ) ); + // Cancel monitor + monitor->CancelMonitor(); + } + + LOG( SIMPLE, + "SATENGINE: CSatEventMonitorContainer::CancelAllMonitors exiting" ) + + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CSatEventMonitorContainer::LanguageSettingL +// Resolves language ID +// ----------------------------------------------------------------------------- +// +void CSatEventMonitorContainer::LanguageSettingL( TInt& aLanguage ) + { + LOG( SIMPLE, + "SATENGINE: CSatEventMonitorContainer::LanguageSettingL calling" ) + + // Automatic Language setting is detected as 0. + // There is no header file for this. This is only needed here. + const TInt KAutomaticLanguageSetting( 0 ); + + // Special treatment for automatic language setting. + if ( KAutomaticLanguageSetting == aLanguage ) + { + // Automatic language setting - Tries to take preferred + // language from SIM card. + + // The following operations need a file server session. + RFs fileServerSession; + User::LeaveIfError( fileServerSession.Connect() ); + CleanupClosePushL( fileServerSession ); + + // Automatic language setting + // 1) look for SIM Preferred Language + // 2) look if language is supported in phone + // + + // Preferred language from SIM (Symbian coding). + TInt simPreferredLanguageSymbianCoding; + + // Fetch SIM preferred language (Symbian coding) and see if it is + // supported + if ( KErrNone == SysLangUtil::RestoreSIMLanguage + ( simPreferredLanguageSymbianCoding, &fileServerSession ) + && SysLangUtil::IsValidLanguage + ( simPreferredLanguageSymbianCoding, &fileServerSession ) ) + { + aLanguage = simPreferredLanguageSymbianCoding; + LOG2( SIMPLE, "SATENGINE: CSatEventMonitorContainer::\ + LanguageSettingL SIM preferred language is supported %d", + aLanguage ) + } + else + { + // Either there is no SIM preferred language, or the SIM preferred + // language is not supported. Then default language is used. + SysLangUtil::GetDefaultLanguage( aLanguage, &fileServerSession ); + LOG( SIMPLE, "SATENGINE: CSatEventMonitorContainer::\ + LanguageSettingL No SIM preferred language" ) + } + + CleanupStack::PopAndDestroy(); // fileServerSession + } + + LOG( SIMPLE, + "SATENGINE: CSatEventMonitorContainer::LanguageSettingL exiting" ) + } + +// ----------------------------------------------------------------------------- +// CSatEventMonitorContainer::EventDownload +// Called when an event occurs. Handles that event and possibly sends +// event download to SIM. +// ----------------------------------------------------------------------------- +// +void CSatEventMonitorContainer::EventDownload( + RSat::TEventList aSingleEvent, TInt aFirstArg, TInt aSecArg ) + { + LOG( SIMPLE, "SATENGINE: CSatEventMonitorContainer::EventDownload calling" ) + + //lint -e{961} Else block meaningless + if ( ( iBipExecuting || IsActive() ) && !iEventPending ) + { + LOG( NORMAL, "EventMonitor: EventDownload BIP Command Executing" ) + // If there is event download currently active, we cannot send next + // event download, so we have to store this event. + iPendingEvent = aSingleEvent; + iPendingFirstArg = aFirstArg; + iPendingSecondArg = aSecArg; + iEventPending = ETrue; + } + else if ( !iEventPending ) + { + // No pending events, we can execute + switch ( aSingleEvent ) + { + case RSat::KLanguageSelection: + { + LOG( NORMAL, "SATENGINE: Event LanguageSelection" ) + LanguageSelectionEvent( aFirstArg ); + break; + } + + case RSat::KBrowserTermination: + { + LOG( NORMAL, "SATENGINE: Event BrowserTermination" ) + BrowserTerminationEvent( aFirstArg ); + break; + } + + case RSat::KDataAvailable: + { + LOG( NORMAL, "SATENGINE: Event DataAvailable" ) + DataAvailableEvent( aFirstArg, aSecArg ); + break; + } + + case RSat::KChannelStatus: + { + LOG( NORMAL, "SATENGINE: Event ChannelStatus" ) + ChannelStatusEvent( aFirstArg, aSecArg ); + break; + } + + // These events does not have any data to be sent + // to SIM + case RSat::KUserActivity: + case RSat::KIdleScreenAvailable: + { + LOG( NORMAL, "SATENGINE: Event UserActivity/IdleScreen" ) + RSat::TEventDownloadBaseV2 eventDownload; + RSat::TEventDownloadBaseV2Pckg eventDownloadPckg( + eventDownload ); + eventDownload.iDataAvailable = EFalse; + iSat.EventDownload( iStatus, aSingleEvent, eventDownloadPckg ); + iRemovableSingleEvent = aSingleEvent; + break; + } + + default: + { + LOG( NORMAL, "SATENGINE: BadRequest" ) + __ASSERT_DEBUG( EFalse, PanicSatEngine( ESatSBadRequest ) ); + } + } + + SetActive(); + } + + LOG( SIMPLE, "SATENGINE: CSatEventMonitorContainer::EventDownload exiting" ) + } + +// ----------------------------------------------------------------------------- +// CSatEventMonitorContainer::BipUtils +// Returns the interface for BIP Utils +// ----------------------------------------------------------------------------- +// +MSatBIPEventNotifier& CSatEventMonitorContainer::BipNotifier() + { + LOG( SIMPLE, + "SATENGINE: CSatEventMonitorContainer::BipUtils calling-exiting" ) + return iSatUtils.BipEventNotifier(); + } + +// ----------------------------------------------------------------------------- +// CSatEventMonitorContainer::SimRemoved +// Updates event monitor list +// ----------------------------------------------------------------------------- +// +void CSatEventMonitorContainer::SimRemoved() + { + LOG( SIMPLE, "SATENGINE: CSatEventMonitorContainer::SimRemoved calling" ) + + // If SIM is removed, all monitors must be cancelled. + CancelAllMonitors(); + + LOG( SIMPLE, "SATENGINE: CSatEventMonitorContainer::SimRemoved exiting" ) + } + +// ----------------------------------------------------------------------------- +// CSatEventMonitorContainer::GetLanguageString +// Gets the ISO639 language code. +// ----------------------------------------------------------------------------- +// +void CSatEventMonitorContainer::GetLanguageString( const TInt aId, TDes& aText ) + { + LOG( SIMPLE, + "SATENGINE: CSatEventMonitorContainer::GetLanguageString calling" ) + + aText = KNullDesC; + TBuf lanText; + lanText.Copy( KNullDesC ); + + // Number of Symbian languages. + TInt count( KNUMLANGSTRINGS ); + // Index for searching loop. + TInt i( 0 ); + // Language structure for searching loop. + SLangString language( KLangStrings[i] ); + + // Loop languages until one is found + do { + language = KLangStrings[i]; + // Finds the appropriate language and gives a code for that. + if ( language.iId == aId ) + { + LOG( SIMPLE, "SATENGINE: CSatEventMonitorContainer::\ + GetLanguageString language.iId == aId" ) + // Current language code in the loop is appended to reference. + lanText.Append( + *( language.iString ) << 8 | *( language.iString + 1 ) ); + } + i++; + } + while ( ( i <= count ) && ( language.iId != aId ) ); + + aText.Copy( lanText ); + LOG2( SIMPLE, + "SATENGINE: CSatEventMonitorContainer::GetLanguageString aId: %i", aId ) + LOG2( SIMPLE, + "SATENGINE: CSatEventMonitorContainer::GetLanguageString aId: %S", + &aText ) + LOG( SIMPLE, + "SATENGINE: CSatEventMonitorContainer::GetLanguageString exiting" ) + } + +// ----------------------------------------------------------------------------- +// CSatEventMonitorContainer::RunL +// From CActive +// ----------------------------------------------------------------------------- +// +void CSatEventMonitorContainer::RunL() + { + LOG( SIMPLE, "SATENGINE: CSatEventMonitorContainer::RunL calling" ) + + if ( KErrCancel != iRemovableSingleEvent ) + { + LOG( SIMPLE, "SATENGINE: CSatEventMonitorContainer::RunL \ + KErrCancel != iRemovableSingleEvent" ) + //Remove event from list as these are not continuous events + RemoveSingleEvent( + static_cast( iRemovableSingleEvent ) ); + iRemovableSingleEvent = KErrCancel; + } + + // Check the request status + if ( KErrNone != iStatus.Int() ) + { + LOG2( SIMPLE, + "SATENGINE: CSatEventMonitorContainer::RunL with value %d", + iStatus.Int() ) + } + + // If there are events pending, send now + if ( iEventPending ) + { + LOG( SIMPLE, + "SATENGINE: CSatEventMonitorContainer::RunL Sending pending event" ) + iEventPending = EFalse; + + // Send event + EventDownload( iPendingEvent, iPendingFirstArg, iPendingSecondArg ); + } + + LOG( SIMPLE, "SATENGINE: CSatEventMonitorContainer::RunL exiting" ) + } + +// ----------------------------------------------------------------------------- +// CSatEventMonitorContainer::DoCancel +// From CActive +// ----------------------------------------------------------------------------- +// +void CSatEventMonitorContainer::DoCancel() + { + LOG( SIMPLE, "SATENGINE: CSatEventMonitorContainer::DoCancel calling" ) + + CancelAllMonitors(); + + LOG( SIMPLE, "SATENGINE: CSatEventMonitorContainer::DoCancel exiting" ) + } + +// ----------------------------------------------------------------------------- +// CSatEventMonitorContainer::CSatEventMonitorContainer +// C++ default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CSatEventMonitorContainer::CSatEventMonitorContainer( TUSatAPI& aUsatAPI, + MSatUtils& aSatUtils ) : + CActive ( CActive::EPriorityStandard ), + iSat( aUsatAPI ), + iSatUtils( aSatUtils ) + { + LOG( SIMPLE, "SATENGINE: CSatEventMonitorContainer::\ + CSatEventMonitorContainer calling" ) + + CActiveScheduler::Add( this ); + + LOG( SIMPLE, "SATENGINE: CSatEventMonitorContainer::\ + CSatEventMonitorContainer exiting" ) + } + +// ----------------------------------------------------------------------------- +// CSatEventMonitorContainer::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CSatEventMonitorContainer::ConstructL() + { + LOG( SIMPLE, "SATENGINE: CSatEventMonitorContainer::ConstructL calling" ) + + iEventMonitors = TSatEventMonitorFactory::CreateEventMonitorsL( *this ); + iRemovableSingleEvent = KErrCancel; + + iSatUtils.RegisterL( this, MSatUtils::EBipCommandExecuting ); + iSatUtils.RegisterL( this, MSatUtils::EBipCommandDoneExecuting ); + + LOG( SIMPLE, "SATENGINE: CSatEventMonitorContainer::ConstructL exiting" ) + } + +// ----------------------------------------------------------------------------- +// CSatEventMonitorContainer::LanguageSelectionEvent +// Handles LanguageSelection event and sends event download +// ----------------------------------------------------------------------------- +// +void CSatEventMonitorContainer::LanguageSelectionEvent( TInt aLanguageId ) + { + LOG( SIMPLE, + "SATENGINE: CSatEventMonitorContainer::LanguageSelectionEvent calling" ) + + // Special event download package, + // used exclusively for Language Selection events + RSat::TLanguageSelectionEventV2 languageDownload; + RSat::TLanguageSelectionEventV2Pckg languageDownloadPckg( + languageDownload ); + languageDownload.iDataAvailable = EFalse; + + // Resolve Language ID + TRAPD( err, LanguageSettingL( aLanguageId ) ); + LOG2( SIMPLE, "SATENGINE: CSatEventMonitorContainer::\ + LanguageSelectionEvent err: %i", err ) + if ( KErrNone == err ) + { + // Get Language string + TBuf<1> languageTxt; + GetLanguageString( aLanguageId, languageTxt ); + + // If language is found, put it to event download information + if ( languageTxt.Length() != 0 ) + { + LOG( SIMPLE, + "SATENGINE: CSatEventMonitorContainer::LanguageSelectionEvent \ + languageTxt.Length() != 0" ) + + // Language selection event does have data. + languageDownload.iDataAvailable = ETrue; + + // Integer argument is interpreted as language code. + languageDownload.iLanguage = + static_cast( languageTxt[0] ); + } + } + + // Send EventDownload to SIM + iSat.EventDownload( + iStatus, + RSat::KLanguageSelection, + languageDownloadPckg ); + + LOG( SIMPLE, + "SATENGINE: CSatEventMonitorContainer::LanguageSelectionEvent exiting" ) + } + +// ----------------------------------------------------------------------------- +// CSatEventMonitorContainer::BrowserTerminationEvent +// Handles browser termination event and sends event download +// ----------------------------------------------------------------------------- +// +void CSatEventMonitorContainer::BrowserTerminationEvent( TInt aCause ) + { + LOG( SIMPLE, "SATENGINE: CSatEventMonitorContainer::\ + BrowserTerminationEvent calling" ) + + // Special event download package, + // used exclusively for Browser termination events. + RSat::TBrowserTerminationEventV2 browserTermination; + RSat::TBrowserTerminationEventV2Pckg browserTerminationPckg( + browserTermination ); + + // Language selection event does have data. + browserTermination.iDataAvailable = ETrue; + + // Browser termination event does have data. + browserTermination.iCause = + static_cast( aCause ); + + // Send event download + iSat.EventDownload( + iStatus, + RSat::KBrowserTermination, + browserTerminationPckg ); + + LOG( SIMPLE, "SATENGINE: CSatEventMonitorContainer::\ + BrowserTerminationEvent exiting" ) + } + +// ----------------------------------------------------------------------------- +// CSatEventMonitorContainer::DataAvailableEvent +// Handles DataAvailable event and sends event download +// ----------------------------------------------------------------------------- +// +void CSatEventMonitorContainer::DataAvailableEvent( + const TInt aChannelId, const TInt aLength ) + { + LOG( SIMPLE, + "SATENGINE: CSatEventMonitorContainer::DataAvailableEvent calling" ) + + RSat::TDataAvailableEventV2 dataAvailable; + RSat::TDataAvailableEventV2Pckg dataAvailablePckg( dataAvailable ); + RSat::TChannelStatus status; + + // BIP Utils will generate channel status + TRAPD( err, + status = iSatUtils.BipUtils().GenerateChannelStatusL( aChannelId, 0 ) ); + + // Check error + LOG2( SIMPLE, "SATENGINE: CSatEventMonitorContainer::\ + DataAvailableEvent ChannelStatus failed: %i", err ) + if ( KErrNone == err ) + { + // Put the parameters to data package + dataAvailable.iDataAvailable = ETrue; + // If received more than 0xFF, we return 0xFF, because that iLength can + // contain only one byte. + TInt8 length( 0 ); + + if ( KSatBIPMoreThanMaxSize < aLength ) + { + LOG( SIMPLE, "SATENGINE: CSatEventMonitorContainer::\ + DataAvailableEvent KSatBIPMoreThanMaxSize < aLength" ) + length = static_cast( KSatBIPMoreThanMaxSize ); + } + else + { + length = static_cast( aLength ); + } + + dataAvailable.iLength = length; + dataAvailable.iStatus = status; + // Send EventDownload to SIM + iSat.EventDownload( + iStatus, + RSat::KDataAvailable, + dataAvailablePckg ); + } + + LOG( SIMPLE, + "SATENGINE: CSatEventMonitorContainer::DataAvailableEvent exiting" ) + } + +// ----------------------------------------------------------------------------- +// CSatEventMonitorContainer::ChannelStatusEvent +// Handles ChannelStatus event and sends event download +// ----------------------------------------------------------------------------- +// +void CSatEventMonitorContainer::ChannelStatusEvent( const TInt aChannelId, + const TInt aStatus ) + { + LOG( SIMPLE, + "SATENGINE: CSatEventMonitorContainer::ChannelStatusEvent calling" ) + + RSat::TChannelStatusEventV2 channelStatus; + RSat::TChannelStatusEventV2Pckg channelStatusPckg( channelStatus ); + RSat::TChannelStatus status; + + // BIP Utils will generate channel status + TRAPD( err, status = iSatUtils.BipUtils().GenerateChannelStatusL( + aChannelId, aStatus ) ); + + // Check error + LOG2( NORMAL, "SATENGINE: CSatEventMonitorContainer::\ + ChannelStatusEvent ChannelStatus failed: %i", err ) + if ( KErrNone == err ) + { + + LOG2( SIMPLE, "SatServer, ChannelStatus envelope: %b", status[0] ) + // Put the parameters to data package + channelStatus.iDataAvailable = ETrue; + channelStatus.iStatus = status; + // Send EventDownload to SIM + iSat.EventDownload( + iStatus, + RSat::KChannelStatus, + channelStatusPckg ); + } + + LOG( SIMPLE, + "SATENGINE: CSatEventMonitorContainer::ChannelStatusEvent exiting" ) + } + +// ----------------------------------------------------------------------------- +// CSatEventMonitorContainer::EventsSupported +// Checks whether aEvents contains supported events only. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TBool CSatEventMonitorContainer::EventsSupported( TUint aEvents ) const + { + LOG( SIMPLE, + "SATENGINE: CSatEventMonitorContainer::EventsSupported calling" ) + + // Events supported and handled by this class. + const TUint eventsSupported = + RSat::KUserActivity | RSat::KIdleScreenAvailable | + RSat::KLanguageSelection | RSat::KBrowserTermination | + RSat::KDataAvailable | RSat::KChannelStatus; + + // If aEvents has even one event that is not supported (not found from + // eventsSuported), then EventsSupported returns EFalse. + + // First the eventsSupported is masked and bits are inverted. Then that mask + // is compared to aEvents and if there is even one bit that is not supposed + // to be there, function returns EFalse. + + const TBool supported( !( ~( eventsSupported ) & aEvents ) ); + + LOG2( SIMPLE, + "SATENGINE: CSatEventMonitorContainer::EventsSupported returning %i", + supported ) + return supported; + } + +// ----------------------------------------------------------------------------- +// CSatEventMonitorContainer::WriteLanguageSelectionTime +// Sets time delay before reboot. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TInt CSatEventMonitorContainer::WriteLanguageSelectionTime( TInt aTime ) + { + LOG( SIMPLE, + "SATENGINE: CSatEventMonitorContainer::WriteLanguageSelectionTime \ + calling-exiting" ) + return iSatUtils.SystemState().WriteLanguageSelectionTime( aTime ); + } + +// ----------------------------------------------------------------------------- +// CSatEventMonitorContainer::RemoveSingleEvent +// Removes single event from list +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CSatEventMonitorContainer::RemoveSingleEvent( + RSat::TEventList aSingleEvent ) + { + LOG( SIMPLE, + "SATENGINE: CSatEventMonitorContainer::RemoveSingleEvent calling" ) + + const TInt monitorCount( iEventMonitors->Count() ); + LOG2( SIMPLE, "SATENGINE: CSatEventMonitorContainer::RemoveSingleEvent \ + monitorCount: %i", monitorCount ) + + // Cancel all monitors from list + for ( TInt index = 0; index < monitorCount; index++ ) + { + MSatEventMonitor* monitor = iEventMonitors->At( index ); + __ASSERT_ALWAYS( monitor, PanicSatEngine( ESatEngineNullPointer ) ); + + if ( monitor->IsMonitoringEvent( aSingleEvent ) ) + { + // Cancel monitor + monitor->CancelMonitor(); + } + } + + LOG( SIMPLE, + "SATENGINE: CSatEventMonitorContainer::RemoveSingleEvent exiting" ) + } + +// End of File