Handle multiple batteries
authorSiraaj Khandkar <siraaj@khandkar.net>
Thu, 15 Nov 2018 00:34:39 +0000 (19:34 -0500)
committerSiraaj Khandkar <siraaj@khandkar.net>
Mon, 19 Nov 2018 00:05:48 +0000 (19:05 -0500)
README.md
src/awk/exe/parse_upower.awk

index db52037..35f8d30 100644 (file)
--- a/README.md
+++ b/README.md
@@ -190,10 +190,6 @@ controller, which are in turn actualized as desktop notifications by the
 
 ![screenshot-self-error-propagation](screenshot-self-error-propagation.jpg)
 
-FIXME
------
-- handle multiple batteries
-
 TODO
 ----
 - track energy usage rate
index 07af1cb..09150c9 100644 (file)
     next
 }
 
+/  native-path:/ && device["path"] {
+    device["native_path"] = $2
+    next
+}
+
 # BEGIN battery
 /  battery/ && device["path"] {
     device["is_battery"] = 1
     next
 }
 
+/    energy:/ && device["is_battery"] {
+    device["energy"] = $2
+    next
+}
+
+/    energy-full:/ && device["is_battery"] {
+    device["energy_full"] = $2
+    next
+}
+
 /    percentage:/ && device["is_battery"] {
     device["battery_percentage"] = $2
     sub("%$", "", device["battery_percentage"])
@@ -28,8 +43,8 @@
 }
 
 /^$/ && device["is_battery"] {
-    print("battery_state"     , device["battery_state"])
-    print("battery_percentage", device["battery_percentage"])
+    print("battery_state"     , aggregate_battery_state())
+    print("battery_percentage", aggregate_battery_percentage())
 }
 # END battery
 
     delete device
     next
 }
+
+function aggregate_battery_percentage(    bat, curr, full) {
+    _battery_energy[device["native_path"]] = device["energy"]
+    _battery_energy_full[device["native_path"]] = device["energy_full"]
+    for (bat in _battery_energy) {
+        curr = curr + _battery_energy[bat]
+        full = full + _battery_energy_full[bat]
+    }
+    return ((curr / full) * 100)
+}
+
+function aggregate_battery_state(    curr, bat, new) {
+    _battery_state[device["native_path"]] = device["battery_state"]
+    curr = device["battery_state"]
+    for (bat in _battery_state) {
+        new = _battery_state[bat]
+        if (new == "discharging") {
+            curr = new
+        } else if (curr != "discharging" && new == "charging") {
+            curr = new
+        }
+    }
+    return curr
+}
This page took 0.027389 seconds and 4 git commands to generate.