home *** CD-ROM | disk | FTP | other *** search
- /*
- * usbcamdi.h
- *
- * USB Camera driver interface.
- *
- * This file is part of the w32api 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.
- *
- */
-
- #ifndef __USBCAMDI_H
- #define __USBCAMDI_H
-
- #if __GNUC__ >=3
- #pragma GCC system_header
- #endif
-
- #if !defined(__USB_H) && !defined(__USBDI_H)
- #error include usb.h or usbdi.h before usbcamdi.h
- #else
-
- #ifdef __cplusplus
- extern "C" {
- #endif
-
- #pragma pack(push,4)
-
- #include "ntddk.h"
-
- #if defined(_BATTERYCLASS_)
- #define USBCAMAPI DECLSPEC_EXPORT
- #else
- #define USBCAMAPI DECLSPEC_IMPORT
- #endif
-
-
- /* FIXME: Unknown definition */
- typedef PVOID PHW_STREAM_REQUEST_BLOCK;
-
- DEFINE_GUID(GUID_USBCAMD_INTERFACE,
- 0x2bcb75c0, 0xb27f, 0x11d1, 0xba, 0x41, 0x0, 0xa0, 0xc9, 0xd, 0x2b, 0x5);
-
- #define USBCAMD_PROCESSPACKETEX_DropFrame 0x0002
- #define USBCAMD_PROCESSPACKETEX_NextFrameIsStill 0x0004
- #define USBCAMD_PROCESSPACKETEX_CurrentFrameIsStill 0x0008
-
- #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_STOP_STREAM 0x00000001
- #define USBCAMD_START_STREAM 0x00000000
-
- typedef struct _pipe_config_descriptor {
- CHAR StreamAssociation;
- UCHAR PipeConfigFlags;
- } USBCAMD_Pipe_Config_Descriptor, *PUSBCAMD_Pipe_Config_Descriptor;
-
- typedef enum {
- USBCAMD_CamControlFlag_NoVideoRawProcessing = 1,
- USBCAMD_CamControlFlag_NoStillRawProcessing = 2,
- USBCAMD_CamControlFlag_AssociatedFormat = 4,
- USBCAMD_CamControlFlag_EnableDeviceEvents = 8,
- } USBCAMD_CamControlFlags;
-
- typedef NTSTATUS DDKAPI
- (*PCAM_ALLOCATE_BW_ROUTINE)(
- PDEVICE_OBJECT BusDeviceObject,
- PVOID DeviceContext,
- PULONG RawFrameLength,
- PVOID Format);
-
- typedef NTSTATUS DDKAPI
- (*PCAM_ALLOCATE_BW_ROUTINE_EX)(
- PDEVICE_OBJECT BusDeviceObject,
- PVOID DeviceContext,
- PULONG RawFrameLength,
- PVOID Format,
- ULONG StreamNumber);
-
- typedef NTSTATUS DDKAPI
- (*PCAM_CONFIGURE_ROUTINE)(
- PDEVICE_OBJECT BusDeviceObject,
- PVOID DeviceContext,
- PUSBD_INTERFACE_INFORMATION Interface,
- PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor,
- PLONG DataPipeIndex,
- PLONG SyncPipeIndex);
-
- typedef NTSTATUS DDKAPI
- (*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 DDKAPI
- (*PCAM_FREE_BW_ROUTINE)(
- PDEVICE_OBJECT BusDeviceObject,
- PVOID DeviceContext);
-
- typedef NTSTATUS DDKAPI
- (*PCAM_FREE_BW_ROUTINE_EX)(
- PDEVICE_OBJECT BusDeviceObject,
- PVOID DeviceContext,
- ULONG StreamNumber);
-
- typedef NTSTATUS DDKAPI
- (*PCAM_INITIALIZE_ROUTINE)(
- PDEVICE_OBJECT BusDeviceObject,
- PVOID DeviceContext);
-
- typedef VOID DDKAPI
- (*PCAM_NEW_FRAME_ROUTINE)(
- PVOID DeviceContext,
- PVOID FrameContext);
-
- typedef VOID DDKAPI
- (*PCAM_NEW_FRAME_ROUTINE_EX)(
- PVOID DeviceContext,
- PVOID FrameContext,
- ULONG StreamNumber,
- PULONG FrameLength);
-
- typedef NTSTATUS DDKAPI
- (*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 DDKAPI
- (*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 ULONG DDKAPI
- (*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 DDKAPI
- (*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 NTSTATUS DDKAPI
- (*PCAM_STATE_ROUTINE)(
- PDEVICE_OBJECT BusDeviceObject,
- PVOID DeviceContext);
-
- typedef NTSTATUS DDKAPI
- (*PCAM_START_CAPTURE_ROUTINE)(
- PDEVICE_OBJECT BusDeviceObject,
- PVOID DeviceContext);
-
- typedef NTSTATUS DDKAPI
- (*PCAM_START_CAPTURE_ROUTINE_EX)(
- PDEVICE_OBJECT BusDeviceObject,
- PVOID DeviceContext,
- ULONG StreamNumber);
-
- typedef NTSTATUS DDKAPI
- (*PCAM_STOP_CAPTURE_ROUTINE)(
- PDEVICE_OBJECT BusDeviceObject,
- PVOID DeviceContext);
-
- typedef NTSTATUS DDKAPI
- (*PCAM_STOP_CAPTURE_ROUTINE_EX)(
- PDEVICE_OBJECT BusDeviceObject,
- PVOID DeviceContext,
- ULONG StreamNumber);
-
- 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;
-
- USBCAMAPI
- ULONG
- DDKAPI
- USBCAMD_InitializeNewInterface(
- IN PVOID DeviceContext,
- IN PVOID DeviceData,
- IN ULONG Version,
- IN ULONG CamControlFlag);
-
- typedef VOID DDKAPI
- (*PCOMMAND_COMPLETE_FUNCTION)(
- PVOID DeviceContext,
- PVOID CommandContext,
- NTSTATUS NtStatus);
-
- typedef NTSTATUS DDKAPI
- (*PFNUSBCAMD_BulkReadWrite)(
- IN PVOID DeviceContext,
- IN USHORT PipeIndex,
- IN PVOID Buffer,
- IN ULONG BufferLength,
- IN PCOMMAND_COMPLETE_FUNCTION CommandComplete,
- IN PVOID CommandContext);
-
- typedef NTSTATUS DDKAPI
- (*PFNUSBCAMD_SetIsoPipeState)(
- IN PVOID DeviceContext,
- IN ULONG PipeStateFlags);
-
- typedef NTSTATUS DDKAPI
- (*PFNUSBCAMD_CancelBulkReadWrite)(
- IN PVOID DeviceContext,
- IN ULONG PipeIndex);
-
- typedef NTSTATUS DDKAPI
- (*PFNUSBCAMD_SetVideoFormat)(
- IN PVOID DeviceContext,
- IN PHW_STREAM_REQUEST_BLOCK pSrb);
-
- typedef NTSTATUS DDKAPI
- (*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);
-
- USBCAMAPI
- PVOID
- DDKAPI
- USBCAMD_AdapterReceivePacket(
- IN PHW_STREAM_REQUEST_BLOCK Srb,
- IN PUSBCAMD_DEVICE_DATA DeviceData,
- IN PDEVICE_OBJECT *DeviceObject,
- IN BOOLEAN NeedsCompletion);
-
- USBCAMAPI
- NTSTATUS
- DDKAPI
- USBCAMD_ControlVendorCommand(
- IN PVOID DeviceContext,
- IN UCHAR Request,
- IN USHORT Value,
- IN USHORT Index,
- IN PVOID Buffer,
- IN OUT PULONG BufferLength,
- IN BOOLEAN GetData,
- IN PCOMMAND_COMPLETE_FUNCTION CommandComplete,
- IN PVOID CommandContext);
-
- typedef VOID DDKAPI
- (*PADAPTER_RECEIVE_PACKET_ROUTINE)(
- IN PHW_STREAM_REQUEST_BLOCK Srb);
-
- USBCAMAPI
- ULONG
- DDKAPI
- USBCAMD_DriverEntry(
- PVOID Context1,
- PVOID Context2,
- ULONG DeviceContextSize,
- ULONG FrameContextSize,
- PADAPTER_RECEIVE_PACKET_ROUTINE ReceivePacket);
-
- USBCAMAPI
- NTSTATUS
- DDKAPI
- USBCAMD_GetRegistryKeyValue(
- IN HANDLE Handle,
- IN PWCHAR KeyNameString,
- IN ULONG KeyNameStringLength,
- IN PVOID Data,
- IN ULONG DataLength);
-
- USBCAMAPI
- NTSTATUS
- DDKAPI
- USBCAMD_SelectAlternateInterface(
- IN PVOID DeviceContext,
- IN OUT PUSBD_INTERFACE_INFORMATION RequestInterface);
-
- #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;
-
- typedef VOID DDKAPI
- (*PSTREAM_RECEIVE_PACKET)(
- IN PVOID Srb,
- IN PVOID DeviceContext,
- IN PBOOLEAN Completed);
-
- #if defined(DEBUG_LOG)
-
- USBCAMAPI
- VOID
- DDKAPI
- 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 */
-
- #pragma pack(pop)
-
- #ifdef __cplusplus
- }
- #endif
-
- #endif /* !defined(__USB_H) && !defined(__USBDI_H) */
-
-
- #endif /* __USBCAMDI_H */
-