ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

usbcamdi.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 doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.