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