home *** CD-ROM | disk | FTP | other *** search
/ Beginning C++ Through Gam…rogramming (2nd Edition) / BCGP2E.ISO / bloodshed / devcpp-4.9.9.2_setup.exe / usbcamdi.h < prev    next >
C/C++ Source or Header  |  2005-01-29  |  10KB  |  405 lines

  1. /*
  2.  * usbcamdi.h
  3.  *
  4.  * USB Camera driver interface.
  5.  *
  6.  * This file is part of the w32api package.
  7.  *
  8.  * Contributors:
  9.  *   Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
  10.  *
  11.  * THIS SOFTWARE IS NOT COPYRIGHTED
  12.  *
  13.  * This source code is offered for use in the public domain. You may
  14.  * use, modify or distribute it freely.
  15.  *
  16.  * This code is distributed in the hope that it will be useful but
  17.  * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
  18.  * DISCLAIMED. This includes but is not limited to warranties of
  19.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  20.  *
  21.  */
  22.  
  23. #ifndef __USBCAMDI_H
  24. #define __USBCAMDI_H
  25.  
  26. #if __GNUC__ >=3
  27. #pragma GCC system_header
  28. #endif
  29.  
  30. #if !defined(__USB_H) && !defined(__USBDI_H)
  31. #error include usb.h or usbdi.h before usbcamdi.h
  32. #else
  33.  
  34. #ifdef __cplusplus
  35. extern "C" {
  36. #endif
  37.  
  38. #pragma pack(push,4)
  39.  
  40. #include "ntddk.h"
  41.  
  42. #if defined(_BATTERYCLASS_)
  43.   #define USBCAMAPI DECLSPEC_EXPORT
  44. #else
  45.   #define USBCAMAPI DECLSPEC_IMPORT
  46. #endif
  47.  
  48.  
  49. /* FIXME: Unknown definition */
  50. typedef PVOID PHW_STREAM_REQUEST_BLOCK;
  51.  
  52. DEFINE_GUID(GUID_USBCAMD_INTERFACE,
  53.   0x2bcb75c0, 0xb27f, 0x11d1, 0xba, 0x41, 0x0, 0xa0, 0xc9, 0xd, 0x2b, 0x5);
  54.  
  55. #define USBCAMD_PROCESSPACKETEX_DropFrame             0x0002 
  56. #define USBCAMD_PROCESSPACKETEX_NextFrameIsStill      0x0004 
  57. #define USBCAMD_PROCESSPACKETEX_CurrentFrameIsStill   0x0008 
  58.  
  59. #define USBCAMD_DATA_PIPE                 0x0001
  60. #define USBCAMD_MULTIPLEX_PIPE            0x0002
  61. #define USBCAMD_SYNC_PIPE                 0x0004
  62. #define USBCAMD_DONT_CARE_PIPE            0x0008
  63.  
  64. #define USBCAMD_VIDEO_STREAM              0x1
  65. #define USBCAMD_STILL_STREAM              0x2
  66. #define USBCAMD_VIDEO_STILL_STREAM        (USBCAMD_VIDEO_STREAM | USBCAMD_STILL_STREAM)
  67.  
  68. #define USBCAMD_STOP_STREAM               0x00000001
  69. #define USBCAMD_START_STREAM              0x00000000
  70.  
  71. typedef struct _pipe_config_descriptor {
  72.   CHAR  StreamAssociation;
  73.   UCHAR  PipeConfigFlags;
  74. } USBCAMD_Pipe_Config_Descriptor, *PUSBCAMD_Pipe_Config_Descriptor;
  75.  
  76. typedef enum {
  77.     USBCAMD_CamControlFlag_NoVideoRawProcessing = 1,
  78.     USBCAMD_CamControlFlag_NoStillRawProcessing = 2,
  79.     USBCAMD_CamControlFlag_AssociatedFormat = 4,
  80.     USBCAMD_CamControlFlag_EnableDeviceEvents = 8
  81. } USBCAMD_CamControlFlags;
  82.  
  83. typedef NTSTATUS DDKAPI
  84. (*PCAM_ALLOCATE_BW_ROUTINE)(
  85.   PDEVICE_OBJECT  BusDeviceObject,
  86.   PVOID  DeviceContext,
  87.   PULONG  RawFrameLength,
  88.   PVOID  Format);
  89.  
  90. typedef NTSTATUS DDKAPI
  91. (*PCAM_ALLOCATE_BW_ROUTINE_EX)(
  92.   PDEVICE_OBJECT  BusDeviceObject,
  93.   PVOID  DeviceContext,
  94.   PULONG  RawFrameLength,
  95.   PVOID  Format,
  96.   ULONG  StreamNumber);
  97.  
  98. typedef NTSTATUS DDKAPI
  99. (*PCAM_CONFIGURE_ROUTINE)(
  100.   PDEVICE_OBJECT  BusDeviceObject,
  101.   PVOID  DeviceContext,
  102.   PUSBD_INTERFACE_INFORMATION  Interface,
  103.   PUSB_CONFIGURATION_DESCRIPTOR  ConfigurationDescriptor,
  104.   PLONG  DataPipeIndex,
  105.   PLONG  SyncPipeIndex);
  106.  
  107. typedef NTSTATUS DDKAPI
  108. (*PCAM_CONFIGURE_ROUTINE_EX)(
  109.   PDEVICE_OBJECT  BusDeviceObject,
  110.   PVOID  DeviceContext,
  111.   PUSBD_INTERFACE_INFORMATION  Interface,
  112.   PUSB_CONFIGURATION_DESCRIPTOR  ConfigurationDescriptor,
  113.   ULONG  PipeConfigListSize,
  114.   PUSBCAMD_Pipe_Config_Descriptor  PipeConfig,
  115.   PUSB_DEVICE_DESCRIPTOR  DeviceDescriptor);
  116.  
  117. typedef NTSTATUS DDKAPI
  118. (*PCAM_FREE_BW_ROUTINE)(
  119.   PDEVICE_OBJECT  BusDeviceObject,
  120.   PVOID  DeviceContext);
  121.  
  122. typedef NTSTATUS DDKAPI
  123. (*PCAM_FREE_BW_ROUTINE_EX)(
  124.   PDEVICE_OBJECT  BusDeviceObject,
  125.   PVOID  DeviceContext,
  126.   ULONG  StreamNumber);
  127.  
  128. typedef NTSTATUS DDKAPI
  129. (*PCAM_INITIALIZE_ROUTINE)(
  130.   PDEVICE_OBJECT  BusDeviceObject,
  131.   PVOID  DeviceContext);
  132.  
  133. typedef VOID DDKAPI
  134. (*PCAM_NEW_FRAME_ROUTINE)(
  135.   PVOID  DeviceContext,
  136.   PVOID  FrameContext); 
  137.  
  138. typedef VOID DDKAPI
  139. (*PCAM_NEW_FRAME_ROUTINE_EX)(
  140.   PVOID  DeviceContext,
  141.   PVOID  FrameContext,
  142.   ULONG  StreamNumber,
  143.   PULONG  FrameLength);
  144.  
  145. typedef NTSTATUS DDKAPI
  146. (*PCAM_PROCESS_RAW_FRAME_ROUTINE)(
  147.   PDEVICE_OBJECT  BusDeviceObject,
  148.   PVOID  DeviceContext,
  149.   PVOID  FrameContext,
  150.   PVOID  FrameBuffer,
  151.   ULONG  FrameLength,
  152.   PVOID  RawFrameBuffer,
  153.   ULONG  RawFrameLength,
  154.   ULONG  NumberOfPackets,
  155.   PULONG  BytesReturned);
  156.  
  157. typedef NTSTATUS DDKAPI
  158. (*PCAM_PROCESS_RAW_FRAME_ROUTINE_EX)(
  159.   PDEVICE_OBJECT  BusDeviceObject,
  160.   PVOID  DeviceContext,
  161.   PVOID  FrameContext,
  162.   PVOID  FrameBuffer,
  163.   ULONG  FrameLength,
  164.   PVOID  RawFrameBuffer,
  165.   ULONG  RawFrameLength,
  166.   ULONG  NumberOfPackets,
  167.   PULONG  BytesReturned,
  168.   ULONG  ActualRawFrameLength,
  169.   ULONG  StreamNumber);
  170.  
  171. typedef ULONG DDKAPI
  172. (*PCAM_PROCESS_PACKET_ROUTINE)(
  173.   PDEVICE_OBJECT  BusDeviceObject,
  174.   PVOID  DeviceContext,
  175.   PVOID  CurrentFrameContext,
  176.   PUSBD_ISO_PACKET_DESCRIPTOR  SyncPacket,
  177.   PVOID  SyncBuffer,
  178.   PUSBD_ISO_PACKET_DESCRIPTOR  DataPacket,
  179.   PVOID  DataBuffer,
  180.   PBOOLEAN  FrameComplete,
  181.   PBOOLEAN  NextFrameIsStill); 
  182.  
  183. typedef ULONG DDKAPI
  184. (*PCAM_PROCESS_PACKET_ROUTINE_EX)(
  185.   PDEVICE_OBJECT  BusDeviceObject,
  186.   PVOID  DeviceContext,
  187.   PVOID  CurrentFrameContext,
  188.   PUSBD_ISO_PACKET_DESCRIPTOR  SyncPacket,
  189.   PVOID  SyncBuffer,
  190.   PUSBD_ISO_PACKET_DESCRIPTOR  DataPacket,
  191.   PVOID  DataBuffer,
  192.   PBOOLEAN  FrameComplete,
  193.   PULONG  PacketFlag,
  194.   PULONG  ValidDataOffset);
  195.  
  196. typedef NTSTATUS DDKAPI
  197. (*PCAM_STATE_ROUTINE)(
  198.   PDEVICE_OBJECT  BusDeviceObject,
  199.   PVOID  DeviceContext);
  200.  
  201. typedef NTSTATUS DDKAPI
  202. (*PCAM_START_CAPTURE_ROUTINE)(
  203.   PDEVICE_OBJECT  BusDeviceObject,
  204.   PVOID  DeviceContext);
  205.  
  206. typedef NTSTATUS DDKAPI
  207. (*PCAM_START_CAPTURE_ROUTINE_EX)(
  208.   PDEVICE_OBJECT  BusDeviceObject,
  209.   PVOID  DeviceContext,
  210.   ULONG  StreamNumber);
  211.  
  212. typedef NTSTATUS DDKAPI
  213. (*PCAM_STOP_CAPTURE_ROUTINE)(
  214.   PDEVICE_OBJECT  BusDeviceObject,
  215.   PVOID  DeviceContext);
  216.  
  217. typedef NTSTATUS DDKAPI
  218. (*PCAM_STOP_CAPTURE_ROUTINE_EX)(
  219.   PDEVICE_OBJECT  BusDeviceObject,
  220.   PVOID  DeviceContext,
  221.   ULONG  StreamNumber);
  222.  
  223. typedef struct _USBCAMD_DEVICE_DATA {
  224.     ULONG  Sig;
  225.     PCAM_INITIALIZE_ROUTINE  CamInitialize;
  226.     PCAM_INITIALIZE_ROUTINE  CamUnInitialize;
  227.     PCAM_PROCESS_PACKET_ROUTINE  CamProcessUSBPacket;
  228.     PCAM_NEW_FRAME_ROUTINE  CamNewVideoFrame;
  229.     PCAM_PROCESS_RAW_FRAME_ROUTINE  CamProcessRawVideoFrame;
  230.     PCAM_START_CAPTURE_ROUTINE  CamStartCapture;
  231.     PCAM_STOP_CAPTURE_ROUTINE  CamStopCapture;
  232.     PCAM_CONFIGURE_ROUTINE  CamConfigure;
  233.     PCAM_STATE_ROUTINE  CamSaveState;
  234.     PCAM_STATE_ROUTINE  CamRestoreState;
  235.     PCAM_ALLOCATE_BW_ROUTINE  CamAllocateBandwidth;
  236.     PCAM_FREE_BW_ROUTINE  CamFreeBandwidth;
  237. } USBCAMD_DEVICE_DATA, *PUSBCAMD_DEVICE_DATA;
  238.  
  239. typedef struct _USBCAMD_DEVICE_DATA2 {
  240.     ULONG  Sig;
  241.     PCAM_INITIALIZE_ROUTINE  CamInitialize;
  242.     PCAM_INITIALIZE_ROUTINE  CamUnInitialize;
  243.     PCAM_PROCESS_PACKET_ROUTINE_EX  CamProcessUSBPacketEx;
  244.     PCAM_NEW_FRAME_ROUTINE_EX  CamNewVideoFrameEx;
  245.     PCAM_PROCESS_RAW_FRAME_ROUTINE_EX  CamProcessRawVideoFrameEx;
  246.     PCAM_START_CAPTURE_ROUTINE_EX  CamStartCaptureEx;
  247.     PCAM_STOP_CAPTURE_ROUTINE_EX  CamStopCaptureEx;
  248.     PCAM_CONFIGURE_ROUTINE_EX  CamConfigureEx;
  249.     PCAM_STATE_ROUTINE  CamSaveState;
  250.     PCAM_STATE_ROUTINE  CamRestoreState;
  251.     PCAM_ALLOCATE_BW_ROUTINE_EX  CamAllocateBandwidthEx;
  252.     PCAM_FREE_BW_ROUTINE_EX  CamFreeBandwidthEx;
  253. } USBCAMD_DEVICE_DATA2, *PUSBCAMD_DEVICE_DATA2;
  254.  
  255. USBCAMAPI
  256. ULONG
  257. DDKAPI
  258. USBCAMD_InitializeNewInterface(
  259.   IN PVOID  DeviceContext,
  260.   IN PVOID  DeviceData,
  261.   IN ULONG  Version,
  262.   IN ULONG  CamControlFlag);
  263.  
  264. typedef VOID DDKAPI
  265. (*PCOMMAND_COMPLETE_FUNCTION)(
  266.   PVOID  DeviceContext,
  267.   PVOID  CommandContext,
  268.   NTSTATUS  NtStatus);
  269.  
  270. typedef NTSTATUS DDKAPI
  271. (*PFNUSBCAMD_BulkReadWrite)(
  272.   IN PVOID  DeviceContext,
  273.   IN USHORT  PipeIndex,
  274.   IN PVOID  Buffer,
  275.   IN ULONG  BufferLength,
  276.   IN PCOMMAND_COMPLETE_FUNCTION  CommandComplete,
  277.   IN PVOID  CommandContext);
  278.  
  279. typedef NTSTATUS DDKAPI
  280. (*PFNUSBCAMD_SetIsoPipeState)(
  281.   IN PVOID  DeviceContext,
  282.   IN ULONG  PipeStateFlags);
  283.  
  284. typedef NTSTATUS DDKAPI
  285. (*PFNUSBCAMD_CancelBulkReadWrite)(
  286.   IN PVOID  DeviceContext,
  287.   IN ULONG  PipeIndex);
  288.  
  289. typedef NTSTATUS DDKAPI
  290. (*PFNUSBCAMD_SetVideoFormat)( 
  291.   IN PVOID  DeviceContext,
  292.   IN PHW_STREAM_REQUEST_BLOCK  pSrb);
  293.  
  294. typedef NTSTATUS DDKAPI
  295. (*PFNUSBCAMD_WaitOnDeviceEvent)(
  296.   IN PVOID  DeviceContext,
  297.   IN ULONG  PipeIndex,
  298.   IN PVOID  Buffer,
  299.   IN ULONG  BufferLength,
  300.   IN PCOMMAND_COMPLETE_FUNCTION  EventComplete,
  301.   IN PVOID  EventContext,
  302.   IN BOOLEAN  LoopBack);
  303.  
  304. USBCAMAPI
  305. PVOID
  306. DDKAPI
  307. USBCAMD_AdapterReceivePacket(
  308.   IN PHW_STREAM_REQUEST_BLOCK  Srb,
  309.   IN PUSBCAMD_DEVICE_DATA  DeviceData,
  310.   IN PDEVICE_OBJECT  *DeviceObject,
  311.   IN BOOLEAN  NeedsCompletion);
  312.  
  313. USBCAMAPI
  314. NTSTATUS
  315. DDKAPI
  316. USBCAMD_ControlVendorCommand(
  317.   IN PVOID  DeviceContext,
  318.   IN UCHAR  Request,
  319.   IN USHORT  Value,
  320.   IN USHORT  Index,
  321.   IN PVOID  Buffer,
  322.   IN OUT PULONG  BufferLength,
  323.   IN BOOLEAN  GetData,
  324.   IN PCOMMAND_COMPLETE_FUNCTION  CommandComplete,
  325.   IN PVOID  CommandContext);
  326.  
  327. typedef VOID DDKAPI
  328. (*PADAPTER_RECEIVE_PACKET_ROUTINE)(
  329.   IN PHW_STREAM_REQUEST_BLOCK  Srb);
  330.  
  331. USBCAMAPI
  332. ULONG
  333. DDKAPI
  334. USBCAMD_DriverEntry(
  335.   PVOID  Context1,
  336.   PVOID  Context2,
  337.   ULONG  DeviceContextSize,
  338.   ULONG  FrameContextSize,
  339.   PADAPTER_RECEIVE_PACKET_ROUTINE  ReceivePacket);
  340.  
  341. USBCAMAPI
  342. NTSTATUS
  343. DDKAPI
  344. USBCAMD_GetRegistryKeyValue(
  345.   IN HANDLE  Handle,
  346.   IN PWCHAR  KeyNameString,
  347.   IN ULONG  KeyNameStringLength,
  348.   IN PVOID  Data,
  349.   IN ULONG  DataLength);
  350.  
  351. USBCAMAPI
  352. NTSTATUS
  353. DDKAPI
  354. USBCAMD_SelectAlternateInterface(
  355.   IN PVOID  DeviceContext,
  356.   IN OUT PUSBD_INTERFACE_INFORMATION  RequestInterface);
  357.  
  358. #define USBCAMD_VERSION_200               0x200
  359.  
  360. typedef struct _USBCAMD_INTERFACE {
  361.   INTERFACE  Interface;
  362.   PFNUSBCAMD_WaitOnDeviceEvent  USBCAMD_WaitOnDeviceEvent;
  363.   PFNUSBCAMD_BulkReadWrite  USBCAMD_BulkReadWrite;
  364.   PFNUSBCAMD_SetVideoFormat  USBCAMD_SetVideoFormat;
  365.   PFNUSBCAMD_SetIsoPipeState  USBCAMD_SetIsoPipeState;
  366.   PFNUSBCAMD_CancelBulkReadWrite  USBCAMD_CancelBulkReadWrite;
  367. } USBCAMD_INTERFACE, *PUSBCAMD_INTERFACE;
  368.  
  369. typedef VOID DDKAPI
  370. (*PSTREAM_RECEIVE_PACKET)(
  371.   IN PVOID  Srb,
  372.   IN PVOID  DeviceContext,
  373.   IN PBOOLEAN  Completed);
  374.  
  375. #if defined(DEBUG_LOG)
  376.  
  377. USBCAMAPI
  378. VOID
  379. DDKAPI
  380. USBCAMD_Debug_LogEntry(
  381.     IN CHAR  *Name,
  382.     IN ULONG  Info1,
  383.     IN ULONG  Info2,
  384.     IN ULONG  Info3);
  385.  
  386. #define ILOGENTRY(sig, info1, info2, info3) \
  387.   USBCAMD_Debug_LogEntry(sig, (ULONG)info1, (ULONG)info2, (ULONG)info3)
  388.  
  389. #else
  390.  
  391. #define ILOGENTRY(sig, info1, info2, info3)
  392.  
  393. #endif /* DEBUG_LOG */
  394.  
  395. #pragma pack(pop)
  396.  
  397. #ifdef __cplusplus
  398. }
  399. #endif
  400.  
  401. #endif /* !defined(__USB_H) && !defined(__USBDI_H) */
  402.  
  403.  
  404. #endif /* __USBCAMDI_H */
  405.