Bug 17734 - Kinput.c KdEnqueuePointerEvent function problem
Summary: Kinput.c KdEnqueuePointerEvent function problem
Status: RESOLVED FIXED
Alias: None
Product: xorg
Classification: Unclassified
Component: Driver/fbdev (show other bugs)
Version: git
Hardware: ARM All
: medium normal
Assignee: Xorg Project Team
QA Contact: Xorg Project Team
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2008-09-23 02:34 UTC by TylerLi
Modified: 2008-10-09 23:45 UTC (History)
1 user (show)

See Also:
i915 platform:
i915 features:


Attachments
0001-kdrive-fix-dixflags-so-they-re-always-defined-befor.patch (1.69 KB, patch)
2008-10-09 00:02 UTC, Peter Hutterer
no flags Details | Splinter Review

Description TylerLi 2008-09-23 02:34:38 UTC
The KdEnqueuePointerEvent cannot work with tslib driver

I am running the Xfbdev on an ARM platform, using the git source and using this command to config:
./autogen.sh --prefix=/arm1/opt/fdo --disable-ipv6 --enable-tslib --enable-kdrive --enable-xfbdev --disable-glx --disable-xorg --disable-xorgcfg --disable-dri --enable-xcalibrate --enable-screensaver

the screensize is 480x272

Use this command to launch the Xfbdev:
./Xfbdev -mouse tslib,3,device=/dev/input/event0

I add some ErrorF in this function, I click two times on the touchscreen:

ErrorF("%s %s flags=0x%x rx=%d ry=%d LastState=0x%x T=%d\n", 
		__FUNCTION__, pi->name, flags, rx, ry, pi->buttonState, pi->transformCoordinates);
		
ErrorF("x=%d y=%d [%d-%d] dixflags=0x%x buttons=0x%x\n", 
		x, y, pi->dixdev->last.valuators[0], pi->dixdev->last.valuators[1], dixflags, flags);		

Below is the debug log

first click:

KdEnqueuePointerEvent Touchscreen flags=0x1 rx=11 ry=261 LastState=0x0 T=1
x=11 y=261 [0-0] dixflags=0x4 buttons=0x1
type=0x6 x=11 y=261 b=0
type=0x4 x=11 y=261 b=1
KdEnqueuePointerEvent Touchscreen flags=0x0 rx=11 ry=261 LastState=0x1 T=1
x=11 y=261 [11-261] dixflags=0x0 buttons=0x0
type=0x5 x=11 y=261 b=1

Second click:

KdEnqueuePointerEvent Touchscreen flags=0x1 rx=62 ry=222 LastState=0x0 T=1
x=62 y=222 [22-271] dixflags=0x4 buttons=0x1
type=0x6 x=62 y=222 b=0
type=0x4 x=62 y=222 b=1
KdEnqueuePointerEvent Touchscreen flags=0x0 rx=62 ry=222 LastState=0x1 T=1
x=62 y=222 [62-222] dixflags=0x0 buttons=0x0
type=0x5 x=62 y=222 b=1

the problem is the last.valuators have wrong values.

On the ButtonPress event, the last.valuators store the X/Y postion value, however, on the ButtonRelease event, it adds the old X/Y postion value. this causes the second click has
wrong [22-271] value
Comment 1 Peter Hutterer 2008-10-09 00:02:11 UTC
Created attachment 19515 [details] [review]
0001-kdrive-fix-dixflags-so-they-re-always-defined-befor.patch

This patch should fix the issue (untested though)

If absolute events were posted, dixflags got set conditionally on whether the
valuators are different from the last posted set of values. If dixflags are undefined however, the DIX interprets them as relative valuators. Fix this by making sure defining dixflags is always defined.
Comment 2 Peter Hutterer 2008-10-09 23:45:55 UTC
pushed as 18cdd733ad3dd36fa0a23dfbf18c7d99b86c0276.


Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.