HP LD4200tm touchscreen ALMOST works

William Sherman shermanw at indiana.edu
Fri Oct 22 19:00:36 PDT 2010


Hello,

I'm working with an HP LD4200tm touchscreen, and would really
like to use it with a Linux system.

In our first efforts, we were fairly optimistic, because it almost
works right out of the box with no administrator intervention.
Unfortunately, that small delta from almost works to works is enough
to make the system unusable.  So I'm hoping there are some things I
can try that will get us the rest of the way home.

I've collected gobs of data on what udev and X-windows report, but
before I get to any of that, here's the executive summary:

Plugging the HP LD4200tm into a Ubuntu 10.10 system will cause the
device to be recognized, create a usbhid device, create an event device,
activate the evdev driver for Xorg, and put it on the list of X's inputs.
So far, so good.

Touching the device causes the mouse pointer to jump to that location,
even better.

But when I'm touching the screen, what happens is that the system
generates a continuous stream of button presses/releases -- as if
I moved the mouse to a particular location and then went crazy
tapping on the mouse button.  This is the part that makes the system
unusable.

One more data point is that if I touch the screen with a second
finger, the button barrage stops, and it will now gracefully report
the movement of the first finger.

And so I'm hoping there's an option or parameter that can be
adjusted to make everything well -- but I'll be happy if I there
is a new usbhid driver that can be installed to fix things.



So, like I said, I have gobs of data, not sure I want to drown
the list with all of it, so I'll include just a portion of it here.

But first, another couple of data points:

1) Running "evtest /dev/input/event4" reveals that the button barrage
is already occurring at the HID event layer, so I guess I'm already
ruling out that this is directly an Xorg issue, but I still hope
someone on this list can help.

2) Watching the raw data on /dev/usb/hiddev0 does not seem to have
the continuous stream of inputs that would result if it were the
hardware itself causeing the button barrage.

So, I suppose this suggests that the "usbhid" driver is the culprit.


Here's some output from "xinput":
	% xinput list --short 10
	Nexio Touch Device.   HID Multi-Touch           id=10   [slave  pointer 
  (2)]

         % xinput query-state 10
         2 classes :
         ButtonClass
                 button[1]=up
                 button[2]=up
                 button[3]=up
                 button[4]=up
                 button[5]=up
         ValuatorClass Mode=Absolute Proximity=In
                 valuator[0]=104
                 valuator[1]=14133
                 valuator[2]=10663
                 valuator[3]=6661
                 valuator[4]=0
                 valuator[5]=0
                 valuator[6]=0
                 valuator[7]=0
                 valuator[8]=0
                 valuator[9]=0
                 valuator[10]=0

         % xinput list-props 10
         Device 'Nexio Touch Device.   HID Multi-Touch':
                 Device Enabled (121):   1
                 Coordinate Transformation Matrix (123): 1.000000, 
0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 
1.000000
                 Device Accel Profile (240):     0
                 Device Accel Constant Deceleration (241):       1.000000
                 Device Accel Adaptive Deceleration (242):       1.000000
                 Device Accel Velocity Scaling (243):    10.000000
                 Evdev Reopen Attempts (238):    10
                 Evdev Axis Inversion (244):     0, 0
                 Evdev Axis Calibration (245):   <no items>
                 Evdev Axes Swap (246):  0
                 Axis Labels (247):      "Abs X" (257), "Abs Y" (258), 
"Abs Z" (259), "Abs Rotary X" (260), "Abs Rotary Y" (261), "Abs Rotary 
Z" (262), "Abs Throttle" (263), "Abs Rudder" (264), "None" (0), "None" 
(0), "None" (0)
                 Button Labels (248):    "Button Left" (124), "Button 
Middle" (125), "Button Right" (126), "Button Wheel Up" (127), "Button 
Wheel Down" (128)
                 Evdev Middle Button Emulation (249):    2
                 Evdev Middle Button Timeout (250):      50
                 Evdev Wheel Emulation (251):    0
                 Evdev Wheel Emulation Axes (252):       0, 0, 4, 5
                 Evdev Wheel Emulation Inertia (253):    10
                 Evdev Wheel Emulation Timeout (254):    200
                 Evdev Wheel Emulation Button (255):     4
                 Evdev Drag Lock Buttons (256):  0
         % xinput test 10
         motion a[0]=15177 a[1]=5581 a[2]=15479 a[3]=7829 a[4]=0 a[5]=0
         motion a[6]=0 a[7]=0 a[8]=0 a[9]=0 a[10]=0
         button press   1
         button release 1
         button press   1
         button release 1
         button press   1
         button release 1
         button press   1
         button release 1
         button press   1
         button release 1
         button press   1
         button release 1
	[...]

