--- a/usbdrv/peripheral/public/d32usbdescriptors.h Tue Aug 31 17:01:47 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,548 +0,0 @@
-// 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 D32USBDESCRIPTORS_H
-#define D32USBDESCRIPTORS_H
-
-#include <e32base.h>
-
-
-/*****************************************************************************/
-/* */
-/* USB descriptors parser framework */
-/* */
-/*****************************************************************************/
-
-class TUsbGenericDescriptor;
-
-/**
-The Symbian USB Descriptor Parsing Framework class.
-
-This class is to aid users of USBDI by providing the facilities to parse the
-raw descriptor data into wrapper classes that allow access to the fields in
-the descriptor bodies, and pointers to map the serial data blob into the tree
-structure that descriptors logically have.
-
-@publishedPartner Intended to be available to 3rd parties later
-@prototype
-*/
-NONSHARABLE_CLASS(UsbDescriptorParser)
- {
-public:
- typedef TUsbGenericDescriptor* (*TUsbDescriptorParserL)(TPtrC8& aUsbDes, TUsbGenericDescriptor* aPreviousDesc);
-
-public:
- // Main parse function.
- IMPORT_C static TInt Parse(const TDesC8& aUsbDes, TUsbGenericDescriptor*& aDesc);
-
- // Custom parsing framework.
- IMPORT_C static void RegisterCustomParserL(TUsbDescriptorParserL aParserFunc);
- IMPORT_C static void UnregisterCustomParser(TUsbDescriptorParserL aParserFunc);
-
-private:
- static TUsbGenericDescriptor* FindParserAndParseAndCheckL(TPtrC8& aUsbDes, TUsbGenericDescriptor* aPreviousDesc);
- static TUsbGenericDescriptor* FindParserAndParseL(TPtrC8& aUsbDes, TUsbGenericDescriptor* aPreviousDesc);
- static void ParseDescriptorTreeL(TPtrC8& aUsbDes, TUsbGenericDescriptor& aPreviousDesc);
- static void BuildTreeL(TUsbGenericDescriptor& aNewDesc, TUsbGenericDescriptor& aPreviousDesc);
- static TUsbGenericDescriptor& FindSuitableParentL(TUsbGenericDescriptor& aNewDesc, TUsbGenericDescriptor& aTopParent);
- static TUsbGenericDescriptor* UnknownUsbDescriptorParserL(TPtrC8& aUsbDes, TUsbGenericDescriptor* aPreviousDesc);
- };
-
-
-/*****************************************************************************/
-/* */
-/* USB standard descriptors */
-/* */
-/*****************************************************************************/
-
-
-/**
-Base class for USB descriptors.
-All USB descriptors contain type and length, and may have peers and children.
-
-@publishedPartner Intended to be available to 3rd parties later
-@prototype
-*/
-class TUsbGenericDescriptor
- {
-public:
- IMPORT_C TUsbGenericDescriptor();
-
- IMPORT_C void DestroyTree();
-
- IMPORT_C TUint8 TUint8At(TInt aOffset) const;
- IMPORT_C TUint16 TUint16At(TInt aOffset) const;
- IMPORT_C TUint32 TUint32At(TInt aOffset) const;
-
- IMPORT_C TUsbGenericDescriptor& operator=(const TUsbGenericDescriptor& aDescriptor);
-
- /**
- Helper function to allow TUsbGenericDescriptor types to be placed on the cleanup stack.
- */
- inline operator TCleanupItem() { return TCleanupItem(Cleanup,this); }
-
-public:
- virtual TBool IsParent(TUsbGenericDescriptor& aPotentialParent);
- virtual TBool IsPeer(TUsbGenericDescriptor& aPotentialPeer);
- virtual TBool IsChild(TUsbGenericDescriptor& aPotentialChild);
-
-private:
- IMPORT_C static void Cleanup(TAny* aPtr);
- static void WalkAndDelete(TUsbGenericDescriptor* aDesc);
-
-public: // USB standard fields
- /**
- The offset in a standard USB descriptor to the bLength field.
- */
- static const TInt KbLengthOffset = 0;
-
- /**
- The offset in a standard USB descriptor to the bDescriptorType field.
- */
- static const TInt KbDescriptorTypeOffset = 1;
-
- /**
- Standard Length field.
- */
- TUint8 ibLength;
-
- /**
- Standard Type field.
- */
- TUint8 ibDescriptorType;
-
-public:
- /**
- The flag to indicate whether the USB descriptor has been recognised
- and parsed.
- */
- enum TUsbGenericDescriptorFlags
- {
- EUnrecognised = 0x00,
- ERecognised = 0x01,
- };
-
-public: // Symbian generated fields
- /**
- Flag to show if the descriptor has been recognised and parsed, or if its data can only be represented as a
- binary blob. This field should particularly be checked if writing code which may run on older versions of
- the operating system, where a (now) known descriptor may not have been parsed, or before parsing a new
- descriptor from a blob, where later versions of the operating system may have already extracted the fields.
- */
- TUint8 iRecognisedAndParsed;
-
- /**
- A pointer to the next peer of this descriptor, or NULL.
- As an example, an endpoint descriptor will contain pointers to any other endpoint descriptors on the same
- interface.
- */
- TUsbGenericDescriptor* iNextPeer;
-
- /**
- A pointer to the first child of this descriptor, or NULL.
- As an example, an interface descriptor will contain a pointer to the first endpoint descriptor on the
- interface. The iNextPeer member can then be used to examine other endpoints on the interface.
- */
- TUsbGenericDescriptor* iFirstChild;
-
- /**
- A pointer to the parent to this descriptor, or NULL.
- As an example an endpoint descriptor from a configuration bundle will have the interface that it
- is a member of as it's parent.
- */
- TUsbGenericDescriptor* iParent;
-
- /**
- The binary blob that contains this descriptor
- */
- TPtrC8 iBlob;
- };
-
-enum TUsbDescriptorType
- {
- EDevice = 1,
- EConfiguration = 2,
- EString = 3,
- EInterface = 4,
- EEndpoint = 5,
- EDeviceQualifier = 6,
- EOtherSpeedConfiguration = 7,
- EInterfacePower = 8,
- EOTG = 9,
- EDebug = 10,
- EInterfaceAssociation = 11,
- };
-
-/**
-Device descriptor.
-
-See section 9.6.1 of the USB 2.0 specification.
-
-@publishedPartner Intended to be available to 3rd parties later
-@prototype
-*/
-NONSHARABLE_CLASS(TUsbDeviceDescriptor) : public TUsbGenericDescriptor
- {
-public:
- IMPORT_C TUsbDeviceDescriptor();
- IMPORT_C static TUsbDeviceDescriptor* Cast(TUsbGenericDescriptor* aOriginal);
-
-public:
- static const TInt KSizeInOctets = 18;
- enum TFieldOffsets
- {
- EbcdUSB = 2,
- EbDeviceClass = 4,
- EbDeviceSubClass = 5,
- EbDeviceProtocol = 6,
- EbMaxPacketSize0 = 7,
- EidVendor = 8,
- EidProduct = 10,
- EbcdDevice = 12,
- EiManufacturer = 14,
- EiProduct = 15,
- EiSerialNumber = 16,
- EbNumConfigurations = 17
- };
-
-public:
- IMPORT_C TUint16 USBBcd() const;
- IMPORT_C TUint8 DeviceClass() const;
- IMPORT_C TUint8 DeviceSubClass() const;
- IMPORT_C TUint8 DeviceProtocol() const;
- IMPORT_C TUint8 MaxPacketSize0() const;
- IMPORT_C TUint16 VendorId() const;
- IMPORT_C TUint16 ProductId() const;
- IMPORT_C TUint16 DeviceBcd() const;
- IMPORT_C TUint8 ManufacturerIndex() const;
- IMPORT_C TUint8 ProductIndex() const;
- IMPORT_C TUint8 SerialNumberIndex() const;
- IMPORT_C TUint8 NumConfigurations() const;
-
-public:
- static TUsbDeviceDescriptor* ParseL(TPtrC8& aUsbDes, TUsbGenericDescriptor* aPreviousDesc);
- virtual TBool IsParent(TUsbGenericDescriptor& aPotentialParent);
- virtual TBool IsPeer(TUsbGenericDescriptor& aPotentialPeer);
- };
-
-
-/**
-Device Qualifier descriptor.
-
-See section 9.6.2 of the USB 2.0 specification.
-
-@publishedPartner Intended to be available to 3rd parties later
-@prototype
-*/
-NONSHARABLE_CLASS(TUsbDeviceQualifierDescriptor) : public TUsbGenericDescriptor
- {
-public:
- IMPORT_C TUsbDeviceQualifierDescriptor();
- IMPORT_C static TUsbDeviceQualifierDescriptor* Cast(TUsbGenericDescriptor* aOriginal);
-
-public:
- static const TInt KSizeInOctets = 10;
- enum TFieldOffsets
- {
- EbcdUSB = 2,
- EbDeviceClass = 4,
- EbDeviceSubClass = 5,
- EbDeviceProtocol = 6,
- EbMaxPacketSize0 = 7,
- EbNumConfigurations = 8,
- EbReserved = 9
- };
-
-public:
- IMPORT_C TUint16 USBBcd() const;
- IMPORT_C TUint8 DeviceClass() const;
- IMPORT_C TUint8 DeviceSubClass() const;
- IMPORT_C TUint8 DeviceProtocol() const;
- IMPORT_C TUint8 MaxPacketSize0() const;
- IMPORT_C TUint8 NumConfigurations() const;
- IMPORT_C TUint8 Reserved() const;
-
-public:
- static TUsbDeviceQualifierDescriptor* ParseL(TPtrC8& aUsbDes, TUsbGenericDescriptor* aPreviousDesc);
- virtual TBool IsParent(TUsbGenericDescriptor& aPotentialParent);
- virtual TBool IsPeer(TUsbGenericDescriptor& aPotentialPeer);
- };
-
-
-/**
-Configuration descriptor.
-
-See section 9.6.3 of the USB 2.0 specification.
-
-@publishedPartner Intended to be available to 3rd parties later
-@prototype
-*/
-NONSHARABLE_CLASS(TUsbConfigurationDescriptor) : public TUsbGenericDescriptor
- {
-public:
- IMPORT_C TUsbConfigurationDescriptor();
- IMPORT_C static TUsbConfigurationDescriptor* Cast(TUsbGenericDescriptor* aOriginal);
-
-public:
- static const TInt KSizeInOctets = 9;
- enum TFieldOffsets
- {
- EwTotalLength = 2,
- EbNumInterfaces = 4,
- EbConfigurationValue = 5,
- EiConfiguration = 6,
- EbmAttributes = 7,
- EbMaxPower = 8
- };
-
-public:
- IMPORT_C TUint16 TotalLength() const;
- IMPORT_C TUint8 NumInterfaces() const;
- IMPORT_C TUint8 ConfigurationValue() const;
- IMPORT_C TUint8 ConfigurationIndex() const;
- IMPORT_C TUint8 Attributes() const;
- IMPORT_C TUint8 MaxPower() const;
-
-public:
- static TUsbConfigurationDescriptor* ParseL(TPtrC8& aUsbDes, TUsbGenericDescriptor* aPreviousDesc);
- virtual TBool IsParent(TUsbGenericDescriptor& aPotentialParent);
- virtual TBool IsPeer(TUsbGenericDescriptor& aPotentialPeer);
- };
-
-
-/**
-Other Speed descriptor.
-
-See section 9.6.4 of the USB 2.0 specification.
-
-@publishedPartner Intended to be available to 3rd parties later
-@prototype
-*/
-NONSHARABLE_CLASS(TUsbOtherSpeedDescriptor) : public TUsbGenericDescriptor
- {
-public:
- IMPORT_C TUsbOtherSpeedDescriptor();
- IMPORT_C static TUsbOtherSpeedDescriptor* Cast(TUsbGenericDescriptor* aOriginal);
-
-public:
- static const TInt KSizeInOctets = 9;
- enum TFieldOffsets
- {
- EwTotalLength = 2,
- EbNumInterfaces = 4,
- EbConfigurationValue = 5,
- EiConfiguration = 6,
- EbmAttributes = 7,
- EbMaxPower = 8
- };
-
-public:
- IMPORT_C TUint16 TotalLength() const;
- IMPORT_C TUint8 NumInterfaces() const;
- IMPORT_C TUint8 ConfigurationValue() const;
- IMPORT_C TUint8 ConfigurationIndex() const;
- IMPORT_C TUint8 Attributes() const;
- IMPORT_C TUint8 MaxPower() const;
-
-public:
- static TUsbOtherSpeedDescriptor* ParseL(TPtrC8& aUsbDes, TUsbGenericDescriptor* aPreviousDesc);
- virtual TBool IsParent(TUsbGenericDescriptor& aPotentialParent);
- virtual TBool IsPeer(TUsbGenericDescriptor& aPotentialPeer);
- };
-
-
-/**
-Interface Association Descriptor
-
-See the USB IAD ECN.
-
-@publishedPartner Intended to be available to 3rd parties later
-@prototype
-*/
-NONSHARABLE_CLASS(TUsbInterfaceAssociationDescriptor) : public TUsbGenericDescriptor
- {
-public:
- IMPORT_C TUsbInterfaceAssociationDescriptor();
- IMPORT_C static TUsbInterfaceAssociationDescriptor* Cast(TUsbGenericDescriptor* aOriginal);
-
-public:
- static const TInt KSizeInOctets = 8;
- enum TFieldOffsets
- {
- EbFirstInterface = 2,
- EbInterfaceCount = 3,
- EbFunctionClass = 4,
- EbFunctionSubClass = 5,
- EbFunctionProtocol = 6,
- EiFunction = 7
- };
-
-public:
- IMPORT_C TUint8 FirstInterface() const;
- IMPORT_C TUint8 InterfaceCount() const;
- IMPORT_C TUint8 FunctionClass() const;
- IMPORT_C TUint8 FunctionSubClass() const;
- IMPORT_C TUint8 FunctionProtocol() const;
- IMPORT_C TUint8 FunctionIndex() const;
-
-public:
- static TUsbInterfaceAssociationDescriptor* ParseL(TPtrC8& aUsbDes, TUsbGenericDescriptor* aPreviousDesc);
- virtual TBool IsParent(TUsbGenericDescriptor& aPotentialParent);
- virtual TBool IsPeer(TUsbGenericDescriptor& aPotentialPeer);
- virtual TBool IsChild(TUsbGenericDescriptor& aPotentialChild);
- };
-
-/**
-Interface descriptor.
-
-See section 9.6.5 of the USB 2.0 specification.
-
-@publishedPartner Intended to be available to 3rd parties later
-@prototype
-*/
-NONSHARABLE_CLASS(TUsbInterfaceDescriptor) : public TUsbGenericDescriptor
- {
-public:
- IMPORT_C TUsbInterfaceDescriptor();
- IMPORT_C static TUsbInterfaceDescriptor* Cast(TUsbGenericDescriptor* aOriginal);
-
-public:
- static const TInt KSizeInOctets = 9;
- enum TFieldOffsets
- {
- EbInterfaceNumber = 2,
- EbAlternateSetting = 3,
- EbNumEndpoints = 4,
- EbInterfaceClass = 5,
- EbInterfaceSubClass = 6,
- EbInterfaceProtocol = 7,
- EiInterface = 8
- };
-
-public:
- IMPORT_C TUint8 InterfaceNumber() const;
- IMPORT_C TUint8 AlternateSetting() const;
- IMPORT_C TUint8 NumEndpoints() const;
- IMPORT_C TUint8 InterfaceClass() const;
- IMPORT_C TUint8 InterfaceSubClass() const;
- IMPORT_C TUint8 InterfaceProtocol() const;
- IMPORT_C TUint8 Interface() const;
-
-public:
- static TUsbInterfaceDescriptor* ParseL(TPtrC8& aUsbDes, TUsbGenericDescriptor* aPreviousDesc);
- virtual TBool IsParent(TUsbGenericDescriptor& aPotentialParent);
- virtual TBool IsPeer(TUsbGenericDescriptor& aPotentialPeer);
- };
-
-/**
-Endpoint descriptor.
-
-See section 9.6.6 of the USB 2.0 specification.
-Note these exclude support support for:
-'Standard AC Interrupt Endpoint Descriptor'
-'Standard AS Isochronous Synch Endpoint Descriptor'
-'Standard AS Isochronous Audio Data Endpoint Descriptor'
-as defined in USB Audio Device Class Spec v1.0 which are all 9 bytes in size.
-To support these custom descriptors may be registered with the
-parser.
-
-@publishedPartner Intended to be available to 3rd parties later
-@prototype
-*/
-NONSHARABLE_CLASS(TUsbEndpointDescriptor) : public TUsbGenericDescriptor
- {
-public:
- IMPORT_C TUsbEndpointDescriptor();
- IMPORT_C static TUsbEndpointDescriptor* Cast(TUsbGenericDescriptor* aOriginal);
-
-public:
- static const TInt KSizeInOctets = 7;
- enum TFieldOffsets
- {
- EbEndpointAddress = 2,
- EbmAttributes = 3,
- EwMaxPacketSize = 4,
- EbInterval = 6
- };
-
-public:
- IMPORT_C TUint8 EndpointAddress() const;
- IMPORT_C TUint8 Attributes() const;
- IMPORT_C TUint16 MaxPacketSize() const;
- IMPORT_C TUint8 Interval() const;
-
-public:
- static TUsbEndpointDescriptor* ParseL(TPtrC8& aUsbDes, TUsbGenericDescriptor* aPreviousDesc);
- virtual TBool IsParent(TUsbGenericDescriptor& aPotentialParent);
- virtual TBool IsPeer(TUsbGenericDescriptor& aPotentialPeer);
- };
-
-/**
-String descriptor
-
-See section 9.6.7 of the USB 2.0 specification.
-
-@publishedPartner Intended to be available to 3rd parties later
-@prototype
-*/
-NONSHARABLE_CLASS(TUsbStringDescriptor) : public TUsbGenericDescriptor
- {
-public:
- IMPORT_C TUsbStringDescriptor();
- IMPORT_C static TUsbStringDescriptor* Cast(TUsbGenericDescriptor* aOriginal);
-
-public:
- IMPORT_C TInt GetLangId(TInt aIndex) const;
- IMPORT_C void StringData(TDes16& aString) const;
-
-public:
- static TUsbStringDescriptor* ParseL(TPtrC8& aUsbDes, TUsbGenericDescriptor* aPreviousDesc);
- virtual TBool IsParent(TUsbGenericDescriptor& aPotentialParent);
- virtual TBool IsPeer(TUsbGenericDescriptor& aPotentialPeer);
- };
-
-/**
-OTG descriptor.
-
-See section 6.4 of the USB 2.0 On-The-Go Supplement Revision 1.3
-
-@publishedPartner Intended to be available to 3rd parties later
-@prototype
-*/
-NONSHARABLE_CLASS(TUsbOTGDescriptor) : public TUsbGenericDescriptor
- {
-public:
- IMPORT_C TUsbOTGDescriptor();
- IMPORT_C static TUsbOTGDescriptor* Cast(TUsbGenericDescriptor* aOriginal);
-
-public:
- static const TInt KSizeInOctets = 3;
- enum TFieldOffsets
- {
- EbmAttributes = 2
- };
-
-public:
- IMPORT_C TUint8 Attributes() const;
- IMPORT_C TBool HNPSupported() const;
- IMPORT_C TBool SRPSupported() const;
-public:
- static TUsbOTGDescriptor* ParseL(TPtrC8& aUsbDes, TUsbGenericDescriptor* aPreviousDesc);
- virtual TBool IsParent(TUsbGenericDescriptor& aPotentialParent);
- virtual TBool IsPeer(TUsbGenericDescriptor& aPotentialPeer);
- };
-
-
-#endif // D32USBDESCRIPTORS_H