diff -r 000000000000 -r a41df078684a kerneltest/e32test/usbho/t_usbdi/src/controlendpointreader.cpp --- /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(" 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(&iwValue); + *p = aData[2]; + *(p+1) = aData[3]; + + // The index for the request + p = reinterpret_cast(&iwIndex); + *p = aData[4]; + *(p+1) = aData[5]; + + // The length of data transfer + p = reinterpret_cast(&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); + } + } + } + } + + + }