Sorry for the late reply, I've first used the incorrect sending address. On 17/10/17 15:15, Charles Lepple wrote: > On Oct 17, 2017, at 8:48 AM, LLSJ Krüger <ll...@lakruger.za.org> wrote: >> Results of 'lsusb -vvv -d 3344:' > [...] >> wDescriptorLength 136 >> Report Descriptors: >> ** UNAVAILABLE ** >> > Can you please re-run lsusb, possibly as root, to grab the contents of the > "Report Descriptors" section?
Bus 003 Device 003: ID 3344:0025 Leaguer Microelectronics (LME) Device Descriptor: bLength 18 bDescriptorType 1 bcdUSB 1.10 bDeviceClass 0 bDeviceSubClass 0 bDeviceProtocol 0 bMaxPacketSize0 8 idVendor 0x3344 Leaguer Microelectronics (LME) idProduct 0x0025 bcdDevice 0.01 iManufacturer 3 (error) iProduct 4 HID-UPS iSerial 2 JD09U04 bNumConfigurations 1 Configuration Descriptor: bLength 9 bDescriptorType 2 wTotalLength 34 bNumInterfaces 1 bConfigurationValue 1 iConfiguration 0 bmAttributes 0x80 (Bus Powered) MaxPower 100mA Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 0 bAlternateSetting 0 bNumEndpoints 1 bInterfaceClass 3 Human Interface Device bInterfaceSubClass 0 bInterfaceProtocol 0 iInterface 0 HID Device Descriptor: bLength 9 bDescriptorType 33 bcdHID 1.00 bCountryCode 0 Not supported bNumDescriptors 1 bDescriptorType 34 Report wDescriptorLength 136 Report Descriptor: (length is 136) Item(Global): Usage Page, data= [ 0x84 ] 132 Power Device Page Item(Local ): Usage, data= [ 0x04 ] 4 UPS Item(Main ): Collection, data= [ 0x01 ] 1 Application Item(Local ): Usage, data= [ 0x24 ] 36 Power Summary Item(Main ): Collection, data= [ 0x02 ] 2 Logical Item(Global): Report ID, data= [ 0x01 ] 1 Item(Local ): Usage, data= [ 0xfd ] 253 iManufacturer Item(Local ): String Index, data= [ 0x01 ] 1 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= [ 0xff 0x00 ] 255 Item(Main ): Feature, data= [ 0x22 ] 34 Data Variable Absolute No_Wrap Linear No_Preferred_State No_Null_Position Non_Volatile Bitfield Item(Global): Report ID, data= [ 0x02 ] 2 Item(Local ): Usage, data= [ 0xfe ] 254 iProduct Item(Local ): String Index, data= [ 0x02 ] 2 Item(Main ): Feature, data= [ 0x22 ] 34 Data Variable Absolute No_Wrap Linear No_Preferred_State No_Null_Position Non_Volatile Bitfield Item(Global): Report ID, data= [ 0x03 ] 3 Item(Local ): Usage, data= [ 0xff ] 255 iSerialNumber Item(Local ): String Index, data= [ 0x03 ] 3 Item(Main ): Feature, data= [ 0x22 ] 34 Data Variable Absolute No_Wrap Linear No_Preferred_State No_Null_Position Non_Volatile Bitfield Item(Global): Usage Page, data= [ 0x85 ] 133 Battery System Page Item(Global): Report ID, data= [ 0x06 ] 6 Item(Local ): Usage, data= [ 0x8b ] 139 Rechargeable Item(Main ): Feature, data= [ 0x22 ] 34 Data Variable Absolute No_Wrap Linear No_Preferred_State No_Null_Position Non_Volatile Bitfield Item(Local ): Usage, data= [ 0x2c ] 44 Capacity Mode Item(Main ): Feature, data= [ 0x22 ] 34 Data Variable Absolute No_Wrap Linear No_Preferred_State No_Null_Position Non_Volatile Bitfield Item(Global): Report ID, data= [ 0x04 ] 4 Item(Local ): Usage, data= [ 0x83 ] 131 Design Capacity Item(Global): Logical Maximum, data= [ 0x64 ] 100 Item(Main ): Feature, data= [ 0x22 ] 34 Data Variable Absolute No_Wrap Linear No_Preferred_State No_Null_Position Non_Volatile Bitfield Item(Local ): Usage, data= [ 0x67 ] 103 Full Charge Capacity Item(Main ): Feature, data= [ 0x22 ] 34 Data Variable Absolute No_Wrap Linear No_Preferred_State No_Null_Position Non_Volatile Bitfield Item(Global): Report ID, data= [ 0x05 ] 5 Item(Local ): Usage, data= [ 0x66 ] 102 Remaining Capacity Item(Main ): Input, data= [ 0x22 ] 34 Data Variable Absolute No_Wrap Linear No_Preferred_State No_Null_Position Non_Volatile Bitfield Item(Local ): Usage, data= [ 0x66 ] 102 Remaining Capacity Item(Main ): Feature, data= [ 0xa2 ] 162 Data Variable Absolute No_Wrap Linear No_Preferred_State No_Null_Position Volatile Bitfield Item(Global): Usage Page, data= [ 0x84 ] 132 Power Device Page Item(Local ): Usage, data= [ 0x02 ] 2 Present Status Item(Main ): Collection, data= [ 0x02 ] 2 Logical Item(Global): Usage Page, data= [ 0x85 ] 133 Battery System Page Item(Global): Report ID, data= [ 0x07 ] 7 Item(Local ): Usage, data= [ 0xd0 ] 208 AC Present Item(Global): Logical Minimum, data= [ 0x00 ] 0 Item(Global): Logical Maximum, data= [ 0x01 ] 1 Item(Global): Report Size, data= [ 0x01 ] 1 Item(Global): Report Count, data= [ 0x01 ] 1 Item(Main ): Input, data= [ 0xa2 ] 162 Data Variable Absolute No_Wrap Linear No_Preferred_State No_Null_Position Volatile Bitfield Item(Local ): Usage, data= [ 0x44 ] 68 Charging Item(Main ): Input, data= [ 0xa2 ] 162 Data Variable Absolute No_Wrap Linear No_Preferred_State No_Null_Position Volatile Bitfield Item(Local ): Usage, data= [ 0x45 ] 69 Discharging Item(Global): Report Count, data= [ 0x06 ] 6 Item(Main ): Input, data= [ 0xa2 ] 162 Data Variable Absolute No_Wrap Linear No_Preferred_State No_Null_Position Volatile Bitfield Item(Global): Report ID, data= [ 0x08 ] 8 Item(Local ): Usage, data= [ 0xd0 ] 208 AC Present Item(Global): Logical Minimum, data= [ 0x00 ] 0 Item(Global): Logical Maximum, data= [ 0x01 ] 1 Item(Global): Report Size, data= [ 0x01 ] 1 Item(Global): Report Count, data= [ 0x01 ] 1 Item(Main ): Feature, data= [ 0xa2 ] 162 Data Variable Absolute No_Wrap Linear No_Preferred_State No_Null_Position Volatile Bitfield Item(Local ): Usage, data= [ 0x44 ] 68 Charging Item(Main ): Feature, data= [ 0xa2 ] 162 Data Variable Absolute No_Wrap Linear No_Preferred_State No_Null_Position Volatile Bitfield Item(Local ): Usage, data= [ 0x45 ] 69 Discharging Item(Global): Report Count, data= [ 0x06 ] 6 Item(Main ): Feature, data= [ 0xa2 ] 162 Data Variable Absolute No_Wrap Linear No_Preferred_State No_Null_Position Volatile Bitfield Item(Main ): End Collection, data=none Item(Main ): End Collection, data=none Item(Main ): End Collection, data=none 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 1 can't get debug descriptor: Resource temporarily unavailable Device Status: 0x0000 (Bus Powered) > > (Running "usbhid-ups" should have detached the kernel driver already, which > should allow lsusb to retrieve that descriptor -- but if you have > disconnected+reconnected the USB cable since testing, you will need to re-run > "usbhid-ups" before "lsusb".) >> ran usbhid-ups -DDDD -u root -x explore -x vendorid=3344 -x port=auto -a >> myups >& /tmp/junda-tech.txt >> >> and then >> >> gen-usbhid-subdriver.sh < /tmp/junda-tech.txt' : >> > [...] >> /* --------------------------------------------------------------- */ >> /* HID2NUT lookup table */ >> /* --------------------------------------------------------------- */ >> >> static hid_info_t jundatech_hid2nut[] = { >> >> { "unmapped.ups.powersummary.capacitymode", 0, 0, >> "UPS.PowerSummary.CapacityMode", NULL, "%.0f", 0, NULL }, >> { "unmapped.ups.powersummary.designcapacity", 0, 0, >> "UPS.PowerSummary.DesignCapacity", NULL, "%.0f", 0, NULL }, >> { "unmapped.ups.powersummary.fullchargecapacity", 0, 0, >> "UPS.PowerSummary.FullChargeCapacity", NULL, "%.0f", 0, NULL }, >> { "unmapped.ups.powersummary.presentstatus.acpresent", 0, 0, >> "UPS.PowerSummary.PresentStatus.ACPresent", NULL, "%.0f", 0, NULL }, >> { "unmapped.ups.powersummary.presentstatus.charging", 0, 0, >> "UPS.PowerSummary.PresentStatus.Charging", NULL, "%.0f", 0, NULL }, >> { "unmapped.ups.powersummary.presentstatus.discharging", 0, 0, >> "UPS.PowerSummary.PresentStatus.Discharging", NULL, "%.0f", 0, NULL }, >> { "unmapped.ups.powersummary.rechargeable", 0, 0, >> "UPS.PowerSummary.Rechargeable", NULL, "%.0f", 0, NULL }, >> { "unmapped.ups.powersummary.remainingcapacity", 0, 0, >> "UPS.PowerSummary.RemainingCapacity", NULL, "%.0f", 0, NULL }, >> { "unmapped.ups.powersummary.imanufacturer", 0, 0, >> "UPS.PowerSummary.iManufacturer", NULL, "%.0f", 0, NULL }, >> { "unmapped.ups.powersummary.iproduct", 0, 0, >> "UPS.PowerSummary.iProduct", NULL, "%.0f", 0, NULL }, >> { "unmapped.ups.powersummary.iserialnumber", 0, 0, >> "UPS.PowerSummary.iSerialNumber", NULL, "%.0f", 0, NULL }, > This part looks promising - the UPS appears to implement a portion of the HID > Power Device Class specification, rather than just being a HID-enabled > USB-to-serial adapter. > > In the generated code, the capitalized names are HID PDC names, which you can > search for in the nut/drivers/ directory to see how other vendors use them. > The script just maps them to generic numbers, but the values are most useful > if mapped to proper types. For instance: > > $ git grep UPS.PowerSummary.PresentStatus.ACPresent > > drivers/apc-hid.c: { "BOOL", 0, 0, > "UPS.PowerSummary.PresentStatus.ACPresent", NULL, NULL, HU_FLAG_QUICK_POLL, > online_info }, > > drivers/belkin-hid.c: { "BOOL", 0, 0, > "UPS.PowerSummary.PresentStatus.ACPresent", NULL, NULL, HU_FLAG_QUICK_POLL, > liebert_online_info }, > > ... > > This indicates that the APC models tend to follow the spec, but that we had > to add a custom mapping function for Belkin/Liebert since their boolean True > value is often 1e-7 instead of 1. > > I would recommend checking the values to make sure that they match the > labels, but static attributes such as CapacityMode, DesignCapacity, > FullChargeCapacity and Rechargeable can get a HU_FLAG_STATIC or > HU_FLAG_SEMI_STATIC flag (see drivers/usbhid-ups.h) so that the driver does > not waste time polling them. Some values like iManufacturer, iProduct and > iSerialNumber are likely duplicates of the values in the USB device > descriptor, and do not need to be included. > Tnx. It is a lot of digging for me, but I will attempt it. _______________________________________________ Nut-upsuser mailing list Nut-upsuser@lists.alioth.debian.org http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/nut-upsuser