diff -r 510c70acdbf6 -r 8ccc39f9d787 adaptationlayer/systemstatemanageradaptation/ssm_emergencycallrf_adaptation_dll/src/ssm_emergencycallrf_adaptation.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/adaptationlayer/systemstatemanageradaptation/ssm_emergencycallrf_adaptation_dll/src/ssm_emergencycallrf_adaptation.cpp Thu Jan 14 10:44:58 2010 +0200 @@ -0,0 +1,694 @@ +/* +* ============================================================================== +* Name: ssm_emergencycallrf_adaptation.cpp +* Part of: SSMA EmergencyCallRfAdaptation +* Interface: N/A +* Description: Declaration of CEmergencyCallRfAdaptation class +* %version: 1 % +* %date_modified: Tue Dec 29 15:38:36 2009 % +* +* Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Symbian Foundation License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* Implementation of ssm_emergencycallrf_adaptation +*/ + +#include "OstTraceDefinitions.h" +#ifdef OST_TRACE_COMPILER_IN_USE +#include "ssm_emergencycallrf_adaptationtraces.h" +#endif // OST_TRACE_COMPILER_IN_USE +#include +#include +#include +#include +#include +#include "ssm_emergencycallrf_adaptation.h" +#include "ssm_emergencycallrf_trcommand.h" +#include "sa_common_isc_service.h" +#include "sa_common_trace.h" + +// EXTERNAL DATA STRUCTURES + +// EXTERNAL FUNCTIONS PROTOTYPES + +// CONSTANTS +#define MIN_ISI_MESSAGE_SIZE 36 + +// LOCAL CONSTANTS AND MACROS + +// MODULE DATA STRUCTURES + +// LOCAL FUNCTION PROTOTYPES + +// FORWARD DECLARATIONS + +// ============================= LOCAL FUNCTIONS =============================== + +// ============================ MEMBER FUNCTIONS =============================== + +/** + Function to create new Emergency Call RF Adaptation Plugin. + + @return new instance of MEmergencyCallRfAdaptation for Emergency Call RF Adaptations. + + @internalComponent + @released +*/ +EXPORT_C MEmergencyCallRfAdaptation* CreateEmergencyCallRfAdaptationL() + { + CEmergencyCallRfAdaptation* emergencyCallRfAdaptation = CEmergencyCallRfAdaptation::NewL(); + return ( static_cast ( emergencyCallRfAdaptation ) ); + } + + +// ----------------------------------------------------------------------------- +// CEmergencyCallRfAdaptation::NewL +// ----------------------------------------------------------------------------- +// +CEmergencyCallRfAdaptation* CEmergencyCallRfAdaptation::NewL() + { + OstTrace0( TRACE_NORMAL, CEMERGENCYCALLRFADAPTATION_NEWL_1, + "SSMA # CEmergencyCallRfAdaptation::NewL" ); + INTERNAL_TRACE( _L( "SSMA # CEmergencyCallRfAdaptation::NewL" ) ); + + CEmergencyCallRfAdaptation* self = new(ELeave) CEmergencyCallRfAdaptation; + + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + + OstTrace1( TRACE_API, CEMERGENCYCALLRFADAPTATION_NEWL_2, + "SSMA # CEmergencyCallRfAdaptation::NewL - return 0x%08x", self ); + API_TRACE((_L("SSMA # CEmergencyCallRfAdaptation::NewL - return 0x%08x"), self )); + return self; + } + + +// ----------------------------------------------------------------------------- +// CEmergencyCallRfAdaptation::~CEmergencyCallRfAdaptation +// ----------------------------------------------------------------------------- +// +CEmergencyCallRfAdaptation::~CEmergencyCallRfAdaptation() + { + OstTrace0( TRACE_NORMAL, CEMERGENCYCALLRFADAPTATION_CEMERGENCYCALLRFADAPTATION_D1, + "SSMA # CEmergencyCallRfAdaptation::~CEmergencyCallRfAdaptation" ); + INTERNAL_TRACE( _L( "SSMA # CEmergencyCallRfAdaptation::~CEmergencyCallRfAdaptation" ) ); + + /* Delete the list of ongoing transactions */ + iTransactionPtr.ResetAndDestroy(); + + /* Delete iCSACommonIscServicePtr */ + if ( iCSACommonIscServicePtr ) + { + OstTrace0( TRACE_API, CEMERGENCYCALLRFADAPTATION_CEMERGENCYCALLRFADAPTATION_D2, + "SSMA - CEmergencyCallRfAdaptation::~CEmergencyCallRfAdaptation - Delete iCSACommonIscServicePtr" ); + API_TRACE((_L( "SSMA - CEmergencyCallRfAdaptation::~CEmergencyCallRfAdaptation - Delete iCSACommonIscServicePtr" ))); + + delete iCSACommonIscServicePtr; + iCSACommonIscServicePtr = NULL; + } + + OstTrace0( TRACE_NORMAL, CEMERGENCYCALLRFADAPTATION_CEMERGENCYCALLRFADAPTATION_D3, + "SSMA # CEmergencyCallRfAdaptation::~CEmergencyCallRfAdaptation - return void" ); + INTERNAL_TRACE((_L("SSMA # CEmergencyCallRfAdaptation::~CEmergencyCallRfAdaptation - return void"))); + + } + + +// ----------------------------------------------------------------------------- +// CEmergencyCallRfAdaptation::CEmergencyCallRfAdaptation +// ----------------------------------------------------------------------------- +// +CEmergencyCallRfAdaptation::CEmergencyCallRfAdaptation() + : iTransId(0) + { + OstTrace0( TRACE_NORMAL, CEMERGENCYCALLRFADAPTATION_CEMERGENCYCALLRFADAPTATION_1, + "SSMA # CEmergencyCallRfAdaptation::CEmergencyCallRfAdaptation()" ); + INTERNAL_TRACE((_L("SSMA # CEmergencyCallRfAdaptation::CEmergencyCallRfAdaptation()"))); + + OstTrace0( TRACE_NORMAL, CEMERGENCYCALLRFADAPTATION_CEMERGENCYCALLRFADAPTATION_2, + "SSMA # CEmergencyCallRfAdaptation::CEmergencyCallRfAdaptation - return void" ); + INTERNAL_TRACE((_L("SSMA # CEmergencyCallRfAdaptation::CEmergencyCallRfAdaptation - return void"))); + } + + +// ----------------------------------------------------------------------------- +// CEmergencyCallRfAdaptation::ConstructL +// ----------------------------------------------------------------------------- +// +void CEmergencyCallRfAdaptation::ConstructL() + { + OstTrace0( TRACE_NORMAL, CEMERGENCYCALLRFADAPTATION_CONSTRUCTL_1, + "SSMA # CEmergencyCallRfAdaptation::ConstructL()" ); + INTERNAL_TRACE((_L("SSMA # CEmergencyCallRfAdaptation::ConstructL()"))); + + // Minimum isi message size + TUint8 isiMessageSize( MIN_ISI_MESSAGE_SIZE ); + + iCSACommonIscServicePtr = CSACommonIscService::NewL( *this, + EIscNokiaReserved8, + /*(TUint16) KEmergencyCallRfAdaptationDllTypeUidValue,*/ + NULL, // we are not interested in events, so we send NULL + isiMessageSize ); + + OstTrace0( TRACE_NORMAL, CEMERGENCYCALLRFADAPTATION_CONSTRUCTL_2, + "SSMA # CEmergencyCallRfAdaptation::ConstructL - return void" ); + INTERNAL_TRACE((_L("SSMA # CEmergencyCallRfAdaptation::ConstructL - return void"))); + } + + +// ----------------------------------------------------------------------------- +// CEmergencyCallRfAdaptation::ActivateRfForEmergencyCall +// Request RF activation so that an emergency call can be made. +// @param aStatus to complete when the operation has finished +// @see TRequestStatus +// ----------------------------------------------------------------------------- +// +void CEmergencyCallRfAdaptation::ActivateRfForEmergencyCall( TRequestStatus& aStatus ) + { + OstTrace0( TRACE_NORMAL, CEMERGENCYCALLRFADAPTATION_ACTIVATERFONFOREMERGENCYCALL_1, + "SSMA # CEmergencyCallRfAdaptation::ActivateRfForEmergencyCall" ); + INTERNAL_TRACE( _L( "SSMA # CEmergencyCallRfAdaptation::ActivateRfForEmergencyCall" ) ); + + iCancelCommand= EFalse; + aStatus = KRequestPending; + iStatusPtr = &aStatus; + + CEmergencyCallRfTrCommand* transactionPtr( NULL ); + TUint8 transId = TransactionId(); + iCommandId = StartupAdaptation::EActivateRfForEmergencyCall; + + transactionPtr = CEmergencyCallRfTrCommand::NewL( *this, transId ); + + if ( transactionPtr ) + { + OstTrace0( TRACE_NORMAL, CEMERGENCYCALLRFADAPTATION_ACTIVATERFONFOREMERGENCYCALL_2, + "SSMA # CEmergencyCallRfAdaptation::ActivateRfForEmergencyCall - Transaction ptr created" ); + + INTERNAL_TRACE((_L("SSMA # CEmergencyCallRfAdaptation::ActivateRfForEmergencyCall - Transaction ptr created"))); + + // Modifiable pointer to message data buffer + TPtr8 bufferPtr( NULL, 0 ); + + ForwardMessageL( iCommandId, transId, bufferPtr, transactionPtr ); + } + else + { + OstTrace0( TRACE_NORMAL, CEMERGENCYCALLRFADAPTATION_ACTIVATERFONFOREMERGENCYCALL_3, + "SSMA # CEmergencyCallRfAdaptation::ActivateRfForEmergencyCall - transaction ptr not created" ); + INTERNAL_TRACE((_L("SSMA # CEmergencyCallRfAdaptation::ActivateRfForEmergencyCall - transaction ptr not created "))); + User::RequestComplete( iStatusPtr, KErrNoMemory ); + } + + OstTrace0( TRACE_NORMAL, CEMERGENCYCALLRFADAPTATION_ACTIVATERFONFOREMERGENCYCALL_4, + "SSMA # CEmergencyCallRfAdaptation::ActivateRfForEmergencyCall - return void" ); + INTERNAL_TRACE((_L("SSMA # CEmergencyCallRfAdaptation::ActivateRfForEmergencyCall - return void"))); + + } + + +// ----------------------------------------------------------------------------- +// CEmergencyCallRfAdaptation::DeactivateRfForEmergencyCall +// Request RF deactivation so that an emergency call can be made. +// @param aStatus to complete when the operation has finished +// @see TRequestStatus +// ----------------------------------------------------------------------------- +// +void CEmergencyCallRfAdaptation::DeactivateRfForEmergencyCall( TRequestStatus& aStatus ) + { + iCancelCommand= EFalse; + aStatus = KRequestPending; + iStatusPtr = &aStatus; + OstTrace0( TRACE_NORMAL, CEMERGENCYCALLRFADAPTATION_DEACTIVATERFONFOREMERGENCYCALL_1, + "SSMA # CEmergencyCallRfAdaptation::DeactivateRfForEmergencyCall" ); + INTERNAL_TRACE( _L( "SSMA # CEmergencyCallRfAdaptation::DeactivateRfForEmergencyCall" ) ); + + CEmergencyCallRfTrCommand* transactionPtr( NULL ); + TUint8 transId = TransactionId(); + iCommandId = StartupAdaptation::EDeactivateRfAfterEmergencyCall; + + transactionPtr = CEmergencyCallRfTrCommand::NewL( *this, transId); + + if ( transactionPtr ) + { + OstTrace0( TRACE_NORMAL, CEMERGENCYCALLRFADAPTATION_DEACTIVATERFONFOREMERGENCYCALL_2, + "SSMA # CEmergencyCallRfAdaptation::DeactivateRfForEmergencyCall - Transaction ptr created" ); + + INTERNAL_TRACE((_L("SSMA # CEmergencyCallRfAdaptation::DeactivateRfForEmergencyCall - Transaction ptr created"))); + + // Modifiable pointer to message data buffer + TPtr8 bufferPtr( NULL, 0 ); + + ForwardMessageL( iCommandId, transId, bufferPtr, transactionPtr ); + } + else + { + OstTrace0( TRACE_NORMAL, CEMERGENCYCALLRFADAPTATION_DEACTIVATERFONFOREMERGENCYCALL_3, + "SSMA # CEmergencyCallRfAdaptation::DeactivateRfForEmergencyCall - transaction ptr not created" ); + INTERNAL_TRACE((_L("SSMA # CEmergencyCallRfAdaptation::DeactivateRfForEmergencyCall - transaction ptr not created "))); + User::RequestComplete( iStatusPtr, KErrNoMemory ); + } + + OstTrace0( TRACE_NORMAL, CEMERGENCYCALLRFADAPTATION_DEACTIVATERFONFOREMERGENCYCALL_4, + "SSMA # CEmergencyCallRfAdaptation::DeactivateRfForEmergencyCall - return void" ); + INTERNAL_TRACE((_L("SSMA # CEmergencyCallRfAdaptation::DeactivateRfForEmergencyCall - return void"))); + + } + + +// ----------------------------------------------------------------------------- +// CEmergencyCallRfAdaptation::Release +// Deletes and frees memory allocated. +// ----------------------------------------------------------------------------- +// +void CEmergencyCallRfAdaptation::Release() + { + OstTrace0( TRACE_NORMAL, CEMERGENCYCALLRFADAPTATION_RELEASE, + "SSMA # CEmergencyCallRfAdaptation::Release" ); + INTERNAL_TRACE( _L( "SSMA # CEmergencyCallRfAdaptation::Release" ) ); + delete this; + } + + +// ----------------------------------------------------------------------------- +// CEmergencyCallRfAdaptation::Cancel +// Cancel the outstanding request. Reference implementation completes the +// requests immediately so there is nothing to cancel. +// On a device, Cancel() needs an implementation as the Request might be +// outstanding and it needs to be cancelled. +// ----------------------------------------------------------------------------- +// +void CEmergencyCallRfAdaptation::Cancel() + { + iCancelCommand= ETrue; + + OstTrace0( TRACE_NORMAL, CEMERGENCYCALLRFADAPTATION_CANCEL_2, + "SSMA # CEmergencyCallRfAdaptation::Cancel - return void" ); + INTERNAL_TRACE((_L("SSMA # CEmergencyCallRfAdaptation::Cancel - return void"))); + } + + +// ----------------------------------------------------------------------------- +// CEmergencyCallRfAdaptation::ForwardMessageL +// ----------------------------------------------------------------------------- +// +void CEmergencyCallRfAdaptation::ForwardMessageL( const TInt aCommandId, + const TUint8 aTransId, + TDesC8& aData, + CEmergencyCallRfTrCommand* aNewTransactionPtr ) + { + OstTraceExt4( TRACE_NORMAL, CEMERGENCYCALLRFADAPTATION_FORWARDMESSAGEL_0, + "SSMA # CEmergencyCallRfAdaptation::ForwardMessageL(0x%x,0x%x,0x%x,0x%x)", + (TUint)aCommandId, (TUint)aTransId, (TUint)&aData, (TUint)&aNewTransactionPtr ); + + INTERNAL_TRACE((_L( "SSMA # CEmergencyCallRfAdaptation::ForwardMessageL(0x%x,0x%x,0x%x,0x%x)"), + (TUint)aCommandId, (TUint)aTransId, (TUint)&aData, (TUint)&aNewTransactionPtr )); + + CEmergencyCallRfTrCommand* transactionPtr( NULL ); + TInt32 entryToBeRemoved( KErrNotFound ); + + if ( aNewTransactionPtr ) + { + TInt32 newTrAppendStatus( KErrGeneral ); + + transactionPtr = aNewTransactionPtr; + + // If the transaction is already in array, no need to add it + entryToBeRemoved = iTransactionPtr.Find( transactionPtr ); + + // It's a new transaction, thus not assigned to the list yet. + if ( entryToBeRemoved == KErrNotFound ) + { + newTrAppendStatus = iTransactionPtr.Append( transactionPtr ); + + if ( newTrAppendStatus != KErrNone ) + { + OstTrace1( TRACE_NORMAL, CEMERGENCYCALLRFADAPTATION_FORWARDMESSAGEL_1, + "SSMA - CEmergencyCallRfAdaptation::ForwardMessageL - iTransaction.Append FAILED - status %d.", + newTrAppendStatus ); + INTERNAL_TRACE((_L("SSMA # CEmergencyCallRfAdaptation::ForwardMessageL - iTransaction.Append FAILED - status %d."), + newTrAppendStatus)); + + delete transactionPtr; + transactionPtr = NULL; + User::Leave( newTrAppendStatus ); + } + + // Get the index, needed if the entry needs to be removed later on. + entryToBeRemoved = iTransactionPtr.Find( transactionPtr ); + } + OstTrace1( TRACE_NORMAL, CEMERGENCYCALLRFADAPTATION_FORWARDMESSAGEL_2, + "SSMA # CEmergencyCallRfAdaptation::ForwardMessageL - entryToBeRemoved %d:", + entryToBeRemoved ); + INTERNAL_TRACE((_L("SSMA # CEmergencyCallRfAdaptation::ForwardMessageL - entryToBeRemoved %d:"), + entryToBeRemoved)); + + if ( entryToBeRemoved == KErrNotFound ) + { + ASSERT_ALWAYS_TRACE((_L("SSMA # CEmergencyCallRfAdaptation::ForwardMessageL - Entry not found"))); + + delete transactionPtr; + transactionPtr = NULL; + User::Leave( KErrNotFound ); + } + + OstTrace0( TRACE_NORMAL, CEMERGENCYCALLRFADAPTATION_FORWARDMESSAGEL_3, + "SSMA # CEmergencyCallRfAdaptation::ForwardMessageL - New transactionPtr." ); + INTERNAL_TRACE(_L("SSMA # CEmergencyCallRfAdaptation::ForwardMessageL - New transactionPtr.")); + } + else + { + OstTrace0( TRACE_NORMAL, CEMERGENCYCALLRFADAPTATION_FORWARDMESSAGEL_4, + "SSMA # CEmergencyCallRfAdaptation::ForwardMessageL - Search existing transaction from the list." ); + INTERNAL_TRACE(_L("SSMA # CEmergencyCallRfAdaptation::ForwardMessageL - Search existing transaction from the list.")); + + // Find an existing transaction if we did not create a new one. + for ( TUint32 i = 0; i < iTransactionPtr.Count() && transactionPtr == NULL; i++ ) + { + if ( iTransactionPtr[i]->TransactionId() == aTransId ) + { + transactionPtr = iTransactionPtr[i]; + entryToBeRemoved = i; + + OstTrace0( TRACE_NORMAL, CEMERGENCYCALLRFADAPTATION_FORWARDMESSAGEL_5, + "SSMA # CEmergencyCallRfAdaptation::ForwardMessageL - Transaction found." ); + INTERNAL_TRACE(_L("SSMA # CEmergencyCallRfAdaptation::ForwardMessageL - Transaction found.")); + } + } + } + + if ( transactionPtr ) + { + OstTrace0( TRACE_NORMAL, CEMERGENCYCALLRFADAPTATION_FORWARDMESSAGEL_6, + "SSMA # CEmergencyCallRfAdaptation::ForwardMessageL - forwared to transaction." ); + INTERNAL_TRACE(_L("SSMA # CEmergencyCallRfAdaptation::ForwardMessageL - forwared to transaction.")); + + TRAPD( err, transactionPtr->ProcessMessageL( aCommandId, aData ) ); + + OstTrace1( TRACE_NORMAL, CEMERGENCYCALLRFADAPTATION_FORWARDMESSAGEL_7, + "SSMA # CEmergencyCallRfAdaptation::ForwardMessageL - TRAP err: %d: ", + err ); + INTERNAL_TRACE((_L("SSMA # CEmergencyCallRfAdaptation::ForwardMessageL - TRAP err: %d: "), + err)); + + TUint32 transactionState = transactionPtr->TransactionState(); + + // Transaction completed or failed + if ( transactionState == EMERGENCYCALLRF_TR_COMPLETED || + transactionState == EMERGENCYCALLRF_TR_FAILED || + err != KErrNone ) + { + + OstTrace0( TRACE_NORMAL, CEMERGENCYCALLRFADAPTATION_FORWARDMESSAGEL_8, + "SSMA # CEmergencyCallRfAdaptation::ForwardMessageL - delete transaction." ); + INTERNAL_TRACE(_L("SSMA # CEmergencyCallRfAdaptation::ForwardMessageL - delete transaction.")); + + delete transactionPtr; + transactionPtr = NULL; + + iTransactionPtr.Remove( entryToBeRemoved ); + + User::LeaveIfError( err ); + + OstTrace0( TRACE_NORMAL, CEMERGENCYCALLRFADAPTATION_FORWARDMESSAGEL_11, + "SSMA # CEmergencyCallRfAdaptation::ForwardMessageL - Transaction removed." ); + INTERNAL_TRACE((_L("SSMA # CEmergencyCallRfAdaptation::ForwardMessageL - Transaction removed."))); + } + } + else + { + ASSERT_ALWAYS_TRACE((_L("SSMA # CEmergencyCallRfAdaptation::ForwardMessageL - unknown message"))); + User::Leave( KErrGeneral ); + } + + OstTrace0( TRACE_NORMAL, CEMERGENCYCALLRFADAPTATION_FORWARDMESSAGEL_12, + "SSMA # CEmergencyCallRfAdaptation::ForwardMessageL - return void" ); + INTERNAL_TRACE((_L("SSMA # CEmergencyCallRfAdaptation::ForwardMessageL - return void"))); + } + +// ----------------------------------------------------------------------------- +// CEmergencyCallRfAdaptation::SendIsiMessageL +// ----------------------------------------------------------------------------- +// +void CEmergencyCallRfAdaptation::SendIsiMessageL( TDesC8& aMessageData ) + { + OstTrace1( TRACE_NORMAL, CEMERGENCYCALLRFADAPTATION_SENDISIMESSAGEL_1, + "SSMA # CEmergencyCallRfAdaptation::SendIsiMessageL(0x%x)", + (TUint)&aMessageData ); + INTERNAL_TRACE((_L("SSMA # CEmergencyCallRfAdaptation::SendIsiMessageL(0x%x)"), + (TUint)&aMessageData)); + + // Allocate and initialize space for ISI message + TUint32 length = ISI_HEADER_SIZE + aMessageData.Length(); + HBufC8* isiMsgData = HBufC8::NewL( length ); + + CleanupStack::PushL( isiMsgData ); + + TPtr8 isiMsgDataPtr = isiMsgData->Des(); + + // Create an ISI message + TIsiSend isiMsg( isiMsgDataPtr, length ); + isiMsg.Set8bit( ISI_HEADER_OFFSET_RECEIVERDEVICE, PN_DEV_MODEM ); + isiMsg.Set8bit( ISI_HEADER_OFFSET_RESOURCEID, PN_MODEM_MCE ); + isiMsg.CopyData( ISI_HEADER_OFFSET_TRANSID, aMessageData ); + isiMsg.Complete(); + + // Send ISI message + OstTrace1( TRACE_NORMAL, CEMERGENCYCALLRFADAPTATION_SENDISIMESSAGEL_2, + "SSMA # CEmergencyCallRfAdaptation::SendIsiMessageL - iCSACommonIscService->SendMessageL(0x%x)", + (TUint)&aMessageData ); + INTERNAL_TRACE((_L("SSMA # CEmergencyCallRfAdaptation::SendIsiMessageL - iCSACommonIscService->SendIsiMessageL(0x%x)"), + (TUint)&aMessageData)); + iCSACommonIscServicePtr->SendMessageL( isiMsgDataPtr ); + + // Delete temporary buffers + CleanupStack::PopAndDestroy( isiMsgData ); + + OstTrace0( TRACE_NORMAL, CEMERGENCYCALLRFADAPTATION_SENDISIMESSAGEL_3, + "SSMA # CEmergencyCallRfAdaptation::SendIsiMessageL - return void" ); + INTERNAL_TRACE( ( _L( "SSMA # CEmergencyCallRfAdaptation::SendIsiMessageL - return void" ) ) ); + } + +// ----------------------------------------------------------------------------- +// CEmergencyCallRfAdaptation::ReceiveIsiMessageL +// ----------------------------------------------------------------------------- +// +void CEmergencyCallRfAdaptation::ReceiveIsiMessageL( TDesC8& aData ) + { + OstTrace1( TRACE_NORMAL, CEMERGENCYCALLRFADAPTATION_RECEIVEISIMESSAGEL_1, + "SSMA # CEmergencyCallRfAdaptation::ReceiveIsiMessageL(0x%x)", + (TUint)&aData ); + INTERNAL_TRACE((_L("SSMA # CEmergencyCallRfAdaptation::ReceiveIsiMessageL(0x%x)"), + (TUint)&aData )); + + TIsiReceiveC isiMsg( aData ); + TUint8 resourceId( isiMsg.Get8bit( ISI_HEADER_OFFSET_RESOURCEID ) ); + TUint8 transId( isiMsg.Get8bit( ISI_HEADER_OFFSET_TRANSID ) ); + TUint8 messageId( isiMsg.Get8bit( ISI_HEADER_OFFSET_MESSAGEID ) ); + + OstTraceExt3( TRACE_NORMAL, CEMERGENCYCALLRFADAPTATION_RECEIVEISIMESSAGEL_2, + "SSMA - CEmergencyCallRfAdaptation::ReceiveIsiMessageL - ISI message Id(0x%x, 0x%x, 0x%x)", + resourceId, transId, messageId ); + INTERNAL_TRACE((_L("SSMA - CEmergencyCallRfAdaptation::ReceiveIsiMessageL - ISI message Id(0x%x, 0x%x, 0x%x)"), + resourceId, transId, messageId )); + + if ( resourceId == PN_MODEM_MCE ) + { + switch ( messageId ) + { + case MCE_RF_STATE_RESP: + { + OstTrace0( TRACE_NORMAL, CEMERGENCYCALLRFADAPTATION_RECEIVEISIMESSAGEL_3, + "SSMA # CEmergencyCallRfAdaptation::ReceiveIsiMessageL - MCE_RF_STATE_RESP" ); + INTERNAL_TRACE((_L("SSMA # CEmergencyCallRfAdaptation::ReceiveIsiMessageL - MCE_RF_STATE_RESP"))); + + CEmergencyCallRfTrCommand* transactionPtr( NULL ); + + ForwardMessageL( messageId, transId, aData, transactionPtr ); + break; + } + default: + { + OstTrace1( TRACE_NORMAL, CEMERGENCYCALLRFADAPTATION_RECEIVEISIMESSAGEL_4, + "SSMA - CEmergencyCallRfAdaptation::ReceiveIsiMessageL - Wrong msg Id from Cellmo - MessageId() 0x%x ", + messageId ); + INTERNAL_TRACE((_L("SSMA # CEmergencyCallRfAdaptation::ReceiveIsiMessageL - Wrong msg Id from Cellmo - MessageId() 0x%x "), + messageId)); + break; + } + } + } + else + { + OstTrace0( TRACE_NORMAL, CEMERGENCYCALLRFADAPTATION_RECEIVEISIMESSAGEL_5, + "SSMA - CEmergencyCallRfAdaptation::ReceiveIsiMessageL -resource id NOT SUPPORTED! " ); + INTERNAL_TRACE( _L( "SSMA # CEmergencyCallRfAdaptation::ReceiveIsiMessageL -resource id NOT SUPPORTED! " ) ); + User::Leave( KErrGeneral ); + } + + OstTrace0( TRACE_NORMAL, CEMERGENCYCALLRFADAPTATION_RECEIVEISIMESSAGEL_6, + "SSMA - CEmergencyCallRfAdaptation::ReceiveIsiMessageL -return void " ); + INTERNAL_TRACE( _L( "SSMA # CEmergencyCallRfAdaptation::ReceiveIsiMessageL -return void " ) ); + + } + + +// ----------------------------------------------------------------------------- +// CEmergencyCallRfAdaptation::ProcessResponseL +// ----------------------------------------------------------------------------- +// +void CEmergencyCallRfAdaptation::ProcessResponseL( TInt aErrCode ) + { + OstTrace1( TRACE_NORMAL, CEMERGENCYCALLRFADAPTATION_PROCESSRESPONSEL_1, + "SSMA # CEmergencyCallRfAdaptation::ProcessResponseL(0x%d)", + (TUint)aErrCode ); + INTERNAL_TRACE((_L("SSMA # CEmergencyCallRfAdaptation::ProcessResponseL(0x%x)"), + aErrCode )); + + if ( iCancelCommand ) + { + if ( aErrCode == KErrNone ) + { + switch ( iCommandId ) + { + case StartupAdaptation::EActivateRfForEmergencyCall: + { + CEmergencyCallRfTrCommand* transactionPtr( NULL ); + TUint8 transId = TransactionId(); + transactionPtr = CEmergencyCallRfTrCommand::NewL( *this, transId); + + if ( transactionPtr ) + { + OstTrace0( TRACE_NORMAL, CEMERGENCYCALLRFADAPTATION_PROCESSRESPONSEL_2, + "SSMA # CEmergencyCallRfAdaptation::ProcessResponseL - Transaction ptr created" ); + + INTERNAL_TRACE((_L("SSMA # CEmergencyCallRfAdaptation::ProcessResponseL - Transaction ptr created"))); + + // Modifiable pointer to message data buffer + TPtr8 iBufferPtr( NULL, 0 ); + + ForwardMessageL( StartupAdaptation::EDeactivateRfAfterEmergencyCall, transId, iBufferPtr, transactionPtr ); + } + else + { + OstTrace0( TRACE_NORMAL, CEMERGENCYCALLRFADAPTATION_PROCESSRESPONSEL_3, + "SSMA # CEmergencyCallRfAdaptation::ProcessResponseL - transaction ptr not created" ); + INTERNAL_TRACE((_L("SSMA # CEmergencyCallRfAdaptation::ProcessResponseL - transaction ptr not created "))); + User::RequestComplete( iStatusPtr, KErrCompletion); + } + iCommandId = KErrCancel; + } + break; + + case StartupAdaptation::EDeactivateRfAfterEmergencyCall: + { + CEmergencyCallRfTrCommand* transactionPtr( NULL ); + TUint8 transId = TransactionId(); + transactionPtr = CEmergencyCallRfTrCommand::NewL( *this, transId); + + if ( transactionPtr ) + { + OstTrace0( TRACE_NORMAL, CEMERGENCYCALLRFADAPTATION_PROCESSRESPONSEL_4, + "SSMA # CEmergencyCallRfAdaptation::ProcessResponseL - Transaction ptr created" ); + + INTERNAL_TRACE((_L("SSMA # CEmergencyCallRfAdaptation::ProcessResponseL - Transaction ptr created"))); + + // Modifiable pointer to message data buffer + TPtr8 iBufferPtr( NULL, 0 ); + + ForwardMessageL( StartupAdaptation::EActivateRfForEmergencyCall, transId, iBufferPtr, transactionPtr ); + } + else + { + OstTrace0( TRACE_NORMAL, CEMERGENCYCALLRFADAPTATION_PROCESSRESPONSEL_5, + "SSMA # CEmergencyCallRfAdaptation::ProcessResponseL - transaction ptr not created" ); + INTERNAL_TRACE((_L("SSMA # CEmergencyCallRfAdaptation::ProcessResponseL - transaction ptr not created"))); + User::RequestComplete( iStatusPtr, KErrCompletion); + } + iCommandId = KErrCancel; + } + break; + + case KErrCancel: + { + User::RequestComplete( iStatusPtr, KErrCancel); + } + break; + + default: + { + OstTrace1( TRACE_NORMAL, CEMERGENCYCALLRFADAPTATION_PROCESSRESPONSEL_6, + "SSMA # CEmergencyCallRfAdaptation::ProcessResponseL - Unknown CommandId() 0x%x ", + iCommandId ); + INTERNAL_TRACE((_L("SSMA # CEmergencyCallRfAdaptation::ProcessResponseL - Unknown CommandId() 0x%x "), + iCommandId )); + } + break; + } + } + else + { + User::RequestComplete( iStatusPtr, KErrCancel ); + } + } + else + { + User::RequestComplete( iStatusPtr, aErrCode ); + } + OstTrace0( TRACE_NORMAL, CEMERGENCYCALLRFADAPTATION_PROCESSRESPONSEL_7, + "SSMA # CEmergencyCallRfAdaptation::ProcessResponseL - return void" ); + INTERNAL_TRACE((_L("SSMA # CEmergencyCallRfAdaptation::ProcessResponseL - return void"))); + } + + +// ----------------------------------------------------------------------------- +// CEmergencyCallRfAdaptation::ProcessConnectionClosedL +// ----------------------------------------------------------------------------- +// +void CEmergencyCallRfAdaptation::ProcessConnectionClosedL( TInt aErrorCode ) + { + OstTrace1( TRACE_NORMAL,CEMERGENCYCALLRFADAPTATION_PROCESSCONNECTIONCLOSEDL_1, + "SSMA # CEmergencyCallRfAdaptation::ProcessConnectionClosedL(0x%x)", + aErrorCode ); + INTERNAL_TRACE((_L("SSMA # CEmergencyCallRfAdaptation::ProcessConnectionClosedL(0x%x)"), + aErrorCode )); + + OstTrace0( TRACE_NORMAL, CEMERGENCYCALLRFADAPTATION_PROCESSCONNECTIONCLOSEDL_2, + "SSMA # CEmergencyCallRfAdaptation::ProcessConnectionClosedL - return void" ); + INTERNAL_TRACE((_L( "SSMA # CEmergencyCallRfAdaptation::ProcessConnectionClosedL - return void" ))); + } + + +// +// ----------------------------------------------------------------------------- +// CEmergencyCallRfAdaptation::TransactionId +// ----------------------------------------------------------------------------- +// +TInt CEmergencyCallRfAdaptation::TransactionId() + { + // check for 255 + if ( (++iTransId) >= 255 ) + { + iTransId = 0; + } + + OstTrace1( TRACE_NORMAL,CEMERGENCYCALLRFADAPTATION_TRANSACTIONID_1, + "SSMA # CEmergencyCallRfAdaptation::TransactionId(0x%x)", + iTransId ); + INTERNAL_TRACE((_L("SSMA # CEmergencyCallRfAdaptation::TransactionId(0x%x)"), + iTransId )); + return iTransId; + } + +// End of file +