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


Reply via email to