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