Keyboard input routines. More...
#include <core.h>#include <libc/string.h>#include <kernel/x86/cpu.h>#include <kernel/device/keyboard.h>#include <kernel/interrupt/interrupt.h>Go to the source code of this file.
Data Structures | |
| struct | kbstate_t | 
| Keyboard state.  More... | |
Macros | |
| #define | KB_PORT_DATA 0x60 | 
| Keyboard I/O data port.  More... | |
| #define | MAX_BUFSIZ 32 | 
| Keyboard input buffer size.  More... | |
| #define | BSP KEY_BACKSPACE | 
| #define | TAB KEY_TAB | 
| #define | ENT KEY_ENTER | 
| #define | ESC KEY_ESCAPE | 
| #define | CTL KEY_CTRL | 
| #define | SHF KEY_SHIFT | 
| #define | ALT KEY_ALT | 
| #define | PSC KEY_PRTSCR | 
| #define | CLK KEY_CAPSLOCK | 
| #define | NLK KEY_NUMLOCK | 
| #define | SLK KEY_SCRLOCK | 
| #define | KIN KEY_INSERT | 
| #define | KEN KEY_END | 
| #define | KDN KEY_DOWN | 
| #define | KPD KEY_PGDN | 
| #define | KLT KEY_LEFT | 
| #define | KCT KEY_CENTER | 
| #define | KRT KEY_RIGHT | 
| #define | KHM KEY_HOME | 
| #define | KUP KEY_UP | 
| #define | KPU KEY_PGUP | 
| #define | KDL KEY_DEL | 
| #define | KMI KEY_MINUS | 
| #define | KPL KEY_PLUS | 
| #define | F_1 KEY_F1 | 
| #define | F_2 KEY_F2 | 
| #define | F_3 KEY_F3 | 
| #define | F_4 KEY_F4 | 
| #define | F_5 KEY_F5 | 
| #define | F_6 KEY_F6 | 
| #define | F_7 KEY_F7 | 
| #define | F_8 KEY_F8 | 
| #define | F_9 KEY_F9 | 
| #define | F10 KEY_F10 | 
| #define | F11 KEY_F11 | 
| #define | F12 KEY_F12 | 
| #define | SES KEY_SCANESC | 
| #define | INV KEY_INVALID | 
| #define | APO '\'' | 
| #define | BSL '\\' | 
Functions | |
| static void | toggle (uint8_t flag) | 
| static void | addkey (uint8_t brk, uint8_t meta, uint8_t code, uint8_t ch) | 
| static void | isr_keyboard (const interrupt_context_t *context) | 
| void | kb_init () | 
| Initialize the keyboard so that it can provide input to the kernel.  More... | |
| void | kb_setlayout (keylayout_t *layout) | 
| Install a new keyboard layout.  More... | |
| char | kb_getchar () | 
| Return the next available character from the keyboard's input buffer.  More... | |
| bool | kb_getkey (key_t *key) | 
| Return the available next key from the keyboard's input buffer.  More... | |
| uint8_t | kb_meta () | 
| Return the current meta-key bit mask.  More... | |
Variables | |
| static const keylayout_t | ps2_layout | 
| US English PSC/2 keyboard scan map (default setting)  More... | |
| static kbstate_t | state | 
| Current keyboard state.  More... | |
Keyboard input routines.
Definition in file keyboard.c.
| struct kbstate | 
Keyboard state.
Definition at line 108 of file keyboard.c.
| Data Fields | ||
|---|---|---|
| keylayout_t | layout | The installed keyboard layout. | 
| uint8_t | meta | Mask of meta keys currently pressed. | 
| uint8_t | buf_head | Index of oldest key in buf. | 
| uint8_t | buf_tail | Index of next empty slot in buf. | 
| atomic_uchar | buf_size | Number of keys in the buf. | 
| key_t | buf[MAX_BUFSIZ] | Buffer holding unconsumed keys. | 
| #define KB_PORT_DATA 0x60 | 
| #define MAX_BUFSIZ 32 | 
Keyboard input buffer size.
Definition at line 20 of file keyboard.c.
Referenced by addkey(), kb_getchar(), and kb_getkey().
| #define BSP KEY_BACKSPACE | 
Definition at line 23 of file keyboard.c.
| #define TAB KEY_TAB | 
Definition at line 24 of file keyboard.c.
| #define ENT KEY_ENTER | 
Definition at line 25 of file keyboard.c.
| #define ESC KEY_ESCAPE | 
Definition at line 26 of file keyboard.c.
| #define CTL KEY_CTRL | 
Definition at line 27 of file keyboard.c.
| #define SHF KEY_SHIFT | 
Definition at line 28 of file keyboard.c.
| #define ALT KEY_ALT | 
Definition at line 29 of file keyboard.c.
| #define PSC KEY_PRTSCR | 
Definition at line 30 of file keyboard.c.
| #define CLK KEY_CAPSLOCK | 
Definition at line 31 of file keyboard.c.
| #define NLK KEY_NUMLOCK | 
Definition at line 32 of file keyboard.c.
| #define SLK KEY_SCRLOCK | 
Definition at line 33 of file keyboard.c.
| #define KIN KEY_INSERT | 
Definition at line 34 of file keyboard.c.
| #define KEN KEY_END | 
Definition at line 35 of file keyboard.c.
| #define KDN KEY_DOWN | 
Definition at line 36 of file keyboard.c.
| #define KPD KEY_PGDN | 
Definition at line 37 of file keyboard.c.
| #define KLT KEY_LEFT | 
Definition at line 38 of file keyboard.c.
| #define KCT KEY_CENTER | 
Definition at line 39 of file keyboard.c.
| #define KRT KEY_RIGHT | 
Definition at line 40 of file keyboard.c.
| #define KHM KEY_HOME | 
Definition at line 41 of file keyboard.c.
| #define KUP KEY_UP | 
Definition at line 42 of file keyboard.c.
| #define KPU KEY_PGUP | 
Definition at line 43 of file keyboard.c.
| #define KDL KEY_DEL | 
Definition at line 44 of file keyboard.c.
| #define KMI KEY_MINUS | 
Definition at line 45 of file keyboard.c.
| #define KPL KEY_PLUS | 
Definition at line 46 of file keyboard.c.
| #define F_1 KEY_F1 | 
Definition at line 47 of file keyboard.c.
| #define F_2 KEY_F2 | 
Definition at line 48 of file keyboard.c.
| #define F_3 KEY_F3 | 
Definition at line 49 of file keyboard.c.
| #define F_4 KEY_F4 | 
Definition at line 50 of file keyboard.c.
| #define F_5 KEY_F5 | 
Definition at line 51 of file keyboard.c.
| #define F_6 KEY_F6 | 
Definition at line 52 of file keyboard.c.
| #define F_7 KEY_F7 | 
Definition at line 53 of file keyboard.c.
| #define F_8 KEY_F8 | 
Definition at line 54 of file keyboard.c.
| #define F_9 KEY_F9 | 
Definition at line 55 of file keyboard.c.
| #define F10 KEY_F10 | 
Definition at line 56 of file keyboard.c.
| #define F11 KEY_F11 | 
Definition at line 57 of file keyboard.c.
| #define F12 KEY_F12 | 
Definition at line 58 of file keyboard.c.
| #define SES KEY_SCANESC | 
Definition at line 59 of file keyboard.c.
| #define INV KEY_INVALID | 
Definition at line 60 of file keyboard.c.
| #define APO '\'' | 
Definition at line 61 of file keyboard.c.
| #define BSL '\\' | 
Definition at line 62 of file keyboard.c.
      
  | 
  inlinestatic | 
