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
