/* * replay-input.c * * Copyright (c) 2010-2015 Institute for System Programming * of the Russian Academy of Sciences. * * This work is licensed under the terms of the GNU GPL, version 2 or later. * See the COPYING file in the top-level directory. * */ #include "qemu/osdep.h" #include "system/replay.h" #include "replay-internal.h" #include "qemu/notify.h" #include "ui/input.h" #include "qapi/clone-visitor.h" #include "qapi/qapi-visit-ui.h" void replay_save_input_event(QemuInputEvent *evt) { replay_put_dword(evt->type); switch (evt->type) { case INPUT_EVENT_KIND_KEY: replay_put_dword(evt->key.key); replay_put_byte(evt->key.down); break; case INPUT_EVENT_KIND_BTN: replay_put_dword(evt->btn.button); replay_put_byte(evt->btn.down); break; case INPUT_EVENT_KIND_REL: replay_put_dword(evt->rel.axis); replay_put_qword(evt->rel.value); break; case INPUT_EVENT_KIND_ABS: replay_put_dword(evt->abs.axis); replay_put_qword(evt->abs.value); break; case INPUT_EVENT_KIND_MTT: replay_put_dword(evt->mtt.type); replay_put_qword(evt->mtt.slot); replay_put_qword(evt->mtt.tracking_id); replay_put_dword(evt->mtt.axis); replay_put_qword(evt->mtt.value); break; case INPUT_EVENT_KIND__MAX: /* keep gcc happy */ break; } } QemuInputEvent *replay_read_input_event(void) { QemuInputEvent *evt = g_new(QemuInputEvent, 1); evt->type = replay_get_dword(); switch (evt->type) { case INPUT_EVENT_KIND_KEY: evt->key.key = replay_get_dword(); evt->key.down = replay_get_byte(); break; case INPUT_EVENT_KIND_BTN: evt->btn.button = (InputButton)replay_get_dword(); evt->btn.down = replay_get_byte(); break; case INPUT_EVENT_KIND_REL: evt->rel.axis = (InputAxis)replay_get_dword(); evt->rel.value = replay_get_qword(); break; case INPUT_EVENT_KIND_ABS: evt->abs.axis = (InputAxis)replay_get_dword(); evt->abs.value = replay_get_qword(); break; case INPUT_EVENT_KIND_MTT: evt->mtt.type = (InputMultiTouchType)replay_get_dword(); evt->mtt.slot = replay_get_qword(); evt->mtt.tracking_id = replay_get_qword(); evt->mtt.axis = (InputAxis)replay_get_dword(); evt->mtt.value = replay_get_qword(); break; case INPUT_EVENT_KIND__MAX: /* keep gcc happy */ break; } return evt; } void replay_input_event(QemuConsole *src, QemuInputEvent *evt) { if (replay_mode == REPLAY_MODE_PLAY) { /* Nothing */ } else if (replay_mode == REPLAY_MODE_RECORD) { QemuInputEvent *clone = g_new(QemuInputEvent, 1); *clone = *evt; replay_add_input_event(clone); } else { qemu_input_event_send_impl(src, evt); } } void replay_input_sync_event(void) { if (replay_mode == REPLAY_MODE_PLAY) { /* Nothing */ } else if (replay_mode == REPLAY_MODE_RECORD) { replay_add_input_sync_event(); } else { qemu_input_event_sync_impl(); } }