--- /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 <etelmm.h>
+#include <mmtsy_names.h>
+#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