usb_descriptors.h

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

Generated on Fri Sep 11 14:27:17 2009 for ATMEL by  doxygen 1.5.3