diff -r 000000000000 -r a41df078684a kerneltest/e32test/usbho/t_usbdi/inc/testinterfacebase.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/kerneltest/e32test/usbho/t_usbdi/inc/testinterfacebase.h Mon Oct 19 15:55:17 2009 +0100 @@ -0,0 +1,190 @@ +#ifndef __TEST_INTERFACE_BASE_H +#define __TEST_INTERFACE_BASE_H + +/* +* 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 testinterfacebase.h +* @internalComponent +* +* +*/ + + + +#include +#include "usbclientstatewatcher.h" +#include "controlendpointreader.h" +#include "endpointwriter.h" +#include "endpointstallwatcher.h" + + +namespace NUnitTesting_USBDI + { + +// Forward declarations + +class RUsbTestDevice; +class CInterfaceSettingBase; + +/** +This class represents a test USB interface for the test USB device + +*/ +class CInterfaceBase : public CBase, public MAlternateSettingObserver, public MRequestHandler + { +public: + /** + Constructor, build an interface for a USB modelled device + @param aTestDevice the device that this is an interface for + @param aName the name given to the interface + */ + + CInterfaceBase(RUsbTestDevice& aTestDevice,const TDesC16& aName); + + /** + Base class 2nd phase construction + */ + + void BaseConstructL(); + + /** + Destructor + */ + + virtual ~CInterfaceBase(); + + /** + Adds an alternate interface setting for this interface + @param aInterface an alternate interface setting associated with this interface + */ + + void AddInterfaceSettingL(CInterfaceSettingBase* aInterfaceSetting); + + /** + Accesses an alternate interface setting with the specified setting number + @param aSettingNumber the alternate interface setting number + @return a referrence to the alternate setting + */ + + CInterfaceSettingBase& AlternateSetting(TInt aSettingNumber) const; + + /** + Query the number of alternate interface settings for this interface + @return the number of alternate interface settings + */ + + TInt InterfaceSettingCount() const; + + /** + Start the interface reading interface directed control transfers on endpoint 0 + */ + + void StartEp0Reading(); + + /** + Stop the interface from reading interface directed control transfers on endpoint 0 + */ + + void StopEp0Reading(); + + /** + Stall the specified endpoint + @param aEndpointNumber the endpoint to stall + @return KErrNone if successful + */ + + TInt StallEndpoint(TUint16 aEndpointNumber); + +public: // From MAlternateSettingObserver + + /** + Get notification when the host selects an alternate interface setting on this interface + @param aAlternateInterfaceSetting the alternate interface setting number + */ + virtual void AlternateInterfaceSelectedL(TInt aAlternateInterfaceSetting); + +public: // From MEndpointDataHandler + + /** + Process any Ep0 control transfer requests that are interface directed + @param aRequest the request number (id) + @param aValue the parameter to the request + @param aIndex the interface number that the request is directed at + @param aDataReqLength the data size in the transfer DATA1 packet(s) + @param aPayload the request content data (i.e. all the data from DATA1 packets) + */ + virtual TInt ProcessRequestL(TUint8 aRequest,TUint16 aValue,TUint16 aIndex,TUint16 aDataReqLength,const TDesC8& aPayload); + +private: + TUint32 ExtractNumberL(const TDesC8& aPayload); + void ExtractTwoNumbersL(const TDesC8& aPayload, TUint32& aFirstNum, TUint32& aSecondNum); + +private: + /** + The test device object that owns this interface + */ + RUsbTestDevice& iDevice; + + /** + The USB client driver + Only use interface related API + */ + RDevUsbcClient iClientDriver; + + /** + The alternate settings for this interface + */ + RPointerArray iAlternateSettings; + + /** + The watcher of alternate interface selection by host + */ + CAlternateInterfaceSelectionWatcher* iSelectionWatcher; + + /** + The watcher of endpoint stalling + */ + CEndpointStallWatcher* iStallWatcher; + + /** + The reader of interface control endpoint 0 + */ + CControlEndpointReader* iEp0Reader; + + /** + The writer of interface control endpoint 0 + */ + CEndpointWriter* iEp0Writer; + + /** + */ + TBuf16<64> iInterfaceName; + + /** + An Auxiliary buffer, to be used for anything temporary + */ + HBufC8* iAuxBuffer; + + /** + The current alternate interface setting that is selected (defaults to zero) + */ + TInt iCurrentAlternateInterfaceSetting; + }; + + + } + +#endif +