[Nut-upsuser] Gentoo Ultra USB UPS

Peter Selinger selinger at mathstat.dal.ca
Wed Aug 2 14:46:12 UTC 2006


Hi Barry, Jonathan, etc,

I just caught up with this thread. Yes, I agree with Jonathan's
diagnosis that this might be a HID device, although it is not 100%
sure. The many "Input" features make me suspicious that it could still
be a fancy serial-over-USB. 

[ A general remark to anyone on this mailing list: please don't keep
recommending "-DDD" or even "-DDDDD" to people. This produces hundreds
of lines of clunky and completely useless debugging output generally
unsuitable for posting to the list. Please stick with "-DD", which
produces what is needed. Unless there is a specific piece of debugging
output that you know you want to see, "-DDD" is never what you
want. ].

Here is the cleaned-up usage tree for this device:

(0d9f/0001)
Path: 00020004.00020086, Type: Feature, Value: 130.000000
Path: 00020004.00020087, Type: Feature, Value: 4.000000
Path: 00020004.00020083, Type: Input
Path: 00020004.00020085, Type: Input
Path: 00020004.00020010.00020036, Type: Input
Path: 00020004.00020010.00020030, Type: Input
Path: 00020004.00020010.00020084, Type: Input
Path: 00020004.00020016.0002001a.00020032, Type: Input
Path: 00020004.00020016.0002001a.00020030, Type: Input
Path: 00020004.00020016.0002001c.00020030, Type: Input
Path: 00020004.00020016.0002001c.00020035, Type: Input
Path: 00020004.00020016.0002001c.00020081, Type: Input
Path: 00020004.00020016.0002001c.00020082, Type: Input
Path: 00020004.00020016.0002001c.00020032, Type: Input
Path: 00020004.00020016.00020058, Type: Feature, Value: 1.000000
Path: 00020004.00020016.00020068, Type: Feature, Value: 2.000000
Path: 00020004.00020016.00020057, Type: Feature, Value: 0.000000
Path: 00020004.00020016.00020056, Type: Feature, Value: 0.000000

This does not look too complex. 00020004.00020086 looks like a
voltage. The rest of the features (00020004.00020087,
00020004.00020016.00020058 -- 00020004.00020016.00020056) could be
flags (bitwise values for low battery etc). 

The only way to find out for sure (besides getting info from the
manufacturer) would be to set up a skeleton subdriver (that basically
reports the values without interpreting them), then see how the above
values change in response to various conditions (power variations,
pull power chord, low battery, on battery, battery charging,
self-test, etc).

The many paths of type "Input" will be harder to decode, but perhaps
they can be ignored altogether.

-- Peter

