595 lines
16 KiB
C
595 lines
16 KiB
C
/*++
|
|
|
|
Copyright (c) 1997 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
USBCAMDI.H
|
|
|
|
Abstract:
|
|
|
|
interface definition for .
|
|
|
|
Environment:
|
|
|
|
Kernel & user mode
|
|
|
|
Revision History:
|
|
|
|
|
|
--*/
|
|
|
|
|
|
#ifndef __USBCAMDI_H__
|
|
#define __USBCAMDI_H__
|
|
|
|
// the purpose of this structure is to establish a connection between pipes discovered and
|
|
// streams to be declared (video,still). the following structure will be be passed along with
|
|
// USBD_PIPE_INFO structure in CamConfigEx to the cam driver. The Cam driver has to indicate
|
|
// pipe stream asscociation by oring all the relevant streams associated with this particular
|
|
// pipe. If there is more than one stream association, USBCAMD creates a virtual still pin,
|
|
// and assumes the first stream is video followed by still stream.
|
|
// The cam driver has to set the first field to USBCAMD_DONT_CARE_PIPE if a particular pipe should not be used by
|
|
// usbcamd. For example, if you have an iso audio pipe, iso video pipe in a camera device that
|
|
// supports stills and video .you should set the flag field in the first structure to
|
|
// USBCAMD_DONT_CARE_PIPE, The second structure should be set as foolows:
|
|
// {USBCAMD_VIDEO_STILL_STREAM,USBCAMD_MULTIPLEX_PIPE)}.
|
|
// the assumption here is that cam has one config descr, and all alt.interfcaes have the same
|
|
// number and types of pipes.
|
|
// also, notice that the flags are mutually exclusive.
|
|
//
|
|
|
|
typedef struct _pipe_config_descriptor {
|
|
CHAR StreamAssociation ; // video stream, still stream, or both
|
|
UCHAR PipeConfigFlags; // USBCAMD_PIPECONFIG_*
|
|
} USBCAMD_Pipe_Config_Descriptor, *PUSBCAMD_Pipe_Config_Descriptor;
|
|
|
|
#define USBCAMD_DATA_PIPE 0x0001 // video or still data pipe
|
|
#define USBCAMD_MULTIPLEX_PIPE 0x0002 // pipe used for both still & video
|
|
#define USBCAMD_SYNC_PIPE 0x0004 // out-of-band signalling pipe.
|
|
#define USBCAMD_DONT_CARE_PIPE 0x0008 // pipe is not to be used for streaming vidoe or still.
|
|
|
|
#define USBCAMD_VIDEO_STREAM 0x1
|
|
#define USBCAMD_STILL_STREAM 0x2
|
|
#define USBCAMD_VIDEO_STILL_STREAM (USBCAMD_VIDEO_STREAM | USBCAMD_STILL_STREAM)
|
|
|
|
|
|
// PacketFlag definitions for CamProcessUSBPacketEx
|
|
// *** Notice *** : these flags are mutually exclusive.
|
|
|
|
// current frame is unsalvageable, recycle the read IRP
|
|
#define USBCAMD_PROCESSPACKETEX_DropFrame 0x0002
|
|
// following frame is still.
|
|
#define USBCAMD_PROCESSPACKETEX_NextFrameIsStill 0x0004
|
|
// copy this frame to still pin. .
|
|
#define USBCAMD_PROCESSPACKETEX_CurrentFrameIsStill 0x0008
|
|
|
|
// these flags are used in PipeStateFlag in usbcamd_setpipestate function.
|
|
|
|
#define USBCAMD_STOP_STREAM 0x00000001
|
|
#define USBCAMD_START_STREAM 0x00000000
|
|
|
|
//
|
|
// the following flags are passed to usbcamd in USBCAMD_InitializeNewInterface.
|
|
// If Cam driver doesn't need to operate on the still image raw frame, then it should
|
|
// set the second flag in order to elminate on ebuffer copy. Likewise for the video frame.
|
|
// the associatedformat flag is set if the cam driver use the same format fro video and
|
|
// virtual still pin. Once, this flag is set, USBCAMD will not allow virtual still pin to be
|
|
// opened at different format than the video pin. USE this flag only when the virtual still
|
|
// pin produces frames that have exact format as video frames.
|
|
// EnableDeviceEvents will expose a deviceevents to stream class & DSHOW which will enable an STI
|
|
// Monitor to lunch a still image app if still button is pressed on the camera.
|
|
|
|
typedef enum {
|
|
USBCAMD_CamControlFlag_NoVideoRawProcessing = 0x0001,
|
|
USBCAMD_CamControlFlag_NoStillRawProcessing = 0x0002,
|
|
USBCAMD_CamControlFlag_AssociatedFormat = 0x0004,
|
|
USBCAMD_CamControlFlag_EnableDeviceEvents = 0x0008,
|
|
} USBCAMD_CamControlFlags;
|
|
|
|
|
|
// ------------------------------------------------------------------------
|
|
// The master list of all streams supported by this driver
|
|
// ------------------------------------------------------------------------
|
|
|
|
typedef
|
|
NTSTATUS
|
|
(*PCOMMAND_COMPLETE_FUNCTION)(
|
|
PVOID DeviceContext,
|
|
PVOID CommandContext,
|
|
NTSTATUS NtStatus
|
|
);
|
|
|
|
|
|
typedef
|
|
VOID
|
|
(*PSTREAM_RECEIVE_PACKET) (
|
|
IN PVOID Srb,
|
|
IN PVOID DeviceContext,
|
|
IN PBOOLEAN Completed
|
|
);
|
|
|
|
|
|
typedef
|
|
NTSTATUS
|
|
(*PCAM_INITIALIZE_ROUTINE)(
|
|
PDEVICE_OBJECT BusDeviceObject,
|
|
PVOID DeviceContext
|
|
);
|
|
|
|
|
|
|
|
typedef
|
|
NTSTATUS
|
|
(*PCAM_CONFIGURE_ROUTINE)(
|
|
PDEVICE_OBJECT BusDeviceObject,
|
|
PVOID DeviceContext,
|
|
PUSBD_INTERFACE_INFORMATION Interface,
|
|
PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor,
|
|
PLONG DataPipeIndex,
|
|
PLONG SyncPipeIndex
|
|
);
|
|
|
|
typedef
|
|
NTSTATUS
|
|
(*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
|
|
(*PCAM_START_CAPTURE_ROUTINE)(
|
|
PDEVICE_OBJECT BusDeviceObject,
|
|
PVOID DeviceContext
|
|
);
|
|
|
|
typedef
|
|
NTSTATUS
|
|
(*PCAM_START_CAPTURE_ROUTINE_EX)(
|
|
PDEVICE_OBJECT BusDeviceObject,
|
|
PVOID DeviceContext,
|
|
ULONG StreamNumber
|
|
|
|
);
|
|
|
|
|
|
typedef
|
|
NTSTATUS
|
|
(*PCAM_ALLOCATE_BW_ROUTINE)(
|
|
PDEVICE_OBJECT BusDeviceObject,
|
|
PVOID DeviceContext,
|
|
PULONG RawFrameLength,
|
|
PVOID Format
|
|
);
|
|
|
|
typedef
|
|
NTSTATUS
|
|
(*PCAM_ALLOCATE_BW_ROUTINE_EX)(
|
|
PDEVICE_OBJECT BusDeviceObject,
|
|
PVOID DeviceContext,
|
|
PULONG RawFrameLength,
|
|
PVOID Format,
|
|
ULONG StreamNumber
|
|
);
|
|
|
|
typedef
|
|
NTSTATUS
|
|
(*PCAM_FREE_BW_ROUTINE)(
|
|
PDEVICE_OBJECT BusDeviceObject,
|
|
PVOID DeviceContext
|
|
);
|
|
|
|
typedef
|
|
NTSTATUS
|
|
(*PCAM_FREE_BW_ROUTINE_EX)(
|
|
PDEVICE_OBJECT BusDeviceObject,
|
|
PVOID DeviceContext,
|
|
ULONG STreamNumber
|
|
);
|
|
|
|
typedef
|
|
VOID
|
|
(*PADAPTER_RECEIVE_PACKET_ROUTINE)(
|
|
IN PHW_STREAM_REQUEST_BLOCK Srb
|
|
);
|
|
|
|
typedef
|
|
NTSTATUS
|
|
(*PCAM_STOP_CAPTURE_ROUTINE)(
|
|
PDEVICE_OBJECT BusDeviceObject,
|
|
PVOID DeviceContext
|
|
);
|
|
|
|
typedef
|
|
NTSTATUS
|
|
(*PCAM_STOP_CAPTURE_ROUTINE_EX)(
|
|
PDEVICE_OBJECT BusDeviceObject,
|
|
PVOID DeviceContext,
|
|
ULONG StreamNumber
|
|
);
|
|
|
|
typedef
|
|
ULONG
|
|
(*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
|
|
(*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
|
|
(*PCAM_NEW_FRAME_ROUTINE) (
|
|
PVOID DeviceContext,
|
|
PVOID FrameContext
|
|
);
|
|
|
|
typedef
|
|
VOID
|
|
(*PCAM_NEW_FRAME_ROUTINE_EX) (
|
|
PVOID DeviceContext,
|
|
PVOID FrameContext,
|
|
ULONG StreamNumber,
|
|
PULONG FrameLength
|
|
);
|
|
|
|
typedef
|
|
NTSTATUS
|
|
(*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
|
|
(*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
|
|
(*PCAM_STATE_ROUTINE) (
|
|
PDEVICE_OBJECT BusDeviceObject,
|
|
PVOID DeviceContext
|
|
);
|
|
|
|
|
|
#ifdef DEBUG_LOG
|
|
|
|
VOID
|
|
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;
|
|
|
|
|
|
|
|
//
|
|
// USBCAMD services
|
|
//
|
|
|
|
/*
|
|
|
|
This function is called from the "cam" driver DriverEntry routine to register
|
|
the driver with USBCAMD. This effectively binds the two drivers together.
|
|
|
|
Context1, Context2 - these are passed to the "cam" drivers DriverEntry and
|
|
should simply be passed on
|
|
DeviceContextSize - amount of memory needed for the "cam" driver's device
|
|
specific context.
|
|
FrameContextSize - size of an optional per video frame structure passed to
|
|
NewVideoFrame and ProcessRawVideoFrame.
|
|
|
|
*/
|
|
|
|
ULONG
|
|
USBCAMD_DriverEntry(
|
|
PVOID Context1,
|
|
PVOID Context2,
|
|
ULONG DeviceContextSize,
|
|
ULONG FrameContextSize,
|
|
PADAPTER_RECEIVE_PACKET_ROUTINE ReceivePacket
|
|
);
|
|
|
|
/*
|
|
This function is called by the "cam" driver from the AdapterReceivePacket
|
|
routine to allow USBCAMD to process an SRB.
|
|
|
|
Srb - The srb passed to the "cam" driver's AdapterReceievPacket Routine.
|
|
DeviceData - filled in USBCAMD_DEVICE_DATAx structure with entry points to the
|
|
"cam" driver for iso stream processing.
|
|
DeviceObject - this pointer will be filled in the device PDO, this is used by
|
|
the "cam" driver for calls to the USB stack through IoCallDriver.
|
|
NeedsCompletion - if this flag is true USBCAMD will process the SRB and
|
|
complete it, otherwise USBCAMD will ignore the SRB and just return the
|
|
DeveiceConext.
|
|
|
|
Returns:
|
|
Returns a pointer to the device specific context for this instance of the
|
|
camera "DeviceContext".
|
|
|
|
*/
|
|
|
|
PVOID
|
|
USBCAMD_AdapterReceivePacket(
|
|
IN PHW_STREAM_REQUEST_BLOCK Srb,
|
|
IN PUSBCAMD_DEVICE_DATA DeviceData,
|
|
IN PDEVICE_OBJECT *DeviceObject,
|
|
IN BOOLEAN NeedsCompletion
|
|
);
|
|
|
|
/*
|
|
This function is available to the "cam" driver to send vendor commands on the
|
|
control pipe. This function may be called at IRQL >= PASSIVE_LEVEL. If the
|
|
function is called at IRQL > PASSIVE_LEVEL the command will be deferred until
|
|
passive level, once completed the callers CommandComplete function is called
|
|
with a pointer to the CommandContext.
|
|
|
|
|
|
DeviceContext - device specific context.
|
|
Request - value for the bRequest field for the vendor command.
|
|
Value - value for the wValue field of the vendor command.
|
|
Index - value for the wIndex field of the vendor conmmand.
|
|
Buffer - data buffer if the command has data, may be NULL.
|
|
BufferLength - pointer length of Buffer in bytes, may be NULL if buffer is NULL
|
|
GetData - flag indicating data direction, "GetData" indicates data is send
|
|
device-to-host.
|
|
CommandComplete - function called when command is completed.
|
|
CommandContext - context passed to CommandComplete function
|
|
|
|
Returns:
|
|
Returns NTSTATUS code from command of STTAUS_PENDING if command is deferred.
|
|
|
|
*/
|
|
|
|
NTSTATUS
|
|
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
|
|
);
|
|
|
|
/*
|
|
This function is called by the "cam" driver to select an alternate interface,
|
|
The RequestInterface structure is filled in with the information from the
|
|
SELECT_INTERFACE request on successful completion. This function is
|
|
typically called from the "cam" driver in response to a request to allocate
|
|
or free bandwidth.
|
|
|
|
DeviceContext - device specific context.
|
|
RequestInterface - USBD_INTERFACE_INFORMATION structure for the appropriate
|
|
interface to select. The same rules apply to this structure as for the
|
|
SELECT_INTERFACE USBD request (see USBDI doc).
|
|
|
|
Returns:
|
|
Returns the status from the SELECT_INTERFACE request to USBD.
|
|
|
|
*/
|
|
|
|
NTSTATUS
|
|
USBCAMD_SelectAlternateInterface(
|
|
IN PVOID DeviceContext,
|
|
IN OUT PUSBD_INTERFACE_INFORMATION RequestInterface
|
|
);
|
|
|
|
/*
|
|
Handy function to get a device instance specific registry key value
|
|
*/
|
|
|
|
NTSTATUS
|
|
USBCAMD_GetRegistryKeyValue (
|
|
IN HANDLE Handle,
|
|
IN PWCHAR KeyNameString,
|
|
IN ULONG KeyNameStringLength,
|
|
IN PVOID Data,
|
|
IN ULONG DataLength
|
|
);
|
|
|
|
//
|
|
// These services are new.
|
|
//
|
|
|
|
/*
|
|
|
|
This function is called from the "cam" driver upon recieving SRB_INITIALIZE_DEVICE
|
|
to provid usbcamd with all the necessary info to configure the cam driver correctly with
|
|
stream class and USB Bus drivers.
|
|
|
|
DeviceContext - device specific context.
|
|
DeviceData - filled in USBCAMD_DEVICE_DATAx structure with entry points to the
|
|
"cam" driver .
|
|
Version - USBCAMD version
|
|
CamControlFlag - flags to control interaction with cam driver.
|
|
|
|
*/
|
|
|
|
ULONG
|
|
USBCAMD_InitializeNewInterface(
|
|
IN PVOID DeviceContext,
|
|
IN PVOID DeviceData,
|
|
IN ULONG Version,
|
|
IN ULONG CamControlFlag
|
|
);
|
|
|
|
|
|
|
|
// To access the new USBCAMD functionality in a CAM driver , the driver sends
|
|
// the following IRP to itself once it received SRB_INITIALIZATION_COMPLETE.
|
|
|
|
// MajorFunction = IRP_MJ_PNP;
|
|
// MinorFunction = IRP_MN_QUERY_INTERFACE;
|
|
|
|
// {2BCB75C0-B27F-11d1-BA41-00A0C90D2B05}
|
|
DEFINE_GUID( GUID_USBCAMD_INTERFACE ,
|
|
0x2bcb75c0, 0xb27f, 0x11d1, 0xba, 0x41, 0x0, 0xa0, 0xc9, 0xd, 0x2b, 0x5);
|
|
|
|
|
|
|
|
//The QUERY_INTERFACE Irp will return an interface (set of function pointers)
|
|
// of the type xxxxINTERFACE, defined below. This is essentially a table of
|
|
// function pointers.
|
|
|
|
|
|
typedef
|
|
NTSTATUS
|
|
(*PFNUSBCAMD_SetVideoFormat)(
|
|
IN PVOID DeviceContext,
|
|
IN IN PHW_STREAM_REQUEST_BLOCK pSrb
|
|
);
|
|
|
|
|
|
typedef
|
|
NTSTATUS
|
|
(*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
|
|
);
|
|
|
|
// this function is callable at PASSIVE_LEVEL Only.
|
|
|
|
typedef
|
|
NTSTATUS
|
|
(*PFNUSBCAMD_CancelBulkReadWrite)(
|
|
IN PVOID DeviceContext,
|
|
IN ULONG PipeIndex
|
|
);
|
|
|
|
|
|
typedef
|
|
NTSTATUS
|
|
(*PFNUSBCAMD_SetIsoPipeState)(
|
|
IN PVOID DeviceContext,
|
|
IN ULONG PipeStateFlags
|
|
);
|
|
|
|
|
|
typedef
|
|
NTSTATUS
|
|
(*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 {
|
|
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;
|
|
|
|
|
|
|
|
|
|
#endif /* __USBCAMDI_H__ */
|