diff -r 000000000000 -r 5f000ab63145 phoneengine/phonemodel/src/cpesimstatemonitor.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneengine/phonemodel/src/cpesimstatemonitor.cpp Mon Jan 18 20:18:27 2010 +0200 @@ -0,0 +1,217 @@ +/* +* Copyright (c) 2003 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: Sim State Monitoring class methods implementation +* +*/ + + + +// INCLUDE FILES +#include "cpesimstatemonitor.h" +#include "mpephonemodelinternal.h" +#include +#include + + +// ================= MEMBER FUNCTIONS ======================================= + +// ----------------------------------------------------------------------------- +// CPESimStateMonitor::CPESimStateMonitor +// C++ default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CPESimStateMonitor::CPESimStateMonitor( + MPEPhoneModelInternal& aModel, + const TEvent aEvent ) + : CActive( EPriorityStandard ), + iModel( aModel ), + iSimState( EPESimStatusUninitialized ), + iStartUp( ETrue ) + { + if ( aEvent == EEventSimStatus ) + { + iPropertyKey = KPSSimStatus; + } + else + { + iPropertyKey = KPSSimChanged; + } + } + +// ----------------------------------------------------------------------------- +// CPESimStateMonitor::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CPESimStateMonitor::ConstructL() + { + TEFLOGSTRING( KTAMESOUT, "PE CPESimStateMonitor::ConstructL start" ); + + RProperty::TType type( RProperty::EInt ); + TInt err = iProperty.Define( KPSUidStartup, iPropertyKey, type ); + + //An error of KErrAlready exists should be ignored, as this only + //indicates that some other code int system is also interested in the + //value and has created the property. + if ( err != KErrNone && err != KErrAlreadyExists ) + { + User::Leave( err ); + } + User::LeaveIfError( iProperty.Attach( KPSUidStartup, iPropertyKey ) ); + + // NOTE StartMonitoring() is not called here and this is intentional. + // It is undesirable to send out messages before initialization is complete. + // The first completion of this monitor is achieved by calling Start() from + // MPEPhoneModelInternal::StepL() + + TEFLOGSTRING( KTAMESOUT, "PE CPESimStateMonitor::ConstructL complete" ); + } + +// ----------------------------------------------------------------------------- +// CPESimStateMonitor::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CPESimStateMonitor* CPESimStateMonitor::NewL( + MPEPhoneModelInternal& aModel, + const TEvent aEvent ) + { + TEFLOGSTRING2( KTAOBJECT, "PE CPESimStateMonitor::Newl %d", aEvent ); + CPESimStateMonitor* self = new ( ELeave ) CPESimStateMonitor( aModel, aEvent ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + TEFLOGSTRING( KTAMESOUT, "PE CPESimStateMonitor::NewL complete" ); + + return self; + } + +// Destructor +CPESimStateMonitor::~CPESimStateMonitor() + { + Cancel(); + iProperty.Close(); + } + +// ----------------------------------------------------------------------------- +// CPESimStateMonitor::Start +// Completes monitor to finish initialization +// ----------------------------------------------------------------------------- +// +void CPESimStateMonitor::Start() + { + if ( !IsActive() ) + { + CActiveScheduler::Add( this ); + SetActive(); + TRequestStatus* status = &iStatus ; + User::RequestComplete( status, KErrNone ); + } + } + +// ----------------------------------------------------------------------------- +// CPESimStateMonitor::SimState +// Returns Sim state. +// ----------------------------------------------------------------------------- +// +TPESimState CPESimStateMonitor::SimState() const + { + return static_cast( iSimState ); + } + +// ----------------------------------------------------------------------------- +// CPESimStateMonitor::StartMonitoring +// Starts monitoring Sim state +// ----------------------------------------------------------------------------- +// +void CPESimStateMonitor::StartMonitoring() + { + iProperty.Subscribe( iStatus ); + SetActive(); + } + +// ----------------------------------------------------------------------------- +// CPESimStateMonitor::DoCancel +// Callback method from CActive. +// ----------------------------------------------------------------------------- +// +void CPESimStateMonitor::DoCancel() + { + iProperty.Cancel(); + } + +// ----------------------------------------------------------------------------- +// CPESimStateMonitor::RunL +// In startup reads Sim state from System Agent, otherwise it is called +// when Sim state is changed. +// ----------------------------------------------------------------------------- +// +void CPESimStateMonitor::RunL() + { + TInt status = iStatus.Int(); + // resubscribe before processing new value to prevent missing updates + StartMonitoring(); + + iProperty.Get( KPSUidStartup, iPropertyKey, iSimState ); + + if ( iStartUp ) + { + iStartUp = EFalse; + + if ( iPropertyKey == KPSSimStatus ) + { + if( iSimState != EPESimStatusUninitialized && iSimState != EPESimNotSupported ) + { + iModel.SendMessage( MEngineMonitor::EPEMessageSIMStateChanged ); + } + } + else + { + iModel.SendMessage( MEngineMonitor::EPEMessageSIMChanged ); + } + } + else // Sim or Sim status has changed + { + if ( status == KErrNone ) + { + TEFLOGSTRING3( KTAMESINT, + "PE CPESimStateMonitor::RunL, event: %d, property: %d" + , iPropertyKey + , iSimState ); + + if ( iPropertyKey == KPSSimStatus ) + { + iModel.SendMessage( MEngineMonitor::EPEMessageSIMStateChanged ); + } + else + { + if ( iSimState == ESimChanged ) + { + iModel.SendMessage( MEngineMonitor::EPEMessageSIMChanged ); + } + } + } + else + { + TEFLOGSTRING3( KTAERROR, "PE CPESimStateMonitor::RunL, event: %d, status: %d", iPropertyKey, status ); + } + } + } + +// ========================== OTHER EXPORTED FUNCTIONS ========================= + +// None + +// End of File