Commit ce4638ed71abe9aaf53d8d17e55ae34cb8c47445
0 parents
Exists in
master
Initial commit
battery.py first examples in python (very slow) battery.c uses the freebsd sysctl system calls to get the battery state which is much faster.
Showing
3 changed files
with
85 additions
and
0 deletions
Show diff stats
No preview for this file type
1 | +++ a/battery.c | |
... | ... | @@ -0,0 +1,46 @@ |
1 | +#include <stdio.h> | |
2 | +#include <stdlib.h> | |
3 | +#include <sys/types.h> | |
4 | +#include <sys/sysctl.h> | |
5 | + | |
6 | +const char *bat_icons[] = { | |
7 | + "\uf58d", /* 0% */ | |
8 | + "\uf579", | |
9 | + "\uf57a", | |
10 | + "\uf57b", | |
11 | + "\uf57c", | |
12 | + "\uf57d", /* 50% */ | |
13 | + "\uf57e", | |
14 | + "\uf57f", | |
15 | + "\uf580", | |
16 | + "\uf581", | |
17 | + "\uf578", /* 100% */ | |
18 | +}; | |
19 | + | |
20 | +int main() { | |
21 | + int life, state; | |
22 | + size_t len = sizeof(int); | |
23 | + | |
24 | + if (sysctlbyname("hw.acpi.battery.state", &state, &len, NULL, 0) || | |
25 | + sysctlbyname("hw.acpi.battery.life", &life, &len, NULL, 0)) { | |
26 | + perror("No battery?"); | |
27 | + exit(EXIT_FAILURE); | |
28 | + } | |
29 | + | |
30 | + switch (state) { | |
31 | + case 0: /* fully charged */ | |
32 | + printf("\uf583 Full"); | |
33 | + break; | |
34 | + case 1: /* discharging */ | |
35 | + printf("%s %d%%\n", bat_icons[life / 10], life); | |
36 | + break; | |
37 | + case 2: /* charging */ | |
38 | + printf("\uf583 %d\n", life); | |
39 | + break; | |
40 | + case 7: /* disconnected */ | |
41 | + printf("\uf590 Disconnected"); | |
42 | + break; | |
43 | + } | |
44 | + | |
45 | + return 0; | |
46 | +} | ... | ... |
1 | +++ a/battery.py | |
... | ... | @@ -0,0 +1,39 @@ |
1 | +#!/usr/bin/env python3 | |
2 | + | |
3 | +import subprocess | |
4 | + | |
5 | +bat_icons = [ | |
6 | + "\uf58d", # 0% | |
7 | + "\uf579", | |
8 | + "\uf57a", | |
9 | + "\uf57b", | |
10 | + "\uf57c", | |
11 | + "\uf57d", # 50% | |
12 | + "\uf57e", | |
13 | + "\uf57f", | |
14 | + "\uf580", | |
15 | + "\uf581", | |
16 | + "\uf578", # 100% | |
17 | +] | |
18 | +# bat_alert = f582 | |
19 | +# bat_plus = f58e | |
20 | +# bat_minus = f58b | |
21 | +# bat_unknown = f590 | |
22 | +# bat_charging = f583 | |
23 | + | |
24 | +out = str( | |
25 | + subprocess.run(["sysctl", "hw.acpi.battery"], capture_output=True).stdout, "UTF-8" | |
26 | +) | |
27 | +bat = dict(line.split(": ") for line in out.splitlines()) | |
28 | + | |
29 | +state = int(bat["hw.acpi.battery.state"]) | |
30 | +life = int(bat["hw.acpi.battery.life"]) | |
31 | + | |
32 | +if state == 0: # fully charged | |
33 | + print(f"\uf583 Full") | |
34 | +elif state == 1: # discharging | |
35 | + print(f"{bat_icons[life // 10]} {life}%") | |
36 | +elif state == 2: # charging | |
37 | + print(f"\uf583 {life}%") | |
38 | +elif state == 7: # disconnected | |
39 | + print("\uf590 Disconnected") | ... | ... |