diff -r 000000000000 -r a41df078684a kerneltest/e32test/usbho/t_usbdi/inc/testinterfacesettingbase.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/kerneltest/e32test/usbho/t_usbdi/inc/testinterfacesettingbase.h Mon Oct 19 15:55:17 2009 +0100 @@ -0,0 +1,344 @@ +#ifndef __TEST_INTERFACE_SETTING_BASE_H +#define __TEST_INTERFACE_SETTING_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 testinterfacesettingbase.h +* @internalComponent +* +* +*/ + + + +#include +#include +#include +#include "testendpointbase.h" +#include "endpointreader.h" +#include "endpointwriter.h" + +namespace NUnitTesting_USBDI + { + +// For the RHashMap +inline TUint32 EndpointNumberHash(const TEndpointNumber& aEndpointNumber) + { + return DefaultHash::Integer(static_cast(aEndpointNumber)); + } + +inline TBool EndpointIdentityRelationship(const TEndpointNumber& aArg1,const TEndpointNumber& aArg2) + { + return aArg1 == aArg2; + } + + +// Forward declarations +class TEndpoint; + +/** +This class represents a base class for alternate interface settings. +The class contains the endpoints that will be configured for use when this interface setting +is selected. +*/ +class CInterfaceSettingBase : public CBase + { + + friend class CInterfaceBase; + + typedef RHashMap REndpointMap; + +public: + + /** + Constructor, build an interface setting + @param aString the name of this interface setting + */ + + explicit CInterfaceSettingBase(const TDesC& aString); + + /** + Destructor + */ + virtual ~CInterfaceSettingBase(); + + /** + Sets the specific class code, subclass code and protocol for this interface + codes are stated by the USB org. + @param aClassCode the class code for this interface + 01h Audio + 02h Communications and CDC Control (together with device) + 03h HID (Human Interface Device) + 05h Physical + 06h Image + 07h Printer + 08h Mass Storage + 0Ah CDC-Data + 0Bh Smart Card + 0Dh Content Security + 0Eh Video + DCh Diagnostic Device (together with device) + E0h Wireless Controller + EFh Miscellaneous (together with device) + FEh Application Specific + FFh Vendor Specific (together with device) + @param aSubClassCode the subclass code specified by the USB org + @param aDeviceProtocol + */ + void SetClassCodeL(TUint8 aClassCode,TUint8 aSubClassCode,TUint8 aDeviceProtocol); + + /** + Add an endpoint to this alternate interface setting + @param anEndpoint the endpoint resource to add + @return KErrNone if successful or KErrOverflow if the endpoint cannot be added due to + resource limitation + */ + TInt AddEndpoint(TEndpoint& anEndpoint); + + /** + Create + */ + void CreateEndpointReaderL(RDevUsbcClient& aClientDriver,TUint aEndpoint); + + /** + Create + */ + void CreateEndpointWriterL(RDevUsbcClient& aClientDriver,TUint aEndpoint); + + /** + Write the supplied data to the specified endpoint that can be found on + this interface setting + @param aData the data to write to the host + @param aEndpointNumber the number of the endpoint on this setting that a host + has an opened pipe to. + */ + void WriteSpecifiedDataToEndpointL(const TDesC8& aData,TUint16 aEndpointNumber); + + /** + Cancel a current asynchronous 'Write' on the specified endpoint that can be found on + this interface setting + @param aEndpointNumber the number of the endpoint on this setting that a host + has an opened pipe to. + */ + void CancelWriteDataToEndpointL(TUint16 aEndpointNumber); + + /** + Write the supplied data to the specified endpoint that can be found on + this interface setting + @param aDataPattern the data pattern to use when writing to the host + @param aNumBytes the number of bytes to write using this data pattern + @param aEndpointNumber the number of the endpoint on this setting that a host + has an opened pipe to. + */ + void WriteSpecifiedDataToEndpointL(const TDesC8& aDataPattern, TUint aNumBytes, TUint16 aEndpointNumber); + + /** + Write the supplied data to the specified endpoint that can be found on + this interface setting + @param aDataPattern the data pattern to use when writing to the host + @param aNumBytesPerWrite the number of bytes to write at each call to 'Write' using this data pattern + @param aTotalNumBytes the total number of bytes to write + @param aEndpointNumber the number of the endpoint on this setting that a host + has an opened pipe to. + */ + void RepeatedWriteSpecifiedDataToEndpointL(const TDesC8& aDataPattern, TUint aNumBytesPerWrite, TUint aTotalNumBytes, TUint16 aEndpointNumber); + + /** + Write the data cached on the 'source' endpoint to the 'write' endpoint. These endpoints can be found on + this interface setting + @param aSourceEndpointNumber the number of the endpoint on this setting that should contain cached data. + @param aWriteEndpointNumber the number of the endpoint on this setting that the cached data on 'aSourceEndpointNumber' + should be written to. + */ + void WriteCachedEndpointDataToEndpointL(const TUint16 aSourceEndpointNumber,TUint16 aWriteEndpointNumber); + + + /** + Write the supplied data to the specified endpoint that can be found on + this interface setting. Wait for Completion. + @param aDataPattern the data pattern to use when writing to the host + @param aNumBytes the number of bytes to write using this data pattern + @param aEndpointNumber the number of the endpoint on this setting that a host + has an opened pipe to. + */ + void WriteSynchronousSpecifiedDataToEndpointL(const TDesC8& aDataPattern, TUint aNumBytes, TUint16 aEndpointNumber); + + /** + Write the supplied data to the specified endpoint that can be found on + this interface setting, and halt that endpoint. Wait for Completion. + @param aDataPattern the data pattern to use when writing to the host + @param aNumBytes the number of bytes to write using this data pattern + @param aEndpointNumber the number of the endpoint on this setting that a host + has an opened pipe to. + */ + void WriteSynchronousSpecifiedDataToAndHaltEndpointL(const TDesC8& aDataPattern, TUint aNumBytes, TUint16 aEndpointNumber); + + /** + Synchronously write the data cached on the 'source' endpoint to the 'write' endpoint. These endpoints can be found on + this interface setting. Wait for Completion. + @param aSourceEndpointNumber the number of the endpoint on this setting that should contain cached data. + @param aWriteEndpointNumber the number of the endpoint on this setting that the cached data on 'aSourceEndpointNumber' + should be written to. + */ + void WriteSynchronousCachedEndpointDataToEndpointL(const TUint16 aSourceEndpointNumber,TUint16 aWriteEndpointNumber); + + /** + Synchronously write a section of the data cached on the 'source' endpoint to the 'write' endpoint. These endpoints can be found on + this interface setting. Wait for Completion. + @param aSourceEndpointNumber the number of the endpoint on this setting that should contain cached data. + @param aWriteEndpointNumber the number of the endpoint on this setting that the cached data on 'aSourceEndpointNumber' + should be written to. + @param aStartPoint the beginning of the part of the cached data that is to be written + @param aLength the length of the part of the cached data that is to be written + */ + void WriteSynchronousCachedEndpointDataToEndpointL(const TUint16 aSourceEndpointNumber,TUint16 aWriteEndpointNumber, TUint aStartPoint, TUint aLength); + + /** + Get the cached result of a validation from an endpoint + @param aEndpointNumber the number of the endpoint on this setting that a host + has an opened pipe to. + @return ETrue if the data is validated, EFalse if not + */ + TBool CachedEndpointResultL(const TUint16 aEndpointNumber); + + /** + Get the cached of the number of bytes read so far on a repeated (asynchronous) 'Read' being perfomed on an endpoint + @param aEndpointNumber the number of the endpoint on this setting that a host + has an opened pipe to. + @return the number of bytes read so far + */ + TInt NumBytesReadSoFarL(const TUint16 aEndpointNumber); + + /** + Get the cached of the number of bytes written so far on a repeated (asynchronous) 'Write' being perfomed on an endpoint + @param aEndpointNumber the number of the endpoint on this setting that a host + has an opened pipe to. + @return the number of bytes written so far + */ + TInt NumBytesWrittenSoFarL(const TUint16 aEndpointNumber); + + /** + Validate the data read on the supplied endpoint using the global pattern. + @param aDataPattern basic data pattern sent by host for comparison + @param aNumBytes - the number of bytes to validate using that data pattern + @param aEndpointNumber the number of the endpoint on this setting that a host + has an opened pipe to. + @return ETrue if the data is validated, EFalse if not + */ + TBool ValidateCachedEndpointDataL(const TDesC8& aDataPattern, const TUint aNumBytes, const TUint16 aEndpointNumber); + + /** + Validate the data read on the supplied endpoint using the global pattern. + @param aDataPattern basic data pattern sent by host for comparison + @param aStartPoint - the point (in bytes) in the data pattern to start (this value is used cyclically - so may be greater than the data pattern length) + @param aNumBytes - the number of bytes to validate using that data pattern + @param aEndpointNumber the number of the endpoint on this setting that a host + has an opened pipe to. + @return ETrue if the data is validated, EFalse if not + */ + TBool ValidateCachedEndpointDataL(const TDesC8& aDataPattern, const TUint aStartPoint, const TUint aNumBytes, const TUint16 aEndpointNumber); + + /** + Read the supplied number of bytes on the specified endpoint that can be found on + this interface setting + @param aNumBytes the amount of data to be read from the host + @param aEndpointNumber the number of the endpoint on this setting that a host + has an opened pipe to. + */ + void ReadDataFromEndpointL(TUint aNumBytes, TUint16 aEndpointNumber); + + /** + Cancel Read on the specified endpoint that can be found on + this interface setting + @param aEndpointNumber the number of the endpoint on this setting that a host + has an opened pipe to. + */ + void CancelAnyReadDataFromEndpointL(TUint16 aEndpointNumber); + + /** + Read the supplied number of bytes on the specified endpoint that can be found on + this interface setting ... then halt the endpoint + @param aNumBytes the amount of data to be read from the host + @param aEndpointNumber the number of the endpoint on this setting that a host + has an opened pipe to. + */ + void ReadDataFromAndHaltEndpointL(TUint aNumBytes, TUint16 aEndpointNumber); + + /** + Read the supplied number of bytes on the specified endpoint that can be found on + this interface setting. + Do these in sections, performing multiple 'Reads' + @param aDataPattern the data pattern to use in validation + @param aNumBytesPerRead the amount of data to be read from the host in each section + @param aTotalNumBytes the total amount of data to be read from the host + @param aEndpointNumber the number of the endpoint on this setting that a host + has an opened pipe to. + */ + void RepeatedReadAndValidateFromEndpointL(const TDesC8& aDataPattern, TUint aNumBytesPerRead, TUint aTotalNumBytes, TUint16 aEndpointNumber); +/** + Read the supplied number of bytes (or fewer if a short packet arrives) + on the specified endpoint that can be found on this interface setting + @param aNumBytes the amount of data to be read from the host + @param aEndpointNumber the number of the endpoint on this setting that a host + has an opened pipe to. + */ + void ReadDataUntilShortFromEndpointL(TUint aNumBytes, TUint16 aEndpointNumber); + + /** + Get the name of this interface setting + @return the interface setting name + */ + const TDesC& Name() const; + +private: + + /** + Disable default constructor + */ + CInterfaceSettingBase(); + +protected: + + /** + The information for this interface setting about endpoints + */ + TUsbcInterfaceInfoBuf iInterfaceInfo; + + /** + The name for this interface setting + */ + TBuf<64> iSettingString; + + /** + The array of endpoints for this interface setting + */ + THashFunction32 iHashEndpointFunction; + TIdentityRelation iIdRelEndpoint; + REndpointMap iEndpoints; + + /** + The readers for the endpoints on this interface setting + */ + RPointerArray iEndpointReaders; + + /** + The writers for the endpoints on this interface setting + */ + RPointerArray iEndpointWriters; + }; + + } + +#endif