| /* | |
| * Copyright (C) 2015 Aric Stewart | |
| * | |
| * This library is free software; you can redistribute it and/or | |
| * modify it under the terms of the GNU Lesser General Public | |
| * License as published by the Free Software Foundation; either | |
| * version 2.1 of the License, or (at your option) any later version. | |
| * | |
| * This library is distributed in the hope that it will be useful, | |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
| * Lesser General Public License for more details. | |
| * | |
| * You should have received a copy of the GNU Lesser General Public | |
| * License along with this library; if not, write to the Free Software | |
| * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA | |
| */ | |
| #ifndef __HIDPI_H__ | |
| #define __HIDPI_H__ | |
| typedef enum _HIDP_REPORT_TYPE | |
| { | |
| HidP_Input, | |
| HidP_Output, | |
| HidP_Feature | |
| } HIDP_REPORT_TYPE; | |
| typedef struct _HIDP_BUTTON_CAPS | |
| { | |
| USAGE UsagePage; | |
| UCHAR ReportID; | |
| BOOLEAN IsAlias; | |
| USHORT BitField; | |
| USHORT LinkCollection; | |
| USAGE LinkUsage; | |
| USAGE LinkUsagePage; | |
| BOOLEAN IsRange; | |
| BOOLEAN IsStringRange; | |
| BOOLEAN IsDesignatorRange; | |
| BOOLEAN IsAbsolute; | |
| ULONG Reserved[10]; | |
| union { | |
| struct { | |
| USAGE UsageMin; | |
| USAGE UsageMax; | |
| USHORT StringMin; | |
| USHORT StringMax; | |
| USHORT DesignatorMin; | |
| USHORT DesignatorMax; | |
| USHORT DataIndexMin; | |
| USHORT DataIndexMax; | |
| } Range; | |
| struct { | |
| USAGE Usage; | |
| USAGE Reserved1; | |
| USHORT StringIndex; | |
| USHORT Reserved2; | |
| USHORT DesignatorIndex; | |
| USHORT Reserved3; | |
| USHORT DataIndex; | |
| USHORT Reserved4; | |
| } NotRange; | |
| } DUMMYUNIONNAME; | |
| } HIDP_BUTTON_CAPS, *PHIDP_BUTTON_CAPS; | |
| typedef struct _HIDP_VALUE_CAPS | |
| { | |
| USAGE UsagePage; | |
| UCHAR ReportID; | |
| BOOLEAN IsAlias; | |
| USHORT BitField; | |
| USHORT LinkCollection; | |
| USAGE LinkUsage; | |
| USAGE LinkUsagePage; | |
| BOOLEAN IsRange; | |
| BOOLEAN IsStringRange; | |
| BOOLEAN IsDesignatorRange; | |
| BOOLEAN IsAbsolute; | |
| BOOLEAN HasNull; | |
| UCHAR Reserved; | |
| USHORT BitSize; | |
| USHORT ReportCount; | |
| USHORT Reserved2[5]; | |
| ULONG UnitsExp; | |
| ULONG Units; | |
| LONG LogicalMin; | |
| LONG LogicalMax; | |
| LONG PhysicalMin; | |
| LONG PhysicalMax; | |
| union { | |
| struct { | |
| USAGE UsageMin; | |
| USAGE UsageMax; | |
| USHORT StringMin; | |
| USHORT StringMax; | |
| USHORT DesignatorMin; | |
| USHORT DesignatorMax; | |
| USHORT DataIndexMin; | |
| USHORT DataIndexMax; | |
| } Range; | |
| struct { | |
| USAGE Usage; | |
| USAGE Reserved1; | |
| USHORT StringIndex; | |
| USHORT Reserved2; | |
| USHORT DesignatorIndex; | |
| USHORT Reserved3; | |
| USHORT DataIndex; | |
| USHORT Reserved4; | |
| } NotRange; | |
| } DUMMYUNIONNAME; | |
| } HIDP_VALUE_CAPS, *PHIDP_VALUE_CAPS; | |
| typedef struct _HIDP_PREPARSED_DATA * PHIDP_PREPARSED_DATA; | |
| typedef struct _HIDP_CAPS | |
| { | |
| USAGE Usage; | |
| USAGE UsagePage; | |
| USHORT InputReportByteLength; | |
| USHORT OutputReportByteLength; | |
| USHORT FeatureReportByteLength; | |
| USHORT Reserved[17]; | |
| USHORT NumberLinkCollectionNodes; | |
| USHORT NumberInputButtonCaps; | |
| USHORT NumberInputValueCaps; | |
| USHORT NumberInputDataIndices; | |
| USHORT NumberOutputButtonCaps; | |
| USHORT NumberOutputValueCaps; | |
| USHORT NumberOutputDataIndices; | |
| USHORT NumberFeatureButtonCaps; | |
| USHORT NumberFeatureValueCaps; | |
| USHORT NumberFeatureDataIndices; | |
| } HIDP_CAPS, *PHIDP_CAPS; | |
| typedef enum _HIDP_KEYBOARD_DIRECTION { | |
| HidP_Keyboard_Break, | |
| HidP_Keyboard_Make | |
| } HIDP_KEYBOARD_DIRECTION; | |
| typedef struct _HIDP_KEYBOARD_MODIFIER_STATE { | |
| union { | |
| struct { | |
| ULONG LeftControl: 1; | |
| ULONG LeftShift: 1; | |
| ULONG LeftAlt: 1; | |
| ULONG LeftGUI: 1; | |
| ULONG RightControl: 1; | |
| ULONG RightShift: 1; | |
| ULONG RightAlt: 1; | |
| ULONG RigthGUI: 1; | |
| ULONG CapsLock: 1; | |
| ULONG ScollLock: 1; | |
| ULONG NumLock: 1; | |
| ULONG Reserved: 21; | |
| } DUMMYSTRUCTNAME; | |
| ULONG ul; | |
| } DUMMYUNIONNAME; | |
| } HIDP_KEYBOARD_MODIFIER_STATE, *PHIDP_KEYBOARD_MODIFIER_STATE; | |
| typedef struct _USAGE_AND_PAGE { | |
| USAGE Usage; | |
| USAGE UsagePage; | |
| } USAGE_AND_PAGE, *PUSAGE_AND_PAGE; | |
| typedef struct _HIDP_DATA { | |
| USHORT DataIndex; | |
| USHORT Reserved; | |
| union { | |
| ULONG RawValue; | |
| BOOLEAN On; | |
| } DUMMYUNIONNAME; | |
| } HIDP_DATA, *PHIDP_DATA; | |
| typedef BOOLEAN (NTAPI *PHIDP_INSERT_SCANCODES) (VOID *Context, CHAR *NewScanCodes, ULONG Length); | |
| NTSTATUS WINAPI HidP_GetButtonCaps(HIDP_REPORT_TYPE ReportType, PHIDP_BUTTON_CAPS ButtonCaps, PUSHORT ButtonCapsLength, PHIDP_PREPARSED_DATA PreparsedData); | |
| NTSTATUS WINAPI HidP_GetCaps(PHIDP_PREPARSED_DATA PreparsedData, PHIDP_CAPS Capabilities); | |
| NTSTATUS WINAPI HidP_GetUsages(HIDP_REPORT_TYPE ReportType, USAGE UsagePage, USHORT LinkCollection, PUSAGE UsageList, PULONG UsageLength, PHIDP_PREPARSED_DATA PreparsedData, PCHAR Report, ULONG ReportLength); | |
| NTSTATUS WINAPI HidP_GetUsageValue(HIDP_REPORT_TYPE ReportType, USAGE UsagePage, USHORT LinkCollection, USAGE Usage, PULONG UsageValue, PHIDP_PREPARSED_DATA PreparsedData, PCHAR Report, ULONG ReportLength); | |
| NTSTATUS WINAPI HidP_GetValueCaps(HIDP_REPORT_TYPE ReportType, PHIDP_VALUE_CAPS ValueCaps, PUSHORT ValueCapsLength, PHIDP_PREPARSED_DATA PreparsedData); | |
| NTSTATUS WINAPI HidP_InitializeReportForID(HIDP_REPORT_TYPE ReportType, UCHAR ReportID, PHIDP_PREPARSED_DATA PreparsedData, PCHAR Report, ULONG ReportLength); | |
| ULONG WINAPI HidP_MaxUsageListLength(HIDP_REPORT_TYPE ReportType, USAGE UsagePage, PHIDP_PREPARSED_DATA PreparsedData); | |
| NTSTATUS WINAPI HidP_GetScaledUsageValue(HIDP_REPORT_TYPE ReportType, USAGE UsagePage, USHORT LinkCollection, USAGE Usage, PLONG UsageValue, PHIDP_PREPARSED_DATA PreparsedData, PCHAR Report, ULONG ReportLength); | |
| NTSTATUS WINAPI HidP_TranslateUsagesToI8042ScanCodes(USAGE *ChangedUsageList, ULONG UsageListLength, HIDP_KEYBOARD_DIRECTION KeyAction, HIDP_KEYBOARD_MODIFIER_STATE *ModifierState, PHIDP_INSERT_SCANCODES InsertCodesProcedure, VOID *InsertCodesContext); | |
| NTSTATUS WINAPI HidP_GetSpecificButtonCaps(HIDP_REPORT_TYPE ReportType, USAGE UsagePage, USHORT LinkCollection, USAGE Usage, HIDP_BUTTON_CAPS *ButtonCaps, USHORT *ButtonCapsLength, PHIDP_PREPARSED_DATA PreparsedData); | |
| NTSTATUS WINAPI HidP_GetSpecificValueCaps(HIDP_REPORT_TYPE ReportType, USAGE UsagePage, USHORT LinkCollection, USAGE Usage, HIDP_VALUE_CAPS *ValueCaps, USHORT *ValueCapsLength, PHIDP_PREPARSED_DATA PreparsedData); | |
| NTSTATUS WINAPI HidP_GetUsagesEx(HIDP_REPORT_TYPE ReportType, USHORT LinkCollection, USAGE_AND_PAGE *ButtonList, ULONG *UsageLength, PHIDP_PREPARSED_DATA PreparsedData, CHAR *Report, ULONG ReportLength); | |
| ULONG WINAPI HidP_MaxDataListLength(HIDP_REPORT_TYPE ReportType, PHIDP_PREPARSED_DATA PreparsedData); | |
| NTSTATUS WINAPI HidP_GetData(HIDP_REPORT_TYPE ReportType, HIDP_DATA *DataList, ULONG *DataLength, PHIDP_PREPARSED_DATA PreparsedData, CHAR *Report, ULONG ReportLength); | |
| #ifndef FACILITY_HID_ERROR_CODE | |
| #define FACILITY_HID_ERROR_CODE 0x11 | |
| #endif | |
| #define HIDP_ERROR_CODES(sev, code) ((NTSTATUS)(((sev) << 28) | (FACILITY_HID_ERROR_CODE << 16) | (code))) | |
| #define HIDP_STATUS_SUCCESS (HIDP_ERROR_CODES(0x0u,0x00)) | |
| #define HIDP_STATUS_NULL (HIDP_ERROR_CODES(0x8u,0x01)) | |
| #define HIDP_STATUS_INVALID_PREPARSED_DATA (HIDP_ERROR_CODES(0xcu,0x01)) | |
| #define HIDP_STATUS_INVALID_REPORT_TYPE (HIDP_ERROR_CODES(0xcu,0x02)) | |
| #define HIDP_STATUS_INVALID_REPORT_LENGTH (HIDP_ERROR_CODES(0xcu,0x03)) | |
| #define HIDP_STATUS_USAGE_NOT_FOUND (HIDP_ERROR_CODES(0xcu,0x04)) | |
| #define HIDP_STATUS_VALUE_OUT_OF_RANGE (HIDP_ERROR_CODES(0xcu,0x05)) | |
| #define HIDP_STATUS_BAD_LOG_PHY_VALUES (HIDP_ERROR_CODES(0xcu,0x06)) | |
| #define HIDP_STATUS_BUFFER_TOO_SMALL (HIDP_ERROR_CODES(0xcu,0x07)) | |
| #define HIDP_STATUS_INTERNAL_ERROR (HIDP_ERROR_CODES(0xcu,0x08)) | |
| #define HIDP_STATUS_I8242_TRANS_UNKNOWN (HIDP_ERROR_CODES(0xcu,0x09)) | |
| #define HIDP_STATUS_INCOMPATIBLE_REPORT_ID (HIDP_ERROR_CODES(0xcu,0x0a)) | |
| #define HIDP_STATUS_NOT_VALUE_ARRAY (HIDP_ERROR_CODES(0xcu,0x0b)) | |
| #define HIDP_STATUS_IS_VALUE_ARRAY (HIDP_ERROR_CODES(0xcu,0x0c)) | |
| #define HIDP_STATUS_DATA_INDEX_NOT_FOUND (HIDP_ERROR_CODES(0xcu,0x0d)) | |
| #define HIDP_STATUS_DATA_INDEX_OUT_OF_RANGE (HIDP_ERROR_CODES(0xcu,0x0e)) | |
| #define HIDP_STATUS_BUTTON_NOT_PRESSED (HIDP_ERROR_CODES(0xcu,0x0f)) | |
| #define HIDP_STATUS_REPORT_DOES_NOT_EXIST (HIDP_ERROR_CODES(0xcu,0x10)) | |
| #define HIDP_STATUS_NOT_IMPLEMENTED (HIDP_ERROR_CODES(0xcu,0x20)) | |
| #endif /* __HIDPI_H__ */ |