# [SOLVED] Configuration problem with eTurboTouch touchscreen

## echinuz

I'm having trouble configuration an eTurboTouch touchscreen on an Intel Classmate PC.  At the moment, the touchscreen is registering events (it moves the mouse), but it is miscalibrated.  At the very least, I need to swap the axes and most likely need to change the x and y ranges.  For some info,

```
stuff
```

```

$ uname -a

Linux mycomputer 2.6.36-tuxonice-r2 #2 SMP Wed Dec 15 21:10:28 MST 2010 i686 Intel(R) Atom(TM) CPU N450 @ 1.66GHz GenuineIntel GNU/Linux

```

```

# xinput --list --long

â¡ Virtual core pointer                        id=2    [master pointer  (3)]

        Reporting 3 classes:

                Class originated from: 6

                Buttons supported: 10

                Button labels: None None None None None None None None None None

                Button state:

                Class originated from: 6

                Detail for Valuator 0:

                  Label: None

                  Range: -1.000000 - -1.000000

                  Resolution: 1 units/m

                  Mode: relative

                Class originated from: 6

                Detail for Valuator 1:

                  Label: None

                  Range: -1.000000 - -1.000000

                  Resolution: 1 units/m

                  Mode: relative

â   â³ Virtual core XTEST pointer                    id=4    [slave  pointer  (2)]

        Reporting 3 classes:

                Class originated from: 4

                Buttons supported: 10

                Button labels: Button Left Button Middle Button Right Button Wheel Up Button Wheel Down Button Horiz Wheel Left Button Horiz Wheel Right None None None

                Button state:

                Class originated from: 4

                Detail for Valuator 0:

                  Label: Rel X

                  Range: -1.000000 - -1.000000

                  Resolution: 0 units/m

                  Mode: relative

                Class originated from: 4

                Detail for Valuator 1:

                  Label: Rel Y

                  Range: -1.000000 - -1.000000

                  Resolution: 0 units/m

                  Mode: relative

â   â³ <default pointer>                             id=6    [slave  pointer  (2)]

        Reporting 3 classes:

                Class originated from: 6

                Buttons supported: 9

                Button labels: None None None None None None None None None

                Button state:

                Class originated from: 6

                Detail for Valuator 0:

                  Label: None

                  Range: -1.000000 - -1.000000

                  Resolution: 1 units/m

                  Mode: relative

                Class originated from: 6

                Detail for Valuator 1:

                  Label: None

                  Range: -1.000000 - -1.000000

                  Resolution: 1 units/m

                  Mode: relative

â£ Virtual core keyboard                       id=3    [master keyboard (2)]

        Reporting 1 classes:

                Class originated from: 7

                Keycodes supported: 248

    â³ Virtual core XTEST keyboard                     id=5    [slave  keyboard (3)]

        Reporting 1 classes:

                Class originated from: 5

                Keycodes supported: 248

    â³ <default keyboard>                              id=7    [slave  keyboard (3)]

        Reporting 1 classes:

                Class originated from: 7

                Keycodes supported: 248

```

