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