diff -r 000000000000 -r 3553901f7fa8 telephonyserverplugins/multimodetsy/test/Te_LoopBack/Te_LoopBackATBASE.CPP --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/telephonyserverplugins/multimodetsy/test/Te_LoopBack/Te_LoopBackATBASE.CPP Tue Feb 02 01:41:59 2010 +0200 @@ -0,0 +1,298 @@ +// 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: +// This file implements the base methods for the CATBase class. It deals primarily +// expect string handling and event notification. +// used by the current etel regression test harness. +// +// + +/** + @file + @note Only the constructors, destructors, panic function,and event handling code are +*/ + +#include "Te_LoopBackATBASE.H" +#include "Te_LoopBackATIO.H" +#include "Te_LoopBackSLOGGER.H" + +_LIT(KCsyName,"LOOPBACK"); +_LIT(KPortName,"LOOPBACK::1"); + +const TBps KBaudRate=EBps115200; +const TDataBits KDataBits=EData8; +const TStopBits KStopBits=EStop1; +const TUint KHandshake=0; + +// +// Panic Function +// +GLDEF_C void HayesPanic(THayesPanic aPanicNumber) +/** + * This global method implements a test harness specific panic, identified as the Hayes + * TSY. The panic reason is passed as a parameter. + * + * @param aPanicNumber, one of the reasons specified in the THayesPanic enumeration. + * @return None + */ + { + _LIT(KPanicHayesTSY,"Hayes TSY"); + User::Panic(KPanicHayesTSY,aPanicNumber); + } + +// +// CATParamListEntry +// A pointer to a meaningful result in the received buffer from the modem +// +CATParamListEntry::CATParamListEntry(const TPtrC8& aPtr) +/** + * This function is currently not used by the Etel regression test harness. + */ + { + iResultPtr.Set(aPtr); + } + +CATParamListEntry::~CATParamListEntry() +/** + * This function is currently not used by the Etel regression test harness. + */ + {} + +void CATParamListEntry::Deque() +/** + * This function is currently not used by the Etel regression test harness. + */ + { + iLink.Deque(); + } + +// +// The Command Base Class +// +CATBase::CATBase() +/** + * This constructor determines the offset of the iLink member of the a CATParamListEntry + * and stores this offset in the iRxResults member of the CATBase object. + * + * @return None + */ + { + iRxResults.SetOffset(_FOFF(CATParamListEntry,iLink)); + } + +CATBase::~CATBase() +// +// Assumes CATIO pointer is still valid +// +/** + * This destructor first checks to see if the iResults list is empty. If it is not, it + * clears the list and deletes the entry. + */ + { + if(!iRxResults.IsEmpty()) + { + CATParamListEntry* entry; + TDblQueIter iter(iRxResults); + while (entry = iter++,entry!=NULL) + { + entry->Deque(); + delete entry; + } + } + } + +void CATBase::ConstructL() +/** + * This is the second phase constructor for the CATBase class. It configures the port + * specified by the combination of KCsyName and KPortName. Configuration data includes + * baud rate, data bits, stop bits, and handshake. + * + * @leave This method leaves if there is an error configuring the port or potentially + * from the NewL method which is called. + */ + { + TFileName csyName(KCsyName); + TName portName(KPortName); + iIo=CATIO::NewL(csyName,portName); + TCommConfigV01 commConfig; + commConfig.iRate=KBaudRate; + commConfig.iDataBits=KDataBits; + commConfig.iStopBits=KStopBits; + commConfig.iHandshake=KHandshake; + + TCommConfig commConfigWrapper(commConfig); + TInt r=iIo->ConfigurePort(commConfigWrapper); + User::LeaveIfError(r); + } + +void CATBase::GenericEventSignal(TEventSource aEventSource, TInt aStatus) +// +// If an IO error has occurred, complete this ATBase-object with the error. +// +/** + * This method is the general event signal routine. If an IO error occurred, + * the Complete method is called with the errored status. If there is no + * error (aStatus is KErrNone) the EventSignal routine is called. + * + * @param aEventSource a TEventSource member which indicates Read, Write, + * or Timeout completion. + * @param aStatus status from the IO operation. If this status is NOT + * KErrNone, the Complete method will be called instead of the + * EventSignal method. + */ + { + if (aStatus!=KErrNone) + { + LOGTEXT2(_L8("CATBase EventSignal received error status %d"),aStatus); + Complete(aStatus); + } + else + EventSignal(aEventSource); + } + +void CATBase::AddStdExpectStrings() +/** + * This function is currently not used by the Etel regression test harness. + */ + { + if (!iOKExpectString) + iOKExpectString=iIo->AddExpectString(this,KOKString); + if (!iErrorExpectString) + iErrorExpectString=iIo->AddExpectString(this,KErrorString); + } + +void CATBase::ValidateExpectStringL() +/** + * This function is currently not used by the Etel regression test harness. + */ + { + if(iIo->FoundChatString()==iErrorExpectString) + { + LOGTEXT(_S8("CATBase Modem returned ERROR in response to command")); + User::Leave(KErrGeneral); + } + if(iIo->FoundChatString()==iOKExpectString) + return; + LOGTEXT(_S8("CATBase Modem returned unexpected response to command")); + User::Leave(KErrUnknown); + } + +void CATBase::RemoveStdExpectStrings() +/** + * This function is currently not used by the Etel regression test harness. + */ + { + LOGTEXT(_S8("RemoveStdExpectStrings()")); + iIo->RemoveExpectString(iOKExpectString); + iOKExpectString=NULL; + iIo->RemoveExpectString(iErrorExpectString); + iErrorExpectString=NULL; + } + +void CATBase::ParseBufferLC() +// +// Parses buffer +// +/** + * This function is currently not used by the Etel regression test harness. + */ { + LOGTEXT(_S8("CATBase Parse the Buffer List")); + iBuffer.Set(iIo->GetRxBufferLC(iBufferMarker)); + TInt pos=iBuffer.FindF(KOKString); + if(pos==KErrNotFound) + { + LOGTEXT(_S8("CATBase Error - Cannot find OK'")); + User::Leave(pos); + } + // Place everything before the OK into buffer + iBuffer.Set(iBuffer.Left(pos)); + + TLex8 yyLex(iBuffer); + TChar peek; + // Look for '=' sign and move seeker cursor to the right of it if it exists + pos=iBuffer.Find(_L8("=")); + if (pos!=KErrNotFound) + { + yyLex.Inc(pos+1); + } + // Move cursor past any spaces or open brackets + yyLex.SkipSpace(); + peek=yyLex.Peek(); + if ((TUint)peek=='(' || (TUint)peek=='[' || (TUint)peek=='{') + yyLex.Inc(); + + yyLex.SkipSpace(); + peek = yyLex.Peek(); + do + { + // Search for the next character that is not a comma, and mark it. Keep looking at + // subsequent characters until it is a space,comma,closing bracket or end of string. + // Store the string (between marked character and current character) as an item in + // an array of CATParamListEntry object pointers. + if (peek!=',') + { + yyLex.Mark(); + do + { + yyLex.Inc(); + peek=yyLex.Peek(); + } + while (peek!=',' && !peek.IsSpace() && peek!=')'&& peek!=']'&& peek!='}' && !yyLex.Eos()); + CATParamListEntry* aParamListEntry = new (ELeave) CATParamListEntry(yyLex.MarkedToken()); + iRxResults.AddLast(*aParamListEntry); + } + // Move cursor to the next non-space character, and end the loop if it is a closing + // bracket or the end of the buffer. + yyLex.Inc(); + yyLex.SkipSpace(); + peek = yyLex.Peek(); + } + while (!yyLex.Eos() && peek!=')'&& peek!=']'&& peek!='}'); + } + +void CATBase::StandardWriteCompletionHandler(TEventSource aSource,TInt aTimeOut) +/** + * This function is currently not used by the Etel regression test harness. + */ + { + __ASSERT_ALWAYS(aSource==EWriteCompletion,HayesPanic(EATCommand_IllegalCompletionWriteExpected)); + iIo->SetTimeOut(this,aTimeOut * KOneSecondPause); + AddStdExpectStrings(); + } + +void CATBase::Write(const TPtrC8& aCommand,TInt aTimeOut) +/** + * This function is currently not used by the Etel regression test harness. + */ + { + iTxBuffer.Format(_L8("%S\r"),&aCommand); + iIo->Write(this,iTxBuffer); + iIo->SetTimeOut(this,aTimeOut * KOneSecondPause); + } + +void CATBase::Write(const TPtrC8& aCommand,TInt aTimeOut,TInt aValue) +/** + * This function is currently not used by the Etel regression test harness. + */ { + iTxBuffer.Format(_L8("%S%d\r"),&aCommand,aValue); + iIo->Write(this,iTxBuffer); + iIo->SetTimeOut(this,aTimeOut * KOneSecondPause); + } + +void CATBase::WriteExpectingResults(const TPtrC8& aCommand,TInt aTimeOut) +/** + * This function is currently not used by the Etel regression test harness. + */ { + iIo->MarkRxBuffer(iBufferMarker); + Write(aCommand,aTimeOut); + }