blob: b2321ea9e903dc1edec2a8b17ec6f6956cc89e7d [file] [log] [blame] [edit]
// Copyright © 2015, Peter Atashian and Alex Daniel Jones
// Licensed under the MIT License <LICENSE.md>
pub const HIDP_LINK_COLLECTION_ROOT: ::USHORT = -1i16 as u16;
pub const HIDP_LINK_COLLECTION_UNSPECIFIED: ::USHORT = 0;
ENUM!{enum HIDP_REPORT_TYPE {
HidP_Input,
HidP_Output,
HidP_Feature,
}}
STRUCT!{struct USAGE_AND_PAGE {
Usage: ::USAGE,
UsagePage: ::USAGE,
}}
pub type PUSAGE_AND_PAGE = *mut USAGE_AND_PAGE;
STRUCT!{struct HIDP_BUTTON_CAPS {
UsagePage: ::USAGE,
ReportID: ::UCHAR,
IsAlias: ::BOOLEAN,
BitField: ::USHORT,
LinkCollection: ::USHORT,
LinkUsage: ::USAGE,
LinkUsagePage: ::USAGE,
IsRange: ::BOOLEAN,
IsStringRange: ::BOOLEAN,
IsDesignatorRange: ::BOOLEAN,
IsAbsolute: ::BOOLEAN,
Reserved: [::ULONG; 10],
S_un: [u16; 8],
}}
UNION!{HIDP_BUTTON_CAPS, S_un, Range, Range_mut, HIDP_RANGE_STRUCT}
UNION!{HIDP_BUTTON_CAPS, S_un, NotRange, NotRange_mut, HIDP_NOTRANGE_STRUCT}
pub type PHIDP_BUTTON_CAPS = *mut HIDP_BUTTON_CAPS;
STRUCT!{struct HIDP_RANGE_STRUCT {
UsageMin: ::USAGE,
UsageMax: ::USAGE,
StringMin: ::USHORT,
StringMax: ::USHORT,
DesignatorMin: ::USHORT,
DesignatorMax: ::USHORT,
DataIndexMin: ::USHORT,
DataIndexMax: ::USHORT,
}}
STRUCT!{struct HIDP_NOTRANGE_STRUCT {
Usage: ::USAGE,
Reserved1: ::USAGE,
StringIndex: ::USHORT,
Reserved2: ::USHORT,
DesignatorIndex: ::USHORT,
Reserved3: ::USHORT,
DataIndex: ::USHORT,
Reserved4: ::USHORT,
}}
STRUCT!{struct HIDP_VALUE_CAPS {
UsagePage: ::USAGE,
ReportID: ::UCHAR,
IsAlias: ::BOOLEAN,
BitField: ::USHORT,
LinkCollection: ::USHORT,
LinkUsage: ::USAGE,
LinkUsagePage: ::USAGE,
IsRange: ::BOOLEAN,
IsStringRange: ::BOOLEAN,
IsDesignatorRange: ::BOOLEAN,
IsAbsolute: ::BOOLEAN,
HasNull: ::BOOLEAN,
Reserved: ::UCHAR,
BitSize: ::USHORT,
ReportCount: ::USHORT,
Reserved2: [::USHORT; 5],
UnitsExp: ::ULONG,
Units: ::ULONG,
LogicalMin: ::LONG,
LogicalMax: ::LONG,
PhysicalMin: ::LONG,
PhysicalMax: ::LONG,
S_un: [u16; 8],
}}
UNION!{HIDP_VALUE_CAPS, S_un, Range, Range_mut, HIDP_RANGE_STRUCT}
UNION!{HIDP_VALUE_CAPS, S_un, NotRange, NotRange_mut, HIDP_NOTRANGE_STRUCT}
pub type PHIDP_VALUE_CAPS = *mut HIDP_VALUE_CAPS;
STRUCT!{struct HIDP_LINK_COLLECTION_NODE {
LinkUsage: ::USAGE,
LinkUsagePage: ::USAGE,
Parent: ::USHORT,
NumberOfChildren: ::USHORT,
NextSibling: ::USHORT,
FirstChild: ::USHORT,
bit_fields: ::ULONG,
UserContext: ::PVOID,
}}
BITFIELD!{HIDP_LINK_COLLECTION_NODE bit_fields: ::ULONG [
CollectionType set_CollectionType[0..8],
IsAlias set_IsAlias[8..9],
]}
pub type PHIDP_LINK_COLLECTION_NODE = *mut HIDP_LINK_COLLECTION_NODE;
pub type PHIDP_REPORT_DESCRIPTOR = ::PUCHAR;
pub enum HIDP_PREPARSED_DATA{}
pub type PHIDP_PREPARSED_DATA = *mut HIDP_PREPARSED_DATA;
STRUCT!{struct HIDP_CAPS {
Usage: ::USAGE,
UsagePage: ::USAGE,
InputReportByteLength: ::USHORT,
OutputReportByteLength: ::USHORT,
FeatureReportByteLength: ::USHORT,
Reserved: [::USHORT; 17],
NumberLinkCollectionNodes: ::USHORT,
NumberInputButtonCaps: ::USHORT,
NumberInputValueCaps: ::USHORT,
NumberInputDataIndices: ::USHORT,
NumberOutputButtonCaps: ::USHORT,
NumberOutputValueCaps: ::USHORT,
NumberOutputDataIndices: ::USHORT,
NumberFeatureButtonCaps: ::USHORT,
NumberFeatureValueCaps: ::USHORT,
NumberFeatureDataIndices: ::USHORT,
}}
pub type PHIDP_CAPS = *mut HIDP_CAPS;
STRUCT!{struct HIDP_DATA {
DataIndex: ::USHORT,
Reserved: ::USHORT,
S_un: [u32; 1],
}}
UNION!{HIDP_DATA, S_un, RawValue, RawValue_mut, ::ULONG}
UNION!{HIDP_DATA, S_un, On, On_mut, ::BOOLEAN}
pub type PHIDP_DATA = *mut HIDP_DATA;
STRUCT!{struct HIDP_UNKNOWN_TOKEN {
Token: ::UCHAR,
Reserved: [::UCHAR; 3],
BitField: ::ULONG,
}}
pub type PHIDP_UNKNOWN_TOKEN = *mut HIDP_UNKNOWN_TOKEN;
STRUCT!{struct HIDP_EXTENDED_ATTRIBUTES {
NumGlobalUnknowns: ::UCHAR,
Reserved: [::UCHAR; 3],
GlobalUnknowns: PHIDP_UNKNOWN_TOKEN,
Data: [::ULONG; 1],
}}
pub type PHIDP_EXTENDED_ATTRIBUTES = *mut HIDP_EXTENDED_ATTRIBUTES;
ENUM!{enum HIDP_KEYBOARD_DIRECTION {
HidP_Keyboard_Break,
HidP_Keyboard_Make,
}}
STRUCT!{struct HIDP_KEYBOARD_MODIFIER_STATE {
ul: ::ULONG,
}}
BITFIELD!{HIDP_KEYBOARD_MODIFIER_STATE ul: ::ULONG [
LeftControl set_LeftControl[0..1],
LeftShift set_LeftShift[1..2],
LeftAlt set_LeftAlt[2..3],
LeftGUI set_LeftGUI[3..4],
RightControl set_RightControl[4..5],
RightShift set_RightShift[5..6],
RightAlt set_RightAlt[6..7],
RigthGUI set_RigthGUI[7..8],
CapsLock set_CapsLock[8..9],
ScollLock set_ScollLock[9..10],
NumLock set_NumLock[10..11],
]}
pub type PHIDP_KEYBOARD_MODIFIER_STATE = *mut HIDP_KEYBOARD_MODIFIER_STATE;
pub type PHIDP_INSERT_SCANCODES = Option<unsafe extern "C" fn(
Context: ::PVOID, NewScanCodes: ::PCHAR, Length: ::ULONG,
) -> ::BOOLEAN>;
pub const HIDP_STATUS_SUCCESS: ::NTSTATUS = HIDP_ERROR_CODES!(0x0, 0);
pub const HIDP_STATUS_NULL: ::NTSTATUS = HIDP_ERROR_CODES!(0x8, 1);
pub const HIDP_STATUS_INVALID_PREPARSED_DATA: ::NTSTATUS = HIDP_ERROR_CODES!(0xC, 1);
pub const HIDP_STATUS_INVALID_REPORT_TYPE: ::NTSTATUS = HIDP_ERROR_CODES!(0xC, 2);
pub const HIDP_STATUS_INVALID_REPORT_LENGTH: ::NTSTATUS = HIDP_ERROR_CODES!(0xC, 3);
pub const HIDP_STATUS_USAGE_NOT_FOUND: ::NTSTATUS = HIDP_ERROR_CODES!(0xC, 4);
pub const HIDP_STATUS_VALUE_OUT_OF_RANGE: ::NTSTATUS = HIDP_ERROR_CODES!(0xC, 5);
pub const HIDP_STATUS_BAD_LOG_PHY_VALUES: ::NTSTATUS = HIDP_ERROR_CODES!(0xC, 6);
pub const HIDP_STATUS_BUFFER_TOO_SMALL: ::NTSTATUS = HIDP_ERROR_CODES!(0xC, 7);
pub const HIDP_STATUS_INTERNAL_ERROR: ::NTSTATUS = HIDP_ERROR_CODES!(0xC, 8);
pub const HIDP_STATUS_I8042_TRANS_UNKNOWN: ::NTSTATUS = HIDP_ERROR_CODES!(0xC, 9);
pub const HIDP_STATUS_INCOMPATIBLE_REPORT_ID: ::NTSTATUS = HIDP_ERROR_CODES!(0xC, 0xA);
pub const HIDP_STATUS_NOT_VALUE_ARRAY: ::NTSTATUS = HIDP_ERROR_CODES!(0xC, 0xB);
pub const HIDP_STATUS_IS_VALUE_ARRAY: ::NTSTATUS = HIDP_ERROR_CODES!(0xC, 0xC);
pub const HIDP_STATUS_DATA_INDEX_NOT_FOUND: ::NTSTATUS = HIDP_ERROR_CODES!(0xC, 0xD);
pub const HIDP_STATUS_DATA_INDEX_OUT_OF_RANGE: ::NTSTATUS = HIDP_ERROR_CODES!(0xC, 0xE);
pub const HIDP_STATUS_BUTTON_NOT_PRESSED: ::NTSTATUS = HIDP_ERROR_CODES!(0xC, 0xF);
pub const HIDP_STATUS_REPORT_DOES_NOT_EXIST: ::NTSTATUS = HIDP_ERROR_CODES!(0xC, 0x10);
pub const HIDP_STATUS_NOT_IMPLEMENTED: ::NTSTATUS = HIDP_ERROR_CODES!(0xC, 0x20);
pub const HIDP_STATUS_I8242_TRANS_UNKNOWN: ::NTSTATUS = HIDP_STATUS_I8042_TRANS_UNKNOWN;