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
00040
00041
00042
00043
00044
00045
00046 #include <USBD_Config.h>
00047
00048 #include <USBDescriptors.h>
00049 #include <VIDEODescriptors.h>
00050 #include <USBDDriver.h>
00051
00052
00053
00054
00055 const USBDeviceDescriptor usbDeviceDescriptor =
00056 {
00057 sizeof(USBDeviceDescriptor),
00058 USBGenericDescriptor_DEVICE,
00059 USBDeviceDescriptor_USB2_00,
00060 VIDDeviceDescriptor_CLASS,
00061 VIDDeviceDescriptor_SUBCLASS,
00062 VIDDeviceDescriptor_PROTOCOL,
00063 CHIP_USB_ENDPOINTS_MAXPACKETSIZE(0),
00064 USBD_VID_ATMEL,
00065 USBD_PID_UVC,
00066 USBD_RELEASE_0_01,
00067 0,
00068 0,
00069 0,
00070 1
00071 };
00072
00073
00074
00075 static const USBDeviceQualifierDescriptor qualifierDescriptor = {
00076
00077 sizeof(USBDeviceQualifierDescriptor),
00078 USBGenericDescriptor_DEVICEQUALIFIER,
00079 USBDeviceDescriptor_USB2_00,
00080 VIDDeviceDescriptor_CLASS,
00081 VIDDeviceDescriptor_SUBCLASS,
00082 VIDDeviceDescriptor_PROTOCOL,
00083 CHIP_USB_ENDPOINTS_MAXPACKETSIZE(0),
00084 1,
00085 0x00
00086 };
00087
00088
00089
00090 const struct UsbVideoCamConfigurationDescriptors configurationDescriptorsFS =
00091 {
00092
00093 {
00094 sizeof(USBConfigurationDescriptor),
00095 USBGenericDescriptor_CONFIGURATION,
00096 sizeof(struct UsbVideoCamConfigurationDescriptors),
00097 2,
00098 1,
00099 0,
00100 BOARD_USB_BMATTRIBUTES,
00101 USBConfigurationDescriptor_POWER(100)
00102 },
00103
00104 {
00105 sizeof(USBInterfaceAssociationDescriptor),
00106 USBGenericDescriptor_INTERFACEASSOCIATION,
00107 VIDCAMD_ControlInterfaceNum,
00108 2,
00109 VIDIADDescriptor_CLASS,
00110 VIDIADDescriptor_SUBCLASS,
00111 VIDIADDescriptor_PROTOCOL,
00112 0
00113 },
00114
00115 {
00116 sizeof(USBInterfaceDescriptor),
00117 USBGenericDescriptor_INTERFACE,
00118 VIDCAMD_ControlInterfaceNum,
00119 0,
00120 0,
00121 VIDControlInterfaceDescriptor_CLASS,
00122 VIDControlInterfaceDescriptor_SUBCLASS,
00123 VIDControlInterfaceDescriptor_PROTOCOL,
00124 0,
00125 },
00126
00127 {
00128
00129 {
00130 sizeof(UsbVideoControlInterfaceHeader1),
00131 VIDGenericDescriptor_INTERFACE,
00132 VIDGenericDescriptor_HEADER,
00133 VIDHeaderDescriptor_VID1_00,
00134 sizeof(UsbVideoControlInterfaceDescriptor),
00135 BOARD_MCK,
00136 1,
00137 VIDCAMD_StreamInterfaceNum,
00138 },
00139
00140 {
00141 sizeof(USBVideoCameraTerminalDescriptor),
00142 VIDGenericDescriptor_INTERFACE,
00143 VIDGenericDescriptor_INPUTTERMINAL,
00144 1,
00145 VIDInputTerminalDescriptor_CAMERA,
00146 0,
00147 0,
00148 0,
00149 0,
00150 0,
00151 3,
00152 {0, 0, 0}
00153 },
00154
00155 {
00156 sizeof(USBVideoOutputTerminalDescriptor),
00157 VIDGenericDescriptor_INTERFACE,
00158 VIDGenericDescriptor_OUTPUTTERMINAL,
00159 2,
00160 VIDTerminalDescriptor_STREAMING,
00161 0,
00162 1,
00163 0
00164 }
00165
00166 },
00167
00168 {
00169 sizeof(USBInterfaceDescriptor),
00170 USBGenericDescriptor_INTERFACE,
00171 VIDCAMD_StreamInterfaceNum,
00172 0,
00173 0,
00174 VIDStreamingInterfaceDescriptor_CLASS,
00175 VIDStreamingInterfaceDescriptor_SUBCLASS,
00176 VIDStreamingInterfaceDescriptor_PROTOCOL,
00177 0
00178 },
00179
00180 {
00181
00182 {
00183 sizeof(UsbVideoInputHeaderDescriptor1),
00184 VIDGenericDescriptor_INTERFACE,
00185 VIDStreamingInterfaceDescriptor_INPUTHEADER,
00186 1,
00187 sizeof(UsbVideoStreamingInterfaceDescriptor),
00188 0x80 | VIDCAMD_IsoInEndpointNum,
00189 0x00,
00190 2,
00191 0,
00192 0,
00193 0,
00194 1,
00195 0
00196 },
00197
00198 {
00199
00200 {
00201 sizeof(USBVideoUncompressedFormatDescriptor),
00202 VIDGenericDescriptor_INTERFACE,
00203 VIDStreamingInterfaceDescriptor_FMT_UNCOMPRESSED,
00204
00205 1,
00206 VIDCAMD_NumFrameTypes,
00207 guidYUY2,
00208 FRAME_BPP,
00209 1,
00210 0,
00211 0,
00212 0,
00213 0
00214 },
00215
00216 {
00217 sizeof(USBVideoUncompressedFrameDescriptor1),
00218 VIDGenericDescriptor_INTERFACE,
00219 VIDStreamingInterfaceDescriptor_FRM_UNCOMPRESSED,
00220
00221 1,
00222 0,
00223 VIDCAMD_FW_1,
00224 VIDCAMD_FH_1,
00225 FRAME_BITRATEC(VIDCAMD_FW_1, VIDCAMD_FH_1, 4),
00226 FRAME_BITRATEC(VIDCAMD_FW_1, VIDCAMD_FH_1, 4),
00227 FRAME_BUFFER_SIZEC(VIDCAMD_FW_1, VIDCAMD_FH_1),
00228
00229 FRAME_INTERVALC(4),
00230 1,
00231 FRAME_INTERVALC(4),
00232 },
00233
00234 {
00235 sizeof(USBVideoUncompressedFrameDescriptor1),
00236 VIDGenericDescriptor_INTERFACE,
00237 VIDStreamingInterfaceDescriptor_FRM_UNCOMPRESSED,
00238 2,
00239 0,
00240 VIDCAMD_FW_2,
00241 VIDCAMD_FH_2,
00242 FRAME_BITRATEC(VIDCAMD_FW_2, VIDCAMD_FH_2, 1),
00243 FRAME_BITRATEC(VIDCAMD_FW_2, VIDCAMD_FH_2, 1),
00244 FRAME_BUFFER_SIZEC(VIDCAMD_FW_2, VIDCAMD_FH_2),
00245
00246 FRAME_INTERVALC(1),
00247 1,
00248 FRAME_INTERVALC(1),
00249 },
00250
00251 {
00252 sizeof(USBVideoUncompressedFrameDescriptor1),
00253 VIDGenericDescriptor_INTERFACE,
00254 VIDStreamingInterfaceDescriptor_FRM_UNCOMPRESSED,
00255
00256 3,
00257 0,
00258 VIDCAMD_FW_3,
00259 VIDCAMD_FH_3,
00260 FRAME_BITRATEC(VIDCAMD_FW_3, VIDCAMD_FH_3, 4),
00261 FRAME_BITRATEC(VIDCAMD_FW_3, VIDCAMD_FH_3, 4),
00262 FRAME_BUFFER_SIZEC(VIDCAMD_FW_3, VIDCAMD_FH_3),
00263
00264 FRAME_INTERVALC(12),
00265 1,
00266 FRAME_INTERVALC(12),
00267 },
00268
00269 {
00270 sizeof(USBVideoColorMatchingDescriptor),
00271 VIDGenericDescriptor_INTERFACE,
00272 VIDStreamingInterfaceDescriptor_COLORFORMAT,
00273 1,
00274 1,
00275 4,
00276 }
00277 }
00278 },
00279
00280 {
00281 sizeof(USBInterfaceDescriptor),
00282 USBGenericDescriptor_INTERFACE,
00283 VIDCAMD_StreamInterfaceNum,
00284 1,
00285 1,
00286 VIDStreamingInterfaceDescriptor_CLASS,
00287 VIDStreamingInterfaceDescriptor_SUBCLASS,
00288 VIDStreamingInterfaceDescriptor_PROTOCOL,
00289 0
00290 },
00291
00292 {
00293 sizeof(USBEndpointDescriptor),
00294 USBGenericDescriptor_ENDPOINT,
00295 0x80 | VIDCAMD_IsoInEndpointNum,
00296 (USBEndpointDescriptor_ISOCHRONOUS),
00297
00298 FRAME_PACKET_SIZE_FS,
00299 1
00300 }
00301 };
00302
00303
00304 const struct UsbVideoCamConfigurationDescriptors configurationDescriptorsHS =
00305 {
00306
00307 {
00308 sizeof(USBConfigurationDescriptor),
00309 USBGenericDescriptor_CONFIGURATION,
00310 sizeof(struct UsbVideoCamConfigurationDescriptors),
00311 2,
00312 1,
00313 0,
00314 BOARD_USB_BMATTRIBUTES,
00315 USBConfigurationDescriptor_POWER(100)
00316 },
00317
00318 {
00319 sizeof(USBInterfaceAssociationDescriptor),
00320 USBGenericDescriptor_INTERFACEASSOCIATION,
00321 VIDCAMD_ControlInterfaceNum,
00322 2,
00323 VIDIADDescriptor_CLASS,
00324 VIDIADDescriptor_SUBCLASS,
00325 VIDIADDescriptor_PROTOCOL,
00326 0
00327 },
00328
00329 {
00330 sizeof(USBInterfaceDescriptor),
00331 USBGenericDescriptor_INTERFACE,
00332 VIDCAMD_ControlInterfaceNum,
00333 0,
00334 0,
00335 VIDControlInterfaceDescriptor_CLASS,
00336 VIDControlInterfaceDescriptor_SUBCLASS,
00337 VIDControlInterfaceDescriptor_PROTOCOL,
00338 0,
00339 },
00340
00341 {
00342
00343 {
00344 sizeof(UsbVideoControlInterfaceHeader1),
00345 VIDGenericDescriptor_INTERFACE,
00346 VIDGenericDescriptor_HEADER,
00347 VIDHeaderDescriptor_VID1_00,
00348 sizeof(UsbVideoControlInterfaceDescriptor),
00349 BOARD_MCK,
00350 1,
00351 VIDCAMD_StreamInterfaceNum,
00352 },
00353
00354 {
00355 sizeof(USBVideoCameraTerminalDescriptor),
00356 VIDGenericDescriptor_INTERFACE,
00357 VIDGenericDescriptor_INPUTTERMINAL,
00358 1,
00359 VIDInputTerminalDescriptor_CAMERA,
00360 0,
00361 0,
00362 0,
00363 0,
00364 0,
00365 3,
00366 {0, 0, 0}
00367 },
00368
00369 {
00370 sizeof(USBVideoOutputTerminalDescriptor),
00371 VIDGenericDescriptor_INTERFACE,
00372 VIDGenericDescriptor_OUTPUTTERMINAL,
00373 2,
00374 VIDTerminalDescriptor_STREAMING,
00375 0,
00376 1,
00377 0
00378 }
00379
00380 },
00381
00382 {
00383 sizeof(USBInterfaceDescriptor),
00384 USBGenericDescriptor_INTERFACE,
00385 VIDCAMD_StreamInterfaceNum,
00386 0,
00387 0,
00388 VIDStreamingInterfaceDescriptor_CLASS,
00389 VIDStreamingInterfaceDescriptor_SUBCLASS,
00390 VIDStreamingInterfaceDescriptor_PROTOCOL,
00391 0
00392 },
00393
00394 {
00395
00396 {
00397 sizeof(UsbVideoInputHeaderDescriptor1),
00398 VIDGenericDescriptor_INTERFACE,
00399 VIDStreamingInterfaceDescriptor_INPUTHEADER,
00400 1,
00401 sizeof(UsbVideoStreamingInterfaceDescriptor),
00402 0x80 | VIDCAMD_IsoInEndpointNum,
00403 0x00,
00404 2,
00405 0,
00406 0,
00407 0,
00408 1,
00409 0
00410 },
00411
00412 {
00413
00414 {
00415 sizeof(USBVideoUncompressedFormatDescriptor),
00416 VIDGenericDescriptor_INTERFACE,
00417 VIDStreamingInterfaceDescriptor_FMT_UNCOMPRESSED,
00418
00419 1,
00420 VIDCAMD_NumFrameTypes,
00421 guidYUY2,
00422 FRAME_BPP,
00423 1,
00424 0,
00425 0,
00426 0,
00427 0
00428 },
00429
00430 {
00431 sizeof(USBVideoUncompressedFrameDescriptor1),
00432 VIDGenericDescriptor_INTERFACE,
00433 VIDStreamingInterfaceDescriptor_FRM_UNCOMPRESSED,
00434
00435 1,
00436 0,
00437 VIDCAMD_FW_1,
00438 VIDCAMD_FH_1,
00439 FRAME_BITRATEC(VIDCAMD_FW_1, VIDCAMD_FH_1, 15),
00440 FRAME_BITRATEC(VIDCAMD_FW_1, VIDCAMD_FH_1, 15),
00441 FRAME_BUFFER_SIZEC(VIDCAMD_FW_1, VIDCAMD_FH_1),
00442
00443 FRAME_INTERVALC(15),
00444 1,
00445 FRAME_INTERVALC(15),
00446 },
00447
00448 {
00449 sizeof(USBVideoUncompressedFrameDescriptor1),
00450 VIDGenericDescriptor_INTERFACE,
00451 VIDStreamingInterfaceDescriptor_FRM_UNCOMPRESSED,
00452
00453 2,
00454 0,
00455 VIDCAMD_FW_2,
00456 VIDCAMD_FH_2,
00457 FRAME_BITRATEC(VIDCAMD_FW_2, VIDCAMD_FH_2, 26),
00458 FRAME_BITRATEC(VIDCAMD_FW_2, VIDCAMD_FH_2, 26),
00459 FRAME_BUFFER_SIZEC(VIDCAMD_FW_2, VIDCAMD_FH_2),
00460
00461 FRAME_INTERVALC(26),
00462 1,
00463 FRAME_INTERVALC(26),
00464 },
00465
00466 {
00467 sizeof(USBVideoUncompressedFrameDescriptor1),
00468 VIDGenericDescriptor_INTERFACE,
00469 VIDStreamingInterfaceDescriptor_FRM_UNCOMPRESSED,
00470
00471 3,
00472 0,
00473 VIDCAMD_FW_3,
00474 VIDCAMD_FH_3,
00475 FRAME_BITRATEC(VIDCAMD_FW_3, VIDCAMD_FH_3, 30),
00476 FRAME_BITRATEC(VIDCAMD_FW_3, VIDCAMD_FH_3, 30),
00477 FRAME_BUFFER_SIZEC(VIDCAMD_FW_3, VIDCAMD_FH_3),
00478
00479 FRAME_INTERVALC(30),
00480 1,
00481 FRAME_INTERVALC(30),
00482 },
00483
00484 {
00485 sizeof(USBVideoColorMatchingDescriptor),
00486 VIDGenericDescriptor_INTERFACE,
00487 VIDStreamingInterfaceDescriptor_COLORFORMAT,
00488 1,
00489 1,
00490 4,
00491 }
00492 }
00493 },
00494
00495 {
00496 sizeof(USBInterfaceDescriptor),
00497 USBGenericDescriptor_INTERFACE,
00498 VIDCAMD_StreamInterfaceNum,
00499 1,
00500 1,
00501 VIDStreamingInterfaceDescriptor_CLASS,
00502 VIDStreamingInterfaceDescriptor_SUBCLASS,
00503 VIDStreamingInterfaceDescriptor_PROTOCOL,
00504 0
00505 },
00506
00507 {
00508 sizeof(USBEndpointDescriptor),
00509 USBGenericDescriptor_ENDPOINT,
00510 0x80 | VIDCAMD_IsoInEndpointNum,
00511 (USBEndpointDescriptor_ISOCHRONOUS ),
00512
00513 VIDCAMD_EpDesc_MaxPacketSize,
00514 2
00515 }
00516 };
00517
00518
00519
00520 const USBDDriverDescriptors usbdDriverDescriptors =
00521 {
00522 &usbDeviceDescriptor,
00523 (const USBConfigurationDescriptor *) &configurationDescriptorsFS,
00524 &qualifierDescriptor,
00525 0,
00526 0,
00527 (const USBConfigurationDescriptor *) &configurationDescriptorsHS,
00528 &qualifierDescriptor,
00529 0,
00530 0,
00531 0
00532 };
00533
00534
00535