Fix for bug 2283 (RVCT 4.0 support is missing from PDK 3.0.h)
Have multiple extension sections in the bld.inf, one for each version
of the compiler. The RVCT version building the tools will build the
runtime libraries for its version, but make sure we extract all the other
versions from zip archives. Also add the archive for RVCT4.
// 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 <kernel/klib.h>
#else
#include <e32base.h>
#include <d32usbdescriptors.h>
#include <e32debug.h>
#endif
#include <e32ver.h>
#include <d32usbdi_errors.h>
/**
@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<KDeviceDescriptorSize> iDeviceDescriptorData;
HBufC8* iConfigurationDescriptorData;
private:
RUsbHubDriver* iHub;
TUint iHandle;
#endif
};
#include <d32usbdi_hubdriver.inl>
#endif // D32USBDI_HUBDRIVER_H