plan9port

fork of plan9port with libvec, libstr and libsdb
Log | Files | Refs | README | LICENSE

commit 7be768e78cf98b051616d4404d75d1fbb3f39890
parent d96dce4d873583ce58bd04107fdbded838049306
Author: Russ Cox <rsc@swtch.com>
Date:   Sat, 15 Sep 2007 19:06:48 -0400

auxstats: use acpi to find battery info on Linux (Andrey Mirtchovski)

Diffstat:
Msrc/cmd/auxstats/Linux.c | 31++++++++++++++++++++++++++-----
1 file changed, 26 insertions(+), 5 deletions(-)

diff --git a/src/cmd/auxstats/Linux.c b/src/cmd/auxstats/Linux.c @@ -22,16 +22,37 @@ void (*statfn[])(int) = void xapm(int first) { - static int fd = -1; + static int fd = -1, fdb = -1; + int i, last = -1, curr = -1; if(first){ - fd = open("/proc/apm", OREAD); + fd = open("/proc/acpi/battery/BAT0/info", OREAD); + fdb = open("/proc/acpi/battery/BAT0/state", OREAD); return; } + if(fd == -1 || fdb == -1) + return; + readfile(fd); - tokens(0); - if(ntok >= 7 && atoi(tok[6]) != -1) - Bprint(&bout, "battery =%d 100\n", atoi(tok[6])); + for(i=0; i<nline; i++){ + tokens(i); + if(ntok < 3) + continue; + if(strcmp(tok[0], "last") == 0 && strcmp(tok[1], "full") == 0) + last = atoi(tok[3]); + } + readfile(fdb); + for(i = 0; i < nline; i++) { + tokens(i); + if(ntok < 3) + continue; + if(strcmp(tok[0], "remaining") == 0 && strcmp(tok[1], "capacity:") == 0) + curr = atoi(tok[2]); + } + + if(curr != -1 && last != -1) + Bprint(&bout, "battery =%d 100\n", (int)(((float)curr/(float)last)*100.0)); + } void