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