Anyone?

Op Mon, 20 Jan 2020 12:22:07 +0100 schreef Boudewijn Dijkstra
<[email protected]>:
Some upd(4) devices use -1 for "On" and some use 1. sysctl(8) and sensorsd(8) hide this detail from the user, which makes it difficult to define low and high values in sensorsd.conf(5).

Also see https://marc.info/?l=openbsd-misc&m=144529176814155&w=2

I'd like to suggest a diff like the following:

RCS file: /cvs/src/sys/dev/usb/upd.c,v
retrieving revision 1.26
diff -u -p -u -p -d -r1.26 upd.c
--- upd.c       8 Apr 2017 02:57:25 -0000       1.26
+++ upd.c       20 Jan 2020 10:18:41 -0000
@@ -406,26 +406,30 @@ upd_sensor_update(struct upd_softc *sc,
         struct upd_sensor       *child;
         int64_t                  hdata, adjust;

-       switch (HID_GET_USAGE(sensor->hitem.usage)) {
-       case HUB_REL_STATEOF_CHARGE:
-       case HUB_ABS_STATEOF_CHARGE:
-       case HUB_REM_CAPACITY:
-       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;
+       hdata = hid_get_data(buf, len, &sensor->hitem.loc);
+       if (sensor->ksensor.type == SENSOR_INDICATOR)
+               sensor->ksensor.value = hdata ? 1 : 0;
+       else {
+               switch (HID_GET_USAGE(sensor->hitem.usage)) {
+               case HUB_REL_STATEOF_CHARGE:
+               case HUB_ABS_STATEOF_CHARGE:
+               case HUB_REM_CAPACITY:
+               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;
+               }
+               sensor->ksensor.value = hdata * adjust;
         }

-       hdata = hid_get_data(buf, len, &sensor->hitem.loc);
-       sensor->ksensor.value = hdata * adjust;
         sensor->ksensor.status = SENSOR_S_OK;
         sensor->ksensor.flags &= ~SENSOR_FINVALID;


Note that this will break some configurations.




--
Gemaakt met Opera's e-mailprogramma: http://www.opera.com/mail/

Reply via email to