Author: philip
Date: Sat Dec 21 05:03:21 2019
New Revision: 355978
URL: https://svnweb.freebsd.org/changeset/base/355978

Log:
  top: display battery capacity remaining
  
  Submitted by: Antranig Vartanian <antran...@freebsd.am>
  Reviewed by:  imp, philip
  Differential Revision:        https://reviews.freebsd.org/D22871

Modified:
  head/usr.bin/top/display.c
  head/usr.bin/top/display.h
  head/usr.bin/top/machine.c
  head/usr.bin/top/machine.h
  head/usr.bin/top/top.c

Modified: head/usr.bin/top/display.c
==============================================================================
--- head/usr.bin/top/display.c  Sat Dec 21 04:44:17 2019        (r355977)
+++ head/usr.bin/top/display.c  Sat Dec 21 05:03:21 2019        (r355978)
@@ -1322,6 +1322,15 @@ i_uptime(struct timeval *bt, time_t *tod)
     }
 }
 
+void
+i_battery(int nbat, int batt)
+{
+
+       if (nbat > 0) {
+               printf("; battery: %d%%", batt);
+       }
+}
+
 #define SETUPBUFFER_MIN_SCREENWIDTH 80
 #define SETUPBUFFER_REQUIRED_ADDBUFSIZ 2
 

Modified: head/usr.bin/top/display.h
==============================================================================
--- head/usr.bin/top/display.h  Sat Dec 21 04:44:17 2019        (r355977)
+++ head/usr.bin/top/display.h  Sat Dec 21 05:03:21 2019        (r355978)
@@ -14,6 +14,7 @@ void   i_header(const char *text);
 void    display_header(int t);
 int             display_init(struct statics *statics);
 void    i_arc(int *stats);
+void    i_battery(int nbat, int batt);
 void    i_carc(int *stats);
 void    i_cpustates(int *states);
 void    i_loadave(int mpid, double *avenrun);

Modified: head/usr.bin/top/machine.c
==============================================================================
--- head/usr.bin/top/machine.c  Sat Dec 21 04:44:17 2019        (r355977)
+++ head/usr.bin/top/machine.c  Sat Dec 21 05:03:21 2019        (r355978)
@@ -211,6 +211,10 @@ static long *pcpu_cp_old;
 static long *pcpu_cp_diff;
 static int *pcpu_cpu_states;
 
+/* Battery units and states */
+static int battery_units;
+static int battery_life;
+
 static int compare_swap(const void *a, const void *b);
 static int compare_jid(const void *a, const void *b);
 static int compare_pid(const void *a, const void *b);
@@ -373,6 +377,12 @@ machine_init(struct statics *statics)
        pcpu_cpu_states = calloc(ncpus * CPUSTATES, sizeof(int));
        statics->ncpus = ncpus;
 
+       /* Allocate state of battery units reported via ACPI. */
+       battery_units = 0;
+       size = sizeof(int);
+       sysctlbyname("hw.acpi.battery.units", &battery_units, &size, NULL, 0);
+       statics->nbatteries = battery_units;
+
        update_layout();
 
        /* all done! */
@@ -579,6 +589,12 @@ get_system_info(struct system_info *si)
        } else {
                si->boottime.tv_sec = -1;
        }
+
+       battery_life = 0;
+       if (battery_units > 0) {
+               GETSYSCTL("hw.acpi.battery.life", battery_life);
+       }
+       si->battery = battery_life;
 }
 
 #define NOPROC ((void *)-1)

Modified: head/usr.bin/top/machine.h
==============================================================================
--- head/usr.bin/top/machine.h  Sat Dec 21 04:44:17 2019        (r355977)
+++ head/usr.bin/top/machine.h  Sat Dec 21 05:03:21 2019        (r355978)
@@ -30,6 +30,7 @@ struct statics
     const char * const *carc_names;
     const char * const *swap_names;
     const char * const *order_names;
+    int nbatteries;
     int ncpus;
 };
 
@@ -50,6 +51,7 @@ struct system_info
     int    *carc;
     int    *swap;
     struct timeval boottime;
+    int    battery;
     int    ncpus;
 };
 

Modified: head/usr.bin/top/top.c
==============================================================================
--- head/usr.bin/top/top.c      Sat Dec 21 04:44:17 2019        (r355977)
+++ head/usr.bin/top/top.c      Sat Dec 21 05:03:21 2019        (r355978)
@@ -619,6 +619,9 @@ restart:
        (*d_loadave)(system_info.last_pid,
                     system_info.load_avg);
 
+       /* display the battery info (if any) */
+       i_battery(statics.nbatteries, system_info.battery);
+
        /* display the current time */
        /* this method of getting the time SHOULD be fairly portable */
        time(&curr_time);
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to