]> git.proxmox.com Git - mirror_qemu.git/blob - ui/input-keymap.c
ui: convert the SDL2 frontend to keycodemapdb
[mirror_qemu.git] / ui / input-keymap.c
1 #include "qemu/osdep.h"
2 #include "sysemu/sysemu.h"
3 #include "ui/keymaps.h"
4 #include "ui/input.h"
5
6 #include "standard-headers/linux/input.h"
7
8 #include "ui/input-keymap-linux-to-qcode.c"
9 #include "ui/input-keymap-qcode-to-qnum.c"
10 #include "ui/input-keymap-qnum-to-qcode.c"
11 #include "ui/input-keymap-qcode-to-linux.c"
12 #include "ui/input-keymap-usb-to-qcode.c"
13
14 int qemu_input_linux_to_qcode(unsigned int lnx)
15 {
16 if (lnx >= qemu_input_map_linux_to_qcode_len) {
17 return 0;
18 }
19 return qemu_input_map_linux_to_qcode[lnx];
20 }
21
22 int qemu_input_key_value_to_number(const KeyValue *value)
23 {
24 if (value->type == KEY_VALUE_KIND_QCODE) {
25 if (value->u.qcode.data >= qemu_input_map_qcode_to_qnum_len) {
26 return 0;
27 }
28 return qemu_input_map_qcode_to_qnum[value->u.qcode.data];
29 } else {
30 assert(value->type == KEY_VALUE_KIND_NUMBER);
31 return value->u.number.data;
32 }
33 }
34
35 int qemu_input_key_number_to_qcode(unsigned int nr)
36 {
37 if (nr >= qemu_input_map_qnum_to_qcode_len) {
38 return 0;
39 }
40 return qemu_input_map_qnum_to_qcode[nr];
41 }
42
43 int qemu_input_key_value_to_qcode(const KeyValue *value)
44 {
45 if (value->type == KEY_VALUE_KIND_QCODE) {
46 return value->u.qcode.data;
47 } else {
48 assert(value->type == KEY_VALUE_KIND_NUMBER);
49 return qemu_input_key_number_to_qcode(value->u.number.data);
50 }
51 }
52
53 int qemu_input_key_value_to_scancode(const KeyValue *value, bool down,
54 int *codes)
55 {
56 int keycode = qemu_input_key_value_to_number(value);
57 int count = 0;
58
59 if (value->type == KEY_VALUE_KIND_QCODE &&
60 value->u.qcode.data == Q_KEY_CODE_PAUSE) {
61 /* specific case */
62 int v = down ? 0 : 0x80;
63 codes[count++] = 0xe1;
64 codes[count++] = 0x1d | v;
65 codes[count++] = 0x45 | v;
66 return count;
67 }
68 if (keycode & SCANCODE_GREY) {
69 codes[count++] = SCANCODE_EMUL0;
70 keycode &= ~SCANCODE_GREY;
71 }
72 if (!down) {
73 keycode |= SCANCODE_UP;
74 }
75 codes[count++] = keycode;
76
77 return count;
78 }