#include #include #include #define AC_PATH "/sys/class/power_supply/AC/online" #define BAT_FULL "/sys/class/power_supply/BAT0/energy_full" #define BAT_NOW "/sys/class/power_supply/BAT0/energy_now" #define BAT_FULL2 "/sys/class/power_supply/BAT0/charge_full" #define BAT_NOW2 "/sys/class/power_supply/BAT0/charge_now" int main(void) { unsigned int ac; float bat_full, bat_now; FILE *fp; /* are we on AC? */ fp = fopen(AC_PATH, "r"); fscanf(fp, "%d", &ac); fclose(fp); /* get current charge and max charge */ if ( (! (fp = fopen( BAT_FULL, "r"))) && (! (fp = fopen(BAT_FULL2, "r"))) ) { fprintf(stderr, "Could not open BAT_FULL/2\n"); return(1); } fscanf(fp, "%f", &bat_full); fclose(fp); if ( (! (fp = fopen( BAT_NOW, "r"))) && (! (fp = fopen(BAT_NOW2, "r"))) ) { fprintf(stderr, "Could not open BAT_NOW/2\n"); return(2); } fscanf(fp, "%f", &bat_now); fclose(fp); printf("%c%2.0f%%", ac ? '+' : '-', (bat_now * 100) / bat_full); return(0); }