linux-input.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Matthew Helsley <matt.helsley-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
To: "Daniil V. Kolpakov" <dan-A/X3QuVk8WQ@public.gmane.org>
Cc: xorg-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org,
	linux-input-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	linux-usb-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Subject: Re: evdev and Trust TB-5300 tablet: wrong axis labels
Date: Sun, 13 Dec 2009 18:35:03 -0800	[thread overview]
Message-ID: <6a12d2f30912131835taa8086dic17562bb71543a68@mail.gmail.com> (raw)
In-Reply-To: <200912131825.03872.dan-A/X3QuVk8WQ@public.gmane.org>

[-- Attachment #1: Type: text/plain, Size: 5890 bytes --]

2009/12/13 Daniil V. Kolpakov <dan-A/X3QuVk8WQ@public.gmane.org>:
> 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@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@localhost: ~/# echo '6-2:1.0' > /sys/bus/usb/drivers/usbhid/unbind
root@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

[-- Attachment #2: tablet.hid_reports --]
[-- Type: application/octet-stream, Size: 12694 bytes --]

[0x0000] 0x05 0x0d (value: 0xd / 13)
  bSize = 1 byte(s)
  bType = 0x01 (Global)
  bTag  = 0x00 (Usage page)

[0x0002] 0x09 0x02 (value: 0x2 / 2)
  bSize = 1 byte(s)
  bType = 0x02 (Local)
  bTag  = 0x00 (Usage)

[0x0004] 0xa1 0x01 (value: 0x1 / 1)
  bSize = 1 byte(s)
  bType = 0x00 (Main)
  bTag  = 0x0a (Collection) (Application)

[0x0006] 0x85 0x07 (value: 0x7 / 7)
  bSize = 1 byte(s)
  bType = 0x01 (Global)
  bTag  = 0x08 (Report ID)

[0x0008] 0x09 0x20 (value: 0x20 / 32)
  bSize = 1 byte(s)
  bType = 0x02 (Local)
  bTag  = 0x00 (Usage)

[0x000a] 0xa1 0x00 (value: 0x0 / 0)
  bSize = 1 byte(s)
  bType = 0x00 (Main)
  bTag  = 0x0a (Collection) (Physical)

[0x000c] 0x09 0x42 (value: 0x42 / 66)
  bSize = 1 byte(s)
  bType = 0x02 (Local)
  bTag  = 0x00 (Usage)

[0x000e] 0x09 0x44 (value: 0x44 / 68)
  bSize = 1 byte(s)
  bType = 0x02 (Local)
  bTag  = 0x00 (Usage)

[0x0010] 0x09 0x45 (value: 0x45 / 69)
  bSize = 1 byte(s)
  bType = 0x02 (Local)
  bTag  = 0x00 (Usage)

[0x0012] 0x15 0x00 (value: 0x0 / 0)
  bSize = 1 byte(s)
  bType = 0x01 (Global)
  bTag  = 0x01 (Logical Minimum)

[0x0014] 0x25 0x01 (value: 0x1 / 1)
  bSize = 1 byte(s)
  bType = 0x01 (Global)
  bTag  = 0x02 (Logical Maximum)

[0x0016] 0x75 0x01 (value: 0x1 / 1)
  bSize = 1 byte(s)
  bType = 0x01 (Global)
  bTag  = 0x07 (Report Size)

[0x0018] 0x95 0x03 (value: 0x3 / 3)
  bSize = 1 byte(s)
  bType = 0x01 (Global)
  bTag  = 0x09 (Report Count)

[0x001a] 0x81 0x02 (value: 0x2 / 2)
  bSize = 1 byte(s)
  bType = 0x00 (Main)
  bTag  = 0x08 (Input)

[0x001c] 0x95 0x03 (value: 0x3 / 3)
  bSize = 1 byte(s)
  bType = 0x01 (Global)
  bTag  = 0x09 (Report Count)

[0x001e] 0x81 0x03 (value: 0x3 / 3)
  bSize = 1 byte(s)
  bType = 0x00 (Main)
  bTag  = 0x08 (Input)

[0x0020] 0x09 0x32 (value: 0x32 / 50)
  bSize = 1 byte(s)
  bType = 0x02 (Local)
  bTag  = 0x00 (Usage)

[0x0022] 0x95 0x01 (value: 0x1 / 1)
  bSize = 1 byte(s)
  bType = 0x01 (Global)
  bTag  = 0x09 (Report Count)

[0x0024] 0x81 0x02 (value: 0x2 / 2)
  bSize = 1 byte(s)
  bType = 0x00 (Main)
  bTag  = 0x08 (Input)

[0x0026] 0x95 0x01 (value: 0x1 / 1)
  bSize = 1 byte(s)
  bType = 0x01 (Global)
  bTag  = 0x09 (Report Count)

[0x0028] 0x81 0x03 (value: 0x3 / 3)
  bSize = 1 byte(s)
  bType = 0x00 (Main)
  bTag  = 0x08 (Input)

[0x002a] 0x05 0x01 (value: 0x1 / 1)
  bSize = 1 byte(s)
  bType = 0x01 (Global)
  bTag  = 0x00 (Usage page)

[0x002c] 0x09 0x30 (value: 0x30 / 48)
  bSize = 1 byte(s)
  bType = 0x02 (Local)
  bTag  = 0x00 (Usage)

[0x002e] 0x75 0x10 (value: 0x10 / 16)
  bSize = 1 byte(s)
  bType = 0x01 (Global)
  bTag  = 0x07 (Report Size)

[0x0030] 0x95 0x01 (value: 0x1 / 1)
  bSize = 1 byte(s)
  bType = 0x01 (Global)
  bTag  = 0x09 (Report Count)

[0x0032] 0xa4
  bSize = 0 byte(s)
  bType = 0x01 (Global)
  bTag  = 0x0a (Push)

[0x0033] 0x55 0x0d (value: 0xd / 13)
  bSize = 1 byte(s)
  bType = 0x01 (Global)
  bTag  = 0x05 (Unit Exponent)

[0x0035] 0x65 0x33 (value: 0x33 / 51)
  bSize = 1 byte(s)
  bType = 0x01 (Global)
  bTag  = 0x06 (Unit)

[0x0037] 0x35 0x00 (value: 0x0 / 0)
  bSize = 1 byte(s)
  bType = 0x01 (Global)
  bTag  = 0x03 (Physical Minimum)

[0x0039] 0x46 0xe0 0x2e (value: 0x2ee0 / 12000)
  bSize = 2 byte(s)
  bType = 0x01 (Global)
  bTag  = 0x04 (Physical Maximum)

[0x003c] 0x26 0xc0 0x5d (value: 0x5dc0 / 24000)
  bSize = 2 byte(s)
  bType = 0x01 (Global)
  bTag  = 0x02 (Logical Maximum)

[0x003f] 0x81 0x02 (value: 0x2 / 2)
  bSize = 1 byte(s)
  bType = 0x00 (Main)
  bTag  = 0x08 (Input)

[0x0041] 0x09 0x31 (value: 0x31 / 49)
  bSize = 1 byte(s)
  bType = 0x02 (Local)
  bTag  = 0x00 (Usage)

[0x0043] 0x46 0x28 0x23 (value: 0x2328 / 9000)
  bSize = 2 byte(s)
  bType = 0x01 (Global)
  bTag  = 0x04 (Physical Maximum)

[0x0046] 0x26 0x50 0x46 (value: 0x4650 / 18000)
  bSize = 2 byte(s)
  bType = 0x01 (Global)
  bTag  = 0x02 (Logical Maximum)

[0x0049] 0x81 0x02 (value: 0x2 / 2)
  bSize = 1 byte(s)
  bType = 0x00 (Main)
  bTag  = 0x08 (Input)

[0x004b] 0xb4
  bSize = 0 byte(s)
  bType = 0x01 (Global)
  bTag  = 0x0b (Pop)

[0x004c] 0x05 0x0d (value: 0xd / 13)
  bSize = 1 byte(s)
  bType = 0x01 (Global)
  bTag  = 0x00 (Usage page)

[0x004e] 0x09 0x30 (value: 0x30 / 48)
  bSize = 1 byte(s)
  bType = 0x02 (Local)
  bTag  = 0x00 (Usage)

[0x0050] 0x26 0xff 0x03 (value: 0x3ff / 1023)
  bSize = 2 byte(s)
  bType = 0x01 (Global)
  bTag  = 0x02 (Logical Maximum)

[0x0053] 0x81 0x02 (value: 0x2 / 2)
  bSize = 1 byte(s)
  bType = 0x00 (Main)
  bTag  = 0x08 (Input)

[0x0055] 0x75 0x10 (value: 0x10 / 16)
  bSize = 1 byte(s)
  bType = 0x01 (Global)
  bTag  = 0x07 (Report Size)

[0x0057] 0xc0
  bSize = 0 byte(s)
  bType = 0x00 (Main)
  bTag  = 0x0c (End Collection)

[0x0058] 0xc0
  bSize = 0 byte(s)
  bType = 0x00 (Main)
  bTag  = 0x0c (End Collection)

[0x0059] 0x05 0x01 (value: 0x1 / 1)
  bSize = 1 byte(s)
  bType = 0x01 (Global)
  bTag  = 0x00 (Usage page)

[0x005b] 0x09 0x02 (value: 0x2 / 2)
  bSize = 1 byte(s)
  bType = 0x02 (Local)
  bTag  = 0x00 (Usage)

[0x005d] 0xa1 0x01 (value: 0x1 / 1)
  bSize = 1 byte(s)
  bType = 0x00 (Main)
  bTag  = 0x0a (Collection) (Application)

[0x005f] 0x85 0x08 (value: 0x8 / 8)
  bSize = 1 byte(s)
  bType = 0x01 (Global)
  bTag  = 0x08 (Report ID)

[0x0061] 0x09 0x01 (value: 0x1 / 1)
  bSize = 1 byte(s)
  bType = 0x02 (Local)
  bTag  = 0x00 (Usage)

[0x0063] 0xa1 0x00 (value: 0x0 / 0)
  bSize = 1 byte(s)
  bType = 0x00 (Main)
  bTag  = 0x0a (Collection) (Physical)

[0x0065] 0x05 0x09 (value: 0x9 / 9)
  bSize = 1 byte(s)
  bType = 0x01 (Global)
  bTag  = 0x00 (Usage page)

[0x0067] 0x19 0x01 (value: 0x1 / 1)
  bSize = 1 byte(s)
  bType = 0x02 (Local)
  bTag  = 0x01 (Usage Minimum)

[0x0069] 0x29 0x03 (value: 0x3 / 3)
  bSize = 1 byte(s)
  bType = 0x02 (Local)
  bTag  = 0x02 (Usage Maximum)

[0x006b] 0x15 0x00 (value: 0x0 / 0)
  bSize = 1 byte(s)
  bType = 0x01 (Global)
  bTag  = 0x01 (Logical Minimum)

[0x006d] 0x25 0x01 (value: 0x1 / 1)
  bSize = 1 byte(s)
  bType = 0x01 (Global)
  bTag  = 0x02 (Logical Maximum)

[0x006f] 0x95 0x03 (value: 0x3 / 3)
  bSize = 1 byte(s)
  bType = 0x01 (Global)
  bTag  = 0x09 (Report Count)

[0x0071] 0x75 0x01 (value: 0x1 / 1)
  bSize = 1 byte(s)
  bType = 0x01 (Global)
  bTag  = 0x07 (Report Size)

[0x0073] 0x81 0x02 (value: 0x2 / 2)
  bSize = 1 byte(s)
  bType = 0x00 (Main)
  bTag  = 0x08 (Input)

[0x0075] 0x95 0x05 (value: 0x5 / 5)
  bSize = 1 byte(s)
  bType = 0x01 (Global)
  bTag  = 0x09 (Report Count)

[0x0077] 0x81 0x01 (value: 0x1 / 1)
  bSize = 1 byte(s)
  bType = 0x00 (Main)
  bTag  = 0x08 (Input)

[0x0079] 0x05 0x01 (value: 0x1 / 1)
  bSize = 1 byte(s)
  bType = 0x01 (Global)
  bTag  = 0x00 (Usage page)

[0x007b] 0x09 0x30 (value: 0x30 / 48)
  bSize = 1 byte(s)
  bType = 0x02 (Local)
  bTag  = 0x00 (Usage)

[0x007d] 0x09 0x31 (value: 0x31 / 49)
  bSize = 1 byte(s)
  bType = 0x02 (Local)
  bTag  = 0x00 (Usage)

[0x007f] 0x09 0x38 (value: 0x38 / 56)
  bSize = 1 byte(s)
  bType = 0x02 (Local)
  bTag  = 0x00 (Usage)

[0x0081] 0x09 0x00 (value: 0x0 / 0)
  bSize = 1 byte(s)
  bType = 0x02 (Local)
  bTag  = 0x00 (Usage)

[0x0083] 0x15 0x81 (value: 0x81 / 129)
  bSize = 1 byte(s)
  bType = 0x01 (Global)
  bTag  = 0x01 (Logical Minimum)

[0x0085] 0x25 0x7f (value: 0x7f / 127)
  bSize = 1 byte(s)
  bType = 0x01 (Global)
  bTag  = 0x02 (Logical Maximum)

[0x0087] 0x75 0x08 (value: 0x8 / 8)
  bSize = 1 byte(s)
  bType = 0x01 (Global)
  bTag  = 0x07 (Report Size)

[0x0089] 0x95 0x04 (value: 0x4 / 4)
  bSize = 1 byte(s)
  bType = 0x01 (Global)
  bTag  = 0x09 (Report Count)

[0x008b] 0x81 0x06 (value: 0x6 / 6)
  bSize = 1 byte(s)
  bType = 0x00 (Main)
  bTag  = 0x08 (Input)

[0x008d] 0xc0
  bSize = 0 byte(s)
  bType = 0x00 (Main)
  bTag  = 0x0c (End Collection)

[0x008e] 0xc0
  bSize = 0 byte(s)
  bType = 0x00 (Main)
  bTag  = 0x0c (End Collection)

[0x008f] 0x05 0x01 (value: 0x1 / 1)
  bSize = 1 byte(s)
  bType = 0x01 (Global)
  bTag  = 0x00 (Usage page)

[0x0091] 0x09 0x02 (value: 0x2 / 2)
  bSize = 1 byte(s)
  bType = 0x02 (Local)
  bTag  = 0x00 (Usage)

[0x0093] 0xa1 0x01 (value: 0x1 / 1)
  bSize = 1 byte(s)
  bType = 0x00 (Main)
  bTag  = 0x0a (Collection) (Application)

[0x0095] 0x85 0x09 (value: 0x9 / 9)
  bSize = 1 byte(s)
  bType = 0x01 (Global)
  bTag  = 0x08 (Report ID)

[0x0097] 0x09 0x01 (value: 0x1 / 1)
  bSize = 1 byte(s)
  bType = 0x02 (Local)
  bTag  = 0x00 (Usage)

[0x0099] 0xa1 0x00 (value: 0x0 / 0)
  bSize = 1 byte(s)
  bType = 0x00 (Main)
  bTag  = 0x0a (Collection) (Physical)

[0x009b] 0x05 0x09 (value: 0x9 / 9)
  bSize = 1 byte(s)
  bType = 0x01 (Global)
  bTag  = 0x00 (Usage page)

[0x009d] 0x19 0x01 (value: 0x1 / 1)
  bSize = 1 byte(s)
  bType = 0x02 (Local)
  bTag  = 0x01 (Usage Minimum)

[0x009f] 0x29 0x03 (value: 0x3 / 3)
  bSize = 1 byte(s)
  bType = 0x02 (Local)
  bTag  = 0x02 (Usage Maximum)

[0x00a1] 0x15 0x00 (value: 0x0 / 0)
  bSize = 1 byte(s)
  bType = 0x01 (Global)
  bTag  = 0x01 (Logical Minimum)

[0x00a3] 0x25 0x01 (value: 0x1 / 1)
  bSize = 1 byte(s)
  bType = 0x01 (Global)
  bTag  = 0x02 (Logical Maximum)

[0x00a5] 0x95 0x03 (value: 0x3 / 3)
  bSize = 1 byte(s)
  bType = 0x01 (Global)
  bTag  = 0x09 (Report Count)

[0x00a7] 0x75 0x01 (value: 0x1 / 1)
  bSize = 1 byte(s)
  bType = 0x01 (Global)
  bTag  = 0x07 (Report Size)

[0x00a9] 0x81 0x02 (value: 0x2 / 2)
  bSize = 1 byte(s)
  bType = 0x00 (Main)
  bTag  = 0x08 (Input)

[0x00ab] 0x95 0x05 (value: 0x5 / 5)
  bSize = 1 byte(s)
  bType = 0x01 (Global)
  bTag  = 0x09 (Report Count)

[0x00ad] 0x81 0x01 (value: 0x1 / 1)
  bSize = 1 byte(s)
  bType = 0x00 (Main)
  bTag  = 0x08 (Input)

[0x00af] 0x05 0x01 (value: 0x1 / 1)
  bSize = 1 byte(s)
  bType = 0x01 (Global)
  bTag  = 0x00 (Usage page)

[0x00b1] 0x09 0x30 (value: 0x30 / 48)
  bSize = 1 byte(s)
  bType = 0x02 (Local)
  bTag  = 0x00 (Usage)

[0x00b3] 0x09 0x31 (value: 0x31 / 49)
  bSize = 1 byte(s)
  bType = 0x02 (Local)
  bTag  = 0x00 (Usage)

[0x00b5] 0x15 0x00 (value: 0x0 / 0)
  bSize = 1 byte(s)
  bType = 0x01 (Global)
  bTag  = 0x01 (Logical Minimum)

[0x00b7] 0x26 0xff 0x7f (value: 0x7fff / 32767)
  bSize = 2 byte(s)
  bType = 0x01 (Global)
  bTag  = 0x02 (Logical Maximum)

[0x00ba] 0x35 0x00 (value: 0x0 / 0)
  bSize = 1 byte(s)
  bType = 0x01 (Global)
  bTag  = 0x03 (Physical Minimum)

[0x00bc] 0x46 0xff 0x7f (value: 0x7fff / 32767)
  bSize = 2 byte(s)
  bType = 0x01 (Global)
  bTag  = 0x04 (Physical Maximum)

[0x00bf] 0x95 0x02 (value: 0x2 / 2)
  bSize = 1 byte(s)
  bType = 0x01 (Global)
  bTag  = 0x09 (Report Count)

[0x00c1] 0x75 0x10 (value: 0x10 / 16)
  bSize = 1 byte(s)
  bType = 0x01 (Global)
  bTag  = 0x07 (Report Size)

[0x00c3] 0x81 0x02 (value: 0x2 / 2)
  bSize = 1 byte(s)
  bType = 0x00 (Main)
  bTag  = 0x08 (Input)

[0x00c5] 0x05 0x0d (value: 0xd / 13)
  bSize = 1 byte(s)
  bType = 0x01 (Global)
  bTag  = 0x00 (Usage page)

[0x00c7] 0x09 0x30 (value: 0x30 / 48)
  bSize = 1 byte(s)
  bType = 0x02 (Local)
  bTag  = 0x00 (Usage)

[0x00c9] 0x26 0xff 0x03 (value: 0x3ff / 1023)
  bSize = 2 byte(s)
  bType = 0x01 (Global)
  bTag  = 0x02 (Logical Maximum)

[0x00cc] 0x95 0x01 (value: 0x1 / 1)
  bSize = 1 byte(s)
  bType = 0x01 (Global)
  bTag  = 0x09 (Report Count)

[0x00ce] 0x75 0x10 (value: 0x10 / 16)
  bSize = 1 byte(s)
  bType = 0x01 (Global)
  bTag  = 0x07 (Report Size)

[0x00d0] 0x81 0x02 (value: 0x2 / 2)
  bSize = 1 byte(s)
  bType = 0x00 (Main)
  bTag  = 0x08 (Input)

[0x00d2] 0xc0
  bSize = 0 byte(s)
  bType = 0x00 (Main)
  bTag  = 0x0c (End Collection)

[0x00d3] 0xc0
  bSize = 0 byte(s)
  bType = 0x00 (Main)
  bTag  = 0x0c (End Collection)

[0x00d4] 0x05 0x01 (value: 0x1 / 1)
  bSize = 1 byte(s)
  bType = 0x01 (Global)
  bTag  = 0x00 (Usage page)

[0x00d6] 0x09 0x00 (value: 0x0 / 0)
  bSize = 1 byte(s)
  bType = 0x02 (Local)
  bTag  = 0x00 (Usage)

[0x00d8] 0xa1 0x01 (value: 0x1 / 1)
  bSize = 1 byte(s)
  bType = 0x00 (Main)
  bTag  = 0x0a (Collection) (Application)

[0x00da] 0x85 0x04 (value: 0x4 / 4)
  bSize = 1 byte(s)
  bType = 0x01 (Global)
  bTag  = 0x08 (Report ID)

[0x00dc] 0x15 0x00 (value: 0x0 / 0)
  bSize = 1 byte(s)
  bType = 0x01 (Global)
  bTag  = 0x01 (Logical Minimum)

[0x00de] 0x26 0xff 0x00 (value: 0xff / 255)
  bSize = 2 byte(s)
  bType = 0x01 (Global)
  bTag  = 0x02 (Logical Maximum)

[0x00e1] 0x09 0x00 (value: 0x0 / 0)
  bSize = 1 byte(s)
  bType = 0x02 (Local)
  bTag  = 0x00 (Usage)

[0x00e3] 0x75 0x08 (value: 0x8 / 8)
  bSize = 1 byte(s)
  bType = 0x01 (Global)
  bTag  = 0x07 (Report Size)

[0x00e5] 0x95 0x03 (value: 0x3 / 3)
  bSize = 1 byte(s)
  bType = 0x01 (Global)
  bTag  = 0x09 (Report Count)

[0x00e7] 0xb1 0x02 (value: 0x2 / 2)
  bSize = 1 byte(s)
  bType = 0x00 (Main)
  bTag  = 0x0b (Feature)

[0x00e9] 0xc0
  bSize = 0 byte(s)
  bType = 0x00 (Main)
  bTag  = 0x0c (End Collection)

done

  parent reply	other threads:[~2009-12-14  2:35 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <200912130058.46220.dan@riga.lv>
2009-12-13  1:27 ` evdev and Trust TB-5300 tablet: wrong axis labels Matthew Helsley
2009-12-13 16:25   ` Daniil V. Kolpakov
2009-12-13 21:23     ` Daniil V. Kolpakov
2009-12-13 21:36       ` Daniil V. Kolpakov
     [not found]     ` <200912131825.03872.dan-A/X3QuVk8WQ@public.gmane.org>
2009-12-14  2:35       ` Matthew Helsley [this message]
2009-12-14 23:06         ` Daniil V. Kolpakov
2009-12-14 23:11           ` Daniil V. Kolpakov
2009-12-14 23:46           ` Peter Hutterer
     [not found]             ` <20091214234652.GB23029-FGgOdbPLo1kAicBL8TP8PQ@public.gmane.org>
2009-12-15  7:43               ` Matthew Helsley
2009-12-15 10:32                 ` Peter Hutterer

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=6a12d2f30912131835taa8086dic17562bb71543a68@mail.gmail.com \
    --to=matt.helsley-re5jqeeqqe8avxtiumwx3w@public.gmane.org \
    --cc=dan-A/X3QuVk8WQ@public.gmane.org \
    --cc=linux-input-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=linux-usb-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=xorg-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).