telephonyserverplugins/multimodetsy/hayes/ATO.CPP
changeset 0 3553901f7fa8
child 24 6638e7f4bd8f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/multimodetsy/hayes/ATO.CPP	Tue Feb 02 01:41:59 2010 +0200
@@ -0,0 +1,171 @@
+// Copyright (c) 1997-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:
+// Go to On-Line(data) state from On-Line Command state
+// 
+//
+
+#include <commsdattypesv1_1.h>
+#include <cdblen.h>
+#include "ATO.H"
+#include "mSLOGGER.H"
+#include "PHONE.H"
+#include "NOTIFY.H"
+#include "ATIO.H"
+
+CATSetToOnlineDataMode* CATSetToOnlineDataMode::NewL(CATIO* aIo, CTelObject* aTelObject,CATInit* aInit,CPhoneGlobals* aPhoneGlobals)
+	{
+	CATSetToOnlineDataMode* ato=new(ELeave) CATSetToOnlineDataMode(aIo, aTelObject, aInit, aPhoneGlobals);
+	CleanupStack::PushL(ato);
+	ato->ConstructL();
+	CleanupStack::Pop();
+	return ato;
+	}
+
+CATSetToOnlineDataMode::CATSetToOnlineDataMode(CATIO* aIo, CTelObject* aTelObject,CATInit* aInit,CPhoneGlobals* aPhoneGlobals)
+											: CATCallAlterCommands(aIo,aTelObject,aInit,aPhoneGlobals)
+	{}
+
+CATSetToOnlineDataMode::~CATSetToOnlineDataMode()
+	{
+	iIo->RemoveExpectStrings(this);
+	}
+
+void CATSetToOnlineDataMode::Start(TTsyReqHandle aTsyReqHandle, TAny* /*aParams*/)
+	{
+	LOGTEXT(_L8("Starting ATO Command to force into On-Line Data Mode"));
+	iReqHandle=aTsyReqHandle;
+	TBuf8<KCommsDbSvrMaxFieldLength> toOnLineDataCommand;
+	TInt ret = iPhoneGlobals->iConfiguration->ConfigModemString(TPtrC(KCDTypeNameOnLine), toOnLineDataCommand);
+	if (ret)
+		{
+		iTelObject->ReqCompleted(iReqHandle, ret);
+		}
+	else
+		{
+		iTxBuffer.Format(KATAndStringFormatString,&toOnLineDataCommand);
+		iIo->Write(this,iTxBuffer);
+		iIo->SetTimeOut(this,KOneSecondPause);
+		iState=EATOWaitForWriteComplete;
+		}
+	}
+
+void CATSetToOnlineDataMode::Stop(TTsyReqHandle aTsyReqHandle)
+	{
+	__ASSERT_ALWAYS(aTsyReqHandle == iReqHandle,Panic(EIllegalTsyReqHandle));
+	__ASSERT_ALWAYS(iState!=EATNotInProgress,Panic(EATCommand_NotInProgress));
+	iIo->SetTimeOut(this,KOneSecondPause);
+	iState = EATCancelling;
+	}
+
+void CATSetToOnlineDataMode::ValidateExpectStringWithConnectL()
+	{
+	if(iIo->FoundChatString()==iErrorExpectString)
+		{
+		LOGTEXT(_L8("Modem returned ERROR in response to command"));
+		User::Leave(KErrGeneral);
+		}
+	if(iIo->FoundChatString()==iConnectExpectString)
+		return;
+	LOGTEXT(_L8("Modem returned unknown response to command"));
+	User::Leave(KErrGeneral);
+	}
+
+void CATSetToOnlineDataMode::RemoveATOExpectStrings()
+	{
+	iIo->RemoveExpectString(iConnectExpectString);
+	iConnectExpectString=NULL;
+	iIo->RemoveExpectString(iErrorExpectString);
+	iErrorExpectString=NULL;
+	}
+
+void CATSetToOnlineDataMode::CompleteWithIOError(TEventSource /*aSource*/,TInt aStatus)
+	{
+	if (iState!=EATNotInProgress)
+		{
+		iIo->WriteAndTimerCancel(this);
+		iTelObject->ReqCompleted(iReqHandle, aStatus);
+		iState = EATNotInProgress;
+		}
+	}
+
+void CATSetToOnlineDataMode::EventSignal(TEventSource aSource)
+	{
+	if (aSource==ETimeOutCompletion)
+		{
+		LOGTEXT(_L8("Timeout Error during ATO"));
+		RemoveATOExpectStrings();
+		iPhoneGlobals->iPhoneStatus.iInitStatus=EPhoneNotInitialised;
+		iTelObject->ReqCompleted(iReqHandle,KErrTimedOut);
+		iState=EATNotInProgress;
+		return;
+		}
+	switch(iState)
+		{
+	case EATOWaitForWriteComplete:
+		{
+		__ASSERT_ALWAYS(aSource==EWriteCompletion,Panic(EATCommand_IllegalCompletionWriteExpected));
+		if (!iConnectExpectString)
+			{
+			TInt ret = iPhoneGlobals->iConfiguration->ConfigModemString(TPtrC(KCDTypeNameConnect),iConnectString);
+			if (ret)
+				{
+				iTelObject->ReqCompleted(iReqHandle, ret);
+				return;
+				}
+			AppendWildCardChar(iConnectString);
+			iConnectExpectString=iIo->AddExpectString(this,iConnectString);
+			}
+		if (!iErrorExpectString)
+			iErrorExpectString=iIo->AddExpectString(this,KErrorString);
+		iIo->SetTimeOut(this);
+		iState=EATOReadCompleted;
+		}
+		break;
+
+	case EATOReadCompleted:
+		{
+		__ASSERT_ALWAYS(aSource==EReadCompletion,Panic(EATCommand_IllegalCompletionWriteExpected));
+		TRAPD(ret,ValidateExpectStringWithConnectL());
+		Complete(ret,aSource);
+		}
+		break;
+
+	case EATCancelling:
+		{
+		if (aSource==EWriteCompletion)
+			{
+			iIo->SetTimeOut(this,KOneSecondPause);
+			}
+		else
+			{
+			Complete(KErrCancel,aSource);
+			}
+		}
+		break;
+
+	default:
+		break;
+		}
+	}
+
+void CATSetToOnlineDataMode::Complete(TInt aError,TEventSource aSource)
+	{
+	RemoveATOExpectStrings();
+	iPhoneGlobals->iPhoneStatus.iMode = RPhone::EModeOnlineData;
+	if (aError==KErrNone)
+		iIo->Cancel();	// OK as long as this command is only called from LoanDataPort
+	CATCommands::Complete(aError,aSource);
+	iTelObject->ReqCompleted(iReqHandle, aError);
+	iState=EATNotInProgress;
+	}