Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
usbcamdi.h
00001 /* 00002 * usbcamdi.h 00003 * 00004 * USB Camera driver interface. 00005 * 00006 * This file is part of the w32api 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 #ifndef __USBCAMDI_H 00024 #define __USBCAMDI_H 00025 00026 #if __GNUC__ >=3 00027 #pragma GCC system_header 00028 #endif 00029 00030 #if !defined(__USB_H) && !defined(__USBDI_H) 00031 #error include usb.h or usbdi.h before usbcamdi.h 00032 #else 00033 00034 #ifdef __cplusplus 00035 extern "C" { 00036 #endif 00037 00038 #pragma pack(push,4) 00039 00040 #include "ntddk.h" 00041 00042 #if defined(_BATTERYCLASS_) 00043 #define USBCAMAPI DECLSPEC_EXPORT 00044 #else 00045 #define USBCAMAPI DECLSPEC_IMPORT 00046 #endif 00047 00048 00049 /* FIXME: Unknown definition */ 00050 typedef PVOID PHW_STREAM_REQUEST_BLOCK; 00051 00052 DEFINE_GUID(GUID_USBCAMD_INTERFACE, 00053 0x2bcb75c0, 0xb27f, 0x11d1, 0xba, 0x41, 0x0, 0xa0, 0xc9, 0xd, 0x2b, 0x5); 00054 00055 #define USBCAMD_PROCESSPACKETEX_DropFrame 0x0002 00056 #define USBCAMD_PROCESSPACKETEX_NextFrameIsStill 0x0004 00057 #define USBCAMD_PROCESSPACKETEX_CurrentFrameIsStill 0x0008 00058 00059 #define USBCAMD_DATA_PIPE 0x0001 00060 #define USBCAMD_MULTIPLEX_PIPE 0x0002 00061 #define USBCAMD_SYNC_PIPE 0x0004 00062 #define USBCAMD_DONT_CARE_PIPE 0x0008 00063 00064 #define USBCAMD_VIDEO_STREAM 0x1 00065 #define USBCAMD_STILL_STREAM 0x2 00066 #define USBCAMD_VIDEO_STILL_STREAM (USBCAMD_VIDEO_STREAM | USBCAMD_STILL_STREAM) 00067 00068 #define USBCAMD_STOP_STREAM 0x00000001 00069 #define USBCAMD_START_STREAM 0x00000000 00070 00071 typedef struct _pipe_config_descriptor { 00072 CHAR StreamAssociation; 00073 UCHAR PipeConfigFlags; 00074 } USBCAMD_Pipe_Config_Descriptor, *PUSBCAMD_Pipe_Config_Descriptor; 00075 00076 typedef enum { 00077 USBCAMD_CamControlFlag_NoVideoRawProcessing = 1, 00078 USBCAMD_CamControlFlag_NoStillRawProcessing = 2, 00079 USBCAMD_CamControlFlag_AssociatedFormat = 4, 00080 USBCAMD_CamControlFlag_EnableDeviceEvents = 8 00081 } USBCAMD_CamControlFlags; 00082 00083 typedef NTSTATUS DDKAPI 00084 (*PCAM_ALLOCATE_BW_ROUTINE)( 00085 PDEVICE_OBJECT BusDeviceObject, 00086 PVOID DeviceContext, 00087 PULONG RawFrameLength, 00088 PVOID Format); 00089 00090 typedef NTSTATUS DDKAPI 00091 (*PCAM_ALLOCATE_BW_ROUTINE_EX)( 00092 PDEVICE_OBJECT BusDeviceObject, 00093 PVOID DeviceContext, 00094 PULONG RawFrameLength, 00095 PVOID Format, 00096 ULONG StreamNumber); 00097 00098 typedef NTSTATUS DDKAPI 00099 (*PCAM_CONFIGURE_ROUTINE)( 00100 PDEVICE_OBJECT BusDeviceObject, 00101 PVOID DeviceContext, 00102 PUSBD_INTERFACE_INFORMATION Interface, 00103 PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor, 00104 PLONG DataPipeIndex, 00105 PLONG SyncPipeIndex); 00106 00107 typedef NTSTATUS DDKAPI 00108 (*PCAM_CONFIGURE_ROUTINE_EX)( 00109 PDEVICE_OBJECT BusDeviceObject, 00110 PVOID DeviceContext, 00111 PUSBD_INTERFACE_INFORMATION Interface, 00112 PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor, 00113 ULONG PipeConfigListSize, 00114 PUSBCAMD_Pipe_Config_Descriptor PipeConfig, 00115 PUSB_DEVICE_DESCRIPTOR DeviceDescriptor); 00116 00117 typedef NTSTATUS DDKAPI 00118 (*PCAM_FREE_BW_ROUTINE)( 00119 PDEVICE_OBJECT BusDeviceObject, 00120 PVOID DeviceContext); 00121 00122 typedef NTSTATUS DDKAPI 00123 (*PCAM_FREE_BW_ROUTINE_EX)( 00124 PDEVICE_OBJECT BusDeviceObject, 00125 PVOID DeviceContext, 00126 ULONG StreamNumber); 00127 00128 typedef NTSTATUS DDKAPI 00129 (*PCAM_INITIALIZE_ROUTINE)( 00130 PDEVICE_OBJECT BusDeviceObject, 00131 PVOID DeviceContext); 00132 00133 typedef VOID DDKAPI 00134 (*PCAM_NEW_FRAME_ROUTINE)( 00135 PVOID DeviceContext, 00136 PVOID FrameContext); 00137 00138 typedef VOID DDKAPI 00139 (*PCAM_NEW_FRAME_ROUTINE_EX)( 00140 PVOID DeviceContext, 00141 PVOID FrameContext, 00142 ULONG StreamNumber, 00143 PULONG FrameLength); 00144 00145 typedef NTSTATUS DDKAPI 00146 (*PCAM_PROCESS_RAW_FRAME_ROUTINE)( 00147 PDEVICE_OBJECT BusDeviceObject, 00148 PVOID DeviceContext, 00149 PVOID FrameContext, 00150 PVOID FrameBuffer, 00151 ULONG FrameLength, 00152 PVOID RawFrameBuffer, 00153 ULONG RawFrameLength, 00154 ULONG NumberOfPackets, 00155 PULONG BytesReturned); 00156 00157 typedef NTSTATUS DDKAPI 00158 (*PCAM_PROCESS_RAW_FRAME_ROUTINE_EX)( 00159 PDEVICE_OBJECT BusDeviceObject, 00160 PVOID DeviceContext, 00161 PVOID FrameContext, 00162 PVOID FrameBuffer, 00163 ULONG FrameLength, 00164 PVOID RawFrameBuffer, 00165 ULONG RawFrameLength, 00166 ULONG NumberOfPackets, 00167 PULONG BytesReturned, 00168 ULONG ActualRawFrameLength, 00169 ULONG StreamNumber); 00170 00171 typedef ULONG DDKAPI 00172 (*PCAM_PROCESS_PACKET_ROUTINE)( 00173 PDEVICE_OBJECT BusDeviceObject, 00174 PVOID DeviceContext, 00175 PVOID CurrentFrameContext, 00176 PUSBD_ISO_PACKET_DESCRIPTOR SyncPacket, 00177 PVOID SyncBuffer, 00178 PUSBD_ISO_PACKET_DESCRIPTOR DataPacket, 00179 PVOID DataBuffer, 00180 PBOOLEAN FrameComplete, 00181 PBOOLEAN NextFrameIsStill); 00182 00183 typedef ULONG DDKAPI 00184 (*PCAM_PROCESS_PACKET_ROUTINE_EX)( 00185 PDEVICE_OBJECT BusDeviceObject, 00186 PVOID DeviceContext, 00187 PVOID CurrentFrameContext, 00188 PUSBD_ISO_PACKET_DESCRIPTOR SyncPacket, 00189 PVOID SyncBuffer, 00190 PUSBD_ISO_PACKET_DESCRIPTOR DataPacket, 00191 PVOID DataBuffer, 00192 PBOOLEAN FrameComplete, 00193 PULONG PacketFlag, 00194 PULONG ValidDataOffset); 00195 00196 typedef NTSTATUS DDKAPI 00197 (*PCAM_STATE_ROUTINE)( 00198 PDEVICE_OBJECT BusDeviceObject, 00199 PVOID DeviceContext); 00200 00201 typedef NTSTATUS DDKAPI 00202 (*PCAM_START_CAPTURE_ROUTINE)( 00203 PDEVICE_OBJECT BusDeviceObject, 00204 PVOID DeviceContext); 00205 00206 typedef NTSTATUS DDKAPI 00207 (*PCAM_START_CAPTURE_ROUTINE_EX)( 00208 PDEVICE_OBJECT BusDeviceObject, 00209 PVOID DeviceContext, 00210 ULONG StreamNumber); 00211 00212 typedef NTSTATUS DDKAPI 00213 (*PCAM_STOP_CAPTURE_ROUTINE)( 00214 PDEVICE_OBJECT BusDeviceObject, 00215 PVOID DeviceContext); 00216 00217 typedef NTSTATUS DDKAPI 00218 (*PCAM_STOP_CAPTURE_ROUTINE_EX)( 00219 PDEVICE_OBJECT BusDeviceObject, 00220 PVOID DeviceContext, 00221 ULONG StreamNumber); 00222 00223 typedef struct _USBCAMD_DEVICE_DATA { 00224 ULONG Sig; 00225 PCAM_INITIALIZE_ROUTINE CamInitialize; 00226 PCAM_INITIALIZE_ROUTINE CamUnInitialize; 00227 PCAM_PROCESS_PACKET_ROUTINE CamProcessUSBPacket; 00228 PCAM_NEW_FRAME_ROUTINE CamNewVideoFrame; 00229 PCAM_PROCESS_RAW_FRAME_ROUTINE CamProcessRawVideoFrame; 00230 PCAM_START_CAPTURE_ROUTINE CamStartCapture; 00231 PCAM_STOP_CAPTURE_ROUTINE CamStopCapture; 00232 PCAM_CONFIGURE_ROUTINE CamConfigure; 00233 PCAM_STATE_ROUTINE CamSaveState; 00234 PCAM_STATE_ROUTINE CamRestoreState; 00235 PCAM_ALLOCATE_BW_ROUTINE CamAllocateBandwidth; 00236 PCAM_FREE_BW_ROUTINE CamFreeBandwidth; 00237 } USBCAMD_DEVICE_DATA, *PUSBCAMD_DEVICE_DATA; 00238 00239 typedef struct _USBCAMD_DEVICE_DATA2 { 00240 ULONG Sig; 00241 PCAM_INITIALIZE_ROUTINE CamInitialize; 00242 PCAM_INITIALIZE_ROUTINE CamUnInitialize; 00243 PCAM_PROCESS_PACKET_ROUTINE_EX CamProcessUSBPacketEx; 00244 PCAM_NEW_FRAME_ROUTINE_EX CamNewVideoFrameEx; 00245 PCAM_PROCESS_RAW_FRAME_ROUTINE_EX CamProcessRawVideoFrameEx; 00246 PCAM_START_CAPTURE_ROUTINE_EX CamStartCaptureEx; 00247 PCAM_STOP_CAPTURE_ROUTINE_EX CamStopCaptureEx; 00248 PCAM_CONFIGURE_ROUTINE_EX CamConfigureEx; 00249 PCAM_STATE_ROUTINE CamSaveState; 00250 PCAM_STATE_ROUTINE CamRestoreState; 00251 PCAM_ALLOCATE_BW_ROUTINE_EX CamAllocateBandwidthEx; 00252 PCAM_FREE_BW_ROUTINE_EX CamFreeBandwidthEx; 00253 } USBCAMD_DEVICE_DATA2, *PUSBCAMD_DEVICE_DATA2; 00254 00255 USBCAMAPI 00256 ULONG 00257 DDKAPI 00258 USBCAMD_InitializeNewInterface( 00259 /*IN*/ PVOID DeviceContext, 00260 /*IN*/ PVOID DeviceData, 00261 /*IN*/ ULONG Version, 00262 /*IN*/ ULONG CamControlFlag); 00263 00264 typedef VOID DDKAPI 00265 (*PCOMMAND_COMPLETE_FUNCTION)( 00266 PVOID DeviceContext, 00267 PVOID CommandContext, 00268 NTSTATUS NtStatus); 00269 00270 typedef NTSTATUS DDKAPI 00271 (*PFNUSBCAMD_BulkReadWrite)( 00272 /*IN*/ PVOID DeviceContext, 00273 /*IN*/ USHORT PipeIndex, 00274 /*IN*/ PVOID Buffer, 00275 /*IN*/ ULONG BufferLength, 00276 /*IN*/ PCOMMAND_COMPLETE_FUNCTION CommandComplete, 00277 /*IN*/ PVOID CommandContext); 00278 00279 typedef NTSTATUS DDKAPI 00280 (*PFNUSBCAMD_SetIsoPipeState)( 00281 /*IN*/ PVOID DeviceContext, 00282 /*IN*/ ULONG PipeStateFlags); 00283 00284 typedef NTSTATUS DDKAPI 00285 (*PFNUSBCAMD_CancelBulkReadWrite)( 00286 /*IN*/ PVOID DeviceContext, 00287 /*IN*/ ULONG PipeIndex); 00288 00289 typedef NTSTATUS DDKAPI 00290 (*PFNUSBCAMD_SetVideoFormat)( 00291 /*IN*/ PVOID DeviceContext, 00292 /*IN*/ PHW_STREAM_REQUEST_BLOCK pSrb); 00293 00294 typedef NTSTATUS DDKAPI 00295 (*PFNUSBCAMD_WaitOnDeviceEvent)( 00296 /*IN*/ PVOID DeviceContext, 00297 /*IN*/ ULONG PipeIndex, 00298 /*IN*/ PVOID Buffer, 00299 /*IN*/ ULONG BufferLength, 00300 /*IN*/ PCOMMAND_COMPLETE_FUNCTION EventComplete, 00301 /*IN*/ PVOID EventContext, 00302 /*IN*/ BOOLEAN LoopBack); 00303 00304 USBCAMAPI 00305 PVOID 00306 DDKAPI 00307 USBCAMD_AdapterReceivePacket( 00308 /*IN*/ PHW_STREAM_REQUEST_BLOCK Srb, 00309 /*IN*/ PUSBCAMD_DEVICE_DATA DeviceData, 00310 /*IN*/ PDEVICE_OBJECT *DeviceObject, 00311 /*IN*/ BOOLEAN NeedsCompletion); 00312 00313 USBCAMAPI 00314 NTSTATUS 00315 DDKAPI 00316 USBCAMD_ControlVendorCommand( 00317 /*IN*/ PVOID DeviceContext, 00318 /*IN*/ UCHAR Request, 00319 /*IN*/ USHORT Value, 00320 /*IN*/ USHORT Index, 00321 /*IN*/ PVOID Buffer, 00322 /*IN OUT*/ PULONG BufferLength, 00323 /*IN*/ BOOLEAN GetData, 00324 /*IN*/ PCOMMAND_COMPLETE_FUNCTION CommandComplete, 00325 /*IN*/ PVOID CommandContext); 00326 00327 typedef VOID DDKAPI 00328 (*PADAPTER_RECEIVE_PACKET_ROUTINE)( 00329 /*IN*/ PHW_STREAM_REQUEST_BLOCK Srb); 00330 00331 USBCAMAPI 00332 ULONG 00333 DDKAPI 00334 USBCAMD_DriverEntry( 00335 PVOID Context1, 00336 PVOID Context2, 00337 ULONG DeviceContextSize, 00338 ULONG FrameContextSize, 00339 PADAPTER_RECEIVE_PACKET_ROUTINE ReceivePacket); 00340 00341 USBCAMAPI 00342 NTSTATUS 00343 DDKAPI 00344 USBCAMD_GetRegistryKeyValue( 00345 /*IN*/ HANDLE Handle, 00346 /*IN*/ PWCHAR KeyNameString, 00347 /*IN*/ ULONG KeyNameStringLength, 00348 /*IN*/ PVOID Data, 00349 /*IN*/ ULONG DataLength); 00350 00351 USBCAMAPI 00352 NTSTATUS 00353 DDKAPI 00354 USBCAMD_SelectAlternateInterface( 00355 /*IN*/ PVOID DeviceContext, 00356 /*IN OUT*/ PUSBD_INTERFACE_INFORMATION RequestInterface); 00357 00358 #define USBCAMD_VERSION_200 0x200 00359 00360 typedef struct _USBCAMD_INTERFACE { 00361 INTERFACE Interface; 00362 PFNUSBCAMD_WaitOnDeviceEvent USBCAMD_WaitOnDeviceEvent; 00363 PFNUSBCAMD_BulkReadWrite USBCAMD_BulkReadWrite; 00364 PFNUSBCAMD_SetVideoFormat USBCAMD_SetVideoFormat; 00365 PFNUSBCAMD_SetIsoPipeState USBCAMD_SetIsoPipeState; 00366 PFNUSBCAMD_CancelBulkReadWrite USBCAMD_CancelBulkReadWrite; 00367 } USBCAMD_INTERFACE, *PUSBCAMD_INTERFACE; 00368 00369 typedef VOID DDKAPI 00370 (*PSTREAM_RECEIVE_PACKET)( 00371 /*IN*/ PVOID Srb, 00372 /*IN*/ PVOID DeviceContext, 00373 /*IN*/ PBOOLEAN Completed); 00374 00375 #if defined(DEBUG_LOG) 00376 00377 USBCAMAPI 00378 VOID 00379 DDKAPI 00380 USBCAMD_Debug_LogEntry( 00381 /*IN*/ CHAR *Name, 00382 /*IN*/ ULONG Info1, 00383 /*IN*/ ULONG Info2, 00384 /*IN*/ ULONG Info3); 00385 00386 #define ILOGENTRY(sig, info1, info2, info3) \ 00387 USBCAMD_Debug_LogEntry(sig, (ULONG)info1, (ULONG)info2, (ULONG)info3) 00388 00389 #else 00390 00391 #define ILOGENTRY(sig, info1, info2, info3) 00392 00393 #endif /* DEBUG_LOG */ 00394 00395 #pragma pack(pop) 00396 00397 #ifdef __cplusplus 00398 } 00399 #endif 00400 00401 #endif /* !defined(__USB_H) && !defined(__USBDI_H) */ 00402 00403 00404 #endif /* __USBCAMDI_H */
Generated on Tue Jul 12 2022 19:59:55 by
1.7.2