batterystatus.c (1218B)
1 #define BATT_NOW "/sys/class/power_supply/BAT0/charge_now" 2 #define BATT_FULL "/sys/class/power_supply/BAT0/charge_full" 3 #define BATT_STATUS "/sys/class/power_supply/BAT0/status" 4 5 #include <stdio.h> 6 #include <stdlib.h> 7 #include <string.h> 8 #include <errno.h> 9 10 char * 11 smprintf(char *fmt, ...) 12 { 13 va_list fmtargs; 14 char *buf = NULL; 15 16 va_start(fmtargs, fmt); 17 if (vasprintf(&buf, fmt, fmtargs) == -1){ 18 fprintf(stderr, "malloc vasprintf\n"); 19 exit(1); 20 } 21 va_end(fmtargs); 22 23 return buf; 24 } 25 26 char * 27 getbattery(){ 28 long lnum1, lnum2 = 0; 29 char *status = malloc(sizeof(char)*12); 30 char s = '?'; 31 FILE *fp = NULL; 32 if ((fp = fopen(BATT_NOW, "r"))) { 33 fscanf(fp, "%ld\n", &lnum1); 34 fclose(fp); 35 fp = fopen(BATT_FULL, "r"); 36 fscanf(fp, "%ld\n", &lnum2); 37 fclose(fp); 38 fp = fopen(BATT_STATUS, "r"); 39 fscanf(fp, "%s\n", status); 40 fclose(fp); 41 if (strcmp(status,"Charging") == 0) 42 s = '+'; 43 if (strcmp(status,"Discharging") == 0) 44 s = '-'; 45 if (strcmp(status,"Full") == 0) 46 s = '='; 47 return smprintf("%c%ld%%", s,(lnum1/(lnum2/100))); 48 } 49 else return smprintf(""); 50 } 51 52 53