evdev and Trust TB-5300 tablet: wrong axis labels

Matthew Helsley matt.helsley at gmail.com
Sun Dec 13 18:35:03 PST 2009


2009/12/13 Daniil V. Kolpakov <dan at riga.lv>:
> Matthew, thanks for the info!

You're quite welcome!

> В сообщении от 13 декабря 2009 Matthew Helsley написал(a):
>> What does /proc/bus/input/devices say about your tablet? I've got a
>> UC-LOGIC "Genius Pensketch 12x9" which had (and still has) some USB
>> quirks. The worst was it reported the X axis as the Z axis. It turned
>> out that the hid descriptor was bad and thus the kernel hid parser got
>> confused. Specifying the "MULTI" quirk seemed to fix the axis
>> labelling problem. You can test it and other quirks out by writing to
>> a sysfs file -- though I'm looking and can't seem to find it on my
>> 2.6.31 distro kernel :(.
>
> /proc/bus/input/devices says pretty much the same as it does in your case:
>
> I: Bus=0003 Vendor=5543 Product=0004 Version=0100
> N: Name="UC-LOGIC Tablet WP5540U"

Looks like they may have re-branded the "Genius MousePen 5x4 Tablet"
to your "Trust TB-5300". Here's the usb.ids section which suggests
that:

5543  UC-Logic Technology Corp.
        0002  SuperPen WP3325U Tablet
        0003  Genius MousePen 4x3 Tablet/Aquila L1 Tablet
        0004  Genius MousePen 5x4 Tablet
        0005  Genius MousePen 8x6 Tablet
        0041  Genius PenSketch 6x8 Tablet
        0042  Genius PenSketch 12x9 Tablet

If you search for "Genius MousePen 5x4 Tablet" or something like it
then perhaps you'll find more ideas for fixing your tablet. Of course
this could be misleading -- I believe there are examples of vendors
re-using USB vendor:product pairs for different products.

> P: Phys=usb-0000:03:00.0-2/input0
> S:
> Sysfs=/devices/pci0000:00/0000:00:06.0/0000:03:00.0/usb1/1-2/1-2:1.0/input/input6
> U: Uniq=
> H: Handlers=mouse2 event6

To decode the following you can use /usr/include/linux/input.h
(assuming you have a libc devel package installed. I've decoded it
below:

> B: EV=1f
> B: KEY=c01 3f0001 0 0 0 0
> B: REL=303

This is: 001100000011
which says it reports REL_MISC, REL_WHEEL, REL_Y, and REL_X events.

> B: ABS=100000f

This one says it reports ABS_X, ABS_Y, ABS_Z, ABS_RX and ABS_PRESSURE.

So, as you can see, the evdev driver properly decoded what the kernel
told it about the device. It seems like the events produced by the
kernel are wrong because the hid descriptor is probably broken.
Incidentally, you can get a copy of that too.
This isn't what I used -- it looks even more helpful:

    http://old.nabble.com/How-to-dump-HID-report-descriptor-under-Linux-td19609562.html

With the example, decoded HID descriptor printed here:
    http://old.nabble.com/Re%3A-How-to-dump-HID-report-descriptor-under-Linux-p20159409.html

Which suggests (running as root user):

user at localhost: ~/$ less /proc/bus/input/devices
  ...
  I: Bus=0003 Vendor=5543 Product=0042 Version=0100
                                ^^^^^              ^^^^
  N: Name="    Tablet PF1209"
  P: Phys=usb-0000:00:1d.1-2/input0
  S: Sysfs=/devices/pci0000:00/0000:00:1d.1/usb6/6-2/6-2:1.0/input/input10

       ^^^^^^^
  ...
root at localhost: ~/# echo '6-2:1.0' > /sys/bus/usb/drivers/usbhid/unbind
root at localhost: ~/# lsusb -vvv -d '5543:0042'
Bus 006 Device 002: ID 5543:0042 UC-Logic Technology Corp. Genius
PenSketch 12x9 Tablet
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               1.10
  bDeviceClass            0 (Defined at Interface level)
  bDeviceSubClass         0
  bDeviceProtocol         0
  bMaxPacketSize0         8
  idVendor           0x5543 UC-Logic Technology Corp.
  idProduct          0x0042 Genius PenSketch 12x9 Tablet
  bcdDevice            0.00
  iManufacturer           1
  iProduct                2 Tablet PF1209
  iSerial                 0
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength           34
    bNumInterfaces          1
    bConfigurationValue     1
    iConfiguration          0
    bmAttributes         0xa0
      (Bus Powered)
      Remote Wakeup
    MaxPower              100mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           1
      bInterfaceClass         3 Human Interface Device
      bInterfaceSubClass      1 Boot Interface Subclass
      bInterfaceProtocol      2 Mouse
      iInterface              2 Tablet PF1209
      ** UNRECOGNIZED:  09 21 00 01 00 01 22 ea 00
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x81  EP 1 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0008  1x 8 bytes
        bInterval              10
Device Status:     0x0000
  (Bus Powered)


Apparently it should have output a section entitled: "HID Device
Descriptor:" and instead I got "** UNRECOGNIZED:  09 21 00 01 00 01 22
ea 00". Do you get the same?

I recompiled my kernel to enable HID debugging which, I think, dumped
the raw table as a series of hexadecimal values. I decoded it to the
attached file using some utility I've long since forgotten. Manual
decoding requires reading the USB, HID, and HID Usage Tables standards
:(. I did some rudimentary hand decoding of my own which suggested the
table was broken but I can't recall the details.

For me, being unfamiliar with the details of the USB, HID, and kernel
input subsystems (not to mention the standards), the tiny amount of
work I managed to accomplish to get minimal support of my tablet was
still quite a learning experience.

Cheers,
    -Matt Helsley
-------------- next part --------------
A non-text attachment was scrubbed...
Name: tablet.hid_reports
Type: application/octet-stream
Size: 12693 bytes
Desc: not available
URL: <http://lists.x.org/archives/xorg/attachments/20091213/e305cd8e/attachment.obj>


More information about the xorg mailing list