So you can see that at first contact the location of the touch is reported,
but then there is the continual stream of button press/release.
I don't have similar output from xinput from a multi-touch event,
but I do have both types of events as output from "evtest".


Here is the output from "evtest" from a single finger interaction:
	% sudo evtest /dev/input/event4
	Input driver version is 1.0.1
	Input device ID: bus 0x3 vendor 0x1870 product 0x100 version 0x111
	Input device name: "Nexio Touch Device.   HID Multi-Touch"
	Supported events:
	  Event type 0 (Sync)
	  Event type 1 (Key)
	    Event code 272 (LeftBtn)
	    Event code 273 (RightBtn)
	    Event code 274 (MiddleBtn)
	    Event code 320 (ToolPen)
	    Event code 321 (ToolRubber)
	    Event code 322 (ToolBrush)
	    Event code 330 (Touch)
	  Event type 3 (Absolute)
	    Event code 0 (X)
	      Value  15129
	      Min        0
	      Max    16383
	    Event code 1 (Y)
	      Value   6425
	      Min        0
	      Max    16383
	    Event code 2 (Z)
	      Value  14859
	      Min        0
	      Max    16383
	    Event code 3 (Rx)
	      Value   7160
	      Min        0
	      Max    16383
	    Event code 4 (Ry)
	      Value      0
	      Min        0
	      Max    32767
	    Event code 5 (Rz)
	      Value      0
	      Min        0
	      Max    32767
	    Event code 6 (Throttle)
	      Value      0
	      Min        0
	      Max    16383
	    Event code 7 (Rudder)
	      Value      0
	      Min        0
	      Max    16383
	    Event code 40 (Misc)
	      Value      1
	      Min        0
	      Max        1
	    Event code 41 (?)
	      Value      2
	      Min        0
	      Max        1
	    Event code 42 (?)
	      Value      1
	      Min        0
	      Max        2
	  Event type 4 (Misc)
	    Event code 4 (ScanCode)
	Testing ... (interrupt to exit)
	Event: time 1287784276.760109, type 4 (Misc), code 4 (ScanCode), value 
d0042
	Event: time 1287784276.760112, type 1 (Key), code 330 (Touch), value 1
	Event: time 1287784276.760119, type 3 (Absolute), code 0 (X), value 14976
	Event: time 1287784276.760122, type 3 (Absolute), code 1 (Y), value 7291
	Event: time 1287784276.760125, type 4 (Misc), code 4 (ScanCode), value 
d0042
	Event: time 1287784276.760127, type 1 (Key), code 330 (Touch), value 0
	Event: time 1287784276.760130, type 1 (Key), code 321 (ToolRubber), value 1
	Event: time 1287784276.760139, -------------- Report Sync ------------
	Event: time 1287784276.773107, type 4 (Misc), code 4 (ScanCode), value 
d0042
	Event: time 1287784276.773111, type 1 (Key), code 330 (Touch), value 1
	Event: time 1287784276.773117, type 3 (Absolute), code 0 (X), value 14925
	Event: time 1287784276.773120, type 3 (Absolute), code 1 (Y), value 7266
	Event: time 1287784276.773123, type 4 (Misc), code 4 (ScanCode), value 
d0042
	Event: time 1287784276.773124, type 1 (Key), code 330 (Touch), value 0
	Event: time 1287784276.773135, -------------- Report Sync ------------
	Event: time 1287784276.785094, type 4 (Misc), code 4 (ScanCode), value 
d0042
	Event: time 1287784276.785099, type 1 (Key), code 330 (Touch), value 1
	Event: time 1287784276.785105, type 3 (Absolute), code 0 (X), value 14937
	Event: time 1287784276.785108, type 3 (Absolute), code 1 (Y), value 7269
	Event: time 1287784276.785112, type 4 (Misc), code 4 (ScanCode), value 
d0042
	Event: time 1287784276.785113, type 1 (Key), code 330 (Touch), value 0
	Event: time 1287784276.785116, type 1 (Key), code 321 (ToolRubber), value 0
	Event: time 1287784276.785125, -------------- Report Sync ------------
	^C

