61cad1c561
Source obtained from http://sourceforge.net/projects/wmacpi/files/. 2008 March 18 2.2rc3 Some fixes for the sysfs interface support, supplied by jblache@debian.org: > Okay, I finally found time to make a new release including this > patch - 2.2rc2. It's up on my website now. I don't remember sending you the updated patch, as it turned out that you can have different attributes in sysfs depending on what the battery reports. The current version is attached. Thanks, JB. Source obtained from http://sourceforge.net/projects/wmacpi/files/.
130 lines
3.1 KiB
C
130 lines
3.1 KiB
C
/*
|
|
* acpi-ng: command line acpi battery status tool.
|
|
*
|
|
* Written by Simon Fowler <simon@dreamcraft.com.au>, 2003-06-20.
|
|
* Copyright 2003-06-20 Dreamcraft Pty Ltd.
|
|
*
|
|
* This file is distributed under the GNU General Public License,
|
|
* version 2. Please see the COPYING file for details.
|
|
*/
|
|
|
|
/*
|
|
* 2003-06-20.
|
|
* I'm getting sick of not having a convenient way to query battery
|
|
* status on the command line, so I'm hacking up this - a quick little
|
|
* command line tool to display current battery status, using the same
|
|
* libacpi code as wmacpi-ng.
|
|
*/
|
|
|
|
#define _GNU_SOURCE
|
|
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include <getopt.h>
|
|
#include <unistd.h>
|
|
|
|
#include "libacpi.h"
|
|
|
|
#define ACPI_VER "2.2rc3"
|
|
|
|
global_t *globals;
|
|
|
|
void usage(char *name)
|
|
{
|
|
printf("%s: query battery status on ACPI enabled systems.\n"
|
|
"Usage:\n"
|
|
"%s [-h] [-a samples]\n"
|
|
" h - display this help information\n"
|
|
" a - average remaining time over some number of samples\n"
|
|
" much more accurate than using a single sample\n"
|
|
" V - increase verbosity\n"
|
|
" v - print version information\n",
|
|
name, name);
|
|
}
|
|
|
|
void print_version(void)
|
|
{
|
|
printf("acpi version %s\n", ACPI_VER);
|
|
printf(" Using libacpi version %s\n", LIBACPI_VER);
|
|
}
|
|
|
|
int main(int argc, char *argv[])
|
|
{
|
|
int i, j, ch;
|
|
int sleep_time = 0;
|
|
int samples = 1;
|
|
battery_t *binfo;
|
|
adapter_t *ap;
|
|
|
|
while((ch = getopt(argc, argv, "hvVa:")) != EOF) {
|
|
switch(ch) {
|
|
case 'h':
|
|
usage(argv[0]);
|
|
return 0;
|
|
case 'V':
|
|
verbosity++;
|
|
break;
|
|
case 'v':
|
|
print_version();
|
|
return 0;
|
|
case 'a':
|
|
if(optarg != NULL) {
|
|
samples = atoi(optarg);
|
|
if(samples > 1000 || samples <= 0) {
|
|
fprintf(stderr, "Please specify a reasonable number of samples\n");
|
|
exit(1);
|
|
}
|
|
}
|
|
pinfo("samples: %d\n", samples);
|
|
sleep_time = 1000000/samples;
|
|
break;
|
|
default:
|
|
usage(argv[0]);
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
globals = (global_t *) malloc(sizeof(global_t));
|
|
|
|
power_init(globals);
|
|
/* we want to acquire samples over some period of time, so . . . */
|
|
for(i = 0; i < samples + 2; i++) {
|
|
for(j = 0; j < globals->battery_count; j++)
|
|
acquire_batt_info(globals, j);
|
|
acquire_global_info(globals);
|
|
usleep(sleep_time);
|
|
}
|
|
|
|
ap = &globals->adapter;
|
|
if(ap->power == AC) {
|
|
printf("On AC Power");
|
|
for(i = 0; i < globals->battery_count; i++) {
|
|
binfo = &batteries[i];
|
|
if(binfo->present && (binfo->charge_state == CHARGE)) {
|
|
printf("; Battery %s charging", binfo->name);
|
|
printf(", currently at %2d%%", binfo->percentage);
|
|
if(binfo->charge_time >= 0)
|
|
printf(", %2d:%02d remaining",
|
|
binfo->charge_time/60,
|
|
binfo->charge_time%60);
|
|
}
|
|
}
|
|
printf("\n");
|
|
} else if(ap->power == BATT) {
|
|
printf("On Battery");
|
|
for(i = 0; i < globals->battery_count; i++) {
|
|
binfo = &batteries[i];
|
|
if(binfo->present && (binfo->percentage >= 0))
|
|
printf(", Battery %s at %d%%", binfo->name,
|
|
binfo->percentage);
|
|
}
|
|
if(globals->rtime >= 0)
|
|
printf("; %d:%02d remaining", globals->rtime/60,
|
|
globals->rtime%60);
|
|
printf("\n");
|
|
}
|
|
return 0;
|
|
}
|
|
|