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