usbdrv/peripheral/public/d32usbdescriptors.h
author hgs
Wed, 03 Nov 2010 10:49:35 +0800
changeset 63 705964cc7132
parent 59 bbdce6bffaad
permissions -rw-r--r--
201043_01
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
59
bbdce6bffaad 201041_02
hgs
parents: 55
diff changeset
     1
/*
bbdce6bffaad 201041_02
hgs
parents: 55
diff changeset
     2
* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
bbdce6bffaad 201041_02
hgs
parents: 55
diff changeset
     3
* All rights reserved.
bbdce6bffaad 201041_02
hgs
parents: 55
diff changeset
     4
* This component and the accompanying materials are made available
bbdce6bffaad 201041_02
hgs
parents: 55
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
bbdce6bffaad 201041_02
hgs
parents: 55
diff changeset
     6
* which accompanies this distribution, and is available
bbdce6bffaad 201041_02
hgs
parents: 55
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
bbdce6bffaad 201041_02
hgs
parents: 55
diff changeset
     8
*
bbdce6bffaad 201041_02
hgs
parents: 55
diff changeset
     9
* Initial Contributors:
bbdce6bffaad 201041_02
hgs
parents: 55
diff changeset
    10
* Nokia Corporation - initial contribution.
bbdce6bffaad 201041_02
hgs
parents: 55
diff changeset
    11
*
bbdce6bffaad 201041_02
hgs
parents: 55
diff changeset
    12
* Contributors:
bbdce6bffaad 201041_02
hgs
parents: 55
diff changeset
    13
*
bbdce6bffaad 201041_02
hgs
parents: 55
diff changeset
    14
* Description:
bbdce6bffaad 201041_02
hgs
parents: 55
diff changeset
    15
*
bbdce6bffaad 201041_02
hgs
parents: 55
diff changeset
    16
*/
33
089413cdde3c 201028_02
hgs
parents:
diff changeset
    17
089413cdde3c 201028_02
hgs
parents:
diff changeset
    18
#ifndef D32USBDESCRIPTORS_H
089413cdde3c 201028_02
hgs
parents:
diff changeset
    19
#define D32USBDESCRIPTORS_H
089413cdde3c 201028_02
hgs
parents:
diff changeset
    20
089413cdde3c 201028_02
hgs
parents:
diff changeset
    21
#include <e32base.h>
089413cdde3c 201028_02
hgs
parents:
diff changeset
    22
089413cdde3c 201028_02
hgs
parents:
diff changeset
    23
089413cdde3c 201028_02
hgs
parents:
diff changeset
    24
/*****************************************************************************/
089413cdde3c 201028_02
hgs
parents:
diff changeset
    25
/*                                                                           */
089413cdde3c 201028_02
hgs
parents:
diff changeset
    26
/* USB descriptors parser framework                                          */
089413cdde3c 201028_02
hgs
parents:
diff changeset
    27
/*                                                                           */
089413cdde3c 201028_02
hgs
parents:
diff changeset
    28
/*****************************************************************************/
089413cdde3c 201028_02
hgs
parents:
diff changeset
    29
089413cdde3c 201028_02
hgs
parents:
diff changeset
    30
class TUsbGenericDescriptor;
089413cdde3c 201028_02
hgs
parents:
diff changeset
    31
089413cdde3c 201028_02
hgs
parents:
diff changeset
    32
/**
089413cdde3c 201028_02
hgs
parents:
diff changeset
    33
The Symbian USB Descriptor Parsing Framework class.
089413cdde3c 201028_02
hgs
parents:
diff changeset
    34
089413cdde3c 201028_02
hgs
parents:
diff changeset
    35
This class is to aid users of USBDI by providing the facilities to parse the
089413cdde3c 201028_02
hgs
parents:
diff changeset
    36
raw descriptor data into wrapper classes that allow access to the fields in 
089413cdde3c 201028_02
hgs
parents:
diff changeset
    37
the descriptor bodies, and pointers to map the serial data blob into the tree 
089413cdde3c 201028_02
hgs
parents:
diff changeset
    38
structure that descriptors logically have.
089413cdde3c 201028_02
hgs
parents:
diff changeset
    39
089413cdde3c 201028_02
hgs
parents:
diff changeset
    40
@publishedPartner Intended to be available to 3rd parties later
089413cdde3c 201028_02
hgs
parents:
diff changeset
    41
@prototype
089413cdde3c 201028_02
hgs
parents:
diff changeset
    42
*/
089413cdde3c 201028_02
hgs
parents:
diff changeset
    43
NONSHARABLE_CLASS(UsbDescriptorParser)
089413cdde3c 201028_02
hgs
parents:
diff changeset
    44
	{
089413cdde3c 201028_02
hgs
parents:
diff changeset
    45
public:
089413cdde3c 201028_02
hgs
parents:
diff changeset
    46
	typedef TUsbGenericDescriptor* (*TUsbDescriptorParserL)(TPtrC8& aUsbDes, TUsbGenericDescriptor* aPreviousDesc);
089413cdde3c 201028_02
hgs
parents:
diff changeset
    47
089413cdde3c 201028_02
hgs
parents:
diff changeset
    48
public:
089413cdde3c 201028_02
hgs
parents:
diff changeset
    49
	// Main parse function.
089413cdde3c 201028_02
hgs
parents:
diff changeset
    50
	IMPORT_C static TInt Parse(const TDesC8& aUsbDes, TUsbGenericDescriptor*& aDesc);
089413cdde3c 201028_02
hgs
parents:
diff changeset
    51
089413cdde3c 201028_02
hgs
parents:
diff changeset
    52
	// Custom parsing framework.
089413cdde3c 201028_02
hgs
parents:
diff changeset
    53
	IMPORT_C static void RegisterCustomParserL(TUsbDescriptorParserL aParserFunc);
089413cdde3c 201028_02
hgs
parents:
diff changeset
    54
	IMPORT_C static void UnregisterCustomParser(TUsbDescriptorParserL aParserFunc);
089413cdde3c 201028_02
hgs
parents:
diff changeset
    55
089413cdde3c 201028_02
hgs
parents:
diff changeset
    56
private:
089413cdde3c 201028_02
hgs
parents:
diff changeset
    57
	static TUsbGenericDescriptor* FindParserAndParseAndCheckL(TPtrC8& aUsbDes, TUsbGenericDescriptor* aPreviousDesc);
089413cdde3c 201028_02
hgs
parents:
diff changeset
    58
	static TUsbGenericDescriptor* FindParserAndParseL(TPtrC8& aUsbDes, TUsbGenericDescriptor* aPreviousDesc);
089413cdde3c 201028_02
hgs
parents:
diff changeset
    59
	static void ParseDescriptorTreeL(TPtrC8& aUsbDes, TUsbGenericDescriptor& aPreviousDesc);
089413cdde3c 201028_02
hgs
parents:
diff changeset
    60
	static void BuildTreeL(TUsbGenericDescriptor& aNewDesc, TUsbGenericDescriptor& aPreviousDesc);
089413cdde3c 201028_02
hgs
parents:
diff changeset
    61
	static TUsbGenericDescriptor& FindSuitableParentL(TUsbGenericDescriptor& aNewDesc, TUsbGenericDescriptor& aTopParent);
089413cdde3c 201028_02
hgs
parents:
diff changeset
    62
	static TUsbGenericDescriptor* UnknownUsbDescriptorParserL(TPtrC8& aUsbDes, TUsbGenericDescriptor* aPreviousDesc);
089413cdde3c 201028_02
hgs
parents:
diff changeset
    63
	};
