--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookengines/VirtualPhonebook/VPbkSimStoreImpl/src/CServiceTableCmd.cpp Wed Sep 01 12:29:52 2010 +0100
@@ -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 <VPbkDebug.h>
+#include <etelmm.h>
+#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