diff -r 3553901f7fa8 -r 4047d69ee0e4 telephonyserverplugins/attestltsy/atcommand/callcontrol/src/atwaitforcallhandler.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/telephonyserverplugins/attestltsy/atcommand/callcontrol/src/atwaitforcallhandler.cpp Tue Feb 09 12:31:43 2010 +0000 @@ -0,0 +1,190 @@ +// 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: +// Wait for 2nd incoming call + +//system include + +//user include +#include "atwaitforcallhandler.h" +#include "atclcc.h" +#include "atring.h" +#include "atmanager.h" +#include "activecommandstore.h" +#include "ltsycallinformationmanager.h" +#include "mslogger.h" + +CATWaitForCallHandler* CATWaitForCallHandler::NewL(CGlobalPhonemanager& aGloblePhone, + CCtsyDispatcherCallback& aCtsyDispatcherCallback) + { + LOGTEXT(_L8("[Ltsy CallControl] Starting CATWaitForCallHandler::NewL()")); + + CATWaitForCallHandler* self = CATWaitForCallHandler::NewLC(aGloblePhone, aCtsyDispatcherCallback); + CleanupStack::Pop(self); + return self; + } + +CATWaitForCallHandler* CATWaitForCallHandler::NewLC(CGlobalPhonemanager& aGloblePhone, + CCtsyDispatcherCallback& aCtsyDispatcherCallback) + { + LOGTEXT(_L8("[Ltsy CallControl] Starting CATWaitForCallHandler::NewLC()")); + + CATWaitForCallHandler* self = new (ELeave) CATWaitForCallHandler(aGloblePhone, aCtsyDispatcherCallback); + CleanupStack::PushL(self); + self->ConstructL(); + return self; + } + +CATWaitForCallHandler::~CATWaitForCallHandler() + { + LOGTEXT(_L8("[Ltsy CallControl] Starting CATWaitForCallHandler::~CATWaitForCallHandler()")); + + delete iAtRing; + iAtRing = NULL; + + delete iAtClcc; + iAtClcc = NULL; + } + + +CATWaitForCallHandler::CATWaitForCallHandler(CGlobalPhonemanager& aGloblePhone, + CCtsyDispatcherCallback& aCtsyDispatcherCallback) + :CATCommandControlBase(aGloblePhone, aCtsyDispatcherCallback) + { + LOGTEXT(_L8("[Ltsy CallControl] Starting CATWaitForCallHandler::CATWaitForCallHandler()")); + + iPhoneGlobals.GetCallInfoManager().SetIncomingCallFlag(EFalse); + } + +void CATWaitForCallHandler::ConstructL() + { + LOGTEXT(_L8("[Ltsy CallControl] Starting CATWaitForCallHandler::ConstructL()")); + + iAtClcc = CATClcc::NewL(iPhoneGlobals, iCtsyDispatcherCallback); + iAtRing = CATRing::NewL(iPhoneGlobals, iCtsyDispatcherCallback); + iAtRing->SetAtCommandObserver(this); + } + + +void CATWaitForCallHandler::StartToWaitForCall() + { + LOGTEXT(_L8("[Ltsy CallControl] Starting CATWaitForCallHandler::StartToWaitForCall()")); + + iPhoneGlobals.iAtManager->GetActiveCommandStore()->AddUnsolicitedAtCommand(iAtRing); + } + +TInt CATWaitForCallHandler::ProcessIncomingCallInfomation() + { + LOGTEXT(_L8("[Ltsy CallControl] Starting CATWaitForCallHandler::ProcessIncomingCallInfomation()")); + + TInt nCallId = iPhoneGlobals.GetCallInfoManager().FindIncomingCallId(); + + if (KErrNotFound == nCallId) + { + return KErrNotFound; + } + + //Incoming call information + TLtsyCallInformation& tIncomingCallInfo(iPhoneGlobals.GetCallInfoManager().GetCallInformationByCallId(nCallId)); + + RMobileCall::TMobileCallInfoV1 tMobileCallInfo; + + //Call id + tMobileCallInfo.iCallId = tIncomingCallInfo.GetCallId(); + + //Call service + TLtsyCallInformation::TCallMode tCallService(tIncomingCallInfo.GetCallMode()); + if (TLtsyCallInformation::EVoiceCall == tCallService) + { + tMobileCallInfo.iService = RMobilePhone::EVoiceService; + } + else if (TLtsyCallInformation::EDataCall == tCallService) + { + tMobileCallInfo.iService = RMobilePhone::ECircuitDataService; + } + else if (TLtsyCallInformation::EFaxCall == tCallService) + { + tMobileCallInfo.iService = RMobilePhone::EFaxService; + } + else + { + tMobileCallInfo.iService = RMobilePhone::EServiceUnspecified; + } + + //Call back + iCtsyDispatcherCallback.CallbackCallControlNotifyIncomingCallInd(KErrNone, tMobileCallInfo); + + //Ring State + tMobileCallInfo.iStatus = RMobileCall::EStatusRinging; + + //Telephone number + tMobileCallInfo.iRemoteParty.iRemoteNumber.iTelNumber.Copy(tIncomingCallInfo.GetMobileTelNum()); + + iCtsyDispatcherCallback.CallbackCallControlNotifyCallInfoChangeInd(KErrNone, tMobileCallInfo); + + return KErrNone; + } + +void CATWaitForCallHandler::AtCommandExecuteComplete(TAtEventSource /*aEventSource*/, TInt aStatus) + { + LOGTEXT(_L8("[Ltsy CallControl] Starting CATWaitForCallHandler::AtCommandExecuteComplete()")); + LOGTEXT2(_L8("[Ltsy CallControl] aEventSource = %d\taStatus = %d"),aStatus); + + //Process read or timeout error + if (aStatus != KErrNone) + { + //Reset Ring Count + iPhoneGlobals.GetCallInfoManager().SetIncomingCallFlag(EFalse); + + //Init ATCLCC Variable + iAtClcc->InitVariable(); + + //Init InComing Call State + TInt nCall = iPhoneGlobals.GetCallInfoManager().FindIncomingCallId(); + if (nCall != KErrNotFound) + { + iPhoneGlobals.GetCallInfoManager().ResetCallInformationByCallId(nCall); + } + return; + } + + //Clear Ring String + iAtRing->ClearCurrentLine(); + + //CLCC find incoming information If first ring coming + if (!iPhoneGlobals.GetCallInfoManager().GetIncomingCallFlag()) + { + TInt nRet = iPhoneGlobals.CheckGlobalPhoneStatus(); + if (nRet == KErrNone) + { + iPhoneGlobals.iEventSignalActive = ETrue; + iPhoneGlobals.GetCallInfoManager().SetIncomingCallFlag(ETrue); + iAtClcc->StartRequest(); + } + } + + //Find At Clcc OK + if (iAtClcc->GetProcessStates() == CATClcc::EProcessOK) + { + TInt nRes = ProcessIncomingCallInfomation(); + iAtClcc->InitVariable(); + } + + //Process AT CLCC error + if (iAtClcc->GetProcessStates() == CATClcc::EProcessError ) + { + iAtClcc->InitVariable(); + } + } + +//End of file