00001
00016
00017
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 #ifndef _USB_DESCRIPTORS_H_
00048 #define _USB_DESCRIPTORS_H_
00049
00050
00051
00052 #include "config.h"
00053 #include "modules/usb/device_chap9/usb_standard_request.h"
00054 #include "conf_usb.h"
00055
00056
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
00064
00065
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 64
00071 #define VENDOR_ID VID_ATMEL
00072 #define PRODUCT_ID PID_MegaMS
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
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
00091 #define INTERFACE_NB 0 // Interface's number
00092 #define ALTERNATE 0
00093 #define NB_ENDPOINT 2
00094 #define INTERFACE_CLASS MS_CLASS // Mass Storage Class
00095 #define INTERFACE_SUB_CLASS MS_SUB_CLASS6 // SCSI transparent Command Set
00096 #define INTERFACE_PROTOCOL MS_PROTOCOL // Bulk-Only Transport
00097 #define INTERFACE_INDEX 0
00098
00099
00100 #define ENDPOINT_NB_1 (EP_MS_IN | USB_ENDPOINT_IN)
00101 #define EP_ATTRIBUTES_1 0x02 // BULK = 0x02, INTERUPT = 0x03
00102 #define EP_IN_LENGTH 64
00103 #define EP_SIZE_1 EP_IN_LENGTH
00104 #define EP_INTERVAL_1 0x00
00105
00106
00107
00108 #define ENDPOINT_NB_2 EP_MS_OUT
00109 #define EP_ATTRIBUTES_2 0x02 // BULK = 0x02, INTERUPT = 0x03
00110 #define EP_IN_LENGTH 64
00111 #define EP_SIZE_2 EP_IN_LENGTH
00112 #define EP_INTERVAL_2 0x00
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('S') \
00139 ,Usb_unicode('T') \
00140 ,Usb_unicode('O') \
00141 ,Usb_unicode('R') \
00142 ,Usb_unicode('A') \
00143 ,Usb_unicode('G') \
00144 ,Usb_unicode('E') \
00145 ,Usb_unicode(' ') \
00146 }
00147
00148 #define USB_SN_LENGTH 0x0D
00149
00150 #define USB_SERIAL_NUMBER \
00151 { Usb_unicode('0') \
00152 ,Usb_unicode('0') \
00153 ,Usb_unicode('0') \
00154 ,Usb_unicode('0') \
00155 ,Usb_unicode('0') \
00156 ,Usb_unicode('0') \
00157 ,Usb_unicode('0') \
00158 ,Usb_unicode('0') \
00159 ,Usb_unicode('0') \
00160 ,Usb_unicode('0') \
00161 ,Usb_unicode('0') \
00162 ,Usb_unicode('0') \
00163 ,Usb_unicode('0') \
00164 }
00165
00166 #define LANGUAGE_ID 0x0409
00167
00168
00170 typedef struct
00171 {
00172 U8 bmRequestType;
00173 U8 bRequest;
00174 U16 wValue;
00175 U16 wIndex;
00176 U16 wLength;
00177 } S_UsbRequest;
00178
00180 typedef struct {
00181 U8 bLength;
00182 U8 bDescriptorType;
00183 U16 bscUSB;
00184 U8 bDeviceClass;
00185 U8 bDeviceSubClass;
00186 U8 bDeviceProtocol;
00187 U8 bMaxPacketSize0;
00188 U16 idVendor;
00189 U16 idProduct;
00190 U16 bcdDevice;
00191 U8 iManufacturer;
00192 U8 iProduct;
00193 U8 iSerialNumber;
00194 U8 bNumConfigurations;
00195 } S_usb_device_descriptor;
00196
00197
00199 typedef struct {
00200 U8 bLength;
00201 U8 bDescriptorType;
00202 U16 wTotalLength;
00203 U8 bNumInterfaces;
00204 U8 bConfigurationValue;
00205 U8 iConfiguration;
00206 U8 bmAttibutes;
00207 U8 MaxPower;
00208 } S_usb_configuration_descriptor;
00209
00210
00212 typedef struct {
00213 U8 bLength;
00214 U8 bDescriptorType;
00215 U8 bInterfaceNumber;
00216 U8 bAlternateSetting;
00217 U8 bNumEndpoints;
00218 U8 bInterfaceClass;
00219 U8 bInterfaceSubClass;
00220 U8 bInterfaceProtocol;
00221 U8 iInterface;
00222 } S_usb_interface_descriptor;
00223
00224
00226 typedef struct {
00227 U8 bLength;
00228 U8 bDescriptorType;
00229 U8 bEndpointAddress;
00230 U8 bmAttributes;
00231 U16 wMaxPacketSize;
00232 U8 bInterval;
00233 } S_usb_endpoint_descriptor;
00234
00235
00237 typedef struct {
00238 U8 bLength;
00239 U8 bDescriptorType;
00240 U16 wlangid;
00241 } S_usb_language_id;
00242
00243
00244
00245
00246
00247
00248 typedef struct {
00249 U8 bLength;
00250 U8 bDescriptorType;
00251 U16 wstring[USB_MN_LENGTH];
00252 } S_usb_manufacturer_string_descriptor;
00253
00254
00255
00256
00257
00258
00259 typedef struct {
00260 U8 bLength;
00261 U8 bDescriptorType;
00262 U16 wstring[USB_PN_LENGTH];
00263 } S_usb_product_string_descriptor;
00264
00265
00266
00267
00268 #if (USB_DEVICE_SN_USE==ENABLE)
00269
00270 typedef struct {
00271 U8 bLength;
00272 U8 bDescriptorType;
00273 #if (USE_DEVICE_SN_UNIQUE==ENABLE)
00274
00275 #else
00276 U16 wstring[USB_SN_LENGTH];
00277 #endif
00278 } S_usb_serial_number;
00279 #endif
00280
00281
00282
00283
00284 typedef struct
00285 {
00286 S_usb_configuration_descriptor cfg;
00287 S_usb_interface_descriptor ifc;
00288 S_usb_endpoint_descriptor ep1;
00289 S_usb_endpoint_descriptor ep2;
00290 } S_usb_user_configuration_descriptor;
00291
00292
00293
00294
00295
00296
00297
00298 #endif
00299