diff -r 14460bf2a402 -r f50f4094acd7 cbsref/telephonyrefplugins/atltsy/atcommand/callcontrol/src/atanswer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cbsref/telephonyrefplugins/atltsy/atcommand/callcontrol/src/atanswer.cpp Tue Jul 06 15:36:38 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