089413cdde3c 201028_02
hgs
parents:
diff changeset
    64
089413cdde3c 201028_02
hgs
parents:
diff changeset
    65
089413cdde3c 201028_02
hgs
parents:
diff changeset
    66
/*****************************************************************************/
089413cdde3c 201028_02
hgs
parents:
diff changeset
    67
/*                                                                           */
089413cdde3c 201028_02
hgs
parents:
diff changeset
    68
/* USB standard descriptors                                                  */
089413cdde3c 201028_02
hgs
parents:
diff changeset
    69
/*                                                                           */
089413cdde3c 201028_02
hgs
parents:
diff changeset
    70
/*****************************************************************************/
089413cdde3c 201028_02
hgs
parents:
diff changeset
    71
089413cdde3c 201028_02
hgs
parents:
diff changeset
    72
089413cdde3c 201028_02
hgs
parents:
diff changeset
    73
/**
089413cdde3c 201028_02
hgs
parents:
diff changeset
    74
Base class for USB descriptors.
089413cdde3c 201028_02
hgs
parents:
diff changeset
    75
All USB descriptors contain type and length, and may have peers and children.
089413cdde3c 201028_02
hgs
parents:
diff changeset
    76
089413cdde3c 201028_02
hgs
parents:
diff changeset
    77
@publishedPartner Intended to be available to 3rd parties later
089413cdde3c 201028_02
hgs
parents:
diff changeset
    78
@prototype
089413cdde3c 201028_02
hgs
parents:
diff changeset
    79
*/
089413cdde3c 201028_02
hgs
parents:
diff changeset
    80
class TUsbGenericDescriptor
089413cdde3c 201028_02
hgs
parents:
diff changeset
    81
	{
089413cdde3c 201028_02
hgs
parents:
diff changeset
    82
public:
089413cdde3c 201028_02
hgs
parents:
diff changeset
    83
	IMPORT_C TUsbGenericDescriptor();
089413cdde3c 201028_02
hgs
parents:
diff changeset
    84
	
089413cdde3c 201028_02
hgs
parents:
diff changeset
    85
	IMPORT_C void DestroyTree();
089413cdde3c 201028_02
hgs
parents:
diff changeset
    86
089413cdde3c 201028_02
hgs
parents:
diff changeset
    87
	IMPORT_C TUint8 TUint8At(TInt aOffset) const;
089413cdde3c 201028_02
hgs
parents:
diff changeset
    88
	IMPORT_C TUint16 TUint16At(TInt aOffset) const;
089413cdde3c 201028_02
hgs
parents:
diff changeset
    89
	IMPORT_C TUint32 TUint32At(TInt aOffset) const;
089413cdde3c 201028_02
hgs
parents:
diff changeset
    90
089413cdde3c 201028_02
hgs
parents:
diff changeset
    91
	IMPORT_C TUsbGenericDescriptor& operator=(const TUsbGenericDescriptor& aDescriptor);
089413cdde3c 201028_02
hgs
parents:
diff changeset
    92
089413cdde3c 201028_02
hgs
parents:
diff changeset
    93
	/**
089413cdde3c 201028_02
hgs
parents:
diff changeset
    94
	Helper function to allow TUsbGenericDescriptor types to be placed on the cleanup stack.
089413cdde3c 201028_02
hgs
parents:
diff changeset
    95
	*/
089413cdde3c 201028_02
hgs
parents:
diff changeset
    96
	inline operator TCleanupItem() { return TCleanupItem(Cleanup,this); }
089413cdde3c 201028_02
hgs
parents:
diff changeset
    97
089413cdde3c 201028_02
hgs
parents:
diff changeset
    98
public:
089413cdde3c 201028_02
hgs
parents:
diff changeset
    99
	virtual TBool IsParent(TUsbGenericDescriptor& aPotentialParent);
089413cdde3c 201028_02
hgs
parents:
diff changeset
   100
	virtual TBool IsPeer(TUsbGenericDescriptor& aPotentialPeer);
089413cdde3c 201028_02
hgs
parents:
diff changeset
   101
	virtual TBool IsChild(TUsbGenericDescriptor& aPotentialChild);
089413cdde3c 201028_02
hgs
parents:
diff changeset
   102
089413cdde3c 201028_02
hgs
parents:
diff changeset
   103
private:
089413cdde3c 201028_02
hgs
parents:
diff changeset
   104
	IMPORT_C static void Cleanup(TAny* aPtr);
089413cdde3c 201028_02
hgs
parents:
diff changeset
   105
	static void WalkAndDelete(TUsbGenericDescriptor* aDesc);
089413cdde3c 201028_02
hgs
parents:
diff changeset
   106
089413cdde3c 201028_02
hgs
parents:
diff changeset
   107
public:		// USB standard fields
089413cdde3c 201028_02
hgs
parents:
diff changeset
   108
	/**
089413cdde3c 201028_02
hgs
parents:
diff changeset
   109
	The offset in a standard USB descriptor to the bLength field.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   110
	*/
089413cdde3c 201028_02
hgs
parents:
diff changeset
   111
	static const TInt KbLengthOffset = 0;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   112
089413cdde3c 201028_02
hgs
parents:
diff changeset
   113
	/**
089413cdde3c 201028_02
hgs
parents:
diff changeset
   114
	The offset in a standard USB descriptor to the bDescriptorType field.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   115
	*/
089413cdde3c 201028_02
hgs
parents:
diff changeset
   116
	static const TInt KbDescriptorTypeOffset = 1;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   117
089413cdde3c 201028_02
hgs
parents:
diff changeset
   118
	/**
089413cdde3c 201028_02
hgs
parents:
diff changeset
   119
	Standard Length field.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   120
	*/
089413cdde3c 201028_02
hgs
parents:
diff changeset
   121
	TUint8	ibLength;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   122
	
089413cdde3c 201028_02
hgs
parents:
diff changeset
   123
	/**
089413cdde3c 201028_02
hgs
parents:
diff changeset
   124
	Standard Type field.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   125
	*/
089413cdde3c 201028_02
hgs
parents:
diff changeset
   126
	TUint8	ibDescriptorType;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   127
	
089413cdde3c 201028_02
hgs
parents:
diff changeset
   128
public:
089413cdde3c 201028_02
hgs
parents:
diff changeset
   129
	/**
089413cdde3c 201028_02
hgs
parents:
diff changeset
   130
	The flag to indicate whether the USB descriptor has been recognised
089413cdde3c 201028_02
hgs
parents:
diff changeset
   131
	and parsed.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   132
	*/
089413cdde3c 201028_02
hgs
parents:
diff changeset
   133
	enum TUsbGenericDescriptorFlags
089413cdde3c 201028_02
hgs
parents:
diff changeset
   134
		{
089413cdde3c 201028_02
hgs
parents:
diff changeset
   135
		EUnrecognised = 0x00,
089413cdde3c 201028_02
hgs
parents:
diff changeset
   136
		ERecognised = 0x01,
089413cdde3c 201028_02
hgs
parents:
diff changeset
   137
		};
089413cdde3c 201028_02
hgs
parents:
diff changeset
   138
	
089413cdde3c 201028_02
hgs
parents:
diff changeset
   139
public:		// Symbian generated fields
089413cdde3c 201028_02
hgs
parents:
diff changeset
   140
	/**
089413cdde3c 201028_02
hgs
parents:
diff changeset
   141
	Flag to show if the descriptor has been recognised and parsed, or if its data can only be represented as a
089413cdde3c 201028_02
hgs
parents:
diff changeset
   142
	binary blob.  This field should particularly be checked if writing code which may run on older versions of
089413cdde3c 201028_02
hgs
parents:
diff changeset
   143
	the operating system, where a (now) known descriptor may not have been parsed, or before parsing a new
089413cdde3c 201028_02
hgs
parents:
diff changeset
   144
	descriptor from a blob, where later versions of the operating system may have already extracted the fields.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   145
	*/
089413cdde3c 201028_02
hgs
parents:
diff changeset
   146
	TUint8	iRecognisedAndParsed;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   147
089413cdde3c 201028_02
hgs
parents:
diff changeset
   148
	/**
089413cdde3c 201028_02
hgs
parents:
diff changeset
   149
	A pointer to the next peer of this descriptor, or NULL.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   150
	As an example, an endpoint descriptor will contain pointers to any other endpoint descriptors on the same
089413cdde3c 201028_02
hgs
parents:
diff changeset
   151
	interface.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   152
	*/
089413cdde3c 201028_02
hgs
parents:
diff changeset
   153
	TUsbGenericDescriptor* iNextPeer;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   154
089413cdde3c 201028_02
hgs
parents:
diff changeset
   155
	/**
089413cdde3c 201028_02
hgs
parents:
diff changeset
   156
	A pointer to the first child of this descriptor, or NULL.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   157
	As an example, an interface descriptor will contain a pointer to the first endpoint descriptor on the
089413cdde3c 201028_02
hgs
parents:
diff changeset
   158
	interface. The iNextPeer member can then be used to examine other endpoints on the interface.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   159
	*/
089413cdde3c 201028_02
hgs
parents:
diff changeset
   160
	TUsbGenericDescriptor* iFirstChild;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   161
	
089413cdde3c 201028_02
hgs
parents:
diff changeset
   162
	/**
089413cdde3c 201028_02
hgs
parents:
diff changeset
   163
	A pointer to the parent to this descriptor, or NULL.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   164
	As an example an endpoint descriptor from a configuration bundle will have the interface that it
089413cdde3c 201028_02
hgs
parents:
diff changeset
   165
	is a member of as it's parent.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   166
	*/
089413cdde3c 201028_02
hgs
parents:
diff changeset
   167
	TUsbGenericDescriptor* iParent;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   168
089413cdde3c 201028_02
hgs
parents:
diff changeset
   169
	/**
089413cdde3c 201028_02
hgs
parents:
diff changeset
   170
	The binary blob that contains this descriptor
089413cdde3c 201028_02
hgs
parents:
diff changeset
   171
	*/
089413cdde3c 201028_02
hgs
parents:
diff changeset
   172
	TPtrC8			iBlob;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   173
	};
