diff -r 000000000000 -r 2e3d3ce01487 coreapplicationuis/SysAp/Src/SysApEtelConnector.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/coreapplicationuis/SysAp/Src/SysApEtelConnector.cpp Tue Feb 02 10:12:00 2010 +0200 @@ -0,0 +1,371 @@ +/* +* Copyright (c) 2004 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: CSysApEtelConnector implementation. +* +*/ + + +// INCLUDE FILES +#include +#include +#include "SysApAppUi.h" +#include "SysApEtelConnector.h" +#include "SysApEtelNetworkStatusNspsObserver.h" +#include "SysApEtelSmsStoreObserver.h" +#include "SysApEtelNetworkBarObserver.h" +#include "sysapeteldatabearerobserver.h" +#include "sysapetelnetworkinfoobserver.h" +#include "SysApFeatureManager.h" + +// ============================ MEMBER FUNCTIONS ============================== + +// ---------------------------------------------------------------------------- +// C++ default constructor can NOT contain any code, that +// might leave. +// ---------------------------------------------------------------------------- + +CSysApEtelConnector::CSysApEtelConnector( CSysApAppUi& aSysApAppUi ) : + iSysApEtelNetworkStatusNspsObserver( NULL ), + iSysApAppUi( aSysApAppUi ), + iSysApEtelNetworkBarObserver( NULL ), + iSysApEtelSmsStoreObserver( NULL ), + iSysApEtelDataBearerObserver( NULL ), + iSysApEtelNetworkInfoObserver( NULL ) + { + } + +// ---------------------------------------------------------------------------- +// CSysApEtelConnector::ConstructL() +// ---------------------------------------------------------------------------- + +void CSysApEtelConnector::ConstructL() + { + TRACES( RDebug::Print( _L("CSysApEtelConnector::ConstructL: START") ) ); + TInt err( KErrGeneral ); + TInt thisTry( 0 ); + /* Server connections are tried KTriesToConnectServer times because occasional + fails on connections are possible at least on some servers */ + + TRACES( RDebug::Print( _L("CSysApEtelConnector::ConstructL: trying RTelServer::Connect()") ) ); + while ( ( err = iEtelServer.Connect() ) != KErrNone && ( thisTry++ ) <= KTriesToConnectServer ) + { + TRACES( RDebug::Print( _L("CSysApEtelConnector::ConstructL: RTelServer::Connect() failed. Error: %d"), err ) ); + User::After( KTimeBeforeRetryingServerConnection ); + } + User::LeaveIfError( err ); + + TRACES( RDebug::Print( _L("CSysApEtelConnector::ConstructL: trying RTelServer::LoadPhoneModule()") ) ); + err = iEtelServer.LoadPhoneModule( KMmTsyModuleName ); + while ( ( err != KErrNone ) && ( err != KErrAlreadyExists ) && ( thisTry++ ) <= KTriesToConnectServer ) + { + TRACES( RDebug::Print( _L("CSysApEtelConnector::ConstructL: RTelServer::LoadPhoneModule() failed. Error: %d"), err ) ); + User::After( KTimeBeforeRetryingServerConnection ); + err = iEtelServer.LoadPhoneModule( KMmTsyModuleName ); + } + User::LeaveIfError( err ); + + thisTry = 0; + TRACES( RDebug::Print( _L("CSysApEtelConnector::ConstructL: trying RMobilePhone::Open()") ) ); + while ( ( err = iPhone.Open( iEtelServer, KMmTsyPhoneName ) ) != KErrNone && ( thisTry++ ) <= KTriesToConnectServer ) + { + TRACES( RDebug::Print( _L("CSysApEtelConnector::ConstructL: RMobilePhone::Open() failed. Error: %d"), err ) ); + User::After( KTimeBeforeRetryingServerConnection ); + } + User::LeaveIfError( err ); + + thisTry = 0; + TRACES( RDebug::Print( _L("CSysApEtelConnector::ConstructL: trying RMmCustomAPI::Open()") ) ); + while ( ( err = iCustomAPI.Open( iPhone ) ) != KErrNone && ( thisTry++ ) <= KTriesToConnectServer ) + { + TRACES( RDebug::Print( _L("CSysApEtelConnector::ConstructL: RMmCustomAPI::Open() failed. Error: %d"), err ) ); + User::After( KTimeBeforeRetryingServerConnection ); + } + User::LeaveIfError( err ); + + // Connect to SMS messaging + thisTry = 0; + TRACES( RDebug::Print( _L("CSysApEtelConnector::ConstructL: trying RMobileSmsMessaging::Open()") ) ); + while ( ( err = iSmsMessaging.Open( iPhone ) ) != KErrNone && ( thisTry++ ) <= KTriesToConnectServer ) + { + TRACES( RDebug::Print( _L("CSysApEtelConnector::ConstructL: RMobileSmsMessaging::Open() failed. Error: %d"), err ) ); + User::After( KTimeBeforeRetryingServerConnection ); + } + User::LeaveIfError( err ); + + // Connect to SMS message store + thisTry = 0; + TRACES( RDebug::Print( _L("CSysApEtelConnector::ConstructL: trying RMobileSmsStore::Open()") ) ); + while ( ( err = iSmsStore.Open( iSmsMessaging, KETelIccSmsStore ) ) != KErrNone && ( thisTry++ ) <= KTriesToConnectServer ) + { + TRACES( RDebug::Print( _L("CSysApEtelConnector::ConstructL: RMobileSmsStore::Open() failed. Error: %d"), err ) ); + User::After( KTimeBeforeRetryingServerConnection ); + } + User::LeaveIfError( err ); + + // Initialize SMS Message store observer + iSysApEtelSmsStoreObserver = CSysApEtelSmsStoreObserver::NewL( iSysApAppUi, iSmsStore ); + + iSysApEtelNetworkStatusNspsObserver = new( ELeave ) CSysApEtelNetworkStatusNspsObserver( iSysApAppUi, iCustomAPI ); + + iSysApEtelNetworkBarObserver = CSysApEtelNetworkBarObserver::NewL(iSysApAppUi, iPhone); + + iSysApEtelDataBearerObserver = CSysApEtelDataBearerObserver::NewL( iSysApAppUi, iPhone ); + + if ( iSysApAppUi.SysApFeatureManager().Supported( KSysApFeatureIdUseHsdpaAvailableIcon ) ) + { + iSysApEtelNetworkInfoObserver = CSysApEtelNetworkInfoObserver::NewL( iSysApAppUi, iPhone, iCustomAPI ); + } + + TRACES( RDebug::Print( _L("CSysApEtelConnector::ConstructL: END") ) ); +} + +// ---------------------------------------------------------------------------- +// CSysApEtelConnector::CommandNetCsWakeupOnNsps() +// ---------------------------------------------------------------------------- + +void CSysApEtelConnector::CommandNetCsWakeupOnNsps() + { + iSysApEtelNetworkStatusNspsObserver->CommandNetCsWakeupOnNsps(); + } + +// ---------------------------------------------------------------------------- +// CSysApEtelConnector::GetSignalBars() +// ---------------------------------------------------------------------------- + +TInt CSysApEtelConnector::GetSignalBars() const + { + return iSysApEtelNetworkBarObserver->GetBarCount(); + } + +// ---------------------------------------------------------------------------- +// CSysApEtelConnector::GetTelServer() +// ---------------------------------------------------------------------------- + +RTelServer* CSysApEtelConnector::GetTelServer() + { + return &iEtelServer; + } + +// ---------------------------------------------------------------------------- +// CSysApEtelConnector::NewL( CSysApAppUi& aSysApAppUi ) +// ---------------------------------------------------------------------------- + +CSysApEtelConnector* CSysApEtelConnector::NewL( CSysApAppUi& aSysApAppUi ) + { + TRACES( RDebug::Print( _L("CSysApEtelConnector::NewL") ) ); + CSysApEtelConnector* self = new (ELeave) CSysApEtelConnector( aSysApAppUi ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(); + return self; + } + +// ---------------------------------------------------------------------------- +// CSysApEtelConnector::~CSysApEtelConnector() +// ---------------------------------------------------------------------------- + +CSysApEtelConnector::~CSysApEtelConnector() + { + TRACES( RDebug::Print( _L("CSysApEtelConnector::~CSysApEtelConnector") ) ); + delete iSysApEtelNetworkStatusNspsObserver; + delete iSysApEtelNetworkBarObserver; + + delete iSysApEtelSmsStoreObserver; + + iSmsStore.Close(); + iSmsMessaging.Close(); + + delete iSysApEtelDataBearerObserver; + delete iSysApEtelNetworkInfoObserver; + + iCustomAPI.Close(); + iPhone.Close(); + iEtelServer.Close(); + } + + +// ---------------------------------------------------------------------------- +// CSysApEtelConnector::AlsSupported() +// ---------------------------------------------------------------------------- + +TBool CSysApEtelConnector::AlsSupported() const + { + TBool alsSupported = AlsPpOnOff(); + // if ALS product profile is TRUE then ALS supported and there + // is no reason to check AlsSupported info. + + if ( !alsSupported ) + { + // ALS Product Profile is Off then we must check ALS support by + // using AlsSimSupport since it check SIM ALS support information. + alsSupported = AlsSimSupport(); + } + + TRACES( RDebug::Print( _L("CSysApEtelConnector::AlsSupported: alsSupported=%d"), + alsSupported ) ); + + return alsSupported; + } + +// ---------------------------------------------------------------------------- +// CSysApEtelConnector::IsBearerHsdpa() +// ---------------------------------------------------------------------------- + +TBool CSysApEtelConnector::IsBearerHsdpa() const + { + return iSysApEtelDataBearerObserver->IsBearerHsdpa(); + } + +// ---------------------------------------------------------------------------- +// CSysApEtelConnector::HsdpaAvailable() +// ---------------------------------------------------------------------------- + +TBool CSysApEtelConnector::HsdpaAvailable() const + { + if ( iSysApEtelNetworkInfoObserver ) // observer created only if availability icon is supported + { + return iSysApEtelNetworkInfoObserver->HsdpaAvailable(); + } + else + { + return EFalse; + } + } + +// ---------------------------------------------------------------------------- +// CSysApEtelConnector::AlsPpOnOff() +// ---------------------------------------------------------------------------- + +TBool CSysApEtelConnector::AlsPpOnOff() const + { + RMmCustomAPI::TAlsSupport ppAlsSupport; + TBool alsPpOnOff(EFalse); + TInt err = iCustomAPI.CheckAlsPpSupport( ppAlsSupport ); + + if ( ( err == KErrNone ) && ( ppAlsSupport == RMmCustomAPI::EAlsSupportOn ) ) + { + alsPpOnOff = ETrue; + } + + TRACES( RDebug::Print( _L("CSysApEtelConnector::AlsPpOnOff: alsPpOnOff=%d, err=%d"), alsPpOnOff, err ) ); + + return alsPpOnOff; + } + +// ---------------------------------------------------------------------------- +// CSysApEtelConnector::AlsCspOnOff() +// ---------------------------------------------------------------------------- + +TBool CSysApEtelConnector::AlsCspOnOff() const + { + TBool alsCspOnOff( EFalse ); + RMobilePhone::TMobilePhoneCspFileV1 cspFile; + RMobilePhone::TMobilePhoneCspFileV1Pckg cspFilePckg( cspFile ); + TRequestStatus status; + iPhone.GetCustomerServiceProfile( status, cspFilePckg ); + User::WaitForRequest( status ); + TInt err( status.Int() ); + if ( err == KErrNone && ( cspFile.iCphsTeleservices & RMobilePhone::KCspALS ) ) + { + alsCspOnOff = ETrue; + } + + TRACES( RDebug::Print( _L("CSysApEtelConnector::AlsCspOnOff: alsCspOnOff=%d, err=%d, cphs=%d"), + alsCspOnOff, err, cspFile.iCphsTeleservices ) ); + + return alsCspOnOff; + } + +// ---------------------------------------------------------------------------- +// CSysApEtelConnector::AlsSimSupport() +// ---------------------------------------------------------------------------- + +TBool CSysApEtelConnector::AlsSimSupport() const + { + RMobilePhone::TMobilePhoneALSLine alsLine( RMobilePhone::EAlternateLineNotAvailable ); + TBool alsSupported( EFalse ); + + if ( AlsCspOnOff() ) + { + if ( iPhone.GetALSLine( alsLine ) == KErrNone ) + { + switch ( alsLine ) + { + case RMobilePhone::EAlternateLinePrimary: + case RMobilePhone::EAlternateLineAuxiliary: + case RMobilePhone::EAlternateLineUnknown: + alsSupported = ETrue; + break; + + default: + case RMobilePhone::EAlternateLineNotAvailable: + alsSupported = EFalse; + break; + } + } + } + + TRACES( RDebug::Print( _L("CSysApEtelConnector::AlsSimSupport: alsLine=%d, alsSupported=%d"), + alsLine, alsSupported ) ); + + return alsSupported; + } + +// ---------------------------------------------------------------------------- +// CSysApEtelConnector::IsSimSmsStoreFull() +// ---------------------------------------------------------------------------- + +TBool CSysApEtelConnector::IsSimSmsStoreFull() const + { + return iSysApEtelSmsStoreObserver->IsFull(); + } + +// ---------------------------------------------------------------------------- +// CSysApEtelConnector::ReadSimSmsStoreStatusInStartup() +// ---------------------------------------------------------------------------- + +void CSysApEtelConnector::ReadSimSmsStoreStatusInStartup() + { + iSysApEtelSmsStoreObserver->ReadStatusInStartup(); + } + +// ---------------------------------------------------------------------------- +// CSysApEtelConnector::SimCallDivertEfSupported() +// ---------------------------------------------------------------------------- + +TBool CSysApEtelConnector::SimCallDivertEfSupported() const + { +#ifndef __WINS__ // ETel panics due to TSY stub returning KErrNotSupported in emulator + TRequestStatus status; + RMmCustomAPI::TCFIndicators cfIndicators; + RMmCustomAPI::TCFIndicatorsPckg cfIndicatorPckg( cfIndicators ); + + iCustomAPI.GetIccCallForwardingIndicatorStatus( status, cfIndicatorPckg ); + User::WaitForRequest( status ); + + TInt err( status.Int() ); + + TRACES( RDebug::Print( _L("CSysApEtelConnector::SimCallDivertEfSupported: err=%d"), err ) ); + + // KErrNotFound explicitly states that CF-EF is not present in the SIM, but it is probably + // safer to assume no support for CF-EF also with other error values + return ( err == KErrNone ); +#else // __WINS__ + return EFalse; +#endif // __WINS__ + } + +// End of File + +