diff -r 000000000000 -r a41df078684a kernel/eka/include/d32usbdi_hubdriver.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/kernel/eka/include/d32usbdi_hubdriver.h Mon Oct 19 15:55:17 2009 +0100 @@ -0,0 +1,201 @@ +// 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: +// + +#ifndef D32USBDI_HUBDRIVER_H +#define D32USBDI_HUBDRIVER_H + +#ifdef __KERNEL_MODE__ +#include +#else +#include +#include +#include +#endif + +#include +#include + +/** +@file +@internalComponent +@prototype +*/ + +/*****************************************************************************/ +/* */ +/* Interface classes */ +/* */ +/*****************************************************************************/ + +class RUsbDevice; + +/** +Functions which act on the local hub driver. Higher level components cannot determine which host controller is in + use, although the presence of Other Speed descriptors may give some hints. + +@note This API is only available to the function driver framework, a restriction which is enforced by checking the +SID of the calling process. +*/ +class RUsbHubDriver : public RBusLogicalChannel + { +public: + enum TUsbHubDriverRequest + { + EWaitForBusEvent, + }; + enum TUsbHubDriverControl + { + EStartHost, + EStopHost, + }; + enum TUsbHubDriverCancel + { + ECancelWaitForBusEvent = 0x00000001, + }; + + class TBusEvent + { + public: + enum TEvent + { + ENoEvent, + EDeviceAttached, + EDeviceRemoved, + EDevMonEvent + }; + + public: + TEvent iEventType; + TUint iDeviceHandle; + TInt iError; + TInt iReason; // When iEventType == EDevMonEvent, this may hold additional details of the reason for the notification + }; + +#ifndef __KERNEL_MODE__ +friend class RUsbDevice; +public: + inline TInt Open(); + inline TInt StartHost(); + inline void StopHost(); + + inline void WaitForBusEvent(TBusEvent& aEvent, TRequestStatus& aRequest); + inline void CancelWaitForBusEvent(); + +#endif + + inline static const TDesC& Name(); + inline static TVersion VersionRequired(); + }; + + +/** +Use restricted to the Function Driver Framework, enforced by SID. +Provides a means to examine the configuration descriptor, and so load appropriate Function Drivers. +*/ +class RUsbDevice + { +public: + enum TUsbDeviceRequest + { + EDeviceRequest = 0x4000000, // start at 0x4000000 to differentiate from other requests + EDeviceStateChange, + }; + enum TUsbDeviceControl + { + EDeviceControl = 0x4000000, // start at 0x4000000 to differentiate from other controls + EOpen, + EClose, + EGetDeviceDescriptor, + EGetConfigurationDescriptorSize, + EGetConfigurationDescriptor, + EGetStringDescriptor, + EGetInterfaceToken, + ESuspend, + EResume, + ECancelDeviceStateChange, + }; + + enum TDeviceState + { + EDeviceActive, + EDeviceSuspended, + EDeviceTriState, + }; + + class TInterfaceTokenParameters + { + public: + TInt iInterfaceNumber; + TUint32* iToken; + }; + + class TStringDescParams + { + public: + TDes8* iTarget; + TInt iIndex; + TInt iLangId; + }; + +#ifndef __KERNEL_MODE__ +public: + inline RUsbDevice(); + + inline TInt Open(RUsbHubDriver& aHub, TUint aHandle); + inline void Close(); + + inline void QueueDeviceStateChangeNotification(TDeviceState& aCurrentState, TRequestStatus& aRequest); + inline void CancelDeviceStateChangeNotification(); + inline TUint Handle() const; + inline TInt GetTokenForInterface(TInt aInterfaceNumber, TUint32& aToken); + + inline TInt Suspend(); + inline TInt Resume(); + + inline TInt GetDeviceDescriptor(TUsbDeviceDescriptor& aDescriptor); + inline TInt GetConfigurationDescriptor(TUsbConfigurationDescriptor& aDescriptor); + inline TInt GetStringDescriptor(TUsbStringDescriptor*& aDescriptor, TDes8& aTarget, TInt aIndex); + inline TInt GetStringDescriptor(TUsbStringDescriptor*& aDescriptor, TDes8& aTarget, TInt aIndex, TInt aLangId); + +private: // Internal function overloads + inline TInt GetDeviceDescriptor(TDes8& aDeviceDesc); + inline TInt GetConfigurationDescriptorSize(TInt& aConfigDescSize); + inline TInt GetConfigurationDescriptor(TDes8& aConfigDesc); + inline TInt GetStringDescriptor(TDes8& aStringDescriptor, TInt aIndex, TInt aLangId =0); + +private: + inline void GetLocalDescriptorsL(); + inline TInt ParseStringDescriptor(TUsbStringDescriptor*& aDescriptor, const TDesC8& aData); + +private: + TUsbDeviceDescriptor* iHeadDeviceDescriptor; + TUsbConfigurationDescriptor* iHeadConfDescriptor; + + static const TUint KDeviceDescriptorSize = 18; + TBuf8 iDeviceDescriptorData; + HBufC8* iConfigurationDescriptorData; + +private: + RUsbHubDriver* iHub; + TUint iHandle; + +#endif + }; + + +#include + + +#endif // D32USBDI_HUBDRIVER_H