540d550a38
d4iface.h, ddkmapi.h, hidclass.h, hidpi.h, hidusage.h, mcd.h, miniport.h, minitape.h, mountdev.h, mountmgr.h, ndis.h, ndisquid.h, ndistapi.h, ndisvan.h, netevent.h, netpnp.h, netdev.h, ntapi.h, ntdd8042.h, ntddbeep.h, ntddcdrm.h, ntddcdvd.h, ntddchgr.h, ntdddisk.h, ntddk.h, ntddkbd.h, ntddmou.h, ntddndis.h, ntddpar.h, ntddpcm.h, ntddscsi.h, ntddser.h, ntddstor.h, ntddtape.h, ntddtdi.h, ntddvdeo.h, ntddvol.h, ntifs.h, ntpoapi.h, ntstatus.h, parallel.h, pfhook.h, poclass.h, scsi.h, scsiscan.h, scsiwmi.h, smbus.h, srb.h, storport.h, tdi.h, tdiinfo.h, tdikrnl.h, tdistat.h, tvout.h, upssvc.h, usb.h, usb100.h, usbcamdi.h, usbdi.h, usbioctl.h, usbiodef.h, usbscan.h, usbuser.h, video.h, videoagp.h, win2k.h, winddi.h, winddk.h, winnt4.h, winxp.h, ws2san.h, xfilter.h): Change comment to refer w32api package, not MinGW.
219 lines
5.6 KiB
C
219 lines
5.6 KiB
C
/*
|
|
* ntdd8042.h
|
|
*
|
|
* i8042 IOCTL interface.
|
|
*
|
|
* This file is part of the w32api package.
|
|
*
|
|
* Contributors:
|
|
* Created by 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_H
|
|
#define __NTDD8042_H
|
|
|
|
#if __GNUC__ >=3
|
|
#pragma GCC system_header
|
|
#endif
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#pragma pack(push,4)
|
|
|
|
#include "ntddk.h"
|
|
#include "ntddkbd.h"
|
|
#include "ntddmou.h"
|
|
|
|
|
|
#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 DDKAPI
|
|
(*PI8042_ISR_WRITE_PORT)(
|
|
IN PVOID Context,
|
|
IN UCHAR Value);
|
|
|
|
typedef VOID DDKAPI
|
|
(*PI8042_QUEUE_PACKET)(
|
|
IN PVOID Context);
|
|
|
|
typedef NTSTATUS DDKAPI
|
|
(*PI8042_SYNCH_READ_PORT) (
|
|
IN PVOID Context,
|
|
OUT PUCHAR Value,
|
|
IN BOOLEAN WaitForACK);
|
|
|
|
typedef NTSTATUS DDKAPI
|
|
(*PI8042_SYNCH_WRITE_PORT)(
|
|
IN PVOID Context,
|
|
IN UCHAR Value,
|
|
IN BOOLEAN WaitForACK);
|
|
|
|
|
|
typedef NTSTATUS DDKAPI
|
|
(*PI8042_KEYBOARD_INITIALIZATION_ROUTINE)(
|
|
IN PVOID InitializationContext,
|
|
IN PVOID SynchFuncContext,
|
|
IN PI8042_SYNCH_READ_PORT ReadPort,
|
|
IN PI8042_SYNCH_WRITE_PORT WritePort,
|
|
OUT PBOOLEAN TurnTranslationOn);
|
|
|
|
typedef BOOLEAN DDKAPI
|
|
(*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 {
|
|
OUT PVOID Context;
|
|
OUT PI8042_KEYBOARD_INITIALIZATION_ROUTINE InitializationRoutine;
|
|
OUT PI8042_KEYBOARD_ISR IsrRoutine;
|
|
IN PI8042_ISR_WRITE_PORT IsrWritePort;
|
|
IN PI8042_QUEUE_PACKET QueueKeyboardPacket;
|
|
IN PVOID CallContext;
|
|
} INTERNAL_I8042_HOOK_KEYBOARD, *PINTERNAL_I8042_HOOK_KEYBOARD;
|
|
|
|
typedef BOOLEAN DDKAPI
|
|
(*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 {
|
|
OUT PVOID Context;
|
|
OUT PI8042_MOUSE_ISR IsrRoutine;
|
|
IN PI8042_ISR_WRITE_PORT IsrWritePort;
|
|
IN PI8042_QUEUE_PACKET QueueMousePacket;
|
|
IN PVOID CallContext;
|
|
} INTERNAL_I8042_HOOK_MOUSE, *PINTERNAL_I8042_HOOK_MOUSE;
|
|
|
|
#pragma pack(pop)
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* __NTDD8042_H */
|