diff -r 594d59766373 -r 7d48bed6ce0c satengine/satserver/Commands/SetUpCallCmd/src/csetupcalldtmfsender.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/satengine/satserver/Commands/SetUpCallCmd/src/csetupcalldtmfsender.cpp Tue Aug 31 15:45:17 2010 +0300 @@ -0,0 +1,200 @@ +/* +* Copyright (c) 2010 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: Send DTMF string if necessary after creating a call +* +*/ + +#include +#include +#include "msatmultimodeapi.h" +#include "csetupcalldtmfsender.h" +#include "msatasynctosync.h" +#include "SatLog.h" + +_LIT( KSatDtmfCharp, "p" ); +_LIT( KSatDtmfCharw, "w" ); + +// ================= MEMBER FUNCTIONS ======================= + +// ----------------------------------------------------------------------------- +// CSetupCallDtmfSender::CSetupCallDtmfSender +// The class constructor. +// ----------------------------------------------------------------------------- +// +CSetupCallDtmfSender::CSetupCallDtmfSender( MSatMultiModeApi& aPhone ) + : CActive( EPriorityStandard ), iPhone( aPhone ), iDtmfString( NULL ) + { + LOG( SIMPLE, + "SETUPCALL: CSetupCallDtmfSender::CSetupCallDtmfSender calling" ) + + CActiveScheduler::Add( this ); + + LOG( SIMPLE, + "SETUPCALL: CSetupCallDtmfSender::CSetupCallDtmfSender exiting" ) + } + +// ----------------------------------------------------------------------------- +// CSetupCallDtmfSender::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CSetupCallDtmfSender* CSetupCallDtmfSender::NewL( MSatMultiModeApi& aPhone ) + { + LOG( SIMPLE, "SETUPCALL: CSetupCallDtmfSender::NewL calling" ) + + CSetupCallDtmfSender* self = + new ( ELeave ) CSetupCallDtmfSender( aPhone ); + + LOG( SIMPLE, "SETUPCALL: CSetupCallDtmfSender::NewL exiting" ) + return self; + } + +// ----------------------------------------------------------------------------- +// CSetupCallDtmfSender::~CSetupCallDtmfSender +// Destructor +// ----------------------------------------------------------------------------- +// +CSetupCallDtmfSender::~CSetupCallDtmfSender() + { + LOG( SIMPLE, "SETUPCALL: \ + CSetupCallDtmfSender::~CSetupCallDtmfSender calling" ) + Cancel(); + + delete iDtmfString; + iDtmfString = NULL; + + LOG( SIMPLE, "SETUPCALL: \ + CSetupCallDtmfSender::~CSetupCallDtmfSender exiting" ) + } + +// ----------------------------------------------------------------------------- +// CSetupCallDtmfSender::SendDtmfString +// ----------------------------------------------------------------------------- +// +void CSetupCallDtmfSender::SendDtmfString() +{ + LOG( SIMPLE, "SETUPCALL: CSetupCallDtmfSender::SendDtmfString calling" ) + if( !IsActive() && iDtmfString ) + { + const TInt ret = iPhone.ContinueDTMFStringSending( ETrue ); + LOG2( SIMPLE, "SETUPCALL: CSetupCallDtmfSender::SendDtmfString\ + ContinueDTMFStringSending ret %d", ret ) + iPhone.SendDTMFTones( iStatus, *iDtmfString ); + + SetActive(); + } + LOG( SIMPLE, "SETUPCALL: CSetupCallDtmfSender::SendDtmfString exit" ) +} + +// ----------------------------------------------------------------------------- +// CSetupCallDtmfSender::SeparateDtmfFromTelNumber +// Refers to +// RPhCltEmergencyCall::RemoveDTMF +// RPhCltEmergencyCall::FindStartOfDtmfString +// ----------------------------------------------------------------------------- +// +void CSetupCallDtmfSender::SeparateDtmfFromTelNumber(TDes& aString) + { + LOG( SIMPLE, + "SETUPCALL: CSetupCallDtmfSender::SeparateDtmfFromTelNumber calling") + + delete iDtmfString; + iDtmfString = NULL; + + // String must contain 'p' or 'w'. Find start of dtmf string. + TInt indexp; //char 'p' index + TInt indexw; // char 'w' index + TPtrC ptrDtmfCharp( KSatDtmfCharp ); + TPtrC ptrDtmfCharw( KSatDtmfCharw ); + + indexp = aString.Locate( ptrDtmfCharp[ 0 ] ); + indexw = aString.Locate( ptrDtmfCharw[ 0 ] ); + + TInt dtmfIndex = KErrNotFound; + if ( indexp != KErrNotFound || indexw != KErrNotFound ) + { + // dtmf char found + if ( indexw == KErrNotFound ) + { + // char p index + dtmfIndex = indexp; + } + else if ( indexp == KErrNotFound ) + { + // char w index + dtmfIndex = indexw; + } + else + { + // Both chars p and w found, smaller index selected + indexp < indexw ? dtmfIndex = indexp : dtmfIndex = indexw; + } + } + LOG2( SIMPLE, + "SETUPCALL: CSetupCallDtmfSender::SeparateDtmfFromTelNumber \ + dtmfIndex=%d", dtmfIndex ) + + // Separate purl tel number and dtmf string + if ( dtmfIndex != KErrNotFound ) + { + // Dtmf string to member data for furture sending + TPtrC temp( aString.Right( aString.Length() - dtmfIndex ) ); + LOG2( SIMPLE, + "SETUPCALL: CSetupCallDtmfSender::SeparateDtmfFromTelNumber \ + DTMF=%S", &temp) + + iDtmfString = temp.Alloc(); + LOG2( SIMPLE, + "SETUPCALL: CSetupCallDtmfSender::SeparateDtmfFromTelNumber \ + iDtmfString address=%d", iDtmfString ) + + // Tel number for dialing call + aString.Delete( dtmfIndex, aString.Length() - dtmfIndex ); + LOG2( SIMPLE, + "SETUPCALL: CSetupCallDtmfSender::SeparateDtmfFromTelNumber \ + TelNumber=%S", &aString ) + } + LOG( SIMPLE, + "SETUPCALL: CSetupCallDtmfSender::SeparateDtmfFromTelNumber exit" ) + } + +// ----------------------------------------------------------------------------- +// CSetupCallDtmfSender::RunL +// Handles the command. +// ----------------------------------------------------------------------------- +// +void CSetupCallDtmfSender::RunL() + { + LOG2( SIMPLE, "SETUPCALL: CSetupCallDtmfSender::RunL calling iStatus=%i", + iStatus.Int() ) + + delete iDtmfString; + iDtmfString = NULL; + + LOG( SIMPLE, "SETUPCALL: CSetupCallDtmfSender::RunL exiting" ) + } + +// ----------------------------------------------------------------------------- +// From class CActive. +// Cancels the sat request. +// ----------------------------------------------------------------------------- +// +void CSetupCallDtmfSender::DoCancel() + { + LOG( SIMPLE, "SETUPCALL: CSetupCallDtmfSender::DoCancel calling" ) + iPhone.CancelAsyncRequest( EMobilePhoneSendDTMFTones ); + LOG( SIMPLE, "SETUPCALL: CSetupCallDtmfSender::DoCancel exiting" ) + } + +// End of File