From fca752849b8d3f2f992bf25f7488aa2e36c7d2a6 Mon Sep 17 00:00:00 2001 From: o9000 Date: Wed, 28 Dec 2016 19:13:54 +0100 Subject: [PATCH] Battery: fix issue #616 --- src/battery/battery.c | 2 + src/battery/battery.h | 2 + src/battery/linux.c | 243 +++++++++--------- src/tint.c | 15 +- test/acer-chromebook-c100pa/out.txt | 163 ++++++++++++ .../sys/class/power_supply/bq27500-0/capacity | 1 + .../power_supply/bq27500-0/capacity_level | 1 + .../class/power_supply/bq27500-0/charge_full | 1 + .../power_supply/bq27500-0/charge_full_design | 1 + .../class/power_supply/bq27500-0/charge_now | 1 + .../class/power_supply/bq27500-0/current_now | 1 + .../class/power_supply/bq27500-0/cycle_count | 1 + .../class/power_supply/bq27500-0/energy_now | 1 + .../sys/class/power_supply/bq27500-0/health | 1 + .../class/power_supply/bq27500-0/manufacturer | 1 + .../class/power_supply/bq27500-0/model_name | 1 + .../class/power_supply/bq27500-0/power/async | 1 + .../bq27500-0/power/autosuspend_delay_ms | 0 .../power_supply/bq27500-0/power/control | 1 + .../bq27500-0/power/runtime_active_kids | 1 + .../bq27500-0/power/runtime_active_time | 1 + .../bq27500-0/power/runtime_enabled | 1 + .../bq27500-0/power/runtime_status | 1 + .../bq27500-0/power/runtime_suspended_time | 1 + .../bq27500-0/power/runtime_usage | 1 + .../class/power_supply/bq27500-0/power/wakeup | 1 + .../bq27500-0/power/wakeup_abort_count | 1 + .../bq27500-0/power/wakeup_active | 1 + .../bq27500-0/power/wakeup_active_count | 1 + .../power_supply/bq27500-0/power/wakeup_count | 1 + .../bq27500-0/power/wakeup_expire_count | 1 + .../bq27500-0/power/wakeup_last_time_ms | 1 + .../bq27500-0/power/wakeup_max_time_ms | 1 + .../bq27500-0/power/wakeup_total_time_ms | 1 + .../power_supply/bq27500-0/power/wakeup_type | 1 + .../class/power_supply/bq27500-0/power_avg | 1 + .../sys/class/power_supply/bq27500-0/present | 1 + .../sys/class/power_supply/bq27500-0/status | 1 + .../class/power_supply/bq27500-0/technology | 1 + .../sys/class/power_supply/bq27500-0/temp | 1 + .../power_supply/bq27500-0/time_to_empty_avg | 1 + .../power_supply/bq27500-0/time_to_empty_now | 1 + .../power_supply/bq27500-0/time_to_full_now | 1 + .../sys/class/power_supply/bq27500-0/type | 1 + .../sys/class/power_supply/bq27500-0/uevent | 21 ++ .../class/power_supply/bq27500-0/voltage_now | 1 + .../class/power_supply/gpio-charger/online | 1 + .../power_supply/gpio-charger/power/async | 1 + .../gpio-charger/power/autosuspend_delay_ms | 0 .../power_supply/gpio-charger/power/control | 1 + .../gpio-charger/power/runtime_active_kids | 1 + .../gpio-charger/power/runtime_active_time | 1 + .../gpio-charger/power/runtime_enabled | 1 + .../gpio-charger/power/runtime_status | 1 + .../gpio-charger/power/runtime_suspended_time | 1 + .../gpio-charger/power/runtime_usage | 1 + .../power_supply/gpio-charger/power/wakeup | 1 + .../gpio-charger/power/wakeup_abort_count | 1 + .../gpio-charger/power/wakeup_active | 1 + .../gpio-charger/power/wakeup_active_count | 1 + .../gpio-charger/power/wakeup_count | 1 + .../gpio-charger/power/wakeup_expire_count | 1 + .../gpio-charger/power/wakeup_last_time_ms | 1 + .../gpio-charger/power/wakeup_max_time_ms | 1 + .../gpio-charger/power/wakeup_total_time_ms | 1 + .../gpio-charger/power/wakeup_type | 1 + .../sys/class/power_supply/gpio-charger/type | 1 + .../class/power_supply/gpio-charger/uevent | 2 + test/expand.py | 37 +++ test/lenovo/out.txt | 154 +++++++++++ test/lenovo/sys/class/power_supply/BAT0/alarm | 1 + .../sys/class/power_supply/BAT0/capacity | 1 + .../class/power_supply/BAT0/capacity_level | 1 + .../sys/class/power_supply/BAT0/cycle_count | 1 + .../sys/class/power_supply/BAT0/energy_full | 1 + .../power_supply/BAT0/energy_full_design | 1 + .../sys/class/power_supply/BAT0/energy_now | 1 + .../sys/class/power_supply/BAT0/manufacturer | 1 + .../sys/class/power_supply/BAT0/model_name | 1 + .../sys/class/power_supply/BAT0/power/async | 1 + .../BAT0/power/autosuspend_delay_ms | 0 .../sys/class/power_supply/BAT0/power/control | 1 + .../BAT0/power/runtime_active_kids | 1 + .../BAT0/power/runtime_active_time | 1 + .../power_supply/BAT0/power/runtime_enabled | 1 + .../power_supply/BAT0/power/runtime_status | 1 + .../BAT0/power/runtime_suspended_time | 1 + .../power_supply/BAT0/power/runtime_usage | 1 + .../sys/class/power_supply/BAT0/power_now | 1 + .../sys/class/power_supply/BAT0/present | 1 + .../sys/class/power_supply/BAT0/serial_number | 1 + .../lenovo/sys/class/power_supply/BAT0/status | 1 + .../sys/class/power_supply/BAT0/technology | 1 + test/lenovo/sys/class/power_supply/BAT0/type | 1 + .../lenovo/sys/class/power_supply/BAT0/uevent | 16 ++ .../power_supply/BAT0/voltage_min_design | 1 + .../sys/class/power_supply/BAT0/voltage_now | 1 + 97 files changed, 615 insertions(+), 124 deletions(-) create mode 100644 test/acer-chromebook-c100pa/out.txt create mode 100644 test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/capacity create mode 100644 test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/capacity_level create mode 100644 test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/charge_full create mode 100644 test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/charge_full_design create mode 100644 test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/charge_now create mode 100644 test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/current_now create mode 100644 test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/cycle_count create mode 100644 test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/energy_now create mode 100644 test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/health create mode 100644 test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/manufacturer create mode 100644 test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/model_name create mode 100644 test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/power/async create mode 100644 test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/power/autosuspend_delay_ms create mode 100644 test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/power/control create mode 100644 test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/power/runtime_active_kids create mode 100644 test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/power/runtime_active_time create mode 100644 test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/power/runtime_enabled create mode 100644 test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/power/runtime_status create mode 100644 test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/power/runtime_suspended_time create mode 100644 test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/power/runtime_usage create mode 100644 test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/power/wakeup create mode 100644 test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/power/wakeup_abort_count create mode 100644 test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/power/wakeup_active create mode 100644 test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/power/wakeup_active_count create mode 100644 test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/power/wakeup_count create mode 100644 test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/power/wakeup_expire_count create mode 100644 test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/power/wakeup_last_time_ms create mode 100644 test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/power/wakeup_max_time_ms create mode 100644 test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/power/wakeup_total_time_ms create mode 100644 test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/power/wakeup_type create mode 100644 test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/power_avg create mode 100644 test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/present create mode 100644 test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/status create mode 100644 test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/technology create mode 100644 test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/temp create mode 100644 test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/time_to_empty_avg create mode 100644 test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/time_to_empty_now create mode 100644 test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/time_to_full_now create mode 100644 test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/type create mode 100644 test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/uevent create mode 100644 test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/voltage_now create mode 100644 test/acer-chromebook-c100pa/sys/class/power_supply/gpio-charger/online create mode 100644 test/acer-chromebook-c100pa/sys/class/power_supply/gpio-charger/power/async create mode 100644 test/acer-chromebook-c100pa/sys/class/power_supply/gpio-charger/power/autosuspend_delay_ms create mode 100644 test/acer-chromebook-c100pa/sys/class/power_supply/gpio-charger/power/control create mode 100644 test/acer-chromebook-c100pa/sys/class/power_supply/gpio-charger/power/runtime_active_kids create mode 100644 test/acer-chromebook-c100pa/sys/class/power_supply/gpio-charger/power/runtime_active_time create mode 100644 test/acer-chromebook-c100pa/sys/class/power_supply/gpio-charger/power/runtime_enabled create mode 100644 test/acer-chromebook-c100pa/sys/class/power_supply/gpio-charger/power/runtime_status create mode 100644 test/acer-chromebook-c100pa/sys/class/power_supply/gpio-charger/power/runtime_suspended_time create mode 100644 test/acer-chromebook-c100pa/sys/class/power_supply/gpio-charger/power/runtime_usage create mode 100644 test/acer-chromebook-c100pa/sys/class/power_supply/gpio-charger/power/wakeup create mode 100644 test/acer-chromebook-c100pa/sys/class/power_supply/gpio-charger/power/wakeup_abort_count create mode 100644 test/acer-chromebook-c100pa/sys/class/power_supply/gpio-charger/power/wakeup_active create mode 100644 test/acer-chromebook-c100pa/sys/class/power_supply/gpio-charger/power/wakeup_active_count create mode 100644 test/acer-chromebook-c100pa/sys/class/power_supply/gpio-charger/power/wakeup_count create mode 100644 test/acer-chromebook-c100pa/sys/class/power_supply/gpio-charger/power/wakeup_expire_count create mode 100644 test/acer-chromebook-c100pa/sys/class/power_supply/gpio-charger/power/wakeup_last_time_ms create mode 100644 test/acer-chromebook-c100pa/sys/class/power_supply/gpio-charger/power/wakeup_max_time_ms create mode 100644 test/acer-chromebook-c100pa/sys/class/power_supply/gpio-charger/power/wakeup_total_time_ms create mode 100644 test/acer-chromebook-c100pa/sys/class/power_supply/gpio-charger/power/wakeup_type create mode 100644 test/acer-chromebook-c100pa/sys/class/power_supply/gpio-charger/type create mode 100644 test/acer-chromebook-c100pa/sys/class/power_supply/gpio-charger/uevent create mode 100755 test/expand.py create mode 100644 test/lenovo/out.txt create mode 100644 test/lenovo/sys/class/power_supply/BAT0/alarm create mode 100644 test/lenovo/sys/class/power_supply/BAT0/capacity create mode 100644 test/lenovo/sys/class/power_supply/BAT0/capacity_level create mode 100644 test/lenovo/sys/class/power_supply/BAT0/cycle_count create mode 100644 test/lenovo/sys/class/power_supply/BAT0/energy_full create mode 100644 test/lenovo/sys/class/power_supply/BAT0/energy_full_design create mode 100644 test/lenovo/sys/class/power_supply/BAT0/energy_now create mode 100644 test/lenovo/sys/class/power_supply/BAT0/manufacturer create mode 100644 test/lenovo/sys/class/power_supply/BAT0/model_name create mode 100644 test/lenovo/sys/class/power_supply/BAT0/power/async create mode 100644 test/lenovo/sys/class/power_supply/BAT0/power/autosuspend_delay_ms create mode 100644 test/lenovo/sys/class/power_supply/BAT0/power/control create mode 100644 test/lenovo/sys/class/power_supply/BAT0/power/runtime_active_kids create mode 100644 test/lenovo/sys/class/power_supply/BAT0/power/runtime_active_time create mode 100644 test/lenovo/sys/class/power_supply/BAT0/power/runtime_enabled create mode 100644 test/lenovo/sys/class/power_supply/BAT0/power/runtime_status create mode 100644 test/lenovo/sys/class/power_supply/BAT0/power/runtime_suspended_time create mode 100644 test/lenovo/sys/class/power_supply/BAT0/power/runtime_usage create mode 100644 test/lenovo/sys/class/power_supply/BAT0/power_now create mode 100644 test/lenovo/sys/class/power_supply/BAT0/present create mode 100644 test/lenovo/sys/class/power_supply/BAT0/serial_number create mode 100644 test/lenovo/sys/class/power_supply/BAT0/status create mode 100644 test/lenovo/sys/class/power_supply/BAT0/technology create mode 100644 test/lenovo/sys/class/power_supply/BAT0/type create mode 100644 test/lenovo/sys/class/power_supply/BAT0/uevent create mode 100644 test/lenovo/sys/class/power_supply/BAT0/voltage_min_design create mode 100644 test/lenovo/sys/class/power_supply/BAT0/voltage_now diff --git a/src/battery/battery.c b/src/battery/battery.c index 54cd2b8..cd4bdb6 100644 --- a/src/battery/battery.c +++ b/src/battery/battery.c @@ -56,6 +56,8 @@ char *battery_uwheel_command; char *battery_dwheel_command; gboolean battery_found; +char *battery_sys_prefix = (char*)""; + void battery_init_fonts(); char *battery_get_tooltip(void *obj); int battery_compute_desired_size(void *obj); diff --git a/src/battery/battery.h b/src/battery/battery.h index c515d37..9419e70 100644 --- a/src/battery/battery.h +++ b/src/battery/battery.h @@ -64,6 +64,8 @@ extern char *battery_rclick_command; extern char *battery_uwheel_command; extern char *battery_dwheel_command; +extern char *battery_sys_prefix; + static inline gchar *chargestate2str(ChargeState state) { switch (state) { diff --git a/src/battery/linux.c b/src/battery/linux.c index ef0c036..e816400 100644 --- a/src/battery/linux.c +++ b/src/battery/linux.c @@ -38,18 +38,16 @@ struct psy_battery { gint64 timestamp; /* sysfs files */ gchar *path_present; - gchar *path_energy_now; - gchar *path_energy_full; - gchar *path_power_now; + gchar *path_level_now; + gchar *path_level_full; + gchar *path_rate_now; gchar *path_status; - /* sysfs hints */ - gboolean energy_in_uamp; - gboolean power_in_uamp; /* values */ gboolean present; - gint energy_now; - gint energy_full; - gint power_now; + gint level_now; + gint level_full; + gint rate_now; + gchar unit; ChargeState status; }; @@ -76,22 +74,23 @@ static void uevent_battery_plug() static struct uevent_notify psy_plug = {UEVENT_ADD | UEVENT_REMOVE, "power_supply", NULL, uevent_battery_plug}; #define RETURN_ON_ERROR(err) \ - if (error) { \ + if (err) { \ g_error_free(err); \ + fprintf(stderr, RED "%s:%d: errror" RESET "\n", __FILE__, __LINE__); \ return FALSE; \ } static GList *batteries = NULL; static GList *mains = NULL; -static guint8 energy_to_percent(gint energy_now, gint energy_full) +static guint8 level_to_percent(gint level_now, gint level_full) { - return 0.5 + ((energy_now <= energy_full ? energy_now : energy_full) * 100.0) / energy_full; + return 0.5 + ((level_now <= level_full ? level_now : level_full) * 100.0) / level_full; } static enum psy_type power_supply_get_type(const gchar *entryname) { - gchar *path_type = g_build_filename("/sys/class/power_supply", entryname, "type", NULL); + gchar *path_type = g_build_filename(battery_sys_prefix, "/sys/class/power_supply", entryname, "type", NULL); GError *error = NULL; gchar *type; gsize typelen; @@ -99,6 +98,7 @@ static enum psy_type power_supply_get_type(const gchar *entryname) g_file_get_contents(path_type, &type, &typelen, &error); g_free(path_type); if (error) { + fprintf(stderr, RED "%s:%d: read failed" RESET "\n", __FILE__, __LINE__); g_error_free(error); return PSY_UNKNOWN; } @@ -122,59 +122,53 @@ static gboolean init_linux_battery(struct psy_battery *bat) { const gchar *entryname = bat->name; - bat->energy_in_uamp = FALSE; - bat->power_in_uamp = FALSE; - - bat->path_present = g_build_filename("/sys/class/power_supply", entryname, "present", NULL); + bat->path_present = g_build_filename(battery_sys_prefix, "/sys/class/power_supply", entryname, "present", NULL); if (!g_file_test(bat->path_present, G_FILE_TEST_EXISTS)) { + fprintf(stderr, RED "%s:%d: read failed" RESET "\n", __FILE__, __LINE__); goto err0; } - bat->path_energy_now = g_build_filename("/sys/class/power_supply", entryname, "energy_now", NULL); - if (!g_file_test(bat->path_energy_now, G_FILE_TEST_EXISTS)) { - g_free(bat->path_energy_now); - bat->path_energy_now = g_build_filename("/sys/class/power_supply", entryname, "charge_now", NULL); - bat->energy_in_uamp = TRUE; + bat->path_level_now = g_build_filename(battery_sys_prefix, "/sys/class/power_supply", entryname, "energy_now", NULL); + bat->path_level_full = + g_build_filename(battery_sys_prefix, "/sys/class/power_supply", entryname, "energy_full", NULL); + bat->path_rate_now = g_build_filename(battery_sys_prefix, "/sys/class/power_supply", entryname, "power_now", NULL); + bat->unit = 'W'; + + if (!g_file_test(bat->path_level_now, G_FILE_TEST_EXISTS) || + !g_file_test(bat->path_level_full, G_FILE_TEST_EXISTS) || + !g_file_test(bat->path_rate_now, G_FILE_TEST_EXISTS)) { + g_free(bat->path_level_now); + g_free(bat->path_level_full); + g_free(bat->path_rate_now); + bat->path_level_now = + g_build_filename(battery_sys_prefix, "/sys/class/power_supply", entryname, "charge_now", NULL); + bat->path_level_full = + g_build_filename(battery_sys_prefix, "/sys/class/power_supply", entryname, "charge_full", NULL); + bat->path_rate_now = + g_build_filename(battery_sys_prefix, "/sys/class/power_supply", entryname, "current_now", NULL); + bat->unit = 'A'; } - if (!g_file_test(bat->path_energy_now, G_FILE_TEST_EXISTS)) { + if (!g_file_test(bat->path_level_now, G_FILE_TEST_EXISTS) || + !g_file_test(bat->path_level_full, G_FILE_TEST_EXISTS) || + !g_file_test(bat->path_rate_now, G_FILE_TEST_EXISTS)) { + fprintf(stderr, RED "%s:%d: read failed" RESET "\n", __FILE__, __LINE__); goto err1; } - if (!bat->energy_in_uamp) { - bat->path_energy_full = g_build_filename("/sys/class/power_supply", entryname, "energy_full", NULL); - if (!g_file_test(bat->path_energy_full, G_FILE_TEST_EXISTS)) - goto err2; - } else { - bat->path_energy_full = g_build_filename("/sys/class/power_supply", entryname, "charge_full", NULL); - if (!g_file_test(bat->path_energy_full, G_FILE_TEST_EXISTS)) - goto err2; - } - - bat->path_power_now = g_build_filename("/sys/class/power_supply", entryname, "power_now", NULL); - if (!g_file_test(bat->path_power_now, G_FILE_TEST_EXISTS)) { - g_free(bat->path_power_now); - bat->path_power_now = g_build_filename("/sys/class/power_supply", entryname, "current_now", NULL); - bat->power_in_uamp = TRUE; - } - if (!g_file_test(bat->path_power_now, G_FILE_TEST_EXISTS)) { - goto err3; - } - - bat->path_status = g_build_filename("/sys/class/power_supply", entryname, "status", NULL); + bat->path_status = g_build_filename(battery_sys_prefix, "/sys/class/power_supply", entryname, "status", NULL); if (!g_file_test(bat->path_status, G_FILE_TEST_EXISTS)) { - goto err4; + fprintf(stderr, RED "%s:%d: read failed" RESET "\n", __FILE__, __LINE__); + goto err2; } return TRUE; -err4: - g_free(bat->path_status); -err3: - g_free(bat->path_power_now); err2: - g_free(bat->path_energy_full); + g_free(bat->path_status); err1: - g_free(bat->path_energy_now); + g_free(bat->path_level_now); + g_free(bat->path_level_full); + g_free(bat->path_rate_now); err0: g_free(bat->path_present); @@ -185,8 +179,9 @@ static gboolean init_linux_mains(struct psy_mains *ac) { const gchar *entryname = ac->name; - ac->path_online = g_build_filename("/sys/class/power_supply", entryname, "online", NULL); + ac->path_online = g_build_filename(battery_sys_prefix, "/sys/class/power_supply", entryname, "online", NULL); if (!g_file_test(ac->path_online, G_FILE_TEST_EXISTS)) { + fprintf(stderr, RED "%s:%d: read failed" RESET "\n", __FILE__, __LINE__); g_free(ac->path_online); return FALSE; } @@ -199,9 +194,9 @@ static void psy_battery_free(gpointer data) struct psy_battery *bat = data; g_free(bat->name); g_free(bat->path_status); - g_free(bat->path_power_now); - g_free(bat->path_energy_full); - g_free(bat->path_energy_now); + g_free(bat->path_rate_now); + g_free(bat->path_level_full); + g_free(bat->path_level_now); g_free(bat->path_present); g_free(bat); } @@ -232,10 +227,10 @@ static void add_battery(const char *entryname) if (init_linux_battery(bat)) { batteries = g_list_append(batteries, bat); - fprintf(stdout, "found battery \"%s\"\n", bat->name); + fprintf(stdout, GREEN "Found battery \"%s\"" RESET "\n", bat->name); } else { g_free(bat); - fprintf(stderr, RED "failed to initialize battery \"%s\"" RESET "\n", entryname); + fprintf(stderr, RED "Failed to initialize battery \"%s\"" RESET "\n", entryname); } } @@ -246,10 +241,10 @@ static void add_mains(const char *entryname) if (init_linux_mains(ac)) { mains = g_list_append(mains, ac); - fprintf(stdout, "found mains \"%s\"\n", ac->name); + fprintf(stdout, GREEN "Found mains \"%s\"" RESET "\n", ac->name); } else { g_free(ac); - fprintf(stderr, RED "failed to initialize mains \"%s\"" RESET "\n", entryname); + fprintf(stderr, RED "Failed to initialize mains \"%s\"" RESET "\n", entryname); } } @@ -261,10 +256,13 @@ gboolean battery_os_init() battery_os_free(); - directory = g_dir_open("/sys/class/power_supply", 0, &error); + gchar *dir_path = g_build_filename(battery_sys_prefix, "/sys/class/power_supply", NULL); + directory = g_dir_open(dir_path, 0, &error); + g_free(dir_path); RETURN_ON_ERROR(error); while ((entryname = g_dir_read_name(directory))) { + fprintf(stderr, GREEN "Found power device %s" RESET "\n", entryname); enum psy_type type = power_supply_get_type(entryname); switch (type) { @@ -287,15 +285,15 @@ gboolean battery_os_init() return batteries != NULL; } -static gint estimate_power_usage(struct psy_battery *bat, gint old_energy_now, gint64 old_timestamp) +static gint estimate_rate_usage(struct psy_battery *bat, gint old_level_now, gint64 old_timestamp) { - gint64 diff_power = ABS(bat->energy_now - old_energy_now); + gint64 diff_level = ABS(bat->level_now - old_level_now); gint64 diff_time = bat->timestamp - old_timestamp; /* µW = (µWh * 3600) / (µs / 1000000) */ - gint power = diff_power * 3600 * 1000000 / MAX(1, diff_time); + gint rate = diff_level * 3600 * 1000000 / MAX(1, diff_time); - return power; + return rate; } static gboolean update_linux_battery(struct psy_battery *bat) @@ -305,15 +303,15 @@ static gboolean update_linux_battery(struct psy_battery *bat) gsize datalen; gint64 old_timestamp = bat->timestamp; - int old_energy_now = bat->energy_now; - gint old_power_now = bat->power_now; + int old_level_now = bat->level_now; + gint old_rate_now = bat->rate_now; /* reset values */ bat->present = 0; bat->status = BATTERY_UNKNOWN; - bat->energy_now = 0; - bat->energy_full = 0; - bat->power_now = 0; + bat->level_now = 0; + bat->level_full = 0; + bat->rate_now = 0; bat->timestamp = g_get_monotonic_time(); /* present */ @@ -339,35 +337,35 @@ static gboolean update_linux_battery(struct psy_battery *bat) } g_free(data); - /* energy now */ - g_file_get_contents(bat->path_energy_now, &data, &datalen, &error); + /* level now */ + g_file_get_contents(bat->path_level_now, &data, &datalen, &error); RETURN_ON_ERROR(error); - bat->energy_now = atoi(data); + bat->level_now = atoi(data); g_free(data); - /* energy full */ - g_file_get_contents(bat->path_energy_full, &data, &datalen, &error); + /* level full */ + g_file_get_contents(bat->path_level_full, &data, &datalen, &error); RETURN_ON_ERROR(error); - bat->energy_full = atoi(data); + bat->level_full = atoi(data); g_free(data); - /* power now */ - g_file_get_contents(bat->path_power_now, &data, &datalen, &error); + /* rate now */ + g_file_get_contents(bat->path_rate_now, &data, &datalen, &error); if (g_error_matches(error, G_FILE_ERROR, G_FILE_ERROR_NODEV)) { - /* some hardware does not support reading current power consumption */ + /* some hardware does not support reading current rate consumption */ g_error_free(error); - bat->power_now = estimate_power_usage(bat, old_energy_now, old_timestamp); - if (bat->power_now == 0 && bat->status != BATTERY_FULL) { + bat->rate_now = estimate_rate_usage(bat, old_level_now, old_timestamp); + if (bat->rate_now == 0 && bat->status != BATTERY_FULL) { /* If the hardware updates the level slower than our sampling period, * we need to sample more rarely */ - bat->power_now = old_power_now; + bat->rate_now = old_rate_now; bat->timestamp = old_timestamp; } } else if (error) { g_error_free(error); return FALSE; } else { - bat->power_now = atoi(data); + bat->rate_now = atoi(data); g_free(data); } @@ -394,9 +392,9 @@ int battery_os_update(BatteryState *state) { GList *l; - gint64 total_energy_now = 0; - gint64 total_energy_full = 0; - gint64 total_power_now = 0; + gint64 total_level_now = 0; + gint64 total_level_full = 0; + gint64 total_rate_now = 0; gint seconds = 0; gboolean charging = FALSE; @@ -408,9 +406,9 @@ int battery_os_update(BatteryState *state) struct psy_battery *bat = l->data; update_linux_battery(bat); - total_energy_now += bat->energy_now; - total_energy_full += bat->energy_full; - total_power_now += bat->power_now; + total_level_now += bat->level_now; + total_level_full += bat->level_full; + total_rate_now += bat->rate_now; charging |= (bat->status == BATTERY_CHARGING); discharging |= (bat->status == BATTERY_DISCHARGING); @@ -432,17 +430,17 @@ int battery_os_update(BatteryState *state) state->state = BATTERY_FULL; /* calculate seconds */ - if (total_power_now > 0) { + if (total_rate_now > 0) { if (state->state == BATTERY_CHARGING) - seconds = 3600 * (total_energy_full - total_energy_now) / total_power_now; + seconds = 3600 * (total_level_full - total_level_now) / total_rate_now; else if (state->state == BATTERY_DISCHARGING) - seconds = 3600 * total_energy_now / total_power_now; + seconds = 3600 * total_level_now / total_rate_now; seconds = MAX(0, seconds); } battery_state_set_time(state, seconds); /* calculate percentage */ - state->percentage = energy_to_percent(total_energy_now, total_energy_full); + state->percentage = level_to_percent(total_level_now, total_level_full); /* AC state */ state->ac_connected = ac_connected; @@ -450,42 +448,41 @@ int battery_os_update(BatteryState *state) return 0; } -static gchar *energy_human_readable(struct psy_battery *bat) +static gchar *level_human_readable(struct psy_battery *bat) { - gint now = bat->energy_now; - gint full = bat->energy_full; - gchar unit = bat->energy_in_uamp ? 'A' : 'W'; + gint now = bat->level_now; + gint full = bat->level_full; if (full >= 1000000) { return g_strdup_printf("%d.%d / %d.%d %ch", - now / 1000000, - (now % 1000000) / 100000, - full / 1000000, - (full % 1000000) / 100000, - unit); + now / 1000000, + (now % 1000000) / 100000, + full / 1000000, + (full % 1000000) / 100000, + bat->unit); } else if (full >= 1000) { return g_strdup_printf("%d.%d / %d.%d m%ch", - now / 1000, - (now % 1000) / 100, - full / 1000, - (full % 1000) / 100, - unit); + now / 1000, + (now % 1000) / 100, + full / 1000, + (full % 1000) / 100, + bat->unit); } else { - return g_strdup_printf("%d / %d µ%ch", now, full, unit); + return g_strdup_printf("%d / %d µ%ch", now, full, bat->unit); } } -static gchar *power_human_readable(struct psy_battery *bat) +static gchar *rate_human_readable(struct psy_battery *bat) { - gint power = bat->power_now; - gchar unit = bat->power_in_uamp ? 'A' : 'W'; + gint rate = bat->rate_now; + gchar unit = bat->unit; - if (power >= 1000000) { - return g_strdup_printf("%d.%d %c", power / 1000000, (power % 1000000) / 100000, unit); - } else if (power >= 1000) { - return g_strdup_printf("%d.%d m%c", power / 1000, (power % 1000) / 100, unit); - } else if (power > 0) { - return g_strdup_printf("%d µ%c", power, unit); + if (rate >= 1000000) { + return g_strdup_printf("%d.%d %c", rate / 1000000, (rate % 1000000) / 100000, unit); + } else if (rate >= 1000) { + return g_strdup_printf("%d.%d m%c", rate / 1000, (rate % 1000) / 100, unit); + } else if (rate > 0) { + return g_strdup_printf("%d µ%c", rate, unit); } else { return g_strdup_printf("0 %c", unit); } @@ -510,16 +507,16 @@ char *battery_os_tooltip() continue; } - gchar *power = power_human_readable(bat); - gchar *energy = energy_human_readable(bat); - gchar *state = (bat->status == BATTERY_UNKNOWN) ? "Level" : chargestate2str(bat->status); + gchar *rate = rate_human_readable(bat); + gchar *level = level_human_readable(bat); + gchar *state = (bat->status == BATTERY_UNKNOWN) ? "energy" : chargestate2str(bat->status); - guint8 percentage = energy_to_percent(bat->energy_now, bat->energy_full); + guint8 percentage = level_to_percent(bat->level_now, bat->level_full); - g_string_append_printf(tooltip, "\t%s: %s (%u %%)\n\tPower: %s", state, energy, percentage, power); + g_string_append_printf(tooltip, "\t%s: %s (%u %%)\n\trate: %s", state, level, percentage, rate); - g_free(power); - g_free(energy); + g_free(rate); + g_free(level); } for (l = mains; l != NULL; l = l->next) { diff --git a/src/tint.c b/src/tint.c index ee32635..5d4c537 100644 --- a/src/tint.c +++ b/src/tint.c @@ -422,7 +422,20 @@ void init(int argc, char *argv[]) } } else if (i + 1 == argc) { config_path = strdup(argv[i]); - } else { + } +#ifdef ENABLE_BATTERY + else if (strcmp(argv[i], "--battery-sys-prefix") == 0) { + if (i + 1 < argc) { + i++; + battery_sys_prefix = strdup(argv[i]); + } else { + error = 1; + } + } +#endif + + + else { error = 1; } if (error) { diff --git a/test/acer-chromebook-c100pa/out.txt b/test/acer-chromebook-c100pa/out.txt new file mode 100644 index 0000000..9070548 --- /dev/null +++ b/test/acer-chromebook-c100pa/out.txt @@ -0,0 +1,163 @@ +/sys/class/power_supply/bq27500-0/ +cat: /sys/class/power_supply/bq27500-0/: Is a directory +/sys/class/power_supply/bq27500-0/temp +236 +/sys/class/power_supply/bq27500-0/type +Battery +/sys/class/power_supply/bq27500-0/power_avg +65324 +/sys/class/power_supply/bq27500-0/power +cat: /sys/class/power_supply/bq27500-0/power: Is a directory +/sys/class/power_supply/bq27500-0/power/control +auto +/sys/class/power_supply/bq27500-0/power/async +disabled +/sys/class/power_supply/bq27500-0/power/wakeup_abort_count +0 +/sys/class/power_supply/bq27500-0/power/wakeup_active +0 +/sys/class/power_supply/bq27500-0/power/wakeup_type +unknown +/sys/class/power_supply/bq27500-0/power/wakeup_total_time_ms +46 +/sys/class/power_supply/bq27500-0/power/wakeup_active_count +3 +/sys/class/power_supply/bq27500-0/power/runtime_enabled +disabled +/sys/class/power_supply/bq27500-0/power/runtime_active_kids +0 +/sys/class/power_supply/bq27500-0/power/runtime_active_time +0 +/sys/class/power_supply/bq27500-0/power/wakeup_max_time_ms +16 +/sys/class/power_supply/bq27500-0/power/wakeup_count +3 +/sys/class/power_supply/bq27500-0/power/wakeup_last_time_ms +264291 +/sys/class/power_supply/bq27500-0/power/wakeup +enabled +/sys/class/power_supply/bq27500-0/power/autosuspend_delay_ms +cat: /sys/class/power_supply/bq27500-0/power/autosuspend_delay_ms: Input/output error +/sys/class/power_supply/bq27500-0/power/runtime_status +unsupported +/sys/class/power_supply/bq27500-0/power/runtime_usage +0 +/sys/class/power_supply/bq27500-0/power/wakeup_expire_count +0 +/sys/class/power_supply/bq27500-0/power/runtime_suspended_time +0 +/sys/class/power_supply/bq27500-0/charge_full_design +8180000 +/sys/class/power_supply/bq27500-0/current_now +-498000 +/sys/class/power_supply/bq27500-0/charge_now +7253000 +/sys/class/power_supply/bq27500-0/charge_full +7323000 +/sys/class/power_supply/bq27500-0/device +cat: /sys/class/power_supply/bq27500-0/device: Is a directory +/sys/class/power_supply/bq27500-0/capacity +98 +/sys/class/power_supply/bq27500-0/health +Good +/sys/class/power_supply/bq27500-0/subsystem +cat: /sys/class/power_supply/bq27500-0/subsystem: Is a directory +/sys/class/power_supply/bq27500-0/capacity_level +Normal +/sys/class/power_supply/bq27500-0/status +Discharging +/sys/class/power_supply/bq27500-0/voltage_now +4260000 +/sys/class/power_supply/bq27500-0/uevent +POWER_SUPPLY_NAME=bq27500-0 +POWER_SUPPLY_STATUS=Discharging +POWER_SUPPLY_PRESENT=1 +POWER_SUPPLY_VOLTAGE_NOW=4260000 +POWER_SUPPLY_CURRENT_NOW=-498000 +POWER_SUPPLY_CAPACITY=98 +POWER_SUPPLY_CAPACITY_LEVEL=Normal +POWER_SUPPLY_TEMP=236 +POWER_SUPPLY_TIME_TO_EMPTY_NOW=40980 +POWER_SUPPLY_TIME_TO_EMPTY_AVG=0 +POWER_SUPPLY_TIME_TO_FULL_NOW=441780 +POWER_SUPPLY_TECHNOLOGY=Li-ion +POWER_SUPPLY_CHARGE_FULL=7323000 +POWER_SUPPLY_CHARGE_NOW=7253000 +POWER_SUPPLY_CHARGE_FULL_DESIGN=8180000 +POWER_SUPPLY_CYCLE_COUNT=46 +POWER_SUPPLY_ENERGY_NOW=7253000 +POWER_SUPPLY_POWER_AVG=65324 +POWER_SUPPLY_HEALTH=Good +POWER_SUPPLY_MANUFACTURER=Texas Instruments +POWER_SUPPLY_MODEL_NAME=C100-80 +/sys/class/power_supply/bq27500-0/energy_now +7253000 +/sys/class/power_supply/bq27500-0/model_name +C100-80 +/sys/class/power_supply/bq27500-0/manufacturer +Texas Instruments +/sys/class/power_supply/bq27500-0/technology +Li-ion +/sys/class/power_supply/bq27500-0/cycle_count +46 +/sys/class/power_supply/bq27500-0/time_to_full_now +441780 +/sys/class/power_supply/bq27500-0/time_to_empty_avg +0 +/sys/class/power_supply/bq27500-0/time_to_empty_now +40980 +/sys/class/power_supply/bq27500-0/present +1 +/sys/class/power_supply/gpio-charger/ +cat: /sys/class/power_supply/gpio-charger/: Is a directory +/sys/class/power_supply/gpio-charger/type +Mains +/sys/class/power_supply/gpio-charger/power +cat: /sys/class/power_supply/gpio-charger/power: Is a directory +/sys/class/power_supply/gpio-charger/power/control +auto +/sys/class/power_supply/gpio-charger/power/async +disabled +/sys/class/power_supply/gpio-charger/power/wakeup_abort_count +0 +/sys/class/power_supply/gpio-charger/power/wakeup_active +0 +/sys/class/power_supply/gpio-charger/power/wakeup_type +unknown +/sys/class/power_supply/gpio-charger/power/wakeup_total_time_ms +0 +/sys/class/power_supply/gpio-charger/power/wakeup_active_count +1 +/sys/class/power_supply/gpio-charger/power/runtime_enabled +disabled +/sys/class/power_supply/gpio-charger/power/runtime_active_kids +0 +/sys/class/power_supply/gpio-charger/power/runtime_active_time +0 +/sys/class/power_supply/gpio-charger/power/wakeup_max_time_ms +0 +/sys/class/power_supply/gpio-charger/power/wakeup_count +1 +/sys/class/power_supply/gpio-charger/power/wakeup_last_time_ms +349 +/sys/class/power_supply/gpio-charger/power/wakeup +enabled +/sys/class/power_supply/gpio-charger/power/autosuspend_delay_ms +cat: /sys/class/power_supply/gpio-charger/power/autosuspend_delay_ms: Input/output error +/sys/class/power_supply/gpio-charger/power/runtime_status +unsupported +/sys/class/power_supply/gpio-charger/power/runtime_usage +0 +/sys/class/power_supply/gpio-charger/power/wakeup_expire_count +0 +/sys/class/power_supply/gpio-charger/power/runtime_suspended_time +0 +/sys/class/power_supply/gpio-charger/device +cat: /sys/class/power_supply/gpio-charger/device: Is a directory +/sys/class/power_supply/gpio-charger/subsystem +cat: /sys/class/power_supply/gpio-charger/subsystem: Is a directory +/sys/class/power_supply/gpio-charger/online +0 +/sys/class/power_supply/gpio-charger/uevent +POWER_SUPPLY_NAME=gpio-charger +POWER_SUPPLY_ONLINE=0 diff --git a/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/capacity b/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/capacity new file mode 100644 index 0000000..6529ff8 --- /dev/null +++ b/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/capacity @@ -0,0 +1 @@ +98 diff --git a/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/capacity_level b/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/capacity_level new file mode 100644 index 0000000..b09e2da --- /dev/null +++ b/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/capacity_level @@ -0,0 +1 @@ +Normal diff --git a/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/charge_full b/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/charge_full new file mode 100644 index 0000000..be86cac --- /dev/null +++ b/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/charge_full @@ -0,0 +1 @@ +7323000 diff --git a/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/charge_full_design b/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/charge_full_design new file mode 100644 index 0000000..76d2abc --- /dev/null +++ b/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/charge_full_design @@ -0,0 +1 @@ +8180000 diff --git a/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/charge_now b/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/charge_now new file mode 100644 index 0000000..476c755 --- /dev/null +++ b/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/charge_now @@ -0,0 +1 @@ +7253000 diff --git a/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/current_now b/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/current_now new file mode 100644 index 0000000..f5e57fe --- /dev/null +++ b/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/current_now @@ -0,0 +1 @@ +-498000 diff --git a/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/cycle_count b/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/cycle_count new file mode 100644 index 0000000..9e5feb5 --- /dev/null +++ b/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/cycle_count @@ -0,0 +1 @@ +46 diff --git a/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/energy_now b/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/energy_now new file mode 100644 index 0000000..476c755 --- /dev/null +++ b/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/energy_now @@ -0,0 +1 @@ +7253000 diff --git a/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/health b/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/health new file mode 100644 index 0000000..cd9dd73 --- /dev/null +++ b/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/health @@ -0,0 +1 @@ +Good diff --git a/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/manufacturer b/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/manufacturer new file mode 100644 index 0000000..d7036b6 --- /dev/null +++ b/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/manufacturer @@ -0,0 +1 @@ +Texas Instruments diff --git a/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/model_name b/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/model_name new file mode 100644 index 0000000..c949a07 --- /dev/null +++ b/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/model_name @@ -0,0 +1 @@ +C100-80 diff --git a/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/power/async b/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/power/async new file mode 100644 index 0000000..7a68b11 --- /dev/null +++ b/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/power/async @@ -0,0 +1 @@ +disabled diff --git a/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/power/autosuspend_delay_ms b/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/power/autosuspend_delay_ms new file mode 100644 index 0000000..e69de29 diff --git a/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/power/control b/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/power/control new file mode 100644 index 0000000..865faf1 --- /dev/null +++ b/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/power/control @@ -0,0 +1 @@ +auto diff --git a/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/power/runtime_active_kids b/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/power/runtime_active_kids new file mode 100644 index 0000000..573541a --- /dev/null +++ b/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/power/runtime_active_kids @@ -0,0 +1 @@ +0 diff --git a/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/power/runtime_active_time b/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/power/runtime_active_time new file mode 100644 index 0000000..573541a --- /dev/null +++ b/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/power/runtime_active_time @@ -0,0 +1 @@ +0 diff --git a/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/power/runtime_enabled b/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/power/runtime_enabled new file mode 100644 index 0000000..7a68b11 --- /dev/null +++ b/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/power/runtime_enabled @@ -0,0 +1 @@ +disabled diff --git a/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/power/runtime_status b/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/power/runtime_status new file mode 100644 index 0000000..ad7ccf7 --- /dev/null +++ b/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/power/runtime_status @@ -0,0 +1 @@ +unsupported diff --git a/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/power/runtime_suspended_time b/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/power/runtime_suspended_time new file mode 100644 index 0000000..573541a --- /dev/null +++ b/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/power/runtime_suspended_time @@ -0,0 +1 @@ +0 diff --git a/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/power/runtime_usage b/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/power/runtime_usage new file mode 100644 index 0000000..573541a --- /dev/null +++ b/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/power/runtime_usage @@ -0,0 +1 @@ +0 diff --git a/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/power/wakeup b/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/power/wakeup new file mode 100644 index 0000000..86981e6 --- /dev/null +++ b/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/power/wakeup @@ -0,0 +1 @@ +enabled diff --git a/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/power/wakeup_abort_count b/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/power/wakeup_abort_count new file mode 100644 index 0000000..573541a --- /dev/null +++ b/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/power/wakeup_abort_count @@ -0,0 +1 @@ +0 diff --git a/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/power/wakeup_active b/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/power/wakeup_active new file mode 100644 index 0000000..573541a --- /dev/null +++ b/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/power/wakeup_active @@ -0,0 +1 @@ +0 diff --git a/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/power/wakeup_active_count b/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/power/wakeup_active_count new file mode 100644 index 0000000..00750ed --- /dev/null +++ b/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/power/wakeup_active_count @@ -0,0 +1 @@ +3 diff --git a/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/power/wakeup_count b/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/power/wakeup_count new file mode 100644 index 0000000..00750ed --- /dev/null +++ b/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/power/wakeup_count @@ -0,0 +1 @@ +3 diff --git a/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/power/wakeup_expire_count b/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/power/wakeup_expire_count new file mode 100644 index 0000000..573541a --- /dev/null +++ b/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/power/wakeup_expire_count @@ -0,0 +1 @@ +0 diff --git a/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/power/wakeup_last_time_ms b/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/power/wakeup_last_time_ms new file mode 100644 index 0000000..26737b8 --- /dev/null +++ b/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/power/wakeup_last_time_ms @@ -0,0 +1 @@ +264291 diff --git a/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/power/wakeup_max_time_ms b/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/power/wakeup_max_time_ms new file mode 100644 index 0000000..b6a7d89 --- /dev/null +++ b/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/power/wakeup_max_time_ms @@ -0,0 +1 @@ +16 diff --git a/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/power/wakeup_total_time_ms b/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/power/wakeup_total_time_ms new file mode 100644 index 0000000..9e5feb5 --- /dev/null +++ b/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/power/wakeup_total_time_ms @@ -0,0 +1 @@ +46 diff --git a/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/power/wakeup_type b/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/power/wakeup_type new file mode 100644 index 0000000..3546645 --- /dev/null +++ b/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/power/wakeup_type @@ -0,0 +1 @@ +unknown diff --git a/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/power_avg b/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/power_avg new file mode 100644 index 0000000..cb0f9e7 --- /dev/null +++ b/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/power_avg @@ -0,0 +1 @@ +65324 diff --git a/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/present b/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/present new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/present @@ -0,0 +1 @@ +1 diff --git a/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/status b/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/status new file mode 100644 index 0000000..4674475 --- /dev/null +++ b/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/status @@ -0,0 +1 @@ +Discharging diff --git a/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/technology b/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/technology new file mode 100644 index 0000000..2c679ca --- /dev/null +++ b/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/technology @@ -0,0 +1 @@ +Li-ion diff --git a/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/temp b/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/temp new file mode 100644 index 0000000..f1f094b --- /dev/null +++ b/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/temp @@ -0,0 +1 @@ +236 diff --git a/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/time_to_empty_avg b/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/time_to_empty_avg new file mode 100644 index 0000000..573541a --- /dev/null +++ b/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/time_to_empty_avg @@ -0,0 +1 @@ +0 diff --git a/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/time_to_empty_now b/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/time_to_empty_now new file mode 100644 index 0000000..7332282 --- /dev/null +++ b/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/time_to_empty_now @@ -0,0 +1 @@ +40980 diff --git a/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/time_to_full_now b/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/time_to_full_now new file mode 100644 index 0000000..37a1398 --- /dev/null +++ b/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/time_to_full_now @@ -0,0 +1 @@ +441780 diff --git a/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/type b/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/type new file mode 100644 index 0000000..6784dd3 --- /dev/null +++ b/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/type @@ -0,0 +1 @@ +Battery diff --git a/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/uevent b/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/uevent new file mode 100644 index 0000000..53db204 --- /dev/null +++ b/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/uevent @@ -0,0 +1,21 @@ +POWER_SUPPLY_NAME=bq27500-0 +POWER_SUPPLY_STATUS=Discharging +POWER_SUPPLY_PRESENT=1 +POWER_SUPPLY_VOLTAGE_NOW=4260000 +POWER_SUPPLY_CURRENT_NOW=-498000 +POWER_SUPPLY_CAPACITY=98 +POWER_SUPPLY_CAPACITY_LEVEL=Normal +POWER_SUPPLY_TEMP=236 +POWER_SUPPLY_TIME_TO_EMPTY_NOW=40980 +POWER_SUPPLY_TIME_TO_EMPTY_AVG=0 +POWER_SUPPLY_TIME_TO_FULL_NOW=441780 +POWER_SUPPLY_TECHNOLOGY=Li-ion +POWER_SUPPLY_CHARGE_FULL=7323000 +POWER_SUPPLY_CHARGE_NOW=7253000 +POWER_SUPPLY_CHARGE_FULL_DESIGN=8180000 +POWER_SUPPLY_CYCLE_COUNT=46 +POWER_SUPPLY_ENERGY_NOW=7253000 +POWER_SUPPLY_POWER_AVG=65324 +POWER_SUPPLY_HEALTH=Good +POWER_SUPPLY_MANUFACTURER=Texas Instruments +POWER_SUPPLY_MODEL_NAME=C100-80 diff --git a/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/voltage_now b/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/voltage_now new file mode 100644 index 0000000..c721dbb --- /dev/null +++ b/test/acer-chromebook-c100pa/sys/class/power_supply/bq27500-0/voltage_now @@ -0,0 +1 @@ +4260000 diff --git a/test/acer-chromebook-c100pa/sys/class/power_supply/gpio-charger/online b/test/acer-chromebook-c100pa/sys/class/power_supply/gpio-charger/online new file mode 100644 index 0000000..573541a --- /dev/null +++ b/test/acer-chromebook-c100pa/sys/class/power_supply/gpio-charger/online @@ -0,0 +1 @@ +0 diff --git a/test/acer-chromebook-c100pa/sys/class/power_supply/gpio-charger/power/async b/test/acer-chromebook-c100pa/sys/class/power_supply/gpio-charger/power/async new file mode 100644 index 0000000..7a68b11 --- /dev/null +++ b/test/acer-chromebook-c100pa/sys/class/power_supply/gpio-charger/power/async @@ -0,0 +1 @@ +disabled diff --git a/test/acer-chromebook-c100pa/sys/class/power_supply/gpio-charger/power/autosuspend_delay_ms b/test/acer-chromebook-c100pa/sys/class/power_supply/gpio-charger/power/autosuspend_delay_ms new file mode 100644 index 0000000..e69de29 diff --git a/test/acer-chromebook-c100pa/sys/class/power_supply/gpio-charger/power/control b/test/acer-chromebook-c100pa/sys/class/power_supply/gpio-charger/power/control new file mode 100644 index 0000000..865faf1 --- /dev/null +++ b/test/acer-chromebook-c100pa/sys/class/power_supply/gpio-charger/power/control @@ -0,0 +1 @@ +auto diff --git a/test/acer-chromebook-c100pa/sys/class/power_supply/gpio-charger/power/runtime_active_kids b/test/acer-chromebook-c100pa/sys/class/power_supply/gpio-charger/power/runtime_active_kids new file mode 100644 index 0000000..573541a --- /dev/null +++ b/test/acer-chromebook-c100pa/sys/class/power_supply/gpio-charger/power/runtime_active_kids @@ -0,0 +1 @@ +0 diff --git a/test/acer-chromebook-c100pa/sys/class/power_supply/gpio-charger/power/runtime_active_time b/test/acer-chromebook-c100pa/sys/class/power_supply/gpio-charger/power/runtime_active_time new file mode 100644 index 0000000..573541a --- /dev/null +++ b/test/acer-chromebook-c100pa/sys/class/power_supply/gpio-charger/power/runtime_active_time @@ -0,0 +1 @@ +0 diff --git a/test/acer-chromebook-c100pa/sys/class/power_supply/gpio-charger/power/runtime_enabled b/test/acer-chromebook-c100pa/sys/class/power_supply/gpio-charger/power/runtime_enabled new file mode 100644 index 0000000..7a68b11 --- /dev/null +++ b/test/acer-chromebook-c100pa/sys/class/power_supply/gpio-charger/power/runtime_enabled @@ -0,0 +1 @@ +disabled diff --git a/test/acer-chromebook-c100pa/sys/class/power_supply/gpio-charger/power/runtime_status b/test/acer-chromebook-c100pa/sys/class/power_supply/gpio-charger/power/runtime_status new file mode 100644 index 0000000..ad7ccf7 --- /dev/null +++ b/test/acer-chromebook-c100pa/sys/class/power_supply/gpio-charger/power/runtime_status @@ -0,0 +1 @@ +unsupported diff --git a/test/acer-chromebook-c100pa/sys/class/power_supply/gpio-charger/power/runtime_suspended_time b/test/acer-chromebook-c100pa/sys/class/power_supply/gpio-charger/power/runtime_suspended_time new file mode 100644 index 0000000..573541a --- /dev/null +++ b/test/acer-chromebook-c100pa/sys/class/power_supply/gpio-charger/power/runtime_suspended_time @@ -0,0 +1 @@ +0 diff --git a/test/acer-chromebook-c100pa/sys/class/power_supply/gpio-charger/power/runtime_usage b/test/acer-chromebook-c100pa/sys/class/power_supply/gpio-charger/power/runtime_usage new file mode 100644 index 0000000..573541a --- /dev/null +++ b/test/acer-chromebook-c100pa/sys/class/power_supply/gpio-charger/power/runtime_usage @@ -0,0 +1 @@ +0 diff --git a/test/acer-chromebook-c100pa/sys/class/power_supply/gpio-charger/power/wakeup b/test/acer-chromebook-c100pa/sys/class/power_supply/gpio-charger/power/wakeup new file mode 100644 index 0000000..86981e6 --- /dev/null +++ b/test/acer-chromebook-c100pa/sys/class/power_supply/gpio-charger/power/wakeup @@ -0,0 +1 @@ +enabled diff --git a/test/acer-chromebook-c100pa/sys/class/power_supply/gpio-charger/power/wakeup_abort_count b/test/acer-chromebook-c100pa/sys/class/power_supply/gpio-charger/power/wakeup_abort_count new file mode 100644 index 0000000..573541a --- /dev/null +++ b/test/acer-chromebook-c100pa/sys/class/power_supply/gpio-charger/power/wakeup_abort_count @@ -0,0 +1 @@ +0 diff --git a/test/acer-chromebook-c100pa/sys/class/power_supply/gpio-charger/power/wakeup_active b/test/acer-chromebook-c100pa/sys/class/power_supply/gpio-charger/power/wakeup_active new file mode 100644 index 0000000..573541a --- /dev/null +++ b/test/acer-chromebook-c100pa/sys/class/power_supply/gpio-charger/power/wakeup_active @@ -0,0 +1 @@ +0 diff --git a/test/acer-chromebook-c100pa/sys/class/power_supply/gpio-charger/power/wakeup_active_count b/test/acer-chromebook-c100pa/sys/class/power_supply/gpio-charger/power/wakeup_active_count new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/test/acer-chromebook-c100pa/sys/class/power_supply/gpio-charger/power/wakeup_active_count @@ -0,0 +1 @@ +1 diff --git a/test/acer-chromebook-c100pa/sys/class/power_supply/gpio-charger/power/wakeup_count b/test/acer-chromebook-c100pa/sys/class/power_supply/gpio-charger/power/wakeup_count new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/test/acer-chromebook-c100pa/sys/class/power_supply/gpio-charger/power/wakeup_count @@ -0,0 +1 @@ +1 diff --git a/test/acer-chromebook-c100pa/sys/class/power_supply/gpio-charger/power/wakeup_expire_count b/test/acer-chromebook-c100pa/sys/class/power_supply/gpio-charger/power/wakeup_expire_count new file mode 100644 index 0000000..573541a --- /dev/null +++ b/test/acer-chromebook-c100pa/sys/class/power_supply/gpio-charger/power/wakeup_expire_count @@ -0,0 +1 @@ +0 diff --git a/test/acer-chromebook-c100pa/sys/class/power_supply/gpio-charger/power/wakeup_last_time_ms b/test/acer-chromebook-c100pa/sys/class/power_supply/gpio-charger/power/wakeup_last_time_ms new file mode 100644 index 0000000..aef2e27 --- /dev/null +++ b/test/acer-chromebook-c100pa/sys/class/power_supply/gpio-charger/power/wakeup_last_time_ms @@ -0,0 +1 @@ +349 diff --git a/test/acer-chromebook-c100pa/sys/class/power_supply/gpio-charger/power/wakeup_max_time_ms b/test/acer-chromebook-c100pa/sys/class/power_supply/gpio-charger/power/wakeup_max_time_ms new file mode 100644 index 0000000..573541a --- /dev/null +++ b/test/acer-chromebook-c100pa/sys/class/power_supply/gpio-charger/power/wakeup_max_time_ms @@ -0,0 +1 @@ +0 diff --git a/test/acer-chromebook-c100pa/sys/class/power_supply/gpio-charger/power/wakeup_total_time_ms b/test/acer-chromebook-c100pa/sys/class/power_supply/gpio-charger/power/wakeup_total_time_ms new file mode 100644 index 0000000..573541a --- /dev/null +++ b/test/acer-chromebook-c100pa/sys/class/power_supply/gpio-charger/power/wakeup_total_time_ms @@ -0,0 +1 @@ +0 diff --git a/test/acer-chromebook-c100pa/sys/class/power_supply/gpio-charger/power/wakeup_type b/test/acer-chromebook-c100pa/sys/class/power_supply/gpio-charger/power/wakeup_type new file mode 100644 index 0000000..3546645 --- /dev/null +++ b/test/acer-chromebook-c100pa/sys/class/power_supply/gpio-charger/power/wakeup_type @@ -0,0 +1 @@ +unknown diff --git a/test/acer-chromebook-c100pa/sys/class/power_supply/gpio-charger/type b/test/acer-chromebook-c100pa/sys/class/power_supply/gpio-charger/type new file mode 100644 index 0000000..9aaee2d --- /dev/null +++ b/test/acer-chromebook-c100pa/sys/class/power_supply/gpio-charger/type @@ -0,0 +1 @@ +Mains diff --git a/test/acer-chromebook-c100pa/sys/class/power_supply/gpio-charger/uevent b/test/acer-chromebook-c100pa/sys/class/power_supply/gpio-charger/uevent new file mode 100644 index 0000000..1dbb900 --- /dev/null +++ b/test/acer-chromebook-c100pa/sys/class/power_supply/gpio-charger/uevent @@ -0,0 +1,2 @@ +POWER_SUPPLY_NAME=gpio-charger +POWER_SUPPLY_ONLINE=0 diff --git a/test/expand.py b/test/expand.py new file mode 100755 index 0000000..7a7e2fd --- /dev/null +++ b/test/expand.py @@ -0,0 +1,37 @@ +#!/usr/bin/env python2 + +# Creates directory tree printed by: +# bash -c "for d in /sys/class/power_supply/* ; do find $d/ -exec sh -c 'echo {} ; cat {} ' ';' ; done" 2>&1 | tee out.txt + +import os +import sys + + +def flush(path, content): + if not path: + return + if content.startswith("cat: %s: Is a directory" % path): + try: + os.makedirs("./" + path) + except: + pass + elif content.startswith("cat: %s:" % path): + with open("./" + path, "w") as f: + pass + else: + with open("./" + path, "w") as f: + f.write(content) + + +with open(sys.argv[1], "r") as f: + path = None + content = "" + for line in f: + if line.startswith("/"): + flush(path, content) + content = "" + path = line.strip() + else: + content += line + if content: + flush(path, content) diff --git a/test/lenovo/out.txt b/test/lenovo/out.txt new file mode 100644 index 0000000..796163b --- /dev/null +++ b/test/lenovo/out.txt @@ -0,0 +1,154 @@ +/sys/class/power_supply/BAT0/ +cat: /sys/class/power_supply/BAT0/: Is a directory +/sys/class/power_supply/BAT0/type +Battery +/sys/class/power_supply/BAT0/power_now +16382000 +/sys/class/power_supply/BAT0/alarm +2446000 +/sys/class/power_supply/BAT0/power +cat: /sys/class/power_supply/BAT0/power: Is a directory +/sys/class/power_supply/BAT0/power/control +auto +/sys/class/power_supply/BAT0/power/async +disabled +/sys/class/power_supply/BAT0/power/runtime_enabled +disabled +/sys/class/power_supply/BAT0/power/runtime_active_kids +0 +/sys/class/power_supply/BAT0/power/runtime_active_time +0 +/sys/class/power_supply/BAT0/power/autosuspend_delay_ms +cat: /sys/class/power_supply/BAT0/power/autosuspend_delay_ms: Input/output error +/sys/class/power_supply/BAT0/power/runtime_status +unsupported +/sys/class/power_supply/BAT0/power/runtime_usage +0 +/sys/class/power_supply/BAT0/power/runtime_suspended_time +0 +/sys/class/power_supply/BAT0/device +cat: /sys/class/power_supply/BAT0/device: Is a directory +/sys/class/power_supply/BAT0/capacity +97 +/sys/class/power_supply/BAT0/subsystem +cat: /sys/class/power_supply/BAT0/subsystem: Is a directory +/sys/class/power_supply/BAT0/capacity_level +Normal +/sys/class/power_supply/BAT0/status +Discharging +/sys/class/power_supply/BAT0/voltage_now +12144000 +/sys/class/power_supply/BAT0/uevent +POWER_SUPPLY_NAME=BAT0 +POWER_SUPPLY_STATUS=Discharging +POWER_SUPPLY_PRESENT=1 +POWER_SUPPLY_TECHNOLOGY=Li-ion +POWER_SUPPLY_CYCLE_COUNT=0 +POWER_SUPPLY_VOLTAGE_MIN_DESIGN=11100000 +POWER_SUPPLY_VOLTAGE_NOW=12144000 +POWER_SUPPLY_POWER_NOW=16382000 +POWER_SUPPLY_ENERGY_FULL_DESIGN=86580000 +POWER_SUPPLY_ENERGY_FULL=48920000 +POWER_SUPPLY_ENERGY_NOW=47660000 +POWER_SUPPLY_CAPACITY=97 +POWER_SUPPLY_CAPACITY_LEVEL=Normal +POWER_SUPPLY_MODEL_NAME=45N1029 +POWER_SUPPLY_MANUFACTURER=LGC +POWER_SUPPLY_SERIAL_NUMBER= 494 +/sys/class/power_supply/BAT0/energy_now +47660000 +/sys/class/power_supply/BAT0/model_name +45N1029 +/sys/class/power_supply/BAT0/manufacturer +LGC +/sys/class/power_supply/BAT0/technology +Li-ion +/sys/class/power_supply/BAT0/cycle_count +0 +/sys/class/power_supply/BAT0/energy_full_design +86580000 +/sys/class/power_supply/BAT0/voltage_min_design +11100000 +/sys/class/power_supply/BAT0/serial_number + 494 +/sys/class/power_supply/BAT0/energy_full +48920000 +/sys/class/power_supply/BAT0/present +1 +/sys/class/power_supply/BAT0/ +cat: /sys/class/power_supply/BAT0/: Is a directory +/sys/class/power_supply/BAT0/type +Battery +/sys/class/power_supply/BAT0/power_now +16382000 +/sys/class/power_supply/BAT0/alarm +2446000 +/sys/class/power_supply/BAT0/power +cat: /sys/class/power_supply/BAT0/power: Is a directory +/sys/class/power_supply/BAT0/power/control +auto +/sys/class/power_supply/BAT0/power/async +disabled +/sys/class/power_supply/BAT0/power/runtime_enabled +disabled +/sys/class/power_supply/BAT0/power/runtime_active_kids +0 +/sys/class/power_supply/BAT0/power/runtime_active_time +0 +/sys/class/power_supply/BAT0/power/autosuspend_delay_ms +cat: /sys/class/power_supply/BAT0/power/autosuspend_delay_ms: Input/output error +/sys/class/power_supply/BAT0/power/runtime_status +unsupported +/sys/class/power_supply/BAT0/power/runtime_usage +0 +/sys/class/power_supply/BAT0/power/runtime_suspended_time +0 +/sys/class/power_supply/BAT0/device +cat: /sys/class/power_supply/BAT0/device: Is a directory +/sys/class/power_supply/BAT0/capacity +97 +/sys/class/power_supply/BAT0/subsystem +cat: /sys/class/power_supply/BAT0/subsystem: Is a directory +/sys/class/power_supply/BAT0/capacity_level +Normal +/sys/class/power_supply/BAT0/status +Discharging +/sys/class/power_supply/BAT0/voltage_now +12144000 +/sys/class/power_supply/BAT0/uevent +POWER_SUPPLY_NAME=BAT0 +POWER_SUPPLY_STATUS=Discharging +POWER_SUPPLY_PRESENT=1 +POWER_SUPPLY_TECHNOLOGY=Li-ion +POWER_SUPPLY_CYCLE_COUNT=0 +POWER_SUPPLY_VOLTAGE_MIN_DESIGN=11100000 +POWER_SUPPLY_VOLTAGE_NOW=12144000 +POWER_SUPPLY_POWER_NOW=16382000 +POWER_SUPPLY_ENERGY_FULL_DESIGN=86580000 +POWER_SUPPLY_ENERGY_FULL=48920000 +POWER_SUPPLY_ENERGY_NOW=47660000 +POWER_SUPPLY_CAPACITY=97 +POWER_SUPPLY_CAPACITY_LEVEL=Normal +POWER_SUPPLY_MODEL_NAME=45N1029 +POWER_SUPPLY_MANUFACTURER=LGC +POWER_SUPPLY_SERIAL_NUMBER= 494 +/sys/class/power_supply/BAT0/energy_now +47660000 +/sys/class/power_supply/BAT0/model_name +45N1029 +/sys/class/power_supply/BAT0/manufacturer +LGC +/sys/class/power_supply/BAT0/technology +Li-ion +/sys/class/power_supply/BAT0/cycle_count +0 +/sys/class/power_supply/BAT0/energy_full_design +86580000 +/sys/class/power_supply/BAT0/voltage_min_design +11100000 +/sys/class/power_supply/BAT0/serial_number + 494 +/sys/class/power_supply/BAT0/energy_full +48920000 +/sys/class/power_supply/BAT0/present +1 diff --git a/test/lenovo/sys/class/power_supply/BAT0/alarm b/test/lenovo/sys/class/power_supply/BAT0/alarm new file mode 100644 index 0000000..93ca98f --- /dev/null +++ b/test/lenovo/sys/class/power_supply/BAT0/alarm @@ -0,0 +1 @@ +2446000 diff --git a/test/lenovo/sys/class/power_supply/BAT0/capacity b/test/lenovo/sys/class/power_supply/BAT0/capacity new file mode 100644 index 0000000..c17e934 --- /dev/null +++ b/test/lenovo/sys/class/power_supply/BAT0/capacity @@ -0,0 +1 @@ +97 diff --git a/test/lenovo/sys/class/power_supply/BAT0/capacity_level b/test/lenovo/sys/class/power_supply/BAT0/capacity_level new file mode 100644 index 0000000..b09e2da --- /dev/null +++ b/test/lenovo/sys/class/power_supply/BAT0/capacity_level @@ -0,0 +1 @@ +Normal diff --git a/test/lenovo/sys/class/power_supply/BAT0/cycle_count b/test/lenovo/sys/class/power_supply/BAT0/cycle_count new file mode 100644 index 0000000..573541a --- /dev/null +++ b/test/lenovo/sys/class/power_supply/BAT0/cycle_count @@ -0,0 +1 @@ +0 diff --git a/test/lenovo/sys/class/power_supply/BAT0/energy_full b/test/lenovo/sys/class/power_supply/BAT0/energy_full new file mode 100644 index 0000000..5f1d4eb --- /dev/null +++ b/test/lenovo/sys/class/power_supply/BAT0/energy_full @@ -0,0 +1 @@ +48920000 diff --git a/test/lenovo/sys/class/power_supply/BAT0/energy_full_design b/test/lenovo/sys/class/power_supply/BAT0/energy_full_design new file mode 100644 index 0000000..dcd3045 --- /dev/null +++ b/test/lenovo/sys/class/power_supply/BAT0/energy_full_design @@ -0,0 +1 @@ +86580000 diff --git a/test/lenovo/sys/class/power_supply/BAT0/energy_now b/test/lenovo/sys/class/power_supply/BAT0/energy_now new file mode 100644 index 0000000..bbb419a --- /dev/null +++ b/test/lenovo/sys/class/power_supply/BAT0/energy_now @@ -0,0 +1 @@ +47660000 diff --git a/test/lenovo/sys/class/power_supply/BAT0/manufacturer b/test/lenovo/sys/class/power_supply/BAT0/manufacturer new file mode 100644 index 0000000..6d286aa --- /dev/null +++ b/test/lenovo/sys/class/power_supply/BAT0/manufacturer @@ -0,0 +1 @@ +LGC diff --git a/test/lenovo/sys/class/power_supply/BAT0/model_name b/test/lenovo/sys/class/power_supply/BAT0/model_name new file mode 100644 index 0000000..3676db3 --- /dev/null +++ b/test/lenovo/sys/class/power_supply/BAT0/model_name @@ -0,0 +1 @@ +45N1029 diff --git a/test/lenovo/sys/class/power_supply/BAT0/power/async b/test/lenovo/sys/class/power_supply/BAT0/power/async new file mode 100644 index 0000000..7a68b11 --- /dev/null +++ b/test/lenovo/sys/class/power_supply/BAT0/power/async @@ -0,0 +1 @@ +disabled diff --git a/test/lenovo/sys/class/power_supply/BAT0/power/autosuspend_delay_ms b/test/lenovo/sys/class/power_supply/BAT0/power/autosuspend_delay_ms new file mode 100644 index 0000000..e69de29 diff --git a/test/lenovo/sys/class/power_supply/BAT0/power/control b/test/lenovo/sys/class/power_supply/BAT0/power/control new file mode 100644 index 0000000..865faf1 --- /dev/null +++ b/test/lenovo/sys/class/power_supply/BAT0/power/control @@ -0,0 +1 @@ +auto diff --git a/test/lenovo/sys/class/power_supply/BAT0/power/runtime_active_kids b/test/lenovo/sys/class/power_supply/BAT0/power/runtime_active_kids new file mode 100644 index 0000000..573541a --- /dev/null +++ b/test/lenovo/sys/class/power_supply/BAT0/power/runtime_active_kids @@ -0,0 +1 @@ +0 diff --git a/test/lenovo/sys/class/power_supply/BAT0/power/runtime_active_time b/test/lenovo/sys/class/power_supply/BAT0/power/runtime_active_time new file mode 100644 index 0000000..573541a --- /dev/null +++ b/test/lenovo/sys/class/power_supply/BAT0/power/runtime_active_time @@ -0,0 +1 @@ +0 diff --git a/test/lenovo/sys/class/power_supply/BAT0/power/runtime_enabled b/test/lenovo/sys/class/power_supply/BAT0/power/runtime_enabled new file mode 100644 index 0000000..7a68b11 --- /dev/null +++ b/test/lenovo/sys/class/power_supply/BAT0/power/runtime_enabled @@ -0,0 +1 @@ +disabled diff --git a/test/lenovo/sys/class/power_supply/BAT0/power/runtime_status b/test/lenovo/sys/class/power_supply/BAT0/power/runtime_status new file mode 100644 index 0000000..ad7ccf7 --- /dev/null +++ b/test/lenovo/sys/class/power_supply/BAT0/power/runtime_status @@ -0,0 +1 @@ +unsupported diff --git a/test/lenovo/sys/class/power_supply/BAT0/power/runtime_suspended_time b/test/lenovo/sys/class/power_supply/BAT0/power/runtime_suspended_time new file mode 100644 index 0000000..573541a --- /dev/null +++ b/test/lenovo/sys/class/power_supply/BAT0/power/runtime_suspended_time @@ -0,0 +1 @@ +0 diff --git a/test/lenovo/sys/class/power_supply/BAT0/power/runtime_usage b/test/lenovo/sys/class/power_supply/BAT0/power/runtime_usage new file mode 100644 index 0000000..573541a --- /dev/null +++ b/test/lenovo/sys/class/power_supply/BAT0/power/runtime_usage @@ -0,0 +1 @@ +0 diff --git a/test/lenovo/sys/class/power_supply/BAT0/power_now b/test/lenovo/sys/class/power_supply/BAT0/power_now new file mode 100644 index 0000000..ffbeafe --- /dev/null +++ b/test/lenovo/sys/class/power_supply/BAT0/power_now @@ -0,0 +1 @@ +16382000 diff --git a/test/lenovo/sys/class/power_supply/BAT0/present b/test/lenovo/sys/class/power_supply/BAT0/present new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/test/lenovo/sys/class/power_supply/BAT0/present @@ -0,0 +1 @@ +1 diff --git a/test/lenovo/sys/class/power_supply/BAT0/serial_number b/test/lenovo/sys/class/power_supply/BAT0/serial_number new file mode 100644 index 0000000..243e3ed --- /dev/null +++ b/test/lenovo/sys/class/power_supply/BAT0/serial_number @@ -0,0 +1 @@ + 494 diff --git a/test/lenovo/sys/class/power_supply/BAT0/status b/test/lenovo/sys/class/power_supply/BAT0/status new file mode 100644 index 0000000..4674475 --- /dev/null +++ b/test/lenovo/sys/class/power_supply/BAT0/status @@ -0,0 +1 @@ +Discharging diff --git a/test/lenovo/sys/class/power_supply/BAT0/technology b/test/lenovo/sys/class/power_supply/BAT0/technology new file mode 100644 index 0000000..2c679ca --- /dev/null +++ b/test/lenovo/sys/class/power_supply/BAT0/technology @@ -0,0 +1 @@ +Li-ion diff --git a/test/lenovo/sys/class/power_supply/BAT0/type b/test/lenovo/sys/class/power_supply/BAT0/type new file mode 100644 index 0000000..6784dd3 --- /dev/null +++ b/test/lenovo/sys/class/power_supply/BAT0/type @@ -0,0 +1 @@ +Battery diff --git a/test/lenovo/sys/class/power_supply/BAT0/uevent b/test/lenovo/sys/class/power_supply/BAT0/uevent new file mode 100644 index 0000000..7cf823c --- /dev/null +++ b/test/lenovo/sys/class/power_supply/BAT0/uevent @@ -0,0 +1,16 @@ +POWER_SUPPLY_NAME=BAT0 +POWER_SUPPLY_STATUS=Discharging +POWER_SUPPLY_PRESENT=1 +POWER_SUPPLY_TECHNOLOGY=Li-ion +POWER_SUPPLY_CYCLE_COUNT=0 +POWER_SUPPLY_VOLTAGE_MIN_DESIGN=11100000 +POWER_SUPPLY_VOLTAGE_NOW=12144000 +POWER_SUPPLY_POWER_NOW=16382000 +POWER_SUPPLY_ENERGY_FULL_DESIGN=86580000 +POWER_SUPPLY_ENERGY_FULL=48920000 +POWER_SUPPLY_ENERGY_NOW=47660000 +POWER_SUPPLY_CAPACITY=97 +POWER_SUPPLY_CAPACITY_LEVEL=Normal +POWER_SUPPLY_MODEL_NAME=45N1029 +POWER_SUPPLY_MANUFACTURER=LGC +POWER_SUPPLY_SERIAL_NUMBER= 494 diff --git a/test/lenovo/sys/class/power_supply/BAT0/voltage_min_design b/test/lenovo/sys/class/power_supply/BAT0/voltage_min_design new file mode 100644 index 0000000..9c113b4 --- /dev/null +++ b/test/lenovo/sys/class/power_supply/BAT0/voltage_min_design @@ -0,0 +1 @@ +11100000 diff --git a/test/lenovo/sys/class/power_supply/BAT0/voltage_now b/test/lenovo/sys/class/power_supply/BAT0/voltage_now new file mode 100644 index 0000000..ceb109f --- /dev/null +++ b/test/lenovo/sys/class/power_supply/BAT0/voltage_now @@ -0,0 +1 @@ +12144000