X-Git-Url: https://git.xandkar.net/?p=khatus.git;a=blobdiff_plain;f=x4%2Fbin%2Fkhatus_x4_parse_upower;fp=x4%2Fbin%2Fkhatus_x4_parse_upower;h=f220e9b9b72157e0d78692e073fc02370bd608b3;hp=0000000000000000000000000000000000000000;hb=4411059d155436af0e80e5e6c3928ac8373093d6;hpb=dd5287c68654c8c82b3974364d210fdcc253f9d2 diff --git a/x4/bin/khatus_x4_parse_upower b/x4/bin/khatus_x4_parse_upower new file mode 100755 index 0000000..f220e9b --- /dev/null +++ b/x4/bin/khatus_x4_parse_upower @@ -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 +}