telephonyserverplugins/multimodetsy/test/Te_LoopBack/Te_LoopBackATBASE.CPP
changeset 0 3553901f7fa8
--- /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<CATParamListEntry> 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);
+	}