Lines Matching +full:led +full:- +full:1
77 return hs->n > 0 || hs->idle_pending; in hid_has_events()
84 hs->idle_pending = true; in hid_idle_timer()
85 hs->event(hs); in hid_idle_timer()
90 if (hs->idle_timer) { in hid_del_idle_timer()
91 timer_free(hs->idle_timer); in hid_del_idle_timer()
92 hs->idle_timer = NULL; in hid_del_idle_timer()
98 if (hs->idle) { in hid_set_next_idle()
100 NANOSECONDS_PER_SECOND * hs->idle * 4 / 1000; in hid_set_next_idle()
101 if (!hs->idle_timer) { in hid_set_next_idle()
102 hs->idle_timer = timer_new_ns(QEMU_CLOCK_VIRTUAL, hid_idle_timer, hs); in hid_set_next_idle()
104 timer_mod_ns(hs->idle_timer, expire_time); in hid_set_next_idle()
125 assert(hs->n < QUEUE_LENGTH); in hid_pointer_event()
126 e = &hs->ptr.queue[(hs->head + hs->n) & QUEUE_MASK]; in hid_pointer_event()
128 switch (evt->type) { in hid_pointer_event()
130 move = evt->u.rel.data; in hid_pointer_event()
131 if (move->axis == INPUT_AXIS_X) { in hid_pointer_event()
132 e->xdx += move->value; in hid_pointer_event()
133 } else if (move->axis == INPUT_AXIS_Y) { in hid_pointer_event()
134 e->ydy += move->value; in hid_pointer_event()
139 move = evt->u.abs.data; in hid_pointer_event()
140 if (move->axis == INPUT_AXIS_X) { in hid_pointer_event()
141 e->xdx = move->value; in hid_pointer_event()
142 } else if (move->axis == INPUT_AXIS_Y) { in hid_pointer_event()
143 e->ydy = move->value; in hid_pointer_event()
148 btn = evt->u.btn.data; in hid_pointer_event()
149 if (btn->down) { in hid_pointer_event()
150 e->buttons_state |= bmap[btn->button]; in hid_pointer_event()
151 if (btn->button == INPUT_BUTTON_WHEEL_UP) { in hid_pointer_event()
152 e->dz--; in hid_pointer_event()
153 } else if (btn->button == INPUT_BUTTON_WHEEL_DOWN) { in hid_pointer_event()
154 e->dz++; in hid_pointer_event()
157 e->buttons_state &= ~bmap[btn->button]; in hid_pointer_event()
174 if (hs->n == QUEUE_LENGTH-1) { in hid_pointer_sync()
182 prev = &hs->ptr.queue[(hs->head + hs->n - 1) & QUEUE_MASK]; in hid_pointer_sync()
183 curr = &hs->ptr.queue[(hs->head + hs->n) & QUEUE_MASK]; in hid_pointer_sync()
184 next = &hs->ptr.queue[(hs->head + hs->n + 1) & QUEUE_MASK]; in hid_pointer_sync()
186 if (hs->n > 0) { in hid_pointer_sync()
193 if (curr->buttons_state == prev->buttons_state) { in hid_pointer_sync()
200 if (hs->kind == HID_MOUSE) { in hid_pointer_sync()
201 prev->xdx += curr->xdx; in hid_pointer_sync()
202 curr->xdx = 0; in hid_pointer_sync()
203 prev->ydy += curr->ydy; in hid_pointer_sync()
204 curr->ydy = 0; in hid_pointer_sync()
206 prev->xdx = curr->xdx; in hid_pointer_sync()
207 prev->ydy = curr->ydy; in hid_pointer_sync()
209 prev->dz += curr->dz; in hid_pointer_sync()
210 curr->dz = 0; in hid_pointer_sync()
213 if (hs->kind == HID_MOUSE) { in hid_pointer_sync()
214 next->xdx = 0; in hid_pointer_sync()
215 next->ydy = 0; in hid_pointer_sync()
217 next->xdx = curr->xdx; in hid_pointer_sync()
218 next->ydy = curr->ydy; in hid_pointer_sync()
220 next->dz = 0; in hid_pointer_sync()
221 next->buttons_state = curr->buttons_state; in hid_pointer_sync()
223 hs->n++; in hid_pointer_sync()
224 hs->event(hs); in hid_pointer_sync()
234 InputKeyEvent *key = evt->u.key.data; in hid_keyboard_event()
236 count = qemu_input_key_value_to_scancode(key->key, in hid_keyboard_event()
237 key->down, in hid_keyboard_event()
239 if (hs->n + count > QUEUE_LENGTH) { in hid_keyboard_event()
244 slot = (hs->head + hs->n) & QUEUE_MASK; hs->n++; in hid_keyboard_event()
245 hs->kbd.keycodes[slot] = scancodes[i]; in hid_keyboard_event()
247 hs->event(hs); in hid_keyboard_event()
255 if (hs->n == 0) { in hid_keyboard_process_keycode()
258 slot = hs->head & QUEUE_MASK; QUEUE_INCR(hs->head); hs->n--; in hid_keyboard_process_keycode()
259 keycode = hs->kbd.keycodes[slot]; in hid_keyboard_process_keycode()
261 if (!hs->n) { in hid_keyboard_process_keycode()
266 index = key | ((hs->kbd.modifiers & (1 << 8)) >> 1); in hid_keyboard_process_keycode()
268 hs->kbd.modifiers &= ~(1 << 8); in hid_keyboard_process_keycode()
276 if (hs->kbd.modifiers & (1 << 9)) { in hid_keyboard_process_keycode()
282 hs->kbd.modifiers ^= (1 << 8) | (1 << 9); in hid_keyboard_process_keycode()
290 if (keycode & (1 << 7)) { in hid_keyboard_process_keycode()
291 hs->kbd.modifiers &= ~(1 << (hid_code & 0x0f)); in hid_keyboard_process_keycode()
296 /* USB modifiers are just 1 byte long. Bits 8 and 9 of in hid_keyboard_process_keycode()
297 * hs->kbd.modifiers implement a state machine that detects the in hid_keyboard_process_keycode()
302 hs->kbd.modifiers |= 1 << (hid_code & 0x0f); in hid_keyboard_process_keycode()
312 if (keycode & (1 << 7)) { in hid_keyboard_process_keycode()
313 for (i = hs->kbd.keys - 1; i >= 0; i--) { in hid_keyboard_process_keycode()
314 if (hs->kbd.key[i] == hid_code) { in hid_keyboard_process_keycode()
315 hs->kbd.key[i] = hs->kbd.key[-- hs->kbd.keys]; in hid_keyboard_process_keycode()
316 hs->kbd.key[hs->kbd.keys] = 0x00; in hid_keyboard_process_keycode()
324 for (i = hs->kbd.keys - 1; i >= 0; i--) { in hid_keyboard_process_keycode()
325 if (hs->kbd.key[i] == hid_code) { in hid_keyboard_process_keycode()
330 if (hs->kbd.keys < sizeof(hs->kbd.key)) { in hid_keyboard_process_keycode()
331 hs->kbd.key[hs->kbd.keys++] = hid_code; in hid_keyboard_process_keycode()
352 if (!hs->ptr.mouse_grabbed) { in hid_pointer_activate()
353 qemu_input_handler_activate(hs->s); in hid_pointer_activate()
354 hs->ptr.mouse_grabbed = 1; in hid_pointer_activate()
364 hs->idle_pending = false; in hid_pointer_poll()
370 index = (hs->n ? hs->head : hs->head - 1); in hid_pointer_poll()
371 e = &hs->ptr.queue[index & QUEUE_MASK]; in hid_pointer_poll()
373 if (hs->kind == HID_MOUSE) { in hid_pointer_poll()
374 dx = int_clamp(e->xdx, -127, 127); in hid_pointer_poll()
375 dy = int_clamp(e->ydy, -127, 127); in hid_pointer_poll()
376 e->xdx -= dx; in hid_pointer_poll()
377 e->ydy -= dy; in hid_pointer_poll()
379 dx = e->xdx; in hid_pointer_poll()
380 dy = e->ydy; in hid_pointer_poll()
382 dz = int_clamp(e->dz, -127, 127); in hid_pointer_poll()
383 e->dz -= dz; in hid_pointer_poll()
385 if (hs->n && in hid_pointer_poll()
386 !e->dz && in hid_pointer_poll()
387 (hs->kind == HID_TABLET || (!e->xdx && !e->ydy))) { in hid_pointer_poll()
389 QUEUE_INCR(hs->head); in hid_pointer_poll()
390 hs->n--; in hid_pointer_poll()
394 dz = 0 - dz; in hid_pointer_poll()
396 switch (hs->kind) { in hid_pointer_poll()
399 buf[l++] = e->buttons_state; in hid_pointer_poll()
414 buf[l++] = e->buttons_state; in hid_pointer_poll()
442 hs->idle_pending = false; in hid_keyboard_poll()
450 buf[0] = hs->kbd.modifiers & 0xff; in hid_keyboard_poll()
451 buf[1] = 0; in hid_keyboard_poll()
452 if (hs->kbd.keys > 6) { in hid_keyboard_poll()
453 memset(buf + 2, HID_USAGE_ERROR_ROLLOVER, MIN(8, len) - 2); in hid_keyboard_poll()
455 memcpy(buf + 2, hs->kbd.key, MIN(8, len) - 2); in hid_keyboard_poll()
465 /* 0x01: Num Lock LED in hid_keyboard_write()
466 * 0x02: Caps Lock LED in hid_keyboard_write()
467 * 0x04: Scroll Lock LED in hid_keyboard_write()
468 * 0x08: Compose LED in hid_keyboard_write()
469 * 0x10: Kana LED */ in hid_keyboard_write()
470 hs->kbd.leds = buf[0]; in hid_keyboard_write()
471 if (hs->kbd.leds & 0x04) { in hid_keyboard_write()
474 if (hs->kbd.leds & 0x01) { in hid_keyboard_write()
477 if (hs->kbd.leds & 0x02) { in hid_keyboard_write()
487 switch (hs->kind) { in hid_reset()
489 memset(hs->kbd.keycodes, 0, sizeof(hs->kbd.keycodes)); in hid_reset()
490 memset(hs->kbd.key, 0, sizeof(hs->kbd.key)); in hid_reset()
491 hs->kbd.keys = 0; in hid_reset()
492 hs->kbd.modifiers = 0; in hid_reset()
496 memset(hs->ptr.queue, 0, sizeof(hs->ptr.queue)); in hid_reset()
499 hs->head = 0; in hid_reset()
500 hs->n = 0; in hid_reset()
501 hs->protocol = 1; in hid_reset()
502 hs->idle = 0; in hid_reset()
503 hs->idle_pending = false; in hid_reset()
509 qemu_input_handler_unregister(hs->s); in hid_free()
535 hs->kind = kind; in hid_init()
536 hs->event = event; in hid_init()
538 if (hs->kind == HID_KEYBOARD) { in hid_init()
539 hs->s = qemu_input_handler_register((DeviceState *)hs, in hid_init()
541 qemu_input_handler_activate(hs->s); in hid_init()
542 } else if (hs->kind == HID_MOUSE) { in hid_init()
543 hs->s = qemu_input_handler_register((DeviceState *)hs, in hid_init()
545 } else if (hs->kind == HID_TABLET) { in hid_init()
546 hs->s = qemu_input_handler_register((DeviceState *)hs, in hid_init()
557 if (s->n == QUEUE_LENGTH && (s->kind == HID_TABLET || in hid_post_load()
558 s->kind == HID_MOUSE)) { in hid_post_load()
568 evt = s->ptr.queue[(s->head+s->n) & QUEUE_MASK]; in hid_post_load()
569 if (s->kind == HID_MOUSE) { in hid_post_load()
573 s->ptr.queue[0] = evt; in hid_post_load()
574 s->head = 0; in hid_post_load()
575 s->n = 1; in hid_post_load()
582 .version_id = 1,
583 .minimum_version_id = 1,
595 .version_id = 1,
596 .minimum_version_id = 1,
611 .version_id = 1,
612 .minimum_version_id = 1,