On Sat, Jun 16, 2001 at 11:13:06PM +0200, EJ wrote:
> vp> > I'm developing code to configure my AipTek USB tablet, and I've
> vp> > stumbled on two omissions in the hid code. Most importantly, the
> vp> > device->hiddev structure is not initialized, so it results in null
> vp> > pointer errors.
> vp> Fixed in -ac12 or around that version. Please check always the latest
> vp> version before trying to fix stuff - it'll save you a lot of work.
> 
> Yes, I've checked a mirror before I started, and that one had -ac9 as
> latest. I'm using -ac15 right now, and a lot of things have become
> better.

Glad to hear that.

> vp> Note that you can't implement set_report the way you did, because
> vp> that'll of course break when multiple reports are being set
> vp> concurrently.
> 
> That's true. But, that's why I asked why you use usb_get_report, but
> not usb_set_report.

Maybe usb_get_report should be handled the same way, but there wasn't a
need for that yet. Also the sync approach makes life much simpler.

> vp> > Secondly, usb_get_report does return 0 for ok, and <0 for error, and
> vp> > not the length which hid.c assumes, i've fixed it in a patch. 
> vp> Are you absolutely sure? I've checked the sources and it returns length
> vp> of transfered data if OK and <0 if error.
> 
> Well, this is what I see:
> Jun 16 22:26:06 dwarf kernel: hid-core.c: reading report type 1 id 1 failed len 4 
>read 0
> 
> If I change the logic in hid_read_report to use 'my' logic, I get
> valid reports out of it...

Are you sure the reports are valid? My UPS and mouse and keyboard and
other devices, except for a Saitek joystick all return with the correct
data length of transferred data. The Saitek joystick returns 1, while it
should return 11.

> vp> Wow. Could you send me the descriptor dump for this device? Also, could
> vp> you try the (attached) latest version of the hid driver? It handles some
> vp> minor stuff around the interrupt endpoint differently ...
> 
> Yes, I'll try the attached version. BTW, very nice that unloading of
> hid works again (it didn't under ac9), it saves a lot of time
> debugging :-)
> 

Oh, I meant the interface/endpoint descriptors in /proc/bus/usb/devices.
Thanks for the report descriptor dump, too.

> vp> Fixed in later versions. 
> 
> Verified; it seems to return correct info on a FEATURE request.

Good.


By the way, looking at the report descriptor below, hid-input.c should
be able to handle this device and generate input events for it. Does it?
Did you try evtest?