089413cdde3c 201028_02
hgs
parents:
diff changeset
   174
089413cdde3c 201028_02
hgs
parents:
diff changeset
   175
enum TUsbDescriptorType
089413cdde3c 201028_02
hgs
parents:
diff changeset
   176
	{
089413cdde3c 201028_02
hgs
parents:
diff changeset
   177
	EDevice						= 1,
089413cdde3c 201028_02
hgs
parents:
diff changeset
   178
	EConfiguration				= 2,
089413cdde3c 201028_02
hgs
parents:
diff changeset
   179
	EString						= 3,
089413cdde3c 201028_02
hgs
parents:
diff changeset
   180
	EInterface					= 4,
089413cdde3c 201028_02
hgs
parents:
diff changeset
   181
	EEndpoint					= 5,
089413cdde3c 201028_02
hgs
parents:
diff changeset
   182
	EDeviceQualifier			= 6,
089413cdde3c 201028_02
hgs
parents:
diff changeset
   183
	EOtherSpeedConfiguration	= 7,
089413cdde3c 201028_02
hgs
parents:
diff changeset
   184
	EInterfacePower				= 8,
089413cdde3c 201028_02
hgs
parents:
diff changeset
   185
	EOTG						= 9,
089413cdde3c 201028_02
hgs
parents:
diff changeset
   186
	EDebug						= 10,
089413cdde3c 201028_02
hgs
parents:
diff changeset
   187
	EInterfaceAssociation		= 11,
089413cdde3c 201028_02
hgs
parents:
diff changeset
   188
	};
089413cdde3c 201028_02
hgs
parents:
diff changeset
   189
089413cdde3c 201028_02
hgs
parents:
diff changeset
   190
/**
089413cdde3c 201028_02
hgs
parents:
diff changeset
   191
Device descriptor.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   192
089413cdde3c 201028_02
hgs
parents:
diff changeset
   193
See section 9.6.1 of the USB 2.0 specification.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   194
089413cdde3c 201028_02
hgs
parents:
diff changeset
   195
@publishedPartner Intended to be available to 3rd parties later
089413cdde3c 201028_02
hgs
parents:
diff changeset
   196
@prototype
089413cdde3c 201028_02
hgs
parents:
diff changeset
   197
*/
089413cdde3c 201028_02
hgs
parents:
diff changeset
   198
