Naveen Neel / shedskin
Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers usbcamdi.h Source File

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 */