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
