11
#include <drivers/input/input_dev.h>
12
#include <drivers/input/keymap.h>
14
#define KEY_MAX (sizeof(key_map) / sizeof(char))
19
static const uint8_t key_map[] = {
20
0, 0x1b, '1', '2', '3', '4', '5', '6',
21
'7', '8', '9', '0', '-', '=', '\b', '\t',
22
'q', 'w', 'e', 'r', 't', 'y', 'u', 'i',
23
'o', 'p', '[', ']', '\r', KEY_CTRL, 'a', 's',
24
'd', 'f', 'g', 'h', 'j', 'k', 'l', ';',
25
'\'', '`', KEY_SHFT, '\\', 'z', 'x', 'c', 'v',
26
'b', 'n', 'm', ',', '.', '/', KEY_SHFT, '*',
27
KEY_ALT, ' ', KEY_CAPS, KEY_F1, KEY_F2, KEY_F3, KEY_F4, KEY_F5,
28
KEY_F6, KEY_F7, KEY_F8, KEY_F9, KEY_F10, 0, 0, KEY_HOME,
29
KEY_UP, KEY_PGUP, 0, KEY_LEFT, 0, KEY_RGHT, 0, KEY_END,
30
KEY_DOWN, KEY_PGDN, KEY_INS, KEY_DEL, KEY_F11, KEY_F12
33
static const uint8_t shift_map[] = {
34
0, 0x1b, '!', '@', '#', '$', '%', '^',
35
'&', '*', '(', ')', '_', '+', '\b', '\t',
36
'Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I',
37
'O', 'P', '{', '}', '\r', KEY_CTRL, 'A', 'S',
38
'D', 'F', 'G', 'H', 'J', 'K', 'L', ':',
39
'"', '~', 0, '|', 'Z', 'X', 'C', 'V',
40
'B', 'N', 'M', '<', '>', '?', 0, '*',
41
KEY_ALT, ' ', 0, 0, 0, 0, 0, 0,
42
0, 0, 0, 0, 0, 0, 0, KEY_HOME,
43
KEY_UP, KEY_PGUP, 0, KEY_LEFT, 0, KEY_RGHT, 0, KEY_END,
44
KEY_DOWN, KEY_PGDN, KEY_INS, KEY_DEL, 0, 0
47
static const unsigned char esc_start[] = {0x1B, 0x5B};
49
int keymap_kbd(struct input_event *event) {
50
const uint8_t *cur_map;
52
int key_index = event->value & KEYBOARD_KEY_MASK;
54
if (key_index > KEY_MAX) {
58
cur_map = event->value & KBD_SHIFT_PRESSED ? shift_map : key_map;
59
val = cur_map[key_index];
61
if (event->value & KBD_CTRL_PRESSED){
62
val = val < 0x40 ? 0 : val & KEYBOARD_CTRL_MASK;
68
int keymap_to_ascii(struct input_event *event, unsigned char ascii_buff[4]) {
69
int keycode = keymap_kbd(event);
72
if (keycode < 0 || !(event->type & KBD_KEY_PRESSED)) {
101
ascii_buff[2] = 0x32;
102
ascii_buff[3] = 0x7e;
107
ascii_buff[2] = 0x48;
112
ascii_buff[2] = 0x46;
117
ascii_buff[2] = 0x35;
118
ascii_buff[3] = 0x7e;
123
ascii_buff[2] = 0x36;
124
ascii_buff[3] = 0x7e;
129
ascii_buff[2] = 0x41;
134
ascii_buff[2] = 0x42;
139
ascii_buff[2] = 0x44;
144
ascii_buff[2] = 0x43;
148
ascii_buff[0] = (unsigned char)keycode;
151
memcpy(ascii_buff, esc_start, sizeof(esc_start));