From: Tomas Mendes rtdiasmendes@gmail.com
--- dlls/ntdll/unix/system.c | 42 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+)
diff --git a/dlls/ntdll/unix/system.c b/dlls/ntdll/unix/system.c index 775e2806403..551ef10980e 100644 --- a/dlls/ntdll/unix/system.c +++ b/dlls/ntdll/unix/system.c @@ -4018,6 +4018,48 @@ static const char * get_sys_str(const char *dirname, const char *basename, char return ret; }
+static enum battery_status parse_battery_status(const char *s) +{ + if (strcmp(s, "Charging\n") == 0) return BATTERY_CHARGING; + if (strcmp(s, "Discharging\n") == 0) return BATTERY_DISCHARGING; + if (strcmp(s, "Not charging\n") == 0) return BATTERY_NOT_CHARGING; + if (strcmp(s, "Full\n") == 0) return BATTERY_FULL; + return BATTERY_UNKNOWN; +} + +static void get_sys_bat(const char *path, struct linux_battery *bat) +{ + char s[16]; + + bat->present = get_sys_int(path, "present"); + if (bat->present) return; + + get_sys_str(path, "status", s); + bat->status = parse_battery_status(s); + + bat->full_charge_capacity = get_sys_int(path, "energy_full"); + bat->capacity_now = get_sys_int(path, "energy_now"); + bat->rate_now = get_sys_int(path, "power_now"); + bat->power_unit = 1; + + if (!bat->full_charge_capacity || !bat->capacity_now) + { + bat->full_charge_capacity = get_sys_int(path, "charge_full"); + bat->capacity_now = get_sys_int(path, "charge_now"); + bat->voltage_now = get_sys_int(path, "voltage_now"); + bat->rate_now = get_sys_int(path, "current_now"); + bat->power_unit = 2; + if (!bat->full_charge_capacity || !bat->capacity_now || !bat->voltage_now) + bat->power_unit = 0; + } + + bat->alarm = get_sys_int(path, "alarm"); + if(bat->alarm) return; + + bat->capacity_alert_min = get_sys_int(path, "capacity_alert_min"); + bat->capacity_alert_max = get_sys_int(path, "capacity_alert_max"); +} + static int get_sys_int(const char *dirname, const char *basename) { char s[16];