[RFC][PATCH] General axis valuator support

Matt Helsley matt.helsley at gmail.com
Sun Jan 11 19:53:25 PST 2009


On Sun, 2009-01-11 at 19:37 -0800, Matt Helsley wrote:
> Currently X, Y, and PRESSURE are special case axes in xf86-input-evdev.
> This patch supports axes in a more general way. There are a few open
> questions and TODOs:
> 
> TODO:
> 	Add REL axes. Since we currently limit evdev devices to 
> 		exclusively REL or ABS axes we can reuse the same vals 
> 		buffer in the device structure.
> 
> 	In theory there can be more than MAX_VALUATORS axes. Often there
> 		will be less than MAX_VALUATORS axes. This either fails
> 		to fully support a device or wastes a space. Should
> 		probably switch to dynamically-allocated values but this
> 		means we need an UnInit function.
> 
> 	Needs testing. Currently I've only got devices that
> 		support up to three axes. A nice Wacom tablet that
> 		supports tilt might be able to test more axes with
> 		some small testing-specific kernel/X driver hacks.
> 		Any other ideas for testing?
> 
> 	I'd like to move EvdevCacheCompare() above EvdevProbe() -- it
> 		means we can get rid of all but the GRAB ioctls() from
> 		EvdevProbe().
> 
> 	Put back the button-as-ABS_PRESSURE test.
> 
> QUESTIONS:
> 	Is this the only code that needs to test and count bits or can 
> 		we make these pieces common somehow?
> 
> 	There are still locations that special-case X and Y:

I forgot to finish the question here. Should we leave these as special
cases?

> 		1. TOUCHPAD dx, dy calculation
> 		2. Axis-swapping (would require an axis-mapping)
> 		3. Axis-inversion
> 		4. Calibration

<snip>

> 	The swap, scale, inversion, and calibration transforms look like
> 		they are done in the wrong order; we wind up using Y's
> 		min and max to invert X if we've swapped the axes. I'd
> 		think we'd want to swap later if not last...

And here: Am I just not thinking straight about these?

Does X have any layers to handle:
	REL <-> ABS conversion (switch_mode?)
	Axis inversion
	Other valuator transforms (e.g. calibration?)
	Axis mapping/swapping

in a more driver-agnostic way than using evdev-specific mechanisms? Also
I'd like to know how the calibration bits are meant to work. Can I get
any pointers to documentation/code on these parts?

Thanks!

Cheers,
	-Matt Helsley




More information about the xorg mailing list