NONSHARABLE_CLASS(TUsbDeviceDescriptor) : public TUsbGenericDescriptor
089413cdde3c 201028_02
hgs
parents:
diff changeset
   199
	{
089413cdde3c 201028_02
hgs
parents:
diff changeset
   200
public:
089413cdde3c 201028_02
hgs
parents:
diff changeset
   201
	IMPORT_C TUsbDeviceDescriptor();
089413cdde3c 201028_02
hgs
parents:
diff changeset
   202
	IMPORT_C static TUsbDeviceDescriptor* Cast(TUsbGenericDescriptor* aOriginal);
089413cdde3c 201028_02
hgs
parents:
diff changeset
   203
089413cdde3c 201028_02
hgs
parents:
diff changeset
   204
public:
089413cdde3c 201028_02
hgs
parents:
diff changeset
   205
	static const TInt KSizeInOctets = 18;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   206
	enum TFieldOffsets
089413cdde3c 201028_02
hgs
parents:
diff changeset
   207
		{
089413cdde3c 201028_02
hgs
parents:
diff changeset
   208
		EbcdUSB				= 2,
089413cdde3c 201028_02
hgs
parents:
diff changeset
   209
		EbDeviceClass		= 4,
089413cdde3c 201028_02
hgs
parents:
diff changeset
   210
		EbDeviceSubClass	= 5,
089413cdde3c 201028_02
hgs
parents:
diff changeset
   211
		EbDeviceProtocol	= 6,
089413cdde3c 201028_02
hgs
parents:
diff changeset
   212
		EbMaxPacketSize0	= 7,
089413cdde3c 201028_02
hgs
parents:
diff changeset
   213
		EidVendor			= 8,
089413cdde3c 201028_02
hgs
parents:
diff changeset
   214
		EidProduct			= 10,
089413cdde3c 201028_02
hgs
parents:
diff changeset
   215
		EbcdDevice			= 12,
089413cdde3c 201028_02
hgs
parents:
diff changeset
   216
		EiManufacturer		= 14,
089413cdde3c 201028_02
hgs
parents:
diff changeset
   217
		EiProduct			= 15,
089413cdde3c 201028_02
hgs
parents:
diff changeset
   218
		EiSerialNumber		= 16,
089413cdde3c 201028_02
hgs
parents:
diff changeset
   219
		EbNumConfigurations	= 17
089413cdde3c 201028_02
hgs
parents:
diff changeset
   220
		};
089413cdde3c 201028_02
hgs
parents:
diff changeset
   221
089413cdde3c 201028_02
hgs
parents:
diff changeset
   222
public:
089413cdde3c 201028_02
hgs
parents:
diff changeset
   223
	IMPORT_C TUint16 USBBcd() const;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   224
	IMPORT_C TUint8 DeviceClass() const;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   225
	IMPORT_C TUint8 DeviceSubClass() const;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   226
	IMPORT_C TUint8 DeviceProtocol() const;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   227
	IMPORT_C TUint8 MaxPacketSize0() const;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   228
	IMPORT_C TUint16 VendorId() const;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   229
	IMPORT_C TUint16 ProductId() const;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   230
	IMPORT_C TUint16 DeviceBcd() const;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   231
	IMPORT_C TUint8 ManufacturerIndex() const;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   232
	IMPORT_C TUint8 ProductIndex() const;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   233
	IMPORT_C TUint8 SerialNumberIndex() const;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   234
	IMPORT_C TUint8 NumConfigurations() const;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   235
089413cdde3c 201028_02
hgs
parents:
diff changeset
   236
public:
089413cdde3c 201028_02
hgs
parents:
diff changeset
   237
	static TUsbDeviceDescriptor* ParseL(TPtrC8& aUsbDes, TUsbGenericDescriptor* aPreviousDesc);
089413cdde3c 201028_02
hgs
parents:
diff changeset
   238
	virtual TBool IsParent(TUsbGenericDescriptor& aPotentialParent);
089413cdde3c 201028_02
hgs
parents:
diff changeset
   239
	virtual TBool IsPeer(TUsbGenericDescriptor& aPotentialPeer);
089413cdde3c 201028_02
hgs
parents:
diff changeset
   240
	};
089413cdde3c 201028_02
hgs
parents:
diff changeset
   241
089413cdde3c 201028_02
hgs
parents:
diff changeset
   242
089413cdde3c 201028_02
hgs
parents:
diff changeset
   243
/**
089413cdde3c 201028_02
hgs
parents:
diff changeset
   244
Device Qualifier descriptor.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   245
089413cdde3c 201028_02
hgs
parents:
diff changeset
   246
See section 9.6.2 of the USB 2.0 specification.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   247
089413cdde3c 201028_02
hgs
parents:
diff changeset
   248
@publishedPartner Intended to be available to 3rd parties later
089413cdde3c 201028_02
hgs
parents:
diff changeset
   249
@prototype
089413cdde3c 201028_02
hgs
parents:
diff changeset
   250
*/
089413cdde3c 201028_02
hgs
parents:
diff changeset
   251
NONSHARABLE_CLASS(TUsbDeviceQualifierDescriptor) : public TUsbGenericDescriptor
089413cdde3c 201028_02
hgs
parents:
diff changeset
   252
	{
089413cdde3c 201028_02
hgs
parents:
diff changeset
   253
public:
089413cdde3c 201028_02
hgs
parents:
diff changeset
   254
	IMPORT_C TUsbDeviceQualifierDescriptor();
089413cdde3c 201028_02
hgs
parents:
diff changeset
   255
	IMPORT_C static TUsbDeviceQualifierDescriptor* Cast(TUsbGenericDescriptor* aOriginal);
089413cdde3c 201028_02
hgs
parents:
diff changeset
   256
	
089413cdde3c 201028_02
hgs
parents:
diff changeset
   257
public:
089413cdde3c 201028_02
hgs
parents:
diff changeset
   258
	static const TInt KSizeInOctets = 10;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   259
	enum TFieldOffsets
089413cdde3c 201028_02
hgs
parents:
diff changeset
   260
		{
089413cdde3c 201028_02
hgs
parents:
diff changeset
   261
		EbcdUSB				= 2,
089413cdde3c 201028_02
hgs
parents:
diff changeset
   262
		EbDeviceClass		= 4,
089413cdde3c 201028_02
hgs
parents:
diff changeset
   263
		EbDeviceSubClass	= 5,
089413cdde3c 201028_02
hgs
parents:
diff changeset
   264
		EbDeviceProtocol	= 6,
089413cdde3c 201028_02
hgs
parents:
diff changeset
   265
		EbMaxPacketSize0	= 7,
089413cdde3c 201028_02
hgs
parents:
diff changeset
   266
		EbNumConfigurations	= 8,
089413cdde3c 201028_02
hgs
parents:
diff changeset
   267
		EbReserved			= 9
089413cdde3c 201028_02
hgs
parents:
diff changeset
   268
		};
089413cdde3c 201028_02
hgs
parents:
diff changeset
   269
089413cdde3c 201028_02
hgs
parents:
diff changeset
   270
public:
089413cdde3c 201028_02
hgs
parents:
diff changeset
   271
	IMPORT_C TUint16 USBBcd() const;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   272
	IMPORT_C TUint8 DeviceClass() const;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   273
	IMPORT_C TUint8 DeviceSubClass() const;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   274
	IMPORT_C TUint8 DeviceProtocol() const;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   275
	IMPORT_C TUint8 MaxPacketSize0() const;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   276
	IMPORT_C TUint8 NumConfigurations() const;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   277
	IMPORT_C TUint8 Reserved() const;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   278
	
089413cdde3c 201028_02
hgs
parents:
diff changeset
   279
public:
089413cdde3c 201028_02
hgs
parents:
diff changeset
   280
	static TUsbDeviceQualifierDescriptor* ParseL(TPtrC8& aUsbDes, TUsbGenericDescriptor* aPreviousDesc);
089413cdde3c 201028_02
hgs
parents:
diff changeset
   281
	virtual TBool IsParent(TUsbGenericDescriptor& aPotentialParent);
089413cdde3c 201028_02
hgs
parents:
diff changeset
   282
	virtual TBool IsPeer(TUsbGenericDescriptor& aPotentialPeer);
089413cdde3c 201028_02
hgs
parents:
diff changeset
   283
	};
