00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038 #include <USBD_Config.h>
00039
00040 #include <HIDMSDDriver.h>
00041 #include <HIDDKeyboard.h>
00042 #include <MSDFunction.h>
00043
00044
00045
00046
00047
00048
00049 #define HIDMSDDDriverDescriptors_PRODUCTID USBD_PID_HIDMSD
00050
00051 #define HIDMSDDDriverDescriptors_VENDORID USBD_VID_ATMEL
00052
00053 #define HIDMSDDDriverDescriptors_RELEASE 0x0003
00054
00055
00056
00057
00058
00059
00060
00061 #define MIN(a, b) ((a < b) ? a : b)
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073 static const USBDeviceDescriptor deviceDescriptor = {
00074
00075 sizeof(USBDeviceDescriptor),
00076 USBGenericDescriptor_DEVICE,
00077 USBDeviceDescriptor_USB2_00,
00078 0x00,
00079 0x00,
00080 0x00,
00081 CHIP_USB_ENDPOINTS_MAXPACKETSIZE(0),
00082 HIDMSDDDriverDescriptors_VENDORID,
00083 HIDMSDDDriverDescriptors_PRODUCTID,
00084 HIDMSDDDriverDescriptors_RELEASE,
00085 1,
00086 2,
00087 3,
00088 1
00089 };
00090
00091
00092 static const USBDeviceQualifierDescriptor qualifierDescriptor = {
00093
00094 sizeof(USBDeviceQualifierDescriptor),
00095 USBGenericDescriptor_DEVICEQUALIFIER,
00096 USBDeviceDescriptor_USB2_00,
00097 0x00,
00098 0x00,
00099 0x00,
00100 CHIP_USB_ENDPOINTS_MAXPACKETSIZE(0),
00101 0,
00102 0x00
00103 };
00104
00105
00106 static const HidMsdDriverConfigurationDescriptors configurationDescriptorsFS = {
00107
00108
00109 {
00110 sizeof(USBConfigurationDescriptor),
00111 USBGenericDescriptor_CONFIGURATION,
00112 sizeof(HidMsdDriverConfigurationDescriptors),
00113 HIDMSDDriverDescriptors_NUMINTERFACE,
00114 1,
00115 0,
00116 USBD_BMATTRIBUTES,
00117 USBConfigurationDescriptor_POWER(100)
00118 },
00119
00120
00121 {
00122 sizeof(USBInterfaceDescriptor),
00123 USBGenericDescriptor_INTERFACE,
00124 HIDMSDDriverDescriptors_HID_INTERFACE,
00125 0,
00126 2,
00127 HIDInterfaceDescriptor_CLASS,
00128 HIDInterfaceDescriptor_SUBCLASS_NONE,
00129 HIDInterfaceDescriptor_PROTOCOL_NONE,
00130 0
00131 },
00132
00133 {
00134 sizeof(HIDDescriptor1),
00135 HIDGenericDescriptor_HID,
00136 HIDDescriptor_HID1_11,
00137 0,
00138 1,
00139 HIDGenericDescriptor_REPORT,
00140 {HIDDKeyboard_REPORTDESCRIPTORSIZE}
00141 },
00142
00143 {
00144 sizeof(USBEndpointDescriptor),
00145 USBGenericDescriptor_ENDPOINT,
00146 USBEndpointDescriptor_ADDRESS(
00147 USBEndpointDescriptor_IN,
00148 HIDMSDD_Descriptors_INTERRUPTIN),
00149 USBEndpointDescriptor_INTERRUPT,
00150 sizeof(HIDDKeyboardInputReport),
00151 HIDDKeyboardDescriptors_INTERRUPTIN_POLLING_FS
00152 },
00153
00154 {
00155 sizeof(USBEndpointDescriptor),
00156 USBGenericDescriptor_ENDPOINT,
00157 USBEndpointDescriptor_ADDRESS(
00158 USBEndpointDescriptor_OUT,
00159 HIDMSDD_Descriptors_INTERRUPTOUT),
00160 USBEndpointDescriptor_INTERRUPT,
00161 sizeof(HIDDKeyboardOutputReport),
00162 HIDDKeyboardDescriptors_INTERRUPTIN_POLLING_FS
00163 },
00164
00165
00166 {
00167 sizeof(USBInterfaceDescriptor),
00168 USBGenericDescriptor_INTERFACE,
00169 HIDMSDDriverDescriptors_MSD_INTERFACE,
00170 0,
00171 2,
00172 MSInterfaceDescriptor_CLASS,
00173 MSInterfaceDescriptor_SCSI,
00174 MSInterfaceDescriptor_BULKONLY,
00175 0
00176 },
00177
00178 {
00179 sizeof(USBEndpointDescriptor),
00180 USBGenericDescriptor_ENDPOINT,
00181 USBEndpointDescriptor_ADDRESS(
00182 USBEndpointDescriptor_OUT,
00183 HIDMSDD_Descriptors_BULKOUT),
00184 USBEndpointDescriptor_BULK,
00185 MIN(CHIP_USB_ENDPOINTS_MAXPACKETSIZE(HIDMSDD_Descriptors_BULKOUT),
00186 USBEndpointDescriptor_MAXBULKSIZE_FS),
00187 0
00188 },
00189
00190 {
00191 sizeof(USBEndpointDescriptor),
00192 USBGenericDescriptor_ENDPOINT,
00193 USBEndpointDescriptor_ADDRESS(
00194 USBEndpointDescriptor_IN,
00195 HIDMSDD_Descriptors_BULKIN),
00196 USBEndpointDescriptor_BULK,
00197 MIN(CHIP_USB_ENDPOINTS_MAXPACKETSIZE(HIDMSDD_Descriptors_BULKIN),
00198 USBEndpointDescriptor_MAXBULKSIZE_FS),
00199 0
00200 }
00201
00202 };
00203
00204
00205
00206 static const HidMsdDriverConfigurationDescriptors configurationDescriptorsHS = {
00207
00208
00209 {
00210 sizeof(USBConfigurationDescriptor),
00211 USBGenericDescriptor_CONFIGURATION,
00212 sizeof(HidMsdDriverConfigurationDescriptors),
00213 HIDMSDDriverDescriptors_NUMINTERFACE,
00214 1,
00215 0,
00216 USBD_BMATTRIBUTES,
00217 USBConfigurationDescriptor_POWER(100)
00218 },
00219
00220
00221 {
00222 sizeof(USBInterfaceDescriptor),
00223 USBGenericDescriptor_INTERFACE,
00224 HIDMSDDriverDescriptors_HID_INTERFACE,
00225 0,
00226 2,
00227 HIDInterfaceDescriptor_CLASS,
00228 HIDInterfaceDescriptor_SUBCLASS_NONE,
00229 HIDInterfaceDescriptor_PROTOCOL_NONE,
00230 0
00231 },
00232
00233 {
00234 sizeof(HIDDescriptor1),
00235 HIDGenericDescriptor_HID,
00236 HIDDescriptor_HID1_11,
00237 0,
00238 1,
00239 HIDGenericDescriptor_REPORT,
00240 {HIDDKeyboard_REPORTDESCRIPTORSIZE}
00241 },
00242
00243 {
00244 sizeof(USBEndpointDescriptor),
00245 USBGenericDescriptor_ENDPOINT,
00246 USBEndpointDescriptor_ADDRESS(
00247 USBEndpointDescriptor_IN,
00248 HIDMSDD_Descriptors_INTERRUPTIN),
00249 USBEndpointDescriptor_INTERRUPT,
00250 sizeof(HIDDKeyboardInputReport),
00251 HIDDKeyboardDescriptors_INTERRUPTIN_POLLING_FS
00252 },
00253
00254 {
00255 sizeof(USBEndpointDescriptor),
00256 USBGenericDescriptor_ENDPOINT,
00257 USBEndpointDescriptor_ADDRESS(
00258 USBEndpointDescriptor_OUT,
00259 HIDMSDD_Descriptors_INTERRUPTOUT),
00260 USBEndpointDescriptor_INTERRUPT,
00261 sizeof(HIDDKeyboardOutputReport),
00262 HIDDKeyboardDescriptors_INTERRUPTIN_POLLING_FS
00263 },
00264
00265
00266 {
00267 sizeof(USBInterfaceDescriptor),
00268 USBGenericDescriptor_INTERFACE,
00269 HIDMSDDriverDescriptors_MSD_INTERFACE,
00270 0,
00271 2,
00272 MSInterfaceDescriptor_CLASS,
00273 MSInterfaceDescriptor_SCSI,
00274 MSInterfaceDescriptor_BULKONLY,
00275 0
00276 },
00277
00278 {
00279 sizeof(USBEndpointDescriptor),
00280 USBGenericDescriptor_ENDPOINT,
00281 USBEndpointDescriptor_ADDRESS(
00282 USBEndpointDescriptor_OUT,
00283 HIDMSDD_Descriptors_BULKOUT),
00284 USBEndpointDescriptor_BULK,
00285 MIN(CHIP_USB_ENDPOINTS_MAXPACKETSIZE(HIDMSDD_Descriptors_BULKOUT),
00286 USBEndpointDescriptor_MAXBULKSIZE_HS),
00287 0
00288 },
00289
00290 {
00291 sizeof(USBEndpointDescriptor),
00292 USBGenericDescriptor_ENDPOINT,
00293 USBEndpointDescriptor_ADDRESS(
00294 USBEndpointDescriptor_IN,
00295 HIDMSDD_Descriptors_BULKIN),
00296 USBEndpointDescriptor_BULK,
00297 MIN(CHIP_USB_ENDPOINTS_MAXPACKETSIZE(HIDMSDD_Descriptors_BULKIN),
00298 USBEndpointDescriptor_MAXBULKSIZE_HS),
00299 0
00300 }
00301
00302 };
00303
00304
00305 static const unsigned char languageIdDescriptor[] = {
00306
00307 USBStringDescriptor_LENGTH(1),
00308 USBGenericDescriptor_STRING,
00309 USBStringDescriptor_ENGLISH_US
00310 };
00311
00312
00313 static const unsigned char manufacturerDescriptor[] = {
00314
00315 USBStringDescriptor_LENGTH(5),
00316 USBGenericDescriptor_STRING,
00317 USBStringDescriptor_UNICODE('A'),
00318 USBStringDescriptor_UNICODE('t'),
00319 USBStringDescriptor_UNICODE('m'),
00320 USBStringDescriptor_UNICODE('e'),
00321 USBStringDescriptor_UNICODE('l')
00322 };
00323
00324
00325 static const unsigned char productDescriptor[] = {
00326
00327 USBStringDescriptor_LENGTH(14),
00328 USBGenericDescriptor_STRING,
00329 USBStringDescriptor_UNICODE('C'),
00330 USBStringDescriptor_UNICODE('o'),
00331 USBStringDescriptor_UNICODE('m'),
00332 USBStringDescriptor_UNICODE('p'),
00333 USBStringDescriptor_UNICODE('o'),
00334 USBStringDescriptor_UNICODE('s'),
00335 USBStringDescriptor_UNICODE('i'),
00336 USBStringDescriptor_UNICODE('t'),
00337 USBStringDescriptor_UNICODE('e'),
00338 USBStringDescriptor_UNICODE(' '),
00339 USBStringDescriptor_UNICODE('D'),
00340 USBStringDescriptor_UNICODE('e'),
00341 USBStringDescriptor_UNICODE('m'),
00342 USBStringDescriptor_UNICODE('o')
00343 };
00344
00345
00346 static const unsigned char serialNumberDescriptor[] = {
00347
00348 USBStringDescriptor_LENGTH(12),
00349 USBGenericDescriptor_STRING,
00350 USBStringDescriptor_UNICODE('0'),
00351 USBStringDescriptor_UNICODE('1'),
00352 USBStringDescriptor_UNICODE('2'),
00353 USBStringDescriptor_UNICODE('3'),
00354 USBStringDescriptor_UNICODE('4'),
00355 USBStringDescriptor_UNICODE('5'),
00356 USBStringDescriptor_UNICODE('6'),
00357 USBStringDescriptor_UNICODE('7'),
00358 USBStringDescriptor_UNICODE('8'),
00359 USBStringDescriptor_UNICODE('9'),
00360 USBStringDescriptor_UNICODE('A'),
00361 USBStringDescriptor_UNICODE('B')
00362 };
00363
00364
00365 static const unsigned char *stringDescriptors[] = {
00366
00367 languageIdDescriptor,
00368 manufacturerDescriptor,
00369 productDescriptor,
00370 serialNumberDescriptor,
00371 };
00372
00373
00374
00375
00376
00377
00378 const USBDDriverDescriptors hidmsddDriverDescriptors = {
00379
00380 &deviceDescriptor,
00381 (const USBConfigurationDescriptor *) &configurationDescriptorsFS,
00382 &qualifierDescriptor,
00383 0, 0,
00384 (const USBConfigurationDescriptor *) &configurationDescriptorsHS,
00385 &qualifierDescriptor,
00386 0,
00387 stringDescriptors,
00388 4
00389 };
00390
00391