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
00039 #include <board.h>
00040
00041 #include <USBD_Config.h>
00042
00043 #include <HIDAUDDDriver.h>
00044 #include <HIDDKeyboard.h>
00045 #include <AUDDFunction.h>
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060 #define AUDDSpeakerDriverDescriptors_VENDORID USBD_VID_ATMEL
00061
00062 #define AUDDSpeakerDriverDescriptors_PRODUCTID USBD_PID_HIDAUDIO
00063
00064 #define AUDDSpeakerDriverDescriptors_RELEASE USBD_RELEASE_1_00
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077 const USBDeviceDescriptor deviceDescriptor = {
00078
00079 sizeof(USBDeviceDescriptor),
00080 USBGenericDescriptor_DEVICE,
00081 USBDeviceDescriptor_USB2_00,
00082 AUDDeviceDescriptor_CLASS,
00083 AUDDeviceDescriptor_SUBCLASS,
00084 AUDDeviceDescriptor_PROTOCOL,
00085 CHIP_USB_ENDPOINTS_MAXPACKETSIZE(0),
00086 AUDDSpeakerDriverDescriptors_VENDORID,
00087 AUDDSpeakerDriverDescriptors_PRODUCTID,
00088 AUDDSpeakerDriverDescriptors_RELEASE,
00089 1,
00090 2,
00091 3,
00092 1
00093 };
00094
00095
00096 static const USBDeviceQualifierDescriptor qualifierDescriptor = {
00097
00098 sizeof(USBDeviceQualifierDescriptor),
00099 USBGenericDescriptor_DEVICEQUALIFIER,
00100 USBDeviceDescriptor_USB2_00,
00101 AUDDeviceDescriptor_CLASS,
00102 AUDDeviceDescriptor_SUBCLASS,
00103 AUDDeviceDescriptor_PROTOCOL,
00104 CHIP_USB_ENDPOINTS_MAXPACKETSIZE(0),
00105 1,
00106 0x00
00107 };
00108
00109
00110 const HidAuddDriverConfigurationDescriptors fsConfigurationDescriptors = {
00111
00112
00113 {
00114 sizeof(USBConfigurationDescriptor),
00115 USBGenericDescriptor_CONFIGURATION,
00116 sizeof(HidAuddDriverConfigurationDescriptors),
00117 HIDAUDDDriverDescriptors_NUMINTERFACE,
00118 1,
00119 0,
00120 USBD_BMATTRIBUTES,
00121 USBConfigurationDescriptor_POWER(100)
00122 },
00123
00124
00125 {
00126 sizeof(USBInterfaceDescriptor),
00127 USBGenericDescriptor_INTERFACE,
00128 HIDAUDDDriverDescriptors_HID_INTERFACE,
00129 0,
00130 2,
00131 HIDInterfaceDescriptor_CLASS,
00132 HIDInterfaceDescriptor_SUBCLASS_NONE,
00133 HIDInterfaceDescriptor_PROTOCOL_NONE,
00134 0
00135 },
00136
00137 {
00138 sizeof(HIDDescriptor1),
00139 HIDGenericDescriptor_HID,
00140 HIDDescriptor_HID1_11,
00141 0,
00142 1,
00143 HIDGenericDescriptor_REPORT,
00144 {HIDDKeyboard_REPORTDESCRIPTORSIZE}
00145 },
00146
00147 {
00148 sizeof(USBEndpointDescriptor),
00149 USBGenericDescriptor_ENDPOINT,
00150 USBEndpointDescriptor_ADDRESS(
00151 USBEndpointDescriptor_IN,
00152 HIDAUDD_Descriptors_INTERRUPTIN),
00153 USBEndpointDescriptor_INTERRUPT,
00154 sizeof(HIDDKeyboardInputReport),
00155 HIDDKeyboardDescriptors_INTERRUPTIN_POLLING_FS
00156 },
00157
00158 {
00159 sizeof(USBEndpointDescriptor),
00160 USBGenericDescriptor_ENDPOINT,
00161 USBEndpointDescriptor_ADDRESS(
00162 USBEndpointDescriptor_OUT,
00163 HIDAUDD_Descriptors_INTERRUPTOUT),
00164 USBEndpointDescriptor_INTERRUPT,
00165 sizeof(HIDDKeyboardOutputReport),
00166 HIDDKeyboardDescriptors_INTERRUPTOUT_POLLING_FS
00167 },
00168
00169
00170
00171 {
00172 sizeof(USBInterfaceAssociationDescriptor),
00173 USBGenericDescriptor_INTERFACEASSOCIATION,
00174 HIDAUDDDriverDescriptors_AUD_INTERFACE,
00175 2,
00176 AUDControlInterfaceDescriptor_CLASS,
00177 AUDControlInterfaceDescriptor_SUBCLASS,
00178 AUDControlInterfaceDescriptor_PROTOCOL,
00179 0
00180 },
00181
00182 {
00183 sizeof(USBInterfaceDescriptor),
00184 USBGenericDescriptor_INTERFACE,
00185 HIDAUDDDriverDescriptors_AUD_INTERFACE,
00186 0,
00187 0,
00188 AUDControlInterfaceDescriptor_CLASS,
00189 AUDControlInterfaceDescriptor_SUBCLASS,
00190 AUDControlInterfaceDescriptor_PROTOCOL,
00191 0
00192 },
00193
00194 {
00195
00196 {
00197 {
00198 sizeof(AUDHeaderDescriptor1),
00199 AUDGenericDescriptor_INTERFACE,
00200 AUDGenericDescriptor_HEADER,
00201 AUDHeaderDescriptor_AUD1_00,
00202 sizeof(AUDDSpeakerDriverAudioControlDescriptors),
00203 1
00204 },
00205 HIDAUDDDriverDescriptors_AUD_INTERFACE + 1
00206 },
00207
00208 {
00209 sizeof(AUDInputTerminalDescriptor),
00210 AUDGenericDescriptor_INTERFACE,
00211 AUDGenericDescriptor_INPUTTERMINAL,
00212 AUDDFunction_INPUTTERMINAL,
00213 AUDInputTerminalDescriptor_USBSTREAMING,
00214 AUDDFunction_OUTPUTTERMINAL,
00215 AUDDevice_NUMCHANNELS,
00216 AUDInputTerminalDescriptor_LEFTFRONT
00217 | AUDInputTerminalDescriptor_RIGHTFRONT,
00218 0,
00219 0
00220 },
00221
00222 {
00223 sizeof(AUDOutputTerminalDescriptor),
00224 AUDGenericDescriptor_INTERFACE,
00225 AUDGenericDescriptor_OUTPUTTERMINAL,
00226 AUDDFunction_OUTPUTTERMINAL,
00227 AUDOutputTerminalDescriptor_SPEAKER,
00228 AUDDFunction_INPUTTERMINAL,
00229 AUDDFunction_FEATUREUNIT,
00230 0
00231 },
00232
00233 {
00234 {
00235 sizeof(AUDFeatureUnitDescriptor3),
00236 AUDGenericDescriptor_INTERFACE,
00237 AUDGenericDescriptor_FEATUREUNIT,
00238 AUDDFunction_FEATUREUNIT,
00239 AUDDFunction_INPUTTERMINAL,
00240 1,
00241 },
00242 {
00243 AUDFeatureUnitDescriptor_MUTE,
00244 0,
00245 0
00246 },
00247 0
00248 }
00249 },
00250
00251 {
00252 sizeof(USBInterfaceDescriptor),
00253 USBGenericDescriptor_INTERFACE,
00254 HIDAUDDDriverDescriptors_AUD_INTERFACE + 1,
00255 0,
00256 0,
00257 AUDStreamingInterfaceDescriptor_CLASS,
00258 AUDStreamingInterfaceDescriptor_SUBCLASS,
00259 AUDStreamingInterfaceDescriptor_PROTOCOL,
00260 0
00261 },
00262
00263 {
00264 sizeof(USBInterfaceDescriptor),
00265 USBGenericDescriptor_INTERFACE,
00266 HIDAUDDDriverDescriptors_AUD_INTERFACE + 1,
00267 1,
00268 1,
00269 AUDStreamingInterfaceDescriptor_CLASS,
00270 AUDStreamingInterfaceDescriptor_SUBCLASS,
00271 AUDStreamingInterfaceDescriptor_PROTOCOL,
00272 0
00273 },
00274
00275 {
00276 sizeof(AUDStreamingInterfaceDescriptor),
00277 AUDGenericDescriptor_INTERFACE,
00278 AUDStreamingInterfaceDescriptor_GENERAL,
00279 AUDDFunction_INPUTTERMINAL,
00280 0,
00281 AUDFormatTypeOneDescriptor_PCM
00282 },
00283
00284 {
00285 {
00286 sizeof(AUDFormatTypeOneDescriptor1),
00287 AUDGenericDescriptor_INTERFACE,
00288 AUDStreamingInterfaceDescriptor_FORMATTYPE,
00289 AUDFormatTypeOneDescriptor_FORMATTYPEONE,
00290 AUDDevice_NUMCHANNELS,
00291 AUDDevice_BYTESPERSAMPLE,
00292 AUDDevice_BYTESPERSAMPLE * 8,
00293 1
00294 },
00295 {
00296 AUDDevice_SAMPLERATE & 0xFF,
00297 (AUDDevice_SAMPLERATE >> 8) & 0xFF,
00298 (AUDDevice_SAMPLERATE >> 16) & 0xFF
00299 }
00300 },
00301
00302 {
00303 sizeof(AUDEndpointDescriptor),
00304 USBGenericDescriptor_ENDPOINT,
00305 USBEndpointDescriptor_ADDRESS(
00306 USBEndpointDescriptor_OUT, HIDAUDD_Descriptors_ISO_DATAOUT),
00307 USBEndpointDescriptor_ISOCHRONOUS,
00308 AUDDevice_BYTESPERFRAME,
00309 AUDDFunction_FS_INTERVAL,
00310 0,
00311 0
00312 },
00313
00314 {
00315 sizeof(AUDDataEndpointDescriptor),
00316 AUDGenericDescriptor_ENDPOINT,
00317 AUDDataEndpointDescriptor_SUBTYPE,
00318 0,
00319 0,
00320 0
00321 }
00322 };
00323
00324
00325 const HidAuddDriverConfigurationDescriptors hsConfigurationDescriptors = {
00326
00327
00328 {
00329 sizeof(USBConfigurationDescriptor),
00330 USBGenericDescriptor_CONFIGURATION,
00331 sizeof(HidAuddDriverConfigurationDescriptors),
00332 HIDAUDDDriverDescriptors_NUMINTERFACE,
00333 1,
00334 0,
00335 USBD_BMATTRIBUTES,
00336 USBConfigurationDescriptor_POWER(100)
00337 },
00338
00339
00340 {
00341 sizeof(USBInterfaceDescriptor),
00342 USBGenericDescriptor_INTERFACE,
00343 HIDAUDDDriverDescriptors_HID_INTERFACE,
00344 0,
00345 2,
00346 HIDInterfaceDescriptor_CLASS,
00347 HIDInterfaceDescriptor_SUBCLASS_NONE,
00348 HIDInterfaceDescriptor_PROTOCOL_NONE,
00349 0
00350 },
00351
00352 {
00353 sizeof(HIDDescriptor1),
00354 HIDGenericDescriptor_HID,
00355 HIDDescriptor_HID1_11,
00356 0,
00357 1,
00358 HIDGenericDescriptor_REPORT,
00359 {HIDDKeyboard_REPORTDESCRIPTORSIZE}
00360 },
00361
00362 {
00363 sizeof(USBEndpointDescriptor),
00364 USBGenericDescriptor_ENDPOINT,
00365 USBEndpointDescriptor_ADDRESS(
00366 USBEndpointDescriptor_IN,
00367 HIDAUDD_Descriptors_INTERRUPTIN),
00368 USBEndpointDescriptor_INTERRUPT,
00369 sizeof(HIDDKeyboardInputReport),
00370 HIDDKeyboardDescriptors_INTERRUPTIN_POLLING_HS
00371 },
00372
00373 {
00374 sizeof(USBEndpointDescriptor),
00375 USBGenericDescriptor_ENDPOINT,
00376 USBEndpointDescriptor_ADDRESS(
00377 USBEndpointDescriptor_OUT,
00378 HIDAUDD_Descriptors_INTERRUPTOUT),
00379 USBEndpointDescriptor_INTERRUPT,
00380 sizeof(HIDDKeyboardOutputReport),
00381 HIDDKeyboardDescriptors_INTERRUPTOUT_POLLING_HS
00382 },
00383
00384
00385
00386 {
00387 sizeof(USBInterfaceAssociationDescriptor),
00388 USBGenericDescriptor_INTERFACEASSOCIATION,
00389 HIDAUDDDriverDescriptors_AUD_INTERFACE,
00390 2,
00391 AUDControlInterfaceDescriptor_CLASS,
00392 AUDControlInterfaceDescriptor_SUBCLASS,
00393 AUDControlInterfaceDescriptor_PROTOCOL,
00394 0
00395 },
00396
00397 {
00398 sizeof(USBInterfaceDescriptor),
00399 USBGenericDescriptor_INTERFACE,
00400 HIDAUDDDriverDescriptors_AUD_INTERFACE,
00401 0,
00402 0,
00403 AUDControlInterfaceDescriptor_CLASS,
00404 AUDControlInterfaceDescriptor_SUBCLASS,
00405 AUDControlInterfaceDescriptor_PROTOCOL,
00406 0
00407 },
00408
00409 {
00410
00411 {
00412 {
00413 sizeof(AUDHeaderDescriptor1),
00414 AUDGenericDescriptor_INTERFACE,
00415 AUDGenericDescriptor_HEADER,
00416 AUDHeaderDescriptor_AUD1_00,
00417 sizeof(AUDDSpeakerDriverAudioControlDescriptors),
00418 1
00419 },
00420 HIDAUDDDriverDescriptors_AUD_INTERFACE + 1
00421 },
00422
00423 {
00424 sizeof(AUDInputTerminalDescriptor),
00425 AUDGenericDescriptor_INTERFACE,
00426 AUDGenericDescriptor_INPUTTERMINAL,
00427 AUDDFunction_INPUTTERMINAL,
00428 AUDInputTerminalDescriptor_USBSTREAMING,
00429 AUDDFunction_OUTPUTTERMINAL,
00430 AUDDevice_NUMCHANNELS,
00431 AUDInputTerminalDescriptor_LEFTFRONT
00432 | AUDInputTerminalDescriptor_RIGHTFRONT,
00433 0,
00434 0
00435 },
00436
00437 {
00438 sizeof(AUDOutputTerminalDescriptor),
00439 AUDGenericDescriptor_INTERFACE,
00440 AUDGenericDescriptor_OUTPUTTERMINAL,
00441 AUDDFunction_OUTPUTTERMINAL,
00442 AUDOutputTerminalDescriptor_SPEAKER,
00443 AUDDFunction_INPUTTERMINAL,
00444 AUDDFunction_FEATUREUNIT,
00445 0
00446 },
00447
00448 {
00449 {
00450 sizeof(AUDFeatureUnitDescriptor3),
00451 AUDGenericDescriptor_INTERFACE,
00452 AUDGenericDescriptor_FEATUREUNIT,
00453 AUDDFunction_FEATUREUNIT,
00454 AUDDFunction_INPUTTERMINAL,
00455 1,
00456 },
00457 {
00458 AUDFeatureUnitDescriptor_MUTE,
00459 0,
00460 0
00461 },
00462 0
00463 }
00464 },
00465
00466 {
00467 sizeof(USBInterfaceDescriptor),
00468 USBGenericDescriptor_INTERFACE,
00469 HIDAUDDDriverDescriptors_AUD_INTERFACE + 1,
00470 0,
00471 0,
00472 AUDStreamingInterfaceDescriptor_CLASS,
00473 AUDStreamingInterfaceDescriptor_SUBCLASS,
00474 AUDStreamingInterfaceDescriptor_PROTOCOL,
00475 0
00476 },
00477
00478 {
00479 sizeof(USBInterfaceDescriptor),
00480 USBGenericDescriptor_INTERFACE,
00481 HIDAUDDDriverDescriptors_AUD_INTERFACE + 1,
00482 1,
00483 1,
00484 AUDStreamingInterfaceDescriptor_CLASS,
00485 AUDStreamingInterfaceDescriptor_SUBCLASS,
00486 AUDStreamingInterfaceDescriptor_PROTOCOL,
00487 0
00488 },
00489
00490 {
00491 sizeof(AUDStreamingInterfaceDescriptor),
00492 AUDGenericDescriptor_INTERFACE,
00493 AUDStreamingInterfaceDescriptor_GENERAL,
00494 AUDDFunction_INPUTTERMINAL,
00495 0,
00496 AUDFormatTypeOneDescriptor_PCM
00497 },
00498
00499 {
00500 {
00501 sizeof(AUDFormatTypeOneDescriptor1),
00502 AUDGenericDescriptor_INTERFACE,
00503 AUDStreamingInterfaceDescriptor_FORMATTYPE,
00504 AUDFormatTypeOneDescriptor_FORMATTYPEONE,
00505 AUDDevice_NUMCHANNELS,
00506 AUDDevice_BYTESPERSAMPLE,
00507 AUDDevice_BYTESPERSAMPLE * 8,
00508 1
00509 },
00510 {
00511 AUDDevice_SAMPLERATE & 0xFF,
00512 (AUDDevice_SAMPLERATE >> 8) & 0xFF,
00513 (AUDDevice_SAMPLERATE >> 16) & 0xFF
00514 }
00515 },
00516
00517 {
00518 sizeof(AUDEndpointDescriptor),
00519 USBGenericDescriptor_ENDPOINT,
00520 USBEndpointDescriptor_ADDRESS(
00521 USBEndpointDescriptor_OUT, HIDAUDD_Descriptors_ISO_DATAOUT),
00522 USBEndpointDescriptor_ISOCHRONOUS,
00523 AUDDevice_BYTESPERFRAME,
00524 AUDDFunction_HS_INTERVAL,
00525 0,
00526 0
00527 },
00528
00529 {
00530 sizeof(AUDDataEndpointDescriptor),
00531 AUDGenericDescriptor_ENDPOINT,
00532 AUDDataEndpointDescriptor_SUBTYPE,
00533 0,
00534 0,
00535 0
00536 }
00537 };
00538
00539
00540 const unsigned char languageIdDescriptor[] = {
00541
00542 USBStringDescriptor_LENGTH(1),
00543 USBGenericDescriptor_STRING,
00544 USBStringDescriptor_ENGLISH_US
00545 };
00546
00547
00548 const unsigned char manufacturerDescriptor[] = {
00549
00550 USBStringDescriptor_LENGTH(5),
00551 USBGenericDescriptor_STRING,
00552 USBStringDescriptor_UNICODE('A'),
00553 USBStringDescriptor_UNICODE('t'),
00554 USBStringDescriptor_UNICODE('m'),
00555 USBStringDescriptor_UNICODE('e'),
00556 USBStringDescriptor_UNICODE('l')
00557 };
00558
00559
00560 const unsigned char productDescriptor[] = {
00561
00562 USBStringDescriptor_LENGTH(14),
00563 USBGenericDescriptor_STRING,
00564 USBStringDescriptor_UNICODE('K'),
00565 USBStringDescriptor_UNICODE('e'),
00566 USBStringDescriptor_UNICODE('y'),
00567 USBStringDescriptor_UNICODE('p'),
00568 USBStringDescriptor_UNICODE('a'),
00569 USBStringDescriptor_UNICODE('d'),
00570 USBStringDescriptor_UNICODE('&'),
00571 USBStringDescriptor_UNICODE('s'),
00572 USBStringDescriptor_UNICODE('p'),
00573 USBStringDescriptor_UNICODE('e'),
00574 USBStringDescriptor_UNICODE('a'),
00575 USBStringDescriptor_UNICODE('k'),
00576 USBStringDescriptor_UNICODE('e'),
00577 USBStringDescriptor_UNICODE('r')
00578 };
00579
00580
00581 const unsigned char serialNumberDescriptor[] = {
00582
00583 USBStringDescriptor_LENGTH(4),
00584 USBGenericDescriptor_STRING,
00585 USBStringDescriptor_UNICODE('0'),
00586 USBStringDescriptor_UNICODE('1'),
00587 USBStringDescriptor_UNICODE('2'),
00588 USBStringDescriptor_UNICODE('3')
00589 };
00590
00591
00592 const unsigned char *stringDescriptors[] = {
00593
00594 languageIdDescriptor,
00595 manufacturerDescriptor,
00596 productDescriptor,
00597 serialNumberDescriptor,
00598 };
00599
00600
00601
00602
00603
00604
00605 const USBDDriverDescriptors hidauddDriverDescriptors = {
00606
00607 &deviceDescriptor,
00608 (const USBConfigurationDescriptor *) &fsConfigurationDescriptors,
00609 &qualifierDescriptor,
00610 0,
00611 0,
00612 (const USBConfigurationDescriptor *) &hsConfigurationDescriptors,
00613 &qualifierDescriptor,
00614 0,
00615 stringDescriptors, 4
00616 };
00617
00618
00619