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 HID_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_MOUSE 0
00106 #define ALTERNATE_MOUSE 0
00107 #define NB_ENDPOINT_MOUSE 1
00108 #define INTERFACE_CLASS_MOUSE HID_CLASS
00109 #define INTERFACE_SUB_CLASS_MOUSE NO_SUBCLASS
00110 #define INTERFACE_PROTOCOL_MOUSE MOUSE_PROTOCOL
00111 #define INTERFACE_INDEX_MOUSE 0
00112
00113
00114 #define HID_VERSION_MOUSE 0x0111
00115 #define HID_COUNTRY_CODE_MOUSE 0x00
00116 #define HID_NUM_DESCRIPTORS_MOUSE 0x01
00117
00118
00119 #define ENDPOINT_NB_1 (EP_HID_MOUSE_IN | MSK_EP_DIR)
00120 #define EP_ATTRIBUTES_1 TYPE_INTERRUPT
00121 #define EP_IN_LENGTH_1_FS 8
00122 #define EP_SIZE_1_FS EP_IN_LENGTH_1_FS
00123 #define EP_IN_LENGTH_1_HS 8
00124 #define EP_SIZE_1_HS EP_IN_LENGTH_1_HS
00125 #define EP_INTERVAL_1 5
00126
00127 #define DEVICE_STATUS SELF_POWERED
00128 #define INTERFACE_STATUS 0x00 // TBD
00129
00130 #define LANG_ID 0x00
00131
00132 #define USB_MN_LENGTH 5
00133 #define USB_MANUFACTURER_NAME \
00134 {\
00135 Usb_unicode('A'),\
00136 Usb_unicode('T'),\
00137 Usb_unicode('M'),\
00138 Usb_unicode('E'),\
00139 Usb_unicode('L') \
00140 }
00141
00142 #define USB_PN_LENGTH 13
00143 #define USB_PRODUCT_NAME \
00144 {\
00145 Usb_unicode('A'),\
00146 Usb_unicode('V'),\
00147 Usb_unicode('R'),\
00148 Usb_unicode('3'),\
00149 Usb_unicode('2'),\
00150 Usb_unicode(' '),\
00151 Usb_unicode('U'),\
00152 Usb_unicode('C'),\
00153 Usb_unicode('3'),\
00154 Usb_unicode(' '),\
00155 Usb_unicode('H'),\
00156 Usb_unicode('I'),\
00157 Usb_unicode('D') \
00158 }
00159
00160 #define USB_SN_LENGTH 13
00161 #define USB_SERIAL_NUMBER \
00162 {\
00163 Usb_unicode('1'),\
00164 Usb_unicode('.'),\
00165 Usb_unicode('0'),\
00166 Usb_unicode('.'),\
00167 Usb_unicode('0'),\
00168 Usb_unicode('.'),\
00169 Usb_unicode('0'),\
00170 Usb_unicode('.'),\
00171 Usb_unicode('0'),\
00172 Usb_unicode('.'),\
00173 Usb_unicode('0'),\
00174 Usb_unicode('.'),\
00175 Usb_unicode('A') \
00176 }
00177
00178 #define LANGUAGE_ID 0x0409
00179
00180
00182 typedef
00183 #if (defined __ICCAVR32__)
00184 #pragma pack(1)
00185 #endif
00186 struct
00187 #if (defined __GNUC__)
00188 __attribute__((__packed__))
00189 #endif
00190 {
00191 U8 bmRequestType;
00192 U8 bRequest;
00193 U16 wValue;
00194 U16 wIndex;
00195 U16 wLength;
00196 }
00197 #if (defined __ICCAVR32__)
00198 #pragma pack()
00199 #endif
00200 S_UsbRequest;
00201
00202
00204 typedef
00205 #if (defined __ICCAVR32__)
00206 #pragma pack(1)
00207 #endif
00208 struct
00209 #if (defined __GNUC__)
00210 __attribute__((__packed__))
00211 #endif
00212 {
00213 U8 bLength;
00214 U8 bDescriptorType;
00215 U16 bscUSB;
00216 U8 bDeviceClass;
00217 U8 bDeviceSubClass;
00218 U8 bDeviceProtocol;
00219 U8 bMaxPacketSize0;
00220 U16 idVendor;
00221 U16 idProduct;
00222 U16 bcdDevice;
00223 U8 iManufacturer;
00224 U8 iProduct;
00225 U8 iSerialNumber;
00226 U8 bNumConfigurations;
00227 }
00228 #if (defined __ICCAVR32__)
00229 #pragma pack()
00230 #endif
00231 S_usb_device_descriptor;
00232
00233
00235 typedef
00236 #if (defined __ICCAVR32__)
00237 #pragma pack(1)
00238 #endif
00239 struct
00240 #if (defined __GNUC__)
00241 __attribute__((__packed__))
00242 #endif
00243 {
00244 U8 bLength;
00245 U8 bDescriptorType;
00246 U16 wTotalLength;
00247 U8 bNumInterfaces;
00248 U8 bConfigurationValue;
00249 U8 iConfiguration;
00250 U8 bmAttributes;
00251 U8 MaxPower;
00252 }
00253 #if (defined __ICCAVR32__)
00254 #pragma pack()
00255 #endif
00256 S_usb_configuration_descriptor;
00257
00258
00260 typedef
00261 #if (defined __ICCAVR32__)
00262 #pragma pack(1)
00263 #endif
00264 struct
00265 #if (defined __GNUC__)
00266 __attribute__((__packed__))
00267 #endif
00268 {
00269 U8 bLength;
00270 U8 bDescriptorType;
00271 U8 bInterfaceNumber;
00272 U8 bAlternateSetting;
00273 U8 bNumEndpoints;
00274 U8 bInterfaceClass;
00275 U8 bInterfaceSubClass;
00276 U8 bInterfaceProtocol;
00277 U8 iInterface;
00278 }
00279 #if (defined __ICCAVR32__)
00280 #pragma pack()
00281 #endif
00282 S_usb_interface_descriptor;
00283
00284
00286 typedef
00287 #if (defined __ICCAVR32__)
00288 #pragma pack(1)
00289 #endif
00290 struct
00291 #if (defined __GNUC__)
00292 __attribute__((__packed__))
00293 #endif
00294 {
00295 U8 bLength;
00296 U8 bDescriptorType;
00297 U8 bEndpointAddress;
00298 U8 bmAttributes;
00299 U16 wMaxPacketSize;
00300 U8 bInterval;
00301 }
00302 #if (defined __ICCAVR32__)
00303 #pragma pack()
00304 #endif
00305 S_usb_endpoint_descriptor;
00306
00307
00309 typedef
00310 #if (defined __ICCAVR32__)
00311 #pragma pack(1)
00312 #endif
00313 struct
00314 #if (defined __GNUC__)
00315 __attribute__((__packed__))
00316 #endif
00317 {
00318 U8 bLength;
00319 U8 bDescriptorType;
00320 U16 bscUSB;
00321 U8 bDeviceClass;
00322 U8 bDeviceSubClass;
00323 U8 bDeviceProtocol;
00324 U8 bMaxPacketSize0;
00325 U8 bNumConfigurations;
00326 U8 bReserved;
00327 }
00328 #if (defined __ICCAVR32__)
00329 #pragma pack()
00330 #endif
00331 S_usb_device_qualifier_descriptor;
00332
00333
00335 typedef
00336 #if (defined __ICCAVR32__)
00337 #pragma pack(1)
00338 #endif
00339 struct
00340 #if (defined __GNUC__)
00341 __attribute__((__packed__))
00342 #endif
00343 {
00344 U8 bLength;
00345 U8 bDescriptorType;
00346 U16 wlangid;
00347 }
00348 #if (defined __ICCAVR32__)
00349 #pragma pack()
00350 #endif
00351 S_usb_language_id;
00352
00353
00354
00355
00357 typedef
00358 #if (defined __ICCAVR32__)
00359 #pragma pack(1)
00360 #endif
00361 struct
00362 #if (defined __GNUC__)
00363 __attribute__((__packed__))
00364 #endif
00365 {
00366 U8 bLength;
00367 U8 bDescriptorType;
00368 U16 wstring[USB_MN_LENGTH];
00369 }
00370 #if (defined __ICCAVR32__)
00371 #pragma pack()
00372 #endif
00373 S_usb_manufacturer_string_descriptor;
00374
00375
00376
00377
00379 typedef
00380 #if (defined __ICCAVR32__)
00381 #pragma pack(1)
00382 #endif
00383 struct
00384 #if (defined __GNUC__)
00385 __attribute__((__packed__))
00386 #endif
00387 {
00388 U8 bLength;
00389 U8 bDescriptorType;
00390 U16 wstring[USB_PN_LENGTH];
00391 }
00392 #if (defined __ICCAVR32__)
00393 #pragma pack()
00394 #endif
00395 S_usb_product_string_descriptor;
00396
00397
00398
00399
00401 typedef
00402 #if (defined __ICCAVR32__)
00403 #pragma pack(1)
00404 #endif
00405 struct
00406 #if (defined __GNUC__)
00407 __attribute__((__packed__))
00408 #endif
00409 {
00410 U8 bLength;
00411 U8 bDescriptorType;
00412 U16 wstring[USB_SN_LENGTH];
00413 }
00414 #if (defined __ICCAVR32__)
00415 #pragma pack()
00416 #endif
00417 S_usb_serial_number;
00418
00419
00420
00421
00423 typedef
00424 #if (defined __ICCAVR32__)
00425 #pragma pack(1)
00426 #endif
00427 struct
00428 #if (defined __GNUC__)
00429 __attribute__((__packed__))
00430 #endif
00431 {
00432 U8 bLength;
00433 U8 bDescriptorType;
00434 U16 bcdHID;
00435 U8 bCountryCode;
00436 U8 bNumDescriptors;
00437 U8 bRDescriptorType;
00438 U16 wItemLength;
00439 }
00440 #if (defined __ICCAVR32__)
00441 #pragma pack()
00442 #endif
00443 S_usb_hid_descriptor;
00444
00445
00446 typedef
00447 #if (defined __ICCAVR32__)
00448 #pragma pack(1)
00449 #endif
00450 struct
00451 #if (defined __GNUC__)
00452 __attribute__((__packed__))
00453 #endif
00454 {
00455 S_usb_configuration_descriptor cfg;
00456 S_usb_interface_descriptor ifc_mouse;
00457 S_usb_hid_descriptor hid_mouse;
00458 S_usb_endpoint_descriptor ep1_mouse;
00459 }
00460 #if (defined __ICCAVR32__)
00461 #pragma pack()
00462 #endif
00463 S_usb_user_configuration_descriptor;
00464
00465
00466 #endif // _USB_DESCRIPTORS_H_