master
c 113 lines 3.14 KB
Raw
1 /*
2 * replay-input.c
3 *
4 * Copyright (c) 2010-2015 Institute for System Programming
5 * of the Russian Academy of Sciences.
6 *
7 * This work is licensed under the terms of the GNU GPL, version 2 or later.
8 * See the COPYING file in the top-level directory.
9 *
10 */
11
12 #include "qemu/osdep.h"
13 #include "system/replay.h"
14 #include "replay-internal.h"
15 #include "qemu/notify.h"
16 #include "ui/input.h"
17 #include "qapi/clone-visitor.h"
18 #include "qapi/qapi-visit-ui.h"
19
20 void replay_save_input_event(QemuInputEvent *evt)
21 {
22 replay_put_dword(evt->type);
23
24 switch (evt->type) {
25 case INPUT_EVENT_KIND_KEY:
26 replay_put_dword(evt->key.key);
27 replay_put_byte(evt->key.down);
28 break;
29 case INPUT_EVENT_KIND_BTN:
30 replay_put_dword(evt->btn.button);
31 replay_put_byte(evt->btn.down);
32 break;
33 case INPUT_EVENT_KIND_REL:
34 replay_put_dword(evt->rel.axis);
35 replay_put_qword(evt->rel.value);
36 break;
37 case INPUT_EVENT_KIND_ABS:
38 replay_put_dword(evt->abs.axis);
39 replay_put_qword(evt->abs.value);
40 break;
41 case INPUT_EVENT_KIND_MTT:
42 replay_put_dword(evt->mtt.type);
43 replay_put_qword(evt->mtt.slot);
44 replay_put_qword(evt->mtt.tracking_id);
45 replay_put_dword(evt->mtt.axis);
46 replay_put_qword(evt->mtt.value);
47 break;
48 case INPUT_EVENT_KIND__MAX:
49 /* keep gcc happy */
50 break;
51 }
52 }
53
54 QemuInputEvent *replay_read_input_event(void)
55 {
56 QemuInputEvent *evt = g_new(QemuInputEvent, 1);
57
58 evt->type = replay_get_dword();
59 switch (evt->type) {
60 case INPUT_EVENT_KIND_KEY:
61 evt->key.key = replay_get_dword();
62 evt->key.down = replay_get_byte();
63 break;
64 case INPUT_EVENT_KIND_BTN:
65 evt->btn.button = (InputButton)replay_get_dword();
66 evt->btn.down = replay_get_byte();
67 break;
68 case INPUT_EVENT_KIND_REL:
69 evt->rel.axis = (InputAxis)replay_get_dword();
70 evt->rel.value = replay_get_qword();
71 break;
72 case INPUT_EVENT_KIND_ABS:
73 evt->abs.axis = (InputAxis)replay_get_dword();
74 evt->abs.value = replay_get_qword();
75 break;
76 case INPUT_EVENT_KIND_MTT:
77 evt->mtt.type = (InputMultiTouchType)replay_get_dword();
78 evt->mtt.slot = replay_get_qword();
79 evt->mtt.tracking_id = replay_get_qword();
80 evt->mtt.axis = (InputAxis)replay_get_dword();
81 evt->mtt.value = replay_get_qword();
82 break;
83 case INPUT_EVENT_KIND__MAX:
84 /* keep gcc happy */
85 break;
86 }
87
88 return evt;
89 }
90
91 void replay_input_event(QemuConsole *src, QemuInputEvent *evt)
92 {
93 if (replay_mode == REPLAY_MODE_PLAY) {
94 /* Nothing */
95 } else if (replay_mode == REPLAY_MODE_RECORD) {
96 QemuInputEvent *clone = g_new(QemuInputEvent, 1);
97 *clone = *evt;
98 replay_add_input_event(clone);
99 } else {
100 qemu_input_event_send_impl(src, evt);
101 }
102 }
103
104 void replay_input_sync_event(void)
105 {
106 if (replay_mode == REPLAY_MODE_PLAY) {
107 /* Nothing */
108 } else if (replay_mode == REPLAY_MODE_RECORD) {
109 replay_add_input_sync_event();
110 } else {
111 qemu_input_event_sync_impl();
112 }
113 }