embox
1/**
2* @file
3*
4* @date May 1, 2021
5* @author Anton Bondarev
6*/
7
8#include <drivers/input/input_dev.h>
9#include <drivers/ps_keyboard.h>
10
11static int kbd_state;
12
13static void kbd_key_serv_press(int state, int flag) {
14if (state & KBD_KEY_PRESSED) {
15kbd_state |= flag;
16} else {
17kbd_state &= ~flag;
18}
19}
20
21int keyboard_scan_code_to_event(uint8_t scan_code, struct input_event *event) {
22int ret = 0, flag = 0;
23
24event->type = event->value = 0;
25
26if (scan_code & 0x80) {
27/* key unpressed */
28event->type &= ~KBD_KEY_PRESSED;
29} else {
30/* key pressed */
31event->type |= KBD_KEY_PRESSED;
32}
33scan_code &= 0x7F;
34
35switch(scan_code) {
36case KEYBOARD_SCAN_CODE_CTRL:
37flag = KBD_CTRL_PRESSED;
38break;
39case KEYBOARD_SCAN_CODE_ALT:
40flag = KBD_ALT_PRESSED;
41break;
42case KEYBOARD_SCAN_CODE_SHIFT:
43flag = KBD_SHIFT_PRESSED;
44break;
45case KEYBOARD_SCAN_CODE_CAPS:
46flag = KBD_CAPS_PRESSED;
47break;
48}
49kbd_key_serv_press(event->type, flag);
50
51event->value = kbd_state | scan_code;
52
53return ret;
54}
55