089413cdde3c 201028_02
hgs
parents:
diff changeset
   284
089413cdde3c 201028_02
hgs
parents:
diff changeset
   285
089413cdde3c 201028_02
hgs
parents:
diff changeset
   286
/**
089413cdde3c 201028_02
hgs
parents:
diff changeset
   287
Configuration descriptor.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   288
089413cdde3c 201028_02
hgs
parents:
diff changeset
   289
See section 9.6.3 of the USB 2.0 specification.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   290
089413cdde3c 201028_02
hgs
parents:
diff changeset
   291
@publishedPartner Intended to be available to 3rd parties later
089413cdde3c 201028_02
hgs
parents:
diff changeset
   292
@prototype
089413cdde3c 201028_02
hgs
parents:
diff changeset
   293
*/
089413cdde3c 201028_02
hgs
parents:
diff changeset
   294
NONSHARABLE_CLASS(TUsbConfigurationDescriptor) : public TUsbGenericDescriptor
089413cdde3c 201028_02
hgs
parents:
diff changeset
   295
	{
089413cdde3c 201028_02
hgs
parents:
diff changeset
   296
public:
089413cdde3c 201028_02
hgs
parents:
diff changeset
   297
	IMPORT_C TUsbConfigurationDescriptor();
089413cdde3c 201028_02
hgs
parents:
diff changeset
   298
	IMPORT_C static TUsbConfigurationDescriptor* Cast(TUsbGenericDescriptor* aOriginal);
089413cdde3c 201028_02
hgs
parents:
diff changeset
   299
089413cdde3c 201028_02
hgs
parents:
diff changeset
   300
public:
089413cdde3c 201028_02
hgs
parents:
diff changeset
   301
	static const TInt KSizeInOctets = 9;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   302
	enum TFieldOffsets
089413cdde3c 201028_02
hgs
parents:
diff changeset
   303
		{
089413cdde3c 201028_02
hgs
parents:
diff changeset
   304
		EwTotalLength			= 2,
089413cdde3c 201028_02
hgs
parents:
diff changeset
   305
		EbNumInterfaces			= 4,
089413cdde3c 201028_02
hgs
parents:
diff changeset
   306
		EbConfigurationValue	= 5,
089413cdde3c 201028_02
hgs
parents:
diff changeset
   307
		EiConfiguration			= 6,
089413cdde3c 201028_02
hgs
parents:
diff changeset
   308
		EbmAttributes			= 7,
089413cdde3c 201028_02
hgs
parents:
diff changeset
   309
		EbMaxPower				= 8
089413cdde3c 201028_02
hgs
parents:
diff changeset
   310
		};
089413cdde3c 201028_02
hgs
parents:
diff changeset
   311
089413cdde3c 201028_02
hgs
parents:
diff changeset
   312
public:
089413cdde3c 201028_02
hgs
parents:
diff changeset
   313
	IMPORT_C TUint16 TotalLength() const;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   314
	IMPORT_C TUint8 NumInterfaces() const;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   315
	IMPORT_C TUint8 ConfigurationValue() const;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   316
	IMPORT_C TUint8 ConfigurationIndex() const;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   317
	IMPORT_C TUint8 Attributes() const;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   318
	IMPORT_C TUint8 MaxPower() const;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   319
089413cdde3c 201028_02
hgs
parents:
diff changeset
   320
public:
089413cdde3c 201028_02
hgs
parents:
diff changeset
   321
	static TUsbConfigurationDescriptor* ParseL(TPtrC8& aUsbDes, TUsbGenericDescriptor* aPreviousDesc);
089413cdde3c 201028_02
hgs
parents:
diff changeset
   322
	virtual TBool IsParent(TUsbGenericDescriptor& aPotentialParent);
089413cdde3c 201028_02
hgs
parents:
diff changeset
   323
	virtual TBool IsPeer(TUsbGenericDescriptor& aPotentialPeer);
089413cdde3c 201028_02
hgs
parents:
diff changeset
   324
	};
089413cdde3c 201028_02
hgs
parents:
diff changeset
   325
089413cdde3c 201028_02
hgs
parents:
diff changeset
   326
089413cdde3c 201028_02
hgs
parents:
diff changeset
   327
/**
089413cdde3c 201028_02
hgs
parents:
diff changeset
   328
Other Speed descriptor.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   329
089413cdde3c 201028_02
hgs
parents:
diff changeset
   330
See section 9.6.4 of the USB 2.0 specification.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   331
089413cdde3c 201028_02
hgs
parents:
diff changeset
   332
@publishedPartner Intended to be available to 3rd parties later
089413cdde3c 201028_02
hgs
parents:
diff changeset
   333
@prototype
089413cdde3c 201028_02
hgs
parents:
diff changeset
   334
*/
089413cdde3c 201028_02
hgs
parents:
diff changeset
   335
