[USB]
[reactos.git] / reactos / 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 }HIDCLASS_FILEOP_CONTEXT, *PHIDCLASS_FILEOP_CONTEXT;
140
141 typedef struct
142 {
143 //
144 // original request
145 //
146 PIRP OriginalIrp;
147
148 //
149 // file op
150 //
151 PHIDCLASS_FILEOP_CONTEXT FileOp;
152
153 //
154 // buffer for reading report
155 //
156 PVOID InputReportBuffer;
157
158 //
159 // buffer length
160 //
161 ULONG InputReportBufferLength;
162
163 //
164 // work item
165 //
166 PIO_WORKITEM CompletionWorkItem;
167
168 }HIDCLASS_IRP_CONTEXT, *PHIDCLASS_IRP_CONTEXT;
169
170 /* fdo.c */
171 NTSTATUS
172 HidClassFDO_PnP(
173 IN PDEVICE_OBJECT DeviceObject,
174 IN PIRP Irp);
175
176 NTSTATUS
177 HidClassFDO_DispatchRequestSynchronous(
178 IN PDEVICE_OBJECT DeviceObject,
179 IN PIRP Irp);
180
181 /* pdo.c */
182 NTSTATUS
183 HidClassPDO_CreatePDO(
184 IN PDEVICE_OBJECT DeviceObject,
185 OUT PDEVICE_RELATIONS *OutDeviceRelations);
186
187 NTSTATUS
188 HidClassPDO_PnP(
189 IN PDEVICE_OBJECT DeviceObject,
190 IN PIRP Irp);
191
192 PHIDP_COLLECTION_DESC
193 HidClassPDO_GetCollectionDescription(
194 PHIDP_DEVICE_DESC DeviceDescription,
195 ULONG CollectionNumber);
196
197 PHIDP_REPORT_IDS
198 HidClassPDO_GetReportDescription(
199 PHIDP_DEVICE_DESC DeviceDescription,
200 ULONG CollectionNumber);
201
202 /* eof */