ReactOS 0.4.15-dev-7924-g5949c20
kdps2kbd.c File Reference
#include <ntoskrnl.h>
Include dependency graph for kdps2kbd.c:

Go to the source code of this file.

Macros

#define KBD_STATUS_REG   0x64
 
#define KBD_CNTL_REG   0x64
 
#define KBD_DATA_REG   0x60
 
#define KBD_STAT_OBF   0x01
 
#define KBD_STAT_IBF   0x02
 
#define CTRL_WRITE_MOUSE   0xD4
 
#define MOU_ENAB   0xF4
 
#define MOU_DISAB   0xF5
 
#define MOUSE_ACK   0xFA
 
#define KBD_DISABLE_MOUSE   0xA7
 
#define KBD_ENABLE_MOUSE   0xA8
 
#define kbd_write_command(cmd)   WRITE_PORT_UCHAR((PUCHAR)KBD_CNTL_REG,cmd)
 
#define kbd_write_data(cmd)   WRITE_PORT_UCHAR((PUCHAR)KBD_DATA_REG,cmd)
 
#define kbd_read_input()   READ_PORT_UCHAR((PUCHAR)KBD_DATA_REG)
 
#define kbd_read_status()   READ_PORT_UCHAR((PUCHAR)KBD_STATUS_REG)
 

Typedefs

typedef UCHAR byte_t
 

Functions

static VOID KbdSendCommandToMouse (UCHAR Command)
 
VOID KbdEnableMouse (VOID)
 
VOID KbdDisableMouse (VOID)
 
CHAR KdbpTryGetCharKeyboard (PULONG ScanCode, ULONG Retry)
 

Variables

static unsigned char keyb_layout [2][128]
 

Macro Definition Documentation

◆ CTRL_WRITE_MOUSE

#define CTRL_WRITE_MOUSE   0xD4

Definition at line 25 of file kdps2kbd.c.

◆ KBD_CNTL_REG

#define KBD_CNTL_REG   0x64

Definition at line 19 of file kdps2kbd.c.

◆ KBD_DATA_REG

#define KBD_DATA_REG   0x60

Definition at line 20 of file kdps2kbd.c.

◆ KBD_DISABLE_MOUSE

#define KBD_DISABLE_MOUSE   0xA7

Definition at line 30 of file kdps2kbd.c.

◆ KBD_ENABLE_MOUSE

#define KBD_ENABLE_MOUSE   0xA8

Definition at line 31 of file kdps2kbd.c.

◆ kbd_read_input

#define kbd_read_input ( )    READ_PORT_UCHAR((PUCHAR)KBD_DATA_REG)

Definition at line 35 of file kdps2kbd.c.

◆ kbd_read_status

#define kbd_read_status ( )    READ_PORT_UCHAR((PUCHAR)KBD_STATUS_REG)

Definition at line 36 of file kdps2kbd.c.

◆ KBD_STAT_IBF

#define KBD_STAT_IBF   0x02

Definition at line 23 of file kdps2kbd.c.

◆ KBD_STAT_OBF

#define KBD_STAT_OBF   0x01

Definition at line 22 of file kdps2kbd.c.

◆ KBD_STATUS_REG

#define KBD_STATUS_REG   0x64

Definition at line 18 of file kdps2kbd.c.

◆ kbd_write_command

#define kbd_write_command (   cmd)    WRITE_PORT_UCHAR((PUCHAR)KBD_CNTL_REG,cmd)

Definition at line 33 of file kdps2kbd.c.

◆ kbd_write_data

#define kbd_write_data (   cmd)    WRITE_PORT_UCHAR((PUCHAR)KBD_DATA_REG,cmd)

Definition at line 34 of file kdps2kbd.c.

◆ MOU_DISAB

#define MOU_DISAB   0xF5

Definition at line 27 of file kdps2kbd.c.

◆ MOU_ENAB

#define MOU_ENAB   0xF4

Definition at line 26 of file kdps2kbd.c.

◆ MOUSE_ACK

#define MOUSE_ACK   0xFA

Definition at line 28 of file kdps2kbd.c.

Typedef Documentation

◆ byte_t

typedef UCHAR byte_t

Definition at line 57 of file kdps2kbd.c.

Function Documentation

◆ KbdDisableMouse()

VOID KbdDisableMouse ( VOID  )

Definition at line 98 of file kdps2kbd.c.

99{
101}
static VOID KbdSendCommandToMouse(UCHAR Command)
Definition: kdps2kbd.c:62
#define MOU_DISAB
Definition: kdps2kbd.c:27

Referenced by KdbpInternalEnter(), and KdReceivePacket().

◆ KbdEnableMouse()

VOID KbdEnableMouse ( VOID  )

Definition at line 93 of file kdps2kbd.c.

