More information Re: [Nut-upsdev] TrippLite OMNI1000LCD hiddev

Peter Selinger selinger at mathstat.dal.ca
Mon Nov 7 18:54:49 UTC 2005


Peter Selinger wrote:
> Joel Peshkin wrote:
> > By the way, this is on a ubuntu (breezy) system fwiw, but I switched to 
> > a fresh cvs checkout of nut to debug.
> > 
> > # /usr/local/ups/bin/newhidups -uroot -x vendorid=09AE -x generic -DD
> > Network UPS Tools: New USB/HID UPS driver 0.28 (2.1.0)
> > 
> > debug level is '2'
> > ...
> > Checking device (09AE/2005) (001/003)
> > - VendorID: 09ae
> > - ProductID: 2005
> > - Manufacturer: Tripp Lite
> > - Product: TRIPP LITE UPS
> > - Serial Number: 692185 A
> > - Bus: 001
> > Trying to match device
> > Device matches
> > HID descriptor retrieved (Reportlen = 459)
> > Unable to get Report descriptor (-75)
> 
> Aha. Now we are getting closer. Hm. Why does it say "descriptor
> retrieved" and then "unable to get descriptor"? I'll have to look at
> this later when I have time. Have to run to a class right now.

Oops, a "HID descriptor" and a "Report descriptor" are not the same
thing. My mistake. The "HID descriptor" contains the length of the
"Report descriptor", in this case given as 459.

The error code (75) means: EOVERFLOW (Value too large for defined data
type). I believe this means that the UPS refuses to fit the report
descriptor into 459 bytes, despite having previously announced that it
is 459 bytes long. Could be a firmware error. 

Joel, please try the following: in the file drivers/libusb.c, on line
ca. 231, in the call

 res = usb_control_msg(udev, USB_ENDPOINT_IN+1, USB_REQ_GET_DESCRIPTOR,
                       (USB_DT_REPORT << 8) + 0, 0, ReportDesc,
                       desc->wDescriptorLength, USB_TIMEOUT);

replace "desc->wDescriptorLength" by "desc->wDescriptorLength+1000",
and see if this makes any difference. In this case, you should also
replace "return desc->wDescriptorLength;" on line ca. 240 by "return
res".

-- Peter



More information about the Nut-upsdev mailing list