Subject: Re: Wacom USB tablet and XF86 4.3.0?
To: Dave Huang <khym@azeotrope.org>
From: Matthieu Herrb <matthieu.herrb@laas.fr>
List: tech-x11
Date: 01/02/2004 08:35:22
You wrote (in your message from Thursday 1)
 > On Thu, Jan 01, 2004 at 10:00:34AM +0100, Matthieu Herrb wrote:
 > > The X server need to export the symbols to its modules. Look at the
 > > following change in OpenBSD:
 > > 
 > > http://www.openbsd.org/cgi-bin/cvsweb.cgi/XF4/xc/programs/Xserver/hw/xfree86/loader/xf86sym.c.diff?r1=1.3&r2=1.4
 > 
 > Ah, that was it, thanks!
 > 
 > Now the driver probably works, but I think there are two problems. The
 > first problem is that if I have the ums driver configured in my
 > kernel, it'll attach to the Graphire3, and wsmouse attaches to that. I
 > then no longer have a /dev/uhid0 to call USB_GET_REPORT_DESC on. If I
 > use /dev/wsmouse1 instead, it returns an "Invalid ioctl for device"
 > error. It looks like wsmouse doesn't recognize the ioctl, so it calls
 > ums_ioctl. ums doesn't recognize it either, so it returns EPASSTHOUGH.
 > I don't know what EPASSTHROUGH does, but it doesn't seem to be passing
 > it up to uhid, which would know what to do with the ioctl. I guess
 > this one belongs more on tech-kern than x11 though (I'm touring all
 > the mailing lists :) For now, I've commented ums out of my kernel:
 > 
 > uhidev0: WACOM CTE-430-UV3.1-4, rev 1.10/3.14, addr 2, iclass 3/1
 > uhidev0: 3 report ids
 > uhid0 at uhidev0 reportid 1: input=4, output=0, feature=0
 > uhid1 at uhidev0 reportid 2: input=7, output=0, feature=1
 > uhid2 at uhidev0 reportid 3: input=0, output=0, feature=1
 > 
 > But the main problem is that the driver doesn't seem to support the
 > Graphire3; when I start X, it now complains "/dev/uhid0 has no X, Y,
 > or In_Range report" (same complaint if I use uhid1 or uhid2). Looks
 > like the Graphire3 doesn't use the standard USB Digitizer reports?
 > 
 > % usbhidctl -f /dev/uhid0 -r
 > Report descriptor:
 > Collection page=Generic_Desktop usage=Mouse
 > Collection page=Generic_Desktop usage=Pointer
 > Input   size=1 count=1 page=Button usage=Button_1, logical range 0..1
 > Input   size=1 count=1 page=Button usage=Button_2, logical range 0..1
 > Input   size=1 count=1 page=Button usage=Button_3, logical range 0..1
 > Input   size=8 count=1 page=Generic_Desktop usage=X, logical range -127..127
 > Input   size=8 count=1 page=Generic_Desktop usage=Y, logical range -127..127
 > Input   size=8 count=1 page=Generic_Desktop usage=Wheel, logical range -127..127
 > End collection
 > End collection
 > Total   input size 4 bytes
 > Total  output size 0 bytes
 > Total feature size 0 bytes

Well, this uhid0 device looks like a USB mouse. It explains :
1) why the device attaches as ums0 in the kernel
2) why the usbtablet driver doesn't grok it (it look for an In_range
   usage in one of the inputs, which is missing there).

You should be able to use it under X by letting the kernel attach it
as ums0 and configure an InputDevice section in XF86Config for
/dev/wsmouse1 

 > 
 > % usbhidctl -f /dev/uhid1 -r
 > Report descriptor:
 > Collection page=Digitizer usage=Digitizer
 > Collection page=0x0000 usage=0x0000
 > Input   size=8 count=1 page=Microsoft usage=0x0001, logical range 0..255
 > Input   size=8 count=1 page=Microsoft usage=0x0001, logical range 0..255
 > Input   size=8 count=1 page=Microsoft usage=0x0001, logical range 0..255
 > Input   size=8 count=1 page=Microsoft usage=0x0001, logical range 0..255
 > Input   size=8 count=1 page=Microsoft usage=0x0001, logical range 0..255
 > Input   size=8 count=1 page=Microsoft usage=0x0001, logical range 0..255
 > Input   size=8 count=1 page=Microsoft usage=0x0001, logical range 0..255
 > End collection
 > Feature size=0 count=1 page=Microsoft usage=0x0001, logical range 0..255
 > Total   input size 7 bytes
 > Total  output size 0 bytes
 > Total feature size 1 bytes
 > 

This hid looks more like a digitizer, however the Microsoft pages are
of course not what the generic USB tablet driver expects. I don't have
a graphire 3 available to try to decrypt the data in those pages.

FYI, here's how a graphire 2 looks like:

Collection page=Digitizer usage=Digitizer
Collection page=Digitizer usage=Digitizer
Input   size=1 count=1 page=Digitizer usage=Touch, logical range 0..1
Input   size=1 count=1 page=Digitizer usage=Barrel_Switch, logical range 0..1
Input   size=1 count=1 page=Digitizer usage=Barrel_Switch, logical range 0..1
Input   size=1 count=1 page=Digitizer usage=Invert, logical range 0..1
Input   size=1 count=1 page=Digitizer usage=Transducer_Index, logical range 0..1
Input   size=1 count=1 page=Digitizer usage=In_Range, logical range 0..1
Input   size=16 count=1 page=Generic_Desktop usage=X, logical range 0..10206
Input   size=16 count=1 page=Generic_Desktop usage=Y, logical range 0..7422
Input   size=16 count=1 page=Digitizer usage=Tip_Pressure, logical range 0..511
End collection
Feature size=0 count=1 page=Digitizer usage=Undefined, logical range 0..511
Total   input size 7 bytes
Total  output size 0 bytes
Total feature size 2 bytes
-- 
					Matthieu