--- usr.sbin/acpi/acpiconf/acpiconf.c.orig Mon Dec 5 13:07:42 2005 +++ usr.sbin/acpi/acpiconf/acpiconf.c Wed Jan 11 02:32:01 2006 @@ -83,14 +83,13 @@ return (0); } -/* should be a acpi define, but doesn't appear to be */ -#define UNKNOWN_CAP 0xffffffff -#define UNKNOWN_VOLTAGE 0xffffffff - static int acpi_battinfo(int num) { union acpi_battery_ioctl_arg battio; + struct acpi_battinfo battinfo; + struct acpi_bif bif; + struct acpi_bst bst; const char *pwr_units; int hours, min; @@ -101,82 +100,111 @@ battio.unit = num; if (ioctl(acpifd, ACPIIO_BATT_GET_BIF, &battio) == -1) err(EX_IOERR, "get battery info (%d) failed", num); - if (battio.bif.units == 0) + bif = battio.bif; + if (bif.units == 0) pwr_units = "mW"; else pwr_units = "mA"; - if (battio.bif.dcap == UNKNOWN_CAP) + if (bif.dcap == ACPI_BATT_UNKNOWN) printf("Design capacity:\tunknown\n"); else - printf("Design capacity:\t%d %sh\n", battio.bif.dcap, + printf("Design capacity:\t%d %sh\n", bif.dcap, pwr_units); - if (battio.bif.lfcap == UNKNOWN_CAP) + if (bif.lfcap == ACPI_BATT_UNKNOWN) printf("Last full capacity:\tunknown\n"); else - printf("Last full capacity:\t%d %sh\n", battio.bif.lfcap, + printf("Last full capacity:\t%d %sh\n", bif.lfcap, pwr_units); - printf("Technology:\t\t%s\n", battio.bif.btech == 0 ? + printf("Technology:\t\t%s\n", bif.btech == 0 ? "primary (non-rechargeable)" : "secondary (rechargeable)"); - if (battio.bif.dvol == UNKNOWN_CAP) + if (bif.dvol == ACPI_BATT_UNKNOWN) printf("Design voltage:\t\tunknown\n"); else - printf("Design voltage:\t\t%d mV\n", battio.bif.dvol); - printf("Capacity (warn):\t%d %sh\n", battio.bif.wcap, pwr_units); - printf("Capacity (low):\t\t%d %sh\n", battio.bif.lcap, pwr_units); - printf("Low/warn granularity:\t%d %sh\n", battio.bif.gra1, pwr_units); - printf("Warn/full granularity:\t%d %sh\n", battio.bif.gra2, pwr_units); - printf("Model number:\t\t%s\n", battio.bif.model); - printf("Serial number:\t\t%s\n", battio.bif.serial); - printf("Type:\t\t\t%s\n", battio.bif.type); - printf("OEM info:\t\t%s\n", battio.bif.oeminfo); + printf("Design voltage:\t\t%d mV\n", bif.dvol); + printf("Capacity (warn):\t%d %sh\n", bif.wcap, pwr_units); + printf("Capacity (low):\t\t%d %sh\n", bif.lcap, pwr_units); + printf("Low/warn granularity:\t%d %sh\n", bif.gra1, pwr_units); + printf("Warn/full granularity:\t%d %sh\n", bif.gra2, pwr_units); + printf("Model number:\t\t%s\n", bif.model); + printf("Serial number:\t\t%s\n", bif.serial); + printf("Type:\t\t\t%s\n", bif.type); + printf("OEM info:\t\t%s\n", bif.oeminfo); /* Print current battery state information. */ battio.unit = num; if (ioctl(acpifd, ACPIIO_BATT_GET_BATTINFO, &battio) == -1) err(EX_IOERR, "get battery user info (%d) failed", num); - if (battio.battinfo.state != ACPI_BATT_STAT_NOT_PRESENT) { + battinfo = battio.battinfo; + if (battinfo.state != ACPI_BATT_STAT_NOT_PRESENT) { printf("State:\t\t\t"); - if (battio.battinfo.state == 0) + if (battinfo.state == 0) printf("high "); - if (battio.battinfo.state & ACPI_BATT_STAT_CRITICAL) + if (battinfo.state & ACPI_BATT_STAT_CRITICAL) printf("critical "); - if (battio.battinfo.state & ACPI_BATT_STAT_DISCHARG) + if (battinfo.state & ACPI_BATT_STAT_DISCHARG) printf("discharging "); - if (battio.battinfo.state & ACPI_BATT_STAT_CHARGING) + if (battinfo.state & ACPI_BATT_STAT_CHARGING) printf("charging "); printf("\n"); - if (battio.battinfo.cap == -1) + if (battinfo.cap == -1) printf("Remaining capacity:\tunknown\n"); else printf("Remaining capacity:\t%d%%\n", - battio.battinfo.cap); - if (battio.battinfo.min == -1) + battinfo.cap); + if (battinfo.min == -1) printf("Remaining time:\t\tunknown\n"); else { - hours = battio.battinfo.min / 60; - min = battio.battinfo.min % 60; + hours = battinfo.min / 60; + min = battinfo.min % 60; printf("Remaining time:\t\t%d:%02d\n", hours, min); } - if (battio.battinfo.rate == -1) + if (battinfo.rate == -1) printf("Present rate:\t\tunknown\n"); else printf("Present rate:\t\t%d %s\n", - battio.battinfo.rate, pwr_units); - } else - printf("State:\t\t\tnot present\n"); + battinfo.rate, pwr_units); + } /* Print battery voltage information. */ battio.unit = num; if (ioctl(acpifd, ACPIIO_BATT_GET_BST, &battio) == -1) err(EX_IOERR, "get battery status (%d) failed", num); - if (battio.bst.state != ACPI_BATT_STAT_NOT_PRESENT) { - if (battio.bst.volt == UNKNOWN_VOLTAGE) + bst = battio.bst; + if (bst.state != ACPI_BATT_STAT_NOT_PRESENT) { + if (battinfo.state == ACPI_BATT_STAT_NOT_PRESENT) { + printf("State:\t\t\t"); + if (bst.state == 0) + printf("high "); + if (bst.state & ACPI_BATT_STAT_CRITICAL) + printf("critical "); + if (bst.state & ACPI_BATT_STAT_DISCHARG) + printf("discharging "); + if (bst.state & ACPI_BATT_STAT_CHARGING) + printf("charging "); + printf("\n"); + if (bst.rate == ACPI_BATT_UNKNOWN) + printf("Present rate:\t\tunknown\n"); + else + printf("Present rate:\t\t%d %s\n", + bst.rate, pwr_units); + if (bst.cap == ACPI_BATT_UNKNOWN || + bif.lfcap == ACPI_BATT_UNKNOWN) + printf("Remaining capacity:\tunknown\n"); + else + printf("Remaining capacity:\t%d%%\n", + (100 * bst.cap) / bif.lfcap); + } + if (bst.volt == ACPI_BATT_UNKNOWN) printf("Voltage:\t\tunknown\n"); else - printf("Voltage:\t\t%d mV\n", battio.bst.volt); + printf("Voltage:\t\t%d mV\n", bst.volt); } + if (battinfo.state == ACPI_BATT_STAT_NOT_PRESENT && + bst.state == ACPI_BATT_STAT_NOT_PRESENT) + printf("State:\t\t\tnot present\n"); + return (0); } @@ -191,7 +219,7 @@ main(int argc, char *argv[]) { char c, *prog; - int sleep_type; + int sleep_type, acline; prog = argv[0]; if (argc < 2) @@ -226,6 +254,17 @@ if (sleep_type != -1) { sleep(1); /* wait 1 sec. for key-release event */ acpi_sleep(sleep_type); + } else { + if (ioctl(acpifd, ACPIIO_ACAD_GET_STATUS, &acline) == -1) + err(EX_IOERR, "get ac status failed"); + printf("AC line:\t\t"); + if (acline == 0) + printf("off-line"); + else if (acline == 1) + printf("on-line"); + else + printf("unknown"); + printf("\n"); } close(acpifd);