1 // Copyright © 2015, Peter Atashian and Alex Daniel Jones
2 // Licensed under the MIT License <LICENSE.md>
3 pub const HIDP_LINK_COLLECTION_ROOT: ::USHORT = -1i16 as u16;
4 pub const HIDP_LINK_COLLECTION_UNSPECIFIED: ::USHORT = 0;
5 ENUM!{enum HIDP_REPORT_TYPE {
6   HidP_Input,
7   HidP_Output,
8   HidP_Feature,
9 }}
10 STRUCT!{struct USAGE_AND_PAGE {
11     Usage: ::USAGE,
12     UsagePage: ::USAGE,
13 }}
14 pub type PUSAGE_AND_PAGE = *mut USAGE_AND_PAGE;
15 STRUCT!{struct HIDP_BUTTON_CAPS {
16     UsagePage: ::USAGE,
17     ReportID: ::UCHAR,
18     IsAlias: ::BOOLEAN,
19     BitField: ::USHORT,
20     LinkCollection: ::USHORT,
21     LinkUsage: ::USAGE,
22     LinkUsagePage: ::USAGE,
23     IsRange: ::BOOLEAN,
24     IsStringRange: ::BOOLEAN,
25     IsDesignatorRange: ::BOOLEAN,
26     IsAbsolute: ::BOOLEAN,
27     Reserved: [::ULONG; 10],
28     S_un: [u16; 8],
29 }}
30 UNION!{HIDP_BUTTON_CAPS, S_un, Range, Range_mut, HIDP_RANGE_STRUCT}
31 UNION!{HIDP_BUTTON_CAPS, S_un, NotRange, NotRange_mut, HIDP_NOTRANGE_STRUCT}
32 pub type PHIDP_BUTTON_CAPS = *mut HIDP_BUTTON_CAPS;
33 STRUCT!{struct HIDP_RANGE_STRUCT {
34     UsageMin: ::USAGE,
35     UsageMax: ::USAGE,
36     StringMin: ::USHORT,
37     StringMax: ::USHORT,
38     DesignatorMin: ::USHORT,
39     DesignatorMax: ::USHORT,
40     DataIndexMin: ::USHORT,
41     DataIndexMax: ::USHORT,
42 }}
43 STRUCT!{struct HIDP_NOTRANGE_STRUCT {
44     Usage: ::USAGE,
45     Reserved1: ::USAGE,
46     StringIndex: ::USHORT,
47     Reserved2: ::USHORT,
48     DesignatorIndex: ::USHORT,
49     Reserved3: ::USHORT,
50     DataIndex: ::USHORT,
51     Reserved4: ::USHORT,
52 }}
53 STRUCT!{struct HIDP_VALUE_CAPS {
54     UsagePage: ::USAGE,
55     ReportID: ::UCHAR,
56     IsAlias: ::BOOLEAN,
57     BitField: ::USHORT,
58     LinkCollection: ::USHORT,
59     LinkUsage: ::USAGE,
60     LinkUsagePage: ::USAGE,
61     IsRange: ::BOOLEAN,
62     IsStringRange: ::BOOLEAN,
63     IsDesignatorRange: ::BOOLEAN,
64     IsAbsolute: ::BOOLEAN,
65     HasNull: ::BOOLEAN,
66     Reserved: ::UCHAR,
67     BitSize: ::USHORT,
68     ReportCount: ::USHORT,
69     Reserved2: [::USHORT; 5],
70     UnitsExp: ::ULONG,
71     Units: ::ULONG,
72     LogicalMin: ::LONG,
73     LogicalMax: ::LONG,
74     PhysicalMin: ::LONG,
75     PhysicalMax: ::LONG,
76     S_un: [u16; 8],
77 }}
78 UNION!{HIDP_VALUE_CAPS, S_un, Range, Range_mut, HIDP_RANGE_STRUCT}
79 UNION!{HIDP_VALUE_CAPS, S_un, NotRange, NotRange_mut, HIDP_NOTRANGE_STRUCT}
80 pub type PHIDP_VALUE_CAPS = *mut HIDP_VALUE_CAPS;
81 STRUCT!{struct HIDP_LINK_COLLECTION_NODE {
82     LinkUsage: ::USAGE,
83     LinkUsagePage: ::USAGE,
84     Parent: ::USHORT,
85     NumberOfChildren: ::USHORT,
86     NextSibling: ::USHORT,
87     FirstChild: ::USHORT,
88     bit_fields: ::ULONG,
89     UserContext: ::PVOID,
90 }}
91 BITFIELD!{HIDP_LINK_COLLECTION_NODE bit_fields: ::ULONG [
92     CollectionType set_CollectionType[0..8],
93     IsAlias set_IsAlias[8..9],
94 ]}
95 pub type PHIDP_LINK_COLLECTION_NODE = *mut HIDP_LINK_COLLECTION_NODE;
96 pub type PHIDP_REPORT_DESCRIPTOR = ::PUCHAR;
97 pub enum HIDP_PREPARSED_DATA{}
98 pub type PHIDP_PREPARSED_DATA = *mut HIDP_PREPARSED_DATA;
99 STRUCT!{struct HIDP_CAPS {
100     Usage: ::USAGE,
101     UsagePage: ::USAGE,
102     InputReportByteLength: ::USHORT,
103     OutputReportByteLength: ::USHORT,
104     FeatureReportByteLength: ::USHORT,
105     Reserved: [::USHORT; 17],
106     NumberLinkCollectionNodes: ::USHORT,
107     NumberInputButtonCaps: ::USHORT,
108     NumberInputValueCaps: ::USHORT,
109     NumberInputDataIndices: ::USHORT,
110     NumberOutputButtonCaps: ::USHORT,
111     NumberOutputValueCaps: ::USHORT,
112     NumberOutputDataIndices: ::USHORT,
113     NumberFeatureButtonCaps: ::USHORT,
114     NumberFeatureValueCaps: ::USHORT,
115     NumberFeatureDataIndices: ::USHORT,
116 }}
117 pub type PHIDP_CAPS = *mut HIDP_CAPS;
118 STRUCT!{struct HIDP_DATA {
119     DataIndex: ::USHORT,
120     Reserved: ::USHORT,
121     S_un: [u32; 1],
122 }}
123 UNION!{HIDP_DATA, S_un, RawValue, RawValue_mut, ::ULONG}
124 UNION!{HIDP_DATA, S_un, On, On_mut, ::BOOLEAN}
125 pub type PHIDP_DATA = *mut HIDP_DATA;
126 STRUCT!{struct HIDP_UNKNOWN_TOKEN {
127     Token: ::UCHAR,
128     Reserved: [::UCHAR; 3],
129     BitField: ::ULONG,
130 }}
131 pub type PHIDP_UNKNOWN_TOKEN = *mut HIDP_UNKNOWN_TOKEN;
132 STRUCT!{struct HIDP_EXTENDED_ATTRIBUTES {
133     NumGlobalUnknowns: ::UCHAR,
134     Reserved: [::UCHAR; 3],
135     GlobalUnknowns: PHIDP_UNKNOWN_TOKEN,
136     Data: [::ULONG; 1],
137 }}
138 pub type PHIDP_EXTENDED_ATTRIBUTES = *mut HIDP_EXTENDED_ATTRIBUTES;
139 ENUM!{enum HIDP_KEYBOARD_DIRECTION {
140     HidP_Keyboard_Break,
141     HidP_Keyboard_Make,
142 }}
143 STRUCT!{struct HIDP_KEYBOARD_MODIFIER_STATE {
144     ul: ::ULONG,
145 }}
146 BITFIELD!{HIDP_KEYBOARD_MODIFIER_STATE ul: ::ULONG [
147     LeftControl set_LeftControl[0..1],
148     LeftShift set_LeftShift[1..2],
149     LeftAlt set_LeftAlt[2..3],
150     LeftGUI set_LeftGUI[3..4],
151     RightControl set_RightControl[4..5],
152     RightShift set_RightShift[5..6],
153     RightAlt set_RightAlt[6..7],
154     RigthGUI set_RigthGUI[7..8],
155     CapsLock set_CapsLock[8..9],
156     ScollLock set_ScollLock[9..10],
157     NumLock set_NumLock[10..11],
158 ]}
159 pub type PHIDP_KEYBOARD_MODIFIER_STATE = *mut HIDP_KEYBOARD_MODIFIER_STATE;
160 pub type PHIDP_INSERT_SCANCODES = Option<unsafe extern "C" fn(
161     Context: ::PVOID, NewScanCodes: ::PCHAR, Length: ::ULONG,
162 ) -> ::BOOLEAN>;
163 pub const HIDP_STATUS_SUCCESS: ::NTSTATUS = HIDP_ERROR_CODES!(0x0, 0);
164 pub const HIDP_STATUS_NULL: ::NTSTATUS = HIDP_ERROR_CODES!(0x8, 1);
165 pub const HIDP_STATUS_INVALID_PREPARSED_DATA: ::NTSTATUS = HIDP_ERROR_CODES!(0xC, 1);
166 pub const HIDP_STATUS_INVALID_REPORT_TYPE: ::NTSTATUS = HIDP_ERROR_CODES!(0xC, 2);
167 pub const HIDP_STATUS_INVALID_REPORT_LENGTH: ::NTSTATUS = HIDP_ERROR_CODES!(0xC, 3);
168 pub const HIDP_STATUS_USAGE_NOT_FOUND: ::NTSTATUS = HIDP_ERROR_CODES!(0xC, 4);
169 pub const HIDP_STATUS_VALUE_OUT_OF_RANGE: ::NTSTATUS = HIDP_ERROR_CODES!(0xC, 5);
170 pub const HIDP_STATUS_BAD_LOG_PHY_VALUES: ::NTSTATUS = HIDP_ERROR_CODES!(0xC, 6);
171 pub const HIDP_STATUS_BUFFER_TOO_SMALL: ::NTSTATUS = HIDP_ERROR_CODES!(0xC, 7);
172 pub const HIDP_STATUS_INTERNAL_ERROR: ::NTSTATUS = HIDP_ERROR_CODES!(0xC, 8);
173 pub const HIDP_STATUS_I8042_TRANS_UNKNOWN: ::NTSTATUS = HIDP_ERROR_CODES!(0xC, 9);
174 pub const HIDP_STATUS_INCOMPATIBLE_REPORT_ID: ::NTSTATUS = HIDP_ERROR_CODES!(0xC, 0xA);
175 pub const HIDP_STATUS_NOT_VALUE_ARRAY: ::NTSTATUS = HIDP_ERROR_CODES!(0xC, 0xB);
176 pub const HIDP_STATUS_IS_VALUE_ARRAY: ::NTSTATUS = HIDP_ERROR_CODES!(0xC, 0xC);
177 pub const HIDP_STATUS_DATA_INDEX_NOT_FOUND: ::NTSTATUS = HIDP_ERROR_CODES!(0xC, 0xD);
178 pub const HIDP_STATUS_DATA_INDEX_OUT_OF_RANGE: ::NTSTATUS = HIDP_ERROR_CODES!(0xC, 0xE);
179 pub const HIDP_STATUS_BUTTON_NOT_PRESSED: ::NTSTATUS = HIDP_ERROR_CODES!(0xC, 0xF);
180 pub const HIDP_STATUS_REPORT_DOES_NOT_EXIST: ::NTSTATUS = HIDP_ERROR_CODES!(0xC, 0x10);
181 pub const HIDP_STATUS_NOT_IMPLEMENTED: ::NTSTATUS = HIDP_ERROR_CODES!(0xC, 0x20);
182 pub const HIDP_STATUS_I8242_TRANS_UNKNOWN: ::NTSTATUS = HIDP_STATUS_I8042_TRANS_UNKNOWN;
183