--- /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 <startupdomainpskeys.h>
+#include <talogger.h>
+
+
+// ================= 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<TPESimState>( 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