94{
96}
#define MOU_ENAB
Definition: kdps2kbd.c:26

Referenced by KdbpInternalEnter(), and KdReceivePacket().

◆ KbdSendCommandToMouse()

static VOID KbdSendCommandToMouse ( UCHAR  Command)
static

Definition at line 62 of file kdps2kbd.c.

63{
64 ULONG Retry = 20000;
65
66 while (kbd_read_status() & KBD_STAT_OBF && Retry--)
67 {
70 }
71
72 Retry = 20000;
73 while (kbd_read_status() & KBD_STAT_IBF && Retry--)
75
77
78 Retry = 20000;
79 while (kbd_read_status() & KBD_STAT_IBF && Retry--)
81
83
84 Retry = 20000;
85 while (!(kbd_read_status() & KBD_STAT_OBF) && Retry--)
87
88 if (kbd_read_input() != MOUSE_ACK) { ; }
89
90 return;
91}
VOID NTAPI KeStallExecutionProcessor(IN ULONG MicroSeconds)
Definition: ntoskrnl.c:81
_In_ PSCSI_REQUEST_BLOCK _Out_ NTSTATUS _Inout_ BOOLEAN * Retry
Definition: classpnp.h:312
#define MOUSE_ACK
Definition: kdps2kbd.c:28
#define KBD_STAT_OBF
Definition: kdps2kbd.c:22
#define kbd_read_status()
Definition: kdps2kbd.c:36
#define CTRL_WRITE_MOUSE
Definition: kdps2kbd.c:25
#define KBD_STAT_IBF
Definition: kdps2kbd.c:23
#define kbd_write_command(cmd)
Definition: kdps2kbd.c:33
#define kbd_write_data(cmd)
Definition: kdps2kbd.c:34
#define kbd_read_input()
Definition: kdps2kbd.c:35
Definition: shell.h:41
uint32_t ULONG
Definition: typedefs.h:59

Referenced by KbdDisableMouse(), and KbdEnableMouse().

◆ KdbpTryGetCharKeyboard()

CHAR KdbpTryGetCharKeyboard ( PULONG  ScanCode,
ULONG  Retry 
)

Definition at line 104 of file kdps2kbd.c.

105{
106 static byte_t last_key = 0;
107 static byte_t shift = 0;
108 char c;
109 BOOLEAN KeepRetrying = (Retry == 0);
110
111 while (KeepRetrying || Retry-- > 0)
112 {
113 while (kbd_read_status() & KBD_STAT_OBF)
114 {
115 byte_t scancode;
116
117 scancode = kbd_read_input();
118
119 /* check for SHIFT-keys */
120 if (((scancode & 0x7F) == 42) || ((scancode & 0x7F) == 54))
121 {
122 shift = !(scancode & 0x80);
123 continue;
124 }
125
126 /* ignore all other RELEASED-codes */
127 if (scancode & 0x80)
128 {
129 last_key = 0;
130 }
131 else if (last_key != scancode)
132 {
133 //printf("kbd: %d, %d, %c\n", scancode, last_key, keyb_layout[shift][scancode]);
134 last_key = scancode;
135 c = keyb_layout[shift][scancode];
136 *ScanCode = scancode;
137
138 if (c > 0)
139 return c;
140 }
141 }
142 }
143
144 return -1;
145}
unsigned char BOOLEAN
UINT ScanCode
Definition: VirtualKey.c:24
const GLubyte * c
Definition: glext.h:8905
static unsigned char keyb_layout[2][128]
Definition: kdps2kbd.c:38
UCHAR byte_t
Definition: kdps2kbd.c:57
#define c
Definition: ke_i.h:80
#define shift
Definition: input.c:1755

Referenced by KdpFlushTerminalInput(), and KdpReadTermKey().

Variable Documentation

◆ keyb_layout

unsigned char keyb_layout[2][128]
static
Initial value:
=
{
"\000\0331234567890-=\177\t"
"qwertyuiop[]\r\000as"
"dfghjkl;'`\000\\zxcv"
"bnm,./\000*\000 \000\201\202\203\204\205"
"\206\207\210\211\212\000\000789-456+1"
"230\177\000\000\213\214\000\000\000\000\000\000\000\000\000\000"
"\r\000/"
,
"\000\033!@#$%^&*()_+\177\t"
"QWERTYUIOP{}\r\000AS"
"DFGHJKL:\"`\000\\ZXCV"
"BNM<>?\000*\000 \000\201\202\203\204\205"
"\206\207\210\211\212\000\000789-456+1"
"230\177\000\000\213\214\000\000\000\000\000\000\000\000\000\000"
"\r\000/"
}

Definition at line 38 of file kdps2kbd.c.

Referenced by KdbpTryGetCharKeyboard().