- Main Page
- Modules
- Data Structures
- Files
- Related Pages

# usb_descriptors.h

Go to the documentation of this file.

    00001 /*This file has been prepared for Doxygen automatic documentation generation.*/
    00016
    00017 /* Copyright (c) 2007, Atmel Corporation All rights reserved.
    00018  *
    00019  * Redistribution and use in source and binary forms, with or without
    00020  * modification, are permitted provided that the following conditions are met:
    00021  *
    00022  * 1. Redistributions of source code must retain the above copyright notice,
    00023  * this list of conditions and the following disclaimer.
    00024  *
    00025  * 2. Redistributions in binary form must reproduce the above copyright notice,
    00026  * this list of conditions and the following disclaimer in the documentation
    00027  * and/or other materials provided with the distribution.
    00028  *
    00029  * 3. The name of ATMEL may not be used to endorse or promote products derived
    00030  * from this software without specific prior written permission.
    00031  *
    00032  * THIS SOFTWARE IS PROVIDED BY ATMEL ``AS IS'' AND ANY EXPRESS OR IMPLIED
    00033  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
    00034  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY AND
    00035  * SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT,
    00036  * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    00037  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    00038  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    00039  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    00040  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
    00041  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    00042  */
    00043
    00044 #ifndef _USB_DESCRIPTORS_H_
    00045 #define _USB_DESCRIPTORS_H_
    00046
    00047 //_____ I N C L U D E S ____________________________________________________
    00048
    00049 #include "config.h"
    00050 #include "modules/usb/device_chap9/usb_standard_request.h"
    00051 #include "conf_usb.h"
    00052
    00053 //_____ M A C R O S ________________________________________________________
    00054
    00055 #define Usb_get_dev_desc_pointer()        (&(usb_dev_desc.bLength))
    00056 #define Usb_get_dev_desc_length()         (sizeof (usb_dev_desc))
    00057 #define Usb_get_conf_desc_pointer()       (&(usb_conf_desc.cfg.bLength))
    00058 #define Usb_get_conf_desc_length()        (sizeof (usb_conf_desc))
    00059
    00060 //_____ U S B    D E F I N E _______________________________________________
    00061
    00062                   // USB Device descriptor
    00063 #define USB_SPECIFICATION     0x0200
    00064 #define DEVICE_CLASS          0      // each configuration has its own class
    00065 #define DEVICE_SUB_CLASS      0      // each configuration has its own sub-class
    00066 #define DEVICE_PROTOCOL       0      // each configuration has its own protocol
    00067 #define EP_CONTROL_LENGTH     64
    00068 #define VENDOR_ID             VID_ATMEL
    00069 #define PRODUCT_ID            PID_MegaHIDGeneric
    00070 #define RELEASE_NUMBER        0x1000
    00071 #define MAN_INDEX             0x01
    00072 #define PROD_INDEX            0x02
    00073 #if (USB_DEVICE_SN_USE==ENABLE)
    00074 #define SN_INDEX              0x03
    00075 #else
    00076 #define SN_INDEX              0x00  // No serial number field
    00077 #endif
    00078 #define NB_CONFIGURATION      1
    00079
    00080                // HID generic CONFIGURATION
    00081 #define NB_INTERFACE       1           // Number of interfaces
    00082 #define CONF_NB            1
    00083 #define CONF_INDEX         0
    00084 #define CONF_ATTRIBUTES    USB_CONFIG_BUSPOWERED
    00085 #define MAX_POWER          50          // 100 mA
    00086
    00087              // USB Interface descriptor
    00088 #define INTERFACE_NB        0          // Interface's number
    00089 #define ALTERNATE           0
    00090 #define NB_ENDPOINT         2
    00091 #define INTERFACE_CLASS     HID_CLASS // HID Class
    00092 #define INTERFACE_SUB_CLASS NO_SUBCLASS
    00093 #define INTERFACE_PROTOCOL  NO_PROTOCOL
    00094 #define INTERFACE_INDEX     0
    00095
    00096              // USB Endpoint 1 descriptor FS
    00097 #define ENDPOINT_NB_1       (EP_HID_IN | USB_ENDPOINT_IN)
    00098 #define EP_ATTRIBUTES_1     0x03          // BULK = 0x02, INTERUPT = 0x03
    00099 #define EP_IN_LENGTH        8
    00100 #define EP_SIZE_1           EP_IN_LENGTH
    00101 #define EP_INTERVAL_1       20 //interrupt pooling from host
    00102
    00103              // USB Endpoint 1 descriptor FS
    00104 #define ENDPOINT_NB_2       (EP_HID_OUT)
    00105 #define EP_ATTRIBUTES_2     0x03          // BULK = 0x02, INTERUPT = 0x03
    00106 #define EP_OUT_LENGTH       8
    00107 #define EP_SIZE_2           EP_OUT_LENGTH
    00108 #define EP_INTERVAL_2       20 //interrupt pooling from host
    00109
    00110 #define SIZE_OF_REPORT        0x35
    00111 #define LENGTH_OF_REPORT_IN   0x08
    00112 #define LENGTH_OF_REPORT_OUT  0x08
    00113
    00114 #define DEVICE_STATUS         USB_DEVICE_STATUS_BUS_POWERED
    00115
    00116 #define LANG_ID               0x00
    00117
    00118
    00119 #define USB_MN_LENGTH         5
    00120 #define USB_MANUFACTURER_NAME \
    00121 { Usb_unicode('A') \
    00122 , Usb_unicode('T') \
    00123 , Usb_unicode('M') \
    00124 , Usb_unicode('E') \
    00125 , Usb_unicode('L') \
    00126 }
    00127
    00128 #define USB_PN_LENGTH         16
    00129 #define USB_PRODUCT_NAME \
    00130 { Usb_unicode('A') \
    00131  ,Usb_unicode('V') \
    00132  ,Usb_unicode('R') \
    00133  ,Usb_unicode(' ') \
    00134  ,Usb_unicode('U') \
    00135  ,Usb_unicode('S') \
    00136  ,Usb_unicode('B') \
    00137  ,Usb_unicode(' ') \
    00138  ,Usb_unicode('H') \
    00139  ,Usb_unicode('I') \
    00140  ,Usb_unicode('D') \
    00141  ,Usb_unicode(' ') \
    00142  ,Usb_unicode('D') \
    00143  ,Usb_unicode('E') \
    00144  ,Usb_unicode('M') \
    00145  ,Usb_unicode('O') \
    00146 }
    00147
    00148 #define USB_SN_LENGTH         0x05
    00149 #define USB_SERIAL_NUMBER \
    00150 { Usb_unicode('0') \
    00151  ,Usb_unicode('0') \
    00152  ,Usb_unicode('0') \
    00153  ,Usb_unicode('0') \
    00154  ,Usb_unicode('0') \
    00155 }
    00156
    00157 #define LANGUAGE_ID           0x0409
    00158
    00159
    00161 typedef struct
    00162 {
    00163    U8      bmRequestType;
    00164    U8      bRequest;
    00165    U16     wValue;
    00166    U16     wIndex;
    00167    U16     wLength;
    00168 }  S_UsbRequest;
    00169
    00171 typedef struct {
    00172    U8      bLength;
    00173    U8      bDescriptorType;
    00174    U16     bscUSB;
    00175    U8      bDeviceClass;
    00176    U8      bDeviceSubClass;
    00177    U8      bDeviceProtocol;
    00178    U8      bMaxPacketSize0;
    00179    U16     idVendor;
    00180    U16     idProduct;
    00181    U16     bcdDevice;
    00182    U8      iManufacturer;
    00183    U8      iProduct;
    00184    U8      iSerialNumber;
    00185    U8      bNumConfigurations;
    00186 }  S_usb_device_descriptor;
    00187
    00188
    00190 typedef struct {
    00191    U8      bLength;
    00192    U8      bDescriptorType;
    00193    U16     wTotalLength;
    00194    U8      bNumInterfaces;
    00195    U8      bConfigurationValue;
    00196    U8      iConfiguration;
    00197    U8      bmAttibutes;
    00198    U8      MaxPower;
    00199 }  S_usb_configuration_descriptor;
    00200
    00201
    00203 typedef struct {
    00204    U8      bLength;
    00205    U8      bDescriptorType;
    00206    U8      bInterfaceNumber;
    00207    U8      bAlternateSetting;
    00208    U8      bNumEndpoints;
    00209    U8      bInterfaceClass;
    00210    U8      bInterfaceSubClass;
    00211    U8      bInterfaceProtocol;
    00212    U8      iInterface;
    00213 }  S_usb_interface_descriptor;
    00214
    00215
    00217 typedef struct {
    00218    U8      bLength;
    00219    U8      bDescriptorType;
    00220    U8      bEndpointAddress;
    00221    U8      bmAttributes;
    00222    U16     wMaxPacketSize;
    00223    U8      bInterval;
    00224 } S_usb_endpoint_descriptor;
    00225
    00226
    00228 typedef struct {
    00229    U8      bLength;
    00230    U8      bDescriptorType;
    00231    U16     wlangid;
    00232 }  S_usb_language_id;
    00233
    00234
    00235 //_____ U S B   M A N U F A C T U R E R   D E S C R I P T O R _______________
    00236
    00237
    00238 //struct usb_st_manufacturer
    00239 typedef struct {
    00240    U8  bLength;               // size of this descriptor in bytes
    00241    U8  bDescriptorType;       // STRING descriptor type
    00242    U16 wstring[USB_MN_LENGTH];// unicode characters
    00243 } S_usb_manufacturer_string_descriptor;
    00244
    00245
    00246 //_____ U S B   P R O D U C T   D E S C R I P T O R _________________________
    00247
    00248
    00249 //struct usb_st_product
    00250 typedef struct {
    00251    U8  bLength;               // size of this descriptor in bytes
    00252    U8  bDescriptorType;       // STRING descriptor type
    00253    U16 wstring[USB_PN_LENGTH];// unicode characters
    00254 } S_usb_product_string_descriptor;
    00255
    00256
    00257 //_____ U S B   S E R I A L   N U M B E R   D E S C R I P T O R _____________
    00258
    00259
    00260 #if (USB_DEVICE_SN_USE==ENABLE)
    00261 //struct usb_st_serial_number
    00262 typedef struct {
    00263    U8  bLength;               // size of this descriptor in bytes
    00264    U8  bDescriptorType;       // STRING descriptor type
    00265 #if (USE_DEVICE_SN_UNIQUE==ENABLE)
    00266
    00267 #else
    00268    U16 wstring[USB_SN_LENGTH];// unicode characters
    00269 #endif
    00270 } S_usb_serial_number;
    00271 #endif
    00272
    00273
    00274 /*_____ U S B   H I D   D E S C R I P T O R __________________________________*/
    00275
    00276 typedef struct {
    00277   U8  bLength;               /* Size of this descriptor in bytes */
    00278   U8  bDescriptorType;       /* HID descriptor type */
    00279   U16 bscHID;                /* Binay Coded Decimal Spec. release */
    00280   U8  bCountryCode;          /* Hardware target country */
    00281   U8  bNumDescriptors;       /* Number of HID class descriptors to follow */
    00282   U8  bRDescriptorType;      /* Report descriptor type */
    00283   U16 wDescriptorLength;     /* Total length of Report descriptor */
    00284 } S_usb_hid_descriptor;
    00285
    00286
    00287
    00288
    00289
    00290
    00291 typedef struct
    00292 {
    00293    S_usb_configuration_descriptor cfg;
    00294    S_usb_interface_descriptor     ifc;
    00295    S_usb_hid_descriptor           hid;
    00296    S_usb_endpoint_descriptor      ep1;
    00297    S_usb_endpoint_descriptor      ep2;
    00298 } S_usb_user_configuration_descriptor;
    00299
    00300
    00301
    00302
    00303 #endif
    00304