Hi,

i want to expose "capacity" (full capacity design)
as a sensor like the rest. 

This sensor will be used in an upcoming diff to upower to
expose "energy-full-design" and "capacity" properties if
this patch gets merged.

Both patches together will fix wrong notifications about 
broken batteries in KDE4.

Cheers,
Fabian


Index: acpidev.h
===================================================================
RCS file: /cvs/src/sys/dev/acpi/acpidev.h,v
retrieving revision 1.33
diff -u -p -r1.33 acpidev.h
--- acpidev.h   13 Jul 2012 10:37:40 -0000      1.33
+++ acpidev.h   17 May 2014 15:51:29 -0000
@@ -278,7 +278,7 @@ struct acpibat_softc {
        struct acpibat_bst      sc_bst;
        volatile int            sc_bat_present;
 
-       struct ksensor          sc_sens[8];
+       struct ksensor          sc_sens[9];
        struct ksensordev       sc_sensdev;
 };
 
Index: acpibat.c
===================================================================
RCS file: /cvs/src/sys/dev/acpi/acpibat.c,v
retrieving revision 1.59
diff -u -p -r1.59 acpibat.c
--- acpibat.c   16 Oct 2011 11:59:21 -0000      1.59
+++ acpibat.c   17 May 2014 15:51:29 -0000
@@ -163,6 +163,12 @@ acpibat_monitor(struct acpibat_softc *sc
        sensor_attach(&sc->sc_sensdev, &sc->sc_sens[7]);
        sc->sc_sens[7].value = sc->sc_bst.bst_voltage * 1000;
 
+       strlcpy(sc->sc_sens[8].desc, "capacity",
+           sizeof(sc->sc_sens[8].desc));
+       sc->sc_sens[8].type = type;
+       sensor_attach(&sc->sc_sensdev, &sc->sc_sens[8]);
+       sc->sc_sens[8].value = sc->sc_bif.bif_capacity * 1000;
+
        sensordev_install(&sc->sc_sensdev);
 }
 
@@ -176,7 +182,7 @@ acpibat_refresh(void *arg)
            sc->sc_devnode->name);
 
        if (!sc->sc_bat_present) {
-               for (i = 0; i < 8; i++) {
+               for (i = 0; i < 9; i++) {
                        sc->sc_sens[i].value = 0;
                        sc->sc_sens[i].status = SENSOR_S_UNSPEC;
                        sc->sc_sens[i].flags = SENSOR_FINVALID;
@@ -273,6 +279,16 @@ acpibat_refresh(void *arg)
                sc->sc_sens[7].value = sc->sc_bst.bst_voltage * 1000;
                sc->sc_sens[7].status = SENSOR_S_UNSPEC;
                sc->sc_sens[7].flags = 0;
+       }
+
+       if (sc->sc_bif.bif_capacity == BIF_UNKNOWN) {
+               sc->sc_sens[8].value = 0;
+               sc->sc_sens[8].status = SENSOR_S_UNKNOWN;
+               sc->sc_sens[8].flags = SENSOR_FUNKNOWN;
+       } else {
+               sc->sc_sens[8].value = sc->sc_bif.bif_capacity * 1000;
+               sc->sc_sens[8].status = SENSOR_S_UNSPEC;
+               sc->sc_sens[8].flags = 0;
        }
        acpi_record_event(sc->sc_acpi, APM_POWER_CHANGE);
 }

Reply via email to