char *
|
|
readfile(char *base, char *file)
|
|
{
|
|
char *path, line[513];
|
|
FILE *fd;
|
|
|
|
memset(line, 0, sizeof(line));
|
|
|
|
path = smprintf("%s/%s", base, file);
|
|
fd = fopen(path, "r");
|
|
if (fd == NULL) {
|
|
perror("fopen");
|
|
exit(1);
|
|
}
|
|
free(path);
|
|
|
|
if (fgets(line, sizeof(line)-1, fd) == NULL) {
|
|
perror("fgets");
|
|
exit(1);
|
|
}
|
|
fclose(fd);
|
|
|
|
return smprintf("%s", line);
|
|
}
|
|
|
|
char *
|
|
getbattery(char *base)
|
|
{
|
|
char *co;
|
|
int descap, remcap;
|
|
|
|
descap = -1;
|
|
remcap = -1;
|
|
|
|
co = readfile(base, "present");
|
|
if (co[0] != '1') {
|
|
free(co);
|
|
return smprintf("not present");
|
|
}
|
|
free(co);
|
|
|
|
co = readfile(base, "charge_full_design");
|
|
sscanf(co, "%d", &descap);
|
|
free(co);
|
|
|
|
co = readfile(base, "charge_now");
|
|
sscanf(co, "%d", &remcap);
|
|
free(co);
|
|
|
|
if (remcap < 0 || descap < 0)
|
|
return smprintf("invalid");
|
|
|
|
return smprintf("%.0f", ((float)remcap / (float)descap) * 100);
|
|
}
|
|
|