Files
utils/sb-battery.c
2025-07-10 11:12:10 -04:00

53 lines
1.1 KiB
C

#include <dirent.h>
#include <stdio.h>
#include <string.h>
int main() {
DIR *dir = opendir("/sys/class/power_supply");
if (!dir)
return 1;
struct dirent *entry;
int total = 0, count = 0, charging = 0;
// Iterate every battery
while ((entry = readdir(dir))) {
if (strncmp(entry->d_name, "BAT", 3) != 0)
continue;
char path[512];
FILE *fp;
int capacity;
char status[20];
// Read current charge value
snprintf(path, sizeof(path), "/sys/class/power_supply/%s/capacity",
entry->d_name);
fp = fopen(path, "r");
if (!fp)
return 1;
if (fscanf(fp, "%d", &capacity) == 1) {
total += capacity;
count++;
fclose(fp);
}
// Check if charging
snprintf(path, sizeof(path), "/sys/class/power_supply/%s/status",
entry->d_name);
fp = fopen(path, "r");
if (!fp)
return 1;
if (fscanf(fp, "%19s", status) == 1) {
if (strncmp(status, "Charging", 8) == 0)
charging = 1;
fclose(fp);
}
}
closedir(dir);
if (count > 0)
printf("Bat: %s%d%%\n", charging ? "+" : "", total / count);
return 0;
}