libc/winsup/w32api/include/ddk/usbcamdi.h

405 lines
10 KiB
C

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