diff options
author | Aaron Marcher <me@drkhsh.at> | 2017-09-17 16:18:17 +0200 |
---|---|---|
committer | Aaron Marcher <me@drkhsh.at> | 2017-09-17 17:26:45 +0200 |
commit | 6820631175868c277effa7cc05f9cb3197b72654 (patch) | |
tree | 22707fe4a93e8357c7944087315a70d402fd418d /battery.c | |
parent | 8e25af7dc33bdcc0df6f4f173da7a2f883141d70 (diff) | |
download | slstatus-6820631175868c277effa7cc05f9cb3197b72654.tar.gz |
Split into multiple files
For multiple reasons the program is now split:
- Make future porting to OpenBSD easier
- Assign header includes to individiual functions
- Make future program extensions easier
- Recompile only changed parts
Diffstat (limited to 'battery.c')
-rw-r--r-- | battery.c | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/battery.c b/battery.c new file mode 100644 index 0000000..9f692ea --- /dev/null +++ b/battery.c @@ -0,0 +1,55 @@ +#include <limits.h> +#include <stdio.h> +#include <string.h> + +#include "util.h" + +const char * +battery_perc(const char *bat) +{ + int perc; + char path[PATH_MAX]; + + snprintf(path, sizeof(path), "%s%s%s", "/sys/class/power_supply/", bat, "/capacity"); + return (pscanf(path, "%i", &perc) == 1) ? + bprintf("%d", perc) : NULL; +} + +const char * +battery_power(const char *bat) +{ + int watts; + char path[PATH_MAX]; + + snprintf(path, sizeof(path), "%s%s%s", "/sys/class/power_supply/", bat, "/power_now"); + return (pscanf(path, "%i", &watts) == 1) ? + bprintf("%d", (watts + 500000) / 1000000) : NULL; +} + +const char * +battery_state(const char *bat) +{ + struct { + char *state; + char *symbol; + } map[] = { + { "Charging", "+" }, + { "Discharging", "-" }, + { "Full", "=" }, + { "Unknown", "/" }, + }; + size_t i; + char path[PATH_MAX], state[12]; + + snprintf(path, sizeof(path), "%s%s%s", "/sys/class/power_supply/", bat, "/status"); + if (pscanf(path, "%12s", state) != 1) { + return NULL; + } + + for (i = 0; i < LEN(map); i++) { + if (!strcmp(map[i].state, state)) { + break; + } + } + return (i == LEN(map)) ? "?" : map[i].symbol; +} |