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.cfg_temp.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 ENUM_EXAMPLE_PID
00085 #define RELEASE_NUMBER 0x1000
00086 #define MAN_INDEX 0x01
00087 #define PROD_INDEX 0x02
00088 #define SN_INDEX 0x03
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_TEMP 0
00100 #define ALTERNATE_TEMP 0
00101 #define NB_ENDPOINT_TEMP 2
00102 #define INTERFACE_CLASS_TEMP VENDOR_CLASS
00103 #define INTERFACE_SUB_CLASS_TEMP NO_SUBCLASS
00104 #define INTERFACE_PROTOCOL_TEMP NO_PROTOCOL
00105 #define INTERFACE_INDEX_TEMP 0
00106
00107
00108 #define ENDPOINT_NB_TEMP1 (EP_TEMP_IN | MSK_EP_DIR)
00109 #define EP_ATTRIBUTES_TEMP1 TYPE_BULK
00110 #define EP_IN_LENGTH_TEMP1 64
00111 #define EP_SIZE_TEMP1 EP_IN_LENGTH_TEMP1
00112 #define EP_INTERVAL_TEMP1 0x00
00113
00114
00115 #define ENDPOINT_NB_TEMP2 EP_TEMP_OUT
00116 #define EP_ATTRIBUTES_TEMP2 TYPE_BULK
00117 #define EP_OUT_LENGTH_TEMP2 64
00118 #define EP_SIZE_TEMP2 EP_OUT_LENGTH_TEMP2
00119 #define EP_INTERVAL_TEMP2 0x00
00120
00121 #define DEVICE_STATUS SELF_POWERED
00122 #define INTERFACE_STATUS 0x00 // TBD
00123
00124 #define LANG_ID 0x00
00125
00126 #define USB_MN_LENGTH 5
00127 #define USB_MANUFACTURER_NAME \
00128 {\
00129 Usb_unicode('A'),\
00130 Usb_unicode('T'),\
00131 Usb_unicode('M'),\
00132 Usb_unicode('E'),\
00133 Usb_unicode('L') \
00134 }
00135
00136 #define USB_PN_LENGTH 20
00137 #define USB_PRODUCT_NAME \
00138 {\
00139 Usb_unicode('A'),\
00140 Usb_unicode('V'),\
00141 Usb_unicode('R'),\
00142 Usb_unicode('3'),\
00143 Usb_unicode('2'),\
00144 Usb_unicode(' '),\
00145 Usb_unicode('U'),\
00146 Usb_unicode('C'),\
00147 Usb_unicode('3'),\
00148 Usb_unicode(' '),\
00149 Usb_unicode('U'),\
00150 Usb_unicode('S'),\
00151 Usb_unicode('B'),\
00152 Usb_unicode(' '),\
00153 Usb_unicode('D'),\
00154 Usb_unicode('E'),\
00155 Usb_unicode('V'),\
00156 Usb_unicode('I'),\
00157 Usb_unicode('C'),\
00158 Usb_unicode('E') \
00159 }
00160
00161 #define USB_SN_LENGTH 13
00162 #define USB_SERIAL_NUMBER \
00163 {\
00164 Usb_unicode('1'),\
00165 Usb_unicode('.'),\
00166 Usb_unicode('0'),\
00167 Usb_unicode('.'),\
00168 Usb_unicode('0'),\
00169 Usb_unicode('.'),\
00170 Usb_unicode('0'),\
00171 Usb_unicode('.'),\
00172 Usb_unicode('0'),\
00173 Usb_unicode('.'),\
00174 Usb_unicode('0'),\
00175 Usb_unicode('.'),\
00176 Usb_unicode('A') \
00177 }
00178
00179 #define LANGUAGE_ID 0x0409
00180
00181
00183 typedef
00184 #if __ICCAVR32__
00185 #pragma pack(1)
00186 #endif
00187 struct
00188 #if (defined __GNUC__)
00189 __attribute__((__packed__))
00190 #endif
00191 {
00192 U8 bmRequestType;
00193 U8 bRequest;
00194 U16 wValue;
00195 U16 wIndex;
00196 U16 wLength;
00197 }
00198 #if __ICCAVR32__
00199 #pragma pack()
00200 #endif
00201 S_UsbRequest;
00202
00203
00205 typedef
00206 #if __ICCAVR32__
00207 #pragma pack(1)
00208 #endif
00209 struct
00210 #if (defined __GNUC__)
00211 __attribute__((__packed__))
00212 #endif
00213 {
00214 U8 bLength;
00215 U8 bDescriptorType;
00216 U16 bscUSB;
00217 U8 bDeviceClass;
00218 U8 bDeviceSubClass;
00219 U8 bDeviceProtocol;
00220 U8 bMaxPacketSize0;
00221 U16 idVendor;
00222 U16 idProduct;
00223 U16 bcdDevice;
00224 U8 iManufacturer;
00225 U8 iProduct;
00226 U8 iSerialNumber;
00227 U8 bNumConfigurations;
00228 }
00229 #if __ICCAVR32__
00230 #pragma pack()
00231 #endif
00232 S_usb_device_descriptor;
00233
00234
00236 typedef
00237 #if __ICCAVR32__
00238 #pragma pack(1)
00239 #endif
00240 struct
00241 #if (defined __GNUC__)
00242 __attribute__((__packed__))
00243 #endif
00244 {
00245 U8 bLength;
00246 U8 bDescriptorType;
00247 U16 wTotalLength;
00248 U8 bNumInterfaces;
00249 U8 bConfigurationValue;
00250 U8 iConfiguration;
00251 U8 bmAttributes;
00252 U8 MaxPower;
00253 }
00254 #if __ICCAVR32__
00255 #pragma pack()
00256 #endif
00257 S_usb_configuration_descriptor;
00258
00259
00261 typedef
00262 #if __ICCAVR32__
00263 #pragma pack(1)
00264 #endif
00265 struct
00266 #if (defined __GNUC__)
00267 __attribute__((__packed__))
00268 #endif
00269 {
00270 U8 bLength;
00271 U8 bDescriptorType;
00272 U8 bInterfaceNumber;
00273 U8 bAlternateSetting;
00274 U8 bNumEndpoints;
00275 U8 bInterfaceClass;
00276 U8 bInterfaceSubClass;
00277 U8 bInterfaceProtocol;
00278 U8 iInterface;
00279 }
00280 #if __ICCAVR32__
00281 #pragma pack()
00282 #endif
00283 S_usb_interface_descriptor;
00284
00285
00287 typedef
00288 #if __ICCAVR32__
00289 #pragma pack(1)
00290 #endif
00291 struct
00292 #if (defined __GNUC__)
00293 __attribute__((__packed__))
00294 #endif
00295 {
00296 U8 bLength;
00297 U8 bDescriptorType;
00298 U8 bEndpointAddress;
00299 U8 bmAttributes;
00300 U16 wMaxPacketSize;
00301 U8 bInterval;
00302 }
00303 #if __ICCAVR32__
00304 #pragma pack()
00305 #endif
00306 S_usb_endpoint_descriptor;
00307
00308
00310 typedef
00311 #if __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 U16 bscUSB;
00322 U8 bDeviceClass;
00323 U8 bDeviceSubClass;
00324 U8 bDeviceProtocol;
00325 U8 bMaxPacketSize0;
00326 U8 bNumConfigurations;
00327 U8 bReserved;
00328 }
00329 #if __ICCAVR32__
00330 #pragma pack()
00331 #endif
00332 S_usb_device_qualifier_descriptor;
00333
00334
00336 typedef
00337 #if __ICCAVR32__
00338 #pragma pack(1)
00339 #endif
00340 struct
00341 #if (defined __GNUC__)
00342 __attribute__((__packed__))
00343 #endif
00344 {
00345 U8 bLength;
00346 U8 bDescriptorType;
00347 U16 wlangid;
00348 }
00349 #if __ICCAVR32__
00350 #pragma pack()
00351 #endif
00352 S_usb_language_id;
00353
00354
00355
00356
00358 typedef
00359 #if __ICCAVR32__
00360 #pragma pack(1)
00361 #endif
00362 struct
00363 #if (defined __GNUC__)
00364 __attribute__((__packed__))
00365 #endif
00366 {
00367 U8 bLength;
00368 U8 bDescriptorType;
00369 U16 wstring[USB_MN_LENGTH];
00370 }
00371 #if __ICCAVR32__
00372 #pragma pack()
00373 #endif
00374 S_usb_manufacturer_string_descriptor;
00375
00376
00377
00378
00380 typedef
00381 #if __ICCAVR32__
00382 #pragma pack(1)
00383 #endif
00384 struct
00385 #if (defined __GNUC__)
00386 __attribute__((__packed__))
00387 #endif
00388 {
00389 U8 bLength;
00390 U8 bDescriptorType;
00391 U16 wstring[USB_PN_LENGTH];
00392 }
00393 #if __ICCAVR32__
00394 #pragma pack()
00395 #endif
00396 S_usb_product_string_descriptor;
00397
00398
00399
00400
00402 typedef
00403 #if __ICCAVR32__
00404 #pragma pack(1)
00405 #endif
00406 struct
00407 #if (defined __GNUC__)
00408 __attribute__((__packed__))
00409 #endif
00410 {
00411 U8 bLength;
00412 U8 bDescriptorType;
00413 U16 wstring[USB_SN_LENGTH];
00414 }
00415 #if __ICCAVR32__
00416 #pragma pack()
00417 #endif
00418 S_usb_serial_number;
00419
00420
00421
00422
00423 typedef
00424 #if __ICCAVR32__
00425 #pragma pack(1)
00426 #endif
00427 struct
00428 #if (defined __GNUC__)
00429 __attribute__((__packed__))
00430 #endif
00431 {
00432 S_usb_configuration_descriptor cfg_temp;
00433 S_usb_interface_descriptor ifc_temp;
00434 S_usb_endpoint_descriptor ep1_temp;
00435 S_usb_endpoint_descriptor ep2_temp;
00436 }
00437 #if __ICCAVR32__
00438 #pragma pack()
00439 #endif
00440 S_usb_user_configuration_descriptor;
00441
00442
00443 #endif // _USB_DESCRIPTORS_H_