batt: Read absolute current_now, power_now
authorHenry Gebhardt <hsggebhardt@googlemail.com>
Fri, 9 Mar 2012 23:31:35 +0000 (00:31 +0100)
committerMartin Bagge / brother <brother@bsnet.se>
Mon, 9 Apr 2012 12:45:03 +0000 (14:45 +0200)
Some batteries report discharging with a negative value in
'current_now', but we use the 'status' or 'state' file for this.

Others use -1000 to report an error.

Thanks to Stefan Handschuh for reporting and finding this, see
http://sourceforge.net/mailarchive/message.php?msg_id=28935588

src/plugins/batt/batt_sys.c

index cc4f0e2..5ee0cb9 100644 (file)
@@ -153,6 +153,15 @@ void battery_update(battery *b)
 
     b->current_now = get_gint_from_infofile(b, "current_now");
     b->power_now   = get_gint_from_infofile(b, "power_now");
+    /* FIXME: Some battery drivers report -1000 when the discharge rate is
+     * unavailable. Others use negative values when discharging. Best we can do
+     * is to treat -1 as an error, and take the absolute value otherwise.
+     * Ideally the kernel would not export the sysfs file when the value is not
+     * available. */
+    if (b->current_now < -1)
+           b->current_now = - b->current_now;
+    if (b->power_now < -1)
+           b->power_now = - b->power_now;
 
     b->charge_full = get_gint_from_infofile(b, "charge_full");
     b->energy_full = get_gint_from_infofile(b, "energy_full");