2
0

input-keymap.c 2.4 KB

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