Commit Graph

556 Commits

Author SHA1 Message Date
Cyril Brulebois
0075da20d6 configure.ac: Fix udev/libudev dependency.
In 683a55e504, a dependency on libudev was
added, but documented in configure.ac as a dependency on udev (which
also happens to ship a pkg-config file).

Signed-off-by: Cyril Brulebois <kibi@debian.org>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2012-01-03 08:40:02 +10:00
Jeremy Huddleston
009ac94a8e Remove redundant redeclaration of Evdev3BEmuPreInit
Found-by: Tinderbox
Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com>
2011-12-31 21:28:53 -05:00
Cyril Brulebois
4b76d80e93 evdev 2.6.99.901
Signed-off-by: Cyril Brulebois <kibi@debian.org>
xf86-input-evdev-2.6.99.901
2011-12-31 18:38:30 +01:00
Peter Hutterer
6dd6f2d3c6 Require xserver 1.12 RC1
Remove the ABI check hack, just check for the server version directly now
that we have one that definitely has the multitouch APIs.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2011-12-29 10:37:38 +10:00
Peter Hutterer
0c7c087f77 Test for mtdev before assuming multitouch
If the XI2.2 headers are present but mtdev isn't, build without MULTITOUCH
defined.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2011-12-29 10:19:48 +10:00
Peter Hutterer
ba9377c6d9 Remove need for --enable-multitouch
If we spot inputproto 2.1.99.3, we assume we have a capable X server. This
should really be a server version check, but the server version hasn't been
bumped yet.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2011-12-24 12:49:18 +10:00
Peter Hutterer
7f7606fc46 Include config.h from evdev.h
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2011-12-24 12:49:18 +10:00
Peter Hutterer
0ba58f483e Always include mt_mask in the evdev struct
Even if MT support isn't available, include it in the build. The checks in
the code check whether mt_mask is non-NULL but they would all need ifdef
escaping otherwise.

Leave the mtdev part inside the ifdef however, so that we don't need the
mtdev header if we don't build with multitouch.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2011-12-24 12:18:16 +10:00
Peter Hutterer
5fb4875747 Merge branch 'multitouch' 2011-12-23 08:16:54 +10:00
Peter Hutterer
e99ab2314f Don't count legacy and MT axes twice
The kernel exports both ABS_X and ABS_MT_POSITION_X (and a couple others)
for a multi-touch capable device. For such devices, only count the axis once
since we submit ABS_MT_POSITION_X through ABS_X.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2011-12-20 15:11:56 +10:00
Peter Hutterer
191660189a Add is_blacklisted_axis() helper
The kernel exports a bunch of information as axis that shouldn't be an axis
and we don't treat it as axis in the server. Add this helper instead of
checking for the axis codes manually.

No function change.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2011-12-20 14:18:30 +10:00
Peter Hutterer
a1c3f8efbb Drop now-unnecessary XI 2.1 and XI 2.2 error suppression defines
Gone since inputproto 2.1.99.3

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2011-12-20 13:32:06 +10:00
Peter Hutterer
f3c628acc4 Map ABS_MT_POSITION_X/Y into ABS_X/Y
MT axes are the same as traditional axes, so one into the other so we get
x/y coordinates regardless wich axes it comes from.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2011-12-20 11:09:37 +10:00
Paulo Zanoni
7909975b0b Fix relative events with swapped axes
After we swap the axes, we only call valuator_mask_set for axes that are
not zero, so we need to unset the axes that became zero when swapped.

Signed-off-by: Paulo Zanoni <paulo.r.zanoni@intel.com>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2011-12-16 16:09:16 +10:00
Paulo Zanoni
8d6dfd13b0 Fix absolute events with swapped axes
We were correctly swapping the valuator values, but we were not
calling valuator_mask_unset() when needed, so the cursor kept jumping
to the edges.

This patch does the swapping before the main "for", so we don't need to
store unswapped_{x,y} and unswapped_isset_{x,y} even when we don't need
to swap.

Signed-off-by: Paulo Zanoni <paulo.r.zanoni@intel.com>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2011-12-15 14:58:59 +10:00
Peter Hutterer
fed454192d Use xf86InitValuatorAxisStruct, the touch-specific version was dropped
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2011-12-15 08:55:32 +10:00
Chase Douglas
cf93a21df1 Don't send pointer events for multitouch touchscreen devices
Pointer events will be emulated by the server.

Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
2011-11-29 18:02:58 -08:00
Peter Hutterer
fac1a41c75 Add the required defines to compile against the inputproto
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2011-11-11 15:57:26 +10:00
Peter Hutterer
3175a2a96d Print to the log if we find multitouch axes.
No real effect on the code, but it helps to have that line in the log when
searching for driver issues.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2011-11-11 15:50:36 +10:00
Peter Hutterer
5e9b027807 Replace 0/1 button values with enums
BUTTON_PRESS is much harder to confuse with a button number than a simple 1.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2011-11-11 15:50:36 +10:00
Peter Hutterer
2ce305129c Skip event posting for empty slots.
ABS_MT_SLOT comes before any other events. The following order of events
is common for protocol B devices (and mtdev):

