*/
#include "qemu/osdep.h"
+#include "standard-headers/linux/input-event-codes.h"
#include "ui/console.h"
#include "ui/vgafont.h"
#include "hw/core/qdev.h"
qemu_text_console_handle_keysym(s, keysym);
}
-static const int qcode_to_keysym[Q_KEY_CODE__MAX] = {
- [Q_KEY_CODE_UP] = QEMU_KEY_UP,
- [Q_KEY_CODE_DOWN] = QEMU_KEY_DOWN,
- [Q_KEY_CODE_RIGHT] = QEMU_KEY_RIGHT,
- [Q_KEY_CODE_LEFT] = QEMU_KEY_LEFT,
- [Q_KEY_CODE_HOME] = QEMU_KEY_HOME,
- [Q_KEY_CODE_END] = QEMU_KEY_END,
- [Q_KEY_CODE_PGUP] = QEMU_KEY_PAGEUP,
- [Q_KEY_CODE_PGDN] = QEMU_KEY_PAGEDOWN,
- [Q_KEY_CODE_DELETE] = QEMU_KEY_DELETE,
- [Q_KEY_CODE_TAB] = QEMU_KEY_TAB,
- [Q_KEY_CODE_BACKSPACE] = QEMU_KEY_BACKSPACE,
+static const int linux_to_keysym[] = {
+ [KEY_UP] = QEMU_KEY_UP,
+ [KEY_DOWN] = QEMU_KEY_DOWN,
+ [KEY_RIGHT] = QEMU_KEY_RIGHT,
+ [KEY_LEFT] = QEMU_KEY_LEFT,
+ [KEY_HOME] = QEMU_KEY_HOME,
+ [KEY_END] = QEMU_KEY_END,
+ [KEY_PAGEUP] = QEMU_KEY_PAGEUP,
+ [KEY_PAGEDOWN] = QEMU_KEY_PAGEDOWN,
+ [KEY_DELETE] = QEMU_KEY_DELETE,
+ [KEY_TAB] = QEMU_KEY_TAB,
+ [KEY_BACKSPACE] = QEMU_KEY_BACKSPACE,
};
-static const int ctrl_qcode_to_keysym[Q_KEY_CODE__MAX] = {
- [Q_KEY_CODE_UP] = QEMU_KEY_CTRL_UP,
- [Q_KEY_CODE_DOWN] = QEMU_KEY_CTRL_DOWN,
- [Q_KEY_CODE_RIGHT] = QEMU_KEY_CTRL_RIGHT,
- [Q_KEY_CODE_LEFT] = QEMU_KEY_CTRL_LEFT,
- [Q_KEY_CODE_HOME] = QEMU_KEY_CTRL_HOME,
- [Q_KEY_CODE_END] = QEMU_KEY_CTRL_END,
- [Q_KEY_CODE_PGUP] = QEMU_KEY_CTRL_PAGEUP,
- [Q_KEY_CODE_PGDN] = QEMU_KEY_CTRL_PAGEDOWN,
+static const int ctrl_linux_to_keysym[] = {
+ [KEY_UP] = QEMU_KEY_CTRL_UP,
+ [KEY_DOWN] = QEMU_KEY_CTRL_DOWN,
+ [KEY_RIGHT] = QEMU_KEY_CTRL_RIGHT,
+ [KEY_LEFT] = QEMU_KEY_CTRL_LEFT,
+ [KEY_HOME] = QEMU_KEY_CTRL_HOME,
+ [KEY_END] = QEMU_KEY_CTRL_END,
+ [KEY_PAGEUP] = QEMU_KEY_CTRL_PAGEUP,
+ [KEY_PAGEDOWN] = QEMU_KEY_CTRL_PAGEDOWN,
};
bool qemu_text_console_put_qcode(QemuTextConsole *s, int qcode, bool ctrl)
{
+ unsigned int lnx = qemu_input_map_qcode_to_linux[qcode];
+ return qemu_text_console_put_linux(s, lnx, ctrl);
+}
+
+bool qemu_text_console_put_linux(QemuTextConsole *s, unsigned int lnx,
+ bool ctrl)
+{
+ size_t maplen;
+ const int *map;
int keysym;
- keysym = ctrl ? ctrl_qcode_to_keysym[qcode] : qcode_to_keysym[qcode];
+ if (ctrl) {
+ maplen = ARRAY_SIZE(ctrl_linux_to_keysym);
+ map = ctrl_linux_to_keysym;
+ } else {
+ maplen = ARRAY_SIZE(linux_to_keysym);
+ map = linux_to_keysym;
+ }
+
+ if (lnx >= maplen) {
+ return false;
+ }
+
+ keysym = map[lnx];
if (keysym == 0) {
return false;
}