OSDN Git Service

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