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.
 
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.

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...

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 :-)

vp> Fixed in later versions. 

Verified; it seems to return correct info on a FEATURE request.
 
Grtz
EJ

Jun 16 22:38:32 dwarf kernel: hid-core.c: report descriptor (size 390, read 390) =  05 
01 09 02 a1 01 85 01 05 09 19 01 29 03 15 00 25 01 95 03 75 01 81 02 95 01 75 05 81 01 
05 01 09 30 09 31 15 81 25 7f 75 08 95 02 81 06 c0 05 0d 09 01 a1 01 85 02 09 20 a1 00 
05 01 15 00 26 e0 2e 09 30 09 31 75 10 95 02 81 02 05 0d 09 32 09 37 09 42 09 44 09 46 
15 00 25 01 75 01 95 05 81 02 75 03 95 01 81 01 09 30 15 00 26 00 04 75 10 95 01 81 12 
09 3f 09 40 15 00 26 ff 00 75 08 95 02 b1 02 c0 85 03 09 21 a1 00 05 01 09 30 09 31 15 
00 26 e0 2e 75 10 95 02 81 02 05 0d 09 32 09 37 15 00 25 01 75 01 95 02 81 02 05 09 19 
01 29 03 15 00 25 01 75 01 95 03 81 02 75 03 95 01 81 01 c0 85 06 05 0d 09 39 a1 00 05 
09 19 01 29 10 15 00 25 01 75 01 95 10 81 02 c0 85 04 05 0d 09 20 a1 00 09 32 09 37 09 
42 09 44 09 46 15 00 25 01 75 01 95 05 81 02 75 03 95 01 81 01 05 01 09 91 09 90 09 93 
09 92 15 00 25 01 75 01 95 04 81 02 75 04 95 01 81 01 09 39 15 00 26 80 00 75 08 95 01 
81 02 05 0d 09 30 15 00 26 00 04 75 10 95 01 81 12 c0 85 05 05 0d 09
Jun 16 22:38:32 dwarf kernel: 21 a1 00 09 32 09 37 15 00 25 01 75 01 95 02 81 02 05 09 
19 01 29 03 75 01 95 03 81 02 75 03 95 01 81 01 05 01 09 91 09 90 09 93 09 92 15 00 25 
01 75 01 95 04 81 02 75 04 95 01 81 01 09 39 15 00 26 80 00 75 08 95 01 81 02 c0 c0 
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 ) 

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

Reply via email to