cbsref/telephonyrefplugins/atltsy/atcommand/callcontrol/src/atanswer.cpp
branchRCL_3
changeset 65 630d2f34d719
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cbsref/telephonyrefplugins/atltsy/atcommand/callcontrol/src/atanswer.cpp	Tue Aug 31 16:23:08 2010 +0300
@@ -0,0 +1,292 @@
+// Copyright (c) 2009 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:
+// @file atanswer.cpp
+// This contains CATAnswer which answering incomging call.
+// 
+
+//system include
+
+//user include
+#include "atanswer.h"
+#include "ltsycallinformationmanager.h"
+#include "mslogger.h"
+
+//const define
+const TInt KLtsyAnswerReadTimeOut = 20;
+_LIT8(KLtsyAnswerCallCommand, "ATA\r");
+
+
+// ---------------------------------------------------------------------------
+// CATAnswer::NewL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATAnswer* CATAnswer::NewL(CGlobalPhonemanager& aGloblePhone,
+						   CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATAnswer::NewL()"));
+	
+	CATAnswer* self = CATAnswer::NewLC(aGloblePhone, aCtsyDispatcherCallback);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+
+// ---------------------------------------------------------------------------
+// CATAnswer::NewLC
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATAnswer* CATAnswer::NewLC(CGlobalPhonemanager& aGloblePhone,
+						    CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATAnswer::NewLC()"));
+	
+	CATAnswer* self = new (ELeave) CATAnswer(aGloblePhone, aCtsyDispatcherCallback);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+// ---------------------------------------------------------------------------
+// CATAnswer::~CATAnswer
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATAnswer::~CATAnswer()
+	{
+	}
+
+// ---------------------------------------------------------------------------
+// CATAnswer::SetAnswerCallId
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATAnswer::SetAnswerCallId(TInt aCallId)
+	{
+	iCallId = aCallId;
+	}
+
+
+// ---------------------------------------------------------------------------
+// CATAnswer::SetIsIsvCall
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATAnswer::SetIsIsvCall(TBool aIsIsvCall)
+	{
+	iIsIsvCall = aIsIsvCall;
+	}
+
+
+// ---------------------------------------------------------------------------
+// CATAnswer::SetIsIsvCall
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CATAnswer::CATAnswer(CGlobalPhonemanager& aGloblePhone,
+		             CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+					 :CAtCommandBase(aGloblePhone, aCtsyDispatcherCallback)
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATAnswer::CATAnswer()"));
+	
+	iIOStatus = KErrNone;
+	iATResult = KErrNone;
+	iAnswerStep = EATNotInProgress;
+	}
+
+
+// ---------------------------------------------------------------------------
+// CATAnswer::ConstructL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATAnswer::ConstructL()
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATAnswer::ConstructL()"));
+	
+	CAtCommandBase::ConstructL();
+	AddExpectStringL(KLtsyNoCarrierString);
+	
+	//Set read and write timeout
+	SetTimeOut(KLtsyDefaultWriteTimeOut, KLtsyAnswerReadTimeOut);	
+	}
+
+// ---------------------------------------------------------------------------
+// CATAnswer::ExecuteCommand
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATAnswer::ExecuteCommand()
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATAnswer::ExecuteCommand()"));
+	
+	//Write AT command
+	iTxBuffer.Copy(KLtsyAnswerCallCommand);
+	Write();
+	iAnswerStep = EATWaitForWriteComplete;
+	}
+
+// ---------------------------------------------------------------------------
+// CATAnswer::StartRequest
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATAnswer::StartRequest()
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATAnswer::StartRequest()"));
+	
+	ExecuteCommand();
+	}
+
+// ---------------------------------------------------------------------------
+// CATAnswer::ParseResponseL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATAnswer::ParseResponseL(const TDesC8& aResponseBuf)
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATAnswer::ParseResponseL()"));
+	
+	if (aResponseBuf.Match(KLtsyOkString) == 0)
+		{
+		iATResult = KErrNone;
+		}
+	else if (aResponseBuf.Match(KLtsyErrorString) == 0)
+		{
+		iATResult = KErrArgument;
+		}
+	else if (aResponseBuf.Match(KLtsyNoCarrierString) == 0)
+		{
+		iATResult = KErrEtelNoCarrier;
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// CATAnswer::HandleIOError
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATAnswer::HandleIOError()
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATAnswer::HandleIOError()"));
+	
+	//Call back
+	iCtsyDispatcherCallback.CallbackCallControlAnswerComp(iIOStatus, iCallId);
+	}
+
+// ---------------------------------------------------------------------------
+// CATAnswer::HandleResponseError
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATAnswer::HandleResponseError()
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATAnswer::HandleResponseError()"));
+	
+	//Call back
+	iCtsyDispatcherCallback.CallbackCallControlAnswerComp(iATResult, iCallId);
+	}
+
+// ---------------------------------------------------------------------------
+// CATAnswer::HandleConnectedComplete
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATAnswer::HandleConnectedComplete()
+	{
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATAnswer::HandleConnectedComplete()"));
+
+	//Setting call states
+	iCtsyDispatcherCallback.CallbackCallControlNotifyCallStatusChangeInd(KErrNone, 
+			                                                             iCallId, 
+			                                                             RMobileCall::EStatusAnswering);	
+		
+	iCtsyDispatcherCallback.CallbackCallControlNotifyCallStatusChangeInd(KErrNone, 
+			                                                             iCallId, 
+			                                                             RMobileCall::EStatusConnected);
+			                                                             
+    //Call back
+	iCtsyDispatcherCallback.CallbackCallControlAnswerComp(KErrNone, iCallId);
+				                                                             						
+	//Change Call State to active
+	TLtsyCallInformation& tCallInfo(iPhoneGlobals.GetCallInfoManager().GetCallInformationByCallId(iCallId));
+	if (tCallInfo.GetCallIdIsUsedInfo() == TLtsyCallInformation::EUsed)
+		{
+		tCallInfo.SetCallState(TLtsyCallInformation::EActiveCall);
+		}
+	
+	//If exist other call , should set hold
+	for (TInt n = KLtsyMinCallId; n <= KLtsyMaxCallId; n++)
+		{
+		if (n != iCallId)
+			{
+			TLtsyCallInformation& tCallInfo(iPhoneGlobals.GetCallInfoManager().GetCallInformationByCallId(n));
+			if (tCallInfo.GetCallIdIsUsedInfo() == TLtsyCallInformation::EUsed &&
+				tCallInfo.GetCallState() != TLtsyCallInformation::EHeldCall )
+				{
+				tCallInfo.SetCallState(TLtsyCallInformation::EHeldCall);
+				
+				//Notify CTSY call state has changed
+				iCtsyDispatcherCallback.CallbackCallControlNotifyCallStatusChangeInd(KErrNone, 
+						                                                             n, 
+						                                                 RMobileCall::EStatusHold);				
+				}
+			}
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// CATAnswer::Complete
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATAnswer::Complete()
+	{
+	//Invoke base class complete
+	CAtCommandBase::Complete();
+	
+	//Let other command can use I/O port
+	iPhoneGlobals.iEventSignalActive = EFalse;	
+	}
+
+// ---------------------------------------------------------------------------
+// CATAnswer::EventSignal
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CATAnswer::EventSignal(TAtEventSource /*aEventSource*/, TInt aStatus)
+	{  
+	LOGTEXT(_L8("[Ltsy CallControl] Starting CATAnswer::EventSignal()"));
+	LOGTEXT2(_L8("[Ltsy CallControl] aStatus = %d"),aStatus);
+	
+	iIOStatus = aStatus;
+	
+	//I/O error
+	if (iIOStatus != KErrNone)
+		{
+		HandleIOError();
+		Complete();
+		return;
+		}
+	
+	switch (iAnswerStep)
+		{
+		case EATWaitForWriteComplete:
+			iAnswerStep = EATReadComplete;
+			break;
+			
+		case EATReadComplete:
+			if (iATResult == KErrNone)
+				{
+				HandleConnectedComplete();
+				}
+			else
+				{
+				HandleResponseError();
+				}
+			Complete();
+			break;
+			
+		default:
+			break;
+		}
+	}
+
+//End of file