netstar pushed a commit to branch master.

http://git.enlightenment.org/apps/evisum.git/commit/?id=6ba6c251359c5c1221f12a68bf2d5a3a367f83f7

commit 6ba6c251359c5c1221f12a68bf2d5a3a367f83f7
Author: Alastair Poole <nets...@gmail.com>
Date:   Sun Sep 1 14:54:27 2019 +0100

    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);

-- 


Reply via email to