These are the examples provided for [[/users/frank26080115/libraries/LPC1700CMSIS_Lib/]] Note, the entire "program" is not compilable!
USBDEV/USBCDC/usbdesc.c@0:bf7b9fba3924, 2011-03-20 (annotated)
- Committer:
- frank26080115
- Date:
- Sun Mar 20 05:38:56 2011 +0000
- Revision:
- 0:bf7b9fba3924
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
frank26080115 | 0:bf7b9fba3924 | 1 | /*---------------------------------------------------------------------------- |
frank26080115 | 0:bf7b9fba3924 | 2 | * U S B - K e r n e l |
frank26080115 | 0:bf7b9fba3924 | 3 | *---------------------------------------------------------------------------- |
frank26080115 | 0:bf7b9fba3924 | 4 | * Name: usbdesc.c |
frank26080115 | 0:bf7b9fba3924 | 5 | * Purpose: USB Descriptors |
frank26080115 | 0:bf7b9fba3924 | 6 | * Version: V1.20 |
frank26080115 | 0:bf7b9fba3924 | 7 | *---------------------------------------------------------------------------- |
frank26080115 | 0:bf7b9fba3924 | 8 | * This software is supplied "AS IS" without any warranties, express, |
frank26080115 | 0:bf7b9fba3924 | 9 | * implied or statutory, including but not limited to the implied |
frank26080115 | 0:bf7b9fba3924 | 10 | * warranties of fitness for purpose, satisfactory quality and |
frank26080115 | 0:bf7b9fba3924 | 11 | * noninfringement. Keil extends you a royalty-free right to reproduce |
frank26080115 | 0:bf7b9fba3924 | 12 | * and distribute executable files created using this software for use |
frank26080115 | 0:bf7b9fba3924 | 13 | * on NXP Semiconductors LPC microcontroller devices only. Nothing else |
frank26080115 | 0:bf7b9fba3924 | 14 | * gives you the right to use this software. |
frank26080115 | 0:bf7b9fba3924 | 15 | * |
frank26080115 | 0:bf7b9fba3924 | 16 | * Copyright (c) 2009 Keil - An ARM Company. All rights reserved. |
frank26080115 | 0:bf7b9fba3924 | 17 | *---------------------------------------------------------------------------- |
frank26080115 | 0:bf7b9fba3924 | 18 | * History: |
frank26080115 | 0:bf7b9fba3924 | 19 | * V1.20 Changed string descriptor handling |
frank26080115 | 0:bf7b9fba3924 | 20 | * V1.00 Initial Version |
frank26080115 | 0:bf7b9fba3924 | 21 | *---------------------------------------------------------------------------*/ |
frank26080115 | 0:bf7b9fba3924 | 22 | #include "lpc_types.h" |
frank26080115 | 0:bf7b9fba3924 | 23 | #include "usb.h" |
frank26080115 | 0:bf7b9fba3924 | 24 | #include "cdc.h" |
frank26080115 | 0:bf7b9fba3924 | 25 | #include "usbcfg.h" |
frank26080115 | 0:bf7b9fba3924 | 26 | #include "usbdesc.h" |
frank26080115 | 0:bf7b9fba3924 | 27 | |
frank26080115 | 0:bf7b9fba3924 | 28 | |
frank26080115 | 0:bf7b9fba3924 | 29 | /* USB Standard Device Descriptor */ |
frank26080115 | 0:bf7b9fba3924 | 30 | const uint8_t USB_DeviceDescriptor[] = { |
frank26080115 | 0:bf7b9fba3924 | 31 | USB_DEVICE_DESC_SIZE, /* bLength */ |
frank26080115 | 0:bf7b9fba3924 | 32 | USB_DEVICE_DESCRIPTOR_TYPE, /* bDescriptorType */ |
frank26080115 | 0:bf7b9fba3924 | 33 | WBVAL(0x0200), /* 2.0 */ /* bcdUSB */ |
frank26080115 | 0:bf7b9fba3924 | 34 | USB_DEVICE_CLASS_COMMUNICATIONS, /* bDeviceClass CDC*/ |
frank26080115 | 0:bf7b9fba3924 | 35 | 0x00, /* bDeviceSubClass */ |
frank26080115 | 0:bf7b9fba3924 | 36 | 0x00, /* bDeviceProtocol */ |
frank26080115 | 0:bf7b9fba3924 | 37 | USB_MAX_PACKET0, /* bMaxPacketSize0 */ |
frank26080115 | 0:bf7b9fba3924 | 38 | WBVAL(0x1FC9), /* idVendor */ |
frank26080115 | 0:bf7b9fba3924 | 39 | WBVAL(0x2002), /* idProduct */ |
frank26080115 | 0:bf7b9fba3924 | 40 | WBVAL(0x0100), /* 1.00 */ /* bcdDevice */ |
frank26080115 | 0:bf7b9fba3924 | 41 | 0x01, /* iManufacturer */ |
frank26080115 | 0:bf7b9fba3924 | 42 | 0x02, /* iProduct */ |
frank26080115 | 0:bf7b9fba3924 | 43 | 0x03, /* iSerialNumber */ |
frank26080115 | 0:bf7b9fba3924 | 44 | 0x01 /* bNumConfigurations: one possible configuration*/ |
frank26080115 | 0:bf7b9fba3924 | 45 | }; |
frank26080115 | 0:bf7b9fba3924 | 46 | |
frank26080115 | 0:bf7b9fba3924 | 47 | /* USB Configuration Descriptor */ |
frank26080115 | 0:bf7b9fba3924 | 48 | /* All Descriptors (Configuration, Interface, Endpoint, Class, Vendor */ |
frank26080115 | 0:bf7b9fba3924 | 49 | const uint8_t USB_ConfigDescriptor[] = { |
frank26080115 | 0:bf7b9fba3924 | 50 | /* Configuration 1 */ |
frank26080115 | 0:bf7b9fba3924 | 51 | USB_CONFIGUARTION_DESC_SIZE, /* bLength */ |
frank26080115 | 0:bf7b9fba3924 | 52 | USB_CONFIGURATION_DESCRIPTOR_TYPE, /* bDescriptorType */ |
frank26080115 | 0:bf7b9fba3924 | 53 | WBVAL( /* wTotalLength */ |
frank26080115 | 0:bf7b9fba3924 | 54 | 1*USB_CONFIGUARTION_DESC_SIZE + |
frank26080115 | 0:bf7b9fba3924 | 55 | 1*USB_INTERFACE_DESC_SIZE + /* communication interface */ |
frank26080115 | 0:bf7b9fba3924 | 56 | 0x0013 + /* CDC functions */ |
frank26080115 | 0:bf7b9fba3924 | 57 | 1*USB_ENDPOINT_DESC_SIZE + /* interrupt endpoint */ |
frank26080115 | 0:bf7b9fba3924 | 58 | 1*USB_INTERFACE_DESC_SIZE + /* data interface */ |
frank26080115 | 0:bf7b9fba3924 | 59 | 2*USB_ENDPOINT_DESC_SIZE /* bulk endpoints */ |
frank26080115 | 0:bf7b9fba3924 | 60 | ), |
frank26080115 | 0:bf7b9fba3924 | 61 | 0x02, /* bNumInterfaces */ |
frank26080115 | 0:bf7b9fba3924 | 62 | 0x01, /* bConfigurationValue: 0x01 is used to select this configuration */ |
frank26080115 | 0:bf7b9fba3924 | 63 | 0x00, /* iConfiguration: no string to describe this configuration */ |
frank26080115 | 0:bf7b9fba3924 | 64 | USB_CONFIG_BUS_POWERED /*|*/ /* bmAttributes */ |
frank26080115 | 0:bf7b9fba3924 | 65 | /*USB_CONFIG_REMOTE_WAKEUP*/, |
frank26080115 | 0:bf7b9fba3924 | 66 | USB_CONFIG_POWER_MA(100), /* bMaxPower, device power consumption is 100 mA */ |
frank26080115 | 0:bf7b9fba3924 | 67 | /* Interface 0, Alternate Setting 0, Communication class interface descriptor */ |
frank26080115 | 0:bf7b9fba3924 | 68 | USB_INTERFACE_DESC_SIZE, /* bLength */ |
frank26080115 | 0:bf7b9fba3924 | 69 | USB_INTERFACE_DESCRIPTOR_TYPE, /* bDescriptorType */ |
frank26080115 | 0:bf7b9fba3924 | 70 | USB_CDC_CIF_NUM, /* bInterfaceNumber: Number of Interface */ |
frank26080115 | 0:bf7b9fba3924 | 71 | 0x00, /* bAlternateSetting: Alternate setting */ |
frank26080115 | 0:bf7b9fba3924 | 72 | 0x01, /* bNumEndpoints: One endpoint used */ |
frank26080115 | 0:bf7b9fba3924 | 73 | CDC_COMMUNICATION_INTERFACE_CLASS, /* bInterfaceClass: Communication Interface Class */ |
frank26080115 | 0:bf7b9fba3924 | 74 | CDC_ABSTRACT_CONTROL_MODEL, /* bInterfaceSubClass: Abstract Control Model */ |
frank26080115 | 0:bf7b9fba3924 | 75 | 0x00, /* bInterfaceProtocol: no protocol used */ |
frank26080115 | 0:bf7b9fba3924 | 76 | 0x5E, /* iInterface: */ |
frank26080115 | 0:bf7b9fba3924 | 77 | /*Header Functional Descriptor*/ |
frank26080115 | 0:bf7b9fba3924 | 78 | 0x05, /* bLength: Endpoint Descriptor size */ |
frank26080115 | 0:bf7b9fba3924 | 79 | CDC_CS_INTERFACE, /* bDescriptorType: CS_INTERFACE */ |
frank26080115 | 0:bf7b9fba3924 | 80 | CDC_HEADER, /* bDescriptorSubtype: Header Func Desc */ |
frank26080115 | 0:bf7b9fba3924 | 81 | WBVAL(CDC_V1_10), /* 1.10 */ /* bcdCDC */ |
frank26080115 | 0:bf7b9fba3924 | 82 | /*Call Management Functional Descriptor*/ |
frank26080115 | 0:bf7b9fba3924 | 83 | 0x05, /* bFunctionLength */ |
frank26080115 | 0:bf7b9fba3924 | 84 | CDC_CS_INTERFACE, /* bDescriptorType: CS_INTERFACE */ |
frank26080115 | 0:bf7b9fba3924 | 85 | CDC_CALL_MANAGEMENT, /* bDescriptorSubtype: Call Management Func Desc */ |
frank26080115 | 0:bf7b9fba3924 | 86 | 0x01, /* bmCapabilities: device handles call management */ |
frank26080115 | 0:bf7b9fba3924 | 87 | 0x01, /* bDataInterface: CDC data IF ID */ |
frank26080115 | 0:bf7b9fba3924 | 88 | /*Abstract Control Management Functional Descriptor*/ |
frank26080115 | 0:bf7b9fba3924 | 89 | 0x04, /* bFunctionLength */ |
frank26080115 | 0:bf7b9fba3924 | 90 | CDC_CS_INTERFACE, /* bDescriptorType: CS_INTERFACE */ |
frank26080115 | 0:bf7b9fba3924 | 91 | CDC_ABSTRACT_CONTROL_MANAGEMENT, /* bDescriptorSubtype: Abstract Control Management desc */ |
frank26080115 | 0:bf7b9fba3924 | 92 | 0x02, /* bmCapabilities: SET_LINE_CODING, GET_LINE_CODING, SET_CONTROL_LINE_STATE supported */ |
frank26080115 | 0:bf7b9fba3924 | 93 | /*Union Functional Descriptor*/ |
frank26080115 | 0:bf7b9fba3924 | 94 | 0x05, /* bFunctionLength */ |
frank26080115 | 0:bf7b9fba3924 | 95 | CDC_CS_INTERFACE, /* bDescriptorType: CS_INTERFACE */ |
frank26080115 | 0:bf7b9fba3924 | 96 | CDC_UNION, /* bDescriptorSubtype: Union func desc */ |
frank26080115 | 0:bf7b9fba3924 | 97 | USB_CDC_CIF_NUM, /* bMasterInterface: Communication class interface is master */ |
frank26080115 | 0:bf7b9fba3924 | 98 | USB_CDC_DIF_NUM, /* bSlaveInterface0: Data class interface is slave 0 */ |
frank26080115 | 0:bf7b9fba3924 | 99 | /*Endpoint 1 Descriptor*/ /* event notification (optional) */ |
frank26080115 | 0:bf7b9fba3924 | 100 | USB_ENDPOINT_DESC_SIZE, /* bLength */ |
frank26080115 | 0:bf7b9fba3924 | 101 | USB_ENDPOINT_DESCRIPTOR_TYPE, /* bDescriptorType */ |
frank26080115 | 0:bf7b9fba3924 | 102 | USB_ENDPOINT_IN(1), /* bEndpointAddress */ |
frank26080115 | 0:bf7b9fba3924 | 103 | USB_ENDPOINT_TYPE_INTERRUPT, /* bmAttributes */ |
frank26080115 | 0:bf7b9fba3924 | 104 | WBVAL(0x0010), /* wMaxPacketSize */ |
frank26080115 | 0:bf7b9fba3924 | 105 | 0x02, /* 2ms */ /* bInterval */ |
frank26080115 | 0:bf7b9fba3924 | 106 | /* Interface 1, Alternate Setting 0, Data class interface descriptor*/ |
frank26080115 | 0:bf7b9fba3924 | 107 | USB_INTERFACE_DESC_SIZE, /* bLength */ |
frank26080115 | 0:bf7b9fba3924 | 108 | USB_INTERFACE_DESCRIPTOR_TYPE, /* bDescriptorType */ |
frank26080115 | 0:bf7b9fba3924 | 109 | USB_CDC_DIF_NUM, /* bInterfaceNumber: Number of Interface */ |
frank26080115 | 0:bf7b9fba3924 | 110 | 0x00, /* bAlternateSetting: no alternate setting */ |
frank26080115 | 0:bf7b9fba3924 | 111 | 0x02, /* bNumEndpoints: two endpoints used */ |
frank26080115 | 0:bf7b9fba3924 | 112 | CDC_DATA_INTERFACE_CLASS, /* bInterfaceClass: Data Interface Class */ |
frank26080115 | 0:bf7b9fba3924 | 113 | 0x00, /* bInterfaceSubClass: no subclass available */ |
frank26080115 | 0:bf7b9fba3924 | 114 | 0x00, /* bInterfaceProtocol: no protocol used */ |
frank26080115 | 0:bf7b9fba3924 | 115 | 0x5E, /* iInterface: */ |
frank26080115 | 0:bf7b9fba3924 | 116 | /* Endpoint, EP2 Bulk Out */ |
frank26080115 | 0:bf7b9fba3924 | 117 | USB_ENDPOINT_DESC_SIZE, /* bLength */ |
frank26080115 | 0:bf7b9fba3924 | 118 | USB_ENDPOINT_DESCRIPTOR_TYPE, /* bDescriptorType */ |
frank26080115 | 0:bf7b9fba3924 | 119 | USB_ENDPOINT_OUT(2), /* bEndpointAddress */ |
frank26080115 | 0:bf7b9fba3924 | 120 | USB_ENDPOINT_TYPE_BULK, /* bmAttributes */ |
frank26080115 | 0:bf7b9fba3924 | 121 | WBVAL(USB_CDC_BUFSIZE), /* wMaxPacketSize */ |
frank26080115 | 0:bf7b9fba3924 | 122 | 0x00, /* bInterval: ignore for Bulk transfer */ |
frank26080115 | 0:bf7b9fba3924 | 123 | /* Endpoint, EP2 Bulk In */ |
frank26080115 | 0:bf7b9fba3924 | 124 | USB_ENDPOINT_DESC_SIZE, /* bLength */ |
frank26080115 | 0:bf7b9fba3924 | 125 | USB_ENDPOINT_DESCRIPTOR_TYPE, /* bDescriptorType */ |
frank26080115 | 0:bf7b9fba3924 | 126 | USB_ENDPOINT_IN(2), /* bEndpointAddress */ |
frank26080115 | 0:bf7b9fba3924 | 127 | USB_ENDPOINT_TYPE_BULK, /* bmAttributes */ |
frank26080115 | 0:bf7b9fba3924 | 128 | WBVAL(USB_CDC_BUFSIZE), /* wMaxPacketSize */ |
frank26080115 | 0:bf7b9fba3924 | 129 | 0x00, /* bInterval: ignore for Bulk transfer */ |
frank26080115 | 0:bf7b9fba3924 | 130 | /* Terminator */ |
frank26080115 | 0:bf7b9fba3924 | 131 | 0 /* bLength */ |
frank26080115 | 0:bf7b9fba3924 | 132 | }; |
frank26080115 | 0:bf7b9fba3924 | 133 | |
frank26080115 | 0:bf7b9fba3924 | 134 | |
frank26080115 | 0:bf7b9fba3924 | 135 | |
frank26080115 | 0:bf7b9fba3924 | 136 | |
frank26080115 | 0:bf7b9fba3924 | 137 | /* USB String Descriptor (optional) */ |
frank26080115 | 0:bf7b9fba3924 | 138 | const uint8_t USB_StringDescriptor[] = { |
frank26080115 | 0:bf7b9fba3924 | 139 | /* Index 0x00: LANGID Codes */ |
frank26080115 | 0:bf7b9fba3924 | 140 | 0x04, /* bLength */ |
frank26080115 | 0:bf7b9fba3924 | 141 | USB_STRING_DESCRIPTOR_TYPE, /* bDescriptorType */ |
frank26080115 | 0:bf7b9fba3924 | 142 | WBVAL(0x0409), /* US English */ /* wLANGID */ |
frank26080115 | 0:bf7b9fba3924 | 143 | /* Index 0x01: Manufacturer */ |
frank26080115 | 0:bf7b9fba3924 | 144 | (13*2 + 2), /* bLength (13 Char + Type + lenght) */ |
frank26080115 | 0:bf7b9fba3924 | 145 | USB_STRING_DESCRIPTOR_TYPE, /* bDescriptorType */ |
frank26080115 | 0:bf7b9fba3924 | 146 | 'N',0, |
frank26080115 | 0:bf7b9fba3924 | 147 | 'X',0, |
frank26080115 | 0:bf7b9fba3924 | 148 | 'P',0, |
frank26080115 | 0:bf7b9fba3924 | 149 | ' ',0, |
frank26080115 | 0:bf7b9fba3924 | 150 | 'S',0, |
frank26080115 | 0:bf7b9fba3924 | 151 | 'E',0, |
frank26080115 | 0:bf7b9fba3924 | 152 | 'M',0, |
frank26080115 | 0:bf7b9fba3924 | 153 | 'I',0, |
frank26080115 | 0:bf7b9fba3924 | 154 | 'C',0, |
frank26080115 | 0:bf7b9fba3924 | 155 | 'O',0, |
frank26080115 | 0:bf7b9fba3924 | 156 | 'N',0, |
frank26080115 | 0:bf7b9fba3924 | 157 | 'D',0, |
frank26080115 | 0:bf7b9fba3924 | 158 | ' ',0, |
frank26080115 | 0:bf7b9fba3924 | 159 | /* Index 0x02: Product */ |
frank26080115 | 0:bf7b9fba3924 | 160 | (17*2 + 2), /* bLength ( 17 Char + Type + lenght) */ |
frank26080115 | 0:bf7b9fba3924 | 161 | USB_STRING_DESCRIPTOR_TYPE, /* bDescriptorType */ |
frank26080115 | 0:bf7b9fba3924 | 162 | 'N',0, |
frank26080115 | 0:bf7b9fba3924 | 163 | 'X',0, |
frank26080115 | 0:bf7b9fba3924 | 164 | 'P',0, |
frank26080115 | 0:bf7b9fba3924 | 165 | ' ',0, |
frank26080115 | 0:bf7b9fba3924 | 166 | 'L',0, |
frank26080115 | 0:bf7b9fba3924 | 167 | 'P',0, |
frank26080115 | 0:bf7b9fba3924 | 168 | 'C',0, |
frank26080115 | 0:bf7b9fba3924 | 169 | '1',0, |
frank26080115 | 0:bf7b9fba3924 | 170 | '7',0, |
frank26080115 | 0:bf7b9fba3924 | 171 | 'x',0, |
frank26080115 | 0:bf7b9fba3924 | 172 | 'x',0, |
frank26080115 | 0:bf7b9fba3924 | 173 | ' ',0, |
frank26080115 | 0:bf7b9fba3924 | 174 | 'V',0, |
frank26080115 | 0:bf7b9fba3924 | 175 | 'C',0, |
frank26080115 | 0:bf7b9fba3924 | 176 | 'O',0, |
frank26080115 | 0:bf7b9fba3924 | 177 | 'M',0, |
frank26080115 | 0:bf7b9fba3924 | 178 | ' ',0, |
frank26080115 | 0:bf7b9fba3924 | 179 | /* Index 0x03: Serial Number */ |
frank26080115 | 0:bf7b9fba3924 | 180 | (12*2 + 2), /* bLength (12 Char + Type + lenght) */ |
frank26080115 | 0:bf7b9fba3924 | 181 | USB_STRING_DESCRIPTOR_TYPE, /* bDescriptorType */ |
frank26080115 | 0:bf7b9fba3924 | 182 | 'D',0, |
frank26080115 | 0:bf7b9fba3924 | 183 | 'E',0, |
frank26080115 | 0:bf7b9fba3924 | 184 | 'M',0, |
frank26080115 | 0:bf7b9fba3924 | 185 | 'O',0, |
frank26080115 | 0:bf7b9fba3924 | 186 | '0',0, |
frank26080115 | 0:bf7b9fba3924 | 187 | '0',0, |
frank26080115 | 0:bf7b9fba3924 | 188 | '0',0, |
frank26080115 | 0:bf7b9fba3924 | 189 | '0',0, |
frank26080115 | 0:bf7b9fba3924 | 190 | '0',0, |
frank26080115 | 0:bf7b9fba3924 | 191 | '0',0, |
frank26080115 | 0:bf7b9fba3924 | 192 | '0',0, |
frank26080115 | 0:bf7b9fba3924 | 193 | '0',0, |
frank26080115 | 0:bf7b9fba3924 | 194 | /* Index 0x04: Interface 0, Alternate Setting 0 */ |
frank26080115 | 0:bf7b9fba3924 | 195 | ( 4*2 + 2), /* bLength (4 Char + Type + lenght) */ |
frank26080115 | 0:bf7b9fba3924 | 196 | USB_STRING_DESCRIPTOR_TYPE, /* bDescriptorType */ |
frank26080115 | 0:bf7b9fba3924 | 197 | 'V',0, |
frank26080115 | 0:bf7b9fba3924 | 198 | 'C',0, |
frank26080115 | 0:bf7b9fba3924 | 199 | 'O',0, |
frank26080115 | 0:bf7b9fba3924 | 200 | 'M',0, |
frank26080115 | 0:bf7b9fba3924 | 201 | }; |