Barry Fawthrop wrote:
> 
> Ok I have install the trunk version in /svn/trunk and ran it's newhidups
> drivers/newhidups
> here is what I get and it scrolls
> 
> drivers/newhidups -DDD -u root -x generic -x vendorid=0d9f auto
> Network UPS Tools: 0.28 USB communication driver 0.28 - core 0.30 (2.1.0)
> 
>  ProductID: 0001
> - Manufacturer: unknown
> - Product: unknown
> - Serial Number: unknown
> - Bus: 001
> Trying to match device
> Device matches
> HID descriptor retrieved (Reportlen = 175)
> Report descriptor retrieved (Reportlen = 175)
> Found HID device
> Report Descriptor size = 175
> Report Descriptor: (200 bytes) => 05 02 09 04 A1 01 05 02 85 07 95 01 75 
> 08 15 00
> Detected a UPS: unknown/unknown
> Using subdriver: GENERIC HID 0.1
> Looking up 00020004
> Looking up 00020086
> entering string_to_path()
> Looking up 00020004
> Looking up 00020086
> Report : (2 bytes) => 07 82
> Path: 00020004.00020086, Type: Feature, Value: 130.000000
> Looking up 00020004
> Looking up 00020087
> entering string_to_path()
> Looking up 00020004
> Looking up 00020087
> Report : (2 bytes) => 08 04
> Path: 00020004.00020087, Type: Feature, Value: 4.000000
> Looking up 00020004
> Looking up 00020083
> entering string_to_path()
> Looking up 00020004
> Looking up 00020083
> Can't find object 00020004.00020083
> Path: 00020004.00020083, Type: Input
> Looking up 00020004
> Looking up 00020085
> entering string_to_path()
> Looking up 00020004
> Looking up 00020085
> Can't find object 00020004.00020085
> Path: 00020004.00020085, Type: Input
> Looking up 00020004
> Looking up 00020010
> Looking up 00020036
> entering string_to_path()
> Looking up 00020004
> Looking up 00020010
> Looking up 00020036
> Can't find object 00020004.00020010.00020036
> Path: 00020004.00020010.00020036, Type: Input
> Looking up 00020004
> Looking up 00020010
> Looking up 00020030
> entering string_to_path()
> Looking up 00020004
> Looking up 00020010
> Looking up 00020030
> Can't find object 00020004.00020010.00020030
> Path: 00020004.00020010.00020030, Type: Input
> Looking up 00020004
> Looking up 00020010
> Looking up 00020084
> entering string_to_path()
> Looking up 00020004
> Looking up 00020010
> Looking up 00020084
> Can't find object 00020004.00020010.00020084
> Path: 00020004.00020010.00020084, Type: Input
> Looking up 00020004
> Looking up 00020016
> Looking up 0002001a
> Looking up 00020032
> entering string_to_path()
> Looking up 00020004
> Looking up 00020016
> Looking up 0002001a
> Looking up 00020032
> Can't find object 00020004.00020016.0002001a.00020032
> Path: 00020004.00020016.0002001a.00020032, Type: Input
> Looking up 00020004
> Looking up 00020016
> Looking up 0002001a
> Looking up 00020030
> entering string_to_path()
> Looking up 00020004
> Looking up 00020016
> Looking up 0002001a
> Looking up 00020030
> Can't find object 00020004.00020016.0002001a.00020030
> Path: 00020004.00020016.0002001a.00020030, Type: Input
> Looking up 00020004
> Looking up 00020016
> Looking up 0002001c
> Looking up 00020030
> entering string_to_path()
> Looking up 00020004
> Looking up 00020016
> Looking up 0002001c
> Looking up 00020030
> Can't find object 00020004.00020016.0002001c.00020030
> Path: 00020004.00020016.0002001c.00020030, Type: Input
> Looking up 00020004
> Looking up 00020016
> Looking up 0002001c
> Looking up 00020035
> entering string_to_path()
> Looking up 00020004
> Looking up 00020016
> Looking up 0002001c
> Looking up 00020035
> Can't find object 00020004.00020016.0002001c.00020035
> Path: 00020004.00020016.0002001c.00020035, Type: Input
> Looking up 00020004
> Looking up 00020016
> Looking up 0002001c
> Looking up 00020081
> entering string_to_path()
> Looking up 00020004
> Looking up 00020016
> Looking up 0002001c
> Looking up 00020081
> Can't find object 00020004.00020016.0002001c.00020081
> Path: 00020004.00020016.0002001c.00020081, Type: Input
> Looking up 00020004
> Looking up 00020016
> Looking up 0002001c
> Looking up 00020082
> entering string_to_path()
> Looking up 00020004
> Looking up 00020016
> Looking up 0002001c
> Looking up 00020082
> Can't find object 00020004.00020016.0002001c.00020082
> Path: 00020004.00020016.0002001c.00020082, Type: Input
> Looking up 00020004
> Looking up 00020016
> Looking up 0002001c
> Looking up 00020032
> entering string_to_path()
> Looking up 00020004
> Looking up 00020016
> Looking up 0002001c
> Looking up 00020032
> Can't find object 00020004.00020016.0002001c.00020032
> Path: 00020004.00020016.0002001c.00020032, Type: Input
> Looking up 00020004
> Looking up 00020016
> Looking up 00020058
> entering string_to_path()
> Looking up 00020004
> Looking up 00020016
> Looking up 00020058
> Report : (2 bytes) => 05 01
> Path: 00020004.00020016.00020058, Type: Feature, Value: 1.000000
> Looking up 00020004
> Looking up 00020016
> Looking up 00020068
> entering string_to_path()
> Looking up 00020004
> Looking up 00020016
> Looking up 00020068
> Report : (2 bytes) => 02 00
> Path: 00020004.00020016.00020068, Type: Feature, Value: 2.000000
> Looking up 00020004
> Looking up 00020016
> Looking up 00020057
> entering string_to_path()
> Looking up 00020004
> Looking up 00020016
> Looking up 00020057
> Report : (2 bytes) => 04 00
> Path: 00020004.00020016.00020057, Type: Feature, Value: 0.000000
> Looking up 00020004
> Looking up 00020016
> Looking up 00020056
> entering string_to_path()
> Looking up 00020004
> Looking up 00020016
> Looking up 00020056
> Report : (4 bytes) => 06 00 00 00
> Path: 00020004.00020016.00020056, Type: Feature, Value: 0.000000
> entering identify_ups(0x0d9f, 0x0001)
> 
> upsdrv_updateinfo...
> dstate_init: sock /var/run/nut/newhidups-auto open on fd 5
> upsdrv_updateinfo...
> Waiting for notifications...
> Notification: (20 bytes) => 01 FF 63 00 64 7A 6E 6A 01 FF 63 00 64 7A 6E 6A
> entering path_to_string()
> Looking up 00020083
> Object: UPS.00020083 = 255
> entering path_to_string()
> Looking up 00020085
> Object: UPS.00020085 = 99
> entering path_to_string()
> Looking up 00020010
> Looking up 00020036
> Object: UPS.00020010.00020036 = 0
> entering path_to_string()
> Looking up 00020010
> Looking up 00020030
> Object: UPS.00020010.00020030 = 100
> entering path_to_string()
> Looking up 00020010
> Looking up 00020084
> Object: UPS.00020010.00020084 = 6975098
> upsdrv_updateinfo...
> Waiting for notifications...
> Notification: (20 bytes) => 03 3C 1C 1C 18 40 40 3C 01 FF 63 00 64 7A 6E 6A
> entering path_to_string()
> Looking up 00020016
> Looking up 0002001a
> Looking up 00020032
> Object: UPS.00020016.0002001a.00020032 = 60
> entering path_to_string()
> Looking up 00020016
> Looking up 0002001a
> Looking up 00020030
> Object: UPS.00020016.0002001a.00020030 = 28
> entering path_to_string()
> Looking up 00020016
> Looking up 0002001c
> Looking up 00020030
> Object: UPS.00020016.0002001c.00020030 = 28
> entering path_to_string()
> Looking up 00020016
> Looking up 0002001c
> Looking up 00020035
> Object: UPS.00020016.0002001c.00020035 = 24
> entering path_to_string()
> Looking up 00020016
> Looking up 0002001c
> Looking up 00020081
> Object: UPS.00020016.0002001c.00020081 = 64
> entering path_to_string()
> Looking up 00020016
> Looking up 0002001c
> Looking up 00020032
> Object: UPS.00020016.0002001c.00020032 = 60
> upsdrv_updateinfo...
> Waiting for notifications...
> Notification: (20 bytes) => 03 3C 1C 1C 18 40 40 3C 01 FF 63 00 64 7A 6E 6A
> entering path_to_string()
> Looking up 00020016
> Looking up 0002001a
> Looking up 00020032
> Object: UPS.00020016.0002001a.00020032 = 60
> entering path_to_string()
> Looking up 00020016
> Looking up 0002001a
> Looking up 00020030
> Object: UPS.00020016.0002001a.00020030 = 28
> entering path_to_string()
> Looking up 00020016
> Looking up 0002001c
> Looking up 00020030
> Object: UPS.00020016.0002001c.00020030 = 28
> entering path_to_string()
> Looking up 00020016
> Looking up 0002001c
> Looking up 00020035
> Object: UPS.00020016.0002001c.00020035 = 24
> entering path_to_string()
> Looking up 00020016
> Looking up 0002001c
> Looking up 00020081
> Object: UPS.00020016.0002001c.00020081 = 64
> entering path_to_string()
> Looking up 00020016
> Looking up 0002001c
> Looking up 00020082
> Object: UPS.00020016.0002001c.00020082 = 64
> entering path_to_string()
> Looking up 00020016
> Looking up 0002001c
> Looking up 00020032
> Object: UPS.00020016.0002001c.00020032 = 60
> upsdrv_updateinfo...
> Waiting for notifications...
> Notification: (20 bytes) => 03 3C 1C 1C 18 40 40 3C 01 FF 63 00 64 7A 6E 6A
> entering path_to_string()
> Looking up 00020016
> Looking up 0002001a
> Looking up 00020032
> Object: UPS.00020016.0002001a.00020032 = 60
> entering path_to_string()
> Looking up 00020016
> Looking up 0002001a
> Looking up 00020030
> Object: UPS.00020016.0002001a.00020030 = 28
> entering path_to_string()
> Looking up 00020016
> Looking up 0002001c
> Looking up 00020030
> Object: UPS.00020016.0002001c.00020030 = 28
> entering path_to_string()
> Looking up 00020016
> Looking up 0002001c
> Looking up 00020035
> Object: UPS.00020016.0002001c.00020035 = 24
> entering path_to_string()
> Looking up 00020016
> Looking up 0002001c
> Looking up 00020081
> Object: UPS.00020016.0002001c.00020081 = 64
> entering path_to_string()
> Looking up 00020016
> Looking up 0002001c
> Looking up 00020082
> Object: UPS.00020016.0002001c.00020082 = 64
> entering path_to_string()
> Looking up 00020016
> Looking up 0002001c
> Looking up 00020032
> Object: UPS.00020016.0002001c.00020032 = 60
> upsdrv_updateinfo...
> Waiting for notifications...
> Notification: (20 bytes) => 03 3C 1C 1C 18 40 40 3C 01 FF 63 00 64 7A 6E 6A
> entering path_to_string()
> Looking up 00020016
> Looking up 0002001a
> Looking up 00020032
> Object: UPS.00020016.0002001a.00020032 = 60
> entering path_to_string()
> Looking up 00020016
> Looking up 0002001a
> Looking up 00020030
> Object: UPS.00020016.0002001a.00020030 = 28
> entering path_to_string()
> Looking up 00020016
> Looking up 0002001c
> Looking up 00020030
> Object: UPS.00020016.0002001c.00020030 = 28
> entering path_to_string()
> Looking up 00020016
> Looking up 0002001c
> Looking up 00020035
> Object: UPS.00020016.0002001c.00020035 = 24
> entering path_to_string()
> Looking up 00020016
> Looking up 0002001c
> Looking up 00020081
> Object: UPS.00020016.0002001c.00020081 = 64
> entering path_to_string()
> Looking up 00020016
> Looking up 0002001c
> Looking up 00020082
> Object: UPS.00020016.0002001c.00020082 = 64
> entering path_to_string()
> Looking up 00020016
> Looking up 0002001c
> Looking up 00020032
> Object: UPS.00020016.0002001c.00020032 = 60
> upsdrv_updateinfo...
> Waiting for notifications...
> Notification: (20 bytes) => 03 3C 1C 1C 18 40 40 3C 01 FF 63 00 64 7A 6E 6A
> entering path_to_string()
> Looking up 00020016
> Looking up 0002001a
> Looking up 00020032
> Object: UPS.00020016.0002001a.00020032 = 60
> entering path_to_string()
> Looking up 00020016
> Looking up 0002001a
> Looking up 00020030
> Object: UPS.00020016.0002001a.00020030 = 28
> entering path_to_string()
> Looking up 00020016
> Looking up 0002001c
> Looking up 00020030
> Object: UPS.00020016.0002001c.00020030 = 28
> entering path_to_string()
> Looking up 00020016
> Looking up 0002001c
> Looking up 00020035
> Object: UPS.00020016.0002001c.00020035 = 24
> entering path_to_string()
> Looking up 00020016
> Looking up 0002001c
> Looking up 00020081
> Object: UPS.00020016.0002001c.00020081 = 64
> entering path_to_string()
> Looking up 00020016
> Looking up 0002001c
> Looking up 00020082
> Object: UPS.00020016.0002001c.00020082 = 64
> entering path_to_string()
> Looking up 00020016
> Looking up 0002001c
> Looking up 00020032
> Object: UPS.00020016.0002001c.00020032 = 60
> upsdrv_updateinfo...
> upsdrv_updateinfo...
> Waiting for notifications...
> Notification: (20 bytes) => 03 3C 1C 1C 18 40 40 3C 01 FF 63 00 64 7A 6E 6A
> entering path_to_string()
> Looking up 00020016
> Looking up 0002001a
> Looking up 00020032
> Object: UPS.00020016.0002001a.00020032 = 60
> entering path_to_string()
> Looking up 00020016
> Looking up 0002001a
> Looking up 00020030
> Object: UPS.00020016.0002001a.00020030 = 28
> entering path_to_string()
> Looking up 00020016
> Looking up 0002001c
> Looking up 00020030
> Object: UPS.00020016.0002001c.00020030 = 28
> entering path_to_string()
> Looking up 00020016
> Looking up 0002001c
> Looking up 00020035
> Object: UPS.00020016.0002001c.00020035 = 24
> entering path_to_string()
> Looking up 00020016
> Looking up 0002001c
> Looking up 00020081
> Object: UPS.00020016.0002001c.00020081 = 64
> entering path_to_string()
> Looking up 00020016
> Looking up 0002001c
> Looking up 00020082
> Object: UPS.00020016.0002001c.00020082 = 64
> entering path_to_string()
> Looking up 00020016
> Looking up 0002001c
> Looking up 00020032
> Object: UPS.00020016.0002001c.00020032 = 60
> upsdrv_updateinfo...
> Waiting for notifications...
> Notification: (20 bytes) => 03 3C 1C 1C 18 40 40 3C 01 FF 63 00 64 7A 6E 6A
> entering path_to_string()
> Looking up 00020016
> Looking up 0002001a
> Looking up 00020032
> Object: UPS.00020016.0002001a.00020032 = 60
> entering path_to_string()
> Looking up 00020016
> Looking up 0002001a
> Looking up 00020030
> Object: UPS.00020016.0002001a.00020030 = 28
> entering path_to_string()
> Looking up 00020016
> Looking up 0002001c
> Looking up 00020030
> Object: UPS.00020016.0002001c.00020030 = 28
> entering path_to_string()
> Looking up 00020016
> Looking up 0002001c
> Looking up 00020035
> Object: UPS.00020016.0002001c.00020035 = 24
> entering path_to_string()
> Looking up 00020016
> Looking up 0002001c
> Looking up 00020081
> Object: UPS.00020016.0002001c.00020081 = 64
> entering path_to_string()
> Looking up 00020016
> Looking up 0002001c
> Looking up 00020082
> Object: UPS.00020016.0002001c.00020082 = 64
> entering path_to_string()
> Looking up 00020016
> Looking up 0002001c
> Looking up 00020032
> Object: UPS.00020016.0002001c.00020032 = 60
> upsdrv_updateinfo...
> Waiting for notifications...
> Notification: (20 bytes) => 03 3C 1C 1C 18 40 40 3C 01 FF 63 00 64 7A 6E 6A
> entering path_to_string()
> Looking up 00020016
> Looking up 0002001a
> Looking up 00020032
> Object: UPS.00020016.0002001a.00020032 = 60
> entering path_to_string()
> Looking up 00020016
> Looking up 0002001a
> Looking up 00020030
> Object: UPS.00020016.0002001a.00020030 = 28
> entering path_to_string()
> Looking up 00020016
> Looking up 0002001c
> Looking up 00020030
> Object: UPS.00020016.0002001c.00020030 = 28
> entering path_to_string()
> Looking up 00020016
> Looking up 0002001c
> Looking up 00020035
> Object: UPS.00020016.0002001c.00020035 = 24
> entering path_to_string()
> Looking up 00020016
> Looking up 0002001c
> Looking up 00020081
> Object: UPS.00020016.0002001c.00020081 = 64
> entering path_to_string()
> Looking up 00020016
> Looking up 0002001c
> Looking up 00020082
> Object: UPS.00020016.0002001c.00020082 = 64
> entering path_to_string()
> Looking up 00020016
> Looking up 0002001c
> Looking up 00020032
> Object: UPS.00020016.0002001c.00020032 = 60
> upsdrv_updateinfo...
> Waiting for notifications...
> Notification: (20 bytes) => 03 3C 1C 1C 18 40 40 3C 01 FF 63 00 64 7A 6E 6A
> entering path_to_string()
> Looking up 00020016
> Looking up 0002001a
> Looking up 00020032
> Object: UPS.00020016.0002001a.00020032 = 60
> entering path_to_string()
> Looking up 00020016
> Looking up 0002001a
> Looking up 00020030
> Object: UPS.00020016.0002001a.00020030 = 28
> entering path_to_string()
> Looking up 00020016
> Looking up 0002001c
> Looking up 00020030
> Object: UPS.00020016.0002001c.00020030 = 28
> entering path_to_string()
> Looking up 00020016
> Looking up 0002001c
> Looking up 00020035
> Object: UPS.00020016.0002001c.00020035 = 24
> entering path_to_string()
> Looking up 00020016
> Looking up 0002001c
> Looking up 00020081
> Object: UPS.00020016.0002001c.00020081 = 64
> entering path_to_string()
> Looking up 00020016
> Looking up 0002001c
> Looking up 00020082
> Object: UPS.00020016.0002001c.00020082 = 64
> entering path_to_string()
> Looking up 00020016
> Looking up 0002001c
> Looking up 00020032
> Object: UPS.00020016.0002001c.00020032 = 60
> Signal 2: exiting
> Closing device
> 
> I stopped it do you need more ??
> Thanks all very much
> 
> Barry
> 
> Jonathan Dion wrote:
> > Hello,
> >
> > I'm sorry, I didn't think to a little detail :
> >
> > On 8/1/06, Barry Fawthrop <barry at ttienterprises.org> wrote:
> >> /lib/nut/newhidups -DD -u root -x generic -x vendorid=09df auto
> >> Network UPS Tools: New USB/HID UPS driver 0.28 (2.0.3)
> >>
> >> Fatal error: 'generic' is not a valid flag for this driver.
> >>
> >> Look in the man page or call this driver with -h for a list of
> >> valid variable names and flags.
> >>
> >
> > Yes, -x generic don't exist in newhidups in version 2.0.3 (not in
> > version 2.0.4 neither). You need to get the trunk version.
> >
> > I you don't have svn installed, install it then run :
> > svn co svn://svn.debian.org/nut/trunk
> >
> > go to the trunk directory
> > then use (I suppose you are on debian, right ? if not (gentoo I
> > presume), replace in the next command to have the good flags for
> > gentoo)
> > ./configure            --prefix=/ \
> >            --sysconfdir=/etc/nut \
> >            --mandir=/usr/share/man \
> >            --libdir=/usr/lib \
> >            --includedir=/usr/include \
> >            --without-ssl \
> >            --with-cgi \
> >            --with-statepath=/var/run/nut \
> >            --with-altpidpath=/var/run/nut \
> >            --with-drvpath=/lib/nut \
> >            --with-cgipath=/usr/lib/cgi-bin/nut \
> >            --with-pidpath=/var/run/nut \
> >            --datadir=/usr/share/nut \
> >            --with-user=nut
> > and then
> > make usb
> >
> > then run drivers/newhidups -DD -u root -x generic -x vendorid=09df auto
> >
> > I'm sorry I forgot this detail (I work on the trunk version...)
> >>
> >>
> >> Thanks
> >> Barry
> >>
> >
> > Courage !
> >
> > Jonathan Dion
> >
> >
> >
> 
> _______________________________________________
> Nut-upsuser mailing list
> Nut-upsuser at lists.alioth.debian.org
> http://lists.alioth.debian.org/mailman/listinfo/nut-upsuser
> 




More information about the Nut-upsuser mailing list