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 #include "conf_isp.h"
00065
00066
00067
00068
00069 #define Usb_unicode(c) (Usb_format_mcu_to_usb_data(16, (U16)(c)))
00070 #define Usb_get_dev_desc_pointer() (&(usb_dev_desc.bLength))
00071 #define Usb_get_dev_desc_length() (sizeof(usb_dev_desc))
00072 #define Usb_get_conf_desc_pointer() (&(usb_conf_desc.cfg.bLength))
00073 #define Usb_get_conf_desc_length() (sizeof(usb_conf_desc))
00074
00075
00076
00077
00078
00079 #define USB_SPECIFICATION 0x0200
00080 #define DEVICE_CLASS 0
00081 #define DEVICE_SUB_CLASS 0
00082 #define DEVICE_PROTOCOL 0
00083 #define EP_CONTROL_LENGTH 64
00084 #define VENDOR_ID ATMEL_VID
00085 #define PRODUCT_ID ISP_PID
00086 #define RELEASE_NUMBER 0x1000
00087 #define MAN_INDEX 0x01
00088 #define PROD_INDEX 0x02
00089 #define SN_INDEX 0x00
00090 #define NB_CONFIGURATION 1
00091
00092
00093 #define NB_INTERFACE 1
00094 #define CONF_NB 1
00095 #define CONF_INDEX 0
00096 #define CONF_ATTRIBUTES USB_CONFIG_SELFPOWERED
00097 #define MAX_POWER 50 // 100 mA
00098
00099
00100 #define INTERFACE_NB 0
00101 #define ALTERNATE 0
00102 #define NB_ENDPOINT 0
00103 #define INTERFACE_CLASS APPLICATION_CLASS
00104 #define INTERFACE_SUB_CLASS DFU_SUBCLASS
00105 #define INTERFACE_PROTOCOL DFU_MODE_PROTOCOL
00106 #define INTERFACE_INDEX 0
00107
00108
00109 #define DFU_WILL_DETACH TRUE
00110 #define DFU_MANIFESTATION_TOLERANT TRUE
00111 #define DFU_CAN_UPLOAD TRUE
00112 #define DFU_CAN_DNLOAD TRUE
00113 #define DFU_DETACH_TIMEOUT 0
00114 #define DFU_TRANSFER_SIZE 0xFFFF
00115 #define DFU_VERSION 0x0101
00116
00117 #define DEVICE_STATUS SELF_POWERED
00118 #define INTERFACE_STATUS 0x00 // TBD
00119
00120 #define LANG_ID 0x00
00121
00122 #define USB_MN_LENGTH 5
00123 #define USB_MANUFACTURER_NAME \
00124 {\
00125 Usb_unicode('A'),\
00126 Usb_unicode('T'),\
00127 Usb_unicode('M'),\
00128 Usb_unicode('E'),\
00129 Usb_unicode('L') \
00130 }
00131
00132 #if (defined __GNUC__) && ((defined __AVR32_UC3A0128__ )|| \
00133 (defined __AVR32_UC3A0256__) || \
00134 (defined __AVR32_UC3A0512__) || \
00135 (defined __AVR32_UC3A1128__) || \
00136 (defined __AVR32_UC3A1256__) || \
00137 (defined __AVR32_UC3A1512__))|| \
00138 (defined __ICCAVR32__) && ((defined __AT32UC3A0128__) || \
00139 (defined __AT32UC3A0256__) || \
00140 (defined __AT32UC3A0512__) || \
00141 (defined __AT32UC3A1128__) || \
00142 (defined __AT32UC3A1256__) || \
00143 (defined __AT32UC3A1512__))
00144 #define USB_PFN_LENGTH 8
00145 #define USB_PART_FAMILY_NAME Usb_unicode('A'),\
00146 Usb_unicode('T'),\
00147 Usb_unicode('3'),\
00148 Usb_unicode('2'),\
00149 Usb_unicode('U'),\
00150 Usb_unicode('C'),\
00151 Usb_unicode('3'),\
00152 Usb_unicode('A')
00153 #elif (defined __GNUC__) && ((defined __AVR32_UC3A364__) || \
00154 (defined __AVR32_UC3A364S__) || \
00155 (defined __AVR32_UC3A3128__) || \
00156 (defined __AVR32_UC3A3128S__) || \
00157 (defined __AVR32_UC3A3256__) || \
00158 (defined __AVR32_UC3A3256S__))|| \
00159 (defined __ICCAVR32__) && ((defined __AT32UC3A364__) || \
00160 (defined __AT32UC3A364S__) || \
00161 (defined __AT32UC3A3128__) || \
00162 (defined __AT32UC3A3128S__) || \
00163 (defined __AT32UC3A3256__) || \
00164 (defined __AT32UC3A3256S__))
00165 #define USB_PFN_LENGTH 9
00166 #define USB_PART_FAMILY_NAME Usb_unicode('A'),\
00167 Usb_unicode('T'),\
00168 Usb_unicode('3'),\
00169 Usb_unicode('2'),\
00170 Usb_unicode('U'),\
00171 Usb_unicode('C'),\
00172 Usb_unicode('3'),\
00173 Usb_unicode('A'),\
00174 Usb_unicode('3')
00175 #elif (defined __GNUC__) && ((defined __AVR32_UC3B064__ ) || \
00176 (defined __AVR32_UC3B0128__) || \
00177 (defined __AVR32_UC3B0256__) || \
00178 (defined __AVR32_UC3B164__ ) || \
00179 (defined __AVR32_UC3B1128__) || \
00180 (defined __AVR32_UC3B1256__))|| \
00181 (defined __ICCAVR32__) && ((defined __AT32UC3B064__ ) || \
00182 (defined __AT32UC3B0128__) || \
00183 (defined __AT32UC3B0256__) || \
00184 (defined __AT32UC3B164__ ) || \
00185 (defined __AT32UC3B1128__) || \
00186 (defined __AT32UC3B1256__))
00187 #define USB_PFN_LENGTH 8
00188 #define USB_PART_FAMILY_NAME Usb_unicode('A'),\
00189 Usb_unicode('T'),\
00190 Usb_unicode('3'),\
00191 Usb_unicode('2'),\
00192 Usb_unicode('U'),\
00193 Usb_unicode('C'),\
00194 Usb_unicode('3'),\
00195 Usb_unicode('B')
00196 #endif
00197
00198 #define USB_PN_LENGTH (USB_PFN_LENGTH + 10)
00199 #define USB_PRODUCT_NAME \
00200 {\
00201 USB_PART_FAMILY_NAME,\
00202 Usb_unicode(' '),\
00203 Usb_unicode('D'),\
00204 Usb_unicode('F'),\
00205 Usb_unicode('U'),\
00206 Usb_unicode(' '),\
00207 Usb_unicode('1'),\
00208 Usb_unicode('.'),\
00209 Usb_unicode('0'),\
00210 Usb_unicode('.'),\
00211 Usb_unicode('3')\
00212 }
00213
00214
00215 #define USB_SN_LENGTH 5
00216 #define USB_SERIAL_NUMBER \
00217 {\
00218 Usb_unicode('1'),\
00219 Usb_unicode('.'),\
00220 Usb_unicode(((((ISP_VERSION >> 4) & 0x0F) < 0xA) ? '0' : 'A' - 0xA) + ((ISP_VERSION >> 4) & 0x0F)),\
00221 Usb_unicode('.'),\
00222 Usb_unicode((((ISP_VERSION & 0x0F) < 0xA) ? '0' : 'A' - 0xA) + (ISP_VERSION & 0x0F)) \
00223 }
00224
00225 #define LANGUAGE_ID 0x0409
00226
00227
00229 typedef
00230 #if (defined __ICCAVR32__)
00231 #pragma pack(1)
00232 #endif
00233 struct
00234 #if (defined __GNUC__)
00235 __attribute__((__packed__))
00236 #endif
00237 {
00238 U8 bmRequestType;
00239 U8 bRequest;
00240 U16 wValue;
00241 U16 wIndex;
00242 U16 wLength;
00243 }
00244 #if (defined __ICCAVR32__)
00245 #pragma pack()
00246 #endif
00247 S_UsbRequest;
00248
00249
00251 typedef
00252 #if (defined __ICCAVR32__)
00253 #pragma pack(1)
00254 #endif
00255 struct
00256 #if (defined __GNUC__)
00257 __attribute__((__packed__))
00258 #endif
00259 {
00260 U8 bLength;
00261 U8 bDescriptorType;
00262 U16 bscUSB;
00263 U8 bDeviceClass;
00264 U8 bDeviceSubClass;
00265 U8 bDeviceProtocol;
00266 U8 bMaxPacketSize0;
00267 U16 idVendor;
00268 U16 idProduct;
00269 U16 bcdDevice;
00270 U8 iManufacturer;
00271 U8 iProduct;
00272 U8 iSerialNumber;
00273 U8 bNumConfigurations;
00274 }
00275 #if (defined __ICCAVR32__)
00276 #pragma pack()
00277 #endif
00278 S_usb_device_descriptor;
00279
00280
00282 typedef
00283 #if (defined __ICCAVR32__)
00284 #pragma pack(1)
00285 #endif
00286 struct
00287 #if (defined __GNUC__)
00288 __attribute__((__packed__))
00289 #endif
00290 {
00291 U8 bLength;
00292 U8 bDescriptorType;
00293 U16 wTotalLength;
00294 U8 bNumInterfaces;
00295 U8 bConfigurationValue;
00296 U8 iConfiguration;
00297 U8 bmAttributes;
00298 U8 MaxPower;
00299 }
00300 #if (defined __ICCAVR32__)
00301 #pragma pack()
00302 #endif
00303 S_usb_configuration_descriptor;
00304
00305
00307 typedef
00308 #if (defined __ICCAVR32__)
00309 #pragma pack(1)
00310 #endif
00311 struct
00312 #if (defined __GNUC__)
00313 __attribute__((__packed__))
00314 #endif
00315 {
00316 U8 bLength;
00317 U8 bDescriptorType;
00318 U8 bInterfaceNumber;
00319 U8 bAlternateSetting;
00320 U8 bNumEndpoints;
00321 U8 bInterfaceClass;
00322 U8 bInterfaceSubClass;
00323 U8 bInterfaceProtocol;
00324 U8 iInterface;
00325 }
00326 #if (defined __ICCAVR32__)
00327 #pragma pack()
00328 #endif
00329 S_usb_interface_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 U8 bEndpointAddress;
00345 U8 bmAttributes;
00346 U16 wMaxPacketSize;
00347 U8 bInterval;
00348 }
00349 #if (defined __ICCAVR32__)
00350 #pragma pack()
00351 #endif
00352 S_usb_endpoint_descriptor;
00353
00354
00356 typedef
00357 #if (defined __ICCAVR32__)
00358 #pragma pack(1)
00359 #endif
00360 struct
00361 #if (defined __GNUC__)
00362 __attribute__((__packed__))
00363 #endif
00364 {
00365 U8 bLength;
00366 U8 bDescriptorType;
00367 U16 bscUSB;
00368 U8 bDeviceClass;
00369 U8 bDeviceSubClass;
00370 U8 bDeviceProtocol;
00371 U8 bMaxPacketSize0;
00372 U8 bNumConfigurations;
00373 U8 bReserved;
00374 }
00375 #if (defined __ICCAVR32__)
00376 #pragma pack()
00377 #endif
00378 S_usb_device_qualifier_descriptor;
00379
00380
00382 typedef
00383 #if (defined __ICCAVR32__)
00384 #pragma pack(1)
00385 #endif
00386 struct
00387 #if (defined __GNUC__)
00388 __attribute__((__packed__))
00389 #endif
00390 {
00391 U8 bLength;
00392 U8 bDescriptorType;
00393 U16 wlangid;
00394 }
00395 #if (defined __ICCAVR32__)
00396 #pragma pack()
00397 #endif
00398 S_usb_language_id;
00399
00400
00401
00402
00404 typedef
00405 #if (defined __ICCAVR32__)
00406 #pragma pack(1)
00407 #endif
00408 struct
00409 #if (defined __GNUC__)
00410 __attribute__((__packed__))
00411 #endif
00412 {
00413 U8 bLength;
00414 U8 bDescriptorType;
00415 U16 wstring[USB_MN_LENGTH];
00416 }
00417 #if (defined __ICCAVR32__)
00418 #pragma pack()
00419 #endif
00420 S_usb_manufacturer_string_descriptor;
00421
00422
00423
00424
00426 typedef
00427 #if (defined __ICCAVR32__)
00428 #pragma pack(1)
00429 #endif
00430 struct
00431 #if (defined __GNUC__)
00432 __attribute__((__packed__))
00433 #endif
00434 {
00435 U8 bLength;
00436 U8 bDescriptorType;
00437 U16 wstring[USB_PN_LENGTH];
00438 }
00439 #if (defined __ICCAVR32__)
00440 #pragma pack()
00441 #endif
00442 S_usb_product_string_descriptor;
00443
00444
00445
00446
00448 typedef
00449 #if (defined __ICCAVR32__)
00450 #pragma pack(1)
00451 #endif
00452 struct
00453 #if (defined __GNUC__)
00454 __attribute__((__packed__))
00455 #endif
00456 {
00457 U8 bLength;
00458 U8 bDescriptorType;
00459 U16 wstring[USB_SN_LENGTH];
00460 }
00461 #if (defined __ICCAVR32__)
00462 #pragma pack()
00463 #endif
00464 S_usb_serial_number;
00465
00466
00467
00468
00470 typedef
00471 #if (defined __ICCAVR32__)
00472 #pragma pack(1)
00473 #endif
00474 struct
00475 #if (defined __GNUC__)
00476 __attribute__((__packed__))
00477 #endif
00478 {
00479 U8 bLength;
00480 U8 bDescriptorType;
00481 U8 bmAttributes;
00482 U16 wDetachTimeOut;
00483 U16 wTransferSize;
00484 U16 bcdDFUVersion;
00485 }
00486 #if (defined __ICCAVR32__)
00487 #pragma pack()
00488 #endif
00489 S_usb_dfu_functional_descriptor;
00490
00491
00492 typedef
00493 #if (defined __ICCAVR32__)
00494 #pragma pack(1)
00495 #endif
00496 struct
00497 #if (defined __GNUC__)
00498 __attribute__((__packed__))
00499 #endif
00500 {
00501 S_usb_configuration_descriptor cfg;
00502 S_usb_interface_descriptor ifc;
00503 S_usb_dfu_functional_descriptor dfu;
00504 }
00505 #if (defined __ICCAVR32__)
00506 #pragma pack()
00507 #endif
00508 S_usb_user_configuration_descriptor;
00509
00510
00511 #endif // _USB_DESCRIPTORS_H_