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
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. --david --- 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