source: Daodan/MSYS2/mingw32/i686-w64-mingw32/include/usbcamdi.h@ 1194

Last change on this file since 1194 was 1166, checked in by rossy, 3 years ago

Daodan: Replace MinGW build env with an up-to-date MSYS2 env

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