Definition at line 124 of file keyboard.c.
Referenced by isr_keyboard().
      
  | 
  static | 
Definition at line 133 of file keyboard.c.
Referenced by isr_keyboard().
      
  | 
  static | 
Definition at line 164 of file keyboard.c.
Referenced by kb_init().
| void kb_init | ( | ) | 
Initialize the keyboard so that it can provide input to the kernel.
kb_init installs the default US English PS/2 keyboard layout.
Definition at line 268 of file keyboard.c.
Referenced by kmain().
| void kb_setlayout | ( | keylayout_t * | layout | ) | 
Install a new keyboard layout.
| [in] | layout | The keyboard layout to install. | 
Definition at line 288 of file keyboard.c.
| char kb_getchar | ( | ) | 
Return the next available character from the keyboard's input buffer.
Definition at line 294 of file keyboard.c.
| bool kb_getkey | ( | key_t * | key | ) | 
Return the available next key from the keyboard's input buffer.
| [out] | key | The key record of the next key in the buffer. | 
Definition at line 318 of file keyboard.c.
Referenced by command_run(), and keycode_run().
| uint8_t kb_meta | ( | ) | 
Return the current meta-key bit mask.
Definition at line 340 of file keyboard.c.
      
  | 
  static | 
US English PSC/2 keyboard scan map (default setting)
Definition at line 65 of file keyboard.c.
Referenced by kb_init().
      
  | 
  static | 
Current keyboard state.
Definition at line 121 of file keyboard.c.
Referenced by addkey(), isr_keyboard(), kb_getchar(), kb_getkey(), kb_init(), kb_meta(), kb_setlayout(), and toggle().