On Jan 13, 2009, at 3:44 AM, [email protected] wrote: > Hello > > My device is an usb barcode scanner. It works in 2 modes: simulates > usb keyboard or acts like usb2serial device (general hid). I use it > in mode 2 as > general hid device. > I used raw hid under linux and was able to read interrupt reports and > used function ioctl(HIDIOCGUSAGES,...) to retrieve all the array of > usages (about 63 values)...
If you send me some pointers to the "raw hid" API, I will take a look at it. I am in the process of rewriting the libhid backend to not be tied to just raw libusb calls. > > Now I am using libhid. I receive interrupt reports without problems > but how to get array of usages???? > > hid_get_input_report with path 0xff03c00, 0xff030d03, 0xff030022 > or 0xff03c00, 0xff030d03, 0xff030050 with lengths (1,63,64) fails > with code 20. The error code is meant to be somewhat generic. (You can look up the message name with hid_strerror(), by the way). What is usually more interesting is the trace messages, as they tell you what operations succeeded and failed. > My hidtrace and related info: > > Device Descriptor: > bLength 18 > bDescriptorType 1 > bcdUSB 2.00 > bDeviceClass 0 (Defined at Interface level) > bDeviceSubClass 0 > bDeviceProtocol 0 > bMaxPacketSize0 16 > idVendor 0x05e0 Symbol Technologies > idProduct 0x0600 > bcdDevice 2.01 > iManufacturer 1 ?Symbol Technologies, Inc, 2002 > iProduct 2 Symbol Bar Code Scanner > iSerial 3 S/N:1BBFACCB09D4 Rev:NBRMIAAU5 > bNumConfigurations 1 > Configuration Descriptor: > bLength 9 > bDescriptorType 2 > wTotalLength 34 > bNumInterfaces 1 > bConfigurationValue 1 > iConfiguration 4 Bus Powered > bmAttributes 0x80 > (Bus Powered) > MaxPower 400mA > Interface Descriptor: > bLength 9 > bDescriptorType 4 > bInterfaceNumber 0 > bAlternateSetting 0 > bNumEndpoints 1 > bInterfaceClass 3 Human Interface Devices > bInterfaceSubClass 1 Boot Interface Subclass > bInterfaceProtocol 1 Keyboard > iInterface 0 > HID Device Descriptor: > bLength 9 > bDescriptorType 33 > bcdHID 1.10 > bCountryCode 0 Not supported > bNumDescriptors 1 > bDescriptorType 34 Report > wDescriptorLength 40 > Report Descriptor: (length is 40) > Item(Global): Usage Page, data= [ 0x03 0xff ] 65283 > (null) > Item(Local ): Usage, data= [ 0x00 0x0c ] 3072 > (null) > Item(Main ): Collection, data= [ 0x01 ] 1 > Application > Item(Local ): Usage, data= [ 0x03 0x0d ] 3331 > (null) > Item(Main ): Collection, data= [ 0x02 ] 2 > Logical > Item(Global): Report Size, data= [ 0x08 ] 8 > Item(Global): Report Count, data= [ 0x01 ] 1 > Item(Global): Logical Minimum, data= [ 0x00 ] 0 > Item(Global): Logical Maximum, data= [ 0x3f ] 63 > Item(Local ): Usage, data= [ 0x50 ] 80 > (null) > Item(Main ): Input, data= [ 0x02 ] 2 > Data Variable Absolute No_Wrap Linear > Preferred_State No_Null_Position > Non_Volatile Bitfield > Item(Global): Report Size, data= [ 0x08 ] 8 > Item(Global): Report Count, data= [ 0x3f ] 63 > Item(Global): Logical Minimum, data= [ 0x00 ] 0 > Item(Global): Logical Maximum, data= [ 0xff 0x00 ] 255 > Item(Local ): Usage, data= [ 0x22 ] 34 > (null) > Item(Main ): Input, data= [ 0x00 ] 0 > Data Array Absolute No_Wrap Linear > Preferred_State No_Null_Position > Non_Volatile Bitfield > Item(Main ): End Collection, data=none > Item(Main ): End Collection, data=none > Endpoint Descriptor: > bLength 7 > bDescriptorType 5 > bEndpointAddress 0x82 EP 2 IN > bmAttributes 3 > Transfer Type Interrupt > Synch Type None > Usage Type Data > wMaxPacketSize 0x0040 1x 64 bytes > bInterval 10 > Device Status: 0x0000 > (Bus Powered) > > TRACE: hid_dump_tree(): iterating the parse tree for USB device > 003/030[0]... > parse tree of HIDInterface 003/030[0]: > path: 0xff030c00.0xff030d03.0xff030050; type: 0x80 > path: 0xff030c00.0xff030d03.0xff030022; type: 0x80 It looks like you would use 0xff030c00.0xff030d03.0xff030022 with length 63. I haven't checked recently, but I think libhid discards the rest of the buffer if you only request one item from a report. You could also try hid_get_input_report(), passing in the length of the whole report (looks to be 64) if you know you need both items. > path: 0xff030c00.0xff030d03.0x00000000; type: 0x80 > path: 0xff030c00.0xff030d03.0x00000000; type: 0x80 > path: 0xff030c00.0xff030d03.0x00000000; type: 0x80 > path: 0xff030c00.0xff030d03.0x00000000; type: 0x80 > path: 0xff030c00.0xff030d03.0x00000000; type: 0x80 > path: 0xff030c00.0xff030d03.0x00000000; type: 0x80 > path: 0xff030c00.0xff030d03.0x00000000; type: 0x80 > path: 0xff030c00.0xff030d03.0x00000000; type: 0x80 > path: 0xff030c00.0xff030d03.0x00000000; type: 0x80 > path: 0xff030c00.0xff030d03.0x00000000; type: 0x80 > path: 0xff030c00.0xff030d03.0x00000000; type: 0x80 > path: 0xff030c00.0xff030d03.0x00000000; type: 0x80 > path: 0xff030c00.0xff030d03.0x00000000; type: 0x80 > path: 0xff030c00.0xff030d03.0x00000000; type: 0x80 > path: 0xff030c00.0xff030d03.0x00000000; type: 0x80 > path: 0xff030c00.0xff030d03.0x00000000; type: 0x80 > path: 0xff030c00.0xff030d03.0x00000000; type: 0x80 > path: 0xff030c00.0xff030d03.0x00000000; type: 0x80 > path: 0xff030c00.0xff030d03.0x00000000; type: 0x80 > path: 0xff030c00.0xff030d03.0x00000000; type: 0x80 > path: 0xff030c00.0xff030d03.0x00000000; type: 0x80 > path: 0xff030c00.0xff030d03.0x00000000; type: 0x80 > path: 0xff030c00.0xff030d03.0x00000000; type: 0x80 > path: 0xff030c00.0xff030d03.0x00000000; type: 0x80 > path: 0xff030c00.0xff030d03.0x00000000; type: 0x80 > path: 0xff030c00.0xff030d03.0x00000000; type: 0x80 > path: 0xff030c00.0xff030d03.0x00000000; type: 0x80 > path: 0xff030c00.0xff030d03.0x00000000; type: 0x80 > path: 0xff030c00.0xff030d03.0x00000000; type: 0x80 > path: 0xff030c00.0xff030d03.0x00000000; type: 0x80 > path: 0xff030c00.0xff030d03.0x00000000; type: 0x80 > path: 0xff030c00.0xff030d03.0x00000000; type: 0x80 > path: 0xff030c00.0xff030d03.0x00000000; type: 0x80 > path: 0xff030c00.0xff030d03.0x00000000; type: 0x80 > path: 0xff030c00.0xff030d03.0x00000000; type: 0x80 > path: 0xff030c00.0xff030d03.0x00000000; type: 0x80 > path: 0xff030c00.0xff030d03.0x00000000; type: 0x80 > path: 0xff030c00.0xff030d03.0x00000000; type: 0x80 > path: 0xff030c00.0xff030d03.0x00000000; type: 0x80 > path: 0xff030c00.0xff030d03.0x00000000; type: 0x80 > path: 0xff030c00.0xff030d03.0x00000000; type: 0x80 > path: 0xff030c00.0xff030d03.0x00000000; type: 0x80 > path: 0xff030c00.0xff030d03.0x00000000; type: 0x80 > path: 0xff030c00.0xff030d03.0x00000000; type: 0x80 > path: 0xff030c00.0xff030d03.0x00000000; type: 0x80 > path: 0xff030c00.0xff030d03.0x00000000; type: 0x80 > path: 0xff030c00.0xff030d03.0x00000000; type: 0x80 > path: 0xff030c00.0xff030d03.0x00000000; type: 0x80 > path: 0xff030c00.0xff030d03.0x00000000; type: 0x80 > path: 0xff030c00.0xff030d03.0x00000000; type: 0x80 > path: 0xff030c00.0xff030d03.0x00000000; type: 0x80 > path: 0xff030c00.0xff030d03.0x00000000; type: 0x80 > path: 0xff030c00.0xff030d03.0x00000000; type: 0x80 > path: 0xff030c00.0xff030d03.0x00000000; type: 0x80 > path: 0xff030c00.0xff030d03.0x00000000; type: 0x80 > path: 0xff030c00.0xff030d03.0x00000000; type: 0x80 > path: 0xff030c00.0xff030d03.0x00000000; type: 0x80 > path: 0xff030c00.0xff030d03.0x00000000; type: 0x80 > path: 0xff030c00.0xff030d03.0x00000000; type: 0x80 > path: 0xff030c00.0xff030d03.0x00000000; type: 0x80 > path: 0xff030c00.0xff030d03.0x00000000; type: 0x80 > path: 0xff030c00.0xff030d03.0x00000000; type: 0x80 > > > > > ----------------------------------------------------- > > > Best regards, > Serge. > > > _______________________________________________ > libhid-discuss mailing list > [email protected] > http://lists.alioth.debian.org/mailman/listinfo/libhid-discuss > http://libhid.alioth.debian.org/ _______________________________________________ libhid-discuss mailing list [email protected] http://lists.alioth.debian.org/mailman/listinfo/libhid-discuss http://libhid.alioth.debian.org/

