static void input_connected(struct XenDevice *xendev) { struct XenInput *in = container_of(xendev, struct XenInput, c.xendev); if (xenstore_read_fe_int(xendev, "request-abs-pointer", &in->abs_pointer_wanted) == -1) { in->abs_pointer_wanted = 0; } if (xenstore_read_fe_int(xendev, "request-raw-pointer", &in->raw_pointer_wanted) == -1) { in->raw_pointer_wanted = 0; } if (in->raw_pointer_wanted && in->abs_pointer_wanted == 0) { xen_pv_printf(xendev, 0, "raw pointer set without abs pointer"); } if (in->qkbd) { qemu_input_handler_unregister(in->qkbd); } if (in->qmou) { qemu_input_handler_unregister(in->qmou); } trace_xenfb_input_connected(xendev, in->abs_pointer_wanted); in->qkbd = qemu_input_handler_register((DeviceState *)in, &xenfb_keyboard); in->qmou = qemu_input_handler_register((DeviceState *)in, in->abs_pointer_wanted ? &xenfb_abs_mouse : &xenfb_rel_mouse); if (in->raw_pointer_wanted) { qemu_input_handler_activate(in->qkbd); qemu_input_handler_activate(in->qmou); } }
static CharDriverState *qemu_chr_open_msmouse(const char *id, ChardevBackend *backend, ChardevReturn *ret, bool *be_opened, Error **errp) { ChardevCommon *common = backend->u.msmouse.data; MouseState *mouse; CharDriverState *chr; chr = qemu_chr_alloc(common, errp); if (!chr) { return NULL; } chr->chr_write = msmouse_chr_write; chr->chr_free = msmouse_chr_free; chr->chr_accept_input = msmouse_chr_accept_input; *be_opened = false; mouse = g_new0(MouseState, 1); mouse->hs = qemu_input_handler_register((DeviceState *)mouse, &msmouse_handler); mouse->chr = chr; chr->opaque = mouse; return chr; }
static void wctablet_chr_open(Chardev *chr, ChardevBackend *backend, bool *be_opened, Error **errp) { TabletChardev *tablet = WCTABLET_CHARDEV(chr); *be_opened = true; /* init state machine */ memcpy(tablet->outbuf, WC_FULL_CONFIG_STRING, WC_FULL_CONFIG_STRING_LENGTH); tablet->outlen = WC_FULL_CONFIG_STRING_LENGTH; tablet->query_index = 0; tablet->hs = qemu_input_handler_register((DeviceState *)tablet, &wctablet_handler); }
static void virtio_input_handle_sync(DeviceState *dev) { VirtIOInput *vinput = VIRTIO_INPUT(dev); virtio_input_event event = { .type = cpu_to_le16(EV_SYN), .code = cpu_to_le16(SYN_REPORT), .value = 0, }; virtio_input_send(vinput, &event); } static void virtio_input_hid_realize(DeviceState *dev, Error **errp) { VirtIOInputHID *vhid = VIRTIO_INPUT_HID(dev); vhid->hs = qemu_input_handler_register(dev, vhid->handler); if (vhid->display && vhid->hs) { qemu_input_handler_bind(vhid->hs, vhid->display, vhid->head, NULL); } }