...
EV_SYN
ABS_MT_SLOT        → posting here means we miss on the position information
ABS_MT_POSITION_X
ABS_MT_POSITION_Y
ABS_MT_SLOT
ABS_MT_POSITION_X
ABS_MT_POSITION_Y
EV_SYN

Store the stot state as SLOT_EMPTY after posting an event (i.e. EV_SYN and
ABS_MT_SLOT) and then don't post until the next slot/syn event.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2011-11-11 15:50:36 +10:00
Peter Hutterer
9411749f76 Replace open_slot/close_slot with a SlotState enum
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2011-11-11 15:50:36 +10:00
Peter Hutterer
239e972be1 Simplify a condition, only the event type differs here
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2011-11-11 15:50:36 +10:00
Peter Hutterer
6127923fe0 When resetting the queue, don't reset the touchMask
Otherwise we segfault after the first SYN event

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2011-11-11 15:50:36 +10:00
Peter Hutterer
fc4f98153c MT axes are counted separately, make sure they're initialized too.
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2011-11-11 15:50:36 +10:00
Peter Hutterer
fabee66bcc 0 is the value for "unknown/unlimited" number of touches
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2011-11-11 15:50:36 +10:00
Peter Hutterer
91d90a7959 Use mtdev API to allocate/free mtdev structs
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2011-11-11 15:50:36 +10:00
Peter Hutterer
c1b89bda12 Remove duplicate line
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2011-11-11 15:50:36 +10:00
Chase Douglas
907b7cad3f Ensure touchpad events are always processed with MT
Without this change, an MT touchpad in relative mode could end a touch
while not resetting the oldMask used to calculate relative values. This
fix allows a Magic Trackpad to behave as a relative mode device again.

Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
2011-11-11 15:50:36 +10:00
Chase Douglas
c9a2b4e9ce Use MTDev for multitouch devices
MTDev translates all multitouch devices to the slotted evdev protocol.
This provides a clean and uniform interface and reduces message handling
inside the input module and X.

Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
2011-11-11 15:50:36 +10:00
Chase Douglas
e18abd0049 Add experimental XI 2.1 multitouch support
This multitouch addition only supports slotted MT evdev protocol
devices. Support must be enabled at configure time using
--enable-multitouch.

Signed-off-by: Chase Douglas <chase.douglas@canonical.com>

Amendments: XI_TouchMotion -> XI_TouchUpdate, rename mtMask to mt_mask

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2011-11-11 15:50:06 +10:00
Peter Hutterer
683a55e504 Use a new "Virtual Device" boolean property to mark virtual devices
Use udev to check for the device's sysfs path, if it contains LNXSYSTM it's
a kernel-emulated device. This property can then be used to determine if
there are any real devices connected, allowing the desktop environment to
e.g. turn off the touchpad whenever there's a mouse attached.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2011-11-11 15:42:31 +10:00
Peter Hutterer
a9cdb6590c Move misplaced #endif caused by smooth-scrolling merge
Bad conflict resolution in xf86-input-evdev-2.6.0-30-g745fca0

Reported-by: Sebastian Glita <glseba@yahoo.com>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2011-11-11 07:31:40 +10:00
Peter Hutterer
dd000dd4fa Bump to 2.6.99
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2011-11-09 16:04:06 +10:00
Peter Hutterer
745fca03a2 Merge branch 'smooth-scrolling'
Conflicts:
	src/evdev.c

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2011-11-09 16:01:48 +10:00
Peter Hutterer
b450efdf95 Support smooth scrolling on REL_WHEEL, REL_HWHEEL and REL_DIAL
Automatic smooth scrolling setup for these axes, with REL_WHEEL and REL_DIAL
both mapping into vscrolling. REL_WHEEL is the preferred axis.

Mouse wheel emulation is not yet updated for smooth scrolling.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Daniel Stone <daniel@fooishbar.org>
2011-11-09 15:56:55 +10:00
Peter Hutterer
eede8ccffc Don't crop long value from EvdevBitIsSet.
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
Reviewed-by: Jeremy Huddleston <jeremyhu@apple.com>
2011-11-04 07:47:47 +10:00
Jools Wills
2aba790ed3 emuThird: Use xf86SetIntOption, not xf86SetBoolOption for integer values
Signed-off-by: Jools Wills <jools@oxfordinspire.co.uk>
Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2011-10-31 09:58:49 +10:00
Max Schwarz
49693892ce type-safe inline functions for bitmask manipulation
We can't use BitIsSet/SetBit from the server (inputstr.h) since they
operate on byte arrays. EvdevSetBit is added in preparation for the
"smooth-scrolling on wheel emulation" patch.

