aboutsummaryrefslogtreecommitdiff
path: root/battery.c
blob: 20283fdc99a5d5f270572fd6f1896a931dc23d03 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include <stdio.h>
#include <string.h>
#include "block.h"
#define DIR "/sys/class/power_supply/BAT0"
#define EN DIR"/energy_now"
#define EF DIR"/energy_full"
#define ST DIR"/status"
FILE *en;
FILE *ef;
FILE *st;
int c, state, bat_delay = 6;
float en_n, ef_n;
float p;
char pch[13], icon[5];
void battery(void) {
	if (bat_delay++ < 6) goto show_stat;
	else bat_delay = 0;
	if (!en) en = fopen(EN,"r");
	if (!ef) ef = fopen(EF,"r");
	if (!st) st = fopen(ST,"r");
	if (en && ef && st) {
		rewind(en);
		rewind(ef);
		rewind(st);
		en_n = ef_n = 0;
		while((c = fgetc(en)) != '\n')
			en_n = 10 * en_n + (c - '0');
		while((c = fgetc(ef)) != '\n')
			ef_n = 10 * ef_n + (c - '0');
		p = en_n * 100 / ef_n;
		state = fgetc(st);
		switch(state) {
			case 'N': strncpy(icon,"",4); break;
			case 'C': strncpy(icon,"󱐋",5); break;
			case 'D': if (p > 0 && p <= 10) strncpy(icon," ",5);
				else if (p > 10 && p <= 30) strncpy(icon," ",5);
				else if (p > 30 && p <= 50) strncpy(icon," ",5);
				else if (p > 50 && p <= 79) strncpy(icon," ",5);
				else if (p > 79) strncpy(icon," ",5);
		} snprintf(pch,13,"%s %02.2f%%",icon,p);
	}
show_stat:
	if (state == 'D')
		block(pch,"#222222","#83a59899","#83a59899");
	else if (p < 30)
		block(pch,"#222222","#ea544399","#ea544399");
	else if (state == 'N' || state == 'C')
		block(pch,"#222222","#dfb24999","#dfb24999");
}