NONSHARABLE_CLASS(TUsbOtherSpeedDescriptor) : public TUsbGenericDescriptor
089413cdde3c 201028_02
hgs
parents:
diff changeset
   336
	{
089413cdde3c 201028_02
hgs
parents:
diff changeset
   337
public:
089413cdde3c 201028_02
hgs
parents:
diff changeset
   338
	IMPORT_C TUsbOtherSpeedDescriptor();
089413cdde3c 201028_02
hgs
parents:
diff changeset
   339
	IMPORT_C static TUsbOtherSpeedDescriptor* Cast(TUsbGenericDescriptor* aOriginal);
089413cdde3c 201028_02
hgs
parents:
diff changeset
   340
089413cdde3c 201028_02
hgs
parents:
diff changeset
   341
public:
089413cdde3c 201028_02
hgs
parents:
diff changeset
   342
	static const TInt KSizeInOctets = 9;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   343
	enum TFieldOffsets
089413cdde3c 201028_02
hgs
parents:
diff changeset
   344
		{
089413cdde3c 201028_02
hgs
parents:
diff changeset
   345
		EwTotalLength 			= 2,
089413cdde3c 201028_02
hgs
parents:
diff changeset
   346
		EbNumInterfaces			= 4,
089413cdde3c 201028_02
hgs
parents:
diff changeset
   347
		EbConfigurationValue	= 5,
089413cdde3c 201028_02
hgs
parents:
diff changeset
   348
		EiConfiguration			= 6,
089413cdde3c 201028_02
hgs
parents:
diff changeset
   349
		EbmAttributes			= 7,
089413cdde3c 201028_02
hgs
parents:
diff changeset
   350
		EbMaxPower				= 8
089413cdde3c 201028_02
hgs
parents:
diff changeset
   351
		};
089413cdde3c 201028_02
hgs
parents:
diff changeset
   352
089413cdde3c 201028_02
hgs
parents:
diff changeset
   353
public:
089413cdde3c 201028_02
hgs
parents:
diff changeset
   354
	IMPORT_C TUint16 TotalLength() const;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   355
	IMPORT_C TUint8 NumInterfaces() const;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   356
	IMPORT_C TUint8 ConfigurationValue() const;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   357
	IMPORT_C TUint8 ConfigurationIndex() const;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   358
	IMPORT_C TUint8 Attributes() const;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   359
	IMPORT_C TUint8 MaxPower() const;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   360
	
089413cdde3c 201028_02
hgs
parents:
diff changeset
   361
public:
089413cdde3c 201028_02
hgs
parents:
diff changeset
   362
	static TUsbOtherSpeedDescriptor* ParseL(TPtrC8& aUsbDes, TUsbGenericDescriptor* aPreviousDesc);
089413cdde3c 201028_02
hgs
parents:
diff changeset
   363
	virtual TBool IsParent(TUsbGenericDescriptor& aPotentialParent);
089413cdde3c 201028_02
hgs
parents:
diff changeset
   364
	virtual TBool IsPeer(TUsbGenericDescriptor& aPotentialPeer);
089413cdde3c 201028_02
hgs
parents:
diff changeset
   365
	};
089413cdde3c 201028_02
hgs
parents:
diff changeset
   366
089413cdde3c 201028_02
hgs
parents:
diff changeset
   367
089413cdde3c 201028_02
hgs
parents:
diff changeset
   368
/**
089413cdde3c 201028_02
hgs
parents:
diff changeset
   369
Interface Association Descriptor
089413cdde3c 201028_02
hgs
parents:
diff changeset
   370
089413cdde3c 201028_02
hgs
parents:
diff changeset
   371
See the USB IAD ECN.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   372
089413cdde3c 201028_02
hgs
parents:
diff changeset
   373
@publishedPartner Intended to be available to 3rd parties later
089413cdde3c 201028_02
hgs
parents:
diff changeset
   374
@prototype
089413cdde3c 201028_02
hgs
parents:
diff changeset
   375
*/
089413cdde3c 201028_02
hgs
parents:
diff changeset
   376
NONSHARABLE_CLASS(TUsbInterfaceAssociationDescriptor) : public TUsbGenericDescriptor
089413cdde3c 201028_02
hgs
parents:
diff changeset
   377
	{
089413cdde3c 201028_02
hgs
parents:
diff changeset
   378
public:
089413cdde3c 201028_02
hgs
parents:
diff changeset
   379
	IMPORT_C TUsbInterfaceAssociationDescriptor();
089413cdde3c 201028_02
hgs
parents:
diff changeset
   380
	IMPORT_C static TUsbInterfaceAssociationDescriptor* Cast(TUsbGenericDescriptor* aOriginal);
089413cdde3c 201028_02
hgs
parents:
diff changeset
   381
089413cdde3c 201028_02
hgs
parents:
diff changeset
   382
public:
089413cdde3c 201028_02
hgs
parents:
diff changeset
   383
	static const TInt KSizeInOctets = 8;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   384
	enum TFieldOffsets
089413cdde3c 201028_02
hgs
parents:
diff changeset
   385
		{
089413cdde3c 201028_02
hgs
parents:
diff changeset
   386
		EbFirstInterface	= 2,
089413cdde3c 201028_02
hgs
parents:
diff changeset
   387
		EbInterfaceCount	= 3,
089413cdde3c 201028_02
hgs
parents:
diff changeset
   388
		EbFunctionClass		= 4,
089413cdde3c 201028_02
hgs
parents:
diff changeset
   389
		EbFunctionSubClass	= 5,
089413cdde3c 201028_02
hgs
parents:
diff changeset
   390
		EbFunctionProtocol	= 6,
089413cdde3c 201028_02
hgs
parents:
diff changeset
   391
		EiFunction			= 7
089413cdde3c 201028_02
hgs
parents:
diff changeset
   392
		};
089413cdde3c 201028_02
hgs
parents:
diff changeset
   393
	
089413cdde3c 201028_02
hgs
parents:
diff changeset
   394
public:
089413cdde3c 201028_02
hgs
parents:
diff changeset
   395
	IMPORT_C TUint8 FirstInterface() const;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   396
	IMPORT_C TUint8 InterfaceCount() const;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   397
	IMPORT_C TUint8 FunctionClass() const;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   398
	IMPORT_C TUint8 FunctionSubClass() const;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   399
	IMPORT_C TUint8 FunctionProtocol() const;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   400
	IMPORT_C TUint8 FunctionIndex() const;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   401
	
089413cdde3c 201028_02
hgs
parents:
diff changeset
   402
public:
089413cdde3c 201028_02
hgs
parents:
diff changeset
   403
	static TUsbInterfaceAssociationDescriptor* ParseL(TPtrC8& aUsbDes, TUsbGenericDescriptor* aPreviousDesc);
089413cdde3c 201028_02
hgs
parents:
diff changeset
   404
	virtual TBool IsParent(TUsbGenericDescriptor& aPotentialParent);
089413cdde3c 201028_02
hgs
parents:
diff changeset
   405
	virtual TBool IsPeer(TUsbGenericDescriptor& aPotentialPeer);
089413cdde3c 201028_02
hgs
parents:
diff changeset
   406
	virtual TBool IsChild(TUsbGenericDescriptor& aPotentialChild);
089413cdde3c 201028_02
hgs
parents:
diff changeset
   407
	};
089413cdde3c 201028_02
hgs
parents:
diff changeset
   408
089413cdde3c 201028_02
hgs
parents:
diff changeset
   409
/**
089413cdde3c 201028_02
hgs
parents:
diff changeset
   410
Interface descriptor.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   411
089413cdde3c 201028_02
hgs
parents:
diff changeset
   412
See section 9.6.5 of the USB 2.0 specification.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   413
089413cdde3c 201028_02
hgs
parents:
diff changeset
   414
@publishedPartner Intended to be available to 3rd parties later
089413cdde3c 201028_02
hgs
parents:
diff changeset
   415
@prototype
089413cdde3c 201028_02
hgs
parents:
diff changeset
   416
*/
089413cdde3c 201028_02
hgs
parents:
diff changeset
   417
