diff options
Diffstat (limited to 'battery.c')
| -rw-r--r-- | battery.c | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/battery.c b/battery.c new file mode 100644 index 0000000..20283fd --- /dev/null +++ b/battery.c @@ -0,0 +1,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"); +} |