#include #include "block.h" #define BATDIR "/sys/class/power_supply/BAT0" #define bat_val(f, n)\ while((c = fgetc(f)) != '\n') n = 10 * n + (c - '0') #define bat_open(f,F) if (!f) f = fopen(BATDIR"/"F,"r") FILE *fenergy_now, *fenergy_full, *fbat_status; float bat_p; int bat_state, bat_delay_val = 30, bat_delay = 30; char bat_str[13]; void battery(void) { if (bat_delay++ < bat_delay_val) goto show_stat; else bat_delay = 0; bat_open(fenergy_now,"energy_now"); bat_open(fenergy_full,"energy_full"); bat_open(fbat_status,"status"); if (fenergy_now) { int c, energy_now, energy_full; rewind(fenergy_now); rewind(fenergy_full); rewind(fbat_status); energy_now = energy_full = 0; bat_val(fenergy_now, energy_now); bat_val(fenergy_full, energy_full); bat_p = (float)energy_now * 100 / energy_full; char *icon; bat_state = fgetc(fbat_status); switch(bat_state) { case 'N': icon = ""; bat_delay_val = 300; break; case 'C': icon = "󱐋"; bat_delay_val = 0; // 1 sec break; case 'D': if (bat_p > 79) { icon = " "; bat_delay_val = 300; } else if (bat_p > 50) { icon = " "; bat_delay_val = 240; } else if (bat_p > 30) { icon = " "; bat_delay_val = 180; } else if (bat_p > 10) { icon = " "; bat_delay_val = 120; } else { icon = " "; bat_delay_val = 60; } } snprintf(bat_str,13,"%s %02.2f%%",icon,bat_p); } show_stat: if (bat_state == 'D' && bat_p >= 30) block(bat_str,"#222222","#83a59899","#83a59899"); else if (bat_p < 30) block(bat_str,"#222222","#ea544399","#ea544399"); else if (bat_state == 'N' || bat_state == 'C') block(bat_str,"#222222","#dfb24999","#dfb24999"); }