Update installation instructions
[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 #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 */