By setting an 'evdev_dispatch' struct in 'evdev_input_device' during device configuration the 'process' function in the associated interface will be called with received input events. If none is set, a fallback handler will be set instead that handle generic input functionality. Signed-off-by: Jonas Ådahl <jadahl@gmail.com>dev
parent
d6ad122d9a
commit
4136d82760
@ -0,0 +1,103 @@ |
|||||||
|
/*
|
||||||
|
* Copyright © 2012 Intel Corporation |
||||||
|
* |
||||||
|
* Permission to use, copy, modify, distribute, and sell this software and |
||||||
|
* its documentation for any purpose is hereby granted without fee, provided |
||||||
|
* that the above copyright notice appear in all copies and that both that |
||||||
|
* copyright notice and this permission notice appear in supporting |
||||||
|
* documentation, and that the name of the copyright holders not be used in |
||||||
|
* advertising or publicity pertaining to distribution of the software |
||||||
|
* without specific, written prior permission. The copyright holders make |
||||||
|
* no representations about the suitability of this software for any |
||||||
|
* purpose. It is provided "as is" without express or implied warranty. |
||||||
|
* |
||||||
|
* THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS |
||||||
|
* SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND |
||||||
|
* FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY |
||||||
|
* SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER |
||||||
|
* RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF |
||||||
|
* CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN |
||||||
|
* CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
||||||
|
*/ |
||||||
|
|
||||||
|
#ifndef EVDEV_PRIVATE_H |
||||||
|
#define EVDEV_PRIVATE_H |
||||||
|
|
||||||
|
#include <linux/input.h> |
||||||
|
#include <wayland-util.h> |
||||||
|
|
||||||
|
struct evdev_seat { |
||||||
|
struct weston_seat base; |
||||||
|
struct wl_list devices_list; |
||||||
|
struct udev_monitor *udev_monitor; |
||||||
|
struct wl_event_source *udev_monitor_source; |
||||||
|
char *seat_id; |
||||||
|
}; |
||||||
|
|
||||||
|
#define MAX_SLOTS 16 |
||||||
|
|
||||||
|
struct evdev_input_device { |
||||||
|
struct evdev_seat *master; |
||||||
|
struct wl_list link; |
||||||
|
struct wl_event_source *source; |
||||||
|
struct weston_output *output; |
||||||
|
struct evdev_dispatch *dispatch; |
||||||
|
char *devnode; |
||||||
|
int fd; |
||||||
|
struct { |
||||||
|
int min_x, max_x, min_y, max_y; |
||||||
|
int old_x, old_y, reset_x, reset_y; |
||||||
|
int32_t x, y; |
||||||
|
} abs; |
||||||
|
|
||||||
|
struct { |
||||||
|
int slot; |
||||||
|
int32_t x[MAX_SLOTS]; |
||||||
|
int32_t y[MAX_SLOTS]; |
||||||
|
} mt; |
||||||
|
struct mtdev *mtdev; |
||||||
|
|
||||||
|
struct { |
||||||
|
wl_fixed_t dx, dy; |
||||||
|
} rel; |
||||||
|
|
||||||
|
int type; /* event type flags */ |
||||||
|
|
||||||
|
int is_touchpad, is_mt; |
||||||
|
}; |
||||||
|
|
||||||
|
/* event type flags */ |
||||||
|
#define EVDEV_ABSOLUTE_MOTION (1 << 0) |
||||||
|
#define EVDEV_ABSOLUTE_MT_DOWN (1 << 1) |
||||||
|
#define EVDEV_ABSOLUTE_MT_MOTION (1 << 2) |
||||||
|
#define EVDEV_ABSOLUTE_MT_UP (1 << 3) |
||||||
|
#define EVDEV_RELATIVE_MOTION (1 << 4) |
||||||
|
|
||||||
|
/* copied from udev/extras/input_id/input_id.c */ |
||||||
|
/* we must use this kernel-compatible implementation */ |
||||||
|
#define BITS_PER_LONG (sizeof(unsigned long) * 8) |
||||||
|
#define NBITS(x) ((((x)-1)/BITS_PER_LONG)+1) |
||||||
|
#define OFF(x) ((x)%BITS_PER_LONG) |
||||||
|
#define BIT(x) (1UL<<OFF(x)) |
||||||
|
#define LONG(x) ((x)/BITS_PER_LONG) |
||||||
|
#define TEST_BIT(array, bit) ((array[LONG(bit)] >> OFF(bit)) & 1) |
||||||
|
/* end copied */ |
||||||
|
|
||||||
|
struct evdev_dispatch; |
||||||
|
|
||||||
|
struct evdev_dispatch_interface { |
||||||
|
/* Process an evdev input event. */ |
||||||
|
void (*process)(struct evdev_dispatch *dispatch, |
||||||
|
struct evdev_input_device *device, |
||||||
|
struct input_event *event, |
||||||
|
uint32_t time); |
||||||
|
|
||||||
|
/* Destroy an event dispatch handler and free all its resources. */ |
||||||
|
void (*destroy)(struct evdev_dispatch *dispatch); |
||||||
|
}; |
||||||
|
|
||||||
|
struct evdev_dispatch { |
||||||
|
struct evdev_dispatch_interface *interface; |
||||||
|
}; |
||||||
|
|
||||||
|
#endif /* EVDEV_PRIVATE_H */ |
Loading…
Reference in new issue