Lines Matching full:tablet

2  * QEMU Wacom Penpartner serial tablet emulation
67 /* This structure is used to save private info for Wacom Tablet. */
95 static void wctablet_shift_input(TabletChardev *tablet, int count) in wctablet_shift_input() argument
97 tablet->query_index -= count; in wctablet_shift_input()
98 memmove(tablet->query, tablet->query + count, tablet->query_index); in wctablet_shift_input()
99 tablet->query[tablet->query_index] = 0; in wctablet_shift_input()
102 static void wctablet_queue_output(TabletChardev *tablet, uint8_t *buf, int count) in wctablet_queue_output() argument
104 if (tablet->outlen + count > sizeof(tablet->outbuf)) { in wctablet_queue_output()
108 memcpy(tablet->outbuf + tablet->outlen, buf, count); in wctablet_queue_output()
109 tablet->outlen += count; in wctablet_queue_output()
110 wctablet_chr_accept_input(CHARDEV(tablet)); in wctablet_queue_output()
113 static void wctablet_reset(TabletChardev *tablet) in wctablet_reset() argument
116 tablet->query_index = 0; in wctablet_reset()
117 tablet->outlen = 0; in wctablet_reset()
119 tablet->send_events = false; in wctablet_reset()
122 static void wctablet_queue_event(TabletChardev *tablet) in wctablet_queue_event() argument
126 if (tablet->line_speed != 9600) { in wctablet_queue_event()
130 int newX = tablet->axis[INPUT_AXIS_X] * 0.1537; in wctablet_queue_event()
131 int nexY = tablet->axis[INPUT_AXIS_Y] * 0.1152; in wctablet_queue_event()
141 if (tablet->btns[INPUT_BUTTON_LEFT]) { in wctablet_queue_event()
145 wctablet_queue_output(tablet, codes, 7); in wctablet_queue_event()
151 TabletChardev *tablet = (TabletChardev *)dev; in wctablet_input_event() local
158 tablet->axis[move->axis] = move->value; in wctablet_input_event()
163 tablet->btns[btn->button] = btn->down; in wctablet_input_event()
174 TabletChardev *tablet = (TabletChardev *)dev; in wctablet_input_sync() local
176 if (tablet->send_events) { in wctablet_input_sync()
177 wctablet_queue_event(tablet); in wctablet_input_sync()
182 .name = "QEMU Wacom Pen Tablet",
190 TabletChardev *tablet = WCTABLET_CHARDEV(chr); in wctablet_chr_accept_input() local
195 if (len > tablet->outlen) { in wctablet_chr_accept_input()
196 len = tablet->outlen; in wctablet_chr_accept_input()
200 qemu_chr_be_write(chr, tablet->outbuf, len); in wctablet_chr_accept_input()
201 tablet->outlen -= len; in wctablet_chr_accept_input()
202 if (tablet->outlen) { in wctablet_chr_accept_input()
203 memmove(tablet->outbuf, tablet->outbuf + len, tablet->outlen); in wctablet_chr_accept_input()
211 TabletChardev *tablet = WCTABLET_CHARDEV(chr); in wctablet_chr_write() local
215 if (tablet->line_speed != 9600) { in wctablet_chr_write()
218 for (i = 0; i < len && tablet->query_index < sizeof(tablet->query) - 1; i++) { in wctablet_chr_write()
219 tablet->query[tablet->query_index++] = buf[i]; in wctablet_chr_write()
221 tablet->query[tablet->query_index] = 0; in wctablet_chr_write()
223 while (tablet->query_index > 0 && (tablet->query[0] == '@' || in wctablet_chr_write()
224 tablet->query[0] == '\r' || in wctablet_chr_write()
225 tablet->query[0] == '\n')) { in wctablet_chr_write()
226 wctablet_shift_input(tablet, 1); in wctablet_chr_write()
228 if (!tablet->query_index) { in wctablet_chr_write()
232 if (strncmp((char *)tablet->query, "~#", 2) == 0) { in wctablet_chr_write()
235 wctablet_shift_input(tablet, 2); in wctablet_chr_write()
236 wctablet_queue_output(tablet, WC_MODEL_STRING, in wctablet_chr_write()
242 pos = strchr((char *)tablet->query, '\r'); in wctablet_chr_write()
244 pos = strchr((char *)tablet->query, '\n'); in wctablet_chr_write()
249 clen = pos - (char *)tablet->query; in wctablet_chr_write()
252 if (strncmp((char *)tablet->query, "RE", 2) == 0 && in wctablet_chr_write()
255 wctablet_shift_input(tablet, 3); in wctablet_chr_write()
256 wctablet_queue_output(tablet, WC_CONFIG_STRING, in wctablet_chr_write()
259 } else if (strncmp((char *)tablet->query, "ST", 2) == 0 && in wctablet_chr_write()
262 wctablet_shift_input(tablet, 3); in wctablet_chr_write()
263 tablet->send_events = true; in wctablet_chr_write()
264 wctablet_queue_event(tablet); in wctablet_chr_write()
266 } else if (strncmp((char *)tablet->query, "SP", 2) == 0 && in wctablet_chr_write()
269 wctablet_shift_input(tablet, 3); in wctablet_chr_write()
270 tablet->send_events = false; in wctablet_chr_write()
272 } else if (strncmp((char *)tablet->query, "TS", 2) == 0 && in wctablet_chr_write()
274 unsigned int input = tablet->query[2]; in wctablet_chr_write()
285 wctablet_shift_input(tablet, 4); in wctablet_chr_write()
286 wctablet_queue_output(tablet, codes, 7); in wctablet_chr_write()
289 tablet->query[clen] = 0; /* terminate line for printing */ in wctablet_chr_write()
290 trace_wct_cmd_other((char *)tablet->query); in wctablet_chr_write()
291 wctablet_shift_input(tablet, clen + 1); in wctablet_chr_write()
300 TabletChardev *tablet = WCTABLET_CHARDEV(chr); in wctablet_chr_ioctl() local
306 if (tablet->line_speed != ssp->speed) { in wctablet_chr_ioctl()
308 wctablet_reset(tablet); in wctablet_chr_ioctl()
309 tablet->line_speed = ssp->speed; in wctablet_chr_ioctl()
320 TabletChardev *tablet = WCTABLET_CHARDEV(obj); in wctablet_chr_finalize() local
322 if (tablet->hs) { in wctablet_chr_finalize()
323 qemu_input_handler_unregister(tablet->hs); in wctablet_chr_finalize()
332 TabletChardev *tablet = WCTABLET_CHARDEV(chr); in wctablet_chr_open() local
337 memcpy(tablet->outbuf, WC_FULL_CONFIG_STRING, WC_FULL_CONFIG_STRING_LENGTH); in wctablet_chr_open()
338 tablet->outlen = WC_FULL_CONFIG_STRING_LENGTH; in wctablet_chr_open()
339 tablet->query_index = 0; in wctablet_chr_open()
341 tablet->hs = qemu_input_handler_register((DeviceState *)tablet, in wctablet_chr_open()