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_encode(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 EVK1100_CTRL_PANEL_DEMO_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 0
00100 #define ALTERNATE 0
00101 #define NB_ENDPOINT 2
00102 #define INTERFACE_CLASS MS_CLASS
00103 #define INTERFACE_SUB_CLASS SCSI_SUBCLASS
00104 #define INTERFACE_PROTOCOL BULK_PROTOCOL
00105 #define INTERFACE_INDEX 0
00106
00107
00108 #define ENDPOINT_NB_1 (EP_MS_IN | MSK_EP_DIR)
00109 #define EP_ATTRIBUTES_1 TYPE_BULK
00110 #define EP_IN_LENGTH_1 64
00111 #define EP_SIZE_1 EP_IN_LENGTH_1
00112 #define EP_INTERVAL_1 0x00 // Interrupt polling interval from host
00113
00114
00115 #define ENDPOINT_NB_2 EP_MS_OUT
00116 #define EP_ATTRIBUTES_2 TYPE_BULK
00117 #define EP_OUT_LENGTH_2 64
00118 #define EP_SIZE_2 EP_OUT_LENGTH_2
00119 #define EP_INTERVAL_2 0x00 // Interrupt polling interval from host
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_encode('A'),\
00130 Usb_encode('T'),\
00131 Usb_encode('M'),\
00132 Usb_encode('E'),\
00133 Usb_encode('L') \
00134 }
00135
00136 #define USB_PN_LENGTH 23
00137 #define USB_PRODUCT_NAME \
00138 {\
00139 Usb_encode('U'),\
00140 Usb_encode('C'),\
00141 Usb_encode('3'),\
00142 Usb_encode('A'),\
00143 Usb_encode(' '),\
00144 Usb_encode('C'),\
00145 Usb_encode('O'),\
00146 Usb_encode('N'),\
00147 Usb_encode('T'),\
00148 Usb_encode('R'),\
00149 Usb_encode('O'),\
00150 Usb_encode('L'),\
00151 Usb_encode(' '),\
00152 Usb_encode('P'),\
00153 Usb_encode('A'),\
00154 Usb_encode('N'),\
00155 Usb_encode('E'),\
00156 Usb_encode('L'),\
00157 Usb_encode(' '),\
00158 Usb_encode('D'),\
00159 Usb_encode('E'),\
00160 Usb_encode('M'),\
00161 Usb_encode('O') \
00162 }
00163
00164 #define USB_SN_LENGTH 0x0D
00165 #define USB_SERIAL_NUMBER \
00166 {\
00167 Usb_encode('1'),\
00168 Usb_encode('.'),\
00169 Usb_encode('0'),\
00170 Usb_encode('.'),\
00171 Usb_encode('0'),\
00172 Usb_encode('.'),\
00173 Usb_encode('0'),\
00174 Usb_encode('.'),\
00175 Usb_encode('0'),\
00176 Usb_encode('.'),\
00177 Usb_encode('0'),\
00178 Usb_encode('.'),\
00179 Usb_encode('A') \
00180 }
00181
00182 #define LANGUAGE_ID 0x0409
00183
00184
00186 typedef
00187 #ifdef __ICCAVR32__
00188 #pragma pack(1)
00189 #endif
00190 struct
00191 #ifdef __GNUC__
00192 __attribute__((__packed__))
00193 #endif
00194 {
00195 U8 bmRequestType;
00196 U8 bRequest;
00197 U16 wValue;
00198 U16 wIndex;
00199 U16 wLength;
00200 }
00201 #ifdef __ICCAVR32__
00202 #pragma pack()
00203 #endif
00204 S_UsbRequest;
00205
00206
00208 typedef
00209 #ifdef __ICCAVR32__
00210 #pragma pack(1)
00211 #endif
00212 struct
00213 #ifdef __GNUC__
00214 __attribute__((__packed__))
00215 #endif
00216 {
00217 U8 bLength;
00218 U8 bDescriptorType;
00219 U16 bscUSB;
00220 U8 bDeviceClass;
00221 U8 bDeviceSubClass;
00222 U8 bDeviceProtocol;
00223 U8 bMaxPacketSize0;
00224 U16 idVendor;
00225 U16 idProduct;
00226 U16 bcdDevice;
00227 U8 iManufacturer;
00228 U8 iProduct;
00229 U8 iSerialNumber;
00230 U8 bNumConfigurations;
00231 }
00232 #ifdef __ICCAVR32__
00233 #pragma pack()
00234 #endif
00235 S_usb_device_descriptor;
00236
00237
00239 typedef
00240 #ifdef __ICCAVR32__
00241 #pragma pack(1)
00242 #endif
00243 struct
00244 #ifdef __GNUC__
00245 __attribute__((__packed__))
00246 #endif
00247 {
00248 U8 bLength;
00249 U8 bDescriptorType;
00250 U16 wTotalLength;
00251 U8 bNumInterfaces;
00252 U8 bConfigurationValue;
00253 U8 iConfiguration;
00254 U8 bmAttributes;
00255 U8 MaxPower;
00256 }
00257 #ifdef __ICCAVR32__
00258 #pragma pack()
00259 #endif
00260 S_usb_configuration_descriptor;
00261
00262
00264 typedef
00265 #ifdef __ICCAVR32__
00266 #pragma pack(1)
00267 #endif
00268 struct
00269 #ifdef __GNUC__
00270 __attribute__((__packed__))
00271 #endif
00272 {
00273 U8 bLength;
00274 U8 bDescriptorType;
00275 U8 bInterfaceNumber;
00276 U8 bAlternateSetting;
00277 U8 bNumEndpoints;
00278 U8 bInterfaceClass;
00279 U8 bInterfaceSubClass;
00280 U8 bInterfaceProtocol;
00281 U8 iInterface;
00282 }
00283 #ifdef __ICCAVR32__
00284 #pragma pack()
00285 #endif
00286 S_usb_interface_descriptor;
00287
00288
00290 typedef
00291 #ifdef __ICCAVR32__
00292 #pragma pack(1)
00293 #endif
00294 struct
00295 #ifdef __GNUC__
00296 __attribute__((__packed__))
00297 #endif
00298 {
00299 U8 bLength;
00300 U8 bDescriptorType;
00301 U8 bEndpointAddress;
00302 U8 bmAttributes;
00303 U16 wMaxPacketSize;
00304 U8 bInterval;
00305 }
00306 #ifdef __ICCAVR32__
00307 #pragma pack()
00308 #endif
00309 S_usb_endpoint_descriptor;
00310
00311
00313 typedef
00314 #ifdef __ICCAVR32__
00315 #pragma pack(1)
00316 #endif
00317 struct
00318 #ifdef __GNUC__
00319 __attribute__((__packed__))
00320 #endif
00321 {
00322 U8 bLength;
00323 U8 bDescriptorType;
00324 U16 bscUSB;
00325 U8 bDeviceClass;
00326 U8 bDeviceSubClass;
00327 U8 bDeviceProtocol;
00328 U8 bMaxPacketSize0;
00329 U8 bNumConfigurations;
00330 U8 bReserved;
00331 }
00332 #ifdef __ICCAVR32__
00333 #pragma pack()
00334 #endif
00335 S_usb_device_qualifier_descriptor;
00336
00337
00339 typedef
00340 #ifdef __ICCAVR32__
00341 #pragma pack(1)
00342 #endif
00343 struct
00344 #ifdef __GNUC__
00345 __attribute__((__packed__))
00346 #endif
00347 {
00348 U8 bLength;
00349 U8 bDescriptorType;
00350 U16 wlangid;
00351 }
00352 #ifdef __ICCAVR32__
00353 #pragma pack()
00354 #endif
00355 S_usb_language_id;
00356
00357
00358
00359
00361 typedef
00362 #ifdef __ICCAVR32__
00363 #pragma pack(1)
00364 #endif
00365 struct
00366 #ifdef __GNUC__
00367 __attribute__((__packed__))
00368 #endif
00369 {
00370 U8 bLength;
00371 U8 bDescriptorType;
00372 U16 wstring[USB_MN_LENGTH];
00373 }
00374 #ifdef __ICCAVR32__
00375 #pragma pack()
00376 #endif
00377 S_usb_manufacturer_string_descriptor;
00378
00379
00380
00381
00383 typedef
00384 #ifdef __ICCAVR32__
00385 #pragma pack(1)
00386 #endif
00387 struct
00388 #ifdef __GNUC__
00389 __attribute__((__packed__))
00390 #endif
00391 {
00392 U8 bLength;
00393 U8 bDescriptorType;
00394 U16 wstring[USB_PN_LENGTH];
00395 }
00396 #ifdef __ICCAVR32__
00397 #pragma pack()
00398 #endif
00399 S_usb_product_string_descriptor;
00400
00401
00402
00403
00405 typedef
00406 #ifdef __ICCAVR32__
00407 #pragma pack(1)
00408 #endif
00409 struct
00410 #ifdef __GNUC__
00411 __attribute__((__packed__))
00412 #endif
00413 {
00414 U8 bLength;
00415 U8 bDescriptorType;
00416 U16 wstring[USB_SN_LENGTH];
00417 }
00418 #ifdef __ICCAVR32__
00419 #pragma pack()
00420 #endif
00421 S_usb_serial_number;
00422
00423
00424
00425
00426 typedef
00427 #ifdef __ICCAVR32__
00428 #pragma pack(1)
00429 #endif
00430 struct
00431 #ifdef __GNUC__
00432 __attribute__((__packed__))
00433 #endif
00434 {
00435 S_usb_configuration_descriptor cfg;
00436 S_usb_interface_descriptor ifc;
00437 S_usb_endpoint_descriptor ep1;
00438 S_usb_endpoint_descriptor ep2;
00439 }
00440 #ifdef __ICCAVR32__
00441 #pragma pack()
00442 #endif
00443 S_usb_user_configuration_descriptor;
00444
00445
00446 #endif // _USB_DESCRIPTORS_H_