Xinqi Bao's Git

Rewrite Makefile to accomodate file split
[slstatus.git] / battery.c
1 #include <limits.h>
2 #include <stdio.h>
3 #include <string.h>
4
5 #include "util.h"
6
7 const char *
8 battery_perc(const char *bat)
9 {
10 int perc;
11 char path[PATH_MAX];
12
13 snprintf(path, sizeof(path), "%s%s%s", "/sys/class/power_supply/", bat, "/capacity");
14 return (pscanf(path, "%i", &perc) == 1) ?
15 bprintf("%d", perc) : NULL;
16 }
17
18 const char *
19 battery_power(const char *bat)
20 {
21 int watts;
22 char path[PATH_MAX];
23
24 snprintf(path, sizeof(path), "%s%s%s", "/sys/class/power_supply/", bat, "/power_now");
25 return (pscanf(path, "%i", &watts) == 1) ?
26 bprintf("%d", (watts + 500000) / 1000000) : NULL;
27 }
28
29 const char *
30 battery_state(const char *bat)
31 {
32 struct {
33 char *state;
34 char *symbol;
35 } map[] = {
36 { "Charging", "+" },
37 { "Discharging", "-" },
38 { "Full", "=" },
39 { "Unknown", "/" },
40 };
41 size_t i;
42 char path[PATH_MAX], state[12];
43
44 snprintf(path, sizeof(path), "%s%s%s", "/sys/class/power_supply/", bat, "/status");
45 if (pscanf(path, "%12s", state) != 1) {
46 return NULL;
47 }
48
49 for (i = 0; i < LEN(map); i++) {
50 if (!strcmp(map[i].state, state)) {
51 break;
52 }
53 }
54 return (i == LEN(map)) ? "?" : map[i].symbol;
55 }