Xinqi Bao's Git
bcd42cda413aac9b09aa1c2daff26559c68418d3
1 /* See LICENSE file for copyright and license details. */
12 battery_perc(const char *bat
)
17 if (esnprintf(path
, sizeof(path
),
18 "/sys/class/power_supply/%s/capacity",
22 if (pscanf(path
, "%d", &perc
) != 1) {
26 return bprintf("%d", perc
);
30 battery_state(const char *bat
)
37 { "Discharging", "-" },
40 char path
[PATH_MAX
], state
[12];
42 if (esnprintf(path
, sizeof(path
),
43 "/sys/class/power_supply/%s/status",
47 if (pscanf(path
, "%12s", state
) != 1) {
51 for (i
= 0; i
< LEN(map
); i
++) {
52 if (!strcmp(map
[i
].state
, state
)) {
56 return (i
== LEN(map
)) ? "?" : map
[i
].symbol
;
60 battery_remaining(const char *bat
)
62 int charge_now
, current_now
, m
, h
;
64 char path
[PATH_MAX
], state
[12];
66 if (esnprintf(path
, sizeof(path
),
67 "/sys/class/power_supply/%s/status",
71 if (pscanf(path
, "%12s", state
) != 1) {
75 if (!strcmp(state
, "Discharging")) {
76 if (esnprintf(path
, sizeof(path
),
77 "/sys/class/power_supply/%s/charge_now",
81 if (pscanf(path
, "%d", &charge_now
) != 1) {
84 if (esnprintf(path
, sizeof(path
),
85 "/sys/class/power_supply/%s/current_now",
89 if (pscanf(path
, "%d", ¤t_now
) != 1) {
93 timeleft
= (float)charge_now
/ (float)current_now
;
95 m
= (timeleft
- (float)h
) * 60;
97 return bprintf("%dh %dm", h
, m
);
102 #elif defined(__OpenBSD__)
104 #include <machine/apmvar.h>
105 #include <sys/ioctl.h>
109 load_apm_power_info(struct apm_power_info
*apm_info
)
113 fd
= open("/dev/apm", O_RDONLY
);
115 warn("open '/dev/apm':");
119 memset(apm_info
, 0, sizeof(struct apm_power_info
));
120 if (ioctl(fd
, APM_IOC_GETPOWER
, apm_info
) < 0) {
121 warn("ioctl 'APM_IOC_GETPOWER':");
129 battery_perc(const char *unused
)
131 struct apm_power_info apm_info
;
133 if (load_apm_power_info(&apm_info
)) {
134 return bprintf("%d", apm_info
.battery_life
);
141 battery_state(const char *unused
)
150 struct apm_power_info apm_info
;
153 if (load_apm_power_info(&apm_info
)) {
154 for (i
= 0; i
< LEN(map
); i
++) {
155 if (map
[i
].state
== apm_info
.ac_state
) {
159 return (i
== LEN(map
)) ? "?" : map
[i
].symbol
;
166 battery_remaining(const char *unused
)
168 struct apm_power_info apm_info
;
170 if (load_apm_power_info(&apm_info
)) {
171 if (apm_info
.ac_state
!= APM_AC_ON
) {
172 return bprintf("%uh %02um", apm_info
.minutes_left
/ 60,
173 apm_info
.minutes_left
% 60);