openbsd: fix for non-acpi batteries

This commit is contained in:
Alastair Poole 2020-07-11 17:23:34 +01:00
parent 09e8249689
commit d1d4d0fb9e
3 changed files with 47 additions and 26 deletions

View File

@ -86,7 +86,10 @@ void
system_info_all_free(Sys_Info *); system_info_all_free(Sys_Info *);
int int
system_cpu_online_count_get(); system_cpu_online_count_get(void);
int
system_cpu_count_get(void);
cpu_core_t ** cpu_core_t **
system_cpu_usage_get(int *ncpu); system_cpu_usage_get(int *ncpu);

View File

@ -60,6 +60,12 @@ cpu_count(void)
return cores; return cores;
} }
int
system_cpu_count_get(void)
{
return cpu_count();
}
int int
system_cpu_online_count_get(void) system_cpu_online_count_get(void)
{ {

View File

@ -118,12 +118,15 @@ _power_battery_count_get(power_t *power)
{ {
#if defined(__OpenBSD__) #if defined(__OpenBSD__)
struct sensordev snsrdev; struct sensordev snsrdev;
struct sensor snsr;
size_t slen = sizeof(struct sensor);
size_t sdlen = sizeof(struct sensordev); size_t sdlen = sizeof(struct sensordev);
int mib[5] = { CTL_HW, HW_SENSORS, 0, 0, 0 }; int mibs[5] = { CTL_HW, HW_SENSORS, 0, 0, 0 };
int i, devn, id; int i, devn;
for (devn = 0;; devn++) { for (devn = 0;; devn++) {
mib[2] = devn; mibs[2] = devn;
if (sysctl(mib, 3, &snsrdev, &sdlen, NULL, 0) == -1) if (sysctl(mibs, 3, &snsrdev, &sdlen, NULL, 0) == -1)
{ {
if (errno == ENXIO) if (errno == ENXIO)
continue; continue;
@ -131,31 +134,40 @@ _power_battery_count_get(power_t *power)
break; break;
} }
for (i = 0; i < 10; i++) { for (int n = 0; n < snsrdev.maxnumt[SENSOR_WATTHOUR]; n++) {
char buf[64]; mibs[4] = n;
snprintf(buf, sizeof(buf), "acpibat%d", i);
if (!strcmp(buf, snsrdev.xname)) if (sysctl(mibs, 5, &snsr, &slen, NULL, 0) == -1)
{ continue;
id = power->battery_count;
power->batteries = realloc(power->batteries, 1 + if (slen > 0 && (snsr.flags & SENSOR_FINVALID) == 0)
power->battery_count * sizeof(bat_t **)); break;
power->batteries[id] = calloc(1, sizeof(bat_t)); }
power->batteries[id]->name = strdup(buf);
power->batteries[id]->present = true; if (sysctl(mibs, 5, &snsr, &slen, NULL, 0) == -1)
power->batteries[id]->mibs = malloc(sizeof(int) * 5); continue;
int *tmp = power->batteries[id]->mibs;
tmp[0] = mib[0]; if ((snsr.type == SENSOR_AMPHOUR) || (snsr.type == SENSOR_WATTHOUR))
tmp[1] = mib[1]; {
tmp[2] = mib[2]; i = power->battery_count;
power->battery_count++; power->batteries = realloc(power->batteries, 1 +
} power->battery_count++ * sizeof(bat_t **));
power->batteries[i] = calloc(1, sizeof(bat_t));
power->batteries[i]->name = strdup(snsrdev.xname);
power->batteries[i]->present = true;
power->batteries[i]->mibs = malloc(sizeof(int) * 5);
int *tmp = power->batteries[i]->mibs;
tmp[0] = mibs[0];
tmp[1] = mibs[1];
tmp[2] = mibs[2];
} }
if (!strcmp("acpiac0", snsrdev.xname)) if (!strcmp("acpiac0", snsrdev.xname))
{ {
power->ac_mibs[0] = mib[0]; power->ac_mibs[0] = mibs[0];
power->ac_mibs[1] = mib[1]; power->ac_mibs[1] = mibs[1];
power->ac_mibs[2] = mib[2]; power->ac_mibs[2] = mibs[2];
} }
} }
#elif defined(__FreeBSD__) || defined(__DragonFly__) #elif defined(__FreeBSD__) || defined(__DragonFly__)