evdev: Apply calibration values to absolute events
Store a set of calibration values per device - these calibration values are just applied to the absolute motion events.
This commit is contained in:
committed by
Kristian Høgsberg
parent
bf33b1cced
commit
ea23b28642
+16
@@ -229,6 +229,21 @@ is_motion_event(struct input_event *e)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
transform_absolute(struct evdev_device *device)
|
||||||
|
{
|
||||||
|
if (!device->abs.apply_calibration)
|
||||||
|
return;
|
||||||
|
|
||||||
|
device->abs.x = device->abs.x * device->abs.calibration[0] +
|
||||||
|
device->abs.y * device->abs.calibration[1] +
|
||||||
|
device->abs.calibration[2];
|
||||||
|
|
||||||
|
device->abs.y = device->abs.x * device->abs.calibration[3] +
|
||||||
|
device->abs.y * device->abs.calibration[4] +
|
||||||
|
device->abs.calibration[5];
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
evdev_flush_motion(struct evdev_device *device, uint32_t time)
|
evdev_flush_motion(struct evdev_device *device, uint32_t time)
|
||||||
{
|
{
|
||||||
@@ -269,6 +284,7 @@ evdev_flush_motion(struct evdev_device *device, uint32_t time)
|
|||||||
device->pending_events &= ~EVDEV_ABSOLUTE_MT_UP;
|
device->pending_events &= ~EVDEV_ABSOLUTE_MT_UP;
|
||||||
}
|
}
|
||||||
if (device->pending_events & EVDEV_ABSOLUTE_MOTION) {
|
if (device->pending_events & EVDEV_ABSOLUTE_MOTION) {
|
||||||
|
transform_absolute(device);
|
||||||
notify_motion(master, time,
|
notify_motion(master, time,
|
||||||
wl_fixed_from_int(device->abs.x),
|
wl_fixed_from_int(device->abs.x),
|
||||||
wl_fixed_from_int(device->abs.y));
|
wl_fixed_from_int(device->abs.y));
|
||||||
|
|||||||
@@ -56,6 +56,9 @@ struct evdev_device {
|
|||||||
struct {
|
struct {
|
||||||
int min_x, max_x, min_y, max_y;
|
int min_x, max_x, min_y, max_y;
|
||||||
int32_t x, y;
|
int32_t x, y;
|
||||||
|
|
||||||
|
int apply_calibration;
|
||||||
|
float calibration[6];
|
||||||
} abs;
|
} abs;
|
||||||
|
|
||||||
struct {
|
struct {
|
||||||
|
|||||||
Reference in New Issue
Block a user