| /* |
| * usbcamdi.h |
| * |
| * USB Camera driver interface. |
| * |
| * This file is part of the ReactOS PSDK package. |
| * |
| * Contributors: |
| * Created by Casper S. Hornstrup <chorns@users.sourceforge.net> |
| * |
| * THIS SOFTWARE IS NOT COPYRIGHTED |
| * |
| * This source code is offered for use in the public domain. You may |
| * use, modify or distribute it freely. |
| * |
| * This code is distributed in the hope that it will be useful but |
| * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY |
| * DISCLAIMED. This includes but is not limited to warranties of |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
| * |
| */ |
| |
| #pragma once |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| #if defined(_BATTERYCLASS_) |
| # define USBCAMAPI |
| #else |
| # define USBCAMAPI DECLSPEC_IMPORT |
| #endif |
| |
| typedef struct _pipe_config_descriptor { |
| CHAR StreamAssociation; |
| UCHAR PipeConfigFlags; |
| } USBCAMD_Pipe_Config_Descriptor, *PUSBCAMD_Pipe_Config_Descriptor; |
| |
| #define USBCAMD_DATA_PIPE 0x0001 |
| #define USBCAMD_MULTIPLEX_PIPE 0x0002 |
| #define USBCAMD_SYNC_PIPE 0x0004 |
| #define USBCAMD_DONT_CARE_PIPE 0x0008 |
| |
| #define USBCAMD_VIDEO_STREAM 0x1 |
| #define USBCAMD_STILL_STREAM 0x2 |
| #define USBCAMD_VIDEO_STILL_STREAM (USBCAMD_VIDEO_STREAM | USBCAMD_STILL_STREAM) |
| |
| #define USBCAMD_PROCESSPACKETEX_DropFrame 0x0002 |
| #define USBCAMD_PROCESSPACKETEX_NextFrameIsStill 0x0004 |
| #define USBCAMD_PROCESSPACKETEX_CurrentFrameIsStill 0x0008 |
| |
| #define USBCAMD_STOP_STREAM 0x00000001 |
| #define USBCAMD_START_STREAM 0x00000000 |
| |
| typedef enum { |
| USBCAMD_CamControlFlag_NoVideoRawProcessing = 1, |
| USBCAMD_CamControlFlag_NoStillRawProcessing = 2, |
| USBCAMD_CamControlFlag_AssociatedFormat = 4, |
| USBCAMD_CamControlFlag_EnableDeviceEvents = 8 |
| } USBCAMD_CamControlFlags; |
| |
| typedef NTSTATUS |
| (NTAPI *PCOMMAND_COMPLETE_FUNCTION)( |
| IN PVOID DeviceContext, |
| IN OUT PVOID CommandContext, |
| IN NTSTATUS NtStatus); |
| |
| typedef VOID |
| (NTAPI *PSTREAM_RECEIVE_PACKET)( |
| IN PVOID Srb, |
| IN PVOID DeviceContext, |
| IN PBOOLEAN Completed); |
| |
| typedef NTSTATUS |
| (NTAPI *PCAM_INITIALIZE_ROUTINE)( |
| PDEVICE_OBJECT BusDeviceObject, |
| PVOID DeviceContext); |
| |
| typedef NTSTATUS |
| (NTAPI *PCAM_CONFIGURE_ROUTINE)( |
| IN PDEVICE_OBJECT BusDeviceObject, |
| IN PVOID DeviceContext, |
| IN PUSBD_INTERFACE_INFORMATION Interface, |
| IN PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor, |
| IN PLONG DataPipeIndex, |
| IN PLONG SyncPipeIndex); |
| |
| typedef NTSTATUS |
| (NTAPI *PCAM_CONFIGURE_ROUTINE_EX)( |
| IN PDEVICE_OBJECT BusDeviceObject, |
| IN PVOID DeviceContext, |
| IN PUSBD_INTERFACE_INFORMATION Interface, |
| IN PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor, |
| IN ULONG PipeConfigListSize, |
| IN PUSBCAMD_Pipe_Config_Descriptor PipeConfig, |
| IN PUSB_DEVICE_DESCRIPTOR DeviceDescriptor); |
| |
| typedef NTSTATUS |
| (NTAPI *PCAM_START_CAPTURE_ROUTINE)( |
| IN PDEVICE_OBJECT BusDeviceObject, |
| IN PVOID DeviceContext); |
| |
| typedef NTSTATUS |
| (NTAPI *PCAM_START_CAPTURE_ROUTINE_EX)( |
| IN PDEVICE_OBJECT BusDeviceObject, |
| IN PVOID DeviceContext, |
| IN ULONG StreamNumber); |
| |
| typedef NTSTATUS |
| (NTAPI *PCAM_ALLOCATE_BW_ROUTINE)( |
| IN PDEVICE_OBJECT BusDeviceObject, |
| IN PVOID DeviceContext, |
| IN PULONG RawFrameLength, |
| IN PVOID Format); |
| |
| typedef NTSTATUS |
| (NTAPI *PCAM_ALLOCATE_BW_ROUTINE_EX)( |
| IN PDEVICE_OBJECT BusDeviceObject, |
| IN PVOID DeviceContext, |
| IN PULONG RawFrameLength, |
| IN PVOID Format, |
| IN ULONG StreamNumber); |
| |
| typedef NTSTATUS |
| (NTAPI *PCAM_FREE_BW_ROUTINE)( |
| IN PDEVICE_OBJECT BusDeviceObject, |
| IN PVOID DeviceContext); |
| |
| typedef NTSTATUS |
| (NTAPI *PCAM_FREE_BW_ROUTINE_EX)( |
| IN PDEVICE_OBJECT BusDeviceObject, |
| IN PVOID DeviceContext, |
| IN ULONG StreamNumber); |
| |
| typedef VOID |
| (NTAPI *PADAPTER_RECEIVE_PACKET_ROUTINE)( |
| IN OUT PHW_STREAM_REQUEST_BLOCK Srb); |
| |
| typedef NTSTATUS |
| (NTAPI *PCAM_STOP_CAPTURE_ROUTINE)( |
| IN PDEVICE_OBJECT BusDeviceObject, |
| IN PVOID DeviceContext); |
| |
| typedef NTSTATUS |
| (NTAPI *PCAM_STOP_CAPTURE_ROUTINE_EX)( |
| IN PDEVICE_OBJECT BusDeviceObject, |
| IN PVOID DeviceContext, |
| IN ULONG StreamNumber); |
| |
| typedef ULONG |
| (NTAPI *PCAM_PROCESS_PACKET_ROUTINE)( |
| IN PDEVICE_OBJECT BusDeviceObject, |
| IN PVOID DeviceContext, |
| IN PVOID CurrentFrameContext, |
| IN PUSBD_ISO_PACKET_DESCRIPTOR SyncPacket OPTIONAL, |
| IN PVOID SyncBuffer OPTIONAL, |
| IN PUSBD_ISO_PACKET_DESCRIPTOR DataPacket OPTIONAL, |
| IN OUT PVOID DataBuffer, |
| OUT PBOOLEAN FrameComplete, |
| OUT PBOOLEAN NextFrameIsStill); |
| |
| typedef ULONG |
| (NTAPI *PCAM_PROCESS_PACKET_ROUTINE_EX)( |
| IN PDEVICE_OBJECT BusDeviceObject, |
| IN PVOID DeviceContext, |
| IN PVOID CurrentFrameContext, |
| IN PUSBD_ISO_PACKET_DESCRIPTOR SyncPacket OPTIONAL, |
| IN PVOID SyncBuffer OPTIONAL, |
| IN PUSBD_ISO_PACKET_DESCRIPTOR DataPacket OPTIONAL, |
| IN OUT PVOID DataBuffer, |
| OUT PBOOLEAN FrameComplete, |
| OUT PULONG PacketFlag, |
| OUT PULONG ValidDataOffset); |
| |
| typedef VOID |
| (NTAPI *PCAM_NEW_FRAME_ROUTINE)( |
| IN PVOID DeviceContext, |
| IN PVOID FrameContext); |
| |
| typedef VOID |
| (NTAPI *PCAM_NEW_FRAME_ROUTINE_EX)( |
| IN PVOID DeviceContext, |
| IN PVOID FrameContext, |
| IN ULONG StreamNumber, |
| OUT PULONG FrameLength); |
| |
| typedef NTSTATUS |
| (NTAPI *PCAM_PROCESS_RAW_FRAME_ROUTINE)( |
| IN PDEVICE_OBJECT BusDeviceObject, |
| IN PVOID DeviceContext, |
| IN PVOID FrameContext, |
| IN PVOID FrameBuffer, |
| IN ULONG FrameLength, |
| OUT PVOID RawFrameBuffer, |
| IN ULONG RawFrameLength, |
| IN ULONG NumberOfPackets, |
| OUT PULONG BytesReturned); |
| |
| typedef NTSTATUS |
| (NTAPI *PCAM_PROCESS_RAW_FRAME_ROUTINE_EX)( |
| IN PDEVICE_OBJECT BusDeviceObject, |
| IN PVOID DeviceContext, |
| IN PVOID FrameContext, |
| IN PVOID FrameBuffer, |
| IN ULONG FrameLength, |
| OUT PVOID RawFrameBuffer, |
| IN ULONG RawFrameLength, |
| IN ULONG NumberOfPackets, |
| OUT PULONG BytesReturned, |
| IN ULONG ActualRawFrameLength, |
| IN ULONG StreamNumber); |
| |
| typedef NTSTATUS |
| (NTAPI *PCAM_STATE_ROUTINE)( |
| IN PDEVICE_OBJECT BusDeviceObject, |
| IN PVOID DeviceContext); |
| |
| #if defined(DEBUG_LOG) |
| |
| USBCAMAPI |
| VOID |
| NTAPI |
| USBCAMD_Debug_LogEntry( |
| IN CHAR *Name, |
| IN ULONG Info1, |
| IN ULONG Info2, |
| IN ULONG Info3); |
| |
| #define ILOGENTRY(sig, info1, info2, info3) \ |
| USBCAMD_Debug_LogEntry(sig, (ULONG)info1, (ULONG)info2, (ULONG)info3) |
| |
| #else |
| |
| #define ILOGENTRY(sig, info1, info2, info3) |
| |
| #endif /* DEBUG_LOG */ |
| |
| typedef struct _USBCAMD_DEVICE_DATA { |
| ULONG Sig; |
| PCAM_INITIALIZE_ROUTINE CamInitialize; |
| PCAM_INITIALIZE_ROUTINE CamUnInitialize; |
| PCAM_PROCESS_PACKET_ROUTINE CamProcessUSBPacket; |
| PCAM_NEW_FRAME_ROUTINE CamNewVideoFrame; |
| PCAM_PROCESS_RAW_FRAME_ROUTINE CamProcessRawVideoFrame; |
| PCAM_START_CAPTURE_ROUTINE CamStartCapture; |
| PCAM_STOP_CAPTURE_ROUTINE CamStopCapture; |
| PCAM_CONFIGURE_ROUTINE CamConfigure; |
| PCAM_STATE_ROUTINE CamSaveState; |
| PCAM_STATE_ROUTINE CamRestoreState; |
| PCAM_ALLOCATE_BW_ROUTINE CamAllocateBandwidth; |
| PCAM_FREE_BW_ROUTINE CamFreeBandwidth; |
| } USBCAMD_DEVICE_DATA, *PUSBCAMD_DEVICE_DATA; |
| |
| typedef struct _USBCAMD_DEVICE_DATA2 { |
| ULONG Sig; |
| PCAM_INITIALIZE_ROUTINE CamInitialize; |
| PCAM_INITIALIZE_ROUTINE CamUnInitialize; |
| PCAM_PROCESS_PACKET_ROUTINE_EX CamProcessUSBPacketEx; |
| PCAM_NEW_FRAME_ROUTINE_EX CamNewVideoFrameEx; |
| PCAM_PROCESS_RAW_FRAME_ROUTINE_EX CamProcessRawVideoFrameEx; |
| PCAM_START_CAPTURE_ROUTINE_EX CamStartCaptureEx; |
| PCAM_STOP_CAPTURE_ROUTINE_EX CamStopCaptureEx; |
| PCAM_CONFIGURE_ROUTINE_EX CamConfigureEx; |
| PCAM_STATE_ROUTINE CamSaveState; |
| PCAM_STATE_ROUTINE CamRestoreState; |
| PCAM_ALLOCATE_BW_ROUTINE_EX CamAllocateBandwidthEx; |
| PCAM_FREE_BW_ROUTINE_EX CamFreeBandwidthEx; |
| } USBCAMD_DEVICE_DATA2, *PUSBCAMD_DEVICE_DATA2; |
| |
| DEFINE_GUID(GUID_USBCAMD_INTERFACE, |
| 0x2bcb75c0, 0xb27f, 0x11d1, 0xba, 0x41, 0x0, 0xa0, 0xc9, 0xd, 0x2b, 0x5); |
| |
| typedef NTSTATUS |
| (NTAPI *PFNUSBCAMD_SetVideoFormat)( |
| IN PVOID DeviceContext, |
| IN PHW_STREAM_REQUEST_BLOCK pSrb); |
| |
| typedef NTSTATUS |
| (NTAPI *PFNUSBCAMD_WaitOnDeviceEvent)( |
| IN PVOID DeviceContext, |
| IN ULONG PipeIndex, |
| IN PVOID Buffer, |
| IN ULONG BufferLength, |
| IN PCOMMAND_COMPLETE_FUNCTION EventComplete, |
| IN PVOID EventContext, |
| IN BOOLEAN LoopBack); |
| |
| typedef NTSTATUS |
| (NTAPI *PFNUSBCAMD_CancelBulkReadWrite)( |
| IN PVOID DeviceContext, |
| IN ULONG PipeIndex); |
| |
| typedef NTSTATUS |
| (NTAPI *PFNUSBCAMD_SetIsoPipeState)( |
| IN PVOID DeviceContext, |
| IN ULONG PipeStateFlags); |
| |
| typedef NTSTATUS |
| (NTAPI *PFNUSBCAMD_BulkReadWrite)( |
| IN PVOID DeviceContext, |
| IN USHORT PipeIndex, |
| IN PVOID Buffer, |
| IN ULONG BufferLength, |
| IN PCOMMAND_COMPLETE_FUNCTION CommandComplete, |
| IN PVOID CommandContext); |
| |
| #define USBCAMD_VERSION_200 0x200 |
| |
| typedef struct _USBCAMD_INTERFACE { |
| INTERFACE Interface; |
| PFNUSBCAMD_WaitOnDeviceEvent USBCAMD_WaitOnDeviceEvent; |
| PFNUSBCAMD_BulkReadWrite USBCAMD_BulkReadWrite; |
| PFNUSBCAMD_SetVideoFormat USBCAMD_SetVideoFormat; |
| PFNUSBCAMD_SetIsoPipeState USBCAMD_SetIsoPipeState; |
| PFNUSBCAMD_CancelBulkReadWrite USBCAMD_CancelBulkReadWrite; |
| } USBCAMD_INTERFACE, *PUSBCAMD_INTERFACE; |
| |
| /* FIXME : Do we need USBCAMAPI here ? */ |
| |
| USBCAMAPI |
| ULONG |
| NTAPI |
| USBCAMD_DriverEntry( |
| IN PVOID Context1, |
| IN PVOID Context2, |
| IN ULONG DeviceContextSize, |
| IN ULONG FrameContextSize, |
| IN PADAPTER_RECEIVE_PACKET_ROUTINE ReceivePacket); |
| |
| USBCAMAPI |
| PVOID |
| NTAPI |
| USBCAMD_AdapterReceivePacket( |
| IN PHW_STREAM_REQUEST_BLOCK Srb, |
| IN PUSBCAMD_DEVICE_DATA DeviceData, |
| IN PDEVICE_OBJECT *DeviceObject, |
| IN BOOLEAN NeedsCompletion); |
| |
| USBCAMAPI |
| NTSTATUS |
| NTAPI |
| USBCAMD_ControlVendorCommand( |
| IN PVOID DeviceContext, |
| IN UCHAR Request, |
| IN USHORT Value, |
| IN USHORT Index, |
| IN OUT PVOID Buffer, |
| IN OUT PULONG BufferLength, |
| IN BOOLEAN GetData, |
| IN PCOMMAND_COMPLETE_FUNCTION CommandComplete OPTIONAL, |
| IN PVOID CommandContext OPTIONAL); |
| |
| USBCAMAPI |
| NTSTATUS |
| NTAPI |
| USBCAMD_SelectAlternateInterface( |
| IN PVOID DeviceContext, |
| IN OUT PUSBD_INTERFACE_INFORMATION RequestInterface); |
| |
| USBCAMAPI |
| NTSTATUS |
| NTAPI |
| USBCAMD_GetRegistryKeyValue( |
| IN HANDLE Handle, |
| IN PWCHAR KeyNameString, |
| IN ULONG KeyNameStringLength, |
| IN PVOID Data, |
| IN ULONG DataLength); |
| |
| USBCAMAPI |
| ULONG |
| NTAPI |
| USBCAMD_InitializeNewInterface( |
| IN PVOID DeviceContext, |
| IN PVOID DeviceData, |
| IN ULONG Version, |
| IN ULONG CamControlFlag); |
| |
| #ifdef __cplusplus |
| } |
| #endif |
| |
| #endif /* !defined(__USB_H) && !defined(__USBDI_H) */ |