Begin X4 prototype
[khatus.git] / x4 / bin / khatus_x4_parse_upower
diff --git a/x4/bin/khatus_x4_parse_upower b/x4/bin/khatus_x4_parse_upower
new file mode 100755 (executable)
index 0000000..f220e9b
--- /dev/null
@@ -0,0 +1,96 @@
+#! /usr/bin/awk -f
+
+# When parsing 'upower --dump'
+/^Device:[ \t]+/ {
+    device["path"] = $2
+    next
+}
+
+# When parsing 'upower --monitor-detail'
+/^\[[0-9]+:[0-9]+:[0-9]+\.[0-9]+\][ \t]+device changed:[ \t]+/ {
+    device["path"] = $4
+    next
+}
+
+/  native-path:/ && device["path"] {
+    device["native_path"] = $2
+    next
+}
+
+# BEGIN battery
+/  battery/ && device["path"] {
+    device["is_battery"] = 1
+    next
+}
+
+/    state:/ && device["is_battery"] {
+    device["battery_state"] = $2
+    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"])
+    next
+}
+
+/^$/ && device["is_battery"] {
+    print("battery_state"     , aggregate_battery_state())
+    print("battery_percentage", aggregate_battery_percentage())
+}
+# END battery
+
+# BEGIN line-power
+/  line-power/ && device["path"] {
+    device["is_line_power"] = 1
+    next
+}
+
+/    online:/ && device["is_line_power"] {
+    device["line_power_online"] = $2
+    next
+}
+
+/^$/ && device["is_line_power"] {
+    print("line_power", device["line_power_online"])
+}
+# END line-power
+
+/^$/ {
+    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.02712 seconds and 4 git commands to generate.