Files
MentOS/mentos/inc/drivers/keyboard/keymap.h
T
Enrico Fraccaroli (Galfurian) 0130725518 Just add missing comments.
2022-04-08 10:05:21 -04:00

164 lines
6.2 KiB
C

/// @file keymap.h
/// @brief Keymap for keyboard.
/// @copyright (c) 2014-2022 This file is distributed under the MIT License.
/// See LICENSE.md for details.
/// @addtogroup drivers Device Drivers
/// @{
/// @addtogroup keyboard Keyboard
/// @{
#pragma once
#include "stdint.h"
/// @brief The list of supported keyboard layouts.
typedef enum {
KEYMAP_IT, ///< Identifies the IT keyboard mapping.
KEYMAP_US, ///< Identifies the US keyboard mapping.
KEYMAP_TYPE_MAX ///< The delimiter for the keyboard types.
} keymap_type_t;
/// @brief Defines the mapping of a single scancode towards a set of characters.
typedef struct keymap_t {
/// The basic mapping.
int normal;
/// The mapping when shifted.
int shift;
/// The mapping when ctrl is pressed.
int ctrl;
/// The mapping when alt is pressed.
int alt;
/// The mapping when numlock is active.
int numlock;
} keymap_t;
/// @brief Returns the current keymap type.
/// @return The current keymap type.
keymap_type_t get_keymap_type();
/// @brief Changes the current keymap type.
/// @param type The type to set.
void set_keymap_type(keymap_type_t type);
/// @brief Returns the current keymap for the given scancode.
/// @param scancode the scancode we want.
/// @return Pointer to the keymap.
const keymap_t *get_keymap(int scancode);
/// @brief Initializes the supported keymaps.
void init_keymaps();
/// @name Keyboard Codes
/// @brief This is the list of keyboard codes.
/// @{
#define KEY_ESCAPE 0x0001U ///< Escape character
#define KEY_1 0x0002U ///< 1
#define KEY_2 0x0003U ///< 2
#define KEY_3 0x0004U ///< 3
#define KEY_4 0x0005U ///< 4
#define KEY_5 0x0006U ///< 5
#define KEY_6 0x0007U ///< 6
#define KEY_7 0x0008U ///< 7
#define KEY_8 0x0009U ///< 8
#define KEY_9 0x000AU ///< 9
#define KEY_0 0x000BU ///< 0
#define KEY_APOSTROPHE 0x000CU ///< '
#define KEY_I_ACC 0x000DU ///< i'
#define KEY_BACKSPACE 0x000EU ///< Backspace
#define KEY_TAB 0x000FU ///< Tabular
#define KEY_Q 0x0010U ///< q
#define KEY_W 0x0011U ///< w
#define KEY_E 0x0012U ///< e
#define KEY_R 0x0013U ///< r
#define KEY_T 0x0014U ///< t
#define KEY_Y 0x0015U ///< y
#define KEY_U 0x0016U ///< u
#define KEY_I 0x0017U ///< i
#define KEY_O 0x0018U ///< o
#define KEY_P 0x0019U ///< p
#define KEY_LEFT_BRAKET 0x001AU ///< (
#define KEY_RIGHT_BRAKET 0x001BU ///< )
#define KEY_ENTER 0x001CU ///< Enter
#define KEY_LEFT_CONTROL 0x001DU ///< Left-ctrl
#define KEY_A 0x001EU ///< a
#define KEY_S 0x001FU ///< s
#define KEY_D 0x0020U ///< d
#define KEY_F 0x0021U ///< f
#define KEY_G 0x0022U ///< g
#define KEY_H 0x0023U ///< h
#define KEY_J 0x0024U ///< j
#define KEY_K 0x0025U ///< k
#define KEY_L 0x0026U ///< l
#define KEY_SEMICOLON 0x0027U ///< '
#define KEY_DOUBLE_QUOTES 0x0028U ///< "
#define KEY_GRAVE 0x0029U ///< Either ` or ~
#define KEY_LEFT_SHIFT 0x002AU ///< LShift
#define KEY_BACKSLASH 0x002BU ///< Either \ or |
#define KEY_Z 0x002cU ///< Z
#define KEY_X 0x002dU ///< X
#define KEY_C 0x002eU ///< C
#define KEY_V 0x002fU ///< V
#define KEY_B 0x0030U ///< B
#define KEY_N 0x0031U ///< N
#define KEY_M 0x0032U ///< M
#define KEY_COMMA 0x0033U ///< Either , or <
#define KEY_PERIOD 0x0034U ///< Either . or >
#define KEY_MINUS 0x0035U ///< Either - and _
#define KEY_RIGHT_SHIFT 0x0036U ///< RShift
#define KEY_KP_MUL 0x0037U ///< NP - *
#define KEY_LEFT_ALT 0x0038U ///< LAlt
#define KEY_SPACE 0x0039U ///< Space
#define KEY_CAPS_LOCK 0x003aU ///< Caps Lock
#define KEY_F1 0x003BU ///< Function 1
#define KEY_F2 0x003CU ///< Function 2
#define KEY_F3 0x003DU ///< Function 3
#define KEY_F4 0x003EU ///< Function 4
#define KEY_F5 0x003FU ///< Function 5
#define KEY_F6 0x0040U ///< Function 6
#define KEY_F7 0x0041U ///< Function 7
#define KEY_F8 0x0042U ///< Function 8
#define KEY_F9 0x0043U ///< Function 9
#define KEY_F10 0x0044U ///< Function 10
#define KEY_NUM_LOCK 0x0045U ///< Num Lock
#define KEY_SCROLL_LOCK 0x0046U ///< Scroll Lock
#define KEY_KP7 0x0047U ///< NP - Home
#define KEY_KP8 0x0048U ///< NP - UpArrow
#define KEY_KP9 0x0049U ///< NP - Pgup
#define KEY_KP_SUB 0x004AU ///< NP - Grey
#define KEY_KP4 0x004BU ///< NP - LArrow
#define KEY_KP5 0x004CU ///< NP - Center
#define KEY_KP6 0x004DU ///< NP - RArrow
#define KEY_KP_ADD 0x004EU ///< NP - Grey +
#define KEY_KP1 0x004FU ///< NP - End
#define KEY_KP2 0x0050U ///< NP - DArrow
#define KEY_KP3 0x0051U ///< NP - Pgdn
#define KEY_KP0 0x0052U ///< NP - Ins
#define KEY_KP_DEC 0x0053U ///< NP - Del
#define KEY_KP_LESS 0x0056U ///< NP - Del
#define KEY_F11 0x0057U ///< F11 57431
#define KEY_F12 0x0058U ///< F12 57432
#define KEY_KP_RETURN 0xE01cU ///< NP - Enter 57372
#define KEY_RIGHT_CONTROL 0xE01DU ///< Right Ctrl 57373
#define KEY_KP_DIV 0xE035U ///< Divide 57397
#define KEY_RIGHT_ALT 0xE038U ///< Right Alt 57400
#define KEY_LEFT_WIN 0xE05bU ///< Left Winkey 57435
#define KEY_RIGHT_WIN 0xE05cU ///< Right Winkey 57436
#define KEY_INSERT 0xE052U ///< Ins 57426
#define KEY_HOME 0xE047U ///< Home 57415
#define KEY_UP_ARROW 0xE048U ///< Up Arrow 57416
#define KEY_PAGE_UP 0xE049U ///< Pgup 57417
#define KEY_LEFT_ARROW 0xE04bU ///< Left Arrow 57419
#define KEY_DELETE 0xE053U ///< Del 57427
#define KEY_END 0xE04fU ///< End 57423
#define KEY_PAGE_DOWN 0xE051U ///< Pgdn 57425
#define KEY_RIGHT_ARROW 0xE04dU ///< Right Arrow 57421
#define KEY_DOWN_ARROW 0xE050U ///< Down Arrow 57424
#define CODE_BREAK 0x0080U ///< Code break code
#define MULTIMEDIA_SCAN_CODE 0xE0
/// @}
/// @}
/// @}