home *** CD-ROM | disk | FTP | other *** search
/ Beginning C++ Through Gam…rogramming (2nd Edition) / BCGP2E.ISO / bloodshed / devcpp-4.9.9.2_setup.exe / ntdd8042.h < prev    next >
C/C++ Source or Header  |  2005-01-29  |  6KB  |  214 lines

  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 */
  214.