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
) (
149 IN BOOLEAN WaitForACK
);
152 (NTAPI
*PI8042_SYNCH_WRITE_PORT
)(
155 IN BOOLEAN WaitForACK
);
159 (NTAPI
*PI8042_KEYBOARD_INITIALIZATION_ROUTINE
)(
160 IN PVOID InitializationContext
,
161 IN PVOID SynchFuncContext
,
162 IN PI8042_SYNCH_READ_PORT ReadPort
,
163 IN PI8042_SYNCH_WRITE_PORT WritePort
,
164 OUT 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 OUT PI8042_KEYBOARD_INITIALIZATION_ROUTINE InitializationRoutine
;
179 OUT PI8042_KEYBOARD_ISR IsrRoutine
;
180 IN PI8042_ISR_WRITE_PORT IsrWritePort
;
181 IN PI8042_QUEUE_PACKET QueueKeyboardPacket
;
182 IN PVOID CallContext
;
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 OUT PI8042_MOUSE_ISR IsrRoutine
;
199 IN PI8042_ISR_WRITE_PORT IsrWritePort
;
200 IN PI8042_QUEUE_PACKET QueueMousePacket
;
201 IN PVOID CallContext
;
202 } INTERNAL_I8042_HOOK_MOUSE
, *PINTERNAL_I8042_HOOK_MOUSE
;
208 #endif /* __NTDD8042_H */