Synchronize with trunk revision 59781.
[reactos.git] / drivers / hid / hidclass / precomp.h
1 #pragma once
2
3 #define _HIDPI_NO_FUNCTION_MACROS_
4 #define NDEBUG
5 #include <ntddk.h>
6 #include <initguid.h>
7 #include <hidport.h>
8 #include <hidpddi.h>
9 #include <stdio.h>
10 #include <wdmguid.h>
11 #include <debug.h>
12
13 #define HIDCLASS_TAG 'CdiH'
14
15 typedef struct
16 {
17 PDRIVER_OBJECT DriverObject;
18 ULONG DeviceExtensionSize;
19 BOOLEAN DevicesArePolled;
20 PDRIVER_DISPATCH MajorFunction[IRP_MJ_MAXIMUM_FUNCTION + 1];
21 PDRIVER_ADD_DEVICE AddDevice;
22 PDRIVER_UNLOAD DriverUnload;
23 KSPIN_LOCK Lock;
24
25 } HIDCLASS_DRIVER_EXTENSION, *PHIDCLASS_DRIVER_EXTENSION;
26
27 typedef struct
28 {
29 //
30 // hid device extension
31 //
32 HID_DEVICE_EXTENSION HidDeviceExtension;
33
34 //
35 // if it is a pdo
36 //
37 BOOLEAN IsFDO;
38
39 //
40 // driver extension
41 //
42 PHIDCLASS_DRIVER_EXTENSION DriverExtension;
43
44 //
45 // device description
46 //
47 HIDP_DEVICE_DESC DeviceDescription;
48
49 //
50 // hid attributes
51 //
52 HID_DEVICE_ATTRIBUTES Attributes;
53
54 } HIDCLASS_COMMON_DEVICE_EXTENSION, *PHIDCLASS_COMMON_DEVICE_EXTENSION;
55
56 typedef struct
57 {
58 //
59 // parts shared by fdo and pdo
60 //
61 HIDCLASS_COMMON_DEVICE_EXTENSION Common;
62
63 //
64 // device capabilities
65 //
66 DEVICE_CAPABILITIES Capabilities;
67
68 //
69 // hid descriptor
70 //
71 HID_DESCRIPTOR HidDescriptor;
72
73 //
74 // report descriptor
75 //
76 PUCHAR ReportDescriptor;
77
78 //
79 // device relations
80 //
81 PDEVICE_RELATIONS DeviceRelations;
82
83 } HIDCLASS_FDO_EXTENSION, *PHIDCLASS_FDO_EXTENSION;
84
85 typedef struct
86 {
87 //
88 // parts shared by fdo and pdo
89 //
90 HIDCLASS_COMMON_DEVICE_EXTENSION Common;
91
92 //
93 // device capabilities
94 //
95 DEVICE_CAPABILITIES Capabilities;
96
97 //
98 // collection index
99 //
100 ULONG CollectionNumber;
101
102 //
103 // device interface
104 //
105 UNICODE_STRING DeviceInterface;
106
107 //
108 // FDO device object
109 //
110 PDEVICE_OBJECT FDODeviceObject;
111
112 //
113 // fdo device extension
114 //
115 PHIDCLASS_FDO_EXTENSION FDODeviceExtension;
116
117 } HIDCLASS_PDO_DEVICE_EXTENSION, *PHIDCLASS_PDO_DEVICE_EXTENSION;
118
119 typedef struct __HIDCLASS_FILEOP_CONTEXT__
120 {
121 //
122 // device extension
123 //
124 PHIDCLASS_PDO_DEVICE_EXTENSION DeviceExtension;
125
126 //
127 // spin lock
128 //
129 KSPIN_LOCK Lock;
130
131 //
132 // read irp pending list
133 //
134 LIST_ENTRY ReadPendingIrpListHead;
135
136 //
137 // completed irp list
138 //
139 LIST_ENTRY IrpCompletedListHead;
140
141 //
142 // stop in progress indicator
143 //
144 BOOLEAN StopInProgress;
145
146 //
147 // read complete event
148 //
149 KEVENT IrpReadComplete;
150
151 } HIDCLASS_FILEOP_CONTEXT, *PHIDCLASS_FILEOP_CONTEXT;
152
153 typedef struct
154 {
155 //
156 // original request
157 //
158 PIRP OriginalIrp;
159
160 //
161 // file op
162 //
163 PHIDCLASS_FILEOP_CONTEXT FileOp;
164
165 //
166 // buffer for reading report
167 //
168 PVOID InputReportBuffer;
169
170 //
171 // buffer length
172 //
173 ULONG InputReportBufferLength;
174
175 //
176 // work item
177 //
178 PIO_WORKITEM CompletionWorkItem;
179
180 } HIDCLASS_IRP_CONTEXT, *PHIDCLASS_IRP_CONTEXT;
181
182 /* fdo.c */
183 NTSTATUS
184 HidClassFDO_PnP(
185 IN PDEVICE_OBJECT DeviceObject,
186 IN PIRP Irp);
187
188 NTSTATUS
189 HidClassFDO_DispatchRequest(
190 IN PDEVICE_OBJECT DeviceObject,
191 IN PIRP Irp);
192
193 NTSTATUS
194 HidClassFDO_DispatchRequestSynchronous(
195 IN PDEVICE_OBJECT DeviceObject,
196 IN PIRP Irp);
197
198 /* pdo.c */
199 NTSTATUS
200 HidClassPDO_CreatePDO(
201 IN PDEVICE_OBJECT DeviceObject,
202 OUT PDEVICE_RELATIONS *OutDeviceRelations);
203
204 NTSTATUS
205 HidClassPDO_PnP(
206 IN PDEVICE_OBJECT DeviceObject,
207 IN PIRP Irp);
208
209 PHIDP_COLLECTION_DESC
210 HidClassPDO_GetCollectionDescription(
211 PHIDP_DEVICE_DESC DeviceDescription,
212 ULONG CollectionNumber);
213
214 PHIDP_REPORT_IDS
215 HidClassPDO_GetReportDescription(
216 PHIDP_DEVICE_DESC DeviceDescription,
217 ULONG CollectionNumber);
218
219 /* eof */