usb_descriptors.c

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 
00048 //_____ I N C L U D E S ____________________________________________________
00049 
00050 #include "config.h"
00051 #include "conf_usb.h"
00052 #include "lib_mcu/usb/usb_drv.h"
00053 #include "usb_descriptors.h"
00054 #include "modules/usb/device_chap9/usb_standard_request.h"
00055 #include "usb_specific_request.h"
00056 #if ((USB_DEVICE_SN_USE==ENABLE) && (USE_DEVICE_SN_UNIQUE==ENABLE))
00057 #include "lib_mcu/flash/flash_drv.h"
00058 #endif
00059 
00060 //_____ M A C R O S ________________________________________________________
00061 
00062 
00063 
00064 
00065 //_____ D E F I N I T I O N ________________________________________________
00066 
00067 // usb_user_device_descriptor
00068 code S_usb_device_descriptor usb_dev_desc =
00069 {
00070   sizeof(usb_dev_desc)
00071 , DESCRIPTOR_DEVICE
00072 , Usb_write_word_enum_struc(USB_SPECIFICATION)
00073 , DEVICE_CLASS
00074 , DEVICE_SUB_CLASS
00075 , DEVICE_PROTOCOL
00076 , EP_CONTROL_LENGTH
00077 , Usb_write_word_enum_struc(VENDOR_ID)
00078 , Usb_write_word_enum_struc(PRODUCT_ID)
00079 , Usb_write_word_enum_struc(RELEASE_NUMBER)
00080 , MAN_INDEX
00081 , PROD_INDEX
00082 , SN_INDEX
00083 , NB_CONFIGURATION
00084 };
00085 
00086 // usb_user_configuration_descriptor FS
00087 code S_usb_user_configuration_descriptor usb_conf_desc = {
00088  { sizeof(S_usb_configuration_descriptor)
00089  , DESCRIPTOR_CONFIGURATION
00090  , Usb_write_word_enum_struc(sizeof(S_usb_configuration_descriptor)\
00091        +sizeof(S_usb_interface_descriptor)   \
00092        +sizeof(S_usb_hid_descriptor)         \
00093        +sizeof(S_usb_endpoint_descriptor)    \
00094        +sizeof(S_usb_endpoint_descriptor))
00095  , NB_INTERFACE
00096  , CONF_NB
00097  , CONF_INDEX
00098  , CONF_ATTRIBUTES
00099  , MAX_POWER
00100  }
00101  ,
00102  { sizeof(S_usb_interface_descriptor)
00103  , DESCRIPTOR_INTERFACE
00104  , INTERFACE_NB
00105  , ALTERNATE
00106  , NB_ENDPOINT
00107  , INTERFACE_CLASS
00108  , INTERFACE_SUB_CLASS
00109  , INTERFACE_PROTOCOL
00110  , INTERFACE_INDEX
00111  }
00112  ,
00113  { sizeof(S_usb_hid_descriptor)
00114  , DESCRIPTOR_HID
00115  , HID_BDC
00116  , HID_NO_COUNTRY_CODE
00117  , HID_CLASS_DESC_NB_DEFAULT
00118  , DESCRIPTOR_REPORT
00119  , Usb_write_word_enum_struc(sizeof(S_usb_hid_report_descriptor))
00120  }
00121  ,
00122  { sizeof(S_usb_endpoint_descriptor)
00123  , DESCRIPTOR_ENDPOINT
00124  , ENDPOINT_NB_1
00125  , EP_ATTRIBUTES_1
00126  , Usb_write_word_enum_struc(EP_SIZE_1)
00127  , EP_INTERVAL_1
00128  }
00129  ,
00130   { sizeof(S_usb_endpoint_descriptor)
00131  , DESCRIPTOR_ENDPOINT
00132  , ENDPOINT_NB_2
00133  , EP_ATTRIBUTES_2
00134  , Usb_write_word_enum_struc(EP_SIZE_2)
00135  , EP_INTERVAL_2
00136  }
00137 };
00138 
00139 
00140 
00141                                       // usb_user_manufacturer_string_descriptor
00142 code S_usb_manufacturer_string_descriptor usb_user_manufacturer_string_descriptor = {
00143   sizeof(usb_user_manufacturer_string_descriptor)
00144 , DESCRIPTOR_STRING
00145 , USB_MANUFACTURER_NAME
00146 };
00147 
00148 
00149                                       // usb_user_product_string_descriptor
00150 
00151 code S_usb_product_string_descriptor usb_user_product_string_descriptor = {
00152   sizeof(usb_user_product_string_descriptor)
00153 , DESCRIPTOR_STRING
00154 , USB_PRODUCT_NAME
00155 };
00156 
00157 
00158                                       // usb_user_serial_number
00159 #if (USB_DEVICE_SN_USE==ENABLE)
00160 code S_usb_serial_number usb_user_serial_number = {
00161 #if (USE_DEVICE_SN_UNIQUE==ENABLE)
00162   sizeof(usb_user_serial_number)+4*SN_LENGTH
00163 , DESCRIPTOR_STRING
00164 #else
00165 sizeof(usb_user_serial_number)
00166 , DESCRIPTOR_STRING
00167 , USB_SERIAL_NUMBER
00168 #endif
00169 };
00170 #endif
00171 
00172                                       // usb_user_language_id
00173 
00174 code S_usb_language_id usb_user_language_id = {
00175   sizeof(usb_user_language_id)
00176 , DESCRIPTOR_STRING
00177 , Usb_write_word_enum_struc(LANGUAGE_ID)
00178 };
00179 
00180 
00181 code S_usb_hid_report_descriptor usb_hid_report_descriptor = {{
00182       0x06, 0xFF, 0xFF,         // 04|2   , Usage Page (vendordefined?)
00183       0x09, 0x01,               // 08|1   , Usage      (vendordefined
00184       0xA1, 0x01,               // A0|1   , Collection (Application)
00185       // IN report
00186       0x09, 0x02,               // 08|1   , Usage      (vendordefined)
00187       0x09, 0x03,               // 08|1   , Usage      (vendordefined)
00188       0x15, 0x00,               // 14|1   , Logical Minimum(0 for signed byte?)
00189       0x26 ,0xFF,0x00,           // 24|1   , Logical Maximum(255 for signed byte?)
00190       0x75, 0x08,               // 74|1   , Report Size(8) = field size in bits = 1 byte
00191       0x95, LENGTH_OF_REPORT_IN,   // 94|1:ReportCount(size) = repeat count of previous item
00192       0x81, 0x02,               // 80|1: IN report (Data,Variable, Absolute)
00193       // OUT report
00194       0x09, 0x04,               // 08|1   , Usage      (vendordefined)
00195       0x09, 0x05,               // 08|1   , Usage      (vendordefined)
00196       0x15, 0x00,               // 14|1   , Logical Minimum(0 for signed byte?)
00197       0x26, 0xFF,0x00,           // 24|1   , Logical Maximum(255 for signed byte?)
00198       0x75, 0x08,               // 74|1   , Report Size(8) = field size in bits = 1 byte
00199       0x95, LENGTH_OF_REPORT_OUT,   // 94|1:ReportCount(size) = repeat count of previous item
00200       0x91, 0x02,               // 90|1: OUT report (Data,Variable, Absolute)
00201       // Feature report
00202       0x09, 0x06,               // 08|1   , Usage      (vendordefined)
00203       0x09, 0x07,               // 08|1   , Usage      (vendordefined)
00204       0x15, 0x00,               // 14|1   , LogicalMinimum(0 for signed byte)
00205       0x26, 0xFF,0x00,          // 24|1   , Logical Maximum(255 for signed byte)
00206       0x75, 0x08,               // 74|1   , Report Size(8) =field size in bits = 1 byte
00207       0x95, 0x04,               // 94|1:ReportCount
00208       0xB1, 0x02,               // B0|1:   Feature report
00209       0xC0                      // C0|0    , End Collection
00210  }};
00211 
00212 
00213 

Generated on Fri Sep 11 14:51:55 2009 for ATMEL by  doxygen 1.5.3