[SLUG] Microtouch USB touch screen X/Y axis swapped
I just got some LCD touch screens in for a customer and unfortunately I didn't get the serial ones I was expecting, instead I have the USB ones. It's pretty cool how it works, just plug it in and start moving your finger round the display and it just works - Fedora Core 5. Only thing is the Axis are swapped around and it needs some sort of calibration. What I want to know is where to start looking to fix it. It appears that somehow the mtouchusb kernel module loads and this creates some stuff under /dev/input which ends up working in parrallel with the PS/2 mouse I already have plugged in. If somebody could explain how this multiple input stuff works, and can be configured, that would be useful too. The answer may possibly be in configuration of these bits. Kernels 2.6.15-1.2054_FC5 (standard) and 2.6.18-1.2200.fc5 (most recent update) make no difference. xorg-x11-server-Xorg-1.0.1-8, xorg-x11-drv-microtouch-1.0.0.5-1.2, xorg-x11-drv-mouse-1.0.4-1 are installed. The man page for the xorg microtouch driver is next to empty, says it needs to be written. If somebody has their Xorg source unpacked maybe see if there's anything more useful there but I doubt it. For the serial version I used the xorg 'microtouch' driver, this USB one works without modifying the xorg.conf file. I would be happy to modify the xorg.conf file if the USB version could be coaxed into looking like a serial port. cat /proc/bus/input/devices gives I: Bus=0003 Vendor=0596 Product=0001 Version=0400 N: Name="3M 3M USB Touchscreen - EX II" P: Phys=/input0 S: Sysfs=/class/input/input3 H: Handlers=mouse1 event3 B: EV=b B: KEY=400 0 0 0 0 0 0 0 0 0 0 B: ABS=3 lsusb -v gives Bus 001 Device 002: ID 0596:0001 MicroTouch Systems, Inc. Touchscreen Device Descriptor: bLength18 bDescriptorType 1 bcdUSB 1.10 bDeviceClass0 (Defined at Interface level) bDeviceSubClass 0 bDeviceProtocol 0 bMaxPacketSize064 idVendor 0x0596 MicroTouch Systems, Inc. idProduct 0x0001 Touchscreen bcdDevice4.00 iManufacturer 1 3M iProduct2 3M USB Touchscreen - EX II iSerial 0 bNumConfigurations 1 Configuration Descriptor: bLength 9 bDescriptorType 2 wTotalLength 25 bNumInterfaces 1 bConfigurationValue 1 iConfiguration 0 bmAttributes 0xe0 Self Powered Remote Wakeup MaxPower 100mA Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber0 bAlternateSetting 0 bNumEndpoints 1 bInterfaceClass 255 Vendor Specific Class bInterfaceSubClass 0 bInterfaceProtocol 0 iInterface 0 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x81 EP 1 IN bmAttributes3 Transfer TypeInterrupt Synch Type None Usage Type Data wMaxPacketSize 0x0020 1x 32 bytes bInterval 2 -- -- Grant Parnell - senior LPIC-1 certified consultant Linux User #281066 at http://counter.li.org (Linux Counter) EverythingLinux services - the consultant's backup & tech support. Web: http://www.everythinglinux.com.au/support.php We're also busybits.com.au and linuxhelp.com.au and elx.com.au. Phone 02 8756 3522 to book service or discuss your needs. ELX or its employees participate in the following:- OSIA (Open Source Industry Australia) - http://www.osia.net.au AUUG (Australian Unix Users Group) - http://www.auug.org.au SLUG (Sydney Linux Users Group) - http://www.slug.org.au LA (Linux Australia) - http://www.linux.org.au -- SLUG - Sydney Linux User's Group Mailing List - http://slug.org.au/ Subscription info and FAQs: http://slug.org.au/faq/mailinglists.html
Re: [SLUG] Microtouch USB touch screen X/Y axis swapped
Grant Parnell - EverythingLinux wrote: For the serial version I used the xorg 'microtouch' driver, this USB one works without modifying the xorg.conf file. I would be happy to modify the xorg.conf file if the USB version could be coaxed into looking like a serial port. At a guess the USB panel is being picked up by the kernel input layer and mixed in with all the other mice-like pointers to appear at /dev/input/mice. Since /dev/input/mice is already mentioned in your /etc/X11/xorg.conf you're seeing it just work. Based on the USB IDs you should have a mtouchusb kernel module loaded. cat /proc/bus/input/devices gives I: Bus=0003 Vendor=0596 Product=0001 Version=0400 N: Name="3M 3M USB Touchscreen - EX II" P: Phys=/input0 S: Sysfs=/class/input/input3 H: Handlers=mouse1 event3 B: EV=b B: KEY=400 0 0 0 0 0 0 0 0 0 0 B: ABS=3 Yep, that "Handlers=mouse1 event3" mean that it's being mixed into /dev/input/mice. That swapped axis shouldn't be happening. Pull the kernel source for drivers/usb/input/mtouchusb.c and make sure the exact model is listed, as there's a note in there about the Y axis handling that makes me wonder if you don't have hardware with a "feature" corrected. If that still sucks you'll need to swap the axises in X11 as the input layer doesn't allow such niceness. Hope this is somewhat helpful, Glen -- SLUG - Sydney Linux User's Group Mailing List - http://slug.org.au/ Subscription info and FAQs: http://slug.org.au/faq/mailinglists.html
Re: [SLUG] Microtouch USB touch screen X/Y axis swapped
On Tue, Oct 24, 2006 at 03:33:33PM +0930, Glen Turner wrote: > If that still sucks you'll need to swap the axises in X11 as > the input layer doesn't allow such niceness. I've found the evtest program (download latest from) http://linuxconsole.cvs.sourceforge.net/linuxconsole/ruby/utils/evtest.c?view=log very useful in tracking down X/Y problems with input drivers. -i -- SLUG - Sydney Linux User's Group Mailing List - http://slug.org.au/ Subscription info and FAQs: http://slug.org.au/faq/mailinglists.html
Re: [SLUG] Microtouch USB touch screen X/Y axis swapped
Just following up with more info. It seems there's been a fair bit of consolidating & work in this area in the kernel modules between 2.6.15 and 2.6.18. In 2.6.15 the module was mtouchusb and this and others have been merged into a more generic one called usbtouchscreen kernel/drivers/usb/input/ is where they are. The good news is there is in fact a swap_xy parameter in the stock 2.6.18 kernel module and it works. The bad news is that my x and y direction is opposite to what it should be. IE move your finger left, the pointer goes right. So I added 2 more module parameters invert_x and invert_y and recompiled the module but for some reason the module isn't behaving... it's my day off so I've yet to discover whether it's my module build process or the modification I've done (ie can't test remotely). The module does load but when Xorg tries to talk to /dev/input/mouse1 it gets an open error. There seems to be some heated debate about where the calibration should happen as well. In the RS232 version it was in the xorg.conf file. Any tips on inverting X and Y and scaling them in the xorg.conf file appreciated. On Tue, October 24, 2006 2:51 pm, Grant Parnell - EverythingLinux wrote: > I just got some LCD touch screens in for a customer and unfortunately I > didn't get the serial ones I was expecting, instead I have the USB ones. > > It's pretty cool how it works, just plug it in and start moving your > finger round the display and it just works - Fedora Core 5. Only thing is > the Axis are swapped around and it needs some sort of calibration. > > What I want to know is where to start looking to fix it. It appears that > somehow the mtouchusb kernel module loads and this creates some stuff > under /dev/input which ends up working in parrallel with the PS/2 mouse I > already have plugged in. If somebody could explain how this multiple input > stuff works, and can be configured, that would be useful too. The answer > may possibly be in configuration of these bits. > > Kernels 2.6.15-1.2054_FC5 (standard) and 2.6.18-1.2200.fc5 (most recent > update) make no difference. xorg-x11-server-Xorg-1.0.1-8, > xorg-x11-drv-microtouch-1.0.0.5-1.2, xorg-x11-drv-mouse-1.0.4-1 are > installed. The man page for the xorg microtouch driver is next to empty, > says it needs to be written. If somebody has their Xorg source unpacked > maybe see if there's anything more useful there but I doubt it. > > For the serial version I used the xorg > 'microtouch' driver, this USB one works without modifying the xorg.conf > file. I would be happy to modify the xorg.conf file if the USB version > could be coaxed into looking like a serial port. > > cat /proc/bus/input/devices gives > I: Bus=0003 Vendor=0596 Product=0001 Version=0400 > N: Name="3M 3M USB Touchscreen - EX II" > P: Phys=/input0 > S: Sysfs=/class/input/input3 > H: Handlers=mouse1 event3 > B: EV=b > B: KEY=400 0 0 0 0 0 0 0 0 0 0 > B: ABS=3 > > lsusb -v gives > Bus 001 Device 002: ID 0596:0001 MicroTouch Systems, Inc. Touchscreen > Device Descriptor: >bLength18 >bDescriptorType 1 >bcdUSB 1.10 >bDeviceClass0 (Defined at Interface level) >bDeviceSubClass 0 >bDeviceProtocol 0 >bMaxPacketSize064 >idVendor 0x0596 MicroTouch Systems, Inc. >idProduct 0x0001 Touchscreen >bcdDevice4.00 >iManufacturer 1 3M >iProduct2 3M USB Touchscreen - EX II >iSerial 0 >bNumConfigurations 1 >Configuration Descriptor: > bLength 9 > bDescriptorType 2 > wTotalLength 25 > bNumInterfaces 1 > bConfigurationValue 1 > iConfiguration 0 > bmAttributes 0xe0 >Self Powered >Remote Wakeup > MaxPower 100mA > Interface Descriptor: >bLength 9 >bDescriptorType 4 >bInterfaceNumber0 >bAlternateSetting 0 >bNumEndpoints 1 >bInterfaceClass 255 Vendor Specific Class >bInterfaceSubClass 0 >bInterfaceProtocol 0 >iInterface 0 >Endpoint Descriptor: > bLength 7 > bDescriptorType 5 > bEndpointAddress 0x81 EP 1 IN > bmAttributes3 >Transfer TypeInterrupt >Synch Type None >Usage Type Data > wMaxPacketSize 0x0020 1x 32 bytes > bInterval 2 > > > -- > -- > Grant Parnell - senior LPIC-1 certified consultant > Linux User #281066 at http://counter.li.org (Linux Counter) > EverythingLinux services - the consultant's backup & tech support. > Web: http://www.everythinglinux.com.au/support.php > We're also busybits.com.au and linuxhelp.com.au and elx.com.au. >