On 02/06/15(Tue) 22:36, David Higgs wrote: > Here are some new sensors for upd(4) devices. All exist on my device except > AtRateTimeToEmpty, which still seemed a logical addition given that > AtRateTimeToFull is already present. > - AtRateTimeToEmpty > - RunTimeToEmpty > - NeedReplacement > - Overload
Nice. > If anyone had an AtRate sensor, it was probably producing meaningless output. > The relevant spec [0] indicates that these are in minutes, and my device > appears to be using seconds; the (previously unscaled) sensor value expects > nanoseconds! > [0] http://www.usb.org/developers/hidpage/pdcv10.pdf > > And lastly, the NeedReplacement report has nothing to do with the System > Management Bus (SMB), so rename the constant. Nothing else in the tree > appears to use it, so hopefully this is safe. > > Feedback and lsusb -v output is welcome, as usual. Have you got any feedback from upd(4) users? > --- a/upd.c > +++ b/upd.c > @@ -66,7 +66,13 @@ static struct upd_usage_entry upd_usage_ > { HUP_BATTERY, HUB_DISCHARGING, > SENSOR_INDICATOR, "Discharging" }, > { HUP_BATTERY, HUB_ATRATE_TIMETOFULL, > - SENSOR_TIMEDELTA, "AtRateTimeToFull" } > + SENSOR_TIMEDELTA, "AtRateTimeToFull" }, > + { HUP_BATTERY, HUB_ATRATE_TIMETOEMPTY, > + SENSOR_TIMEDELTA, "AtRateTimeToEmpty" }, > + { HUP_BATTERY, HUB_RUNTIMETO_EMPTY, > + SENSOR_TIMEDELTA, "RunTimeToEmpty" }, > + { HUP_BATTERY, HUB_NEED_REPLACEMENT, > + SENSOR_INDICATOR, "NeedReplacement" }, > }; > static struct upd_usage_entry upd_usage_roots[] = { > { HUP_BATTERY, HUB_BATTERY_PRESENT, > @@ -75,7 +81,9 @@ static struct upd_usage_entry upd_usage_ > { HUP_POWER, HUP_SHUTDOWN_IMMINENT, > SENSOR_INDICATOR, "ShutdownImminent" }, > { HUP_BATTERY, HUB_AC_PRESENT, > - SENSOR_INDICATOR, "ACPresent" } > + SENSOR_INDICATOR, "ACPresent" }, > + { HUP_POWER, HUP_OVERLOAD, > + SENSOR_INDICATOR, "Overload" }, > }; > #define UPD_MAX_SENSORS (nitems(upd_usage_batdep) + > nitems(upd_usage_roots)) > > @@ -410,6 +418,12 @@ upd_sensor_update(struct upd_softc *sc, > case HUB_FULLCHARGE_CAPACITY: > adjust = 1000; /* scale adjust */ > break; > + case HUB_ATRATE_TIMETOFULL: > + case HUB_ATRATE_TIMETOEMPTY: > + case HUB_RUNTIMETO_EMPTY: > + /* spec says minutes, not seconds */ > + adjust = 1000000000LL; > + break; > default: > adjust = 1; /* no scale adjust */ > break; > --- a/usbhid.h > +++ b/usbhid.h > @@ -213,7 +213,7 @@ struct usb_hid_descriptor { > #define HUB_CONDITIONING_FLAG 0x0048 > #define HUB_ATRATE_OK 0x0049 > #define HUB_SMB_ERROR_CODE 0x004a > -#define HUB_SMB_NEED_REPLACE 0x004b > +#define HUB_NEED_REPLACEMENT 0x004b > #define HUB_ATRATE_TIMETOFULL 0x0060 > #define HUB_ATRATE_TIMETOEMPTY 0x0061 > #define HUB_AVERAGE_CURRENT 0x0062 > >