kerneltest/e32test/usbho/t_usbdi/src/controlendpointreader.cpp
changeset 0 a41df078684a
child 253 d37db4dcc88d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/kerneltest/e32test/usbho/t_usbdi/src/controlendpointreader.cpp	Mon Oct 19 15:55:17 2009 +0100
@@ -0,0 +1,130 @@
+// Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "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:
+// @file controlendpointreader.cpp
+// @internalComponent
+// 
+//
+
+#include "controlendpointreader.h"
+#include "testdebug.h"
+
+namespace NUnitTesting_USBDI
+	{	
+	
+CControlEndpointReader::CControlEndpointReader(RDevUsbcClient& aClientDriver,MRequestHandler& aRequestHandler)
+:	CEndpointReader(aClientDriver,EEndpoint0),
+	iDeviceToHost(EFalse),
+	iDataPhase(EFalse),
+	iRequestHandler(aRequestHandler)
+	{
+	}
+	
+	
+CControlEndpointReader::~CControlEndpointReader()
+	{
+	LOG_FUNC
+	}
+
+
+void CControlEndpointReader::ReadRequestsL()
+	{
+	LOG_FUNC
+	
+	// Read a packet from endpoint 0 (this should incorporate a request)
+	
+	ReadPacketL(this);
+	}
+	
+
+void CControlEndpointReader::EndpointReadError(TEndpointNumber aEndpointNumber,TInt aErrorCode)
+	{
+	LOG_FUNC
+	
+	RDebug::Printf("<Error %d> Asynchronous read on endpoint %d",aErrorCode,aEndpointNumber);
+	}
+	
+	
+void CControlEndpointReader::DataReceivedFromEndpointL(TEndpointNumber aEndpointNumber,const TDesC8& aData)
+	{
+	LOG_FUNC
+	
+	RDebug::Printf("ibRequestType = %d, ibRequest = %d, iwValue = %d, iwIndex = %d, iwLength = %d",ibRequestType, ibRequest, iwValue, iwIndex, iwLength);
+	RDebug::Printf("iDeviceToHost = %d, iDataPhase = %d",iDeviceToHost,iDataPhase);
+	if(iDeviceToHost && iDataPhase)
+		{
+		TInt err = iRequestHandler.ProcessRequestL(ibRequest,iwValue,iwIndex,iwLength,aData);
+		RDebug::Printf("ProdessRequestL returned %d",err);
+		
+		if(err != KErrAbort)
+			{
+			iDeviceToHost = EFalse;
+			iDataPhase = EFalse;
+			
+			// After processing the request keep reading for more requests
+			// from the host
+			ReadPacketL(this);
+			}
+		}
+	else
+		{
+		// Understand the setup packet
+		ibRequestType = aData[0];
+		iDeviceToHost = (ibRequestType & 0x80) == 0x00;
+			
+		// The request
+		ibRequest = aData[1];
+				
+		// The request parameter
+		TUint8* p = reinterpret_cast<TUint8*>(&iwValue);
+		*p = aData[2];
+		*(p+1) = aData[3];
+		
+		// The index for the request
+		p = reinterpret_cast<TUint8*>(&iwIndex);
+		*p = aData[4];
+		*(p+1) = aData[5];
+		
+		// The length of data transfer
+		p = reinterpret_cast<TUint8*>(&iwLength);
+		*p = aData[6];
+		*(p+1) = aData[7];
+		
+		iDataPhase = (iwLength > 0);
+		
+		// Read all information about the request sent by the host
+		// i.e. any DATA1 packets sent after the setup DATA0 packet
+		RDebug::Printf("AFTER UPDATES");
+		RDebug::Printf("ibRequestType = %d, ibRequest = %d, iwValue = %d, iwIndex = %d, iwLength = %d",ibRequestType, ibRequest, iwValue, iwIndex, iwLength);
+		RDebug::Printf("iDeviceToHost = %d, iDataPhase = %d",iDeviceToHost,iDataPhase);
+		if(iDeviceToHost && iDataPhase)
+			{
+			RDebug::Printf("Issuing another read of %d bytes",iwLength);
+			ReadL(iwLength);
+			}
+		else
+			{
+			TInt err = iRequestHandler.ProcessRequestL(ibRequest,iwValue,iwIndex,iwLength,KNullDesC8);
+			
+			if(err != KErrAbort)
+				{
+				// After processing the request keep reading for more requests
+				// from the host
+				ReadPacketL(this);
+				}
+			}
+		}
+	}
+	
+	
+	}