kerneltest/e32test/usbho/t_usbdi/inc/testdevicebase.h
changeset 9 96e5fb8b040d
--- /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 <e32base.h>
+#include <d32usbc.h>
+#include "UsbClientStateWatcher.h"
+#include "ep0reader.h"
+#include "BaseTestCase.h"
+#include <d32otgdi.h>
+
+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<CInterfaceBase> 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