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 #define EVK1101_CTRL_PANEL_PID EVK1101_CTRL_PANEL_DEMO_HID_PID
00063
00064
00065
00066
00067 #include "usb_standard_request.h"
00068 #include "usb_task.h"
00069
00070
00071
00072
00073 #define Usb_unicode(c) (Usb_format_mcu_to_usb_data(16, (U16)(c)))
00074 #define Usb_get_dev_desc_pointer() (&(usb_dev_desc.bLength))
00075 #define Usb_get_dev_desc_length() (sizeof(usb_dev_desc))
00076 #define Usb_get_conf_desc_pointer() (&(usb_conf_desc.cfg.bLength))
00077 #define Usb_get_conf_desc_length() (sizeof(usb_conf_desc))
00078
00079
00080
00081
00082
00083 #define USB_SPECIFICATION 0x0200
00084 #define DEVICE_CLASS 0
00085 #define DEVICE_SUB_CLASS 0
00086 #define DEVICE_PROTOCOL 0
00087 #define EP_CONTROL_LENGTH 64
00088 #define VENDOR_ID ATMEL_VID
00089 #define PRODUCT_ID EVK1101_CTRL_PANEL_PID
00090 #define RELEASE_NUMBER 0x1000
00091 #define MAN_INDEX 0x01
00092 #define PROD_INDEX 0x02
00093 #define SN_INDEX 0x03
00094 #define NB_CONFIGURATION 1
00095
00096
00097 #if (! defined EVK1101_CTRL_PANEL_PID)
00098 # error Please define EVK1101_CTRL_PANEL_PID
00099 #endif
00100 #if( EVK1101_CTRL_PANEL_PID==EVK1101_CTRL_PANEL_DEMO_HID_PID )
00101 # define NB_INTERFACE 1
00102 #elif( EVK1101_CTRL_PANEL_PID==EVK1101_CTRL_PANEL_DEMO_HID_MS_PID )
00103 # define NB_INTERFACE 2
00104 #endif
00105 #define CONF_NB 1
00106 #define CONF_INDEX 0
00107 #define CONF_ATTRIBUTES USB_CONFIG_SELFPOWERED
00108 #define MAX_POWER 50 // 100 mA
00109
00110
00111 #define INTERFACE_NB_FC 0
00112 #define ALTERNATE_FC 0
00113 #define NB_ENDPOINT_FC 2
00114 #define INTERFACE_CLASS_FC NO_CLASS
00115 #define INTERFACE_SUB_CLASS_FC NO_SUBCLASS
00116 #define INTERFACE_PROTOCOL_FC NO_PROTOCOL
00117 #define INTERFACE_INDEX_FC 0
00118
00119
00120 #define ENDPOINT_NB_1 (EP_FC_IN | MSK_EP_DIR)
00121 #define EP_ATTRIBUTES_1 TYPE_BULK
00122 #define EP_IN_LENGTH_1 8
00123 #define EP_SIZE_1 EP_IN_LENGTH_1
00124 #define EP_INTERVAL_1 5
00125
00126
00127 #define ENDPOINT_NB_2 (EP_FC_OUT)
00128 #define EP_ATTRIBUTES_2 TYPE_BULK
00129 #define EP_OUT_LENGTH_2 64
00130 #define EP_SIZE_2 EP_OUT_LENGTH_2
00131 #define EP_INTERVAL_2 5
00132
00133
00134
00135
00136 #define INTERFACE_NB_MS 1
00137 #define ALTERNATE_MS 0
00138 #define NB_ENDPOINT_MS 2
00139 #define INTERFACE_CLASS_MS 0x08 // Mass Storage Class
00140 #define INTERFACE_SUB_CLASS_MS 0x06 // SCSI transparent Command Set
00141 #define INTERFACE_PROTOCOL_MS 0x50 // Bulk-Only Transport
00142 #define INTERFACE_INDEX_MS 0
00143
00144
00145 #define ENDPOINT_NB_3 (EP_MS_IN | 0x80)
00146 #define EP_ATTRIBUTES_3 TYPE_BULK
00147 #define EP_OUT_LENGTH_3 64
00148 #define EP_SIZE_3 EP_OUT_LENGTH_3
00149 #define EP_INTERVAL_3 0
00150
00151
00152
00153 #define ENDPOINT_NB_4 EP_MS_OUT
00154 #define EP_ATTRIBUTES_4 TYPE_BULK
00155 #define EP_OUT_LENGTH_4 64
00156 #define EP_SIZE_4 EP_OUT_LENGTH_4
00157 #define EP_INTERVAL_4 0
00158
00159
00160
00161 #define LENGTH_OF_REPORT_IN 0x08
00162 #define LENGTH_OF_REPORT_OUT 0x08
00163
00164 #define DEVICE_STATUS SELF_POWERED
00165 #define INTERFACE_STATUS 0x00 // TBD
00166
00167 #define LANG_ID 0x00
00168
00169 #define USB_MN_LENGTH 5
00170 #define USB_MANUFACTURER_NAME \
00171 {\
00172 Usb_unicode('A'),\
00173 Usb_unicode('T'),\
00174 Usb_unicode('M'),\
00175 Usb_unicode('E'),\
00176 Usb_unicode('L') \
00177 }
00178
00179 #define USB_PN_LENGTH 23
00180 #define USB_PRODUCT_NAME \
00181 {\
00182 Usb_unicode('A'),\
00183 Usb_unicode('V'),\
00184 Usb_unicode('R'),\
00185 Usb_unicode('3'),\
00186 Usb_unicode('2'),\
00187 Usb_unicode(' '),\
00188 Usb_unicode('U'),\
00189 Usb_unicode('C'),\
00190 Usb_unicode('3'),\
00191 Usb_unicode('B'),\
00192 Usb_unicode(' '),\
00193 Usb_unicode('E'),\
00194 Usb_unicode('V'),\
00195 Usb_unicode('K'),\
00196 Usb_unicode('1'),\
00197 Usb_unicode('1'),\
00198 Usb_unicode('0'),\
00199 Usb_unicode('1'),\
00200 Usb_unicode(' '),\
00201 Usb_unicode('D'),\
00202 Usb_unicode('e'),\
00203 Usb_unicode('m'),\
00204 Usb_unicode('o') \
00205 }
00206
00207 #define USB_SN_LENGTH 13
00208 #define USB_SERIAL_NUMBER \
00209 {\
00210 Usb_unicode('1'),\
00211 Usb_unicode('.'),\
00212 Usb_unicode('0'),\
00213 Usb_unicode('.'),\
00214 Usb_unicode('0'),\
00215 Usb_unicode('.'),\
00216 Usb_unicode('0'),\
00217 Usb_unicode('.'),\
00218 Usb_unicode('0'),\
00219 Usb_unicode('.'),\
00220 Usb_unicode('0'),\
00221 Usb_unicode('.'),\
00222 Usb_unicode('A') \
00223 }
00224
00225 #define LANGUAGE_ID 0x0409
00226
00227
00229 typedef
00230 #if __ICCAVR32__
00231 #pragma pack(1)
00232 #endif
00233 struct
00234 #if __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 __ICCAVR32__
00245 #pragma pack()
00246 #endif
00247 S_UsbRequest;
00248
00249
00251 typedef
00252 #if __ICCAVR32__
00253 #pragma pack(1)
00254 #endif
00255 struct
00256 #if __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 __ICCAVR32__
00276 #pragma pack()
00277 #endif
00278 S_usb_device_descriptor;
00279
00280
00282 typedef
00283 #if __ICCAVR32__
00284 #pragma pack(1)
00285 #endif
00286 struct
00287 #if __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 __ICCAVR32__
00301 #pragma pack()
00302 #endif
00303 S_usb_configuration_descriptor;
00304
00305
00307 typedef
00308 #if __ICCAVR32__
00309 #pragma pack(1)
00310 #endif
00311 struct
00312 #if __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 __ICCAVR32__
00327 #pragma pack()
00328 #endif
00329 S_usb_interface_descriptor;
00330
00331
00333 typedef
00334 #if __ICCAVR32__
00335 #pragma pack(1)
00336 #endif
00337 struct
00338 #if __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 __ICCAVR32__
00350 #pragma pack()
00351 #endif
00352 S_usb_endpoint_descriptor;
00353
00354
00356 typedef
00357 #if __ICCAVR32__
00358 #pragma pack(1)
00359 #endif
00360 struct
00361 #if __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 __ICCAVR32__
00376 #pragma pack()
00377 #endif
00378 S_usb_device_qualifier_descriptor;
00379
00380
00382 typedef
00383 #if __ICCAVR32__
00384 #pragma pack(1)
00385 #endif
00386 struct
00387 #if __GNUC__
00388 __attribute__((__packed__))
00389 #endif
00390 {
00391 U8 bLength;
00392 U8 bDescriptorType;
00393 U16 wlangid;
00394 }
00395 #if __ICCAVR32__
00396 #pragma pack()
00397 #endif
00398 S_usb_language_id;
00399
00400
00401
00402
00404 typedef
00405 #if __ICCAVR32__
00406 #pragma pack(1)
00407 #endif
00408 struct
00409 #if __GNUC__
00410 __attribute__((__packed__))
00411 #endif
00412 {
00413 U8 bLength;
00414 U8 bDescriptorType;
00415 U16 wstring[USB_MN_LENGTH];
00416 }
00417 #if __ICCAVR32__
00418 #pragma pack()
00419 #endif
00420 S_usb_manufacturer_string_descriptor;
00421
00422
00423
00424
00426 typedef
00427 #if __ICCAVR32__
00428 #pragma pack(1)
00429 #endif
00430 struct
00431 #if __GNUC__
00432 __attribute__((__packed__))
00433 #endif
00434 {
00435 U8 bLength;
00436 U8 bDescriptorType;
00437 U16 wstring[USB_PN_LENGTH];
00438 }
00439 #if __ICCAVR32__
00440 #pragma pack()
00441 #endif
00442 S_usb_product_string_descriptor;
00443
00444
00445
00446
00448 typedef
00449 #if __ICCAVR32__
00450 #pragma pack(1)
00451 #endif
00452 struct
00453 #if __GNUC__
00454 __attribute__((__packed__))
00455 #endif
00456 {
00457 U8 bLength;
00458 U8 bDescriptorType;
00459 U16 wstring[USB_SN_LENGTH];
00460 }
00461 #if __ICCAVR32__
00462 #pragma pack()
00463 #endif
00464 S_usb_serial_number;
00465
00466
00467
00468
00469 typedef
00470 #if __ICCAVR32__
00471 #pragma pack(1)
00472 #endif
00473 struct
00474 #if __GNUC__
00475 __attribute__((__packed__))
00476 #endif
00477 {
00478 S_usb_configuration_descriptor cfg;
00479 S_usb_interface_descriptor ifc_fc;
00480 S_usb_endpoint_descriptor ep1_fc;
00481 S_usb_endpoint_descriptor ep2_fc;
00482 #if( EVK1101_CTRL_PANEL_PID==EVK1101_CTRL_PANEL_DEMO_HID_MS_PID )
00483 S_usb_interface_descriptor ifc_ms;
00484 S_usb_endpoint_descriptor ep1_ms;
00485 S_usb_endpoint_descriptor ep2_ms;
00486 #endif
00487 }
00488 #if __ICCAVR32__
00489 #pragma pack()
00490 #endif
00491 S_usb_user_configuration_descriptor;
00492
00493
00494 #endif // _USB_DESCRIPTORS_H_