| /* |
| * ntdd8042.h |
| * |
| * i8042 IOCTL interface. |
| * |
| * This file is part of the mingw-w64 runtime package. |
| * No warranty is given; refer to the file DISCLAIMER within this package. |
| * |
| * Initial contributor is Casper S. Hornstrup <chorns@users.sourceforge.net> |
| * |
| * THIS SOFTWARE IS NOT COPYRIGHTED |
| * |
| * This source code is offered for use in the public domain. You may |
| * use, modify or distribute it freely. |
| * |
| * This code is distributed in the hope that it will be useful but |
| * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY |
| * DISCLAIMED. This includes but is not limited to warranties of |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
| * |
| */ |
| |
| #ifndef _NTDD8042_ |
| #define _NTDD8042_ |
| |
| #include <winapifamily.h> |
| |
| #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP) |
| |
| #include "ntddkbd.h" |
| #include "ntddmou.h" |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| #define IOCTL_INTERNAL_I8042_CONTROLLER_WRITE_BUFFER \ |
| CTL_CODE(FILE_DEVICE_KEYBOARD, 0x0FF2, METHOD_NEITHER, FILE_ANY_ACCESS) |
| |
| #define IOCTL_INTERNAL_I8042_HOOK_KEYBOARD \ |
| CTL_CODE(FILE_DEVICE_KEYBOARD, 0x0FF0, METHOD_NEITHER, FILE_ANY_ACCESS) |
| |
| #define IOCTL_INTERNAL_I8042_KEYBOARD_START_INFORMATION \ |
| CTL_CODE(FILE_DEVICE_KEYBOARD, 0x0FF3, METHOD_NEITHER, FILE_ANY_ACCESS) |
| |
| #define IOCTL_INTERNAL_I8042_KEYBOARD_WRITE_BUFFER \ |
| CTL_CODE(FILE_DEVICE_KEYBOARD, 0x0FF1, METHOD_NEITHER, FILE_ANY_ACCESS) |
| |
| #define IOCTL_INTERNAL_I8042_HOOK_MOUSE \ |
| CTL_CODE(FILE_DEVICE_MOUSE, 0x0FF0, METHOD_NEITHER, FILE_ANY_ACCESS) |
| |
| #define IOCTL_INTERNAL_I8042_MOUSE_START_INFORMATION \ |
| CTL_CODE(FILE_DEVICE_MOUSE, 0x0FF3, METHOD_NEITHER, FILE_ANY_ACCESS) |
| |
| #define IOCTL_INTERNAL_I8042_MOUSE_WRITE_BUFFER \ |
| CTL_CODE(FILE_DEVICE_MOUSE, 0x0FF1, METHOD_NEITHER, FILE_ANY_ACCESS) |
| |
| #define I8042_POWER_SYS_BUTTON 0x0001 |
| #define I8042_SLEEP_SYS_BUTTON 0x0002 |
| #define I8042_WAKE_SYS_BUTTON 0x0004 |
| #define I8042_SYS_BUTTONS (I8042_POWER_SYS_BUTTON | \ |
| I8042_SLEEP_SYS_BUTTON | \ |
| I8042_WAKE_SYS_BUTTON) |
| |
| typedef enum _TRANSMIT_STATE { |
| Idle = 0, |
| SendingBytes |
| } TRANSMIT_STATE; |
| |
| typedef struct _OUTPUT_PACKET { |
| PUCHAR Bytes; |
| ULONG CurrentByte; |
| ULONG ByteCount; |
| TRANSMIT_STATE State; |
| } OUTPUT_PACKET, *POUTPUT_PACKET; |
| |
| typedef enum _KEYBOARD_SCAN_STATE { |
| Normal, |
| GotE0, |
| GotE1 |
| } KEYBOARD_SCAN_STATE, *PKEYBOARD_SCAN_STATE; |
| |
| typedef enum _MOUSE_STATE { |
| MouseIdle, |
| XMovement, |
| YMovement, |
| ZMovement, |
| MouseExpectingACK, |
| MouseResetting |
| } MOUSE_STATE, *PMOUSE_STATE; |
| |
| typedef enum _MOUSE_RESET_SUBSTATE { |
| ExpectingReset, |
| ExpectingResetId, |
| ExpectingGetDeviceIdACK, |
| ExpectingGetDeviceIdValue, |
| ExpectingSetResolutionDefaultACK, |
| ExpectingSetResolutionDefaultValueACK, |
| ExpectingSetResolutionACK, |
| ExpectingSetResolutionValueACK, |
| ExpectingSetScaling1to1ACK, |
| ExpectingSetScaling1to1ACK2, |
| ExpectingSetScaling1to1ACK3, |
| ExpectingReadMouseStatusACK, |
| ExpectingReadMouseStatusByte1, |
| ExpectingReadMouseStatusByte2, |
| ExpectingReadMouseStatusByte3, |
| StartPnPIdDetection, |
| ExpectingLoopSetSamplingRateACK, |
| ExpectingLoopSetSamplingRateValueACK, |
| ExpectingPnpIdByte1, |
| ExpectingPnpIdByte2, |
| ExpectingPnpIdByte3, |
| ExpectingPnpIdByte4, |
| ExpectingPnpIdByte5, |
| ExpectingPnpIdByte6, |
| ExpectingPnpIdByte7, |
| EnableWheel, |
| Enable5Buttons, |
| ExpectingGetDeviceId2ACK, |
| ExpectingGetDeviceId2Value, |
| ExpectingSetSamplingRateACK, |
| ExpectingSetSamplingRateValueACK, |
| ExpectingEnableACK, |
| ExpectingFinalResolutionACK, |
| ExpectingFinalResolutionValueACK, |
| ExpectingGetDeviceIdDetectACK, |
| ExpectingGetDeviceIdDetectValue, |
| CustomHookStateMinimum = 100, |
| CustomHookStateMaximum = 999, |
| I8042ReservedMinimum = 1000 |
| } MOUSE_RESET_SUBSTATE, *PMOUSE_RESET_SUBSTATE; |
| |
| typedef struct _INTERNAL_I8042_START_INFORMATION { |
| ULONG Size; |
| PKINTERRUPT InterruptObject; |
| ULONG Reserved[8]; |
| } INTERNAL_I8042_START_INFORMATION, *PINTERNAL_I8042_START_INFORMATION; |
| |
| typedef VOID |
| (NTAPI *PI8042_ISR_WRITE_PORT)( |
| PVOID Context, |
| UCHAR Value); |
| |
| typedef VOID |
| (NTAPI *PI8042_QUEUE_PACKET)( |
| PVOID Context); |
| |
| typedef NTSTATUS |
| (NTAPI *PI8042_SYNCH_READ_PORT) ( |
| PVOID Context, |
| PUCHAR Value, |
| BOOLEAN WaitForACK); |
| |
| typedef NTSTATUS |
| (NTAPI *PI8042_SYNCH_WRITE_PORT)( |
| PVOID Context, |
| UCHAR Value, |
| BOOLEAN WaitForACK); |
| |
| |
| typedef NTSTATUS |
| (NTAPI *PI8042_KEYBOARD_INITIALIZATION_ROUTINE)( |
| PVOID InitializationContext, |
| PVOID SynchFuncContext, |
| PI8042_SYNCH_READ_PORT ReadPort, |
| PI8042_SYNCH_WRITE_PORT WritePort, |
| PBOOLEAN TurnTranslationOn); |
| |
| typedef BOOLEAN |
| (NTAPI *PI8042_KEYBOARD_ISR)( |
| PVOID IsrContext, |
| PKEYBOARD_INPUT_DATA CurrentInput, |
| POUTPUT_PACKET CurrentOutput, |
| UCHAR StatusByte, |
| PUCHAR Byte, |
| PBOOLEAN ContinueProcessing, |
| PKEYBOARD_SCAN_STATE ScanState); |
| |
| typedef struct _INTERNAL_I8042_HOOK_KEYBOARD { |
| PVOID Context; |
| PI8042_KEYBOARD_INITIALIZATION_ROUTINE InitializationRoutine; |
| PI8042_KEYBOARD_ISR IsrRoutine; |
| PI8042_ISR_WRITE_PORT IsrWritePort; |
| PI8042_QUEUE_PACKET QueueKeyboardPacket; |
| PVOID CallContext; |
| } INTERNAL_I8042_HOOK_KEYBOARD, *PINTERNAL_I8042_HOOK_KEYBOARD; |
| |
| typedef BOOLEAN |
| (NTAPI *PI8042_MOUSE_ISR)( |
| PVOID IsrContext, |
| PMOUSE_INPUT_DATA CurrentInput, |
| POUTPUT_PACKET CurrentOutput, |
| UCHAR StatusByte, |
| PUCHAR Byte, |
| PBOOLEAN ContinueProcessing, |
| PMOUSE_STATE MouseState, |
| PMOUSE_RESET_SUBSTATE ResetSubState); |
| |
| typedef struct _INTERNAL_I8042_HOOK_MOUSE { |
| PVOID Context; |
| PI8042_MOUSE_ISR IsrRoutine; |
| PI8042_ISR_WRITE_PORT IsrWritePort; |
| PI8042_QUEUE_PACKET QueueMousePacket; |
| PVOID CallContext; |
| } INTERNAL_I8042_HOOK_MOUSE, *PINTERNAL_I8042_HOOK_MOUSE; |
| |
| #ifdef __cplusplus |
| } |
| #endif |
| |
| #endif |
| |
| #endif /* _NTDD8042_ */ |