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_get_conf_desc_fs_pointer()
00072 #define Usb_get_conf_desc_length() Usb_get_conf_desc_fs_length()
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 0
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 MS_EXAMPLE_PID
00091 #define RELEASE_NUMBER 0x1000
00092 #define MAN_INDEX 0x01
00093 #define PROD_INDEX 0x02
00094 #define SN_INDEX 0x03
00095 #define NB_CONFIGURATION 1
00096
00097
00098 #define NB_INTERFACE 1
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
00106 #define ALTERNATE 0
00107 #define NB_ENDPOINT 2
00108 #define INTERFACE_CLASS MS_CLASS
00109 #define INTERFACE_SUB_CLASS SCSI_SUBCLASS
00110 #define INTERFACE_PROTOCOL BULK_PROTOCOL
00111 #define INTERFACE_INDEX 0
00112
00113
00114 #define ENDPOINT_NB_1 (EP_MS_IN | MSK_EP_DIR)
00115 #define EP_ATTRIBUTES_1 TYPE_BULK
00116 #define EP_IN_LENGTH_1_FS 64
00117 #define EP_SIZE_1_FS EP_IN_LENGTH_1_FS
00118 #define EP_IN_LENGTH_1_HS 512
00119 #define EP_SIZE_1_HS EP_IN_LENGTH_1_HS
00120 #define EP_INTERVAL_1 0x00
00121
00122
00123 #define ENDPOINT_NB_2 EP_MS_OUT
00124 #define EP_ATTRIBUTES_2 TYPE_BULK
00125 #define EP_OUT_LENGTH_2_FS 64
00126 #define EP_SIZE_2_FS EP_OUT_LENGTH_2_FS
00127 #define EP_OUT_LENGTH_2_HS 512
00128 #define EP_SIZE_2_HS EP_OUT_LENGTH_2_HS
00129 #define EP_INTERVAL_2 0x00
00130
00131 #define DEVICE_STATUS SELF_POWERED
00132 #define INTERFACE_STATUS 0x00 // TBD
00133
00134 #define LANG_ID 0x00
00135
00136 #define USB_MN_LENGTH 5
00137 #define USB_MANUFACTURER_NAME \
00138 {\
00139 Usb_unicode('A'),\
00140 Usb_unicode('T'),\
00141 Usb_unicode('M'),\
00142 Usb_unicode('E'),\
00143 Usb_unicode('L') \
00144 }
00145
00146 #define USB_PN_LENGTH 22
00147 #define USB_PRODUCT_NAME \
00148 {\
00149 Usb_unicode('A'),\
00150 Usb_unicode('V'),\
00151 Usb_unicode('R'),\
00152 Usb_unicode('3'),\
00153 Usb_unicode('2'),\
00154 Usb_unicode(' '),\
00155 Usb_unicode('U'),\
00156 Usb_unicode('C'),\
00157 Usb_unicode('3'),\
00158 Usb_unicode(' '),\
00159 Usb_unicode('M'),\
00160 Usb_unicode('A'),\
00161 Usb_unicode('S'),\
00162 Usb_unicode('S'),\
00163 Usb_unicode(' '),\
00164 Usb_unicode('S'),\
00165 Usb_unicode('T'),\
00166 Usb_unicode('O'),\
00167 Usb_unicode('R'),\
00168 Usb_unicode('A'),\
00169 Usb_unicode('G'),\
00170 Usb_unicode('E') \
00171 }
00172
00173 #define USB_SN_LENGTH 13
00174 #define USB_SERIAL_NUMBER \
00175 {\
00176 Usb_unicode('0'),\
00177 Usb_unicode('0'),\
00178 Usb_unicode('0'),\
00179 Usb_unicode('0'),\
00180 Usb_unicode('0'),\
00181 Usb_unicode('0'),\
00182 Usb_unicode('0'),\
00183 Usb_unicode('0'),\
00184 Usb_unicode('0'),\
00185 Usb_unicode('0'),\
00186 Usb_unicode('0'),\
00187 Usb_unicode('0'),\
00188 Usb_unicode('1') \
00189 }
00190
00191 #define LANGUAGE_ID 0x0409
00192
00193
00195 typedef
00196 #if __ICCAVR32__
00197 #pragma pack(1)
00198 #endif
00199 struct
00200 #if __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 __ICCAVR32__
00211 #pragma pack()
00212 #endif
00213 S_UsbRequest;
00214
00215
00217 typedef
00218 #if __ICCAVR32__
00219 #pragma pack(1)
00220 #endif
00221 struct
00222 #if __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 __ICCAVR32__
00242 #pragma pack()
00243 #endif
00244 S_usb_device_descriptor;
00245
00246
00248 typedef
00249 #if __ICCAVR32__
00250 #pragma pack(1)
00251 #endif
00252 struct
00253 #if __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 __ICCAVR32__
00267 #pragma pack()
00268 #endif
00269 S_usb_configuration_descriptor;
00270
00271
00273 typedef
00274 #if __ICCAVR32__
00275 #pragma pack(1)
00276 #endif
00277 struct
00278 #if __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 __ICCAVR32__
00293 #pragma pack()
00294 #endif
00295 S_usb_interface_descriptor;
00296
00297
00299 typedef
00300 #if __ICCAVR32__
00301 #pragma pack(1)
00302 #endif
00303 struct
00304 #if __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 __ICCAVR32__
00316 #pragma pack()
00317 #endif
00318 S_usb_endpoint_descriptor;
00319
00320
00322 typedef
00323 #if __ICCAVR32__
00324 #pragma pack(1)
00325 #endif
00326 struct
00327 #if __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 __ICCAVR32__
00342 #pragma pack()
00343 #endif
00344 S_usb_device_qualifier_descriptor;
00345
00346
00348 typedef
00349 #if __ICCAVR32__
00350 #pragma pack(1)
00351 #endif
00352 struct
00353 #if __GNUC__
00354 __attribute__((__packed__))
00355 #endif
00356 {
00357 U8 bLength;
00358 U8 bDescriptorType;
00359 U16 wlangid;
00360 }
00361 #if __ICCAVR32__
00362 #pragma pack()
00363 #endif
00364 S_usb_language_id;
00365
00366
00367
00368
00370 typedef
00371 #if __ICCAVR32__
00372 #pragma pack(1)
00373 #endif
00374 struct
00375 #if __GNUC__
00376 __attribute__((__packed__))
00377 #endif
00378 {
00379 U8 bLength;
00380 U8 bDescriptorType;
00381 U16 wstring[USB_MN_LENGTH];
00382 }
00383 #if __ICCAVR32__
00384 #pragma pack()
00385 #endif
00386 S_usb_manufacturer_string_descriptor;
00387
00388
00389
00390
00392 typedef
00393 #if __ICCAVR32__
00394 #pragma pack(1)
00395 #endif
00396 struct
00397 #if __GNUC__
00398 __attribute__((__packed__))
00399 #endif
00400 {
00401 U8 bLength;
00402 U8 bDescriptorType;
00403 U16 wstring[USB_PN_LENGTH];
00404 }
00405 #if __ICCAVR32__
00406 #pragma pack()
00407 #endif
00408 S_usb_product_string_descriptor;
00409
00410
00411
00412
00414 typedef
00415 #if __ICCAVR32__
00416 #pragma pack(1)
00417 #endif
00418 struct
00419 #if __GNUC__
00420 __attribute__((__packed__))
00421 #endif
00422 {
00423 U8 bLength;
00424 U8 bDescriptorType;
00425 U16 wstring[USB_SN_LENGTH];
00426 }
00427 #if __ICCAVR32__
00428 #pragma pack()
00429 #endif
00430 S_usb_serial_number;
00431
00432
00433
00434
00435 typedef
00436 #if __ICCAVR32__
00437 #pragma pack(1)
00438 #endif
00439 struct
00440 #if __GNUC__
00441 __attribute__((__packed__))
00442 #endif
00443 {
00444 S_usb_configuration_descriptor cfg;
00445 S_usb_interface_descriptor ifc;
00446 S_usb_endpoint_descriptor ep1;
00447 S_usb_endpoint_descriptor ep2;
00448 }
00449 #if __ICCAVR32__
00450 #pragma pack()
00451 #endif
00452 S_usb_user_configuration_descriptor;
00453
00454
00455 #endif // _USB_DESCRIPTORS_H_