--- a/cbsref/telephonyrefplugins/atltsy/atcommand/callcontrol/src/atchld.cpp Tue Aug 31 16:23:08 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,622 +0,0 @@
-// 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 atchld.cpp
-// This contains CATChld which hold, resume, release, swap one call.
-//
-
-
-//sysmtem include
-
-//user include
-#include "atchld.h"
-#include "ltsycallinformationmanager.h"
-#include "athangupcommandrecords.h"
-#include "mslogger.h"
-
-//const define
-const TInt KLtsyCHLDReadTimeout = 3;
-const TInt KLtsyCHLDWaitForModemTime = 1000*250; // 0.25 seconds
-_LIT8(KLtsyCHLDCommandFormat1, "AT+CHLD=%d\r");
-_LIT8(KLtsyCHLDCommandFormat2, "AT+CHLD=%d%d\r");
-_LIT8(KLtsyReleaseOutgoingCommand, "ATH1\r"); //Hang up outging call
-
-
-// ---------------------------------------------------------------------------
-// CATChld::NewL
-// other items were commented in a header
-// ---------------------------------------------------------------------------
-CATChld* CATChld::NewL(CGlobalPhonemanager& aGloblePhone,
- CCtsyDispatcherCallback& aCtsyDispatcherCallback)
- {
- CATChld* self = CATChld::NewLC(aGloblePhone, aCtsyDispatcherCallback);
- CleanupStack::Pop(self);
- return self;
- }
-
-// ---------------------------------------------------------------------------
-// CATChld::NewLC
-// other items were commented in a header
-// ---------------------------------------------------------------------------
-CATChld* CATChld::NewLC(CGlobalPhonemanager& aGloblePhone,
- CCtsyDispatcherCallback& aCtsyDispatcherCallback)
- {
- CATChld* self = new (ELeave) CATChld(aGloblePhone, aCtsyDispatcherCallback);
- CleanupStack::PushL(self);
- self->ConstructL();
- return self;
- }
-
-
-// ---------------------------------------------------------------------------
-// CATChld::~CATChld
-// other items were commented in a header
-// ---------------------------------------------------------------------------
-CATChld::~CATChld()
- {
- }
-
-// ---------------------------------------------------------------------------
-// CATChld::CATChld
-// other items were commented in a header
-// ---------------------------------------------------------------------------
-CATChld::CATChld(CGlobalPhonemanager& aGloblePhone,
- CCtsyDispatcherCallback& aCtsyDispatcherCallback)
- : CAtCommandBase(aGloblePhone, aCtsyDispatcherCallback)
- {
- LOGTEXT(_L8("[Ltsy CallControl] Starting CATChld::CATChld()"));
-
- //Set At type
- iAtType = ELtsyAT_Call_CHLD;
-
- //Init variable
- InitVariable();
- }
-
-// ---------------------------------------------------------------------------
-// CATChld::InitVariable
-// other items were commented in a header
-// ---------------------------------------------------------------------------
-void CATChld::InitVariable()
- {
- LOGTEXT(_L8("[Ltsy CallControl] Starting CATChld::InitVariable()"));
-
- iIOStatus = KErrNone;
- iATResult = KErrNone;
- iATStep = EATNotInProgress;
- iIpcType = ELtsyReqCallHangup;
- iChldType = ERleaseSpecificCall;
- iCallId = KLtsyErrorCallId;
- iConnectedCallId = KLtsyErrorCallId;
- iHangupCause = -1;
- }
-
-// ---------------------------------------------------------------------------
-// CATChld::IsHoldCall
-// other items were commented in a header
-// ---------------------------------------------------------------------------
-TBool CATChld::IsHoldCall(TInt aHoldCallId)
- {
- LOGTEXT(_L8("[Ltsy CallControl] Starting CATChld::IsHoldCall()"));
- if (aHoldCallId >= KLtsyMinCallId && aHoldCallId <= KLtsyMaxCallId)
- {
- const TLtsyCallInformation& tCallInfo = iPhoneGlobals.GetCallInfoManager().GetCallInformationByCallId(aHoldCallId);
- if (TLtsyCallInformation::EUsed == tCallInfo.GetCallIdIsUsedInfo() &&
- TLtsyCallInformation::EHeldCall == tCallInfo.GetCallState())
- {
- return ETrue;
- }
- }
- return EFalse;
- }
-
-// ---------------------------------------------------------------------------
-// CATChld::IsActiveCall
-// other items were commented in a header
-// ---------------------------------------------------------------------------
-TBool CATChld::IsActiveCall(TInt aActiveCallId)
- {
- LOGTEXT(_L8("[Ltsy CallControl] Starting CATChld::IsActiveCall()"));
-
- if (aActiveCallId >= KLtsyMinCallId && aActiveCallId <= KLtsyMaxCallId)
- {
- const TLtsyCallInformation& tCallInfo = iPhoneGlobals.GetCallInfoManager().GetCallInformationByCallId(aActiveCallId);
- if (TLtsyCallInformation::EUsed == tCallInfo.GetCallIdIsUsedInfo() &&
- TLtsyCallInformation::EActiveCall == tCallInfo.GetCallState())
- {
- return ETrue;
- }
- }
-
- return EFalse;
- }
-
-// ---------------------------------------------------------------------------
-// CATChld::ConstructL
-// other items were commented in a header
-// ---------------------------------------------------------------------------
-void CATChld::ConstructL()
- {
- LOGTEXT(_L8("[Ltsy CallControl] Starting CATChld::ConstructL()"));
-
- //Invoke base class function
- CAtCommandBase::ConstructL();
-
- //Set read and write timeout
- SetTimeOut(KLtsyDefaultWriteTimeOut, KLtsyCHLDReadTimeout);
- }
-
-// ---------------------------------------------------------------------------
-// CATChld::ExecuteCommand
-// other items were commented in a header
-// ---------------------------------------------------------------------------
-void CATChld::ExecuteCommand()
- {
- LOGTEXT(_L8("[Ltsy CallControl] Starting CATChld::ExecuteCommand()"));
-
- if (iChldType == EReleaseAllHeldCallOrUDUB ||
- iChldType == EReleaseAllActiveCallAndAcceptHeldWaiting ||
- iChldType == EHeldAllActiveCallAndAcceptHeldWaiting ||
- iChldType == EAddHeldCallToConversation ||
- iChldType == ECallTranster)
- {
- iTxBuffer.Format(KLtsyCHLDCommandFormat1, iChldType);
- }
- else
- {
- if (iChldType == ERleaseSpecificCall) //Release one call
- {
-
- const TLtsyCallInformation& tCallInfo(iPhoneGlobals.GetCallInfoManager().GetCallInformationByCallId(iCallId));
-
- if (TLtsyCallInformation::EDialingCall == tCallInfo.GetCallState() ||
- TLtsyCallInformation::EAlertingCall == tCallInfo.GetCallState())
- {
- //Hang up dialing or Alerting call(Outgoing call)
- iTxBuffer.Copy(KLtsyReleaseOutgoingCommand);
- }
- else //Other call
- {
- iTxBuffer.Format(KLtsyCHLDCommandFormat2, EReleaseAllActiveCallAndAcceptHeldWaiting, iCallId);
- }
- }
- else
- {
- iTxBuffer.Format(KLtsyCHLDCommandFormat2, EHeldAllActiveCallAndAcceptHeldWaiting, iCallId);
- }
- }
-
- LOGTEXT2(_L8("[Ltsy CallControl] CHLD Command = %S"), &iTxBuffer);
-
- //Setting waiting for modem time, when Command is too fast, Modem response error
- if (iIpcType == ELtsyReqCallHold ||
- iIpcType == ELtsyReqCallResume ||
- iIpcType == ELtsyReqCallSwap)
- {
- User::After(KLtsyCHLDWaitForModemTime);
- }
-
- Write();
- iATStep = EATWaitForWriteComplete;
- }
-
-// ---------------------------------------------------------------------------
-// CATChld::StartRequest
-// other items were commented in a header
-// ---------------------------------------------------------------------------
-void CATChld::StartRequest()
- {
- ExecuteCommand();
- }
-
-// ---------------------------------------------------------------------------
-// CATChld::SetIpcType
-// other items were commented in a header
-// ---------------------------------------------------------------------------
-void CATChld::SetIpcType(TIpcType aIpcType)
- {
- iIpcType = aIpcType;
- }
-
-// ---------------------------------------------------------------------------
-// CATChld::SetChldType
-// other items were commented in a header
-// ---------------------------------------------------------------------------
-void CATChld::SetChldType(TChldType aChldType)
- {
- iChldType = aChldType;
- }
-
-// ---------------------------------------------------------------------------
-// CATChld::SetCallId
-// other items were commented in a header
-// ---------------------------------------------------------------------------
-void CATChld::SetCallId(TInt aCallId)
- {
- iCallId = aCallId;
- }
-
-// ---------------------------------------------------------------------------
-// CATChld::SetConnectedCallId
-// other items were commented in a header
-// ---------------------------------------------------------------------------
-void CATChld::SetConnectedCallId(TInt aConnectedCallId)
- {
- iConnectedCallId = aConnectedCallId;
- }
-
-// ---------------------------------------------------------------------------
-// CATChld::SetHangupCase
-// other items were commented in a header
-// ---------------------------------------------------------------------------
-void CATChld::SetHangupCase(TInt aHangupCase)
- {
- iHangupCause = aHangupCase;
- }
-
-// ---------------------------------------------------------------------------
-// CATChld::ParseResponseL
-// other items were commented in a header
-// ---------------------------------------------------------------------------
-void CATChld::ParseResponseL(const TDesC8& aResponseBuf)
- {
- LOGTEXT(_L8("[Ltsy CallControl] Starting CATChld::ParseResponseL()"));
-
- if (aResponseBuf.Match(KLtsyOkString) == 0)
- {
- iATResult = KErrNone;
- }
- else if (aResponseBuf.Match(KLtsyErrorString) == 0)
- {
- iATResult = KErrArgument;
- }
- }
-
-// ---------------------------------------------------------------------------
-// CATChld::HandleIOError
-// other items were commented in a header
-// ---------------------------------------------------------------------------
-void CATChld::HandleIOError()
- {
- LOGTEXT(_L8("[Ltsy CallControl] Starting CATChld::HandleIOError()"));
-
- //Hangup
- if (iIpcType == ELtsyReqCallHangup)
- {
- iCtsyDispatcherCallback.CallbackCallControlHangUpComp(iIOStatus, iCallId);
- }
- else if (iIpcType == ELtsyReqCallHold) //Hold call
- {
- iCtsyDispatcherCallback.CallbackCallControlHoldComp(iIOStatus, iCallId);
- }
- else if (iIpcType == ELtsyReqCallResume) //Resume call
- {
- iCtsyDispatcherCallback.CallbackCallControlResumeComp(iIOStatus, iCallId);
- }
- else if (iIpcType == ELtsyReqCallSwap) //Swap call
- {
- iCtsyDispatcherCallback.CallbackCallControlSwapComp(iIOStatus);
- }
- }
-
-// ---------------------------------------------------------------------------
-// CATChld::HandleResponseError
-// other items were commented in a header
-// ---------------------------------------------------------------------------
-void CATChld::HandleResponseError()
- {
- LOGTEXT(_L8("[Ltsy CallControl] Starting CATChld::HandleResponseError()"));
-
- //Hangup
- if (iIpcType == ELtsyReqCallHangup)
- {
- iCtsyDispatcherCallback.CallbackCallControlHangUpComp(iATResult, iCallId);
- }
- else if (iIpcType == ELtsyReqCallHold) //Hold call
- {
- iCtsyDispatcherCallback.CallbackCallControlHoldComp(iATResult, iCallId);
- }
- else if (iIpcType == ELtsyReqCallResume) //Resume call
- {
- iCtsyDispatcherCallback.CallbackCallControlResumeComp(iATResult, iCallId);
- }
- else if (iIpcType == ELtsyReqCallSwap) //Swap call
- {
- iCtsyDispatcherCallback.CallbackCallControlSwapComp(iATResult);
- }
- }
-
-// ---------------------------------------------------------------------------
-// CATChld::HandleCHLDComplete
-// other items were commented in a header
-// ---------------------------------------------------------------------------
-void CATChld::HandleCHLDComplete()
- {
- LOGTEXT(_L8("[Ltsy CallControl] Starting CATChld::HandleCHLDComplete()"));
-
- //Hangup
- if (iIpcType == ELtsyReqCallHangup)
- {
- HandleHangupComplete();
- }
- else if (iIpcType == ELtsyReqCallHold) //Hold call
- {
- HandleHoldComplete();
- }
- else if (iIpcType == ELtsyReqCallResume) //Resume call
- {
- HandleResumeComplete();
- }
- else if (iIpcType == ELtsyReqCallSwap) //Swap call
- {
- HandleSwapComplete();
- }
- }
-
-// ---------------------------------------------------------------------------
-// CATChld::HandleHangupComplete
-// other items were commented in a header
-// ---------------------------------------------------------------------------
-void CATChld::HandleHangupComplete()
- {
- LOGTEXT(_L8("[Ltsy CallControl] Starting CATChld::HandleHangupComplete()"));
-
- const TLtsyCallInformation& tCallInfo(iPhoneGlobals.GetCallInfoManager().GetCallInformationByCallId(iCallId));
-
- if (tCallInfo.GetCallIdIsUsedInfo() == TLtsyCallInformation::EUsed)
- {
- if (tCallInfo.GetCallState() == TLtsyCallInformation::EInComingCall ||
- tCallInfo.GetCallState() == TLtsyCallInformation::EWaitingCall )
- {
- iCtsyDispatcherCallback.CallbackCallControlNotifyCallStatusChangeInd(KErrGsmCCCallRejected,
- iCallId,
- RMobileCall::EStatusDisconnecting);
-
- iCtsyDispatcherCallback.CallbackCallControlNotifyCallStatusChangeInd(KErrGsmCCCallRejected,
- iCallId,
- RMobileCall::EStatusIdle);
- }
- else
- {
- iCtsyDispatcherCallback.CallbackCallControlNotifyCallStatusChangeInd(KErrGsmCCNormalCallClearing,
- iCallId,
- RMobileCall::EStatusDisconnecting);
-
- iCtsyDispatcherCallback.CallbackCallControlNotifyCallStatusChangeInd(KErrGsmCCNormalCallClearing,
- iCallId,
- RMobileCall::EStatusIdle);
- }
- }
-
- //Call back
- iCtsyDispatcherCallback.CallbackCallControlHangUpComp(KErrNone, iCallId);
- //Setting all call id state unused
- iPhoneGlobals.GetCallInfoManager().ResetCallInformationByCallId(iCallId);
- }
-
-
-// ---------------------------------------------------------------------------
-// CATChld::HandleHoldComplete
-// other items were commented in a header
-// ---------------------------------------------------------------------------
-void CATChld::HandleHoldComplete()
- {
- LOGTEXT(_L8("[Ltsy CallControl] Starting CATChld::HandleHoldComplete()"));
-
- iCtsyDispatcherCallback.CallbackCallControlHoldComp(KErrNone, iCallId);
- iCtsyDispatcherCallback.CallbackCallControlNotifyCallStatusChangeInd(KErrNone,
- iCallId,
- RMobileCall::EStatusHold);
-
- //Notify CTSY Call id Idel
- for (TInt n = KLtsyMinCallId; n <= KLtsyMaxCallId; n++)
- {
- TLtsyCallInformation& tCallInfo(iPhoneGlobals.GetCallInfoManager().GetCallInformationByCallId(n));
- if (n == iCallId)
- {
- if (tCallInfo.GetCallIdIsUsedInfo() == TLtsyCallInformation::EUsed)
- {
- //Setting my call state active
- tCallInfo.SetCallState(TLtsyCallInformation::EHeldCall);
- }
- }
- else
- {
- if (tCallInfo.GetCallIdIsUsedInfo() == TLtsyCallInformation::EUsed)
- {
- //Setting my call state active
- tCallInfo.SetCallState(TLtsyCallInformation::EActiveCall);
-
- //Notify CTSY call state change
- iCtsyDispatcherCallback.CallbackCallControlNotifyCallStatusChangeInd(KErrNone,
- n,
- RMobileCall::EStatusConnected);
- }
- }
- }
- }
-
-// ---------------------------------------------------------------------------
-// CATChld::HandleResumeComplete
-// other items were commented in a header
-// ---------------------------------------------------------------------------
-void CATChld::HandleResumeComplete()
- {
- LOGTEXT(_L8("[Ltsy CallControl] Starting CATChld::HandleResumeComplete()"));
-
- iCtsyDispatcherCallback.CallbackCallControlResumeComp(KErrNone, iCallId);
- iCtsyDispatcherCallback.CallbackCallControlNotifyCallStatusChangeInd(KErrNone,
- iCallId,
- RMobileCall::EStatusConnected);
-
- //Notify CTSY Call id Idel
- for (TInt n = KLtsyMinCallId; n <= KLtsyMaxCallId; n++)
- {
- TLtsyCallInformation& tCallInfo(iPhoneGlobals.GetCallInfoManager().GetCallInformationByCallId(n));
- if (n == iCallId)
- {
- if (tCallInfo.GetCallIdIsUsedInfo() == TLtsyCallInformation::EUsed)
- {
- //Setting my call state active
- tCallInfo.SetCallState(TLtsyCallInformation::EActiveCall);
- }
- }
- else
- {
- if (tCallInfo.GetCallIdIsUsedInfo() == TLtsyCallInformation::EUsed)
- {
- //Setting my call state active
- tCallInfo.SetCallState(TLtsyCallInformation::EHeldCall);
-
- //Notify CTSY call state change
- iCtsyDispatcherCallback.CallbackCallControlNotifyCallStatusChangeInd(KErrNone,
- n,
- RMobileCall::EStatusHold);
- }
- }
- }
- }
-
-// ---------------------------------------------------------------------------
-// CATChld::HandleSwapComplete
-// other items were commented in a header
-// ---------------------------------------------------------------------------
-void CATChld::HandleSwapComplete()
- {
- LOGTEXT(_L8("[Ltsy CallControl] Starting CATChld::HandleSwapComplete()"));
-
- iCtsyDispatcherCallback.CallbackCallControlSwapComp(KErrNone);
-
- //One call or two calls situation
- for (TInt n = KLtsyMinCallId; n <= KLtsyMaxCallId; n++)
- {
- TLtsyCallInformation& tCallInfo(iPhoneGlobals.GetCallInfoManager().GetCallInformationByCallId(n));
-
- if (tCallInfo.GetCallIdIsUsedInfo() == TLtsyCallInformation::EUsed &&
- tCallInfo.GetCallState() == TLtsyCallInformation::EActiveCall)
- {
- tCallInfo.SetCallState(TLtsyCallInformation::EHeldCall);
- //Notify CTSY call state change
- iCtsyDispatcherCallback.CallbackCallControlNotifyCallStatusChangeInd(KErrNone,
- n,
- RMobileCall::EStatusHold);
- }
- else if (tCallInfo.GetCallIdIsUsedInfo() == TLtsyCallInformation::EUsed &&
- ((tCallInfo.GetCallState() == TLtsyCallInformation::EHeldCall) ||
- (tCallInfo.GetCallState() == TLtsyCallInformation::EWaitingCall) ||
- (tCallInfo.GetCallState() == TLtsyCallInformation::EInComingCall))) //????
- {
- tCallInfo.SetCallState(TLtsyCallInformation::EActiveCall);
- //Notify CTSY call state change
- iCtsyDispatcherCallback.CallbackCallControlNotifyCallStatusChangeInd(KErrNone,
- n,
- RMobileCall::EStatusConnected);
- }
- }
- }
-
-// ---------------------------------------------------------------------------
-// CATChld::Complete
-// other items were commented in a header
-// ---------------------------------------------------------------------------
-void CATChld::Complete()
- {
- LOGTEXT(_L8("[Ltsy CallControl] Starting CATChld::Complete()"));
-
- //Check Hang up arrray
- if ((iIpcType == ELtsyReqCallHangup) && iPhoneGlobals.GetCallInfoManager().GetHangupCommandRecords().IsHaveRecords())
- {
- InitVariable();
-
- TATHanupCommandInfo tHangupInfo;
- iPhoneGlobals.GetCallInfoManager().GetHangupCommandRecords().GetFirstHangupCommandInfoAndRemoveIt(tHangupInfo);
-
- //Set hang up info
- SetCallId(tHangupInfo.iCallId);
- SetHangupCase(tHangupInfo.iHangupCause);
- SetIpcType(CATChld::ELtsyReqCallHangup);
- SetChldType(CATChld::ERleaseSpecificCall);
- StartRequest();
- return;
- }
-
- //Invoke base class complete
- CAtCommandBase::Complete();
-
- //Set hang up active
- iPhoneGlobals.GetCallInfoManager().GetHangupCommandRecords().SetHangupActiveFlag(EFalse);
-
- //Let other command can use I/O port
- iPhoneGlobals.iEventSignalActive = EFalse;
- }
-
-// ---------------------------------------------------------------------------
-// CATChld::EventSignal
-// other items were commented in a header
-// ---------------------------------------------------------------------------
-void CATChld::EventSignal(TAtEventSource aEventSource, TInt aStatus)
- {
- LOGTEXT(_L8("[Ltsy CallControl] Starting CATChld::EventSignal()"));
- if(aEventSource == EReadCompletion)
- {
- LOGTEXT(_L8("[Ltsy CallControl] The EventSource = EReadCompletion"));
- }
- else if(aEventSource == EWriteCompletion)
- {
- LOGTEXT(_L8("[Ltsy CallControl] The EventSource = EWriteCompletion"));
- }
- else if(aEventSource == ETimeoutCompletion)
- {
- LOGTEXT(_L8("[Ltsy CallControl] The EventSource = ETimeoutCompletion"));
- }
- else
- {
- LOGTEXT(_L8("[Ltsy CallControl] The EventSource = Unknown"));
- }
-
- LOGTEXT2(_L8("[Ltsy CallControl]aStatus = %d"),aStatus);
-
- iIOStatus = aStatus;
-
- if (iIOStatus != KErrNone)
- {
- HandleIOError();
- Complete();
- return;
- }
-
- switch (iATStep)
- {
- case EATWaitForWriteComplete:
- iATStep = EATReadComplete;
- break;
-
- case EATReadComplete:
- ClearCurrentLine();
- if (iATResult == KErrNone)
- {
- HandleCHLDComplete();
- }
- else
- {
- HandleResponseError();
- }
- Complete();
- break;
-
- default:
- break;
- }
- }
-
-//End of file