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