From e21d9fcf37eda86b01f1335c76cf72654dcf76ab Mon Sep 17 00:00:00 2001 From: Matthias Kruk Date: Mon, 22 Mar 2021 09:46:46 +0900 Subject: [PATCH] include/acpi: Add modules for querying battery and PSU state This commit adds the acpi/battery and acpi/ac module which can be used to query the state of batteries and power supply units in the system through the kernel's sysfs ACPI interface. --- include/acpi/ac.sh | 19 ++++++++++++ include/acpi/battery.sh | 66 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 85 insertions(+) create mode 100644 include/acpi/ac.sh create mode 100644 include/acpi/battery.sh diff --git a/include/acpi/ac.sh b/include/acpi/ac.sh new file mode 100644 index 0000000..4ada7ba --- /dev/null +++ b/include/acpi/ac.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +__init() { + declare -gr __acpi_ac_path="/sys/class/power_supply" + + return 0 +} + +acpi_ac_get_state() { + local psu + + psu="$1" + + if ! cat "$__acpi_ac_path/$psu/online" 2>/dev/null; then + return 1 + fi + + return 0 +} diff --git a/include/acpi/battery.sh b/include/acpi/battery.sh new file mode 100644 index 0000000..9f0386f --- /dev/null +++ b/include/acpi/battery.sh @@ -0,0 +1,66 @@ +#!/bin/bash + +__init() { + declare -gr __acpi_battery_path="/sys/class/power_supply" + + return 0 +} + +acpi_battery_get_charge_full() { + local battery + + battery="$1" + + if cat "$__acpi_battery_path/$battery/charge_full" 2>/dev/null; then + return 0 + fi + + if cat "$__acpi_battery_path/$battery/energy_full" 2>/dev/null; then + return 0 + fi + + return 1 +} + +acpi_battery_get_charge_now() { + local battery + + battery="$1" + + if cat "$__acpi_battery_path/$battery/charge_now" 2>/dev/null; then + return 0 + fi + + if cat "$__acpi_battery_path/$battery/energy_now" 2>/dev/null; then + return 0 + fi + + return 1 +} + +acpi_battery_get_level() { + local battery + + local full + local now + local lvl + + battery="$1" + + if ! full=$(acpi_battery_get_charge_full "$battery"); then + return 1 + fi + + if ! now=$(acpi_battery_get_charge_now "$battery"); then + return 1 + fi + + if (( full == 0 )); then + return 1 + fi + + lvl=$((now * 100 / full)) + echo "$lvl" + + return 0 +} -- 2.47.3