Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygenusbcamdi.h
Go to the documentation of this file.
00001 /* 00002 * usbcamdi.h 00003 * 00004 * USB Camera driver interface. 00005 * 00006 * This file is part of the ReactOS PSDK package. 00007 * 00008 * Contributors: 00009 * Created by Casper S. Hornstrup <chorns@users.sourceforge.net> 00010 * 00011 * THIS SOFTWARE IS NOT COPYRIGHTED 00012 * 00013 * This source code is offered for use in the public domain. You may 00014 * use, modify or distribute it freely. 00015 * 00016 * This code is distributed in the hope that it will be useful but 00017 * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY 00018 * DISCLAIMED. This includes but is not limited to warranties of 00019 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 00020 * 00021 */ 00022 00023 #pragma once 00024 00025 #ifdef __cplusplus 00026 extern "C" { 00027 #endif 00028 00029 #if defined(_BATTERYCLASS_) 00030 #define USBCAMAPI 00031 #else 00032 #define USBCAMAPI DECLSPEC_IMPORT 00033 #endif 00034 00035 typedef struct _pipe_config_descriptor { 00036 CHAR StreamAssociation; 00037 UCHAR PipeConfigFlags; 00038 } USBCAMD_Pipe_Config_Descriptor, *PUSBCAMD_Pipe_Config_Descriptor; 00039 00040 #define USBCAMD_DATA_PIPE 0x0001 00041 #define USBCAMD_MULTIPLEX_PIPE 0x0002 00042 #define USBCAMD_SYNC_PIPE 0x0004 00043 #define USBCAMD_DONT_CARE_PIPE 0x0008 00044 00045 #define USBCAMD_VIDEO_STREAM 0x1 00046 #define USBCAMD_STILL_STREAM 0x2 00047 #define USBCAMD_VIDEO_STILL_STREAM (USBCAMD_VIDEO_STREAM | USBCAMD_STILL_STREAM) 00048 00049 #define USBCAMD_PROCESSPACKETEX_DropFrame 0x0002 00050 #define USBCAMD_PROCESSPACKETEX_NextFrameIsStill 0x0004 00051 #define USBCAMD_PROCESSPACKETEX_CurrentFrameIsStill 0x0008 00052 00053 #define USBCAMD_STOP_STREAM 0x00000001 00054 #define USBCAMD_START_STREAM 0x00000000 00055 00056 typedef enum { 00057 USBCAMD_CamControlFlag_NoVideoRawProcessing = 1, 00058 USBCAMD_CamControlFlag_NoStillRawProcessing = 2, 00059 USBCAMD_CamControlFlag_AssociatedFormat = 4, 00060 USBCAMD_CamControlFlag_EnableDeviceEvents = 8 00061 } USBCAMD_CamControlFlags; 00062 00063 typedef NTSTATUS 00064 (NTAPI *PCOMMAND_COMPLETE_FUNCTION)( 00065 IN PVOID DeviceContext, 00066 IN OUT PVOID CommandContext, 00067 IN NTSTATUS NtStatus); 00068 00069 typedef VOID 00070 (NTAPI *PSTREAM_RECEIVE_PACKET)( 00071 IN PVOID Srb, 00072 IN PVOID DeviceContext, 00073 IN PBOOLEAN Completed); 00074 00075 typedef NTSTATUS 00076 (NTAPI *PCAM_INITIALIZE_ROUTINE)( 00077 PDEVICE_OBJECT BusDeviceObject, 00078 PVOID DeviceContext); 00079 00080 typedef NTSTATUS 00081 (NTAPI *PCAM_CONFIGURE_ROUTINE)( 00082 IN PDEVICE_OBJECT BusDeviceObject, 00083 IN PVOID DeviceContext, 00084 IN PUSBD_INTERFACE_INFORMATION Interface, 00085 IN PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor, 00086 IN PLONG DataPipeIndex, 00087 IN PLONG SyncPipeIndex); 00088 00089 typedef NTSTATUS 00090 (NTAPI *PCAM_CONFIGURE_ROUTINE_EX)( 00091 IN PDEVICE_OBJECT BusDeviceObject, 00092 IN PVOID DeviceContext, 00093 IN PUSBD_INTERFACE_INFORMATION Interface, 00094 IN PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor, 00095 IN ULONG PipeConfigListSize, 00096 IN PUSBCAMD_Pipe_Config_Descriptor PipeConfig, 00097 IN PUSB_DEVICE_DESCRIPTOR DeviceDescriptor); 00098 00099 typedef NTSTATUS 00100 (NTAPI *PCAM_START_CAPTURE_ROUTINE)( 00101 IN PDEVICE_OBJECT BusDeviceObject, 00102 IN PVOID DeviceContext); 00103 00104 typedef NTSTATUS 00105 (NTAPI *PCAM_START_CAPTURE_ROUTINE_EX)( 00106 IN PDEVICE_OBJECT BusDeviceObject, 00107 IN PVOID DeviceContext, 00108 IN ULONG StreamNumber); 00109 00110 typedef NTSTATUS 00111 (NTAPI *PCAM_ALLOCATE_BW_ROUTINE)( 00112 IN PDEVICE_OBJECT BusDeviceObject, 00113 IN PVOID DeviceContext, 00114 IN PULONG RawFrameLength, 00115 IN PVOID Format); 00116 00117 typedef NTSTATUS 00118 (NTAPI *PCAM_ALLOCATE_BW_ROUTINE_EX)( 00119 IN PDEVICE_OBJECT BusDeviceObject, 00120 IN PVOID DeviceContext, 00121 IN PULONG RawFrameLength, 00122 IN PVOID Format, 00123 IN ULONG StreamNumber); 00124 00125 typedef NTSTATUS 00126 (NTAPI *PCAM_FREE_BW_ROUTINE)( 00127 IN PDEVICE_OBJECT BusDeviceObject, 00128 IN PVOID DeviceContext); 00129 00130 typedef NTSTATUS 00131 (NTAPI *PCAM_FREE_BW_ROUTINE_EX)( 00132 IN PDEVICE_OBJECT BusDeviceObject, 00133 IN PVOID DeviceContext, 00134 IN ULONG StreamNumber); 00135 00136 typedef VOID 00137 (NTAPI *PADAPTER_RECEIVE_PACKET_ROUTINE)( 00138 IN OUT PHW_STREAM_REQUEST_BLOCK Srb); 00139 00140 typedef NTSTATUS 00141 (NTAPI *PCAM_STOP_CAPTURE_ROUTINE)( 00142 IN PDEVICE_OBJECT BusDeviceObject, 00143 IN PVOID DeviceContext); 00144 00145 typedef NTSTATUS 00146 (NTAPI *PCAM_STOP_CAPTURE_ROUTINE_EX)( 00147 IN PDEVICE_OBJECT BusDeviceObject, 00148 IN PVOID DeviceContext, 00149 IN ULONG StreamNumber); 00150 00151 typedef ULONG 00152 (NTAPI *PCAM_PROCESS_PACKET_ROUTINE)( 00153 IN PDEVICE_OBJECT BusDeviceObject, 00154 IN PVOID DeviceContext, 00155 IN PVOID CurrentFrameContext, 00156 IN PUSBD_ISO_PACKET_DESCRIPTOR SyncPacket OPTIONAL, 00157 IN PVOID SyncBuffer OPTIONAL, 00158 IN PUSBD_ISO_PACKET_DESCRIPTOR DataPacket OPTIONAL, 00159 IN OUT PVOID DataBuffer, 00160 OUT PBOOLEAN FrameComplete, 00161 OUT PBOOLEAN NextFrameIsStill); 00162 00163 typedef ULONG 00164 (NTAPI *PCAM_PROCESS_PACKET_ROUTINE_EX)( 00165 IN PDEVICE_OBJECT BusDeviceObject, 00166 IN PVOID DeviceContext, 00167 IN PVOID CurrentFrameContext, 00168 IN PUSBD_ISO_PACKET_DESCRIPTOR SyncPacket OPTIONAL, 00169 IN PVOID SyncBuffer OPTIONAL, 00170 IN PUSBD_ISO_PACKET_DESCRIPTOR DataPacket OPTIONAL, 00171 IN OUT PVOID DataBuffer, 00172 OUT PBOOLEAN FrameComplete, 00173 OUT PULONG PacketFlag, 00174 OUT PULONG ValidDataOffset); 00175 00176 typedef VOID 00177 (NTAPI *PCAM_NEW_FRAME_ROUTINE)( 00178 IN PVOID DeviceContext, 00179 IN PVOID FrameContext); 00180 00181 typedef VOID 00182 (NTAPI *PCAM_NEW_FRAME_ROUTINE_EX)( 00183 IN PVOID DeviceContext, 00184 IN PVOID FrameContext, 00185 IN ULONG StreamNumber, 00186 OUT PULONG FrameLength); 00187 00188 typedef NTSTATUS 00189 (NTAPI *PCAM_PROCESS_RAW_FRAME_ROUTINE)( 00190 IN PDEVICE_OBJECT BusDeviceObject, 00191 IN PVOID DeviceContext, 00192 IN PVOID FrameContext, 00193 IN PVOID FrameBuffer, 00194 IN ULONG FrameLength, 00195 OUT PVOID RawFrameBuffer, 00196 IN ULONG RawFrameLength, 00197 IN ULONG NumberOfPackets, 00198 OUT PULONG BytesReturned); 00199 00200 typedef NTSTATUS 00201 (NTAPI *PCAM_PROCESS_RAW_FRAME_ROUTINE_EX)( 00202 IN PDEVICE_OBJECT BusDeviceObject, 00203 IN PVOID DeviceContext, 00204 IN PVOID FrameContext, 00205 IN PVOID FrameBuffer, 00206 IN ULONG FrameLength, 00207 OUT PVOID RawFrameBuffer, 00208 IN ULONG RawFrameLength, 00209 IN ULONG NumberOfPackets, 00210 OUT PULONG BytesReturned, 00211 IN ULONG ActualRawFrameLength, 00212 IN ULONG StreamNumber); 00213 00214 typedef NTSTATUS 00215 (NTAPI *PCAM_STATE_ROUTINE)( 00216 IN PDEVICE_OBJECT BusDeviceObject, 00217 IN PVOID DeviceContext); 00218 00219 #if defined(DEBUG_LOG) 00220 00221 USBCAMAPI 00222 VOID 00223 NTAPI 00224 USBCAMD_Debug_LogEntry( 00225 IN CHAR *Name, 00226 IN ULONG Info1, 00227 IN ULONG Info2, 00228 IN ULONG Info3); 00229 00230 #define ILOGENTRY(sig, info1, info2, info3) \ 00231 USBCAMD_Debug_LogEntry(sig, (ULONG)info1, (ULONG)info2, (ULONG)info3) 00232 00233 #else 00234 00235 #define ILOGENTRY(sig, info1, info2, info3) 00236 00237 #endif /* DEBUG_LOG */ 00238 00239 typedef struct _USBCAMD_DEVICE_DATA { 00240 ULONG Sig; 00241 PCAM_INITIALIZE_ROUTINE CamInitialize; 00242 PCAM_INITIALIZE_ROUTINE CamUnInitialize; 00243 PCAM_PROCESS_PACKET_ROUTINE CamProcessUSBPacket; 00244 PCAM_NEW_FRAME_ROUTINE CamNewVideoFrame; 00245 PCAM_PROCESS_RAW_FRAME_ROUTINE CamProcessRawVideoFrame; 00246 PCAM_START_CAPTURE_ROUTINE CamStartCapture; 00247 PCAM_STOP_CAPTURE_ROUTINE CamStopCapture; 00248 PCAM_CONFIGURE_ROUTINE CamConfigure; 00249 PCAM_STATE_ROUTINE CamSaveState; 00250 PCAM_STATE_ROUTINE CamRestoreState; 00251 PCAM_ALLOCATE_BW_ROUTINE CamAllocateBandwidth; 00252 PCAM_FREE_BW_ROUTINE CamFreeBandwidth; 00253 } USBCAMD_DEVICE_DATA, *PUSBCAMD_DEVICE_DATA; 00254 00255 typedef struct _USBCAMD_DEVICE_DATA2 { 00256 ULONG Sig; 00257 PCAM_INITIALIZE_ROUTINE CamInitialize; 00258 PCAM_INITIALIZE_ROUTINE CamUnInitialize; 00259 PCAM_PROCESS_PACKET_ROUTINE_EX CamProcessUSBPacketEx; 00260 PCAM_NEW_FRAME_ROUTINE_EX CamNewVideoFrameEx; 00261 PCAM_PROCESS_RAW_FRAME_ROUTINE_EX CamProcessRawVideoFrameEx; 00262 PCAM_START_CAPTURE_ROUTINE_EX CamStartCaptureEx; 00263 PCAM_STOP_CAPTURE_ROUTINE_EX CamStopCaptureEx; 00264 PCAM_CONFIGURE_ROUTINE_EX CamConfigureEx; 00265 PCAM_STATE_ROUTINE CamSaveState; 00266 PCAM_STATE_ROUTINE CamRestoreState; 00267 PCAM_ALLOCATE_BW_ROUTINE_EX CamAllocateBandwidthEx; 00268 PCAM_FREE_BW_ROUTINE_EX CamFreeBandwidthEx; 00269 } USBCAMD_DEVICE_DATA2, *PUSBCAMD_DEVICE_DATA2; 00270 00271 DEFINE_GUID(GUID_USBCAMD_INTERFACE, 00272 0x2bcb75c0, 0xb27f, 0x11d1, 0xba, 0x41, 0x0, 0xa0, 0xc9, 0xd, 0x2b, 0x5); 00273 00274 typedef NTSTATUS 00275 (NTAPI *PFNUSBCAMD_SetVideoFormat)( 00276 IN PVOID DeviceContext, 00277 IN PHW_STREAM_REQUEST_BLOCK pSrb); 00278 00279 typedef NTSTATUS 00280 (NTAPI *PFNUSBCAMD_WaitOnDeviceEvent)( 00281 IN PVOID DeviceContext, 00282 IN ULONG PipeIndex, 00283 IN PVOID Buffer, 00284 IN ULONG BufferLength, 00285 IN PCOMMAND_COMPLETE_FUNCTION EventComplete, 00286 IN PVOID EventContext, 00287 IN BOOLEAN LoopBack); 00288 00289 typedef NTSTATUS 00290 (NTAPI *PFNUSBCAMD_CancelBulkReadWrite)( 00291 IN PVOID DeviceContext, 00292 IN ULONG PipeIndex); 00293 00294 typedef NTSTATUS 00295 (NTAPI *PFNUSBCAMD_SetIsoPipeState)( 00296 IN PVOID DeviceContext, 00297 IN ULONG PipeStateFlags); 00298 00299 typedef NTSTATUS 00300 (NTAPI *PFNUSBCAMD_BulkReadWrite)( 00301 IN PVOID DeviceContext, 00302 IN USHORT PipeIndex, 00303 IN PVOID Buffer, 00304 IN ULONG BufferLength, 00305 IN PCOMMAND_COMPLETE_FUNCTION CommandComplete, 00306 IN PVOID CommandContext); 00307 00308 #define USBCAMD_VERSION_200 0x200 00309 00310 typedef struct _USBCAMD_INTERFACE { 00311 INTERFACE Interface; 00312 PFNUSBCAMD_WaitOnDeviceEvent USBCAMD_WaitOnDeviceEvent; 00313 PFNUSBCAMD_BulkReadWrite USBCAMD_BulkReadWrite; 00314 PFNUSBCAMD_SetVideoFormat USBCAMD_SetVideoFormat; 00315 PFNUSBCAMD_SetIsoPipeState USBCAMD_SetIsoPipeState; 00316 PFNUSBCAMD_CancelBulkReadWrite USBCAMD_CancelBulkReadWrite; 00317 } USBCAMD_INTERFACE, *PUSBCAMD_INTERFACE; 00318 00319 /* FIXME : Do we need USBCAMAPI here ? */ 00320 00321 USBCAMAPI 00322 ULONG 00323 NTAPI 00324 USBCAMD_DriverEntry( 00325 IN PVOID Context1, 00326 IN PVOID Context2, 00327 IN ULONG DeviceContextSize, 00328 IN ULONG FrameContextSize, 00329 IN PADAPTER_RECEIVE_PACKET_ROUTINE ReceivePacket); 00330 00331 USBCAMAPI 00332 PVOID 00333 NTAPI 00334 USBCAMD_AdapterReceivePacket( 00335 IN PHW_STREAM_REQUEST_BLOCK Srb, 00336 IN PUSBCAMD_DEVICE_DATA DeviceData, 00337 IN PDEVICE_OBJECT *DeviceObject, 00338 IN BOOLEAN NeedsCompletion); 00339 00340 USBCAMAPI 00341 NTSTATUS 00342 NTAPI 00343 USBCAMD_ControlVendorCommand( 00344 IN PVOID DeviceContext, 00345 IN UCHAR Request, 00346 IN USHORT Value, 00347 IN USHORT Index, 00348 IN OUT PVOID Buffer, 00349 IN OUT PULONG BufferLength, 00350 IN BOOLEAN GetData, 00351 IN PCOMMAND_COMPLETE_FUNCTION CommandComplete OPTIONAL, 00352 IN PVOID CommandContext OPTIONAL); 00353 00354 USBCAMAPI 00355 NTSTATUS 00356 NTAPI 00357 USBCAMD_SelectAlternateInterface( 00358 IN PVOID DeviceContext, 00359 IN OUT PUSBD_INTERFACE_INFORMATION RequestInterface); 00360 00361 USBCAMAPI 00362 NTSTATUS 00363 NTAPI 00364 USBCAMD_GetRegistryKeyValue( 00365 IN HANDLE Handle, 00366 IN PWCHAR KeyNameString, 00367 IN ULONG KeyNameStringLength, 00368 IN PVOID Data, 00369 IN ULONG DataLength); 00370 00371 USBCAMAPI 00372 ULONG 00373 NTAPI 00374 USBCAMD_InitializeNewInterface( 00375 IN PVOID DeviceContext, 00376 IN PVOID DeviceData, 00377 IN ULONG Version, 00378 IN ULONG CamControlFlag); 00379 00380 #ifdef __cplusplus 00381 } 00382 #endif 00383 00384 #endif /* !defined(__USB_H) && !defined(__USBDI_H) */ Generated on Mon May 28 2012 04:32:26 for ReactOS by
1.7.6.1
|