Date: Wed May 19 08:23:52 EDT 2004 Version: 1.5 This is a really simple HOWTO for the MicroTouch (now 3M) USB Capacitive Touchscreen controller. SUPPORTED HARDWARE: All controllers have the Vendor: 0x0596 & Product: 0x0001 Controller Description Part Number ------------------------------------------------------ USB Capacitive - Pearl Case 14-205 (Discontinued) USB Capacitive - Black Case 14-124 (Discontinued) USB Capacitive - No Case 14-206 (Discontinued) USB Capacitive - Pearl Case EXII-5010UC USB Capacitive - Black Case EXII-5030UC USB Capacitive - No Case EXII-5050UC UNTESTED HARDWARE: Since the same USB components are used in the following controllers, they _may_ work, however, I have not tested them, nor have I been told they work properly. If they have the same vendor and product identifiers as above, the driver will attemt to initialize the controller. Controller Description Part Number ------------------------------------------------------ USB Capacitive - Pearl Case EXII-7010UC USB Capacitive - Black Case EXII-7030UC USB Capacitive - No Case EXII-7050UC USB Resistive - Pearl Case EXII-8010UR USB Resistive - Black Case EXII-8030UR USB Resistive - No Case EXII-8050UR If you test the controllers above, and it works successfully, please notify me along with the output of `lsusb -v` via mail at tejohnson () y a h o o ! c o m KERNEL & X11 CONFIGURATION: 1. Get the latest 2.6 kernel source from http://kernel.org 2. Extract the kernel source 3. Do a 'make menuconfig', and enable the following options in the kernel source: Device Drivers ---> Input device support ---> <*> Event interface [Other options may be added. The "Touchscreen interface" only adds Compaq touchscreen protocol support on /dev/input/ts*, so you may enable if you want however it has no effect on /dev/input/event*, which is what this HOWTO covers.] USB support ---> <*> USB Human Interface Device (full HID) support [*] HID input layer support ... <*> MicroTouch USB Touchscreen Driver [This may be built as a module as well] 4. Finally make & install the kernel, reboot, etc. 5. Once the kernel is installed, and if you plug in the controller, you should see something similar to the following in your 'dmesg' output: drivers/usb/core/usb.c: registered new driver mtouchusb -and- input: MicroTouch Systems, Inc. MicroTouch USB Touchscreen on usb-0000:00:01.3-2.1 6. To see which /dev/input/event to reference, type 'cat /proc/bus/input/devices' and you should see something similar to the following in the output: I: Bus=0003 Vendor=0596 Product=0001 Version=0200 N: Name="MicroTouch Systems, Inc. MicroTouch USB Touchscreen" P: Phys=usb-0000:00:01.3-2.1/input0 H: Handlers=mouse1 event2 B: EV=b B: KEY=400 0 0 0 0 0 0 0 0 0 0 B: ABS=3 [The handler ts1 may appear if you added the Touchscreen interface] 7. Assuming the results are the same, the event handler would be: /dev/input/event2 8. For X, you will need a driver that is capable of reading the Event Interface's absolute data. The generic "mouse" driver will not work since it expects to se relative data. For the X11 driver you can download an excellent precompiled binary (or the source) from: http://www.conan.de/lifebook/lifebook-2.6.html (There are similar install instructions on the link above for the Lifebook B series, but seem to adapt to any touchscreen there is a Linux Input driver for) 9. Install the X11 driver in: /usr/X11R6/lib/modules/input 10. The following is what I use for my XF86Config: (For X 4.3.0) Section "InputDevice" Identifier "touchscreen0" Driver "evtouch" Option "Device" "/dev/input/event3" Option "DeviceName" "touchscreen" Option "MinX" "2300" Option "MinY" "2300" Option "MaxX" "14000" Option "MaxY" "14000" Option "DragTimer" "200" Option "MoveLimit" "600" Option "ReportingMode" "Raw" EndSection Section "ServerLayout" ... InputDevice "touchscreen0" ... EndSection [For additional configuration details, please review the web site referenced above.] 11. Fire up X, and you should be up and running! NOTES: - This particular controller is a rather high resolution device, capable of giving X and Y coordinates from 0 to 16384. Using the exact settings in you XF86Config above might be excessive for other controllers. - The version of this driver in 2.6.5 used the compensated data, rather than the raw data from the controller. It was reporting X and Y coordinates from 0 to 65535. - Calibration is not available at the moment, however, modifications to the Min*/Max* variables in the XF86Config might help for now. - Using something like GPM is not possible at the moment (even 1.20.x) since it is not capable of decoding the absolute data. This will only change if the 'evdev' code is changed within GPM. Given an ioctl needs called to get the abs data, it is hard to tell if the GPM maintainer would include it. - These instructions may be suitable for just about any touchscreen device which use the Linux Input subsystem in the 2.6 Linux Kernel. If anyone else has success with any other device, please let me know! - The following is the 'evtest' output for this device: Input driver version is 1.0.0 Input device ID: bus 0x3 vendor 0x596 product 0x1 version 0x200 Input device name: "MicroTouch Systems, Inc. MicroTouch USB Touchscreen" Supported events: Event type 0 (Reset) Event code 0 (Reset) Event code 1 (Key) Event code 3 (Absolute) Event type 1 (Key) Event code 330 (Touch) Event type 3 (Absolute) Event code 0 (X) Value 0 Min 0 Max 16384 Event code 1 (Y) Value 0 Min 0 Max 16384 If you have an EXII-50XXUC, the device name will be a bit different. - More information about his device on older kernels can be found at: http://www.annet.pl/~anowak/mtouch/ http://www.opensource.ite.pl/download/index.html - If there is anything I am neglecting, or updates are needed to this information, give me a shout at tejohnson () y a h o o ! c o m.