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