From 6ba6c251359c5c1221f12a68bf2d5a3a367f83f7 Mon Sep 17 00:00:00 2001 From: Alastair Poole Date: Sun, 1 Sep 2019 14:54:27 +0100 Subject: [PATCH] Batteries: Add multiple suppor --- src/system.c | 30 +++++++++++++++++++++--------- src/system.h | 14 ++++++++++---- src/ui.c | 4 ++-- 3 files changed, 33 insertions(+), 15 deletions(-) diff --git a/src/system.c b/src/system.c index dea2129..7ccad64 100644 --- a/src/system.c +++ b/src/system.c @@ -814,6 +814,13 @@ _power_battery_count_get(power_t *power) closedir(dir); #endif + + power->batteries = malloc(power->battery_count * sizeof(bat_t **)); + for (int i = 0; i < power->battery_count; i++) + { + power->batteries[i] = calloc(1, sizeof(bat_t)); + } + return power->battery_count; } @@ -821,6 +828,7 @@ static void _battery_state_get(power_t *power, int *mib) { #if defined(__OpenBSD__) || defined(__NetBSD__) + static int index = 0; double charge_full = 0; double charge_current = 0; size_t slen = sizeof(struct sensor); @@ -854,13 +862,14 @@ _battery_state_get(power_t *power, int *mib) charge_current = (double)snsr.value; } - power->charge_full += charge_full; - power->charge_current += charge_current; + power->batteries[index]->charge_full = charge_full; + power->batteries[index]->charge_current = charge_current; + ++index; #elif defined(__FreeBSD__) || defined(__DragonFly__) unsigned int value; size_t len = sizeof(value); if ((sysctl(mib, 4, &value, &len, NULL, 0)) != -1) - power->percent = value; + power->batteries[0]->percent = value; #elif defined(__linux__) char path[PATH_MAX]; struct dirent *dh; @@ -915,8 +924,8 @@ _battery_state_get(power_t *power, int *mib) free(buf); } - power->charge_full += charge_full; - power->charge_current += charge_current; + power->batteries[i]->charge_full = charge_full; + power->batteries[i]->charge_current = charge_current; free(naming); @@ -971,10 +980,13 @@ _power_state_get(power_t *power) _battery_state_get(power, power->bat_mibs[i]); #if defined(__OpenBSD__) || defined(__NetBSD__) || defined(__linux__) - double percent = - 100 * (power->charge_current / power->charge_full); + for (i = 0; i < power->battery_count; i++) + { + double percent = + 100 * (power->batteries[i]->charge_current / power->batteries[i]->charge_full); + power->batteries[i]->percent = percent; + } - power->percent = percent; power->have_ac = have_ac; #elif defined(__FreeBSD__) || defined(__DragonFly__) len = sizeof(value); @@ -983,7 +995,7 @@ _power_state_get(power_t *power) return; } - power->percent = value; + power->batteries[0]->percent = value; #endif diff --git a/src/system.h b/src/system.h index f091707..3eebca7 100644 --- a/src/system.h +++ b/src/system.h @@ -22,15 +22,21 @@ typedef struct unsigned long swap_used; } meminfo_t; +#define MAX_BATTERIES 10 +typedef struct +{ + double charge_full; + double charge_current; + uint8_t percent; +} bat_t; + typedef struct { bool have_ac; int battery_count; - double charge_full; - double charge_current; - uint8_t percent; -#define MAX_BATTERIES 10 + bat_t **batteries; + char *battery_names[MAX_BATTERIES]; int *bat_mibs[MAX_BATTERIES]; int ac_mibs[5]; diff --git a/src/ui.c b/src/ui.c index 296785f..da42b5e 100644 --- a/src/ui.c +++ b/src/ui.c @@ -132,7 +132,7 @@ _misc_view_update(Ui *ui, results_t *results) evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); evas_object_show(box); - if (results->power.battery_count) + for (int i = 0; i < results->power.battery_count; i++) { frame = elm_frame_add(box); evas_object_size_hint_align_set(frame, EVAS_HINT_FILL, 0); @@ -149,7 +149,7 @@ _misc_view_update(Ui *ui, results_t *results) evas_object_size_hint_weight_set(progress, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); elm_progressbar_span_size_set(progress, 1.0); elm_progressbar_unit_format_set(progress, "%1.2f%%"); - _progressbar_value_force_set(progress, (double)results->power.percent / 100); + _progressbar_value_force_set(progress, (double)results->power.batteries[i]->percent / 100); evas_object_show(progress); elm_object_content_set(frame, progress); elm_box_pack_end(box, frame);