--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/networkhandling/networkhandlingengine/NetworkHandlingGsmSrc/CNWNetworkViagBaseEngine.cpp Tue Feb 02 01:11:09 2010 +0200
@@ -0,0 +1,887 @@
+/*
+* Copyright (c) 2002-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: This module contains the implementation of CNWNetworkViagBaseEngine
+* class member functions.
+*
+*/
+
+
+// INCLUDE FILES
+#include <ctsydomainpskeys.h>
+#include <e32property.h>
+#include <PSVariables.h>
+#include <startupdomainpskeys.h>
+
+#include "CNWNetworkViagBaseEngine.h"
+#include "CNWNetworkViagCbEngine.h"
+#include "CNWNetworkViagLcEngine.h"
+#include "NWLogger.h"
+#include "CNWNetworkViagRefresh.h"
+#include "CNWNetworkViagSimReader.h"
+#include "CNWNetworkSystemEventMonitor.h"
+#include "CNWGsmMessageHandler.h"
+#include "NWPanic.pan"
+#include "NetworkHandlingDomainPSKeys.h"
+#include "CNWNetworkViagTimer.h"
+
+// CONSTANTS
+const TUint KNWzero = 0;
+const TInt KArrayCount = 8;
+const TInt KNWTimeOut = 2000000;
+
+// ============================ MEMBER FUNCTIONS ==============================
+
+// ----------------------------------------------------------------------------
+// CNWNetworkViagBaseEngine::CNWNetworkViagBaseEngine
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// ----------------------------------------------------------------------------
+//
+CNWNetworkViagBaseEngine::CNWNetworkViagBaseEngine(
+ CNWGsmNetworkCellReselectionHandler& aOwner,
+ CNWGsmMessageHandler& aMessageHandler,
+ RMmCustomAPI& aCustomAPI,
+ TNWInfo& aNetworkInfo,
+ TNWInterInfo& aInterNetworkInfo
+ ):
+ iOwner ( aOwner ),
+ iMessageHandler( aMessageHandler ),
+ iCustomAPI( aCustomAPI ),
+ iNWNetworkInfo( aNetworkInfo ),
+ iInterNetworkInfo( aInterNetworkInfo ),
+ iLcSupported ( EFalse ),
+ iCbActivation( EFalse ),
+ iSimOk ( EFalse ),
+ iActivation( EFalse ),
+ iInitReady( ),
+ iReadingOnGoing( EFalse )
+ {
+ NWLOGSTRING( KNWOBJECT,
+ "NW: CNWNetworkViagBaseEngine::CNWNetworkViagBaseEngine() Called." );
+ }
+
+// ----------------------------------------------------------------------------
+// CNWNetworkViagBaseEngine::ConstructL
+// Symbian 2nd phase constructor can leave.
+// ----------------------------------------------------------------------------
+//
+void CNWNetworkViagBaseEngine::ConstructL()
+ {
+ NWLOGSTRING( KNWOBJECT,
+ "NW: CNWNetworkViagBaseEngine::ConstructL() Begin." );
+
+ RProperty::TType type( RProperty::EInt );
+ TSecurityPolicy readPolicy( ECapability_None );
+ TSecurityPolicy writePolicy( ECapabilityWriteDeviceData );
+ TInt err = RProperty::Define( KPSUidNetworkInfo,
+ KNWHomeZoneStatus,
+ type,
+ readPolicy,
+ writePolicy );
+
+ //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 )
+ {
+ NWLOGSTRING2( KNWERROR, "NW: CNWNetworkViagBaseEngine::ConstructL \
+ RProperty::Define error: %d .", err );
+ User::Leave( err );
+ }
+
+ RProperty::Set( KPSUidNetworkInfo, KNWHomeZoneStatus, ENWNone );
+
+ iSimStateMonitor = CNWNetworkSystemEventMonitor::NewL( *this,
+ KPSUidStartup,
+ KPSSimStatus );
+
+ iCallStateMonitor = CNWNetworkSystemEventMonitor::NewL(
+ *this, KPSUidCtsyCallInformation, KCTsyCallState );
+
+ iGPRSStateMonitor = CNWNetworkSystemEventMonitor::NewL(
+ *this, KUidSystemCategory,KPSUidGprsStatusValue );
+
+ iViagCbEngine = CNWNetworkViagCbEngine::NewL( *this,
+ iNWNetworkInfo,
+ iCustomAPI,
+ iInterNetworkInfo,
+ iOwner );
+
+ // Sim status monitor.
+ iViagSimReader = CNWNetworkViagSimReader::NewL( *this, iCustomAPI );
+
+ iViagLcEngine = CNWNetworkViagLcEngine::NewL( *this,
+ iNWNetworkInfo,
+ iCustomAPI,
+ iInterNetworkInfo );
+
+ iZoneTags = new ( ELeave ) CZoneTagsArray( 1 );
+ iZoneTags->ResizeL( KArrayCount );
+ iSPNEFRead = ETrue;
+ iNPNEFRead = ETrue;
+ iProgEFRead = ETrue;
+ iViagEFRead = ETrue;
+ iTimer = CNWNetworkViagTimer::NewL();
+
+ NWLOGSTRING( KNWOBJECT,
+ "NW: CNWNetworkViagBaseEngine::ConstructL() End." );
+ }
+
+// ----------------------------------------------------------------------------
+// CNWNetworkViagBaseEngine::NewL
+// Two-phased constructor.
+// ----------------------------------------------------------------------------
+//
+CNWNetworkViagBaseEngine* CNWNetworkViagBaseEngine::NewL(
+ CNWGsmNetworkCellReselectionHandler& aOwner,
+ CNWGsmMessageHandler& aMessageHandler,
+ RMmCustomAPI& aCustomAPI,
+ TNWInfo& aNetworkInfo,
+ TNWInterInfo& aInterNetworkInfo
+ )
+ {
+ NWLOGSTRING( KNWOBJECT,
+ "NW: CNWNetworkViagBaseEngine::NewL() Begin." );
+
+ CNWNetworkViagBaseEngine* self = new (ELeave) CNWNetworkViagBaseEngine(
+ aOwner, aMessageHandler, aCustomAPI, aNetworkInfo,
+ aInterNetworkInfo );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+
+ NWLOGSTRING( KNWOBJECT,
+ "NW: CNWNetworkViagBaseEngine::NewL() End." );
+ return self;
+ }
+
+
+// Destructor
+CNWNetworkViagBaseEngine::~CNWNetworkViagBaseEngine()
+ {
+ NWLOGSTRING( KNWOBJECT,
+ "NW: CNWNetworkViagBaseEngine::~CNWNetworkViagBaseEngine() Begin." );
+ delete iCharacterSetConverter;
+ iFs.Close();
+ delete iViagRefresh;
+ delete iZoneTags;
+ delete iViagLcEngine;
+ delete iViagSimReader;
+ delete iViagCbEngine;
+ delete iGPRSStateMonitor;
+ delete iCallStateMonitor;
+ delete iSimStateMonitor;
+
+ StopTimer();
+ delete iTimer;
+
+ NWLOGSTRING( KNWOBJECT,
+ "NW: CNWNetworkViagBaseEngine::~CNWNetworkViagBaseEngine() End." );
+ }
+
+// ----------------------------------------------------------------------------
+// CNWNetworkViagBaseEngine::CellReselection
+// Is called by CNWNetworkCurrentNetworkMonitor in case of cell re-selection.
+// (other items were commented in a header).
+// ----------------------------------------------------------------------------
+//
+void CNWNetworkViagBaseEngine::CellReselection()
+ {
+ NWLOGSTRING( KNWOBJECT,
+ "NW: CNWNetworkViagBaseEngine::CellResection() Begin" );
+
+ // SIM OK
+ // VIAG IMSI OK
+ // System UP ...
+
+ NWLOGSTRING2( KNWOBJECT, "NW: CNWNetworkViagBaseEngine::CellResection \
+ iSimOk = %d ", iSimOk );
+ // Sim is ok and imsi is right
+ if ( iSimOk && IsViagImsi() )
+ {
+ // ... System is ready to proceed with HomeZone algoritmh(s)!!
+ if ( iInitReady == EInitReady )
+ {
+ iViagActiveAlgo = EWNAlgoNone ;
+ NWLOGSTRING( KNWOBJECT,
+ "NW: CNWNetworkViagBaseEngine::CellReselection StopCbAlgo()" );
+ iViagCbEngine->StopCbAlgo();
+ // general activation is in default ETrue and CB activation EFalse
+ iViagLcEngine->GetActivation( iActivation, iCbActivation );
+
+ NWLOGSTRING3( KNWOBJECT,
+ "NW: CNWNetworkViagBaseEngine::CellResection \
+ iActivation = %d, iCbActivation = %d ",
+ iActivation, iCbActivation );
+
+ NWLOGSTRING2( KNWOBJECT,
+ "NW: CNWNetworkViagBaseEngine::CellResection \
+ iNetworkMode = %d", iNWNetworkInfo.iNetworkMode );
+
+ if ( iActivation )
+ {
+ if ( iNWNetworkInfo.iNetworkMode == ENWModeWcdma ) // Network mode is WCDMA AND
+ {
+ if( iLcSupported )
+ {
+ iViagActiveAlgo = EWNAlgoLc ; // UICC is "new geration" O2 de UICC
+ }
+ }
+ else // GSM // Network mode is GSM
+ {
+ // Gsm mode + there is NOT gsm cells subscribed in LAC files
+ // Gsm mode + Cb-activation bit is "ON"
+ // Gsm mode + UICC is NOT "new geration" O2 de UICC
+ iViagActiveAlgo = EWNAlgoCb ;
+ if ( iViagLcEngine->IsGsmCellSubscribed() ) // There is subscribed gsm cells in LAC files.
+ {
+ if ( !iCbActivation ) // AND Cb-activation bit is off.
+ {
+ iViagActiveAlgo = EWNAlgoLc ;
+ }
+ }
+ }
+ }
+ NWLOGSTRING2( KNWOBJECT,
+ "NW: CNWNetworkViagBaseEngine::CellReselection(),\
+ iAreaKnown = %d",iInterNetworkInfo.iAreaKnown );
+ // Reset the indications
+ WriteViagValues( ENWViagIndicatorTypeNone, KNWzero );
+ if ( iNWNetworkInfo.iStatus == ENWStatusCurrent
+ && iInterNetworkInfo.iAreaKnown )
+ {
+ if ( iViagActiveAlgo == EWNAlgoLc )
+ {
+ NWLOGSTRING( KNWOBJECT,
+ "NW: CNWNetworkViagBaseEngine::ACTIVE ALGO ***LC***" );
+ iViagLcEngine->CellReselection();
+ }
+ else if( iViagActiveAlgo == EWNAlgoCb )
+ {
+ NWLOGSTRING( KNWOBJECT,
+ "NW: CNWNetworkViagBaseEngine::ACTIVE ALGO ***CB***" );
+ iViagCbEngine->CellReselection();
+ }
+
+ else if ( iViagActiveAlgo == EWNAlgoNone )
+ {
+ NWLOGSTRING( KNWOBJECT,
+ "NW: CNWNetworkViagBaseEngine::ACTIVE ALGO ***NONE***" );
+ }
+ }
+ }
+ // ... System is NOT yet fully initialised
+ else if( iInitReady == EInitNotReady && !iCharacterSetConverter )
+ {
+ TRAP_IGNORE( InitializeCharSetConverterL() );
+ NWLOGSTRING( KNWOBJECT, "NW: CNWNetworkViagBaseEngine::CellResection \
+ System is NOT yet fully initialised " );
+ ViagInitialize();
+ // Sat server is not up in startup
+ iActiveCall = EFalse;
+ }
+ }
+
+ NWLOGSTRING( KNWOBJECT,
+ "NW: CNWNetworkViagBaseEngine::CellResection() End" );
+ }
+
+
+// ----------------------------------------------------------------------------
+// CNWNetworkViagBaseEngine::SatRefreshCompleteNotification
+// Gets called when satrefresh is complete.
+// ----------------------------------------------------------------------------
+//
+void CNWNetworkViagBaseEngine::SatRefreshCompleteNotification()
+ {
+ NWLOGSTRING( KNWOBJECT,
+ "NW: CNWNetworkViagBaseEngine::SatRefreshCompleteNo\
+ tification() Begin" );
+
+ // When the HZ file of caches are refreshed then notify CB-Engine.
+ if( iViagCbEngine )
+ {
+ iViagCbEngine->SatRefreshCompleteNotification();
+ }
+
+ NWLOGSTRING( KNWOBJECT,
+ "NW: CNWNetworkViagBaseEngine::SatRefreshCompleteNotification end" );
+ }
+
+// ----------------------------------------------------------------------------
+// CNWNetworkViagBaseEngine::ViagInitialize
+// Initialize viag elements files.
+// ----------------------------------------------------------------------------
+//
+void CNWNetworkViagBaseEngine::ViagInitialize()
+ {
+ NWLOGSTRING( KNWOBJECT,
+ "NW: CNWNetworkViagBaseEngine::ViagInitialize() Begin" );
+ iInitReady = EInitOngoing;
+ // In start up read all elementary files that are needed.
+ if ( iViagSimReader )
+ {
+ iViagSimReader->SetElementFile( EFileSettings );
+ iViagSimReader->SetElementFile( EFileSubscribedOne );
+ iViagSimReader->SetElementFile( EFileSubscribedTwo );
+ iViagSimReader->SetElementFile( EFileSubscribedThree );
+ iViagSimReader->SetElementFile( EFileSubscribedFour );
+ iViagSimReader->SetElementFile( EFileTags );
+ iViagSimReader->ReadSimFile();
+ }
+ NWLOGSTRING( KNWOBJECT,
+ "NW: CNWNetworkViagBaseEngine::ViagInitialize() Complete" );
+ }
+
+// ----------------------------------------------------------------------------
+// CNWNetworkViagBaseEngine::UpdateCache
+// Update cache
+// ----------------------------------------------------------------------------
+//
+TBool CNWNetworkViagBaseEngine::UpdateCache(
+ TNWNetworkElementFile aElementFile,
+ const TDesC8& aResponse )
+ {
+ NWLOGSTRING2( KNWOBJECT,
+ "NW: CNWNetworkViagBaseEngine::UpdateCache() Begin\
+ , aElementFile = 0x%x", aElementFile );
+
+ NWLOGSTRING2( KNWINT,
+ "NW: CNWNetworkViagBaseEngine::UpdateCache(),\
+ iActivation = %d", iActivation );
+
+ ASSERT( iViagLcEngine );
+ ASSERT( iViagCbEngine );
+
+ if( iViagLcEngine )
+ {
+ if ( aElementFile == EFileSettings ||
+ ( aElementFile != EFileSettings && iActivation ) )
+ {
+ iViagLcEngine->ParseResult( aElementFile , aResponse );
+ if ( !iActivation )
+ {
+ iViagLcEngine->GetActivation( iActivation, iCbActivation );
+ }
+ if ( aElementFile == EFileTags && iInitReady == EInitOngoing )
+ {
+ iInitReady = EInitReady;
+ if( iViagCbEngine )
+ {
+ iViagCbEngine->InitilizeCaches();
+ iViagCbEngine->UpdateViagHzParams();
+ }
+ }
+ }
+ }
+
+ NWLOGSTRING2( KNWOBJECT, "NW: CNWNetworkViagBaseEngine::UpdateCache() \
+ End, length of aResponse = %d", aResponse.Length() );
+ return iActivation;
+ }
+
+// ----------------------------------------------------------------------------
+// CNWNetworkViagBaseEngine::SetLcNotSupported
+// Set LC support to False.
+// ----------------------------------------------------------------------------
+//
+void CNWNetworkViagBaseEngine::SetLcSupported( TBool aLcSupported )
+ {
+ NWLOGSTRING2( KNWOBJECT,
+ "NW: CNWNetworkViagBaseEngine::SetLcSupported() \
+ Begin, iLcSupported = %d ", aLcSupported );
+
+ ASSERT( iViagLcEngine );
+ ASSERT( iViagCbEngine );
+
+ iLcSupported = aLcSupported;
+ if ( iLcSupported == EFalse )
+ {
+ iInitReady = EInitReady;
+ if ( !iActivation )
+ {
+ iViagLcEngine->GetActivation( iActivation, iCbActivation );
+ }
+ if( iViagCbEngine && iActivation )
+ {
+ iViagCbEngine->InitilizeCaches();
+ iViagCbEngine->UpdateViagHzParams();
+ // If cell information is allready avaiable call cell reselection.
+ if ( iInterNetworkInfo.iCellId != 0 )
+ {
+ CellReselection();
+ }
+ }
+ }
+
+ NWLOGSTRING( KNWOBJECT,
+ "NW: CNWNetworkViagBaseEngine::SetLcSupported() end" );
+ }
+// ----------------------------------------------------------------------------
+// CNWNetworkViagBaseEngine::SendMessage
+// Reroutes a message to the Client object.
+// ----------------------------------------------------------------------------
+//
+void CNWNetworkViagBaseEngine::SendMessage(
+ MNWMessageObserver::TNWMessages aMessage ) // send message
+ {
+ NWLOGSTRING2( KNWOBJECT,
+ "NW: CNWNetworkViagBaseEngine::SendMessage(),\
+ aMessage = %d", aMessage );
+
+ iMessageHandler.SendMessage( aMessage );
+
+ NWLOGSTRING( KNWOBJECT,
+ "NW: CNWNetworkViagBaseEngine::SendMessage() End" );
+ }
+
+
+
+// ----------------------------------------------------------------------------
+// CNWNetworkViagBaseEngine::WriteViagValues
+// Writes Viag-values to networkinfo, shared data and system agent.
+// (other items were commented in a header).
+// ----------------------------------------------------------------------------
+//
+void CNWNetworkViagBaseEngine::WriteViagValues(
+ const TNWViagIndicatorType aIndicatorType, //Indicates which zone it is
+ const TInt& aZoneId ) // Viag text
+ {
+
+ NWLOGSTRING3( KNWOBJECT,
+ "NW: CNWNetworkViagBaseEngine::WriteViagValues() \
+ Begin, aIndicatorType = %d, aZoneId = %d",
+ aIndicatorType,aZoneId );
+
+ TInt zoneType = ENWNone;
+
+ // Intilise internal datastructure by defaul values (Not in any zone)
+ iNWNetworkInfo.iViagIndicatorType = ENWViagIndicatorTypeNone;
+ iNWNetworkInfo.iViagTextTag.Zero();
+
+ // Get zone values
+ switch( aIndicatorType )
+ {
+ // HomeZone
+ case ENWViagIndicatorTypeHomeZone:
+ if( !iActiveCall )
+ {
+ NWLOGSTRING2( KNWOBJECT,
+ "NW: CNWNetworkViagBaseEngine::WriteViagValues() \
+ iZoneTags->Count = %d", iZoneTags->Count() );
+
+ if ( aZoneId < iZoneTags->Count() )
+ {
+ TNWZoneTags zoneTags = iZoneTags->At( aZoneId );
+ iNWNetworkInfo.iViagIndicatorType = ENWViagIndicatorTypeHomeZone;
+ iNWNetworkInfo.iViagTextTag.Copy( zoneTags.iZoneTag ); //Array starts from 0.
+ }
+ zoneType = ENWHomeZone;
+ }
+ break;
+ //CityZone and the other known zones
+ case ENWViagIndicatorTypeCityZone:
+ if( !iActiveCall )
+ {
+ NWLOGSTRING2( KNWOBJECT,
+ "NW: CNWNetworkViagBaseEngine::WriteViagValues() \
+ iZoneTags->Count = %d", iZoneTags->Count() );
+
+ if ( aZoneId < iZoneTags->Count() )
+ {
+ TNWZoneTags zoneTags = iZoneTags->At( aZoneId );
+ iNWNetworkInfo.iViagIndicatorType = ENWViagIndicatorTypeCityZone;
+ iNWNetworkInfo.iViagTextTag.Copy( zoneTags.iZoneTag ); //Array starts from 0.
+ }
+ zoneType = ENWCityZone;
+ }
+ break;
+ // NoZone or UnknownZone
+ case ENWViagIndicatorTypeNone:
+ default:
+ break;
+ }
+
+
+ // Update the PubSub key value
+ TInt err = RProperty::Set( KPSUidNetworkInfo, KNWHomeZoneStatus, zoneType );
+ if ( err != KErrNone )
+ {
+ NWLOGSTRING2( KNWERROR,
+ "NW: CNWNetworkViagEngine::WriteViagValues: RProperty\
+ ::Set error: %d", err );
+ }
+
+ NWLOGSTRING2( KNWOBJECT,
+ "NW: CNWNetworkViagBaseEngine::WriteViagValues() Zone Text %S",
+ &iNWNetworkInfo.iViagTextTag );
+ NWLOGSTRING2( KNWINT,
+ "NW: CNWNetworkViagEngine::WriteViagValues: RProperty\
+ ::Set, zoneType = %d",
+ zoneType );
+
+ // Send upodate messages
+ SendMessage( MNWMessageObserver::ENWMessageCurrentHomeZoneMessage );
+
+ NWLOGSTRING( KNWOBJECT,
+ "NW: CNWNetworkViagBaseEngine::WriteViagValues() End" );
+ }
+
+
+// ----------------------------------------------------------------------------
+// CNWNetworkViagBaseEngine::HandleSystemEventL
+// Handles system events.
+// ----------------------------------------------------------------------------
+//
+void CNWNetworkViagBaseEngine::HandleSystemEventL(
+ const TInt aValue,
+ const TInt aState )
+ {
+
+ NWLOGSTRING( KNWOBJECT,
+ "NW: CNWNetworkViagBaseEngine::HandleSystemEventL() -- Begin -- ");
+ NWLOGSTRING2( KNWOBJECT,
+ "NW: CNWNetworkViagBaseEngine :: State : %d", aState );
+ NWLOGSTRING2( KNWOBJECT,
+ "NW: CNWNetworkViagBaseEngine :: aValue : %d", aValue );
+
+ if ( aValue == KPSSimStatus && aState == ESimUsable )
+ {
+ NWLOGSTRING( KNWOBJECT, "NW: CNWNetworkViagBaseEngine ::1");
+
+ if ( !iSimOk )
+ {
+ NWLOGSTRING( KNWOBJECT,
+ "NW: CNWNetworkViagBaseEngine::HandleSystemEventL()\
+ -- SIM OK -- ");
+ iSimOk = ETrue;
+ CellReselection();
+ }
+ }
+ if ( aValue == KCTsyCallState && iInitReady == EInitReady )
+ {
+ if ( aState == EPSCTsyCallStateDialling ||
+ aState == EPSCTsyCallStateRinging ||
+ aState == EPSCTsyCallStateAlerting )
+ {
+ iActiveCall = ETrue;
+ WriteViagValues( ENWViagIndicatorTypeNone, KNWzero );
+ }
+
+ else if ( aState == EPSCTsyCallStateNone )
+ {
+ iActiveCall = EFalse;
+ StartTimer();
+ }
+ }
+
+ NWLOGSTRING( KNWOBJECT,
+ "NW: CNWNetworkViagBaseEngine::HandleSystemEventL() -- End -- ");
+ }
+
+
+// ----------------------------------------------------------------------------
+// CNWNetworkViagBaseEngine::IsViagImsi
+// Checks if we got Viag SIM card in ME.
+// SubscriberId is checked in the CNWNetworkCommand-class. Viag IMSI has fixed
+// prefix which we compare here.
+// (other items were commented in a header).
+// ----------------------------------------------------------------------------
+//
+TBool CNWNetworkViagBaseEngine::IsViagImsi( ) const
+ {
+ NWLOGSTRING( KNWOBJECT,
+ "NW: CNWNetworkViagBaseEngine::IsViagImsi() Begin" );
+
+ TBool ret( EFalse );
+
+ TNWSubscriberId subId( iInterNetworkInfo.iSubscriberId );
+
+ NWLOGSTRING2( KNWINT,
+ "NW: CNWNetworkViagBaseEngine::IsViagImsi, subId = %S", &subId );
+
+ if ( subId.Length() >= KNWViagMinImsiLength )
+ {
+ ret = subId.Left( KNWViagMinImsiLength ).
+ Compare( KNWViagImsiIdentity ) == KErrNone;
+ //Checks 3g Viag SIM.
+ if ( !ret )
+ {
+ ret = subId.Left( KNWViagMinImsiLength ).
+ Compare( KNWViagImsi3gIdentity ) == KErrNone;
+ }
+ }
+
+ NWLOGSTRING2( KNWOBJECT,
+ "NW: CNWNetworkViagBaseEngine::IsViagImsi() End, \
+ ret = %d", ret );
+
+ return ret;
+ }
+
+// ----------------------------------------------------------------------------
+// CNWNetworkViagBaseEngine::StartupReady
+// Start Sat Server if it is not started in start up.
+// ----------------------------------------------------------------------------
+//
+void CNWNetworkViagBaseEngine::StartupReadyL()
+ {
+ NWLOGSTRING( KNWOBJECT,
+ "NW: CNWNetworkViagBaseEngine::StartupReadyL() Begin" );
+
+ // Sat server is not up in starup
+ if ( !iViagRefresh )
+ {
+ NWLOGSTRING( KNWOBJECT,
+ "NW: CNWNetworkViagBaseEngine::StartupReady() \
+ Creating ViagRefresh ");
+
+ iViagRefresh = CNWNetworkViagRefresh::NewL(
+ *this, iCustomAPI, *iViagSimReader, iReadingOnGoing );
+
+ NWLOGSTRING( KNWOBJECT,
+ "NW: CNWNetworkViagBaseEngine::StartupReady() \
+ Creating ViagRefresh ");
+ iOwner.HandleCellReselection();
+ }
+
+ NWLOGSTRING( KNWOBJECT,
+ "NW: CNWNetworkViagBaseEngine::StartupReadyL() End" );
+ }
+
+// ----------------------------------------------------------------------------
+// CNWNetworkViagBaseEngine::SetZoneTag
+// Sets Zone tags to the zonetags Array.
+// ----------------------------------------------------------------------------
+//
+void CNWNetworkViagBaseEngine::SetZoneTag(
+ TInt aZoneId, const TDesC& aZoneText )
+ {
+ NWLOGSTRING( KNWOBJECT, "NW: CNWNetworkViagBaseEngine::SetZoneTag()begin ");
+ NWLOGSTRING2( KNWOBJECT,
+ "NW: CNWNetworkViagBaseEngine::SetZoneTag() aZoneId = %d", aZoneId );
+ if ( aZoneId < iZoneTags->Count() )
+ {
+ TNWZoneTags& zoneTag = iZoneTags->At(aZoneId);
+ zoneTag.iZoneTag.Copy( aZoneText.Left(KNWZoneTagLength) );
+ NWLOGSTRING2( KNWOBJECT,
+ "NW: CNWNetworkViagBaseEngine::SetZoneTag() aZoneText = %S",
+ &(zoneTag.iZoneTag ));
+ }
+ NWLOGSTRING( KNWOBJECT, "NW: CNWNetworkViagBaseEngine::SetZoneTag() end ");
+ }
+
+// ----------------------------------------------------------------------------
+// CNWNetworkViagBaseEngine::CompleteRefresh
+// Calls RefreshEFRead Method to complete refresh.
+// ----------------------------------------------------------------------------
+//
+void CNWNetworkViagBaseEngine::CompleteRefresh()
+ {
+ NWLOGSTRING( KNWOBJECT,
+ "NW: CNWNetworkViagBaseEngine::CompleteRefresh() Begin ");
+ NWLOGSTRING2( KNWINT,
+ "NW: CNWNetworkViagBaseEngine::CompleteRefresh(),\
+ ReadingOnGoing = %d",iReadingOnGoing );
+ NWLOGSTRING3( KNWINT,
+ "NW: CNWNetworkViagBaseEngine::CompleteRefresh(), \
+ iSPNEFRead = %d, iNPNEFRead = %d", iSPNEFRead, iNPNEFRead );
+ NWLOGSTRING3( KNWINT,
+ "NW: CNWNetworkViagBaseEngine::CompleteRefresh(), \
+ iProgEFRead = %d, iViagEFRead = %d", iProgEFRead, iViagEFRead );
+
+ if ( iSPNEFRead && iNPNEFRead && iProgEFRead && iViagEFRead )
+ {
+ NWLOGSTRING( KNWOBJECT,
+ "NW: CNWNetworkViagBaseEngine::RefreshEFRead() called ");
+ iViagRefresh->RefreshEFRead();
+ if ( iViagActiveAlgo == EWNAlgoLc )
+ {
+ CellReselection();
+ }
+ }
+ NWLOGSTRING( KNWOBJECT,
+ "NW: CNWNetworkViagBaseEngine::CompleteRefresh() End ");
+ }
+
+// ----------------------------------------------------------------------------
+// CNWNetworkViagBaseEngine::UpdateEFReadingState
+// Calls RefreshEFRead Method to complete refresh.
+// ----------------------------------------------------------------------------
+//
+void CNWNetworkViagBaseEngine::UpdateEFReadingState(
+ const TNWRead& aElementFile, TBool aReadStatus )
+ {
+ NWLOGSTRING( KNWOBJECT,
+ "NW: CNWNetworkViagBaseEngine::UpdateEFReadingState() Begin ");
+ NWLOGSTRING2( KNWINT,
+ "NW: CNWNetworkViagBaseEngine::UpdateEFReadingState(),\
+ aElementFile = %d; SPN = 0, NPN = 1, ProgOPN = 2, ViagHZ = 3",
+ ( TInt )aElementFile );
+ NWLOGSTRING2( KNWINT,
+ "NW: CNWNetworkViagBaseEngine::UpdateEFReadingState(), \
+ aReadStatus = %d",aReadStatus );
+ NWLOGSTRING2( KNWINT,
+ "NW: CNWNetworkViagBaseEngine::UpdateEFReadingState(), \
+ iReadingOnGoing = %d", iReadingOnGoing );
+
+ if ( iReadingOnGoing )
+ {
+ switch ( aElementFile )
+ {
+ case ESPNEFRead:
+ {
+ iSPNEFRead = aReadStatus;
+ break;
+ }
+ case ENPNEFRead:
+ {
+ iNPNEFRead = aReadStatus;
+ break;
+ }
+ case EProgEFRead:
+ {
+ iProgEFRead = aReadStatus;
+ break;
+ }
+ case EViagEFRead:
+ {
+ iViagEFRead = aReadStatus;
+ break;
+ }
+ case EFullFileChange:
+ {
+ iSPNEFRead = aReadStatus;
+ iNPNEFRead = aReadStatus;
+ iProgEFRead = aReadStatus;
+ iViagEFRead = aReadStatus;
+ break;
+ }
+ default:
+ break;
+ }
+ if ( aReadStatus )
+ {
+ CompleteRefresh();
+ }
+ }
+ NWLOGSTRING( KNWOBJECT,
+ "NW: CNWNetworkViagBaseEngine::UpdateEFReadingState() End ");
+ }
+
+// ----------------------------------------------------------------------------
+// CNWNetworkViagBaseEngine::StartTimer
+// Starts the timer for waiting Cell change notification.
+// ----------------------------------------------------------------------------
+//
+void CNWNetworkViagBaseEngine::StartTimer()
+ {
+ NWLOGSTRING( KNWOBJECT,
+ "NW: CNWNetworkViagBaseEngine::StartTimer() Begin ");
+
+ StopTimer();
+ if( iTimer )
+ {
+ iTimer->After( KNWTimeOut, this ); // 2 sec
+ }
+
+ NWLOGSTRING( KNWOBJECT,
+ "NW: CNWNetworkViagBaseEngine::StartTimer() End ");
+ }
+
+// ----------------------------------------------------------------------------
+// CNWNetworkViagBaseEngine::StopTimer
+// Stops the timer
+// ----------------------------------------------------------------------------
+//
+void CNWNetworkViagBaseEngine::StopTimer()
+ {
+ NWLOGSTRING( KNWOBJECT,
+ "NW: CNWNetworkViagBaseEngine::StopTimer() Begin ");
+
+ if( iTimer )
+ {
+ iTimer->Cancel();
+ }
+
+ NWLOGSTRING( KNWOBJECT,
+ "NW: CNWNetworkViagBaseEngine::StopTimer() End ");
+ }
+
+// ----------------------------------------------------------------------------
+// CNWNetworkViagBaseEngine::HandleTimeOut
+// Calls CellReselection if no notification came.
+// ----------------------------------------------------------------------------
+//
+void CNWNetworkViagBaseEngine::HandleTimeOut()
+ {
+ NWLOGSTRING( KNWOBJECT,
+ "NW: CNWNetworkViagBaseEngine::HandleTimeOut() Begin ");
+ CellReselection();
+ NWLOGSTRING( KNWOBJECT,
+ "NW: CNWNetworkViagBaseEngine::HandleTimeOut() End ");
+ }
+
+// -----------------------------------------------------------------------------
+// CNWNetworkViagBaseEngine::InitializeCharSetConverterL
+// Initializes CharacterSetConverter and connects to file server session
+// -----------------------------------------------------------------------------
+//
+void CNWNetworkViagBaseEngine::InitializeCharSetConverterL()
+ {
+ NWLOGSTRING( KNWOBJECT, "NW: CNWNetworkViagBaseEngine::InitalizecharSetConverterL() ");
+ User::LeaveIfError( iFs.Connect() );
+ iCharacterSetConverter = CCnvCharacterSetConverter::NewL();
+
+ CCnvCharacterSetConverter::TAvailability availability = iCharacterSetConverter->PrepareToConvertToOrFromL(
+ KCharacterSetIdentifierSms7Bit, iFs );
+
+ if ( availability == CCnvCharacterSetConverter::ENotAvailable )
+ {
+ delete iCharacterSetConverter;
+ iCharacterSetConverter = NULL;
+ }
+ NWLOGSTRING( KNWOBJECT, "NW: CNWNetworkViagBaseEngine::InitalizecharSetConverterL() end");
+ }
+
+// -----------------------------------------------------------------------------
+// CNWNetworkViagBaseEngine::DefaultAlphabetDecode
+// Decodes 7-bit text representation.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CNWNetworkViagBaseEngine::DefaultAlphabetDecode(
+ const TDesC8& aTag, TDes& aZoneText )
+ {
+ NWLOGSTRING( KNWOBJECT, "NW: CNWNetworkViagBaseEngine::DefaultAlphabetDecode()");
+ // Start conversion
+ aZoneText.Copy( aTag );
+ TBuf16<KNWZoneTagLength> generatedUnicode;
+ TInt state( CCnvCharacterSetConverter::KStateDefault ); // has to be ref.
+ if ( iCharacterSetConverter )
+ {
+ TInt returnValue = iCharacterSetConverter->ConvertToUnicode(
+ generatedUnicode, aTag, state );
+
+ // returnValue contains the number of characters that were not converted or
+ // error value.
+ if ( returnValue >= KErrNone )
+ {
+ aZoneText.Copy( generatedUnicode );
+ }
+ }
+ NWLOGSTRING( KNWOBJECT, "NW: CNWNetworkViagBaseEngine::DefaultAlphabetDecode() end");
+ }
+
+// End of File