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 @@ | @@ -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 @@ | @@ -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") |