```
#  lshal

...

udi = '/org/freedesktop/Hal/devices/usb_device_22b9_6_noserial'

  info.linux.driver = 'usb'  (string)

  info.parent = '/org/freedesktop/Hal/devices/usb_device_1d6b_1_0000_00_1d_1'  (string)

  info.product = 'eTurboTouch'  (string)

  info.subsystem = 'usb_device'  (string)

  info.udi = '/org/freedesktop/Hal/devices/usb_device_22b9_6_noserial'  (string)

  info.vendor = 'eTurboTouch Technology, Inc.'  (string)

  linux.device_file = '/dev/bus/usb/003/002'  (string)

  linux.hotplug_type = 2  (0x2)  (int)

  linux.subsystem = 'usb'  (string)

  linux.sysfs_path = '/sys/devices/pci0000:00/0000:00:1d.1/usb3/3-1'  (string)

  usb_device.bus_number = 3  (0x3)  (int)

  usb_device.can_wake_up = true  (bool)

  usb_device.configuration_value = 1  (0x1)  (int)

  usb_device.device_class = 0  (0x0)  (int)

  usb_device.device_protocol = 0  (0x0)  (int)

  usb_device.device_revision_bcd = 0  (0x0)  (int)

  usb_device.device_subclass = 0  (0x0)  (int)

  usb_device.is_self_powered = false  (bool)

  usb_device.linux.device_number = 2  (0x2)  (int)

  usb_device.linux.sysfs_path = '/sys/devices/pci0000:00/0000:00:1d.1/usb3/3-1'  (string)

  usb_device.max_power = 100  (0x64)  (int)

  usb_device.num_configurations = 1  (0x1)  (int)

  usb_device.num_interfaces = 1  (0x1)  (int)

  usb_device.num_ports = 0  (0x0)  (int)

  usb_device.product = 'eTurboTouch'  (string)

  usb_device.product_id = 6  (0x6)  (int)

  usb_device.speed = 12.0 (12) (double)

  usb_device.vendor = 'eTurboTouch Technology, Inc.'  (string)

  usb_device.vendor_id = 8889  (0x22b9)  (int)

  usb_device.version = 1.1 (1.1) (double)

udi = '/org/freedesktop/Hal/devices/usb_device_22b9_6_noserial_if0'

  info.linux.driver = 'usbhid'  (string)

  info.parent = '/org/freedesktop/Hal/devices/usb_device_22b9_6_noserial'  (string)

  info.product = 'USB HID Interface'  (string)

  info.subsystem = 'usb'  (string)

  info.udi = '/org/freedesktop/Hal/devices/usb_device_22b9_6_noserial_if0'  (string)

  linux.hotplug_type = 2  (0x2)  (int)

  linux.subsystem = 'usb'  (string)

  linux.sysfs_path = '/sys/devices/pci0000:00/0000:00:1d.1/usb3/3-1/3-1:1.0'  (string)

  usb.bus_number = 3  (0x3)  (int)

  usb.can_wake_up = true  (bool)

  usb.configuration_value = 1  (0x1)  (int)

  usb.device_class = 0  (0x0)  (int)

  usb.device_protocol = 0  (0x0)  (int)

  usb.device_revision_bcd = 0  (0x0)  (int)

  usb.device_subclass = 0  (0x0)  (int)

  usb.interface.class = 3  (0x3)  (int)

  usb.interface.number = 0  (0x0)  (int)

  usb.interface.protocol = 0  (0x0)  (int)

  usb.interface.subclass = 0  (0x0)  (int)

  usb.is_self_powered = false  (bool)

  usb.linux.device_number = 2  (0x2)  (int)

  usb.linux.sysfs_path = '/sys/devices/pci0000:00/0000:00:1d.1/usb3/3-1/3-1:1.0'  (string)

  usb.max_power = 100  (0x64)  (int)

  usb.num_configurations = 1  (0x1)  (int)

  usb.num_interfaces = 1  (0x1)  (int)

  usb.num_ports = 0  (0x0)  (int)

  usb.product = 'USB HID Interface'  (string)

  usb.product_id = 6  (0x6)  (int)

  usb.speed = 12.0 (12) (double)

  usb.vendor = 'eTurboTouch Technology, Inc.'  (string)

  usb.vendor_id = 8889  (0x22b9)  (int)

  usb.version = 1.1 (1.1) (double)

udi = '/org/freedesktop/Hal/devices/usb_device_22b9_6_noserial_if0_logicaldev_input_0'

  info.capabilities = {'input', 'input.mouse'} (string list)

  info.category = 'input'  (string)

  info.parent = '/org/freedesktop/Hal/devices/usb_device_22b9_6_noserial_if0'  (string)

  info.product = 'eTurboTouch eTurboTouch'  (string)

  info.subsystem = 'input'  (string)

  info.udi = '/org/freedesktop/Hal/devices/usb_device_22b9_6_noserial_if0_logicaldev_input_0'  (string)

  input.device = '/dev/input/event8'  (string)

  input.originating_device = '/org/freedesktop/Hal/devices/usb_device_22b9_6_noserial_if0'  (string)

  input.product = 'eTurboTouch eTurboTouch'  (string)

  input.x11_driver = 'tslib'  (string)

  input.x11_options.DeviceName = 'touchscreen'  (string)

  input.x11_options.MaxX = '4100'  (string)

  input.x11_options.MaxY = '4100'  (string)

  input.x11_options.MinX = '0'  (string)

  input.x11_options.MinY = '0'  (string)

  input.x11_options.MoveLimit = '15'  (string)

  input.x11_options.ReportingMode = 'Raw'  (string)

  input.x11_options.SwapXY = '1'  (string)

  input.x11_options.TapTimer = '50'  (string)

  input.x11_options.longtouchTimer = '30'  (string)

  linux.device_file = '/dev/input/event8'  (string)

  linux.hotplug_type = 2  (0x2)  (int)

  linux.subsystem = 'input'  (string)

  linux.sysfs_path = '/sys/devices/pci0000:00/0000:00:1d.1/usb3/3-1/3-1:1.0/input/input8/event8'  (string)

udi = '/org/freedesktop/Hal/devices/usb_device_22b9_6_noserial_if0_logicaldev_input'

  info.capabilities = {'input', 'input.touchpad'} (string list)

  info.category = 'input'  (string)

  info.parent = '/org/freedesktop/Hal/devices/usb_device_22b9_6_noserial_if0'  (string)

  info.product = 'eTurboTouch eTurboTouch'  (string)

  info.subsystem = 'input'  (string)

  info.udi = '/org/freedesktop/Hal/devices/usb_device_22b9_6_noserial_if0_logicaldev_input'  (string)

  input.device = '/dev/input/event7'  (string)

  input.originating_device = '/org/freedesktop/Hal/devices/usb_device_22b9_6_noserial_if0'  (string)

  input.product = 'eTurboTouch eTurboTouch'  (string)

  input.x11_driver = 'tslib'  (string)

  input.x11_options.DeviceName = 'touchscreen'  (string)

  input.x11_options.MaxX = '4100'  (string)

  input.x11_options.MaxY = '4100'  (string)

  input.x11_options.MinX = '0'  (string)

  input.x11_options.MinY = '0'  (string)

  input.x11_options.MoveLimit = '15'  (string)

  input.x11_options.ReportingMode = 'Raw'  (string)

  input.x11_options.SwapXY = '1'  (string)

  input.x11_options.TapTimer = '50'  (string)

  input.x11_options.longtouchTimer = '30'  (string)

  linux.device_file = '/dev/input/event7'  (string)

  linux.hotplug_type = 2  (0x2)  (int)

  linux.subsystem = 'input'  (string)

  linux.sysfs_path = '/sys/devices/pci0000:00/0000:00:1d.1/usb3/3-1/3-1:1.0/input/input7/event7'  (string)

...

```