NONSHARABLE_CLASS(TUsbInterfaceDescriptor) : public TUsbGenericDescriptor
089413cdde3c 201028_02
hgs
parents:
diff changeset
   418
	{
089413cdde3c 201028_02
hgs
parents:
diff changeset
   419
public:
089413cdde3c 201028_02
hgs
parents:
diff changeset
   420
	IMPORT_C TUsbInterfaceDescriptor();
089413cdde3c 201028_02
hgs
parents:
diff changeset
   421
	IMPORT_C static TUsbInterfaceDescriptor* Cast(TUsbGenericDescriptor* aOriginal);
089413cdde3c 201028_02
hgs
parents:
diff changeset
   422
089413cdde3c 201028_02
hgs
parents:
diff changeset
   423
public:
089413cdde3c 201028_02
hgs
parents:
diff changeset
   424
	static const TInt KSizeInOctets = 9;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   425
	enum TFieldOffsets
089413cdde3c 201028_02
hgs
parents:
diff changeset
   426
		{
089413cdde3c 201028_02
hgs
parents:
diff changeset
   427
		EbInterfaceNumber	= 2,
089413cdde3c 201028_02
hgs
parents:
diff changeset
   428
		EbAlternateSetting	= 3,
089413cdde3c 201028_02
hgs
parents:
diff changeset
   429
		EbNumEndpoints		= 4,
089413cdde3c 201028_02
hgs
parents:
diff changeset
   430
		EbInterfaceClass	= 5,
089413cdde3c 201028_02
hgs
parents:
diff changeset
   431
		EbInterfaceSubClass	= 6,
089413cdde3c 201028_02
hgs
parents:
diff changeset
   432
		EbInterfaceProtocol	= 7,
089413cdde3c 201028_02
hgs
parents:
diff changeset
   433
		EiInterface			= 8
089413cdde3c 201028_02
hgs
parents:
diff changeset
   434
		};
089413cdde3c 201028_02
hgs
parents:
diff changeset
   435
	
089413cdde3c 201028_02
hgs
parents:
diff changeset
   436
public:
089413cdde3c 201028_02
hgs
parents:
diff changeset
   437
	IMPORT_C TUint8 InterfaceNumber() const;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   438
	IMPORT_C TUint8 AlternateSetting() const;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   439
	IMPORT_C TUint8 NumEndpoints() const;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   440
	IMPORT_C TUint8 InterfaceClass() const;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   441
	IMPORT_C TUint8 InterfaceSubClass() const;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   442
	IMPORT_C TUint8 InterfaceProtocol() const;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   443
	IMPORT_C TUint8 Interface() const;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   444
	
089413cdde3c 201028_02
hgs
parents:
diff changeset
   445
public:
089413cdde3c 201028_02
hgs
parents:
diff changeset
   446
	static TUsbInterfaceDescriptor* ParseL(TPtrC8& aUsbDes, TUsbGenericDescriptor* aPreviousDesc);
089413cdde3c 201028_02
hgs
parents:
diff changeset
   447
	virtual TBool IsParent(TUsbGenericDescriptor& aPotentialParent);
089413cdde3c 201028_02
hgs
parents:
diff changeset
   448
	virtual TBool IsPeer(TUsbGenericDescriptor& aPotentialPeer);
089413cdde3c 201028_02
hgs
parents:
diff changeset
   449
	};
089413cdde3c 201028_02
hgs
parents:
diff changeset
   450
089413cdde3c 201028_02
hgs
parents:
diff changeset
   451
/**
089413cdde3c 201028_02
hgs
parents:
diff changeset
   452
Endpoint descriptor.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   453
089413cdde3c 201028_02
hgs
parents:
diff changeset
   454
See section 9.6.6 of the USB 2.0 specification.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   455
Note these exclude support support for:
089413cdde3c 201028_02
hgs
parents:
diff changeset
   456
'Standard AC Interrupt Endpoint Descriptor'
089413cdde3c 201028_02
hgs
parents:
diff changeset
   457
'Standard AS Isochronous Synch Endpoint Descriptor'
089413cdde3c 201028_02
hgs
parents:
diff changeset
   458
'Standard AS Isochronous Audio Data Endpoint Descriptor'
089413cdde3c 201028_02
hgs
parents:
diff changeset
   459
as defined in USB Audio Device Class Spec v1.0 which are all 9 bytes in size.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   460
To support these custom descriptors may be registered with the
089413cdde3c 201028_02
hgs
parents:
diff changeset
   461
parser.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   462
089413cdde3c 201028_02
hgs
parents:
diff changeset
   463
@publishedPartner Intended to be available to 3rd parties later
089413cdde3c 201028_02
hgs
parents:
diff changeset
   464
@prototype
089413cdde3c 201028_02
hgs
parents:
diff changeset
   465
*/
089413cdde3c 201028_02
hgs
parents:
diff changeset
   466
NONSHARABLE_CLASS(TUsbEndpointDescriptor) : public TUsbGenericDescriptor
089413cdde3c 201028_02
hgs
parents:
diff changeset
   467
	{
089413cdde3c 201028_02
hgs
parents:
diff changeset
   468
public:
089413cdde3c 201028_02
hgs
parents:
diff changeset
   469
	IMPORT_C TUsbEndpointDescriptor();
089413cdde3c 201028_02
hgs
parents:
diff changeset
   470
	IMPORT_C static TUsbEndpointDescriptor* Cast(TUsbGenericDescriptor* aOriginal);
089413cdde3c 201028_02
hgs
parents:
diff changeset
   471
089413cdde3c 201028_02
hgs
parents:
diff changeset
   472
public:
089413cdde3c 201028_02
hgs
parents:
diff changeset
   473
	static const TInt KSizeInOctets = 7;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   474
	enum TFieldOffsets
089413cdde3c 201028_02
hgs
parents:
diff changeset
   475
		{
089413cdde3c 201028_02
hgs
parents:
diff changeset
   476
		EbEndpointAddress	= 2,
089413cdde3c 201028_02
hgs
parents:
diff changeset
   477
		EbmAttributes		= 3,
089413cdde3c 201028_02
hgs
parents:
diff changeset
   478
		EwMaxPacketSize		= 4,
089413cdde3c 201028_02
hgs
parents:
diff changeset
   479
		EbInterval			= 6
089413cdde3c 201028_02
hgs
parents:
diff changeset
   480
		};
089413cdde3c 201028_02
hgs
parents:
diff changeset
   481
089413cdde3c 201028_02
hgs
parents:
diff changeset
   482
public:
089413cdde3c 201028_02
hgs
parents:
diff changeset
   483
	IMPORT_C TUint8 EndpointAddress() const;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   484
	IMPORT_C TUint8 Attributes() const;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   485
	IMPORT_C TUint16 MaxPacketSize() const;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   486
	IMPORT_C TUint8 Interval() const;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   487
	
089413cdde3c 201028_02
hgs
parents:
diff changeset
   488
public:
089413cdde3c 201028_02
hgs
parents:
diff changeset
   489
	static TUsbEndpointDescriptor* ParseL(TPtrC8& aUsbDes, TUsbGenericDescriptor* aPreviousDesc);
089413cdde3c 201028_02
hgs
parents:
diff changeset
   490
	virtual TBool IsParent(TUsbGenericDescriptor& aPotentialParent);
089413cdde3c 201028_02
hgs
parents:
diff changeset
   491
	virtual TBool IsPeer(TUsbGenericDescriptor& aPotentialPeer);
089413cdde3c 201028_02
hgs
parents:
diff changeset
   492
	};
