source: Daodan/MinGW/include/ddk/ntdd8042.h@ 1068

Last change on this file since 1068 was 1046, checked in by alloc, 8 years ago

Daodan: Added Windows MinGW and build batch file

File size: 5.7 KB
Line 
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
31extern "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
66typedef enum _TRANSMIT_STATE {
67 Idle = 0,
68 SendingBytes
69} TRANSMIT_STATE;
70
71typedef struct _OUTPUT_PACKET {
72 PUCHAR Bytes;
73 ULONG CurrentByte;
74 ULONG ByteCount;
75 TRANSMIT_STATE State;
76} OUTPUT_PACKET, *POUTPUT_PACKET;
77
78typedef enum _KEYBOARD_SCAN_STATE {
79 Normal,
80 GotE0,
81 GotE1
82} KEYBOARD_SCAN_STATE, *PKEYBOARD_SCAN_STATE;
83
84typedef enum _MOUSE_STATE {
85 MouseIdle,
86 XMovement,
87 YMovement,
88 ZMovement,
89 MouseExpectingACK,
90 MouseResetting
91} MOUSE_STATE, *PMOUSE_STATE;
92
93typedef 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
135typedef 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
141typedef VOID DDKAPI
142(*PI8042_ISR_WRITE_PORT)(
143 /*IN*/ PVOID Context,
144 /*IN*/ UCHAR Value);
145
146typedef VOID DDKAPI
147(*PI8042_QUEUE_PACKET)(
148 /*IN*/ PVOID Context);
149
150typedef NTSTATUS DDKAPI
151(*PI8042_SYNCH_READ_PORT) (
152 /*IN*/ PVOID Context,
153 /*OUT*/ PUCHAR Value,
154 /*IN*/ BOOLEAN WaitForACK);
155
156typedef NTSTATUS DDKAPI
157(*PI8042_SYNCH_WRITE_PORT)(
158 /*IN*/ PVOID Context,
159 /*IN*/ UCHAR Value,
160 /*IN*/ BOOLEAN WaitForACK);
161
162
163typedef 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
171typedef 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
181typedef 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
190typedef 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
201typedef 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 */
Note: See TracBrowser for help on using the repository browser.