123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384 |
- /*
- * 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.
- *
- */
- #if !defined(__USB_H) && !defined(__USBDI_H)
- #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)(
- PVOID DeviceContext,
- PVOID CommandContext,
- NTSTATUS NtStatus);
- typedef VOID
- (NTAPI *PSTREAM_RECEIVE_PACKET)(
- PVOID Srb,
- PVOID DeviceContext,
- PBOOLEAN Completed);
- typedef NTSTATUS
- (NTAPI *PCAM_INITIALIZE_ROUTINE)(
- PDEVICE_OBJECT BusDeviceObject,
- PVOID DeviceContext);
- typedef NTSTATUS
- (NTAPI *PCAM_CONFIGURE_ROUTINE)(
- PDEVICE_OBJECT BusDeviceObject,
- PVOID DeviceContext,
- PUSBD_INTERFACE_INFORMATION Interface,
- PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor,
- PLONG DataPipeIndex,
- PLONG SyncPipeIndex);
- typedef NTSTATUS
- (NTAPI *PCAM_CONFIGURE_ROUTINE_EX)(
- PDEVICE_OBJECT BusDeviceObject,
- PVOID DeviceContext,
- PUSBD_INTERFACE_INFORMATION Interface,
- PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor,
- ULONG PipeConfigListSize,
- PUSBCAMD_Pipe_Config_Descriptor PipeConfig,
- PUSB_DEVICE_DESCRIPTOR DeviceDescriptor);
- typedef NTSTATUS
- (NTAPI *PCAM_START_CAPTURE_ROUTINE)(
- PDEVICE_OBJECT BusDeviceObject,
- PVOID DeviceContext);
- typedef NTSTATUS
- (NTAPI *PCAM_START_CAPTURE_ROUTINE_EX)(
- PDEVICE_OBJECT BusDeviceObject,
- PVOID DeviceContext,
- ULONG StreamNumber);
- typedef NTSTATUS
- (NTAPI *PCAM_ALLOCATE_BW_ROUTINE)(
- PDEVICE_OBJECT BusDeviceObject,
- PVOID DeviceContext,
- PULONG RawFrameLength,
- PVOID Format);
- typedef NTSTATUS
- (NTAPI *PCAM_ALLOCATE_BW_ROUTINE_EX)(
- PDEVICE_OBJECT BusDeviceObject,
- PVOID DeviceContext,
- PULONG RawFrameLength,
- PVOID Format,
- ULONG StreamNumber);
- typedef NTSTATUS
- (NTAPI *PCAM_FREE_BW_ROUTINE)(
- PDEVICE_OBJECT BusDeviceObject,
- PVOID DeviceContext);
- typedef NTSTATUS
- (NTAPI *PCAM_FREE_BW_ROUTINE_EX)(
- PDEVICE_OBJECT BusDeviceObject,
- PVOID DeviceContext,
- ULONG StreamNumber);
- typedef VOID
- (NTAPI *PADAPTER_RECEIVE_PACKET_ROUTINE)(
- PHW_STREAM_REQUEST_BLOCK Srb);
- typedef NTSTATUS
- (NTAPI *PCAM_STOP_CAPTURE_ROUTINE)(
- PDEVICE_OBJECT BusDeviceObject,
- PVOID DeviceContext);
- typedef NTSTATUS
- (NTAPI *PCAM_STOP_CAPTURE_ROUTINE_EX)(
- PDEVICE_OBJECT BusDeviceObject,
- PVOID DeviceContext,
- ULONG StreamNumber);
- typedef ULONG
- (NTAPI *PCAM_PROCESS_PACKET_ROUTINE)(
- PDEVICE_OBJECT BusDeviceObject,
- PVOID DeviceContext,
- PVOID CurrentFrameContext,
- PUSBD_ISO_PACKET_DESCRIPTOR SyncPacket,
- PVOID SyncBuffer,
- PUSBD_ISO_PACKET_DESCRIPTOR DataPacket,
- PVOID DataBuffer,
- PBOOLEAN FrameComplete,
- PBOOLEAN NextFrameIsStill);
- typedef ULONG
- (NTAPI *PCAM_PROCESS_PACKET_ROUTINE_EX)(
- PDEVICE_OBJECT BusDeviceObject,
- PVOID DeviceContext,
- PVOID CurrentFrameContext,
- PUSBD_ISO_PACKET_DESCRIPTOR SyncPacket,
- PVOID SyncBuffer,
- PUSBD_ISO_PACKET_DESCRIPTOR DataPacket,
- PVOID DataBuffer,
- PBOOLEAN FrameComplete,
- PULONG PacketFlag,
- PULONG ValidDataOffset);
- typedef VOID
- (NTAPI *PCAM_NEW_FRAME_ROUTINE)(
- PVOID DeviceContext,
- PVOID FrameContext);
- typedef VOID
- (NTAPI *PCAM_NEW_FRAME_ROUTINE_EX)(
- PVOID DeviceContext,
- PVOID FrameContext,
- ULONG StreamNumber,
- PULONG FrameLength);
- typedef NTSTATUS
- (NTAPI *PCAM_PROCESS_RAW_FRAME_ROUTINE)(
- PDEVICE_OBJECT BusDeviceObject,
- PVOID DeviceContext,
- PVOID FrameContext,
- PVOID FrameBuffer,
- ULONG FrameLength,
- PVOID RawFrameBuffer,
- ULONG RawFrameLength,
- ULONG NumberOfPackets,
- PULONG BytesReturned);
- typedef NTSTATUS
- (NTAPI *PCAM_PROCESS_RAW_FRAME_ROUTINE_EX)(
- PDEVICE_OBJECT BusDeviceObject,
- PVOID DeviceContext,
- PVOID FrameContext,
- PVOID FrameBuffer,
- ULONG FrameLength,
- PVOID RawFrameBuffer,
- ULONG RawFrameLength,
- ULONG NumberOfPackets,
- PULONG BytesReturned,
- ULONG ActualRawFrameLength,
- ULONG StreamNumber);
- typedef NTSTATUS
- (NTAPI *PCAM_STATE_ROUTINE)(
- PDEVICE_OBJECT BusDeviceObject,
- PVOID DeviceContext);
- #if defined(DEBUG_LOG)
- USBCAMAPI
- VOID
- NTAPI
- USBCAMD_Debug_LogEntry(
- CHAR *Name,
- ULONG Info1,
- ULONG Info2,
- 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)(
- PVOID DeviceContext,
- PHW_STREAM_REQUEST_BLOCK pSrb);
- typedef NTSTATUS
- (NTAPI *PFNUSBCAMD_WaitOnDeviceEvent)(
- PVOID DeviceContext,
- ULONG PipeIndex,
- PVOID Buffer,
- ULONG BufferLength,
- PCOMMAND_COMPLETE_FUNCTION EventComplete,
- PVOID EventContext,
- BOOLEAN LoopBack);
- typedef NTSTATUS
- (NTAPI *PFNUSBCAMD_CancelBulkReadWrite)(
- PVOID DeviceContext,
- ULONG PipeIndex);
- typedef NTSTATUS
- (NTAPI *PFNUSBCAMD_SetIsoPipeState)(
- PVOID DeviceContext,
- ULONG PipeStateFlags);
- typedef NTSTATUS
- (NTAPI *PFNUSBCAMD_BulkReadWrite)(
- PVOID DeviceContext,
- USHORT PipeIndex,
- PVOID Buffer,
- ULONG BufferLength,
- PCOMMAND_COMPLETE_FUNCTION CommandComplete,
- 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(
- PVOID Context1,
- PVOID Context2,
- ULONG DeviceContextSize,
- ULONG FrameContextSize,
- PADAPTER_RECEIVE_PACKET_ROUTINE ReceivePacket);
- USBCAMAPI
- PVOID
- NTAPI
- USBCAMD_AdapterReceivePacket(
- PHW_STREAM_REQUEST_BLOCK Srb,
- PUSBCAMD_DEVICE_DATA DeviceData,
- PDEVICE_OBJECT *DeviceObject,
- BOOLEAN NeedsCompletion);
- USBCAMAPI
- NTSTATUS
- NTAPI
- USBCAMD_ControlVendorCommand(
- PVOID DeviceContext,
- UCHAR Request,
- USHORT Value,
- USHORT Index,
- PVOID Buffer,
- PULONG BufferLength,
- BOOLEAN GetData,
- PCOMMAND_COMPLETE_FUNCTION CommandComplete,
- PVOID CommandContext);
- USBCAMAPI
- NTSTATUS
- NTAPI
- USBCAMD_SelectAlternateInterface(
- PVOID DeviceContext,
- PUSBD_INTERFACE_INFORMATION RequestInterface);
- USBCAMAPI
- NTSTATUS
- NTAPI
- USBCAMD_GetRegistryKeyValue(
- HANDLE Handle,
- PWCHAR KeyNameString,
- ULONG KeyNameStringLength,
- PVOID Data,
- ULONG DataLength);
- USBCAMAPI
- ULONG
- NTAPI
- USBCAMD_InitializeNewInterface(
- PVOID DeviceContext,
- PVOID DeviceData,
- ULONG Version,
- ULONG CamControlFlag);
- #ifdef __cplusplus
- }
- #endif
- #endif /* !defined(__USB_H) && !defined(__USBDI_H) */
|