4
* i8042 IOCTL interface.
6
* This file is part of the w32api package.
9
* Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
11
* THIS SOFTWARE IS NOT COPYRIGHTED
13
* This source code is offered for use in the public domain. You may
14
* use, modify or distribute it freely.
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.
33
#define IOCTL_INTERNAL_I8042_CONTROLLER_WRITE_BUFFER \
34
CTL_CODE(FILE_DEVICE_KEYBOARD, 0x0FF2, METHOD_NEITHER, FILE_ANY_ACCESS)
36
#define IOCTL_INTERNAL_I8042_HOOK_KEYBOARD \
37
CTL_CODE(FILE_DEVICE_KEYBOARD, 0x0FF0, METHOD_NEITHER, FILE_ANY_ACCESS)
39
#define IOCTL_INTERNAL_I8042_KEYBOARD_START_INFORMATION \
40
CTL_CODE(FILE_DEVICE_KEYBOARD, 0x0FF3, METHOD_NEITHER, FILE_ANY_ACCESS)
42
#define IOCTL_INTERNAL_I8042_KEYBOARD_WRITE_BUFFER \
43
CTL_CODE(FILE_DEVICE_KEYBOARD, 0x0FF1, METHOD_NEITHER, FILE_ANY_ACCESS)
45
#define IOCTL_INTERNAL_I8042_HOOK_MOUSE \
46
CTL_CODE(FILE_DEVICE_MOUSE, 0x0FF0, METHOD_NEITHER, FILE_ANY_ACCESS)
48
#define IOCTL_INTERNAL_I8042_MOUSE_START_INFORMATION \
49
CTL_CODE(FILE_DEVICE_MOUSE, 0x0FF3, METHOD_NEITHER, FILE_ANY_ACCESS)
51
#define IOCTL_INTERNAL_I8042_MOUSE_WRITE_BUFFER \
52
CTL_CODE(FILE_DEVICE_MOUSE, 0x0FF1, METHOD_NEITHER, FILE_ANY_ACCESS)
54
#define I8042_POWER_SYS_BUTTON 0x0001
55
#define I8042_SLEEP_SYS_BUTTON 0x0002
56
#define I8042_WAKE_SYS_BUTTON 0x0004
57
#define I8042_SYS_BUTTONS (I8042_POWER_SYS_BUTTON | \
58
I8042_SLEEP_SYS_BUTTON | \
59
I8042_WAKE_SYS_BUTTON)
61
typedef enum _TRANSMIT_STATE {
66
typedef struct _OUTPUT_PACKET {
71
} OUTPUT_PACKET, *POUTPUT_PACKET;
73
typedef enum _KEYBOARD_SCAN_STATE {
77
} KEYBOARD_SCAN_STATE, *PKEYBOARD_SCAN_STATE;
79
typedef enum _MOUSE_STATE {
86
} MOUSE_STATE, *PMOUSE_STATE;
88
typedef enum _MOUSE_RESET_SUBSTATE {
91
ExpectingGetDeviceIdACK,
92
ExpectingGetDeviceIdValue,
93
ExpectingSetResolutionDefaultACK,
94
ExpectingSetResolutionDefaultValueACK,
95
ExpectingSetResolutionACK,
96
ExpectingSetResolutionValueACK,
97
ExpectingSetScaling1to1ACK,
98
ExpectingSetScaling1to1ACK2,
99
ExpectingSetScaling1to1ACK3,
100
ExpectingReadMouseStatusACK,
101
ExpectingReadMouseStatusByte1,
102
ExpectingReadMouseStatusByte2,
103
ExpectingReadMouseStatusByte3,
105
ExpectingLoopSetSamplingRateACK,
106
ExpectingLoopSetSamplingRateValueACK,
116
ExpectingGetDeviceId2ACK,
117
ExpectingGetDeviceId2Value,
118
ExpectingSetSamplingRateACK,
119
ExpectingSetSamplingRateValueACK,
121
ExpectingFinalResolutionACK,
122
ExpectingFinalResolutionValueACK,
123
ExpectingGetDeviceIdDetectACK,
124
ExpectingGetDeviceIdDetectValue,
125
CustomHookStateMinimum = 100,
126
CustomHookStateMaximum = 999,
127
I8042ReservedMinimum = 1000
128
} MOUSE_RESET_SUBSTATE, *PMOUSE_RESET_SUBSTATE;
130
typedef struct _INTERNAL_I8042_START_INFORMATION {
132
PKINTERRUPT InterruptObject;
134
} INTERNAL_I8042_START_INFORMATION, *PINTERNAL_I8042_START_INFORMATION;
137
(NTAPI *PI8042_ISR_WRITE_PORT)(
142
(NTAPI *PI8042_QUEUE_PACKET)(
146
(NTAPI *PI8042_SYNCH_READ_PORT) (
152
(NTAPI *PI8042_SYNCH_WRITE_PORT)(
159
(NTAPI *PI8042_KEYBOARD_INITIALIZATION_ROUTINE)(
160
PVOID InitializationContext,
161
PVOID SynchFuncContext,
162
PI8042_SYNCH_READ_PORT ReadPort,
163
PI8042_SYNCH_WRITE_PORT WritePort,
164
PBOOLEAN TurnTranslationOn);
167
(NTAPI *PI8042_KEYBOARD_ISR)(
169
PKEYBOARD_INPUT_DATA CurrentInput,
170
POUTPUT_PACKET CurrentOutput,
173
PBOOLEAN ContinueProcessing,
174
PKEYBOARD_SCAN_STATE ScanState);
176
typedef struct _INTERNAL_I8042_HOOK_KEYBOARD {
178
PI8042_KEYBOARD_INITIALIZATION_ROUTINE InitializationRoutine;
179
PI8042_KEYBOARD_ISR IsrRoutine;
180
PI8042_ISR_WRITE_PORT IsrWritePort;
181
PI8042_QUEUE_PACKET QueueKeyboardPacket;
183
} INTERNAL_I8042_HOOK_KEYBOARD, *PINTERNAL_I8042_HOOK_KEYBOARD;
186
(NTAPI *PI8042_MOUSE_ISR)(
188
PMOUSE_INPUT_DATA CurrentInput,
189
POUTPUT_PACKET CurrentOutput,
192
PBOOLEAN ContinueProcessing,
193
PMOUSE_STATE MouseState,
194
PMOUSE_RESET_SUBSTATE ResetSubState);
196
typedef struct _INTERNAL_I8042_HOOK_MOUSE {
198
PI8042_MOUSE_ISR IsrRoutine;
199
PI8042_ISR_WRITE_PORT IsrWritePort;
200
PI8042_QUEUE_PACKET QueueMousePacket;
202
} INTERNAL_I8042_HOOK_MOUSE, *PINTERNAL_I8042_HOOK_MOUSE;
208
#endif /* _NTDD8042_ */