[Nut-upsdev] NUT usbhid -- trying to write USB (sub)drivers
Peter Selinger
selinger at mathstat.dal.ca
Wed Oct 31 14:29:54 UTC 2007
Hi Rok,
I retired from working on NUT a few months ago, so I don't have the
most up-to-date info. But the guys on the nut-upsdev mailing list
(cc'd above) are very helpful.
Both of your devices (or nearly identical ones) have been seen on the
mailing lists before. The Sweex was first mentioned in a message by
Eli Wapniarski on 14 Jun 2006 on nut-upsuser, and was most recently
discussed in a message by Peter van Valderen on 20 May 2007 on
nut-upsdev.
The PowerMust device was discussed by Carlos Rodrigues on the
nut-upsdev list on Fri, 14 Apr 2006, and by Guillaume JAOUEN on
nut-upsdev near 16 Feb 2007. Note that these devices may be packaged
under a different name, but it's still likely the same device.
As far as I remember, the Sweex uses an unknown protocol, and the
PowerMust probably is (or can be) supported by the megatec_usb
driver. Neither device uses the HID protocol, and therefore neither
will be supportable by a usbhid-ups subdriver.
-- Peter
Rok =?utf-8?q?Pape=C5=BE?= wrote:
>
> Hello Peter.
>
> I've noticed that 2 of my UPSes:
> 1. PowerMust 800 USB, 800VA
> 2. Sweex PP100, 1000VA
> ... are not supported in NUT.
>
> I've found your nice document on writing USB subdriver and
> decided to give it a go. The NUT version I'm using is a
> development from the SVN trunk.
>
> My ups.conf has the following entries:
>
> [PowerMust_800_USB]
> driver = usbhid-ups
> port = auto
> vendorid = 06da
>
> [sweex_PP100]
> driver = usbhid-ups
> port = auto
> vendorid = 0925
>
> I needed to add those becouse the 'auto' command seems not
> to be supported in the SVN trunk version.
> trunk]$ svn update
> At revision 1150.
>
> My C coding skills have been neglected lately so I've decided
> to give it a try at writing a (sub)driver for these two
> UPSes. From the appended output I think that a simple
> sub-driver for usbhid won't do the trick :((.
>
> Could you please give me some advices/RTFM pointers
> on how to tackle these devices ? I do have Windows XP
> software for them and the USB Snoopy caught some trash
> from them but my USB skills are somewhere around zero ;).
>
> I'm OK with C, C++. Know a bit about driver development
> but never did any work for NUT or USB devices, so
> any advice is very welcomed.
>
> =====================================================
> Sweex PP100 is reported as:
> =================
> # cat lsusb
>
> Bus 001 Device 004: ID 0925:1234 Lakeview Research
> Device Descriptor:
> bLength 18
> bDescriptorType 1
> bcdUSB 1.10
> bDeviceClass 0 (Defined at Interface level)
> bDeviceSubClass 0
> bDeviceProtocol 0
> bMaxPacketSize0 8
> idVendor 0x0925 Lakeview Research
> idProduct 0x1234
> bcdDevice 0.01
> iManufacturer 1 ?
> iProduct 2 UPS USB MON V1.4
> iSerial 0
> bNumConfigurations 1
> Configuration Descriptor:
> bLength 9
> bDescriptorType 2
> wTotalLength 34
> bNumInterfaces 1
> bConfigurationValue 1
> iConfiguration 0
> bmAttributes 0x80
> MaxPower 100mA
> Interface Descriptor:
> bLength 9
> bDescriptorType 4
> bInterfaceNumber 0
> bAlternateSetting 0
> bNumEndpoints 1
> bInterfaceClass 3 Human Interface Devices
> bInterfaceSubClass 0 No Subclass
> bInterfaceProtocol 0 None
> iInterface 0
> HID Device Descriptor:
> bLength 9
> bDescriptorType 33
> bcdHID 1.00
> bCountryCode 0 Not supported
> bNumDescriptors 1
> bDescriptorType 34 Report
> wDescriptorLength 78
> Report Descriptors:
> ** UNAVAILABLE **
> Endpoint Descriptor:
> bLength 7
> bDescriptorType 5
> bEndpointAddress 0x81 EP 1 IN
> bmAttributes 3
> Transfer Type Interrupt
> Synch Type None
> Usage Type Data
> wMaxPacketSize 0x0006 1x 6 bytes
> bInterval 1
>
>
> /opt/nut/bin/usbhid-ups -u root -DD -x explore -x vendorid=0925 -a sweex_PP100
>
> debug level is '2'
> upsdrv_initups...
> Checking device (0925/1234) (001/007)
> - VendorID: 0925
> - ProductID: 1234
> - Manufacturer: ?
> - Product: UPS USB MON V1.4
> - Serial Number: unknown
> - Bus: 001
> Trying to match device
> Device matches
> HID descriptor length 78
> Report Descriptor size = 78
> Using subdriver: EXPLORE HID 0.1
> Path: ffa00001.ffa00002.ffa10003, Type: Input, ReportID: 0x00, Offset: 0, Size: 8, Value: 0.000000
> Path: ffa00001.ffa00002.ffa10004, Type: Input, ReportID: 0x00, Offset: 0, Size: 8, Value: 0.000000
> Path: ffa00001.ffa00002.ffa10005, Type: Input, ReportID: 0x00, Offset: 0, Size: 8, Value: 0.000000
> Path: ffa00001.ffa00002.ffa10006, Type: Input, ReportID: 0x00, Offset: 0, Size: 8, Value: 0.000000
> Path: ffa00001.ffa00002.ffa10007, Type: Input, ReportID: 0x00, Offset: 0, Size: 8, Value: 0.000000
> Path: ffa00001.ffa00002.ffa10008, Type: Input, ReportID: 0x00, Offset: 0, Size: 8, Value: 0.000000
> Path: ffa00001.ffa00002.ffa10009, Type: Output, ReportID: 0x00, Offset: 0, Size: 8, Value: 0.000000
> Path: ffa00001.ffa00002.ffa1000a, Type: Output, ReportID: 0x00, Offset: 0, Size: 8, Value: 0.000000
> Path: ffa00001.ffa00002.ffa1000b, Type: Output, ReportID: 0x00, Offset: 0, Size: 8, Value: 0.000000
> Path: ffa00001.ffa00002.ffa1000c, Type: Output, ReportID: 0x00, Offset: 0, Size: 8, Value: 0.000000
> Network UPS Tools: 0.29 USB communication driver - core 0.32 (2.3.0-1150)
>
> Report descriptor retrieved (Reportlen = 78)
> =46ound HID device
> Detected a UPS: ?/UPS USB MON V1.4
> upsdrv_initinfo...
> upsdrv_updateinfo...
> Quick update...
> dstate_init: sock /var/state/ups/usbhid-ups-sweex_PP100 open on fd 5
> upsdrv_updateinfo...
> Quick update...
> upsdrv_updateinfo...
> Quick update...
> Signal 2: exiting
> upsdrv_cleanup...
>
> [This keeps repeating to infinity so I Ctrl+C]
>
> The Values stay the same no matter if I turn UPS on/off or
> have it on mains or on battery. UPS comes with some dumb
> Windows software which can only tell as much
> as a contact closure device: on mains, on batter, battery low.
> ===================================================
> PowerMust 8000 USB is reported as:
> =====================
> # cat lsusb
>
> Bus 001 Device 005: ID 06da:0003 Phoenixtec Power Co., Ltd
> Device Descriptor:
> bLength 18
> bDescriptorType 1
> bcdUSB 1.10
> bDeviceClass 0 (Defined at Interface level)
> bDeviceSubClass 0
> bDeviceProtocol 0
> bMaxPacketSize0 8
> idVendor 0x06da Phoenixtec Power Co., Ltd
> idProduct 0x0003
> bcdDevice 4.00
> iManufacturer 3
> iProduct 1 USB UPS
> iSerial 0
> bNumConfigurations 1
> Configuration Descriptor:
> bLength 9
> bDescriptorType 2
> wTotalLength 34
> bNumInterfaces 1
> bConfigurationValue 1
> iConfiguration 0
> bmAttributes 0xa0
> Remote Wakeup
> MaxPower 100mA
> Interface Descriptor:
> bLength 9
> bDescriptorType 4
> bInterfaceNumber 0
> bAlternateSetting 0
> bNumEndpoints 1
> bInterfaceClass 3 Human Interface Devices
> bInterfaceSubClass 0 No Subclass
> bInterfaceProtocol 0 None
> iInterface 0
> HID Device Descriptor:
> bLength 9
> bDescriptorType 33
> bcdHID 1.11
> bCountryCode 0 Not supported
> bNumDescriptors 1
> bDescriptorType 34 Report
> wDescriptorLength 27
> Report Descriptors:
> ** UNAVAILABLE **
> Endpoint Descriptor:
> bLength 7
> bDescriptorType 5
> bEndpointAddress 0x81 EP 1 IN
> bmAttributes 3
> Transfer Type Interrupt
> Synch Type None
> Usage Type Data
> wMaxPacketSize 0x0008 1x 8 bytes
> bInterval 20
>
> # /opt/nut/bin/usbhid-ups -u root -DD -x explore -x vendorid=0925 -a PowerMust_800_USB
> Network UPS Tools: 0.29 USB communication driver - core 0.32 (2.3.0-1150)
>
> debug level is '2'
> upsdrv_initups...
> Checking device (06DA/0003) (001/008)
> - VendorID: 06da
> - ProductID: 0003
> - Manufacturer: OMRON
> - Product: USB UPS
> - Serial Number: unknown
> - Bus: 001
> Trying to match device
> Device matches
> HID descriptor length 27
> Report Descriptor size = 27
> Using subdriver: EXPLORE HID 0.1
> Can't retrieve Report 0: Broken pipe
> Path: ff000001.ff000002, Type: Input, ReportID: 0x00, Offset: 0, Size: 8
> Can't retrieve Report 0: Broken pipe
> Path: ff000001.ff000002, Type: Output, ReportID: 0x00, Offset: 0, Size: 8
> Report descriptor retrieved (Reportlen = 27)
> =46ound HID device
> Detected a UPS: OMRON/USB UPS
> upsdrv_initinfo...
> upsdrv_updateinfo...
> Quick update...
> dstate_init: sock /var/state/ups/usbhid-ups-PowerMust_800_USB open on fd 5
> upsdrv_updateinfo...
> Quick update...
> upsdrv_updateinfo...
> Quick update...
> upsdrv_updateinfo...
> Quick update...
> Signal 2: exiting
> upsdrv_cleanup...
> [Ctrl+C]
>
> This one doesn't even display path.
>
> --
> best regards,
> Rok Pape=C5=BE.
>
More information about the Nut-upsdev
mailing list