Index: usr.sbin/acpi/acpiconf/acpiconf.c =================================================================== --- usr.sbin/acpi/acpiconf/acpiconf.c +++ usr.sbin/acpi/acpiconf/acpiconf.c @@ -183,8 +183,52 @@ } else printf("Present rate:\t\t%d %s\n", battio.battinfo.rate, pwr_units); - } else - printf("State:\t\t\tnot present\n"); + } else { + 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) { + const char *state; + switch (battio.bst.state & ACPI_BATT_STAT_BST_MASK) { + case 0: + state = "high"; + break; + case ACPI_BATT_STAT_DISCHARG: + state = "discharging"; + break; + case ACPI_BATT_STAT_CHARGING: + state = "charging"; + break; + case ACPI_BATT_STAT_CRITICAL: + state = "critical"; + break; + case ACPI_BATT_STAT_DISCHARG | ACPI_BATT_STAT_CRITICAL: + state = "critical discharging"; + break; + case ACPI_BATT_STAT_CHARGING | ACPI_BATT_STAT_CRITICAL: + state = "critical charging"; + break; + default: + state = "invalid"; + } + printf("State:\t\t\t%s\n", state); + if (battio.bst.rate == -1) + printf("Present rate:\t\tunknown\n"); + else if (amp && volt != UNKNOWN_VOLTAGE) { + printf("Present rate:\t\t%u mA (%u mW)\n", + battio.bst.rate, + battio.bst.rate * volt / 1000); + } else + printf("Present rate:\t\t%u %s\n", + battio.bst.rate, pwr_units); + if (battio.bst.cap == -1) + printf("Remaining capacity:\tunknown\n"); + else + printf("Remaining capacity:\t%u %s\n", + battio.bst.cap, pwr_units); + } else + printf("State:\t\t\tnot present\n"); + } /* Print battery voltage information. */ if (volt == UNKNOWN_VOLTAGE)