Logo Search packages:      
Sourcecode: mingw-w64 version File versions  Download package

usbcamdi.h

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

#if defined(_BATTERYCLASS_)
  #define USBCAMAPI
#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 */

Generated by  Doxygen 1.6.0   Back to index