bin/83672: acpiconf with remaining battery life and time

Rudolf Cejka cejkar at fit.vutbr.cz
Mon Jul 18 14:40:35 GMT 2005


>Number:         83672
>Category:       bin
>Synopsis:       acpiconf with remaining battery life and time
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          change-request
>Submitter-Id:   current-users
>Arrival-Date:   Mon Jul 18 14:40:33 GMT 2005
>Closed-Date:
>Last-Modified:
>Originator:     Rudolf Cejka
>Release:        FreeBSD 5.3-STABLE i386
>Organization:
FIT, Brno University of Technology, Czech Republic
>Environment:
	Patches are for -current from 15 July 2005.
>Description:
	There are four patches:

	Patch #1: Just style fix, which renames deprecated
	ACPIIO_CMBAT_GET_B* to ACPIIO_BATT_GET_B*.

	Patch #2: Just another style fix, which changes some upper letters
	to the lower letters, so all lines are printed in the same style -
	with just first upper letter.

	Patch #3: This patch adds two lines in acpiconf -i0 output after
	Remaining capacity line, so that remaining energy is printed in
	three forms: capacity in mAh/mWh and newly in percentage and in
        time form, like apm did (so I can finally switch from apm to
        acpiconf :o).

	Patch #4: Consumption rate is in mA/mW, not in mAh/mWh, so this
	patch fixes the printed unit.

>How-To-Repeat:
>Fix:

Patch #1:

--- usr.sbin/acpi/acpiconf/acpiconf.c.orig	Sun Jul 17 16:07:57 2005
+++ usr.sbin/acpi/acpiconf/acpiconf.c	Sun Jul 17 16:11:30 2005
@@ -96,7 +96,7 @@
 		err(EX_USAGE, "invalid battery %d", num);
 
 	battio.unit = num;
-	if (ioctl(acpifd, ACPIIO_CMBAT_GET_BIF, &battio) == -1)
+	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)
@@ -129,7 +129,7 @@
 	printf("OEM info:\t\t%s\n", battio.bif.oeminfo);
 
 	battio.unit = num;
-	if (ioctl(acpifd, ACPIIO_CMBAT_GET_BST, &battio) == -1)
+	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) {

Patch #2:

--- usr.sbin/acpi/acpiconf/acpiconf.c.orig	Sun Jul 17 16:12:32 2005
+++ usr.sbin/acpi/acpiconf/acpiconf.c	Sun Jul 17 16:13:19 2005
@@ -142,14 +142,14 @@
 			printf("Charging");
 		printf("\n");
 		if (battio.bst.rate == UNKNOWN_CAP)
-			printf("Present Rate:\t\tUnknown\n");
+			printf("Present rate:\t\tUnknown\n");
 		else
-			printf("Present Rate:\t\t%d %s\n", battio.bst.rate,
+			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:\tUnknown\n");
 		else
-			printf("Remaining Capacity:\t%d %s\n", battio.bst.cap,
+			printf("Remaining capacity:\t%d %s\n", battio.bst.cap,
 			    pwr_units);
 		if (battio.bst.volt == UNKNOWN_CAP)
 			printf("Volt:\t\t\tUnknown\n");

Patch #3:

--- usr.sbin/acpi/acpiconf/acpiconf.c.orig	Sun Jul 17 16:13:52 2005
+++ usr.sbin/acpi/acpiconf/acpiconf.c	Sun Jul 17 16:32:49 2005
@@ -91,6 +91,8 @@
 {
 	union acpi_battery_ioctl_arg battio;
 	const char *pwr_units;
+	u_int32_t dcap;
+	int h, m, s;
 
 	if (num < 0 || num > 64)
 		err(EX_USAGE, "invalid battery %d", num);
@@ -108,6 +110,7 @@
 		printf("Design capacity:\tUnknown\n");
 	else
 		printf("Design capacity:\t%d %s\n", battio.bif.dcap, pwr_units);
+	dcap = battio.bif.dcap;
 	if (battio.bif.lfcap == UNKNOWN_CAP)
 		printf("Last full capacity:\tUnknown\n");
 	else
@@ -151,6 +154,22 @@
 		else
 			printf("Remaining capacity:\t%d %s\n", battio.bst.cap,
 			    pwr_units);
+		if (battio.bst.cap == UNKNOWN_CAP ||
+		    dcap == UNKNOWN_CAP || dcap == 0)
+			printf("Remaining life:\t\tUnknown\n");
+		else
+			printf("Remaining life:\t\t%.1f %%\n",
+			    100.0 * battio.bst.cap / dcap);
+		h = (battio.bst.state & ACPI_BATT_STAT_DISCHARG &&
+		    battio.bst.cap != UNKNOWN_CAP &&
+		    battio.bst.rate != UNKNOWN_CAP &&
+		    battio.bst.rate != 0) ?
+		    3600 * battio.bst.cap / battio.bst.rate : 0;
+		s = h % 60;
+		h /= 60;
+		m = h % 60;
+		h /= 60;
+		printf("Remaining time:\t\t%d:%02d:%02d\n", h, m, s);
 		if (battio.bst.volt == UNKNOWN_CAP)
 			printf("Volt:\t\t\tUnknown\n");
 		else

Patch #4:

--- usr.sbin/acpi/acpiconf/acpiconf.c.orig	Sun Jul 17 16:40:29 2005
+++ usr.sbin/acpi/acpiconf/acpiconf.c	Sun Jul 17 16:41:37 2005
@@ -90,7 +90,7 @@
 acpi_battinfo(int num)
 {
 	union acpi_battery_ioctl_arg battio;
-	const char *pwr_units;
+	const char *pwr_units, *pwr_units2;
 	u_int32_t dcap;
 	int h, m, s;
 
@@ -101,10 +101,13 @@
 	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)
+	if (battio.bif.units == 0) {
 		pwr_units = "mWh";
-	else
+		pwr_units2 = "mW";
+	} else {
 		pwr_units = "mAh";
+		pwr_units2 = "mA";
+	}
 
 	if (battio.bif.dcap == UNKNOWN_CAP)
 		printf("Design capacity:\tUnknown\n");
@@ -148,7 +151,7 @@
 			printf("Present rate:\t\tUnknown\n");
 		else
 			printf("Present rate:\t\t%d %s\n", battio.bst.rate,
-			    pwr_units);
+			    pwr_units2);
 		if (battio.bst.cap == UNKNOWN_CAP)
 			printf("Remaining capacity:\tUnknown\n");
 		else
>Release-Note:
>Audit-Trail:
>Unformatted:


More information about the freebsd-bugs mailing list