Lines Matching refs:pad
25 #include "evdev-tablet-pad.h"
41 pad_get_buttons_pressed(struct pad_dispatch *pad,
44 struct button_state *state = &pad->button_state;
45 struct button_state *prev_state = &pad->prev_button_state;
53 pad_get_buttons_released(struct pad_dispatch *pad,
56 struct button_state *state = &pad->button_state;
57 struct button_state *prev_state = &pad->prev_button_state;
65 pad_button_is_down(const struct pad_dispatch *pad,
68 return bit_is_set(pad->button_state.bits, button);
72 pad_any_button_down(const struct pad_dispatch *pad)
74 const struct button_state *state = &pad->button_state;
85 pad_button_set_down(struct pad_dispatch *pad,
89 struct button_state *state = &pad->button_state;
93 pad_set_status(pad, PAD_BUTTONS_PRESSED);
96 pad_set_status(pad, PAD_BUTTONS_RELEASED);
101 pad_process_absolute(struct pad_dispatch *pad,
108 pad->changed_axes |= PAD_AXIS_RING1;
109 pad_set_status(pad, PAD_AXES_UPDATED);
112 pad->changed_axes |= PAD_AXIS_RING2;
113 pad_set_status(pad, PAD_AXES_UPDATED);
116 pad->changed_axes |= PAD_AXIS_STRIP1;
117 pad_set_status(pad, PAD_AXES_UPDATED);
120 pad->changed_axes |= PAD_AXIS_STRIP2;
121 pad_set_status(pad, PAD_AXES_UPDATED);
138 pad->have_abs_misc_terminator = true;
179 pad_handle_ring(struct pad_dispatch *pad,
198 pad_handle_strip(struct pad_dispatch *pad,
220 pad_ring_get_mode_group(struct pad_dispatch *pad,
225 list_for_each(group, &pad->modes.mode_group_list, link) {
236 pad_strip_get_mode_group(struct pad_dispatch *pad,
241 list_for_each(group, &pad->modes.mode_group_list, link) {
252 pad_check_notify_axes(struct pad_dispatch *pad,
263 if (pad->have_abs_misc_terminator &&
267 if (pad->changed_axes & PAD_AXIS_RING1) {
268 value = pad_handle_ring(pad, device, ABS_WHEEL);
272 group = pad_ring_get_mode_group(pad, 0);
281 if (pad->changed_axes & PAD_AXIS_RING2) {
282 value = pad_handle_ring(pad, device, ABS_THROTTLE);
286 group = pad_ring_get_mode_group(pad, 1);
295 if (pad->changed_axes & PAD_AXIS_STRIP1) {
296 value = pad_handle_strip(pad, device, ABS_RX);
300 group = pad_strip_get_mode_group(pad, 0);
309 if (pad->changed_axes & PAD_AXIS_STRIP2) {
310 value = pad_handle_strip(pad, device, ABS_RY);
314 group = pad_strip_get_mode_group(pad, 1);
323 pad->changed_axes = PAD_AXIS_NONE;
324 pad->have_abs_misc_terminator = false;
328 pad_process_key(struct pad_dispatch *pad,
340 pad_button_set_down(pad, button, is_press);
344 pad_button_get_mode_group(struct pad_dispatch *pad,
349 list_for_each(group, &pad->modes.mode_group_list, link) {
360 pad_notify_button_mask(struct pad_dispatch *pad,
386 map = pad->button_map[code - 1];
393 group = pad_button_get_mode_group(pad, button);
415 pad_notify_buttons(struct pad_dispatch *pad,
423 pad_get_buttons_pressed(pad, &buttons);
425 pad_get_buttons_released(pad, &buttons);
427 pad_notify_button_mask(pad, device, time, &buttons, state);
433 struct pad_dispatch *pad = (struct pad_dispatch*)device->dispatch;
438 if (pad_any_button_down(pad))
445 pad_flush(struct pad_dispatch *pad,
449 if (pad_has_status(pad, PAD_AXES_UPDATED)) {
450 pad_check_notify_axes(pad, device, time);
451 pad_unset_status(pad, PAD_AXES_UPDATED);
454 if (pad_has_status(pad, PAD_BUTTONS_RELEASED)) {
455 pad_notify_buttons(pad,
459 pad_unset_status(pad, PAD_BUTTONS_RELEASED);
464 if (pad_has_status(pad, PAD_BUTTONS_PRESSED)) {
465 pad_notify_buttons(pad,
469 pad_unset_status(pad, PAD_BUTTONS_PRESSED);
473 memcpy(&pad->prev_button_state,
474 &pad->button_state,
475 sizeof(pad->button_state));
484 struct pad_dispatch *pad = pad_dispatch(dispatch);
488 pad_process_absolute(pad, device, e, time);
491 pad_process_key(pad, device, e, time);
494 pad_flush(pad, device, time);
513 struct pad_dispatch *pad = pad_dispatch(dispatch);
514 struct libinput *libinput = pad_libinput_context(pad);
518 if (pad_button_is_down(pad, code))
519 pad_button_set_down(pad, code, false);
522 pad_flush(pad, device, libinput_now(libinput));
528 struct pad_dispatch *pad = pad_dispatch(dispatch);
530 pad_destroy_leds(pad);
531 free(pad);
550 pad_init_buttons_from_libwacom(struct pad_dispatch *pad,
555 struct libinput *li = pad_libinput_context(pad);
592 map_set_button_map(pad->button_map[code], map++);
595 pad->nbuttons = map;
608 pad_init_buttons_from_kernel(struct pad_dispatch *pad,
617 map_set_button_map(pad->button_map[code], map++);
622 map_set_button_map(pad->button_map[code], map++);
627 map_set_button_map(pad->button_map[code], map++);
632 map_set_button_map(pad->button_map[code], map++);
635 pad->nbuttons = map;
639 pad_init_keys(struct pad_dispatch *pad, struct evdev_device *device)
653 map_set_key_map(pad->button_map[*code], *code);
658 pad_init_buttons(struct pad_dispatch *pad,
663 for (i = 0; i < ARRAY_LENGTH(pad->button_map); i++)
664 map_init(pad->button_map[i]);
666 if (!pad_init_buttons_from_libwacom(pad, device))
667 pad_init_buttons_from_kernel(pad, device);
669 pad_init_keys(pad, device);
681 pad_init(struct pad_dispatch *pad, struct evdev_device *device)
683 pad->base.dispatch_type = DISPATCH_TABLET_PAD;
684 pad->base.interface = &pad_interface;
685 pad->device = device;
686 pad->status = PAD_NONE;
687 pad->changed_axes = PAD_AXIS_NONE;
689 pad_init_buttons(pad, device);
691 if (pad_init_leds(pad, device) != 0)
708 struct pad_dispatch *pad = (struct pad_dispatch*)evdev->dispatch;
710 if (mode == pad->sendevents.current_mode)
723 pad->sendevents.current_mode = mode;
746 struct pad_dispatch *pad;
748 pad = zalloc(sizeof *pad);
750 if (pad_init(pad, device) != 0) {
751 pad_destroy(&pad->base);
755 device->base.config.sendevents = &pad->sendevents.config;
756 pad->sendevents.current_mode = LIBINPUT_CONFIG_SEND_EVENTS_ENABLED;
757 pad->sendevents.config.get_modes = pad_sendevents_get_modes;
758 pad->sendevents.config.set_mode = pad_sendevents_set_mode;
759 pad->sendevents.config.get_mode = pad_sendevents_get_mode;
760 pad->sendevents.config.get_default_mode = pad_sendevents_get_default_mode;
762 return &pad->base;
777 struct pad_dispatch *pad = (struct pad_dispatch*)device->dispatch;
782 return pad->nbuttons;