Like Glen Ogilvie, I got a newer Dynamix 650 VA with USB connection, and was 
having trouble getting NUT to communicate with it.

This appears to be the UPS that megatec_usb was built for - Vendor: 0x0001, 
Product: 0x0000, uses Megatec's software, has USB chip attached to internal 
serial lines, and has terrible USB implementation with fake HID tables.  But 
megatec_usb would consistently fail.

After spending a week (hey, I'm unemployed) reading USB docs and poking at it 
from various directions, I now understand what's wrong, though not necessarily 
the best place to fix it.

megatec_usb communicates primarily with the UPS via libusb 0.1's 
usb_get_string_simple.  usb_get_string_simple begins by requesting supported 
LANGIDs from the UPS -- which fails, ending communication.  (Megatec's USB 
implementation is not a good effort.)  If you skip that step and go directly to 
usb_get_string with some arbitrary LANGID (I tried 0x0409 and 0x0000, both 
worked), the UPS happily responds.

I got it working for now by hacking away at libusb.c/libusb_get_string and 
switching it to usb_get_string.  I expect this isn't the best long-term 
solution, because it may change the behavior of some other USB UPSs.

Should megatec_usb.c/set_data_krauler just skip the "usb" subdriver function 
table and go straight for usb_get_string?  Or should the usb subdriver be 
extended with a call that doesn't go through usb_get_string_simple?
--
Brian R. Smith
[email protected]





_______________________________________________
Nut-upsdev mailing list
[email protected]
http://lists.alioth.debian.org/mailman/listinfo/nut-upsdev

Reply via email to