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_mouse.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 32
00071 #define VENDOR_ID VID_ATMEL
00072 #define PRODUCT_ID PID_MegaHIDMouse
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 #if (USB_REMOTE_WAKEUP_FEATURE==ENABLE)
00088 #define CONF_ATTRIBUTES (USB_CONFIG_BUSPOWERED | USB_CONFIG_REMOTEWAKEUP)
00089 #else
00090 #define CONF_ATTRIBUTES (USB_CONFIG_BUSPOWERED)
00091 #endif
00092 #define MAX_POWER 50 // 100 mA
00093
00094
00095 #define INTERFACE_NB_MOUSE 0 // Interface's number
00096 #define ALTERNATE_MOUSE 0
00097 #define NB_ENDPOINT_MOUSE 1
00098 #define INTERFACE_CLASS_MOUSE HID_CLASS
00099 #define INTERFACE_SUB_CLASS_MOUSE NO_SUBCLASS // no Sub Class
00100 #define INTERFACE_PROTOCOL_MOUSE HID_PROTOCOL_MOUSE // Mouse
00101 #define INTERFACE_INDEX_MOUSE 0
00102
00103 #define DEVICE_STATUS USB_DEVICE_STATUS_BUS_POWERED
00104
00105 #define LANG_ID 0x00
00106
00107
00108
00109 #define ENDPOINT_NB_1 (EP_MOUSE_IN | USB_ENDPOINT_IN)
00110 #define EP_ATTRIBUTES_1 0x03 // BULK = 0x02, INTERUPT = 0x03
00111 #define EP_IN_LENGTH_1 8
00112 #define EP_SIZE_1 EP_IN_LENGTH_1
00113 #define EP_INTERVAL_1 0x02 // Interrupt polling interval from host
00114
00115
00116 #define USB_MN_LENGTH 5
00117 #define USB_MANUFACTURER_NAME \
00118 { Usb_unicode('A') \
00119 , Usb_unicode('T') \
00120 , Usb_unicode('M') \
00121 , Usb_unicode('E') \
00122 , Usb_unicode('L') \
00123 }
00124
00125 #define USB_PN_LENGTH 18
00126 #define USB_PRODUCT_NAME \
00127 { Usb_unicode('A') \
00128 ,Usb_unicode('V') \
00129 ,Usb_unicode('R') \
00130 ,Usb_unicode(' ') \
00131 ,Usb_unicode('U') \
00132 ,Usb_unicode('S') \
00133 ,Usb_unicode('B') \
00134 ,Usb_unicode(' ') \
00135 ,Usb_unicode('M') \
00136 ,Usb_unicode('O') \
00137 ,Usb_unicode('U') \
00138 ,Usb_unicode('S') \
00139 ,Usb_unicode('E') \
00140 ,Usb_unicode(' ') \
00141 ,Usb_unicode('D') \
00142 ,Usb_unicode('E') \
00143 ,Usb_unicode('M') \
00144 ,Usb_unicode('O') \
00145 }
00146
00147 #define USB_SN_LENGTH 0x05
00148 #define USB_SERIAL_NUMBER \
00149 { Usb_unicode('0') \
00150 ,Usb_unicode('0') \
00151 ,Usb_unicode('0') \
00152 ,Usb_unicode('0') \
00153 ,Usb_unicode('0') \
00154 }
00155
00156 #define LANGUAGE_ID 0x0409
00157
00158
00160 typedef struct
00161 {
00162 U8 bmRequestType;
00163 U8 bRequest;
00164 U16 wValue;
00165 U16 wIndex;
00166 U16 wLength;
00167 } S_UsbRequest;
00168
00170 typedef struct {
00171 U8 bLength;
00172 U8 bDescriptorType;
00173 U16 bscUSB;
00174 U8 bDeviceClass;
00175 U8 bDeviceSubClass;
00176 U8 bDeviceProtocol;
00177 U8 bMaxPacketSize0;
00178 U16 idVendor;
00179 U16 idProduct;
00180 U16 bcdDevice;
00181 U8 iManufacturer;
00182 U8 iProduct;
00183 U8 iSerialNumber;
00184 U8 bNumConfigurations;
00185 } S_usb_device_descriptor;
00186
00187
00189 typedef struct {
00190 U8 bLength;
00191 U8 bDescriptorType;
00192 U16 wTotalLength;
00193 U8 bNumInterfaces;
00194 U8 bConfigurationValue;
00195 U8 iConfiguration;
00196 U8 bmAttibutes;
00197 U8 MaxPower;
00198 } S_usb_configuration_descriptor;
00199
00200
00202 typedef struct {
00203 U8 bLength;
00204 U8 bDescriptorType;
00205 U8 bInterfaceNumber;
00206 U8 bAlternateSetting;
00207 U8 bNumEndpoints;
00208 U8 bInterfaceClass;
00209 U8 bInterfaceSubClass;
00210 U8 bInterfaceProtocol;
00211 U8 iInterface;
00212 } S_usb_interface_descriptor;
00213
00214
00216 typedef struct {
00217 U8 bLength;
00218 U8 bDescriptorType;
00219 U8 bEndpointAddress;
00220 U8 bmAttributes;
00221 U16 wMaxPacketSize;
00222 U8 bInterval;
00223 } S_usb_endpoint_descriptor;
00224
00225
00227 typedef struct {
00228 U8 bLength;
00229 U8 bDescriptorType;
00230 U16 wlangid;
00231 } S_usb_language_id;
00232
00233
00234
00235
00236
00237
00238 typedef struct {
00239 U8 bLength;
00240 U8 bDescriptorType;
00241 U16 wstring[USB_MN_LENGTH];
00242 } S_usb_manufacturer_string_descriptor;
00243
00244
00245
00246
00247
00248
00249 typedef struct {
00250 U8 bLength;
00251 U8 bDescriptorType;
00252 U16 wstring[USB_PN_LENGTH];
00253 } S_usb_product_string_descriptor;
00254
00255
00256
00257
00258 #if (USB_DEVICE_SN_USE==ENABLE)
00259
00260 typedef struct {
00261 U8 bLength;
00262 U8 bDescriptorType;
00263 #if (USE_DEVICE_SN_UNIQUE==ENABLE)
00264
00265 #else
00266 U16 wstring[USB_SN_LENGTH];
00267 #endif
00268 } S_usb_serial_number;
00269 #endif
00270
00271
00272
00273
00274 typedef struct {
00275 U8 bLength;
00276 U8 bDescriptorType;
00277 U16 bscHID;
00278 U8 bCountryCode;
00279 U8 bNumDescriptors;
00280 U8 bRDescriptorType;
00281 U16 wDescriptorLength;
00282 } S_usb_hid_descriptor;
00283
00284
00285
00286
00287 typedef struct
00288 {
00289 S_usb_configuration_descriptor cfg_mouse;
00290 S_usb_interface_descriptor ifc_mouse;
00291 S_usb_hid_descriptor hid_mouse;
00292 S_usb_endpoint_descriptor ep1_mouse;
00293 } S_usb_user_configuration_descriptor;
00294
00295
00296
00297
00298 #endif
00299