| 1 |
/* |
| 2 |
* ntdd8042.h |
| 3 |
* |
| 4 |
* i8042 IOCTL interface. |
| 5 |
* |
| 6 |
* This file is part of the w32api package. |
| 7 |
* |
| 8 |
* Contributors: |
| 9 |
* Created by Casper S. Hornstrup <chorns@users.sourceforge.net> |
| 10 |
* |
| 11 |
* THIS SOFTWARE IS NOT COPYRIGHTED |
| 12 |
* |
| 13 |
* This source code is offered for use in the public domain. You may |
| 14 |
* use, modify or distribute it freely. |
| 15 |
* |
| 16 |
* This code is distributed in the hope that it will be useful but |
| 17 |
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY |
| 18 |
* DISCLAIMED. This includes but is not limited to warranties of |
| 19 |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
| 20 |
* |
| 21 |
*/ |
| 22 |
|
| 23 |
#ifndef __NTDD8042_H |
| 24 |
#define __NTDD8042_H |
| 25 |
|
| 26 |
#if __GNUC__ >=3 |
| 27 |
#pragma GCC system_header |
| 28 |
#endif |
| 29 |
|
| 30 |
#ifdef __cplusplus |
| 31 |
extern "C" { |
| 32 |
#endif |
| 33 |
|
| 34 |
#include "ntddk.h" |
| 35 |
#include "ntddkbd.h" |
| 36 |
#include "ntddmou.h" |
| 37 |
|
| 38 |
#define IOCTL_INTERNAL_I8042_CONTROLLER_WRITE_BUFFER \ |
| 39 |
CTL_CODE(FILE_DEVICE_KEYBOARD, 0x0FF2, METHOD_NEITHER, FILE_ANY_ACCESS) |
| 40 |
|
| 41 |
#define IOCTL_INTERNAL_I8042_HOOK_KEYBOARD \ |
| 42 |
CTL_CODE(FILE_DEVICE_KEYBOARD, 0x0FF0, METHOD_NEITHER, FILE_ANY_ACCESS) |
| 43 |
|
| 44 |
#define IOCTL_INTERNAL_I8042_KEYBOARD_START_INFORMATION \ |
| 45 |
CTL_CODE(FILE_DEVICE_KEYBOARD, 0x0FF3, METHOD_NEITHER, FILE_ANY_ACCESS) |
| 46 |
|
| 47 |
#define IOCTL_INTERNAL_I8042_KEYBOARD_WRITE_BUFFER \ |
| 48 |
CTL_CODE(FILE_DEVICE_KEYBOARD, 0x0FF1, METHOD_NEITHER, FILE_ANY_ACCESS) |
| 49 |
|
| 50 |
#define IOCTL_INTERNAL_I8042_HOOK_MOUSE \ |
| 51 |
CTL_CODE(FILE_DEVICE_MOUSE, 0x0FF0, METHOD_NEITHER, FILE_ANY_ACCESS) |
| 52 |
|
| 53 |
#define IOCTL_INTERNAL_I8042_MOUSE_START_INFORMATION \ |
| 54 |
CTL_CODE(FILE_DEVICE_MOUSE, 0x0FF3, METHOD_NEITHER, FILE_ANY_ACCESS) |
| 55 |
|
| 56 |
#define IOCTL_INTERNAL_I8042_MOUSE_WRITE_BUFFER \ |
| 57 |
CTL_CODE(FILE_DEVICE_MOUSE, 0x0FF1, METHOD_NEITHER, FILE_ANY_ACCESS) |
| 58 |
|
| 59 |
#define I8042_POWER_SYS_BUTTON 0x0001 |
| 60 |
#define I8042_SLEEP_SYS_BUTTON 0x0002 |
| 61 |
#define I8042_WAKE_SYS_BUTTON 0x0004 |
| 62 |
#define I8042_SYS_BUTTONS (I8042_POWER_SYS_BUTTON | \ |
| 63 |
I8042_SLEEP_SYS_BUTTON | \ |
| 64 |
I8042_WAKE_SYS_BUTTON) |
| 65 |
|
| 66 |
typedef enum _TRANSMIT_STATE { |
| 67 |
Idle = 0, |
| 68 |
SendingBytes |
| 69 |
} TRANSMIT_STATE; |
| 70 |
|
| 71 |
typedef struct _OUTPUT_PACKET { |
| 72 |
PUCHAR Bytes; |
| 73 |
ULONG CurrentByte; |
| 74 |
ULONG ByteCount; |
| 75 |
TRANSMIT_STATE State; |
| 76 |
} OUTPUT_PACKET, *POUTPUT_PACKET; |
| 77 |
|
| 78 |
typedef enum _KEYBOARD_SCAN_STATE { |
| 79 |
Normal, |
| 80 |
GotE0, |
| 81 |
GotE1 |
| 82 |
} KEYBOARD_SCAN_STATE, *PKEYBOARD_SCAN_STATE; |
| 83 |
|
| 84 |
typedef enum _MOUSE_STATE { |
| 85 |
MouseIdle, |
| 86 |
XMovement, |
| 87 |
YMovement, |
| 88 |
ZMovement, |
| 89 |
MouseExpectingACK, |
| 90 |
MouseResetting |
| 91 |
} MOUSE_STATE, *PMOUSE_STATE; |
| 92 |
|
| 93 |
typedef enum _MOUSE_RESET_SUBSTATE { |
| 94 |
ExpectingReset, |
| 95 |
ExpectingResetId, |
| 96 |
ExpectingGetDeviceIdACK, |
| 97 |
ExpectingGetDeviceIdValue, |
| 98 |
ExpectingSetResolutionDefaultACK, |
| 99 |
ExpectingSetResolutionDefaultValueACK, |
| 100 |
ExpectingSetResolutionACK, |
| 101 |
ExpectingSetResolutionValueACK, |
| 102 |
ExpectingSetScaling1to1ACK, |
| 103 |
ExpectingSetScaling1to1ACK2, |
| 104 |
ExpectingSetScaling1to1ACK3, |
| 105 |
ExpectingReadMouseStatusACK, |
| 106 |
ExpectingReadMouseStatusByte1, |
| 107 |
ExpectingReadMouseStatusByte2, |
| 108 |
ExpectingReadMouseStatusByte3, |
| 109 |
StartPnPIdDetection, |
| 110 |
ExpectingLoopSetSamplingRateACK, |
| 111 |
ExpectingLoopSetSamplingRateValueACK, |
| 112 |
ExpectingPnpIdByte1, |
| 113 |
ExpectingPnpIdByte2, |
| 114 |
ExpectingPnpIdByte3, |
| 115 |
ExpectingPnpIdByte4, |
| 116 |
ExpectingPnpIdByte5, |
| 117 |
ExpectingPnpIdByte6, |
| 118 |
ExpectingPnpIdByte7, |
| 119 |
EnableWheel, |
| 120 |
Enable5Buttons, |
| 121 |
ExpectingGetDeviceId2ACK, |
| 122 |
ExpectingGetDeviceId2Value, |
| 123 |
ExpectingSetSamplingRateACK, |
| 124 |
ExpectingSetSamplingRateValueACK, |
| 125 |
ExpectingEnableACK, |
| 126 |
ExpectingFinalResolutionACK, |
| 127 |
ExpectingFinalResolutionValueACK, |
| 128 |
ExpectingGetDeviceIdDetectACK, |
| 129 |
ExpectingGetDeviceIdDetectValue, |
| 130 |
CustomHookStateMinimum = 100, |
| 131 |
CustomHookStateMaximum = 999, |
| 132 |
I8042ReservedMinimum = 1000 |
| 133 |
} MOUSE_RESET_SUBSTATE, *PMOUSE_RESET_SUBSTATE; |
| 134 |
|
| 135 |
typedef struct _INTERNAL_I8042_START_INFORMATION { |
| 136 |
ULONG Size; |
| 137 |
PKINTERRUPT InterruptObject; |
| 138 |
ULONG Reserved[8]; |
| 139 |
} INTERNAL_I8042_START_INFORMATION, *PINTERNAL_I8042_START_INFORMATION; |
| 140 |
|
| 141 |
typedef VOID DDKAPI |
| 142 |
(*PI8042_ISR_WRITE_PORT)( |
| 143 |
/*IN*/ PVOID Context, |
| 144 |
/*IN*/ UCHAR Value); |
| 145 |
|
| 146 |
typedef VOID DDKAPI |
| 147 |
(*PI8042_QUEUE_PACKET)( |
| 148 |
/*IN*/ PVOID Context); |
| 149 |
|
| 150 |
typedef NTSTATUS DDKAPI |
| 151 |
(*PI8042_SYNCH_READ_PORT) ( |
| 152 |
/*IN*/ PVOID Context, |
| 153 |
/*OUT*/ PUCHAR Value, |
| 154 |
/*IN*/ BOOLEAN WaitForACK); |
| 155 |
|
| 156 |
typedef NTSTATUS DDKAPI |
| 157 |
(*PI8042_SYNCH_WRITE_PORT)( |
| 158 |
/*IN*/ PVOID Context, |
| 159 |
/*IN*/ UCHAR Value, |
| 160 |
/*IN*/ BOOLEAN WaitForACK); |
| 161 |
|
| 162 |
|
| 163 |
typedef NTSTATUS DDKAPI |
| 164 |
(*PI8042_KEYBOARD_INITIALIZATION_ROUTINE)( |
| 165 |
/*IN*/ PVOID InitializationContext, |
| 166 |
/*IN*/ PVOID SynchFuncContext, |
| 167 |
/*IN*/ PI8042_SYNCH_READ_PORT ReadPort, |
| 168 |
/*IN*/ PI8042_SYNCH_WRITE_PORT WritePort, |
| 169 |
/*OUT*/ PBOOLEAN TurnTranslationOn); |
| 170 |
|
| 171 |
typedef BOOLEAN DDKAPI |
| 172 |
(*PI8042_KEYBOARD_ISR)( |
| 173 |
PVOID IsrContext, |
| 174 |
PKEYBOARD_INPUT_DATA CurrentInput, |
| 175 |
POUTPUT_PACKET CurrentOutput, |
| 176 |
UCHAR StatusByte, |
| 177 |
PUCHAR Byte, |
| 178 |
PBOOLEAN ContinueProcessing, |
| 179 |
PKEYBOARD_SCAN_STATE ScanState); |
| 180 |
|
| 181 |
typedef struct _INTERNAL_I8042_HOOK_KEYBOARD { |
| 182 |
/*OUT*/ PVOID Context; |
| 183 |
/*OUT*/ PI8042_KEYBOARD_INITIALIZATION_ROUTINE InitializationRoutine; |
| 184 |
/*OUT*/ PI8042_KEYBOARD_ISR IsrRoutine; |
| 185 |
/*IN*/ PI8042_ISR_WRITE_PORT IsrWritePort; |
| 186 |
/*IN*/ PI8042_QUEUE_PACKET QueueKeyboardPacket; |
| 187 |
/*IN*/ PVOID CallContext; |
| 188 |
} INTERNAL_I8042_HOOK_KEYBOARD, *PINTERNAL_I8042_HOOK_KEYBOARD; |
| 189 |
|
| 190 |
typedef BOOLEAN DDKAPI |
| 191 |
(*PI8042_MOUSE_ISR)( |
| 192 |
PVOID IsrContext, |
| 193 |
PMOUSE_INPUT_DATA CurrentInput, |
| 194 |
POUTPUT_PACKET CurrentOutput, |
| 195 |
UCHAR StatusByte, |
| 196 |
PUCHAR Byte, |
| 197 |
PBOOLEAN ContinueProcessing, |
| 198 |
PMOUSE_STATE MouseState, |
| 199 |
PMOUSE_RESET_SUBSTATE ResetSubState); |
| 200 |
|
| 201 |
typedef struct _INTERNAL_I8042_HOOK_MOUSE { |
| 202 |
/*OUT*/ PVOID Context; |
| 203 |
/*OUT*/ PI8042_MOUSE_ISR IsrRoutine; |
| 204 |
/*IN*/ PI8042_ISR_WRITE_PORT IsrWritePort; |
| 205 |
/*IN*/ PI8042_QUEUE_PACKET QueueMousePacket; |
| 206 |
/*IN*/ PVOID CallContext; |
| 207 |
} INTERNAL_I8042_HOOK_MOUSE, *PINTERNAL_I8042_HOOK_MOUSE; |
| 208 |
|
| 209 |
#ifdef __cplusplus |
| 210 |
} |
| 211 |
#endif |
| 212 |
|
| 213 |
#endif /* __NTDD8042_H */ |