embox

Форк
0
/
ps_keyboard.c 
54 строки · 1004.0 Байт
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

11
static int kbd_state;
12

13
static void kbd_key_serv_press(int state, int flag) {
14
	if (state & KBD_KEY_PRESSED) {
15
		kbd_state |= flag;
16
	} else {
17
		kbd_state &= ~flag;
18
	}
19
}
20

21
int keyboard_scan_code_to_event(uint8_t scan_code, struct input_event *event) {
22
	int ret = 0, flag = 0;
23

24
	event->type = event->value = 0;
25

26
	if (scan_code & 0x80) {
27
		/* key unpressed */
28
		event->type &= ~KBD_KEY_PRESSED;
29
	} else {
30
		/* key pressed */
31
		event->type |= KBD_KEY_PRESSED;
32
	}
33
	scan_code &= 0x7F;
34

35
	switch(scan_code) {
36
	case KEYBOARD_SCAN_CODE_CTRL:
37
		flag = KBD_CTRL_PRESSED;
38
		break;
39
	case KEYBOARD_SCAN_CODE_ALT:
40
		flag = KBD_ALT_PRESSED;
41
		break;
42
	case KEYBOARD_SCAN_CODE_SHIFT:
43
		flag = KBD_SHIFT_PRESSED;
44
		break;
45
	case KEYBOARD_SCAN_CODE_CAPS:
46
		flag = KBD_CAPS_PRESSED;
47
		break;
48
	}
49
	kbd_key_serv_press(event->type, flag);
50

51
	event->value = kbd_state | scan_code;
52

53
	return ret;
54
}
55

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.