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