00001
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049 #ifndef _USB_DESCRIPTORS_H_
00050 #define _USB_DESCRIPTORS_H_
00051
00052
00053
00054
00055 #include "conf_usb.h"
00056
00057 #if USB_DEVICE_FEATURE == DISABLED
00058 #error usb_descriptors.h is #included although USB_DEVICE_FEATURE is disabled
00059 #endif
00060
00061
00062 #include "usb_standard_request.h"
00063 #include "usb_task.h"
00064
00065
00066
00067
00068 #define Usb_unicode(c) (Usb_format_mcu_to_usb_data(16, (U16)(c)))
00069 #define Usb_get_dev_desc_pointer() (&(usb_dev_desc.bLength))
00070 #define Usb_get_dev_desc_length() (sizeof(usb_dev_desc))
00071 #define Usb_get_conf_desc_pointer() (&(usb_conf_desc_fs.cfg.bLength))
00072 #define Usb_get_conf_desc_length() (sizeof(usb_conf_desc_fs))
00073 #define Usb_get_conf_desc_hs_pointer() (&(usb_conf_desc_hs.cfg.bLength))
00074 #define Usb_get_conf_desc_hs_length() (sizeof(usb_conf_desc_hs))
00075 #define Usb_get_conf_desc_fs_pointer() (&(usb_conf_desc_fs.cfg.bLength))
00076 #define Usb_get_conf_desc_fs_length() (sizeof(usb_conf_desc_fs))
00077 #define Usb_get_qualifier_desc_pointer() (&(usb_qualifier_desc.bLength))
00078 #define Usb_get_qualifier_desc_length() (sizeof(usb_qualifier_desc))
00079
00080
00081
00082
00083
00084 #define USB_SPECIFICATION 0x0200
00085 #define DEVICE_CLASS CDC_COMM_DEVICE_CLASS
00086 #define DEVICE_SUB_CLASS 0
00087 #define DEVICE_PROTOCOL 0
00088 #define EP_CONTROL_LENGTH 64
00089 #define VENDOR_ID ATMEL_VID
00090 #define PRODUCT_ID CDC_EXAMPLE_PID
00091 #define RELEASE_NUMBER 0x1000
00092 #define MAN_INDEX 0x00
00093 #define PROD_INDEX 0x00
00094 #define SN_INDEX 0x00
00095 #define NB_CONFIGURATION 1
00096
00097
00098 #define NB_INTERFACE 2
00099 #define CONF_NB 1
00100 #define CONF_INDEX 0
00101 #define CONF_ATTRIBUTES USB_CONFIG_SELFPOWERED
00102 #define MAX_POWER 50 // 100 mA
00103
00104
00105 #define INTERFACE_NB_0 0
00106 #define ALTERNATE_0 0
00107 #define NB_ENDPOINT_0 1
00108 #define INTERFACE_CLASS_0 CDC_COMM_CLASS
00109 #define INTERFACE_SUB_CLASS_0 0x02
00110 #define INTERFACE_PROTOCOL_0 0x01
00111 #define INTERFACE_INDEX_0 0
00112
00113
00114 #define INTERFACE_NB_1 1
00115 #define ALTERNATE_1 0
00116 #define NB_ENDPOINT_1 2
00117 #define INTERFACE_CLASS_1 CDC_DATA_CLASS
00118 #define INTERFACE_SUB_CLASS_1 0
00119 #define INTERFACE_PROTOCOL_1 0
00120 #define INTERFACE_INDEX_1 0
00121
00122
00123
00124 #define ENDPOINT_NB_3 ( INT_EP | MSK_EP_DIR )
00125 #define EP_ATTRIBUTES_3 TYPE_INTERRUPT
00126 #define EP_IN_LENGTH_3 0x20
00127 #define EP_SIZE_3 EP_IN_LENGTH_3
00128 #define EP_INTERVAL_3 0xFF
00129
00130
00131
00132 #define ENDPOINT_NB_1 ( TX_EP | MSK_EP_DIR )
00133 #define EP_ATTRIBUTES_1 TYPE_BULK
00134 #define EP_IN_LENGTH_1_FS 0x40
00135 #define EP_IN_LENGTH_1_HS 512
00136 #define EP_SIZE_1_FS EP_IN_LENGTH_1_FS
00137 #define EP_SIZE_1_HS EP_IN_LENGTH_1_HS
00138 #define EP_INTERVAL_1 0x00
00139
00140
00141
00142 #define ENDPOINT_NB_2 RX_EP
00143 #define EP_ATTRIBUTES_2 TYPE_BULK
00144 #define EP_IN_LENGTH_2_FS 0x40
00145 #define EP_IN_LENGTH_2_HS 512
00146 #define EP_SIZE_2_FS EP_IN_LENGTH_2_FS
00147 #define EP_SIZE_2_HS EP_IN_LENGTH_2_HS
00148 #define EP_INTERVAL_2 0x00
00149
00150
00151 #define DEVICE_STATUS SELF_POWERED
00152 #define INTERFACE_STATUS 0x00 // TBD
00153
00154 #define LANG_ID 0x00
00155
00156 #define USB_MN_LENGTH 5
00157 #define USB_MANUFACTURER_NAME \
00158 {\
00159 Usb_unicode('A'),\
00160 Usb_unicode('T'),\
00161 Usb_unicode('M'),\
00162 Usb_unicode('E'),\
00163 Usb_unicode('L') \
00164 }
00165
00166 #define USB_PN_LENGTH 13
00167 #define USB_PRODUCT_NAME \
00168 {\
00169 Usb_unicode('A'),\
00170 Usb_unicode('V'),\
00171 Usb_unicode('R'),\
00172 Usb_unicode('3'),\
00173 Usb_unicode('2'),\
00174 Usb_unicode(' '),\
00175 Usb_unicode('U'),\
00176 Usb_unicode('C'),\
00177 Usb_unicode('3'),\
00178 Usb_unicode(' '),\
00179 Usb_unicode('C'),\
00180 Usb_unicode('D'),\
00181 Usb_unicode('C') \
00182 }
00183
00184 #define USB_SN_LENGTH 13
00185 #define USB_SERIAL_NUMBER \
00186 {\
00187 Usb_unicode('1'),\
00188 Usb_unicode('.'),\
00189 Usb_unicode('0'),\
00190 Usb_unicode('.'),\
00191 Usb_unicode('0'),\
00192 Usb_unicode('.'),\
00193 Usb_unicode('0'),\
00194 Usb_unicode('.'),\
00195 Usb_unicode('0'),\
00196 Usb_unicode('.'),\
00197 Usb_unicode('0'),\
00198 Usb_unicode('.'),\
00199 Usb_unicode('A') \
00200 }
00201
00202 #define LANGUAGE_ID 0x0409
00203
00204
00206 typedef
00207 #if (defined __ICCAVR32__)
00208 #pragma pack(1)
00209 #endif
00210 struct
00211 #if (defined __GNUC__)
00212 __attribute__((__packed__))
00213 #endif
00214 {
00215 U8 bmRequestType;
00216 U8 bRequest;
00217 U16 wValue;
00218 U16 wIndex;
00219 U16 wLength;
00220 }
00221 #if (defined __ICCAVR32__)
00222 #pragma pack()
00223 #endif
00224 S_UsbRequest;
00225
00226
00228 typedef
00229 #if (defined __ICCAVR32__)
00230 #pragma pack(1)
00231 #endif
00232 struct
00233 #if (defined __GNUC__)
00234 __attribute__((__packed__))
00235 #endif
00236 {
00237 U8 bLength;
00238 U8 bDescriptorType;
00239 U16 bscUSB;
00240 U8 bDeviceClass;
00241 U8 bDeviceSubClass;
00242 U8 bDeviceProtocol;
00243 U8 bMaxPacketSize0;
00244 U16 idVendor;
00245 U16 idProduct;
00246 U16 bcdDevice;
00247 U8 iManufacturer;
00248 U8 iProduct;
00249 U8 iSerialNumber;
00250 U8 bNumConfigurations;
00251 }
00252 #if (defined __ICCAVR32__)
00253 #pragma pack()
00254 #endif
00255 S_usb_device_descriptor;
00256
00257
00259 typedef
00260 #if (defined __ICCAVR32__)
00261 #pragma pack(1)
00262 #endif
00263 struct
00264 #if (defined __GNUC__)
00265 __attribute__((__packed__))
00266 #endif
00267 {
00268 U8 bLength;
00269 U8 bDescriptorType;
00270 U16 wTotalLength;
00271 U8 bNumInterfaces;
00272 U8 bConfigurationValue;
00273 U8 iConfiguration;
00274 U8 bmAttributes;
00275 U8 MaxPower;
00276 }
00277 #if (defined __ICCAVR32__)
00278 #pragma pack()
00279 #endif
00280 S_usb_configuration_descriptor;
00281
00282
00284 typedef
00285 #if (defined __ICCAVR32__)
00286 #pragma pack(1)
00287 #endif
00288 struct
00289 #if (defined __GNUC__)
00290 __attribute__((__packed__))
00291 #endif
00292 {
00293 U8 bLength;
00294 U8 bDescriptorType;
00295 U8 bInterfaceNumber;
00296 U8 bAlternateSetting;
00297 U8 bNumEndpoints;
00298 U8 bInterfaceClass;
00299 U8 bInterfaceSubClass;
00300 U8 bInterfaceProtocol;
00301 U8 iInterface;
00302 }
00303 #if (defined __ICCAVR32__)
00304 #pragma pack()
00305 #endif
00306 S_usb_interface_descriptor;
00307
00308
00310 typedef
00311 #if (defined __ICCAVR32__)
00312 #pragma pack(1)
00313 #endif
00314 struct
00315 #if (defined __GNUC__)
00316 __attribute__((__packed__))
00317 #endif
00318 {
00319 U8 bLength;
00320 U8 bDescriptorType;
00321 U8 bEndpointAddress;
00322 U8 bmAttributes;
00323 U16 wMaxPacketSize;
00324 U8 bInterval;
00325 }
00326 #if (defined __ICCAVR32__)
00327 #pragma pack()
00328 #endif
00329 S_usb_endpoint_descriptor;
00330
00331
00333 typedef
00334 #if (defined __ICCAVR32__)
00335 #pragma pack(1)
00336 #endif
00337 struct
00338 #if (defined __GNUC__)
00339 __attribute__((__packed__))
00340 #endif
00341 {
00342 U8 bLength;
00343 U8 bDescriptorType;
00344 U16 bscUSB;
00345 U8 bDeviceClass;
00346 U8 bDeviceSubClass;
00347 U8 bDeviceProtocol;
00348 U8 bMaxPacketSize0;
00349 U8 bNumConfigurations;
00350 U8 bReserved;
00351 }
00352 #if (defined __ICCAVR32__)
00353 #pragma pack()
00354 #endif
00355 S_usb_device_qualifier_descriptor;
00356
00357
00359 typedef
00360 #if (defined __ICCAVR32__)
00361 #pragma pack(1)
00362 #endif
00363 struct
00364 #if (defined __GNUC__)
00365 __attribute__((__packed__))
00366 #endif
00367 {
00368 U8 bLength;
00369 U8 bDescriptorType;
00370 U16 wlangid;
00371 }
00372 #if (defined __ICCAVR32__)
00373 #pragma pack()
00374 #endif
00375 S_usb_language_id;
00376
00377
00378
00379
00381 typedef
00382 #if (defined __ICCAVR32__)
00383 #pragma pack(1)
00384 #endif
00385 struct
00386 #if (defined __GNUC__)
00387 __attribute__((__packed__))
00388 #endif
00389 {
00390 U8 bLength;
00391 U8 bDescriptorType;
00392 U16 wstring[USB_MN_LENGTH];
00393 }
00394 #if (defined __ICCAVR32__)
00395 #pragma pack()
00396 #endif
00397 S_usb_manufacturer_string_descriptor;
00398
00399
00400
00401
00403 typedef
00404 #if (defined __ICCAVR32__)
00405 #pragma pack(1)
00406 #endif
00407 struct
00408 #if (defined __GNUC__)
00409 __attribute__((__packed__))
00410 #endif
00411 {
00412 U8 bLength;
00413 U8 bDescriptorType;
00414 U16 wstring[USB_PN_LENGTH];
00415 }
00416 #if (defined __ICCAVR32__)
00417 #pragma pack()
00418 #endif
00419 S_usb_product_string_descriptor;
00420
00421
00422
00423
00425 typedef
00426 #if (defined __ICCAVR32__)
00427 #pragma pack(1)
00428 #endif
00429 struct
00430 #if (defined __GNUC__)
00431 __attribute__((__packed__))
00432 #endif
00433 {
00434 U8 bLength;
00435 U8 bDescriptorType;
00436 U16 wstring[USB_SN_LENGTH];
00437 }
00438 #if (defined __ICCAVR32__)
00439 #pragma pack()
00440 #endif
00441 S_usb_serial_number;
00442
00443
00444
00445
00446 typedef
00447 #if (defined __ICCAVR32__)
00448 #pragma pack(1)
00449 #endif
00450 struct
00451 #if (defined __GNUC__)
00452 __attribute__((__packed__))
00453 #endif
00454 {
00455 S_usb_configuration_descriptor cfg;
00456 S_usb_interface_descriptor ifc0;
00457 U8 CS_INTERFACE[19];
00458 S_usb_endpoint_descriptor ep3;
00459 S_usb_interface_descriptor ifc1;
00460 S_usb_endpoint_descriptor ep1;
00461 S_usb_endpoint_descriptor ep2;
00462 }
00463 #if (defined __ICCAVR32__)
00464 #pragma pack()
00465 #endif
00466 S_usb_user_configuration_descriptor;
00467
00468
00469 #endif // _USB_DESCRIPTORS_H_