123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214 |
- /*
- * 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_ */
|