Signed-off-by: Max Schwarz <Max@x-quadraht.de>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2011-10-24 16:24:35 +10:00
Peter Hutterer
070f30e089 Exit axis labelling if axes are neither rel nor abs
No actual effect since labels_len is always 0 anyway but let's make the
return more explicit.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2011-08-15 11:34:12 +10:00
Terry Lambert
ffe35b6c25 xf86-input-evdev: Return proper default for unknown values in pInfo->device_control.
Signed-off-by: Terry Lambert <tlambert@chromium.org>
Reviewed-by: Stephane Marchesin <marcheu@chromium.org>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2011-07-18 11:44:24 +10:00
Peter Hutterer
5069e05335 Remove unused misc_label and val
evdev.c: In function 'EvdevInitAxesLabels':
evdev.c:2192:11: warning: variable 'misc_label' set but not used
[-Wunused-but-set-variable]
obsolete with 880ad1e19a

emuWheel.c: In function 'EvdevWheelEmuPreInit':
emuWheel.c:252:10: warning: variable 'val' set but not used
[-Wunused-but-set-variable]
obsolete with b0737bdbd1

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Daniel Stone <daniel@fooishbar.org>
2011-06-15 10:36:36 +10:00
Peter Hutterer
0b9fad23a3 Print abs axes ranges on verbosity 6.
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Daniel Stone <daniel@fooishbar.org>
2011-06-15 10:36:36 +10:00
Peter Hutterer
b79776cf8c Require server 1.10
We require ABI 12.2 in the driver, enforce it through pkg-config.
Technically ABI 12.2 is first available in 1.9.99.902 but 1.10 looks so much
nicer.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Daniel Stone <daniel@fooishbar.org>
2011-06-15 10:36:36 +10:00
Daniel Kurtz
a52cd1cab2 Set prop_product_id undeletable
prop_invert was accidentally being set undeletable twice.

Signed-off-by: Daniel Kurtz <djkurtz@google.com>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2011-06-15 10:36:13 +10:00
Peter Hutterer
eaf202531f Export device node as property.
There is currently no mapping between XI devices and physical devices other
than what can be extracted by parsing the Xorg logfile. Add new property
"Device Node" to the driver to export the open device file.

Server 1.11 and later standardises on this property name.

The client is responsible for detecting if the device is on the same host
and converting the data into a more useful format (e.g. sysfs path).

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2011-05-27 15:32:23 +10:00
Peter Korsgaard
74151b3c52 Handle touchscreens without BTN_TOUCH
Some touchscreens (like the Lumio crystaltouch in single touch mode) send
BTN_LEFT rather than BTN_TOUCH:

Input driver version is 1.0.1
Input device ID: bus 0x3 vendor 0x202e product 0x5 version 0x111
Input device name: "LUMIO Inc LUMIO CrystalTouch ver 1.1C"
Supported events:
  Event type 0 (Sync)
  Event type 1 (Key)
    Event code 272 (LeftBtn)
    Event code 273 (RightBtn)
    Event code 274 (MiddleBtn)
  Event type 2 (Relative)
    Event code 9 (Misc)
  Event type 3 (Absolute)
    Event code 0 (X)
      Value    650
      Min        0
      Max     4095
    Event code 1 (Y)
      Value   3221
      Min        0
      Max     4095
  Event type 4 (Misc)
    Event code 4 (ScanCode)
Testing ... (interrupt to exit)
Event: time 1305882024.934011, type 4 (Misc), code 4 (ScanCode), value 90001
Event: time 1305882024.934017, type 1 (Key), code 272 (LeftBtn), value 1
Event: time 1305882024.934029, type 3 (Absolute), code 0 (X), value 270
Event: time 1305882024.934034, type 3 (Absolute), code 1 (Y), value 1513
Event: time 1305882024.934039, type 2 (Relative), code 9 (Misc), value 1

This causes evdev to handle these device as a mouse rather than a
touchscreen, which naturally doesn't work very well. We already internally
translate BTN_TOUCH as BTN_LEFT, so accept this kind of devices as
touchscreens by checking for devices with BTN_LEFT, absolute X/Y and NO
relative X/Y axes.

Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2011-05-27 15:26:57 +10:00
Peter Hutterer
e9d96e87ac Add a property to toggle function key mode
On some keyboards, the multimedia function keys are overlaid with the F
keys. This property enables clients to switch the primary mode of these F
keys between function keys and multimedia keys.
Some keyboards provide an Fn key to toggle between the modes. This is
hardware-specific and may or may not work on any given keyboard device.

The current imlementation is only hooked up to apple keyboards.
The kernel provides a tweak to enable/disable.

/sys/module/hid_apple/parameters/fnmode
    0 .. keyboard sends Fx keys, Fn disabled
    1 .. keyboard sends multimedia keys, Fn toggles to function keys
    2 .. keyboard sends function keys, Fn toggles to multimedia keys

If fnmode is on 0, we force it to 2.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Michel Dänzer <michel@daenzer.net>
2011-05-27 15:26:57 +10:00
Peter Hutterer
bb15bac149 Export product/vendor ID through a property.
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Daniel Stone <daniel@fooishbar.org>
2011-05-27 15:26:53 +10:00
Peter Hutterer
7611d2fc73 Move invert variable to the block it is used in.
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Daniel Stone <daniel@fooishbar.org>
2011-05-20 13:38:26 +10:00