Xinqi Bao's Git

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