diff -r 000000000000 -r 96e5fb8b040d kerneltest/e32test/usbho/t_usbdi/inc/testdevicebase.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/kerneltest/e32test/usbho/t_usbdi/inc/testdevicebase.h Thu Dec 17 09:24:54 2009 +0200 @@ -0,0 +1,289 @@ +#ifndef __TEST_DEVICE_BASE_H +#define __TEST_DEVICE_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 TestDeviceBase.h +* @internalComponent +* +* +*/ + + + +#include +#include +#include "UsbClientStateWatcher.h" +#include "ep0reader.h" +#include "BaseTestCase.h" +#include + +namespace NUnitTesting_USBDI + { + +// Forward declarations + +class CInterfaceBase; +class CSoftwareConnectTimer; +class CRemoteWakeupTimer; + +/** +This class represents a test USB device. There is only one configuration supported +for this representation +*/ +class RUsbTestDevice : public MUsbClientStateObserver, + public MRequestHandler + { +public: + /** + Destructor + */ + + virtual ~RUsbTestDevice(); + + // ctor + RUsbTestDevice(CBaseTestCase* aTestCase); + + void ResetState(); + + /** + Requests error/reports from this test device + @param aObserverStatus the status of the entity that requests error reports + */ + + void SubscribeToReports(TRequestStatus& aOberverStatus); + + /** + Cancel request for any errors from operations from this device + */ + + void CancelSubscriptionToReports(); + + /** + Open a basic device + @leave KErrNoMemory + */ + + void OpenL(); + + /** + Close this device, releaseing all resources + */ + + void Close(); + + /** + Sets specific information for the device + @param aClassCode the class code that is specified by the standard + 00h Use class information in the Interface Descriptors + 02h Communications and CDC Control (together with interface descriptor) + 09h Hub + DCh Diagnostic Device (together with interface descriptors) + EFh Miscellaneous (together with interface descriptors) + FFh Vendor Specific (together with interface descriptors) + @param aSubClassCode the subclass code specified by the USB org + @param aDeviceProtocol + */ + + TInt SetClassCode(TUint8 aClassCode,TUint8 aSubClassCode,TUint8 aDeviceProtocol); + + /** + Set the USB specification that this device complies to + @param aSpecification the specificatio nnumber + */ + + TInt SetUsbSpecification(TUint16 aSpecification); + + /** + Set the information for the vendor of this device + @param aVendorId the identity number for the vendor + */ + + TInt SetVendor(TUint16 aVendorId); + + /** + Set the product information + @param aProductId the identity of the product + @param aProductString the string used to describe the product + @param aManufacturerString the string used to describe the manufacturer + @param aSerialNumberString the product serial number as string + */ + + TInt SetProduct(TUint16 aProductId,const TDesC16& aProductString,const TDesC16& aManufacturerString, + const TDesC16& aSerialNumberString); + + /** + Establishes the configuration string for the device + @param aConfigString the string for the configuration + */ + + TInt SetConfigurationString(const TDesC16& aConfigString); + + /** + Adds an test interface to the test device + @param aInterface a pointer to the interface + */ + + void AddInterface(CInterfaceBase* aInterface); + + /** + Access the interfacefor this device identified by the interface index number + @param aIndex the index of the interface + @return the interface + */ + + CInterfaceBase& Interface(TInt aIndex); + + /** + Software connect this test device to the host bus. + The device must already by physically connected. + */ + + void SoftwareConnect(); + + /** + Software dis-connect this test device from the host bus. + The device can be left physically connected + */ + + void SoftwareDisconnect(); + + /** + Perform a remote wake-up for the device + */ + + void RemoteWakeup(); + + /** + Notifies the test case of any errors in operations for this test device + @param aCompletionCode the error code to complete the test case with + */ + + void ReportError(TInt aCompletionCode); + + /** + Sends a zero length data packet to acknowledge the request + */ + + void AcknowledgeRequestReceived(); + +public: // From MUsbClientStateObserver + + /** + Called when the device has changed state + @param aNewState will hold the new state the device has been placed into by the host + @param aChangeCompletionCode the operation comletion code + */ + void StateChangeL(TUsbcDeviceState aNewState,TInt aChangeCompletionCode); + +public: // From MRequestHandler + + /** + Process control requests from device endpoint 0 + @param aRequest the control request value + @param aValue a parameter value for the request + @param aIndex an index parameter for the request + @param aDataReqLength the length of the data to be returned to the host + @param aPayload the data payload sent to the device by the host in a data phase + */ + + virtual TInt ProcessRequestL(TUint8 aRequest,TUint16 aValue,TUint16 aIndex, + TUint16 aDataReqLength,const TDesC8& aPayload); + +protected: + + /** + Constructor, build a test device + */ + + RUsbTestDevice(); + + /** + Start listening for control requests sent by the host + */ + + void StartEp0Reading(); + + /** + Stop reading control requests from endpoint 0 + */ + + void StopEp0Reading(); + + /** + Derived devices will be notified through this function when the device has changed state + and this base class has performed basic functionality + @param aNewState the new state of the device + */ + + virtual void OnStateChangeL(TUsbcDeviceState aNewState) = 0; + + +protected: + + RDevUsbcClient iClientDriver; // The USB client driver object + + /** + The device can have many interfaces offering different functions (part functions) + They are kept and owned by the device + */ + RPointerArray iInterfaces; + + /** + The watcher of states for the USB client + */ + CUsbClientStateWatcher* iStateWatcher; + TUsbcDeviceState iCurrentState; + + /** + The information about the capabilities of the device. + This is mostly hardware specific information + */ + TUsbDeviceCaps iDeviceCaps; + + /** + The control endpoint 0, reading device directed requests + */ + CDeviceEndpoint0* iDeviceEp0; + + /** + The timer required perform any connect, disconnect or re-connections + */ + CSoftwareConnectTimer* iConnectTimer; + + /** + The timer that performs any remote wakeups + */ + CRemoteWakeupTimer* iWakeupTimer; + + /** + */ + TRequestStatus* iObserverStatus; + + /** + A Aux buffer + */ + HBufC8* iAuxBuffer; + + CBaseTestCase* iTestCase; + + RProcess iOtgUsbMan; + }; + + + } + + +#endif \ No newline at end of file