```
$ cat /etc/hal/fdi/policy/touchscreen.fdi 

<?xml version="1.0" encoding="ISO-8859-1"?>

<deviceinfo version="0.2">

<device>

<match key="input.product" contains="eTurboTouch eTurboTouch">

<merge key="input.x11_driver" type="string">tslib</merge>

<merge key="input.x11_options.DeviceName" type="string">touchscreen</merge>

<merge key="input.x11_options.MinX" type="string">0</merge>

<merge key="input.x11_options.MaxX" type="string">4100</merge>

<merge key="input.x11_options.MinY" type="string">0</merge>

<merge key="input.x11_options.MaxY" type="string">4100</merge>

<merge key="input.x11_options.TapTimer" type="string">50</merge>

<merge key="input.x11_options.longtouchTimer" type="string">30</merge>

<merge key="input.x11_options.MoveLimit" type="string">15</merge>

<merge key="input.x11_options.ReportingMode" type="string">Raw</merge>

<merge key="input.x11_options.SwapXY" type="string">1</merge>

</match>

</device>

</deviceinfo>

```

I've tried a few different options such as SwapAxes and SwapXY and none have worked.  Each time, I make a change, I run # /etc/init.d/hald restart.

Thanks for the help.Last edited by echinuz on Fri Jan 21, 2011 5:37 pm; edited 1 time in total

----------

## mikegpitt

I don't know what CMPC hardware revision you are using, but I've only been able to get it working using the old evtouch driver under xorg-1.5...  this was using the 2010 model with the 1024x600 screen.  I haven't had a change to try out the latest hardware bundle with the larger screen using xorg-1.9.

----------

## echinuz

I have the problem solved now.  The default Xorg configuration does not work.  Instead, I have to create my own xorg.conf file and place it in /etc/X11 (autoconfiguration works fine).  Then, modify the ServerLayout section to add the touchscreen by hand.  For example,

```

Section "ServerLayout"

        Identifier     "X.org Configured"

        Screen      0  "Screen0" 0 0

        InputDevice    "Mouse0" "CorePointer"

        InputDevice    "Keyboard0" "CoreKeyboard"

        InputDevice    "TouchScreen" "SendCoreEvents"

EndSection

```

In the InputDevice section of the xorg.conf file, I add the following

```

Section "InputDevice"

        Identifier "TouchScreen"

        Driver "evdev"

        Option "Device" "/dev/input/event8

EndSection

```

Determining that I needed event8 was a little odd.  In the directory, /dev/input/by-id, I have

```

lrwxrwxrwx 1 root root 9 Jan 21 03:21 usb-eTurboTouch_eTurboTouch-event-mouse -> ../event7

lrwxrwxrwx 1 root root 9 Jan 21 03:21 usb-eTurboTouch_eTurboTouch-mouse -> ../mouse2

```

However, event7 is incorrect.  Rather, I simply ran cat on each of the event files until I found the one that output information when I touched the touchscreen.  In my case, this was event8.  At this point, the screen was uncalibrated.  I fixed the axis issue with the following two commands

```

xinput set-prop "TouchScreen" "Evdev Axes Swap" 1 &

xinput set-prop "TouchScreen" "Evdev Axis Inversion" 0 1 &

```

I then added them to my .xinitrc file.

That seems to be it.  In short, the evdev driver works fine, but it does not autoconfigure.  As far as the rest of the calibration, the two commands above give a pretty good solution.  The touchscreen is slightly off, but pretty close.  It may be possible to calibrate it better with xinput.

For reference, I have been working with a CTL 2go Convertible Classmate PC NL2 with the newer 1366x768 screen.

EDIT: I forgot to add, I'm using Xorg server 1.7.7Last edited by echinuz on Fri Jan 21, 2011 6:10 pm; edited 1 time in total

----------

## mikegpitt

Very cool!  I'll need to test things out with a more modern xorg configuration.  Thanks for posting the working config   :Smile: 

----------

