top: display battery capacity remaining

Submitted by: Antranig Vartanian <antranigv@freebsd.am>
Reviewed by:  imp, philip
Differential Revision:        https://reviews.freebsd.org/D22871
This commit is contained in:
philip 2019-12-21 05:03:21 +00:00
parent 41763378dd
commit 75a0c92cc0
5 changed files with 31 additions and 0 deletions

View File

@ -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_MIN_SCREENWIDTH 80
#define SETUPBUFFER_REQUIRED_ADDBUFSIZ 2 #define SETUPBUFFER_REQUIRED_ADDBUFSIZ 2

View File

@ -14,6 +14,7 @@ void i_header(const char *text);
void display_header(int t); void display_header(int t);
int display_init(struct statics *statics); int display_init(struct statics *statics);
void i_arc(int *stats); void i_arc(int *stats);
void i_battery(int nbat, int batt);
void i_carc(int *stats); void i_carc(int *stats);
void i_cpustates(int *states); void i_cpustates(int *states);
void i_loadave(int mpid, double *avenrun); void i_loadave(int mpid, double *avenrun);

View File

@ -211,6 +211,10 @@ static long *pcpu_cp_old;
static long *pcpu_cp_diff; static long *pcpu_cp_diff;
static int *pcpu_cpu_states; 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_swap(const void *a, const void *b);
static int compare_jid(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); 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)); pcpu_cpu_states = calloc(ncpus * CPUSTATES, sizeof(int));
statics->ncpus = ncpus; 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(); update_layout();
/* all done! */ /* all done! */
@ -579,6 +589,12 @@ get_system_info(struct system_info *si)
} else { } else {
si->boottime.tv_sec = -1; 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) #define NOPROC ((void *)-1)

View File

@ -30,6 +30,7 @@ struct statics
const char * const *carc_names; const char * const *carc_names;
const char * const *swap_names; const char * const *swap_names;
const char * const *order_names; const char * const *order_names;
int nbatteries;
int ncpus; int ncpus;
}; };
@ -50,6 +51,7 @@ struct system_info
int *carc; int *carc;
int *swap; int *swap;
struct timeval boottime; struct timeval boottime;
int battery;
int ncpus; int ncpus;
}; };

View File

@ -619,6 +619,9 @@ main(int argc, const char *argv[])
(*d_loadave)(system_info.last_pid, (*d_loadave)(system_info.last_pid,
system_info.load_avg); system_info.load_avg);
/* display the battery info (if any) */
i_battery(statics.nbatteries, system_info.battery);
/* display the current time */ /* display the current time */
/* this method of getting the time SHOULD be fairly portable */ /* this method of getting the time SHOULD be fairly portable */
time(&curr_time); time(&curr_time);