1 /*----------------------------------------------------------------------------
3 *----------------------------------------------------------------------------
5 * Purpose: USB Descriptors
7 *----------------------------------------------------------------------------
8 * This software is supplied "AS IS" without any warranties, express,
9 * implied or statutory, including but not limited to the implied
10 * warranties of fitness for purpose, satisfactory quality and
11 * noninfringement. Keil extends you a royalty-free right to reproduce
12 * and distribute executable files created using this software for use
13 * on NXP Semiconductors LPC microcontroller devices only. Nothing else
14 * gives you the right to use this software.
16 * Copyright (c) 2009 Keil - An ARM Company. All rights reserved.
17 *----------------------------------------------------------------------------
19 * V1.20 Changed string descriptor handling
20 * V1.00 Initial Version
21 *---------------------------------------------------------------------------*/
22 #include "projectconfig.h"
31 /* USB Standard Device Descriptor */
32 const uint8_t USB_DeviceDescriptor
[] = {
33 USB_DEVICE_DESC_SIZE
, /* bLength */
34 USB_DEVICE_DESCRIPTOR_TYPE
, /* bDescriptorType */
35 WBVAL(0x0200), /* 2.0 */ /* bcdUSB */
36 USB_DEVICE_CLASS_COMMUNICATIONS
, /* bDeviceClass CDC*/
37 0x00, /* bDeviceSubClass */
38 0x00, /* bDeviceProtocol */
39 USB_MAX_PACKET0
, /* bMaxPacketSize0 */
40 WBVAL(USB_VENDOR_ID
), /* idVendor */
41 WBVAL(USB_PROD_ID
), /* idProduct */
42 WBVAL(USB_DEVICE
), /* 1.00 */ /* bcdDevice */
43 0x01, /* iManufacturer */
45 0x03, /* iSerialNumber */
46 0x01 /* bNumConfigurations: one possible configuration*/
49 /* USB Configuration Descriptor */
50 /* All Descriptors (Configuration, Interface, Endpoint, Class, Vendor */
51 const uint8_t USB_ConfigDescriptor
[] = {
53 USB_CONFIGUARTION_DESC_SIZE
, /* bLength */
54 USB_CONFIGURATION_DESCRIPTOR_TYPE
, /* bDescriptorType */
55 WBVAL( /* wTotalLength */
56 1*USB_CONFIGUARTION_DESC_SIZE
+
57 1*USB_INTERFACE_DESC_SIZE
+ /* communication interface */
58 0x0013 + /* CDC functions */
59 1*USB_ENDPOINT_DESC_SIZE
+ /* interrupt endpoint */
60 1*USB_INTERFACE_DESC_SIZE
+ /* data interface */
61 2*USB_ENDPOINT_DESC_SIZE
/* bulk endpoints */
63 0x02, /* bNumInterfaces */
64 0x01, /* bConfigurationValue: 0x01 is used to select this configuration */
65 0x00, /* iConfiguration: no string to describe this configuration */
66 USB_CONFIG_BUS_POWERED
/*|*/ /* bmAttributes */
67 /*USB_CONFIG_REMOTE_WAKEUP*/,
68 USB_CONFIG_POWER_MA(100), /* bMaxPower, device power consumption is 100 mA */
69 /* Interface 0, Alternate Setting 0, Communication class interface descriptor */
70 USB_INTERFACE_DESC_SIZE
, /* bLength */
71 USB_INTERFACE_DESCRIPTOR_TYPE
, /* bDescriptorType */
72 USB_CDC_CIF_NUM
, /* bInterfaceNumber: Number of Interface */
73 0x00, /* bAlternateSetting: Alternate setting */
74 0x01, /* bNumEndpoints: One endpoint used */
75 CDC_COMMUNICATION_INTERFACE_CLASS
, /* bInterfaceClass: Communication Interface Class */
76 CDC_ABSTRACT_CONTROL_MODEL
, /* bInterfaceSubClass: Abstract Control Model */
77 0x01, /* bInterfaceProtocol: no protocol used */
78 0x00, /* iInterface: */
79 /*Header Functional Descriptor*/
80 0x05, /* bLength: Endpoint Descriptor size */
81 CDC_CS_INTERFACE
, /* bDescriptorType: CS_INTERFACE */
82 CDC_HEADER
, /* bDescriptorSubtype: Header Func Desc */
83 WBVAL(CDC_V1_10
), /* 1.10 */ /* bcdCDC */
84 /*Call Management Functional Descriptor*/
85 0x05, /* bFunctionLength */
86 CDC_CS_INTERFACE
, /* bDescriptorType: CS_INTERFACE */
87 CDC_CALL_MANAGEMENT
, /* bDescriptorSubtype: Call Management Func Desc */
88 0x03, /* bmCapabilities: device handles call management */
89 0x01, /* bDataInterface: CDC data IF ID */
90 /*Abstract Control Management Functional Descriptor*/
91 0x04, /* bFunctionLength */
92 CDC_CS_INTERFACE
, /* bDescriptorType: CS_INTERFACE */
93 CDC_ABSTRACT_CONTROL_MANAGEMENT
, /* bDescriptorSubtype: Abstract Control Management desc */
94 0x02, /* bmCapabilities: SET_LINE_CODING, GET_LINE_CODING, SET_CONTROL_LINE_STATE supported */
95 /*Union Functional Descriptor*/
96 0x05, /* bFunctionLength */
97 CDC_CS_INTERFACE
, /* bDescriptorType: CS_INTERFACE */
98 CDC_UNION
, /* bDescriptorSubtype: Union func desc */
99 USB_CDC_CIF_NUM
, /* bMasterInterface: Communication class interface is master */
100 USB_CDC_DIF_NUM
, /* bSlaveInterface0: Data class interface is slave 0 */
101 /*Endpoint 1 Descriptor*/ /* event notification (optional) */
102 USB_ENDPOINT_DESC_SIZE
, /* bLength */
103 USB_ENDPOINT_DESCRIPTOR_TYPE
, /* bDescriptorType */
104 USB_ENDPOINT_IN(1), /* bEndpointAddress */
105 USB_ENDPOINT_TYPE_INTERRUPT
, /* bmAttributes */
106 WBVAL(0x0010), /* wMaxPacketSize */
107 0x02, /* 2ms */ /* bInterval */
108 /* Interface 1, Alternate Setting 0, Data class interface descriptor*/
109 USB_INTERFACE_DESC_SIZE
, /* bLength */
110 USB_INTERFACE_DESCRIPTOR_TYPE
, /* bDescriptorType */
111 USB_CDC_DIF_NUM
, /* bInterfaceNumber: Number of Interface */
112 0x00, /* bAlternateSetting: no alternate setting */
113 0x02, /* bNumEndpoints: two endpoints used */
114 CDC_DATA_INTERFACE_CLASS
, /* bInterfaceClass: Data Interface Class */
115 0x00, /* bInterfaceSubClass: no subclass available */
116 0x00, /* bInterfaceProtocol: no protocol used */
117 0x00, /* iInterface: */
118 /* Endpoint, EP3 Bulk Out */
119 USB_ENDPOINT_DESC_SIZE
, /* bLength */
120 USB_ENDPOINT_DESCRIPTOR_TYPE
, /* bDescriptorType */
121 USB_ENDPOINT_OUT(3), /* bEndpointAddress */
122 USB_ENDPOINT_TYPE_BULK
, /* bmAttributes */
123 WBVAL(64), /* wMaxPacketSize */
124 0x00, /* bInterval: ignore for Bulk transfer */
125 /* Endpoint, EP3 Bulk In */
126 USB_ENDPOINT_DESC_SIZE
, /* bLength */
127 USB_ENDPOINT_DESCRIPTOR_TYPE
, /* bDescriptorType */
128 USB_ENDPOINT_IN(3), /* bEndpointAddress */
129 USB_ENDPOINT_TYPE_BULK
, /* bmAttributes */
130 WBVAL(64), /* wMaxPacketSize */
131 0x00, /* bInterval: ignore for Bulk transfer */
139 /* USB String Descriptor (optional) */
140 const uint8_t USB_StringDescriptor
[] = {
141 /* Index 0x00: LANGID Codes */
143 USB_STRING_DESCRIPTOR_TYPE
, /* bDescriptorType */
144 WBVAL(0x0409), /* US English */ /* wLANGID */
145 /* Index 0x01: Manufacturer */
146 (13*2 + 2), /* bLength (13 Char + Type + lenght) */
147 USB_STRING_DESCRIPTOR_TYPE
, /* bDescriptorType */
161 /* Index 0x02: Product */
162 (17*2 + 2), /* bLength ( 17 Char + Type + lenght) */
163 USB_STRING_DESCRIPTOR_TYPE
, /* bDescriptorType */
181 /* Index 0x03: Serial Number */
182 (12*2 + 2), /* bLength (12 Char + Type + lenght) */
183 USB_STRING_DESCRIPTOR_TYPE
, /* bDescriptorType */
196 /* Index 0x04: Interface 0, Alternate Setting 0 */
197 ( 4*2 + 2), /* bLength (4 Char + Type + lenght) */
198 USB_STRING_DESCRIPTOR_TYPE
, /* bDescriptorType */