kerneltest/e32test/device/t_firco2.cpp
changeset 0 a41df078684a
equal deleted inserted replaced
-1:000000000000 0:a41df078684a
       
     1 // Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies).
       
     2 // All rights reserved.
       
     3 // This component and the accompanying materials are made available
       
     4 // under the terms of the License "Eclipse Public License v1.0"
       
     5 // which accompanies this distribution, and is available
       
     6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     7 //
       
     8 // Initial Contributors:
       
     9 // Nokia Corporation - initial contribution.
       
    10 //
       
    11 // Contributors:
       
    12 //
       
    13 // Description:
       
    14 // e32test\device\t_firco2.cpp
       
    15 // 
       
    16 //
       
    17 
       
    18 #include "t_fir2.h"
       
    19 
       
    20 #if defined(__VC32__) && _MSC_VER==1100
       
    21 // Disable MSVC++ 5.0 aggressive warnings about non-expansion of inline functions. 
       
    22 #pragma warning(disable : 4710)	// function '...' not expanded
       
    23 #endif
       
    24 
       
    25 #ifdef __WINS__
       
    26 	#include <es_sock.h>
       
    27 	RSocketServ ss;
       
    28 #endif
       
    29 
       
    30 TBuf8<2060> WriteBuf;
       
    31 TBuf8<2060> ReadBuf;
       
    32 TInt iTimeDelay=1000000;
       
    33 TInt iBufSz=2000;
       
    34 TBool iRWToWrite=EFalse;
       
    35 TInt iDataStart=-1;
       
    36 TInt iReadFramesCount=0;
       
    37 TInt iFrameError=0;
       
    38 void ResetReadBuffer()
       
    39 	{
       
    40 	TInt i=0;
       
    41 	ReadBuf.SetLength(2060);
       
    42 	for(i=0;i<2050;i++)
       
    43 		ReadBuf[i] ='R';
       
    44 	}
       
    45 
       
    46 TBool CompareBuffers(TInt aLen)
       
    47 	{
       
    48 	TInt i=0;
       
    49 	while(i<aLen)
       
    50 		{
       
    51 		if(ReadBuf[i]!=WriteBuf[i])
       
    52 			return EFalse;
       
    53 		i++;
       
    54 		}
       
    55 	return ETrue;
       
    56 	}
       
    57 
       
    58 void SetUpBuffers()
       
    59 	{
       
    60 	TInt i=0;
       
    61 	WriteBuf.SetLength(2060);
       
    62 	ReadBuf.SetLength(2060);
       
    63 	for(i=0;i<2050;i++)
       
    64 		{
       
    65 		WriteBuf[i]=i+iDataStart;
       
    66 		ReadBuf[i] ='R';
       
    67 		}
       
    68 	WriteBuf.SetLength(2000);
       
    69 	}
       
    70 
       
    71 CActiveConsole::CActiveConsole(CConsoleBase* aConsole) 
       
    72 	: CActive(EPriorityNormal)
       
    73 	{
       
    74 	iConsole=aConsole;
       
    75 	iInit1  =EFalse;
       
    76 	iInit2  =EFalse;
       
    77 	iInit3  =EFalse;
       
    78 	}
       
    79 
       
    80 CActiveConsole* CActiveConsole::NewLC(CConsoleBase* aConsole)
       
    81 	{
       
    82 	CActiveConsole* self = new (ELeave) CActiveConsole(aConsole);
       
    83 	self->ConstructL();
       
    84 	return self;
       
    85 	}
       
    86 
       
    87 void CActiveConsole::ConstructL ()
       
    88 	{ 
       
    89 	TFirCaps aCapsBuf;
       
    90 	TFirCapsV01& aCaps=aCapsBuf();
       
    91 	TFirConfig aConfigBuf;
       
    92 	TFirConfigV01& aConfig=aConfigBuf();
       
    93 
       
    94 	iConsole->Printf(_L("\r\n"));
       
    95 	CActiveScheduler::Add(this);			// Add to active scheduler
       
    96 
       
    97 	// Load Driver
       
    98 	TInt ret=User::LoadPhysicalDevice(_L("Difir"));
       
    99 	if (ret!=KErrNone)
       
   100 		iConsole->Printf(_L("Error %d on loading Fir PDD\r\n"),ret);
       
   101 	else
       
   102 		iConsole->Printf(_L("Successfully loaded Fir PDD\r\n"));
       
   103 
       
   104 	ret=User::LoadLogicalDevice(_L("Efir"));
       
   105 	if (ret!=KErrNone)
       
   106 		iConsole->Printf(_L("Error %d on loading Fir LDD\r\n"),ret);
       
   107 	else
       
   108 		iConsole->Printf(_L("Successfully loaded Fir LDD\r\n"));
       
   109 
       
   110 	SetUpBuffers();
       
   111 
       
   112 	ret=iPort.Open(0);
       
   113 	if (ret!=KErrNone)
       
   114 		iConsole->Printf(_L("Error %d on opening Fastir port\r\n"),ret);
       
   115 	else
       
   116 		iConsole->Printf(_L("Successfully opened Fastir port\r\n"));
       
   117 
       
   118 
       
   119 	ret=iPort.Caps(aCapsBuf);
       
   120 	if (ret!=KErrNone)
       
   121 		iConsole->Printf(_L("Error %d on getting caps\r\n"),ret);
       
   122 	else
       
   123 		{
       
   124 		if(aCaps.iRate & KCapsFirBps576000)
       
   125 			iConsole->Printf(_L("576000 Bps supported\r\n"));
       
   126 		if(aCaps.iRate & KCapsFirBps1152000)
       
   127 			iConsole->Printf(_L("1152000 Bps supported\r\n"));
       
   128 		if(aCaps.iRate & KCapsFirBps4000000)
       
   129 			iConsole->Printf(_L("4000000 Bps supported\r\n"));
       
   130 		}
       
   131 
       
   132 	/*ret=iPort.Config(aConfigBuf);
       
   133 	if (ret!=KErrNone)
       
   134 		iConsole->Printf(_L("Error %d getting config\r\n"),ret);
       
   135 	else
       
   136 		{
       
   137 		if(aConfig.iRate==EBps4000000)
       
   138 			iConsole->Printf(_L("Fir config is 4Mbps\r\n"));
       
   139 		}*/
       
   140 
       
   141 	iRW=CActiveRW::NewL(iConsole,&iPort);
       
   142 	if(iRW)
       
   143 		iConsole->Printf(_L("Have created writer\r\n"));
       
   144 	else
       
   145 		iConsole->Printf(_L("Failed to create writer\r\n"));
       
   146 	}
       
   147 
       
   148 CActiveConsole::~CActiveConsole()
       
   149 	{
       
   150 	// Make sure we're cancelled
       
   151 	Cancel();
       
   152 
       
   153 	if(iRW)
       
   154 		delete iRW;
       
   155 
       
   156 	iPort.Close();
       
   157 	}
       
   158 
       
   159 void  CActiveConsole::DoCancel()
       
   160 	{
       
   161 	iConsole->ReadCancel();
       
   162 	}
       
   163 
       
   164 void  CActiveConsole::RunL()
       
   165 	{
       
   166 	ProcessKeyPressL(TChar(iConsole->KeyCode()));
       
   167 //	iConsole->Printf(_L("CActiveConsole - Completed with code %d\r\n\r\n"), iStatus.Int ());
       
   168 	}
       
   169 
       
   170 void CActiveConsole::RequestCharacter()
       
   171 	{
       
   172 	if(!iInit1)
       
   173 		{
       
   174 		Options1();
       
   175 		return;
       
   176 		}
       
   177 	if(!iInit2)
       
   178 		{
       
   179 		Options2();
       
   180 		return;
       
   181 		}
       
   182 	if(!iInit3)
       
   183 		{
       
   184 		Options3();
       
   185 		return;
       
   186 		}
       
   187 	  // A request is issued to the CConsoleBase to accept a
       
   188 	  // character from the keyboard.
       
   189 	iConsole->Printf(_L("*********************************\r\n"));
       
   190 	iConsole->Printf(_L("press Escape to quit\r\n"));
       
   191 	iConsole->Printf(_L("press '1'/'2' to start as reader/writer\r\n"));
       
   192 	iConsole->Printf(_L("press '3' stop \r\n"));
       
   193 	iConsole->Printf(_L("press '8' to show FIR regs\r\n"));
       
   194 	iConsole->Printf(_L("press '9' to show Dma reader regs\r\n"));
       
   195 	iConsole->Printf(_L("press '0' to show Dma writer regs\r\n"));
       
   196 	iConsole->Printf(_L("press 'a' to show TxBuf info\r\n"));
       
   197 	iConsole->Printf(_L("press 'b' to show RxBuf info\r\n"));
       
   198 	iConsole->Printf(_L("press 'c' to show Chunk info\r\n"));
       
   199 	iConsole->Printf(_L("press 'd' to show misc info\r\n"));
       
   200 	iConsole->Read(iStatus); 
       
   201 	SetActive();
       
   202 	}
       
   203 
       
   204 void CActiveConsole::Options1()
       
   205 	{
       
   206 	iConsole->Printf(_L("*****Choose Delay*****\r\n"));
       
   207 	iConsole->Printf(_L("press '1'  576000 baud\r\n"));
       
   208 	iConsole->Printf(_L("press '2' 1152000 baud\r\n"));
       
   209 	iConsole->Printf(_L("press '3' 4000000 baud\r\n"));
       
   210 	iConsole->Read(iStatus); 
       
   211 	SetActive();	
       
   212 	}
       
   213 
       
   214 void CActiveConsole::Options2()
       
   215 	{
       
   216 	iConsole->Printf(_L("*****Choose Delay*****\r\n"));
       
   217 	iConsole->Printf(_L("press '1' 1.00 sec delay\r\n"));
       
   218 	iConsole->Printf(_L("press '2'  100  ms delay\r\n"));
       
   219 	iConsole->Printf(_L("press '3'   10  ms delay\r\n"));
       
   220 	iConsole->Printf(_L("press '4'    1  ms delay\r\n"));
       
   221 	iConsole->Printf(_L("press '5' 0.00 sec delay\r\n"));
       
   222 	iConsole->Read(iStatus); 
       
   223 	SetActive();	
       
   224 	}
       
   225 
       
   226 void CActiveConsole::Options3()
       
   227 	{
       
   228 	iConsole->Printf(_L("****Choose Buf Sz*****\r\n"));
       
   229 	iConsole->Printf(_L("press '1' 1    byte \r\n"));
       
   230 	iConsole->Printf(_L("press '2' 4    bytes\r\n"));
       
   231 	iConsole->Printf(_L("press '3' 2000 bytes\r\n"));
       
   232 	iConsole->Printf(_L("press '4' 2042 bytes\r\n"));
       
   233 	iConsole->Read(iStatus); 
       
   234 	SetActive();	
       
   235 	}
       
   236 
       
   237 void CActiveConsole::ProcessKeyPressL(TChar aChar)
       
   238 	{
       
   239 	if (aChar == EKeyEscape)
       
   240 		{
       
   241 		CActiveScheduler::Stop();
       
   242 		return;
       
   243 		}
       
   244 
       
   245 	if(!iInit1)
       
   246 		{
       
   247 		switch(aChar)
       
   248 			{
       
   249 		case '1':
       
   250 			iBaudRate=EBps576000;
       
   251 			break;
       
   252 		case '2':
       
   253 			iBaudRate=EBps1152000;
       
   254 			break;
       
   255 		case '3':
       
   256 			iBaudRate=EBps4000000;
       
   257 			break;
       
   258 		default:
       
   259 			iBaudRate=EBps4000000;
       
   260 			break;
       
   261 			}
       
   262 		iConsole->Printf(_L("Baud rate: %d\r\n"),iBaudRate);
       
   263 		iInit1=ETrue;
       
   264 		TFirConfig aConfigBuf;
       
   265 		TFirConfigV01& aConfig=aConfigBuf();
       
   266 		aConfig.iRate=iBaudRate;
       
   267 		TInt ret=iPort.SetConfig(aConfigBuf);
       
   268 		iConsole->Printf(_L("Error %d on SetConfig\r\n"),ret);
       
   269 		RequestCharacter();
       
   270 		return;
       
   271 		}
       
   272 
       
   273 	if(!iInit2)
       
   274 		{
       
   275 		switch(aChar)
       
   276 			{
       
   277 		case '1'://1 sec
       
   278 			iTimeDelay=1000000;
       
   279 			break;
       
   280 		case '2'://100ms
       
   281 			iTimeDelay=100000;
       
   282 			break;
       
   283 		case '3'://10ms
       
   284 			iTimeDelay=10000;
       
   285 			break;
       
   286 		case '4'://1ms
       
   287 			iTimeDelay=1000;
       
   288 			break;
       
   289 		case '5'://0 sec
       
   290 			iTimeDelay=0;
       
   291 			break;
       
   292 		default:
       
   293 			iTimeDelay=1000000;
       
   294 			break;
       
   295 			}
       
   296 		iConsole->Printf(_L("Time Delay: %d\r\n"),iTimeDelay);
       
   297 		iInit2=ETrue;
       
   298 		RequestCharacter();
       
   299 		return;
       
   300 		}
       
   301 	if(!iInit3)
       
   302 		{
       
   303 		switch(aChar)
       
   304 			{
       
   305 		case '1':
       
   306 			iBufSz=1;
       
   307 			break;
       
   308 		case '2':
       
   309 			iBufSz=4;
       
   310 			break;
       
   311 		case '3':
       
   312 			iBufSz=2000;
       
   313 			break;
       
   314 		case '4':
       
   315 			iBufSz=2042;
       
   316 			break;
       
   317 		default:
       
   318 			iBufSz=2000;
       
   319 			break;
       
   320 			}
       
   321 		iConsole->Printf(_L("Buffer size: %d\r\n"),iBufSz);
       
   322 		iInit3=ETrue;
       
   323 		RequestCharacter();
       
   324 		return;
       
   325 		}
       
   326 
       
   327 	switch (aChar)
       
   328 		{
       
   329 	case '1'://start reader
       
   330 		iRW->Start(EFalse);
       
   331 		break;
       
   332 	case '2'://stop reader
       
   333 		iRW->Start(ETrue);
       
   334 		break;
       
   335 	case '3'://start writer
       
   336 		iRW->Stop();
       
   337 		break;
       
   338 	case '8'://get fir regs
       
   339 		GetFirRegs();
       
   340 		break;
       
   341 	case '9'://get dma reader regs
       
   342 		GetDmaReaderRegs();
       
   343 		break;
       
   344 	case '0'://get dma writer regs
       
   345 		GetDmaWriterRegs();
       
   346 		break;
       
   347 	case 'a'://get TxBuf info
       
   348 		GetWriteBufInfo();
       
   349 		break;
       
   350 	case 'b'://get RxBuf info
       
   351 		GetReadBufInfo();
       
   352 		break;
       
   353 	case 'c'://get RxBuf info
       
   354 		GetChunkInfo();
       
   355 		break;
       
   356 	case 'd':
       
   357 		GetMiscInfo();
       
   358 		break;
       
   359 	default:
       
   360 		iConsole->Printf(_L("\r\nUnknown Command\r\n\r\n"));
       
   361 		break;
       
   362 		}
       
   363 	RequestCharacter ();
       
   364 	return;
       
   365 	}
       
   366 
       
   367 void CActiveConsole::GetFirRegs()
       
   368 	{
       
   369 /*	TInt r=0;
       
   370 	TDebugFirRegs FirRegs;
       
   371 	r=iPort.GetFirRegs(FirRegs);
       
   372 	iConsole->Printf(_L("RxFrameStatus  : 0x%x\r\n"),FirRegs.RxFrameStatus);
       
   373 	iConsole->Printf(_L("RxBufferEmpty  : 0x%x\r\n"),FirRegs.RxBufferEmpty);
       
   374 	iConsole->Printf(_L("RxError        : 0x%x\r\n"),FirRegs.RxError);
       
   375 	iConsole->Printf(_L("RxOverrun      : 0x%x\r\n"),FirRegs.RxOverrun);
       
   376 	iConsole->Printf(_L("CrcError       : 0x%x\r\n"),FirRegs.CrcError);
       
   377 	iConsole->Printf(_L("TxFrameStatus  : 0x%x\r\n"),FirRegs.TxFrameStatus);
       
   378 	iConsole->Printf(_L("TxBufferEmpty  : 0x%x\r\n"),FirRegs.TxBufferEmpty);
       
   379 	iConsole->Printf(_L("TxBufferSz     : 0x%x\r\n"),FirRegs.TxBufferSz);
       
   380 	iConsole->Printf(_L("TxOverrun      : 0x%x\r\n"),FirRegs.TxOverrun);*/
       
   381 	}
       
   382 
       
   383 void CActiveConsole::GetDmaReaderRegs()
       
   384 	{
       
   385 /*	TInt r=0;
       
   386 	TDebugDmaChannelRegs DmaRxRegs;
       
   387 	r=iPort.GetDmaRxRegs(DmaRxRegs);
       
   388 	iConsole->Printf(_L("Rx Chan       : %d\n"),DmaRxRegs.DmaRxChannel);
       
   389 	iConsole->Printf(_L("Tx Chan       : %d\n"),DmaRxRegs.DmaTxChannel);
       
   390 	iConsole->Printf(_L("Rx DmaMode    : %d\n"),DmaRxRegs.DmaMode);
       
   391 	iConsole->Printf(_L("Rx DmaState   : %d\n"),DmaRxRegs.DmaState);
       
   392 	iConsole->Printf(_L("Rx DmaBuffer  : %x\n"),DmaRxRegs.DmaBuffer);
       
   393 	User::After(1000000);
       
   394 	iConsole->Printf(_L("Rx DmGauge    : %d\n"),DmaRxRegs.DmaGauge);
       
   395 	iConsole->Printf(_L("Rx DmaSrcAddr : %x\n"),DmaRxRegs.DmaSrcAddr);
       
   396 	iConsole->Printf(_L("Rx DmaSrcInc  : %d\n"),DmaRxRegs.DmaSrcInc);
       
   397 	iConsole->Printf(_L("Rx DmaDestAddr: %x\n"),DmaRxRegs.DmaDestAddr);
       
   398 	iConsole->Printf(_L("Rx DmaDestInc : %d\n"),DmaRxRegs.DmaDestInc);
       
   399 	iConsole->Printf(_L("Rx DmaCount   : %d\n"),DmaRxRegs.DmaCount);
       
   400 	iConsole->Printf(_L("Rx MatchClear : %x\n"),DmaRxRegs.MatchClear);
       
   401 	iConsole->Printf(_L("Rx MatchSet   : %x\n"),DmaRxRegs.MatchSet);*/
       
   402 	}
       
   403 
       
   404 void CActiveConsole::GetDmaWriterRegs()
       
   405 	{
       
   406 /*	TInt r=0;
       
   407 	TDebugDmaChannelRegs DmaTxRegs;
       
   408 	r=iPort.GetDmaTxRegs(DmaTxRegs);
       
   409 	iConsole->Printf(_L("Rx Chan       : %d\n"),DmaTxRegs.DmaRxChannel);
       
   410 	iConsole->Printf(_L("Tx Chan       : %d\n"),DmaTxRegs.DmaTxChannel);
       
   411 	iConsole->Printf(_L("Tx DmaMode    : %d\n"),DmaTxRegs.DmaMode);
       
   412 	iConsole->Printf(_L("Tx DmaState   : %d\n"),DmaTxRegs.DmaState);
       
   413 	iConsole->Printf(_L("Tx DmaBuffer  : %x\n"),DmaTxRegs.DmaBuffer);
       
   414 	User::After(1000000);
       
   415 	iConsole->Printf(_L("Tx DmGauge    : %d\n"),DmaTxRegs.DmaGauge);
       
   416 	iConsole->Printf(_L("Tx DmaSrcAddr : %x\n"),DmaTxRegs.DmaSrcAddr);
       
   417 	iConsole->Printf(_L("Tx DmaSrcInc  : %d\n"),DmaTxRegs.DmaSrcInc);
       
   418 	iConsole->Printf(_L("Tx DmaDestAddr: %x\n"),DmaTxRegs.DmaDestAddr);
       
   419 	iConsole->Printf(_L("Tx DmaDestInc : %d\n"),DmaTxRegs.DmaDestInc);
       
   420 	iConsole->Printf(_L("Tx DmaCount   : %d\n"),DmaTxRegs.DmaCount);
       
   421 	iConsole->Printf(_L("Tx MatchClear : %x\n"),DmaTxRegs.MatchClear);
       
   422 	iConsole->Printf(_L("Tx MatchSet   : %x\n"),DmaTxRegs.MatchSet);*/
       
   423 	}
       
   424 
       
   425 void CActiveConsole::GetReadBufInfo()
       
   426 	{
       
   427 /*	TInt r=0;
       
   428 	TDebugBufInfo RxBufInfo;
       
   429 	r=iPort.GetRxBufInfo(RxBufInfo);
       
   430 	iConsole->Printf(_L("Rx no frames: %d\r\n"),RxBufInfo.iNoFrames);
       
   431 	iConsole->Printf(_L("Rx insert pt: %d\r\n"),RxBufInfo.iInsertPt);
       
   432 	iConsole->Printf(_L("Rx remove pt: %d\r\n"),RxBufInfo.iRemovePt);
       
   433 	iConsole->Printf(_L("Rx head     : %d\r\n"),RxBufInfo.iHead);
       
   434 	iConsole->Printf(_L("Rx tail     : %d\r\n"),RxBufInfo.iTail);
       
   435 	iConsole->Printf(_L("Rx active   : %x\r\n"),RxBufInfo.iActive);
       
   436 	iConsole->Printf(_L("Rx cancelled: %x\r\n"),RxBufInfo.iCancelled);
       
   437 	iConsole->Printf(_L("Client read pending: %d\r\n"),RxBufInfo.iClientPending);*/
       
   438 	}
       
   439 
       
   440 void CActiveConsole::GetWriteBufInfo()
       
   441 	{
       
   442 /*	TInt r=0;
       
   443 	TDebugBufInfo TxBufInfo;
       
   444 	r=iPort.GetTxBufInfo(TxBufInfo);
       
   445 	iConsole->Printf(_L("Tx no frames: %d\r\n"),TxBufInfo.iNoFrames);
       
   446 	iConsole->Printf(_L("Tx insert pt: %d\r\n"),TxBufInfo.iInsertPt);
       
   447 	iConsole->Printf(_L("Tx remove pt: %d\r\n"),TxBufInfo.iRemovePt);
       
   448 	iConsole->Printf(_L("Tx head     : %d\r\n"),TxBufInfo.iHead);
       
   449 	iConsole->Printf(_L("Tx tail     : %d\r\n"),TxBufInfo.iTail);
       
   450 	iConsole->Printf(_L("Tx active   : %x\r\n"),TxBufInfo.iActive);
       
   451 	iConsole->Printf(_L("Tx cancelled: %x\r\n"),TxBufInfo.iCancelled);
       
   452 	iConsole->Printf(_L("Client write pending: %d\r\n"),TxBufInfo.iClientPending);*/
       
   453 	}
       
   454 
       
   455 void CActiveConsole::GetChunkInfo()
       
   456 	{
       
   457 /*	TInt r=0;
       
   458 	TDebugDmaChunkInfo DmaChunkInfo;
       
   459 	r=iPort.GetDmaChunkInfo(DmaChunkInfo);
       
   460 	iConsole->Printf(_L("Write Chunk Phys Addr: 0x%x\r\n"),DmaChunkInfo.iWriteChunkPhysAddr);
       
   461 	iConsole->Printf(_L("Write Chunk Lin  Addr: 0x%x\r\n"),DmaChunkInfo.iWriteChunkLinAddr);
       
   462 	iConsole->Printf(_L("Read  Chunk Phys Addr: 0x%x\r\n"),DmaChunkInfo.iReadChunkPhysAddr);
       
   463 	iConsole->Printf(_L("Read  Chunk Lin  Addr: 0x%x\r\n"),DmaChunkInfo.iReadChunkLinAddr);
       
   464 	//iConsole->Printf(_L("Write Chunk Phys Addr: 0x%x\r\n"),DmaChunkInfo.);*/
       
   465 	}
       
   466 
       
   467 void CActiveConsole::GetMiscInfo()
       
   468 	{
       
   469 /*	TInt r=0;
       
   470 	TDebugInterruptInfo IntInfo;
       
   471 	r=iPort.GetInterruptsInfo(IntInfo);
       
   472 	iConsole->Printf(_L("No writer dma interrupts: %d\r\n"),IntInfo.iNoTxDmaInts);	
       
   473 	iConsole->Printf(_L("No reader dma interrupts: %d\r\n"),IntInfo.iNoRxDmaInts);
       
   474 	//iConsole->Printf(_L("Total Hspp interrupts: %d\r\n"),IntInfo.iNoHsspInts);
       
   475 	iConsole->Printf(_L("Total Framing errors : %d\r\n"),IntInfo.iNoFREs);
       
   476 	iConsole->Printf(_L("No xtra chars        : %d\r\n"),IntInfo.iNoXtraChars);
       
   477 	iConsole->Printf(_L("No unwanted chars    : %d\r\n"),IntInfo.iNoUnwantedChars);
       
   478 	iConsole->Printf(_L("No Rx dma leftovers  : %d\r\n"),IntInfo.iNoRxDmaInts);*/
       
   479 	}
       
   480 
       
   481 
       
   482 
       
   483 //
       
   484 // class CActiveRW
       
   485 //
       
   486 
       
   487 CActiveRW::CActiveRW(CConsoleBase* aConsole,RDevFir* aPort)
       
   488 	: CActive (EPriorityNormal)
       
   489 	{
       
   490 	iConsole=aConsole;
       
   491 	iPort=aPort;
       
   492 	iLength=0;
       
   493 	}
       
   494 
       
   495 CActiveRW* CActiveRW::NewL(CConsoleBase* aConsole,RDevFir* aPort)
       
   496 	{
       
   497 	CActiveRW* self = new (ELeave) CActiveRW(aConsole,aPort);
       
   498 
       
   499 	CleanupStack::PushL (self);
       
   500 	self->ConstructL();
       
   501 	CActiveScheduler::Add (self);
       
   502 	CleanupStack::Pop ();
       
   503 	return (self);
       
   504 	}
       
   505 
       
   506 void CActiveRW::ConstructL()
       
   507 	{
       
   508 	}
       
   509 
       
   510 CActiveRW::~CActiveRW()
       
   511 	{
       
   512 	Cancel();
       
   513 	}
       
   514 
       
   515 void CActiveRW::RunL ()
       
   516 	{
       
   517 	TInt i=0;
       
   518 	TInt wlength=0;
       
   519 	TInt rlength=0;
       
   520 	TInt iErrorRate=0;
       
   521 	if (iStatus != KErrNone)
       
   522 		iConsole->Printf(_L("Error %d\r\n"),iStatus.Int());
       
   523 
       
   524 	//return;
       
   525 		if(iTimeDelay)
       
   526 			User::After(iTimeDelay);
       
   527 
       
   528 
       
   529 	if(iNextXfer==EWriteXfer)
       
   530 		{
       
   531 //			;
       
   532 		iReadFramesCount++;
       
   533 		rlength=ReadBuf[0]+(ReadBuf[1]<<8);
       
   534 
       
   535 		if(rlength != ReadBuf.Length() || iStatus != KErrNone)
       
   536 			{
       
   537 			iFrameError++;
       
   538 			RDebug::Print(_L("********* SHORT READ %d %d*********\n\r"),rlength, ReadBuf.Length());
       
   539 			}
       
   540 
       
   541 		if(iReadFramesCount>0)
       
   542 			iErrorRate=(iFrameError*2000+iReadFramesCount)/(2*iReadFramesCount);
       
   543 		else
       
   544 			iErrorRate=0;
       
   545 
       
   546 		iConsole->Printf(_L("R:%-4d FR %d EC %d Err %3d.%1d%%\r\n"),
       
   547 			ReadBuf.Length(),iReadFramesCount,iFrameError, iErrorRate/10,iErrorRate%10);
       
   548 
       
   549 		iLength=(iLength+1)%10;
       
   550 		wlength=iBufSz+iLength;
       
   551 		WriteBuf.SetLength(wlength);
       
   552 		WriteBuf[0]=wlength;
       
   553 		WriteBuf[1]=wlength>>8;
       
   554 		iPort->Write(iStatus, WriteBuf, WriteBuf.Length());
       
   555 		iNextXfer=EReadXfer;
       
   556 
       
   557 		}
       
   558 	else
       
   559 		{ // EReadXfer
       
   560 		iConsole->Printf(_L("W:%-4d "),WriteBuf.Length());
       
   561 		ResetReadBuffer();
       
   562 		iPort->Read(iStatus, ReadBuf, ReadBuf.Length());
       
   563 		iNextXfer=EWriteXfer;
       
   564 		}
       
   565 	SetActive();
       
   566 	}
       
   567 
       
   568 void CActiveRW::Start(TBool StartWriting)
       
   569 	{
       
   570 	if(IsActive())
       
   571 		return;
       
   572 
       
   573 	if(StartWriting)
       
   574 		{
       
   575 		if(iDataStart==-1)
       
   576 			{
       
   577 			iDataStart=0x80;
       
   578 			SetUpBuffers();
       
   579 			}
       
   580 		iConsole->Printf(_L("Starting with write.....\r\n"));
       
   581 		WriteBuf.SetLength(iBufSz);
       
   582 			WriteBuf[0]=iBufSz;
       
   583 			WriteBuf[1]=iBufSz>>8;
       
   584 		iPort->Write(iStatus, WriteBuf, WriteBuf.Length());
       
   585 		iNextXfer=EReadXfer;
       
   586 		}
       
   587 	else
       
   588 		{
       
   589 		if(iDataStart==-1)
       
   590 			{
       
   591 			iDataStart=0x0;
       
   592 			SetUpBuffers();
       
   593 			}
       
   594 		iConsole->Printf(_L("Starting with read.....\r\n"));
       
   595 		iPort->Read(iStatus, ReadBuf, ReadBuf.Length());
       
   596 		iNextXfer=EWriteXfer;
       
   597 		}
       
   598 	SetActive();
       
   599 	}
       
   600 
       
   601 void CActiveRW::Stop()
       
   602 	{
       
   603 	iConsole->Printf(_L("Stopping.....\r\n"));
       
   604 	Cancel();
       
   605 	}
       
   606 
       
   607 void CActiveRW::DoCancel()
       
   608 	{
       
   609 	iPort->WriteCancel();
       
   610 	iPort->ReadCancel();
       
   611 	}
       
   612 
       
   613 #pragma warning (default:4710)