diff options
Diffstat (limited to 'src/get_battery_info.c')
-rw-r--r-- | src/get_battery_info.c | 139 |
1 files changed, 0 insertions, 139 deletions
diff --git a/src/get_battery_info.c b/src/get_battery_info.c deleted file mode 100644 index ee78706..0000000 --- a/src/get_battery_info.c +++ /dev/null @@ -1,139 +0,0 @@ -// vim:ts=8:expandtab -#include <string.h> -#include <stdlib.h> -#include <stdio.h> - -#include "i3status.h" - -#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) -#include <sys/types.h> -#include <sys/sysctl.h> -#endif - -/* - * Get battery information from /sys. Note that it uses the design capacity to - * calculate the percentage, not the last full capacity, so you can see how - * worn off your battery is. - * - */ -const char *get_battery_info(struct battery *bat) { - char buf[1024]; - static char part[512]; - char *walk, *last; - int full_design = -1, - remaining = -1, - present_rate = -1; - charging_status_t status = CS_DISCHARGING; - -#if defined(LINUX) - if (!slurp(bat->path, buf, sizeof(buf))) - return "No battery"; - - for (walk = buf, last = buf; (walk-buf) < 1024; walk++) { - if (*walk == '\n') { - last = walk+1; - continue; - } - - if (*walk != '=') - continue; - - if (BEGINS_WITH(last, "POWER_SUPPLY_ENERGY_NOW") || - BEGINS_WITH(last, "POWER_SUPPLY_CHARGE_NOW")) - remaining = atoi(walk+1); - else if (BEGINS_WITH(last, "POWER_SUPPLY_CURRENT_NOW")) - present_rate = atoi(walk+1); - else if (BEGINS_WITH(last, "POWER_SUPPLY_STATUS=Charging")) - status = CS_CHARGING; - else if (BEGINS_WITH(last, "POWER_SUPPLY_STATUS=Full")) - status = CS_FULL; - else { - /* The only thing left is the full capacity */ - if (bat->use_last_full) { - if (!BEGINS_WITH(last, "POWER_SUPPLY_ENERGY_FULL") && - !BEGINS_WITH(last, "POWER_SUPPLY_CHARGE_FULL")) - continue; - } else { - if (!BEGINS_WITH(last, "POWER_SUPPLY_CHARGE_FULL_DESIGN") && - !BEGINS_WITH(last, "POWER_SUPPLY_ENERGY_FULL_DESIGN")) - continue; - } - - full_design = atoi(walk+1); - } - } - - if ((full_design == 1) || (remaining == -1)) - return part; - - if (present_rate > 0) { - float remaining_time; - int seconds, hours, minutes; - if (status == CS_CHARGING) - remaining_time = ((float)full_design - (float)remaining) / (float)present_rate; - else if (status == CS_DISCHARGING) - remaining_time = ((float)remaining / (float)present_rate); - else remaining_time = 0; - - seconds = (int)(remaining_time * 3600.0); - hours = seconds / 3600; - seconds -= (hours * 3600); - minutes = seconds / 60; - seconds -= (minutes * 60); - - (void)snprintf(part, sizeof(part), "%s %.02f%% %02d:%02d:%02d", - (status == CS_CHARGING ? "CHR" : - (status == CS_DISCHARGING ? "BAT" : "FULL")), - (((float)remaining / (float)full_design) * 100), - max(hours, 0), max(minutes, 0), max(seconds, 0)); - } else { - (void)snprintf(part, sizeof(part), "%s %.02f%%", - (status == CS_CHARGING ? "CHR" : - (status == CS_DISCHARGING ? "BAT" : "FULL")), - (((float)remaining / (float)full_design) * 100)); - } -#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) - int state; - int sysctl_rslt; - size_t sysctl_size = sizeof(sysctl_rslt); - - if (sysctlbyname(BATT_LIFE, &sysctl_rslt, &sysctl_size, NULL, 0) != 0) - return "No battery"; - - present_rate = sysctl_rslt; - if (sysctlbyname(BATT_TIME, &sysctl_rslt, &sysctl_size, NULL, 0) != 0) - return "No battery"; - - remaining = sysctl_rslt; - if (sysctlbyname(BATT_STATE, &sysctl_rslt, &sysctl_size, NULL,0) != 0) - return "No battery"; - - state = sysctl_rslt; - if (state == 0 && present_rate == 100) - status = CS_FULL; - else if (state == 0 && present_rate < 100) - status = CS_CHARGING; - else - status = CS_DISCHARGING; - - full_design = sysctl_rslt; - - if (state == 1) { - int hours, minutes; - minutes = remaining; - hours = minutes / 60; - minutes -= (hours * 60); - (void)snprintf(part, sizeof(part), "%s %02d%% %02dh%02d", - (status == CS_CHARGING ? "CHR" : - (status == CS_DISCHARGING ? "BAT" : "FULL")), - present_rate, - max(hours, 0), max(minutes, 0)); - } else { - (void)snprintf(part, sizeof(part), "%s %02d%%", - (status == CS_CHARGING ? "CHR" : - (status == CS_DISCHARGING ? "BAT" : "FULL")), - present_rate); - } -#endif - return part; -} |