I have a Microtouch Touchscreen (Microtouch FS1012 Excalibur 19-550 r2.0) connected via Serial (ttyS1). Whenever I start X, the pointer is in the middle of the screen. Then when I press anywhere on the screen, the pointer jumps to the left upper corner (0,0) immediately. I have calibrated the screen using touchcal, and the debug output of the driver (line 532 in microtouch.c) prints the (x,y) coordinates to the log correctly. System details: i686-pc-linux-gnu gcc version 4.1.2 (Gentoo 4.1.2 p1.0.2) Linux 2.6.24-gentoo-r8 xorg-server 1.4.2 xf86-input-microtouch 1.2.0
Created attachment 18655 [details] xorg.conf
Created attachment 18656 [details] xev.dump The ouput of xev, when the pointer is dragged all over the screen (notice the '-2,-2' coordinates)
Created attachment 18657 [details] Xorg.0.log The xorg.log of the same session as xev, notice the TouchScreen: ouput contains the correct coordinates.
On Wed, Sep 03, 2008 at 10:26:25AM -0700, bugzilla-daemon@freedesktop.org wrote: > I have a Microtouch Touchscreen (Microtouch FS1012 Excalibur 19-550 r2.0) > connected via Serial (ttyS1). Whenever I start X, the pointer is in the middle > of the screen. Then when I press anywhere on the screen, the pointer jumps to > the left upper corner (0,0) immediately. > > I have calibrated the screen using touchcal, and the debug output of the driver > (line 532 in microtouch.c) prints the (x,y) coordinates to the log correctly. Does Option "ReportingMode" "raw" help?
ping?
[ sorry for the my lack of reply ] Yes, "ReportingMode" "raw" helps, the calibration now leads to a situation where the movement of the pointer correlates to the movement of my finger on the touch screen. However, the y axis is inverted. That is, if I tip the upper leftmost corner, the pointer jumps to the lower leftmost corner. Editing the sourcecode so it does a hardcoded inverting[*] helps, but having an option to do so would be preferable. [*] In microtouch.c, add this line 489. 461 static void 462 ReadInput (LocalDevicePtr local) ... 479 y = WORD_ASSEMBLY (priv->packet[3], priv->packet[4]); 480 481 if (priv->reporting_mode == TS_Scaled) 482 { 483 x = xf86ScaleAxis (x, 0, priv->screen_width, priv->min_x, 484 priv->max_x); 485 y = xf86ScaleAxis (y, 0, priv->screen_height, priv->min_y, 486 priv->max_y); 487 } 488 489 y = 17000 - y; 490 491 xf86XInputSetScreen (local, priv->screen_num, x, y);
Can you please provide a git-formatted patch we can apply to upstream? Having 17000 hardcoded is a pretty bad way to go about it. Maybe you can change that to read some MaxY value (or whatever the driver uses).
Peter, I can look into reading the value from a file. However, I cannot do this right now as the machine the montitor was on is due for some hardware changes.
Created attachment 23155 [details] [review] Nicer patch
Hi, I can confirm this Bug. I attached a better patch, which doesn't use the number 1700 :) I tested it, it works fine with several systems under ubuntu 8.04 and 8.10 greetings Martin
Can you please send your patch to xorg-devel for review. Please add your signoff (git commit -s) and send a git formatted patch (git format-patch HEAD^)
Mass closure: This bug has been untouched for more than six years, and is not obviously still valid. Please reopen this bug or file a new report if you continue to experience issues with current releases.
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.