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 #include "conf_usb.h"
00055
00056 #if USB_DEVICE_FEATURE == DISABLED
00057 #error usb_descriptors.h is #included although USB_DEVICE_FEATURE is disabled
00058 #endif
00059
00060
00061 #include "usb_standard_request.h"
00062 #include "usb_task.h"
00063 #include "conf_isp.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.cfg.bLength))
00072 #define Usb_get_conf_desc_length() (sizeof(usb_conf_desc))
00073
00074
00075
00076
00077
00078 #define USB_SPECIFICATION 0x0200
00079 #define DEVICE_CLASS 0
00080 #define DEVICE_SUB_CLASS 0
00081 #define DEVICE_PROTOCOL 0
00082 #define EP_CONTROL_LENGTH 64
00083 #define VENDOR_ID ATMEL_VID
00084 #define PRODUCT_ID ISP_PID
00085 #define RELEASE_NUMBER 0x1000
00086 #define MAN_INDEX 0x01
00087 #define PROD_INDEX 0x02
00088 #define SN_INDEX 0x00
00089 #define NB_CONFIGURATION 1
00090
00091
00092 #define NB_INTERFACE 1
00093 #define CONF_NB 1
00094 #define CONF_INDEX 0
00095 #define CONF_ATTRIBUTES USB_CONFIG_SELFPOWERED
00096 #define MAX_POWER 50 // 100 mA
00097
00098
00099 #define INTERFACE_NB 0
00100 #define ALTERNATE 0
00101 #define NB_ENDPOINT 0
00102 #define INTERFACE_CLASS APPLICATION_CLASS
00103 #define INTERFACE_SUB_CLASS DFU_SUBCLASS
00104 #define INTERFACE_PROTOCOL DFU_MODE_PROTOCOL
00105 #define INTERFACE_INDEX 0
00106
00107
00108 #define DFU_WILL_DETACH TRUE
00109 #define DFU_MANIFESTATION_TOLERANT TRUE
00110 #define DFU_CAN_UPLOAD TRUE
00111 #define DFU_CAN_DNLOAD TRUE
00112 #define DFU_DETACH_TIMEOUT 0
00113 #define DFU_TRANSFER_SIZE 0xFFFF
00114 #define DFU_VERSION 0x0101
00115
00116 #define DEVICE_STATUS SELF_POWERED
00117 #define INTERFACE_STATUS 0x00 // TBD
00118
00119 #define LANG_ID 0x00
00120
00121 #define USB_MN_LENGTH 5
00122 #define USB_MANUFACTURER_NAME \
00123 {\
00124 Usb_unicode('A'),\
00125 Usb_unicode('T'),\
00126 Usb_unicode('M'),\
00127 Usb_unicode('E'),\
00128 Usb_unicode('L') \
00129 }
00130
00131 #if (UC3A0 || UC3A1)
00132 #define USB_PFN_LENGTH 8
00133 #define USB_PART_FAMILY_NAME Usb_unicode('A'),\
00134 Usb_unicode('T'),\
00135 Usb_unicode('3'),\
00136 Usb_unicode('2'),\
00137 Usb_unicode('U'),\
00138 Usb_unicode('C'),\
00139 Usb_unicode('3'),\
00140 Usb_unicode('A')
00141 #elif UC3A3
00142 #define USB_PFN_LENGTH 9
00143 #define USB_PART_FAMILY_NAME Usb_unicode('A'),\
00144 Usb_unicode('T'),\
00145 Usb_unicode('3'),\
00146 Usb_unicode('2'),\
00147 Usb_unicode('U'),\
00148 Usb_unicode('C'),\
00149 Usb_unicode('3'),\
00150 Usb_unicode('A'),\
00151 Usb_unicode('3')
00152 #elif UC3B
00153 #define USB_PFN_LENGTH 8
00154 #define USB_PART_FAMILY_NAME Usb_unicode('A'),\
00155 Usb_unicode('T'),\
00156 Usb_unicode('3'),\
00157 Usb_unicode('2'),\
00158 Usb_unicode('U'),\
00159 Usb_unicode('C'),\
00160 Usb_unicode('3'),\
00161 Usb_unicode('B')
00162 #endif
00163
00164 #define USB_PN_LENGTH (USB_PFN_LENGTH + 10)
00165 #define USB_PRODUCT_NAME \
00166 {\
00167 USB_PART_FAMILY_NAME,\
00168 Usb_unicode(' '),\
00169 Usb_unicode('D'),\
00170 Usb_unicode('F'),\
00171 Usb_unicode('U'),\
00172 Usb_unicode(' '),\
00173 Usb_unicode('1'),\
00174 Usb_unicode('.'),\
00175 Usb_unicode('1'),\
00176 Usb_unicode('.'),\
00177 Usb_unicode('0')\
00178 }
00179
00180
00181 #define USB_SN_LENGTH 5
00182 #define USB_SERIAL_NUMBER \
00183 {\
00184 Usb_unicode('1'),\
00185 Usb_unicode('.'),\
00186 Usb_unicode(((((ISP_VERSION >> 4) & 0x0F) < 0xA) ? '0' : 'A' - 0xA) + ((ISP_VERSION >> 4) & 0x0F)),\
00187 Usb_unicode('.'),\
00188 Usb_unicode((((ISP_VERSION & 0x0F) < 0xA) ? '0' : 'A' - 0xA) + (ISP_VERSION & 0x0F)) \
00189 }
00190
00191 #define LANGUAGE_ID 0x0409
00192
00193
00195 typedef
00196 #if (defined __ICCAVR32__)
00197 #pragma pack(1)
00198 #endif
00199 struct
00200 #if (defined __GNUC__)
00201 __attribute__((__packed__))
00202 #endif
00203 {
00204 U8 bmRequestType;
00205 U8 bRequest;
00206 U16 wValue;
00207 U16 wIndex;
00208 U16 wLength;
00209 }
00210 #if (defined __ICCAVR32__)
00211 #pragma pack()
00212 #endif
00213 S_UsbRequest;
00214
00215
00217 typedef
00218 #if (defined __ICCAVR32__)
00219 #pragma pack(1)
00220 #endif
00221 struct
00222 #if (defined __GNUC__)
00223 __attribute__((__packed__))
00224 #endif
00225 {
00226 U8 bLength;
00227 U8 bDescriptorType;
00228 U16 bscUSB;
00229 U8 bDeviceClass;
00230 U8 bDeviceSubClass;
00231 U8 bDeviceProtocol;
00232 U8 bMaxPacketSize0;
00233 U16 idVendor;
00234 U16 idProduct;
00235 U16 bcdDevice;
00236 U8 iManufacturer;
00237 U8 iProduct;
00238 U8 iSerialNumber;
00239 U8 bNumConfigurations;
00240 }
00241 #if (defined __ICCAVR32__)
00242 #pragma pack()
00243 #endif
00244 S_usb_device_descriptor;
00245
00246
00248 typedef
00249 #if (defined __ICCAVR32__)
00250 #pragma pack(1)
00251 #endif
00252 struct
00253 #if (defined __GNUC__)
00254 __attribute__((__packed__))
00255 #endif
00256 {
00257 U8 bLength;
00258 U8 bDescriptorType;
00259 U16 wTotalLength;
00260 U8 bNumInterfaces;
00261 U8 bConfigurationValue;
00262 U8 iConfiguration;
00263 U8 bmAttributes;
00264 U8 MaxPower;
00265 }
00266 #if (defined __ICCAVR32__)
00267 #pragma pack()
00268 #endif
00269 S_usb_configuration_descriptor;
00270
00271
00273 typedef
00274 #if (defined __ICCAVR32__)
00275 #pragma pack(1)
00276 #endif
00277 struct
00278 #if (defined __GNUC__)
00279 __attribute__((__packed__))
00280 #endif
00281 {
00282 U8 bLength;
00283 U8 bDescriptorType;
00284 U8 bInterfaceNumber;
00285 U8 bAlternateSetting;
00286 U8 bNumEndpoints;
00287 U8 bInterfaceClass;
00288 U8 bInterfaceSubClass;
00289 U8 bInterfaceProtocol;
00290 U8 iInterface;
00291 }
00292 #if (defined __ICCAVR32__)
00293 #pragma pack()
00294 #endif
00295 S_usb_interface_descriptor;
00296
00297
00299 typedef
00300 #if (defined __ICCAVR32__)
00301 #pragma pack(1)
00302 #endif
00303 struct
00304 #if (defined __GNUC__)
00305 __attribute__((__packed__))
00306 #endif
00307 {
00308 U8 bLength;
00309 U8 bDescriptorType;
00310 U8 bEndpointAddress;
00311 U8 bmAttributes;
00312 U16 wMaxPacketSize;
00313 U8 bInterval;
00314 }
00315 #if (defined __ICCAVR32__)
00316 #pragma pack()
00317 #endif
00318 S_usb_endpoint_descriptor;
00319
00320
00322 typedef
00323 #if (defined __ICCAVR32__)
00324 #pragma pack(1)
00325 #endif
00326 struct
00327 #if (defined __GNUC__)
00328 __attribute__((__packed__))
00329 #endif
00330 {
00331 U8 bLength;
00332 U8 bDescriptorType;
00333 U16 bscUSB;
00334 U8 bDeviceClass;
00335 U8 bDeviceSubClass;
00336 U8 bDeviceProtocol;
00337 U8 bMaxPacketSize0;
00338 U8 bNumConfigurations;
00339 U8 bReserved;
00340 }
00341 #if (defined __ICCAVR32__)
00342 #pragma pack()
00343 #endif
00344 S_usb_device_qualifier_descriptor;
00345
00346
00348 typedef
00349 #if (defined __ICCAVR32__)
00350 #pragma pack(1)
00351 #endif
00352 struct
00353 #if (defined __GNUC__)
00354 __attribute__((__packed__))
00355 #endif
00356 {
00357 U8 bLength;
00358 U8 bDescriptorType;
00359 U16 wlangid;
00360 }
00361 #if (defined __ICCAVR32__)
00362 #pragma pack()
00363 #endif
00364 S_usb_language_id;
00365
00366
00367
00368
00370 typedef
00371 #if (defined __ICCAVR32__)
00372 #pragma pack(1)
00373 #endif
00374 struct
00375 #if (defined __GNUC__)
00376 __attribute__((__packed__))
00377 #endif
00378 {
00379 U8 bLength;
00380 U8 bDescriptorType;
00381 U16 wstring[USB_MN_LENGTH];
00382 }
00383 #if (defined __ICCAVR32__)
00384 #pragma pack()
00385 #endif
00386 S_usb_manufacturer_string_descriptor;
00387
00388
00389
00390
00392 typedef
00393 #if (defined __ICCAVR32__)
00394 #pragma pack(1)
00395 #endif
00396 struct
00397 #if (defined __GNUC__)
00398 __attribute__((__packed__))
00399 #endif
00400 {
00401 U8 bLength;
00402 U8 bDescriptorType;
00403 U16 wstring[USB_PN_LENGTH];
00404 }
00405 #if (defined __ICCAVR32__)
00406 #pragma pack()
00407 #endif
00408 S_usb_product_string_descriptor;
00409
00410
00411
00412
00414 typedef
00415 #if (defined __ICCAVR32__)
00416 #pragma pack(1)
00417 #endif
00418 struct
00419 #if (defined __GNUC__)
00420 __attribute__((__packed__))
00421 #endif
00422 {
00423 U8 bLength;
00424 U8 bDescriptorType;
00425 U16 wstring[USB_SN_LENGTH];
00426 }
00427 #if (defined __ICCAVR32__)
00428 #pragma pack()
00429 #endif
00430 S_usb_serial_number;
00431
00432
00433
00434
00436 typedef
00437 #if (defined __ICCAVR32__)
00438 #pragma pack(1)
00439 #endif
00440 struct
00441 #if (defined __GNUC__)
00442 __attribute__((__packed__))
00443 #endif
00444 {
00445 U8 bLength;
00446 U8 bDescriptorType;
00447 U8 bmAttributes;
00448 U16 wDetachTimeOut;
00449 U16 wTransferSize;
00450 U16 bcdDFUVersion;
00451 }
00452 #if (defined __ICCAVR32__)
00453 #pragma pack()
00454 #endif
00455 S_usb_dfu_functional_descriptor;
00456
00457
00458 typedef
00459 #if (defined __ICCAVR32__)
00460 #pragma pack(1)
00461 #endif
00462 struct
00463 #if (defined __GNUC__)
00464 __attribute__((__packed__))
00465 #endif
00466 {
00467 S_usb_configuration_descriptor cfg;
00468 S_usb_interface_descriptor ifc;
00469 S_usb_dfu_functional_descriptor dfu;
00470 }
00471 #if (defined __ICCAVR32__)
00472 #pragma pack()
00473 #endif
00474 S_usb_user_configuration_descriptor;
00475
00476
00477 #endif // _USB_DESCRIPTORS_H_