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 #ifndef _USB_DESCRIPTORS_H_
00045 #define _USB_DESCRIPTORS_H_
00046
00047
00048
00049 #include "config.h"
00050 #include "modules/usb/device_chap9/usb_standard_request.h"
00051 #include "conf_usb.h"
00052
00053
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
00061
00062
00063 #define USB_SPECIFICATION 0x0200
00064 #define DEVICE_CLASS CDC_GLOB_CLASS // CDC 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_MegaCDC
00070 #define RELEASE_NUMBER 0x1000
00071 #define MAN_INDEX 0x00
00072 #define PROD_INDEX 0x00
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
00081 #define NB_INTERFACE 2 // 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
00088 #define INTERFACE0_NB 0
00089 #define ALTERNATE0 0
00090 #define NB_ENDPOINT0 1
00091 #define INTERFACE0_CLASS CDC_COMM_CLASS // CDC ACM Com
00092 #define INTERFACE0_SUB_CLASS CDC_COMM_SUBCLASS
00093 #define INTERFACE0_PROTOCOL CDC_COMM_PROTOCOL
00094 #define INTERFACE0_INDEX 0
00095
00096
00097 #define INTERFACE1_NB 1
00098 #define ALTERNATE1 0
00099 #define NB_ENDPOINT1 2
00100 #define INTERFACE1_CLASS CDC_DATA_CLASS // CDC ACM Data
00101 #define INTERFACE1_SUB_CLASS CDC_DATA_SUBCLASS
00102 #define INTERFACE1_PROTOCOL CDC_DATA_PROTOCOL
00103 #define INTERFACE1_INDEX 0
00104
00105
00106
00107 #define INT_EP_SIZE 0x20
00108 #define ENDPOINT_NB_3 USB_ENDPOINT_IN | INT_EP
00109 #define EP_ATTRIBUTES_3 0x03 // BULK = 0x02, INTERUPT = 0x03
00110 #define EP_SIZE_3 INT_EP_SIZE
00111 #define EP_INTERVAL_3 0xFF //ms interrupt pooling from host
00112
00113
00114
00115 #define TX_EP_SIZE 0x40
00116 #define ENDPOINT_NB_1 USB_ENDPOINT_IN | TX_EP
00117 #define EP_ATTRIBUTES_1 0x02 // BULK = 0x02, INTERUPT = 0x03
00118 #define EP_SIZE_1 TX_EP_SIZE
00119 #define EP_INTERVAL_1 0x00
00120
00121
00122
00123 #define RX_EP_SIZE 0x40
00124 #define ENDPOINT_NB_2 RX_EP
00125 #define EP_ATTRIBUTES_2 0x02 // BULK = 0x02, INTERUPT = 0x03
00126 #define EP_SIZE_2 RX_EP_SIZE
00127 #define EP_INTERVAL_2 0x00
00128
00129
00130
00131 #define DEVICE_STATUS USB_DEVICE_STATUS_BUS_POWERED
00132
00133 #define LANG_ID 0x00
00134
00135
00136
00137
00138 #define USB_MN_LENGTH 5
00139 #define USB_MANUFACTURER_NAME \
00140 { Usb_unicode('A') \
00141 , Usb_unicode('T') \
00142 , Usb_unicode('M') \
00143 , Usb_unicode('E') \
00144 , Usb_unicode('L') \
00145 }
00146
00147 #define USB_PN_LENGTH 16
00148 #define USB_PRODUCT_NAME \
00149 { Usb_unicode('A') \
00150 ,Usb_unicode('V') \
00151 ,Usb_unicode('R') \
00152 ,Usb_unicode(' ') \
00153 ,Usb_unicode('U') \
00154 ,Usb_unicode('S') \
00155 ,Usb_unicode('B') \
00156 ,Usb_unicode(' ') \
00157 ,Usb_unicode('C') \
00158 ,Usb_unicode('D') \
00159 ,Usb_unicode('C') \
00160 ,Usb_unicode(' ') \
00161 ,Usb_unicode('D') \
00162 ,Usb_unicode('E') \
00163 ,Usb_unicode('M') \
00164 ,Usb_unicode('O') \
00165 }
00166
00167 #define USB_SN_LENGTH 0x05
00168 #define USB_SERIAL_NUMBER \
00169 { Usb_unicode('0') \
00170 ,Usb_unicode('0') \
00171 ,Usb_unicode('0') \
00172 ,Usb_unicode('0') \
00173 ,Usb_unicode('0') \
00174 }
00175
00176 #define LANGUAGE_ID 0x0409
00177
00178
00180 typedef struct
00181 {
00182 U8 bmRequestType;
00183 U8 bRequest;
00184 U16 wValue;
00185 U16 wIndex;
00186 U16 wLength;
00187 } S_UsbRequest;
00188
00190 typedef struct {
00191 U8 bLength;
00192 U8 bDescriptorType;
00193 U16 bscUSB;
00194 U8 bDeviceClass;
00195 U8 bDeviceSubClass;
00196 U8 bDeviceProtocol;
00197 U8 bMaxPacketSize0;
00198 U16 idVendor;
00199 U16 idProduct;
00200 U16 bcdDevice;
00201 U8 iManufacturer;
00202 U8 iProduct;
00203 U8 iSerialNumber;
00204 U8 bNumConfigurations;
00205 } S_usb_device_descriptor;
00206
00207
00209 typedef struct {
00210 U8 bLength;
00211 U8 bDescriptorType;
00212 U16 wTotalLength;
00213 U8 bNumInterfaces;
00214 U8 bConfigurationValue;
00215 U8 iConfiguration;
00216 U8 bmAttibutes;
00217 U8 MaxPower;
00218 } S_usb_configuration_descriptor;
00219
00220
00222 typedef struct {
00223 U8 bLength;
00224 U8 bDescriptorType;
00225 U8 bInterfaceNumber;
00226 U8 bAlternateSetting;
00227 U8 bNumEndpoints;
00228 U8 bInterfaceClass;
00229 U8 bInterfaceSubClass;
00230 U8 bInterfaceProtocol;
00231 U8 iInterface;
00232 } S_usb_interface_descriptor;
00233
00234
00236 typedef struct {
00237 U8 bLength;
00238 U8 bDescriptorType;
00239 U8 bEndpointAddress;
00240 U8 bmAttributes;
00241 U16 wMaxPacketSize;
00242 U8 bInterval;
00243 } S_usb_endpoint_descriptor;
00244
00245
00247 typedef struct {
00248 U8 bLength;
00249 U8 bDescriptorType;
00250 U16 wlangid;
00251 } S_usb_language_id;
00252
00253
00254
00255
00256
00257
00258 typedef struct {
00259 U8 bLength;
00260 U8 bDescriptorType;
00261 U16 wstring[USB_MN_LENGTH];
00262 } S_usb_manufacturer_string_descriptor;
00263
00264
00265
00266
00267
00268
00269 typedef struct {
00270 U8 bLength;
00271 U8 bDescriptorType;
00272 U16 wstring[USB_PN_LENGTH];
00273 } S_usb_product_string_descriptor;
00274
00275
00276
00277
00278
00279 #if (USB_DEVICE_SN_USE==ENABLE)
00280
00281 typedef struct {
00282 U8 bLength;
00283 U8 bDescriptorType;
00284 #if (USE_DEVICE_SN_UNIQUE==ENABLE)
00285
00286 #else
00287 U16 wstring[USB_SN_LENGTH];
00288 #endif
00289 } S_usb_serial_number;
00290 #endif
00291
00292
00293
00294
00295 typedef struct
00296 {
00297 S_usb_configuration_descriptor cfg;
00298 S_usb_interface_descriptor ifc0;
00299 U8 CS_INTERFACE[19];
00300 S_usb_endpoint_descriptor ep3;
00301 S_usb_interface_descriptor ifc1;
00302 S_usb_endpoint_descriptor ep1;
00303 S_usb_endpoint_descriptor ep2;
00304 } S_usb_user_configuration_descriptor;
00305
00306
00307
00308
00309
00310
00311
00312 #endif
00313