> Jun 16 22:38:32 dwarf kernel: Application(GenericDesktop.Mouse) 
> Jun 16 22:38:32 dwarf kernel: Application(Digitizers.Digitizer) 
> Jun 16 22:38:32 dwarf kernel:   INPUT(1)[INPUT] 
> Jun 16 22:38:32 dwarf kernel:     Field(0) 
> Jun 16 22:38:32 dwarf kernel:       Usage(3) 
> Jun 16 22:38:32 dwarf kernel:         Button.0001 
> Jun 16 22:38:32 dwarf kernel:         Button.0002 
> Jun 16 22:38:32 dwarf kernel:         Button.0003 
> Jun 16 22:38:32 dwarf kernel:       Logical Minimum(0) 
> Jun 16 22:38:32 dwarf kernel:       Logical Maximum(1) 
> Jun 16 22:38:32 dwarf kernel:       Report Size(1) 
> Jun 16 22:38:32 dwarf kernel:       Report Count(3) 
> Jun 16 22:38:32 dwarf kernel:       Report Offset(0) 
> Jun 16 22:38:32 dwarf kernel:       Flags( Variable Absolute ) 
> Jun 16 22:38:32 dwarf kernel:     Field(1) 
> Jun 16 22:38:32 dwarf kernel:       Usage(2) 
> Jun 16 22:38:32 dwarf kernel:         GenericDesktop.X 
> Jun 16 22:38:32 dwarf kernel:         GenericDesktop.Y 
> Jun 16 22:38:32 dwarf kernel:       Logical Minimum(-127) 
> Jun 16 22:38:32 dwarf kernel:       Logical Maximum(127) 
> Jun 16 22:38:32 dwarf kernel:       Report Size(8) 
> Jun 16 22:38:32 dwarf kernel:       Report Count(2) 
> Jun 16 22:38:32 dwarf kernel:       Report Offset(8) 
> Jun 16 22:38:32 dwarf kernel:       Flags( Variable Relative ) 
> Jun 16 22:38:32 dwarf kernel:   INPUT(2)[INPUT] 
> Jun 16 22:38:32 dwarf kernel:     Field(0) 
> Jun 16 22:38:32 dwarf kernel:       Physical(Digitizers.Stylus) 
> Jun 16 22:38:32 dwarf kernel:       Usage(2) 
> Jun 16 22:38:32 dwarf kernel:         GenericDesktop.X 
> Jun 16 22:38:32 dwarf kernel:         GenericDesktop.Y 
> Jun 16 22:38:32 dwarf kernel:       Logical Minimum(0) 
> Jun 16 22:38:32 dwarf kernel:       Logical Maximum(12000) 
> Jun 16 22:38:32 dwarf kernel:       Report Size(16) 
> Jun 16 22:38:32 dwarf kernel:       Report Count(2) 
> Jun 16 22:38:32 dwarf kernel:       Report Offset(0) 
> Jun 16 22:38:32 dwarf kernel:       Flags( Variable Absolute ) 
> Jun 16 22:38:32 dwarf kernel:     Field(1) 
> Jun 16 22:38:32 dwarf kernel:       Physical(Digitizers.Stylus) 
> Jun 16 22:38:32 dwarf kernel:       Usage(5) 
> Jun 16 22:38:32 dwarf kernel:         Digitizers.InRange 
> Jun 16 22:38:32 dwarf kernel:         Digitizers.0037 
> Jun 16 22:38:32 dwarf kernel:         Digitizers.TipSwitch 
> Jun 16 22:38:32 dwarf kernel:         Digitizers.BarrelSwitch 
> Jun 16 22:38:32 dwarf kernel:         Digitizers.TabletPick 
> Jun 16 22:38:32 dwarf kernel:       Logical Minimum(0) 
> Jun 16 22:38:32 dwarf kernel:       Logical Maximum(1) 
> Jun 16 22:38:32 dwarf kernel:       Report Size(1) 
> Jun 16 22:38:32 dwarf kernel:       Report Count(5) 
> Jun 16 22:38:32 dwarf kernel:       Report Offset(32) 
> Jun 16 22:38:32 dwarf kernel:       Flags( Variable Absolute ) 
> Jun 16 22:38:32 dwarf kernel:     Field(2) 
> Jun 16 22:38:32 dwarf kernel:       Physical(Digitizers.Stylus) 
> Jun 16 22:38:32 dwarf kernel:       Usage(1) 
> Jun 16 22:38:32 dwarf kernel:         Digitizers.TipPressure 
> Jun 16 22:38:32 dwarf kernel:       Logical Minimum(0) 
> Jun 16 22:38:32 dwarf kernel:       Logical Maximum(1024) 
> Jun 16 22:38:32 dwarf kernel:       Report Size(16) 
> Jun 16 22:38:32 dwarf kernel:       Report Count(1) 
> Jun 16 22:38:32 dwarf kernel:       Report Offset(40) 
> Jun 16 22:38:32 dwarf kernel:       Flags( Variable Absolute NonLinear ) 
> Jun 16 22:38:32 dwarf kernel:   INPUT(3)[INPUT] 
> Jun 16 22:38:32 dwarf kernel:     Field(0) 
> Jun 16 22:38:32 dwarf kernel:       Physical(Digitizers.Puck) 
> Jun 16 22:38:32 dwarf kernel:       Usage(2) 
> Jun 16 22:38:32 dwarf kernel:         GenericDesktop.X 
> Jun 16 22:38:32 dwarf kernel:         GenericDesktop.Y 
> Jun 16 22:38:32 dwarf kernel:       Logical Minimum(0) 
> Jun 16 22:38:32 dwarf kernel:       Logical Maximum(12000) 
> Jun 16 22:38:32 dwarf kernel:       Report Size(16) 
> Jun 16 22:38:32 dwarf kernel:       Report Count(2) 
> Jun 16 22:38:32 dwarf kernel:       Report Offset(0) 
> Jun 16 22:38:32 dwarf kernel:       Flags( Variable Absolute ) 
> Jun 16 22:38:32 dwarf kernel:     Field(1) 
> Jun 16 22:38:32 dwarf kernel:       Physical(Digitizers.Puck) 
> Jun 16 22:38:32 dwarf kernel:       Usage(2) 
> Jun 16 22:38:32 dwarf kernel:         Digitizers.InRange 
> Jun 16 22:38:32 dwarf kernel:         Digitizers.0037 
> Jun 16 22:38:32 dwarf kernel:       Logical Minimum(0) 
> Jun 16 22:38:32 dwarf kernel:       Logical Maximum(1) 
> Jun 16 22:38:32 dwarf kernel:       Report Size(1) 
> Jun 16 22:38:32 dwarf kernel:       Report Count(2) 
> Jun 16 22:38:32 dwarf kernel:       Report Offset(32) 
> Jun 16 22:38:32 dwarf kernel:       Flags( Variable Absolute ) 
> Jun 16 22:38:32 dwarf kernel:     Field(2) 
> Jun 16 22:38:32 dwarf kernel:       Physical(Digitizers.Puck) 
> Jun 16 22:38:32 dwarf kernel:       Usage(3) 
> Jun 16 22:38:32 dwarf kernel:         Button.0001 
> Jun 16 22:38:32 dwarf kernel:         Button.0002 
> Jun 16 22:38:32 dwarf kernel:         Button.0003 
> Jun 16 22:38:32 dwarf kernel:       Logical Minimum(0) 
> Jun 16 22:38:32 dwarf kernel:       Logical Maximum(1) 
> Jun 16 22:38:32 dwarf kernel:       Report Size(1) 
> Jun 16 22:38:32 dwarf kernel:       Report Count(3) 
> Jun 16 22:38:32 dwarf kernel:       Report Offset(34) 
> Jun 16 22:38:32 dwarf kernel:       Flags( Variable Absolute ) 
> Jun 16 22:38:32 dwarf kernel:   INPUT(6)[INPUT] 
> Jun 16 22:38:32 dwarf kernel:     Field(0) 
> Jun 16 22:38:32 dwarf kernel:       Physical(Digitizers.TabletFunctionKey) 
> Jun 16 22:38:32 dwarf kernel:       Usage(16) 
> Jun 16 22:38:32 dwarf kernel:         Button.0001 
> Jun 16 22:38:32 dwarf kernel:         Button.0002 
> Jun 16 22:38:32 dwarf kernel:         Button.0003 
> Jun 16 22:38:32 dwarf kernel:         Button.0004 
> Jun 16 22:38:32 dwarf kernel:         Button.0005 
> Jun 16 22:38:32 dwarf kernel:         Button.0006 
> Jun 16 22:38:32 dwarf kernel:         Button.0007 
> Jun 16 22:38:32 dwarf kernel:         Button.0008 
> Jun 16 22:38:32 dwarf kernel:         Button.0009 
> Jun 16 22:38:32 dwarf kernel:         Button.000a 
> Jun 16 22:38:32 dwarf kernel:         Button.000b 
> Jun 16 22:38:32 dwarf kernel:         Button.000c 
> Jun 16 22:38:32 dwarf kernel:         Button.000d 
> Jun 16 22:38:32 dwarf kernel:         Button.000e 
> Jun 16 22:38:32 dwarf kernel:         Button.000f 
> Jun 16 22:38:32 dwarf kernel:         Button.0010 
> Jun 16 22:38:32 dwarf kernel:       Logical Minimum(0) 
> Jun 16 22:38:32 dwarf kernel:       Logical Maximum(1) 
> Jun 16 22:38:32 dwarf kernel:       Report Size(1) 
> Jun 16 22:38:32 dwarf kernel:       Report Count(16) 
> Jun 16 22:38:32 dwarf kernel:       Report Offset(0) 
> Jun 16 22:38:32 dwarf kernel:       Flags( Variable Absolute ) 
> Jun 16 22:38:32 dwarf kernel:   INPUT(4)[INPUT] 
> Jun 16 22:38:32 dwarf kernel:     Field(0) 
> Jun 16 22:38:32 dwarf kernel:       Physical(Digitizers.Stylus) 
> Jun 16 22:38:32 dwarf kernel:       Usage(5) 
> Jun 16 22:38:32 dwarf kernel:         Digitizers.InRange 
> Jun 16 22:38:32 dwarf kernel:         Digitizers.0037 
> Jun 16 22:38:32 dwarf kernel:         Digitizers.TipSwitch 
> Jun 16 22:38:32 dwarf kernel:         Digitizers.BarrelSwitch 
> Jun 16 22:38:32 dwarf kernel:         Digitizers.TabletPick 
> Jun 16 22:38:32 dwarf kernel:       Logical Minimum(0) 
> Jun 16 22:38:32 dwarf kernel:       Logical Maximum(1) 
> Jun 16 22:38:32 dwarf kernel:       Report Size(1) 
> Jun 16 22:38:32 dwarf kernel:       Report Count(5) 
> Jun 16 22:38:32 dwarf kernel:       Report Offset(0) 
> Jun 16 22:38:32 dwarf kernel:       Flags( Variable Absolute ) 
> Jun 16 22:38:32 dwarf kernel:     Field(1) 
> Jun 16 22:38:32 dwarf kernel:       Physical(Digitizers.Stylus) 
> Jun 16 22:38:32 dwarf kernel:       Usage(4) 
> Jun 16 22:38:32 dwarf kernel:         GenericDesktop.D-padDown 
> Jun 16 22:38:32 dwarf kernel:         GenericDesktop.D-padUp 
> Jun 16 22:38:32 dwarf kernel:         GenericDesktop.D-padLeft 
> Jun 16 22:38:32 dwarf kernel:         GenericDesktop.D-padRight 
> Jun 16 22:38:32 dwarf kernel:       Logical Minimum(0) 
> Jun 16 22:38:32 dwarf kernel:       Logical Maximum(1) 
> Jun 16 22:38:32 dwarf kernel:       Report Size(1) 
> Jun 16 22:38:32 dwarf kernel:       Report Count(4) 
> Jun 16 22:38:32 dwarf kernel:       Report Offset(8) 
> Jun 16 22:38:32 dwarf kernel:       Flags( Variable Absolute ) 
> Jun 16 22:38:32 dwarf kernel:     Field(2) 
> Jun 16 22:38:32 dwarf kernel:       Physical(Digitizers.Stylus) 
> Jun 16 22:38:32 dwarf kernel:       Usage(1) 
> Jun 16 22:38:32 dwarf kernel:         GenericDesktop.HatSwitch 
> Jun 16 22:38:32 dwarf kernel:       Logical Minimum(0) 
> Jun 16 22:38:32 dwarf kernel:       Logical Maximum(128) 
> Jun 16 22:38:32 dwarf kernel:       Report Size(8) 
> Jun 16 22:38:32 dwarf kernel:       Report Count(1) 
> Jun 16 22:38:32 dwarf kernel:       Report Offset(16) 
> Jun 16 22:38:32 dwarf kernel:       Flags( Variable Absolute ) 
> Jun 16 22:38:32 dwarf kernel:     Field(3) 
> Jun 16 22:38:32 dwarf kernel:       Physical(Digitizers.Stylus) 
> Jun 16 22:38:32 dwarf kernel:       Usage(1) 
> Jun 16 22:38:32 dwarf kernel:         Digitizers.TipPressure 
> Jun 16 22:38:32 dwarf kernel:       Logical Minimum(0) 
> Jun 16 22:38:32 dwarf kernel:       Logical Maximum(1024) 
> Jun 16 22:38:32 dwarf kernel:       Report Size(16) 
> Jun 16 22:38:32 dwarf kernel:       Report Count(1) 
> Jun 16 22:38:32 dwarf kernel:       Report Offset(24) 
> Jun 16 22:38:32 dwarf kernel:       Flags( Variable Absolute NonLinear ) 
> Jun 16 22:38:32 dwarf kernel:   INPUT(5)[INPUT] 
> Jun 16 22:38:33 dwarf kernel:     Field(0) 
> Jun 16 22:38:33 dwarf kernel:       Physical(Digitizers.Puck) 
> Jun 16 22:38:33 dwarf kernel:       Usage(2) 
> Jun 16 22:38:33 dwarf kernel:         Digitizers.InRange 
> Jun 16 22:38:33 dwarf kernel:         Digitizers.0037 
> Jun 16 22:38:33 dwarf kernel:       Logical Minimum(0) 
> Jun 16 22:38:33 dwarf kernel:       Logical Maximum(1) 
> Jun 16 22:38:33 dwarf kernel:       Report Size(1) 
> Jun 16 22:38:33 dwarf kernel:       Report Count(2) 
> Jun 16 22:38:33 dwarf kernel:       Report Offset(0) 
> Jun 16 22:38:33 dwarf kernel:       Flags( Variable Absolute ) 
> Jun 16 22:38:33 dwarf kernel:     Field(1) 
> Jun 16 22:38:33 dwarf kernel:       Physical(Digitizers.Puck) 
> Jun 16 22:38:33 dwarf kernel:       Usage(3) 
> Jun 16 22:38:33 dwarf kernel:         Button.0001 
> Jun 16 22:38:33 dwarf kernel:         Button.0002 
> Jun 16 22:38:33 dwarf kernel:         Button.0003 
> Jun 16 22:38:33 dwarf kernel:       Logical Minimum(0) 
> Jun 16 22:38:33 dwarf kernel:       Logical Maximum(1) 
> Jun 16 22:38:33 dwarf kernel:       Report Size(1) 
> Jun 16 22:38:33 dwarf kernel:       Report Count(3) 
> Jun 16 22:38:33 dwarf kernel:       Report Offset(2) 
> Jun 16 22:38:33 dwarf kernel:       Flags( Variable Absolute ) 
> Jun 16 22:38:33 dwarf kernel:     Field(2) 
> Jun 16 22:38:33 dwarf kernel:       Physical(Digitizers.Puck) 
> Jun 16 22:38:33 dwarf kernel:       Usage(4) 
> Jun 16 22:38:33 dwarf kernel:         GenericDesktop.D-padDown 
> Jun 16 22:38:33 dwarf kernel:         GenericDesktop.D-padUp 
> Jun 16 22:38:33 dwarf kernel:         GenericDesktop.D-padLeft 
> Jun 16 22:38:33 dwarf kernel:         GenericDesktop.D-padRight 
> Jun 16 22:38:33 dwarf kernel:       Logical Minimum(0) 
> Jun 16 22:38:33 dwarf kernel:       Logical Maximum(1) 
> Jun 16 22:38:33 dwarf kernel:       Report Size(1) 
> Jun 16 22:38:33 dwarf kernel:       Report Count(4) 
> Jun 16 22:38:33 dwarf kernel:       Report Offset(8) 
> Jun 16 22:38:33 dwarf kernel:       Flags( Variable Absolute ) 
> Jun 16 22:38:33 dwarf kernel:     Field(3) 
> Jun 16 22:38:33 dwarf kernel:       Physical(Digitizers.Puck) 
> Jun 16 22:38:33 dwarf kernel:       Usage(1) 
> Jun 16 22:38:33 dwarf kernel:         GenericDesktop.HatSwitch 
> Jun 16 22:38:33 dwarf kernel:       Logical Minimum(0) 
> Jun 16 22:38:33 dwarf kernel:       Logical Maximum(128) 
> Jun 16 22:38:33 dwarf kernel:       Report Size(8) 
> Jun 16 22:38:33 dwarf kernel:       Report Count(1) 
> Jun 16 22:38:33 dwarf kernel:       Report Offset(16) 
> Jun 16 22:38:33 dwarf kernel:       Flags( Variable Absolute ) 
> Jun 16 22:38:33 dwarf kernel:   FEATURE(2)[FEATURE] 
> Jun 16 22:38:33 dwarf kernel:     Field(0) 
> Jun 16 22:38:33 dwarf kernel:       Physical(Digitizers.Stylus) 
> Jun 16 22:38:33 dwarf kernel:       Usage(2) 
> Jun 16 22:38:33 dwarf kernel:         Digitizers.003f 
> Jun 16 22:38:33 dwarf kernel:         Digitizers.0040 
> Jun 16 22:38:33 dwarf kernel:       Logical Minimum(0) 
> Jun 16 22:38:33 dwarf kernel:       Logical Maximum(255) 
> Jun 16 22:38:33 dwarf kernel:       Report Size(8) 
> Jun 16 22:38:33 dwarf kernel:       Report Count(2) 
> Jun 16 22:38:33 dwarf kernel:       Report Offset(0) 
> Jun 16 22:38:33 dwarf kernel:       Flags( Variable Absolute ) 

-- 
Vojtech Pavlik
SuSE Labs

_______________________________________________
[EMAIL PROTECTED]
To unsubscribe, use the last form field at:
http://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to