diff options
-rw-r--r-- | tv/2configs/default.nix | 2 | ||||
-rw-r--r-- | tv/5pkgs/q/default.nix | 97 |
2 files changed, 75 insertions, 24 deletions
diff --git a/tv/2configs/default.nix b/tv/2configs/default.nix index 514d313c1..dbf311479 100644 --- a/tv/2configs/default.nix +++ b/tv/2configs/default.nix @@ -14,7 +14,7 @@ with import <stockholm/lib>; stockholm.file = "/home/tv/stockholm"; nixpkgs.git = { url = https://github.com/NixOS/nixpkgs; - ref = "238c7e0dbf73d7f330689cb6ec4b1218526cee4e"; + ref = "1e1112edc57e93046f35707b874d2a4f3ff321e6"; }; } // optionalAttrs host.secure { secrets-master.file = "/home/tv/secrets/master"; diff --git a/tv/5pkgs/q/default.nix b/tv/5pkgs/q/default.nix index 7e2a30c3e..a3a7cd739 100644 --- a/tv/5pkgs/q/default.nix +++ b/tv/5pkgs/q/default.nix @@ -84,11 +84,18 @@ let eval "$(${pkgs.gnused}/bin/sed -n ' s/^\([A-Z_]\+=[0-9A-Za-z_-]*\)$/export \1/p ' $uevent)" - if test "x''${POWER_SUPPLY_CHARGE_NOW-}" = x; then - exit # not battery - fi + case $POWER_SUPPLY_NAME in + AC) + exit # not battery + ;; + esac exec </dev/null exec ${pkgs.gawk}/bin/awk ' + function die(s) { + printf "%s: %s\n", name, s + exit 1 + } + function print_hm(h, m) { m = (h - int(h)) * 60 return sprintf("%dh%dm", h, m) @@ -115,39 +122,83 @@ let } END { - voltage_unit = "V" - voltage_now = ENVIRON["POWER_SUPPLY_VOLTAGE_NOW"] / 10^6 - voltage_min_design = ENVIRON["POWER_SUPPLY_VOLTAGE_MIN_DESIGN"] / 10^6 + name = ENVIRON["POWER_SUPPLY_NAME"] + + charge_unit = "Ah" + charge_now = ENVIRON["POWER_SUPPLY_CHARGE_NOW"] / 10^6 + charge_full = ENVIRON["POWER_SUPPLY_CHARGE_FULL"] / 10^6 current_unit = "A" current_now = ENVIRON["POWER_SUPPLY_CURRENT_NOW"] / 10^6 + energy_unit = "Wh" + energy_now = ENVIRON["POWER_SUPPLY_ENERGY_NOW"] / 10^6 + energy_full = ENVIRON["POWER_SUPPLY_ENERGY_FULL"] / 10^6 + power_unit = "W" - power_now = current_now * voltage_now + power_now = ENVIRON["POWER_SUPPLY_POWER_NOW"] / 10^6 + + voltage_unit = "V" + voltage_now = ENVIRON["POWER_SUPPLY_VOLTAGE_NOW"] / 10^6 + voltage_min_design = ENVIRON["POWER_SUPPLY_VOLTAGE_MIN_DESIGN"] / 10^6 + + #printf "charge_now: %s\n", charge_now + #printf "charge_full: %s\n", charge_full + #printf "current_now: %s\n", current_now + #printf "energy_now: %s\n", energy_now + #printf "energy_full: %s\n", energy_full + #printf "energy_full: %s\n", ENVIRON["POWER_SUPPLY_ENERGY_FULL"] + #printf "energy_full: %s\n", ENVIRON["POWER_SUPPLY_ENERGY_FULL"] / 10^6 + #printf "power_now: %s\n", power_now + #printf "voltage_now: %s\n", voltage_now + + if (current_now == 0 && voltage_now != 0) { + current_now = power_now / voltage_now + } + if (power_now == 0) { + power_now = current_now * voltage_now + } + if (charge_now == 0 && voltage_min_design != 0) { + charge_now = energy_now / voltage_min_design + } + if (energy_now == 0) { + energy_now = charge_now * voltage_min_design + } + if (charge_full == 0 && voltage_min_design != 0) { + charge_full = energy_full / voltage_min_design + } + if (energy_full == 0) { + energy_full = charge_full * voltage_min_design + } + + if (charge_now == 0 || charge_full == 0) { + die("unknown charge") + } - charge_unit = "Ah" - charge_now = ENVIRON["POWER_SUPPLY_CHARGE_NOW"] / 10^6 - charge_full = ENVIRON["POWER_SUPPLY_CHARGE_FULL"] / 10^6 charge_ratio = charge_now / charge_full - energy_unit = "Wh" - energy_full = charge_full * voltage_min_design - - printf "%s %s %d%% %.2f%s/%.2f%s %d%s/%.1f%s %s\n" \ - , ENVIRON["POWER_SUPPLY_NAME"] \ - , print_bar(10, charge_ratio) \ - , charge_ratio * 100 \ - , charge_now, charge_unit \ - , current_now, current_unit \ - , energy_full, energy_unit \ - , power_now, power_unit \ - , print_hm(charge_now / current_now) + out = out name + out = out sprintf(" %s", print_bar(10, charge_ratio)) + out = out sprintf(" %d%", charge_ratio * 100) + out = out sprintf(" %.2f%s", charge_now, charge_unit) + if (current_now != 0) { + out = out sprintf("/%.1f%s", current_now, current_unit) + } + out = out sprintf(" %d%s", energy_full, energy_unit) + if (power_now != 0) { + out = out sprintf("/%.1f%s", power_now, power_unit) + } + if (current_now != 0) { + out = out sprintf(" %s", print_hm(charge_now / current_now)) + } + + print out } ' ''; in '' for uevent in /sys/class/power_supply/*/uevent; do - ${power_supply} "$uevent" + ${power_supply} "$uevent" || : done ''; |