And here is the output of "evtest" from when I touched the screen with
two fingers:
	% sudo evtest /dev/input/event4
	Input driver version is 1.0.1
	Input device ID: bus 0x3 vendor 0x1870 product 0x100 version 0x111
	Input device name: "Nexio Touch Device.   HID Multi-Touch"
	Supported events:
	  Event type 0 (Sync)
	  Event type 1 (Key)
	    Event code 272 (LeftBtn)
	    Event code 273 (RightBtn)
	    Event code 274 (MiddleBtn)
	    Event code 320 (ToolPen)
	    Event code 321 (ToolRubber)
	    Event code 322 (ToolBrush)
	    Event code 330 (Touch)
	  Event type 3 (Absolute)
	    Event code 0 (X)
	      Value  14937
	      Min        0
	      Max    16383
	    Event code 1 (Y)
	      Value   7269
	      Min        0
	      Max    16383
	    Event code 2 (Z)
	      Value  14859
	      Min        0
	      Max    16383
	    Event code 3 (Rx)
	      Value   7160
	      Min        0
	      Max    16383
	    Event code 4 (Ry)
	      Value      0
	      Min        0
	      Max    32767
	    Event code 5 (Rz)
	      Value      0
	      Min        0
	      Max    32767
	    Event code 6 (Throttle)
	      Value      0
	      Min        0
	      Max    16383
	    Event code 7 (Rudder)
	      Value      0
	      Min        0
	      Max    16383
	    Event code 40 (Misc)
	      Value      1
	      Min        0
	      Max        1
	    Event code 41 (?)
	      Value      2
	      Min        0
	      Max        1
	    Event code 42 (?)
	      Value      1
	      Min        0
	      Max        2
	  Event type 4 (Misc)
	    Event code 4 (ScanCode)
	Testing ... (interrupt to exit)
	Event: time 1287784360.966997, type 1 (Key), code 320 (ToolPen), value 0
	Event: time 1287784360.967004, type 3 (Absolute), code 0 (X), value 14717
	Event: time 1287784360.967006, type 3 (Absolute), code 1 (Y), value 6211
	Event: time 1287784360.967014, type 3 (Absolute), code 2 (Z), value 15680
	Event: time 1287784360.967016, type 3 (Absolute), code 3 (Rx), value 6211
	Event: time 1287784360.967019, type 3 (Absolute), code 42 (?), value 0
	Event: time 1287784360.967020, -------------- Report Sync ------------
	Event: time 1287784360.979997, type 3 (Absolute), code 0 (X), value 14667
	Event: time 1287784360.980001, type 3 (Absolute), code 1 (Y), value 6189
	Event: time 1287784360.980008, type 3 (Absolute), code 2 (Z), value 15626
	Event: time 1287784360.980011, type 3 (Absolute), code 3 (Rx), value 6189
	Event: time 1287784360.980014, -------------- Report Sync ------------
	Event: time 1287784360.992997, type 3 (Absolute), code 0 (X), value 14684
	Event: time 1287784360.993000, type 3 (Absolute), code 1 (Y), value 6195
	Event: time 1287784360.993008, type 3 (Absolute), code 2 (Z), value 15640
	Event: time 1287784360.993011, type 3 (Absolute), code 3 (Rx), value 6195
	Event: time 1287784360.993014, -------------- Report Sync ------------
	Event: time 1287784361.005998, type 3 (Absolute), code 0 (X), value 14715
	Event: time 1287784361.006001, type 3 (Absolute), code 1 (Y), value 6220
	Event: time 1287784361.006008, type 3 (Absolute), code 2 (Z), value 15660
	Event: time 1287784361.006011, type 3 (Absolute), code 3 (Rx), value 6220
	Event: time 1287784361.006014, -------------- Report Sync ------------
	Event: time 1287784361.018000, type 3 (Absolute), code 0 (X), value 14745
	Event: time 1287784361.018004, type 3 (Absolute), code 1 (Y), value 6278
	Event: time 1287784361.018012, type 3 (Absolute), code 2 (Z), value 15674
	Event: time 1287784361.018014, type 3 (Absolute), code 3 (Rx), value 6278
	Event: time 1287784361.018017, -------------- Report Sync ------------
	Event: time 1287784361.030997, type 3 (Absolute), code 0 (X), value 14767
	Event: time 1287784361.031000, type 3 (Absolute), code 1 (Y), value 6358
	Event: time 1287784361.031008, type 3 (Absolute), code 2 (Z), value 15680
	Event: time 1287784361.031010, type 3 (Absolute), code 3 (Rx), value 6358
	Event: time 1287784361.031013, -------------- Report Sync ------------
	Event: time 1287784361.043996, type 4 (Misc), code 4 (ScanCode), value 