089413cdde3c 201028_02
hgs
parents:
diff changeset
   493
089413cdde3c 201028_02
hgs
parents:
diff changeset
   494
/**
089413cdde3c 201028_02
hgs
parents:
diff changeset
   495
String descriptor
089413cdde3c 201028_02
hgs
parents:
diff changeset
   496
089413cdde3c 201028_02
hgs
parents:
diff changeset
   497
See section 9.6.7 of the USB 2.0 specification.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   498
089413cdde3c 201028_02
hgs
parents:
diff changeset
   499
@publishedPartner Intended to be available to 3rd parties later
089413cdde3c 201028_02
hgs
parents:
diff changeset
   500
@prototype
089413cdde3c 201028_02
hgs
parents:
diff changeset
   501
*/
089413cdde3c 201028_02
hgs
parents:
diff changeset
   502
NONSHARABLE_CLASS(TUsbStringDescriptor) : public TUsbGenericDescriptor
089413cdde3c 201028_02
hgs
parents:
diff changeset
   503
	{
089413cdde3c 201028_02
hgs
parents:
diff changeset
   504
public:
089413cdde3c 201028_02
hgs
parents:
diff changeset
   505
	IMPORT_C TUsbStringDescriptor();
089413cdde3c 201028_02
hgs
parents:
diff changeset
   506
	IMPORT_C static TUsbStringDescriptor* Cast(TUsbGenericDescriptor* aOriginal);
089413cdde3c 201028_02
hgs
parents:
diff changeset
   507
089413cdde3c 201028_02
hgs
parents:
diff changeset
   508
public:
089413cdde3c 201028_02
hgs
parents:
diff changeset
   509
	IMPORT_C TInt GetLangId(TInt aIndex) const;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   510
	IMPORT_C void StringData(TDes16& aString) const;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   511
089413cdde3c 201028_02
hgs
parents:
diff changeset
   512
public:
089413cdde3c 201028_02
hgs
parents:
diff changeset
   513
	static TUsbStringDescriptor* ParseL(TPtrC8& aUsbDes, TUsbGenericDescriptor* aPreviousDesc);
089413cdde3c 201028_02
hgs
parents:
diff changeset
   514
	virtual TBool IsParent(TUsbGenericDescriptor& aPotentialParent);
089413cdde3c 201028_02
hgs
parents:
diff changeset
   515
	virtual TBool IsPeer(TUsbGenericDescriptor& aPotentialPeer);
089413cdde3c 201028_02
hgs
parents:
diff changeset
   516
	};
089413cdde3c 201028_02
hgs
parents:
diff changeset
   517
089413cdde3c 201028_02
hgs
parents:
diff changeset
   518
/**
089413cdde3c 201028_02
hgs
parents:
diff changeset
   519
OTG descriptor.
089413cdde3c 201028_02
hgs
parents:
diff changeset
   520
089413cdde3c 201028_02
hgs
parents:
diff changeset
   521
See section 6.4 of the USB 2.0 On-The-Go Supplement Revision 1.3
089413cdde3c 201028_02
hgs
parents:
diff changeset
   522
089413cdde3c 201028_02
hgs
parents:
diff changeset
   523
@publishedPartner Intended to be available to 3rd parties later
089413cdde3c 201028_02
hgs
parents:
diff changeset
   524
@prototype
089413cdde3c 201028_02
hgs
parents:
diff changeset
   525
*/
089413cdde3c 201028_02
hgs
parents:
diff changeset
   526
NONSHARABLE_CLASS(TUsbOTGDescriptor) : public TUsbGenericDescriptor
089413cdde3c 201028_02
hgs
parents:
diff changeset
   527
	{
089413cdde3c 201028_02
hgs
parents:
diff changeset
   528
public:
089413cdde3c 201028_02
hgs
parents:
diff changeset
   529
	IMPORT_C TUsbOTGDescriptor();
089413cdde3c 201028_02
hgs
parents:
diff changeset
   530
	IMPORT_C static TUsbOTGDescriptor* Cast(TUsbGenericDescriptor* aOriginal);
089413cdde3c 201028_02
hgs
parents:
diff changeset
   531
089413cdde3c 201028_02
hgs
parents:
diff changeset
   532
public:
55
3b97f0de7605 201038_01
hgs
parents: 33
diff changeset
   533
	static const TInt KSizeInOctets = 3; //OTG1.3 otg descriptor length
33
089413cdde3c 201028_02
hgs
parents:
diff changeset
   534
	enum TFieldOffsets
089413cdde3c 201028_02
hgs
parents:
diff changeset
   535
		{
55
3b97f0de7605 201038_01
hgs
parents: 33
diff changeset
   536
	  EbmLength       = 0,
3b97f0de7605 201038_01
hgs
parents: 33
diff changeset
   537
		EbmAttributes		= 2,
3b97f0de7605 201038_01
hgs
parents: 33
diff changeset
   538
		EbcdOTG         = 3
33
089413cdde3c 201028_02
hgs
parents:
diff changeset
   539
		};
089413cdde3c 201028_02
hgs
parents:
diff changeset
   540
089413cdde3c 201028_02
hgs
parents:
diff changeset
   541
public:
089413cdde3c 201028_02
hgs
parents:
diff changeset
   542
	IMPORT_C TUint8 Attributes() const;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   543
    IMPORT_C TBool HNPSupported() const;
089413cdde3c 201028_02
hgs
parents:
diff changeset
   544
    IMPORT_C TBool SRPSupported() const;
55
3b97f0de7605 201038_01
hgs
parents: 33
diff changeset
   545
    IMPORT_C TUint16 BcdOTG() const;
33
089413cdde3c 201028_02
hgs
parents:
diff changeset
   546
public:
089413cdde3c 201028_02
hgs
parents:
diff changeset
   547
	static TUsbOTGDescriptor* ParseL(TPtrC8& aUsbDes, TUsbGenericDescriptor* aPreviousDesc);
089413cdde3c 201028_02
hgs
parents:
diff changeset
   548
	virtual TBool IsParent(TUsbGenericDescriptor& aPotentialParent);
089413cdde3c 201028_02
hgs
parents:
diff changeset
   549
	virtual TBool IsPeer(TUsbGenericDescriptor& aPotentialPeer);
55
3b97f0de7605 201038_01
hgs
parents: 33
diff changeset
   550
	static TBool IsValidOTGDescriptorLength(TUint8 aLength);
33
089413cdde3c 201028_02
hgs
parents:
diff changeset
   551
	};
089413cdde3c 201028_02
hgs
parents:
diff changeset
   552
089413cdde3c 201028_02
hgs
parents:
diff changeset
   553
089413cdde3c 201028_02
hgs
parents:
diff changeset
   554
#endif	// D32USBDESCRIPTORS_H