summaryrefslogtreecommitdiffstats
path: root/usr.sbin/acpi
diff options
context:
space:
mode:
authornjl <njl@FreeBSD.org>2005-07-28 19:31:28 +0000
committernjl <njl@FreeBSD.org>2005-07-28 19:31:28 +0000
commitff3802a6f08d484974064c82cfaeff5f6ff90413 (patch)
treeeb22a0ec6678bdad2e1bf821c5dc5d004a85584b /usr.sbin/acpi
parent8090607544a4e43e3c103e1809fe7bad80aa570a (diff)
downloadFreeBSD-src-ff3802a6f08d484974064c82cfaeff5f6ff90413.zip
FreeBSD-src-ff3802a6f08d484974064c82cfaeff5f6ff90413.tar.gz
Fix nits in reporting battery information and add battery status reporting.
Rate units are mA/mW, not mAh/mWh. Get full battery status and time remaining from ACPIIO_BATT_GET_BATTINFO instead of BST. PR: bin/83672 MFC after: 2 days
Diffstat (limited to 'usr.sbin/acpi')
-rw-r--r--usr.sbin/acpi/acpiconf/acpiconf.c89
1 files changed, 54 insertions, 35 deletions
diff --git a/usr.sbin/acpi/acpiconf/acpiconf.c b/usr.sbin/acpi/acpiconf/acpiconf.c
index 286c40e..a24d0d4 100644
--- a/usr.sbin/acpi/acpiconf/acpiconf.c
+++ b/usr.sbin/acpi/acpiconf/acpiconf.c
@@ -85,79 +85,98 @@ acpi_sleep(int sleep_type)
/* 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;
const char *pwr_units;
+ int hours, min;
if (num < 0 || num > 64)
err(EX_USAGE, "invalid battery %d", num);
+ /* Print battery design information. */
battio.unit = num;
if (ioctl(acpifd, ACPIIO_BATT_GET_BIF, &battio) == -1)
err(EX_IOERR, "get battery info (%d) failed", num);
- printf("Battery %d information\n", num);
if (battio.bif.units == 0)
- pwr_units = "mWh";
+ pwr_units = "mW";
else
- pwr_units = "mAh";
+ pwr_units = "mA";
if (battio.bif.dcap == UNKNOWN_CAP)
- printf("Design capacity:\tUnknown\n");
+ printf("Design capacity:\tunknown\n");
else
- printf("Design capacity:\t%d %s\n", battio.bif.dcap, pwr_units);
+ printf("Design capacity:\t%d %sh\n", battio.bif.dcap,
+ pwr_units);
if (battio.bif.lfcap == UNKNOWN_CAP)
- printf("Last full capacity:\tUnknown\n");
+ printf("Last full capacity:\tunknown\n");
else
- printf("Last full capacity:\t%d %s\n", battio.bif.lfcap,
+ printf("Last full capacity:\t%d %sh\n", battio.bif.lfcap,
pwr_units);
printf("Technology:\t\t%s\n", battio.bif.btech == 0 ?
"primary (non-rechargeable)" : "secondary (rechargeable)");
if (battio.bif.dvol == UNKNOWN_CAP)
- printf("Design voltage:\t\tUnknown\n");
+ printf("Design voltage:\t\tunknown\n");
else
printf("Design voltage:\t\t%d mV\n", battio.bif.dvol);
- printf("Capacity (warn):\t%d %s\n", battio.bif.wcap, pwr_units);
- printf("Capacity (low):\t\t%d %s\n", battio.bif.lcap, pwr_units);
- printf("Low/warn granularity:\t%d %s\n", battio.bif.gra1, pwr_units);
- printf("Warn/full granularity:\t%d %s\n", battio.bif.gra2, pwr_units);
+ 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);
+ /* Print current battery state information. */
battio.unit = num;
- if (ioctl(acpifd, ACPIIO_BATT_GET_BST, &battio) == -1)
- err(EX_IOERR, "get battery info (%d) failed", num);
-
- if (battio.bst.state != ACPI_BATT_STAT_NOT_PRESENT) {
+ 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) {
printf("State:\t\t\t");
- if (battio.bst.state & ACPI_BATT_STAT_CRITICAL)
- printf("CRITICAL ");
- if (battio.bst.state & ACPI_BATT_STAT_DISCHARG)
- printf("Discharging ");
- if (battio.bst.state & ACPI_BATT_STAT_CHARGING)
- printf("Charging");
+ if (battio.battinfo.state == 0)
+ printf("high ");
+ if (battio.battinfo.state & ACPI_BATT_STAT_CRITICAL)
+ printf("critical ");
+ if (battio.battinfo.state & ACPI_BATT_STAT_DISCHARG)
+ printf("discharging ");
+ if (battio.battinfo.state & ACPI_BATT_STAT_CHARGING)
+ printf("charging ");
printf("\n");
- if (battio.bst.rate == UNKNOWN_CAP)
- printf("Present Rate:\t\tUnknown\n");
+ if (battio.battinfo.cap == -1)
+ printf("Remaining capacity:\tunknown\n");
else
- printf("Present Rate:\t\t%d %s\n", battio.bst.rate,
- pwr_units);
- if (battio.bst.cap == UNKNOWN_CAP)
- printf("Remaining Capacity:\tUnknown\n");
+ printf("Remaining capacity:\t%d%%\n",
+ battio.battinfo.cap);
+ if (battio.battinfo.min == -1)
+ printf("Remaining time:\tunknown\n");
+ else {
+ hours = battio.battinfo.min / 60;
+ min = battio.battinfo.min % 60;
+ printf("Remaining time:\t\t%d:%02d\n", hours, min);
+ }
+ if (battio.battinfo.rate == -1)
+ printf("Present rate:\t\tunknown\n");
else
- printf("Remaining Capacity:\t%d %s\n", battio.bst.cap,
- pwr_units);
- if (battio.bst.volt == UNKNOWN_CAP)
- printf("Volt:\t\t\tUnknown\n");
+ printf("Present rate:\t\t%d %s\n",
+ battio.battinfo.rate, pwr_units);
+ } else
+ printf("State:\t\t\tnot present\n");
+
+ /* 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)
+ printf("Voltage:\t\tunknown\n");
else
- printf("Volt:\t\t\t%d mV\n", battio.bst.volt);
- } else {
- printf("State:\t\t\tNot Present\n");
+ printf("Voltage:\t\t%d mV\n", battio.bst.volt);
}
+
return (0);
}
OpenPOWER on IntegriCloud