d0042
	Event: time 1287784361.043999, type 1 (Key), code 330 (Touch), value 1
	Event: time 1287784361.044001, type 1 (Key), code 320 (ToolPen), value 1
	Event: time 1287784361.044006, type 3 (Absolute), code 0 (X), value 14777
	Event: time 1287784361.044008, type 3 (Absolute), code 1 (Y), value 6451
	Event: time 1287784361.044012, type 1 (Key), code 321 (ToolRubber), value 1
	Event: time 1287784361.044016, type 3 (Absolute), code 2 (Z), value 15682
	Event: time 1287784361.044019, type 3 (Absolute), code 3 (Rx), value 6451
	Event: time 1287784361.044021, type 3 (Absolute), code 42 (?), value 2
	Event: time 1287784361.044023, -------------- Report Sync ------------
	Event: time 1287784361.057000, type 3 (Absolute), code 0 (X), value 14779
	Event: time 1287784361.057004, type 3 (Absolute), code 1 (Y), value 6546
	Event: time 1287784361.057012, type 3 (Absolute), code 3 (Rx), value 6546
	Event: time 1287784361.057016, -------------- Report Sync ------------
	Event: time 1287784361.069998, type 3 (Absolute), code 0 (X), value 14778
	Event: time 1287784361.070001, type 3 (Absolute), code 1 (Y), value 6640
	Event: time 1287784361.070009, type 3 (Absolute), code 2 (Z), value 15681
	Event: time 1287784361.070011, type 3 (Absolute), code 3 (Rx), value 6640
	Event: time 1287784361.070014, -------------- Report Sync ------------
	Event: time 1287784361.081989, type 3 (Absolute), code 0 (X), value 14776
	Event: time 1287784361.081992, type 3 (Absolute), code 1 (Y), value 6733
	Event: time 1287784361.082000, type 3 (Absolute), code 2 (Z), value 15680
	Event: time 1287784361.082002, type 3 (Absolute), code 3 (Rx), value 6733
	Event: time 1287784361.082005, -------------- Report Sync ------------
	Event: time 1287784361.094987, type 3 (Absolute), code 0 (X), value 14775
	Event: time 1287784361.094990, type 3 (Absolute), code 1 (Y), value 6832
	Event: time 1287784361.094998, type 3 (Absolute), code 2 (Z), value 15679
	Event: time 1287784361.095000, type 3 (Absolute), code 3 (Rx), value 6832
	Event: time 1287784361.095004, -------------- Report Sync ------------
	Event: time 1287784361.107986, type 3 (Absolute), code 0 (X), value 14774
	Event: time 1287784361.107990, type 3 (Absolute), code 1 (Y), value 6939
	Event: time 1287784361.107999, type 3 (Absolute), code 3 (Rx), value 6939
	Event: time 1287784361.108002, -------------- Report Sync ------------
	Event: time 1287784361.121001, type 3 (Absolute), code 1 (Y), value 7042
	Event: time 1287784361.121011, type 3 (Absolute), code 3 (Rx), value 7042
	Event: time 1287784361.121014, -------------- Report Sync ------------
	Event: time 1287784361.132987, type 3 (Absolute), code 0 (X), value 14779
	Event: time 1287784361.132991, type 3 (Absolute), code 1 (Y), value 7138
	Event: time 1287784361.132999, type 3 (Absolute), code 3 (Rx), value 7138
	Event: time 1287784361.133003, -------------- Report Sync ------------
	Event: time 1287784361.145998, type 3 (Absolute), code 0 (X), value 14794
	Event: time 1287784361.146001, type 3 (Absolute), code 1 (Y), value 7221
	Event: time 1287784361.146010, type 3 (Absolute), code 3 (Rx), value 7221
	Event: time 1287784361.146014, -------------- Report Sync ------------
	Event: time 1287784361.158999, type 3 (Absolute), code 0 (X), value 14815
	Event: time 1287784361.159003, type 3 (Absolute), code 1 (Y), value 7284
	Event: time 1287784361.159010, type 3 (Absolute), code 2 (Z), value 15684
	Event: time 1287784361.159012, type 3 (Absolute), code 3 (Rx), value 7284
	Event: time 1287784361.159016, -------------- Report Sync ------------
	Event: time 1287784361.183994, type 4 (Misc), code 4 (ScanCode), value 
