diff -r 000000000000 -r e686773b3f54 phonebookengines/VirtualPhonebook/VPbkSimStoreImpl/src/CServiceTableCmd.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phonebookengines/VirtualPhonebook/VPbkSimStoreImpl/src/CServiceTableCmd.cpp Tue Feb 02 10:12:17 2010 +0200 @@ -0,0 +1,331 @@ +/* +* 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: A command that queries (U)SIM service table and checks +* if the store is supported. Updates the data in CVPbkPhone +* so this command is needs to run only once. +* +*/ + + + +// INCLUDE FILES +#include "CServiceTableCmd.h" + +#include +#include +#include "CPhone.h" +#include "VPbkSimStoreImplError.h" + +namespace VPbkSimStoreImpl { + +// ============================= LOCAL FUNCTIONS =============================== + +namespace { + +#ifdef VPBK_ENABLE_DEBUG_PRINT + +void PrintETelServiceTable( RMobilePhone::TMobilePhoneServiceTableV1& aTable ) + { + VPBK_DEBUG_PRINT(VPBK_DEBUG_STRING( + "VPbkSimStoreImpl: ETel iServices1To8: %b"), + aTable.iServices1To8 ); + VPBK_DEBUG_PRINT(VPBK_DEBUG_STRING( + "VPbkSimStoreImpl: ETel iServices9To16: %b"), + aTable.iServices9To16 ); + VPBK_DEBUG_PRINT(VPBK_DEBUG_STRING( + "VPbkSimStoreImpl: ETel iServices17To24: %b"), + aTable.iServices17To24 ); + VPBK_DEBUG_PRINT(VPBK_DEBUG_STRING( + "VPbkSimStoreImpl: ETel iServices25To32: %b"), + aTable.iServices25To32 ); + VPBK_DEBUG_PRINT(VPBK_DEBUG_STRING( + "VPbkSimStoreImpl: ETel iServices33To40: %b"), + aTable.iServices33To40 ); + VPBK_DEBUG_PRINT(VPBK_DEBUG_STRING( + "VPbkSimStoreImpl: ETel iServices41To48: %b"), + aTable.iServices41To48 ); + VPBK_DEBUG_PRINT(VPBK_DEBUG_STRING( + "VPbkSimStoreImpl: ETel iServices49To56: %b"), + aTable.iServices49To56 ); + } + +#endif // VPBK_ENABLE_DEBUG_PRINT + + +// ----------------------------------------------------------------------------- +// ConvertUST. +// Converts USIM service table +// ----------------------------------------------------------------------------- +// +inline void ConvertUST( RMobilePhone::TMobilePhoneServiceTableV1& aTable, + TUint32& aServiceTable ) + { + VPBK_DEBUG_PRINT(VPBK_DEBUG_STRING( + "VPbkSimStoreImpl: CServiceTableCmd::ConvertUST")); + +#ifdef VPBK_ENABLE_DEBUG_PRINT + PrintETelServiceTable( aTable ); +#endif // VPBK_ENABLE_DEBUG_PRINT + + aServiceTable = 0; + // ADN is always supported + aServiceTable |= MVPbkSimPhone::KVPbkCapsADNSupported; + + if ( aTable.iServices1To8 & RMobilePhone::KUstLocalPhBk ) + { + VPBK_DEBUG_PRINT(VPBK_DEBUG_STRING( + "VPbkSimStoreImpl: CServiceTableCmd::ConvertUST, local Pbk supported")); + } + + if ( aTable.iServices1To8 & RMobilePhone::KUstSDN ) + { + VPBK_DEBUG_PRINT(VPBK_DEBUG_STRING( + "VPbkSimStoreImpl: CServiceTableCmd::ConvertUST, SDN supported")); + aServiceTable |= MVPbkSimPhone::KVPbkCapsSDNSupported; + } + else + { + VPBK_DEBUG_PRINT(VPBK_DEBUG_STRING( + "VPbkSimStoreImpl: CServiceTableCmd::ConvertUST, SDN not supported")); + aServiceTable &= ~MVPbkSimPhone::KVPbkCapsSDNSupported; + } + + if ( aTable.iServices1To8 & RMobilePhone::KUstFDN ) + { + VPBK_DEBUG_PRINT(VPBK_DEBUG_STRING( + "VPbkSimStoreImpl: CServiceTableCmd::ConvertUST, FDN supported")); + aServiceTable |= MVPbkSimPhone::KVPbkCapsFDNSupported; + } + else + { + VPBK_DEBUG_PRINT(VPBK_DEBUG_STRING( + "VPbkSimStoreImpl: CServiceTableCmd::ConvertUST, FDN not supported")); + aServiceTable &= ~MVPbkSimPhone::KVPbkCapsFDNSupported; + } + + if( aTable.iServices17To24 & RMobilePhone::KUstMSISDN ) + { + VPBK_DEBUG_PRINT(VPBK_DEBUG_STRING( + "VPbkSimStoreImpl: CServiceTableCmd::ConvertUST, ON supported")); + aServiceTable |= MVPbkSimPhone::KVPbkCapsONSupported; + } + else + { + VPBK_DEBUG_PRINT(VPBK_DEBUG_STRING( + "VPbkSimStoreImpl: CServiceTableCmd::ConvertUST, ON not supported")); + aServiceTable &= ~MVPbkSimPhone::KVPbkCapsONSupported; + } + } + +// ----------------------------------------------------------------------------- +// ConvertSST. +// Converts SIM service table +// ----------------------------------------------------------------------------- +// +inline void ConvertSST( RMobilePhone::TMobilePhoneServiceTableV1& aTable, + TUint32& aServiceTable ) + { + VPBK_DEBUG_PRINT(VPBK_DEBUG_STRING( + "VPbkSimStoreImpl: CServiceTableCmd::ConvertSST")); + + // ADN is always supported + aServiceTable |= MVPbkSimPhone::KVPbkCapsADNSupported; + + if ( aTable.iServices17To24 & RMobilePhone::KSstSDN ) + { + VPBK_DEBUG_PRINT(VPBK_DEBUG_STRING( + "VPbkSimStoreImpl: CServiceTableCmd::ConvertSST, SDN supported")); + aServiceTable |= MVPbkSimPhone::KVPbkCapsSDNSupported; + } + else + { + VPBK_DEBUG_PRINT(VPBK_DEBUG_STRING( + "VPbkSimStoreImpl: CServiceTableCmd::ConvertSST, SDN not supported")); + aServiceTable &= ~MVPbkSimPhone::KVPbkCapsSDNSupported; + } + + if ( aTable.iServices1To8 & RMobilePhone::KSstFDN ) + { + VPBK_DEBUG_PRINT(VPBK_DEBUG_STRING( + "VPbkSimStoreImpl: CServiceTableCmd::ConvertSST, FDN supported")); + aServiceTable |= MVPbkSimPhone::KVPbkCapsFDNSupported; + } + else + { + VPBK_DEBUG_PRINT(VPBK_DEBUG_STRING( + "VPbkSimStoreImpl: CServiceTableCmd::ConvertSST, FDN not supported")); + aServiceTable &= ~MVPbkSimPhone::KVPbkCapsFDNSupported; + } + + if( aTable.iServices9To16 & RMobilePhone::KSstMSISDN ) + { + VPBK_DEBUG_PRINT(VPBK_DEBUG_STRING( + "VPbkSimStoreImpl: CServiceTableCmd::ConvertSST, ON supported")); + aServiceTable |= MVPbkSimPhone::KVPbkCapsONSupported; + } + else + { + VPBK_DEBUG_PRINT(VPBK_DEBUG_STRING( + "VPbkSimStoreImpl: CServiceTableCmd::ConvertSST, ON not supported")); + aServiceTable &= ~MVPbkSimPhone::KVPbkCapsONSupported; + } + + } +} // unnamed + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CServiceTableCmd::CServiceTableCmd +// C++ default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CServiceTableCmd::CServiceTableCmd( CPhone& aPhone, TUint32& aServiceTable ) + : CActive( EPriorityStandard ), + iPhone( aPhone ), + iVPbkServiceTable( aServiceTable ), + iServiceTablePckg( iServiceTable ) + { + CActiveScheduler::Add( this ); + } + +// Destructor +CServiceTableCmd::~CServiceTableCmd() + { + VPBK_DEBUG_PRINT(VPBK_DEBUG_STRING( + "VPbkSimStoreImpl: CServiceTableCmd::~CServiceTableCmd")); + + CancelCmd(); + } + +// ----------------------------------------------------------------------------- +// CServiceTableCmd::NewLC +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CServiceTableCmd* CServiceTableCmd::NewLC( CPhone& aPhone, + TUint32& aServiceTable ) + { + CServiceTableCmd* self = + new( ELeave ) CServiceTableCmd( aPhone, aServiceTable ); + CleanupStack::PushL( self ); + return self; + } + +// ----------------------------------------------------------------------------- +// CServiceTableCmd::Execute +// ----------------------------------------------------------------------------- +// +void CServiceTableCmd::Execute() + { + __ASSERT_DEBUG( iObserver, + VPbkSimStoreImpl::Panic( EPreCondCServiceTableCmdExecute ) ); + + RMobilePhone::TMobilePhoneServiceTable tableType = + RMobilePhone::ESIMServiceTable; + iUSimSupported = iPhone.USimAccessSupported(); + if ( iUSimSupported ) + { + tableType = RMobilePhone::EUSIMServiceTable; + } + + VPBK_DEBUG_PRINT(VPBK_DEBUG_STRING( + "VPbkSimStoreImpl: RMobilePhone::GetServiceTable h%d request,type=%d"), + iPhone.ETelPhone().SubSessionHandle(),tableType); + iPhone.ETelPhone().GetServiceTable( iStatus, tableType, + iServiceTablePckg ); + SetActive(); + } + +// ----------------------------------------------------------------------------- +// CServiceTableCmd::AddObserverL +// ----------------------------------------------------------------------------- +// +void CServiceTableCmd::AddObserverL( MVPbkSimCommandObserver& aObserver ) + { + __ASSERT_DEBUG( !iObserver, + VPbkSimStoreImpl::Panic( EPreCondCServiceTableCmdAddObserverL ) ); + iObserver = &aObserver; + } + +// ----------------------------------------------------------------------------- +// CServiceTableCmd::CancelCmd +// ----------------------------------------------------------------------------- +// +void CServiceTableCmd::CancelCmd() + { + VPBK_DEBUG_PRINT(VPBK_DEBUG_STRING( + "VPbkSimStoreImpl: CServiceTableCmd::CancelCmd")); + + Cancel(); + } + +// ----------------------------------------------------------------------------- +// CServiceTableCmd::RunL +// ----------------------------------------------------------------------------- +// +void CServiceTableCmd::RunL() + { + VPBK_DEBUG_PRINT(VPBK_DEBUG_STRING( + "VPbkSimStoreImpl: RMobilePhone::GetServiceTable h%d complete %d"), + iPhone.ETelPhone().SubSessionHandle(),iStatus.Int()); + + if ( iStatus == KErrNone ) + { + if ( iUSimSupported ) + { + ConvertUST( iServiceTable, iVPbkServiceTable ); + } + else + { + ConvertSST( iServiceTable, iVPbkServiceTable ); + } + + iObserver->CommandDone( *this ); + } + else + { + iObserver->CommandError( *this, iStatus.Int() ); + } + } + +// ----------------------------------------------------------------------------- +// CServiceTableCmd::DoCancel +// ----------------------------------------------------------------------------- +// +void CServiceTableCmd::DoCancel() + { + VPBK_DEBUG_PRINT(VPBK_DEBUG_STRING( + "VPbkSimStoreImpl: RMobilePhone::GetServiceTable h%d Cancel"), + iPhone.ETelPhone().SubSessionHandle()); + iPhone.ETelPhone().CancelAsyncRequest( EMobilePhoneGetServiceTable ); + } + +// ----------------------------------------------------------------------------- +// CServiceTableCmd::RunError +// ----------------------------------------------------------------------------- +// +TInt CServiceTableCmd::RunError( TInt aError ) + { + VPBK_DEBUG_PRINT(VPBK_DEBUG_STRING( + "VPbkSimStoreImpl: CServiceTableCmd::RunError")); + + iObserver->CommandError( *this, aError ); + + return KErrNone; + } + +} // namespace VPbkSimStoreImpl +// End of File