OSDN Git Service

5d96435d86af7dea4585ce9fdc1b990eb7a25629
[pf3gnuchains/pf3gnuchains3x.git] / winsup / w32api / include / ddk / usbcamdi.h
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 */