d0042
	Event: time 1287784361.183996, type 1 (Key), code 330 (Touch), value 0
	Event: time 1287784361.184014, -------------- Report Sync ------------
	^C

So you can see that the location of both fingers is reported for the
multi-touch operation (with one finger reported as X & Y, and the
second finger as Z & Rx).  But with one finger, it's a bunch of button
presses and then nearly instantaneous releases.


And one final bit of information.  Here is the relevant information from
the udev.log:
	-----------------------------
	UDEV  [1287664208.316717] add 
/devices/pci0000:00/0000:00:1d.2/usb8/8-2/8-2:1.0/input/input4/event4 
(input)
	UDEV_LOG=3
	ACTION=add
	DEVPATH=/devices/pci0000:00/0000:00:1d.2/usb8/8-2/8-2:1.0/input/input4/event4
	SUBSYSTEM=input
	DEVNAME=/dev/input/event4
	SEQNUM=1272
	ID_INPUT=1
	ID_INPUT_TABLET=1
	ID_VENDOR=Nexio_Touch_Device.
	ID_VENDOR_ENC=Nexio\x20Touch\x20Device.\x20\x20
	ID_VENDOR_ID=1870
	ID_MODEL=HID_Multi-Touch
	ID_MODEL_ENC=HID\x20Multi-Touch
	ID_MODEL_ID=0100
	ID_REVISION=0006
	ID_SERIAL=Nexio_Touch_Device._HID_Multi-Touch
	ID_TYPE=hid
	ID_BUS=usb
	ID_USB_INTERFACES=:030000:
	ID_USB_INTERFACE_NUM=00
	ID_USB_DRIVER=usbhid
	ID_PATH=pci-0000:00:1d.2-usb-0:2:1.0
	MAJOR=13
	MINOR=68
	DEVLINKS=/dev/char/13:68 
/dev/input/by-id/usb-Nexio_Touch_Device._HID_Multi-Touch-event-mouse 
/dev/input/by-path/pci-0000:00:1d.2-usb-0:2:1.0-event-mouse

	UDEV  [1287664208.316759] add 
/devices/pci0000:00/0000:00:1d.2/usb8/8-2/8-2:1.0/input/input4/mouse1 
(input)
	UDEV_LOG=3
	ACTION=add
	DEVPATH=/devices/pci0000:00/0000:00:1d.2/usb8/8-2/8-2:1.0/input/input4/mouse1
	SUBSYSTEM=input
	DEVNAME=/dev/input/mouse1
	SEQNUM=1273
	ID_INPUT=1
	ID_INPUT_TABLET=1
	ID_VENDOR=Nexio_Touch_Device.
	ID_VENDOR_ENC=Nexio\x20Touch\x20Device.\x20\x20
	ID_VENDOR_ID=1870
	ID_MODEL=HID_Multi-Touch
	ID_MODEL_ENC=HID\x20Multi-Touch
	ID_MODEL_ID=0100
	ID_REVISION=0006
	ID_SERIAL=Nexio_Touch_Device._HID_Multi-Touch
	ID_TYPE=hid
	ID_BUS=usb
	ID_USB_INTERFACES=:030000:
	ID_USB_INTERFACE_NUM=00
	ID_USB_DRIVER=usbhid
	ID_PATH=pci-0000:00:1d.2-usb-0:2:1.0
	MAJOR=13
	MINOR=33
	DEVLINKS=/dev/char/13:33 
/dev/input/by-id/usb-Nexio_Touch_Device._HID_Multi-Touch-mouse 
/dev/input/by-path/pci-0000:00:1d.2-usb-0:2:1.0-mouse
	-----------------------------

And if that isn't enough info, I'm happy to provide more.


	Thanks for whatever suggestions you can provide,
	Bill

--
Bill Sherman
Sr. Technology Advisor
Advanced Visualization Lab
Pervasive Technology Inst
Indiana University
shermanw at indiana.edu



More information about the xorg mailing list