diff -r 000000000000 -r 3553901f7fa8 telephonyserverplugins/multimodetsy/hayes/ATO.CPP --- /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 +#include +#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 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; + }