pkgsrc-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[pkgsrc/trunk]: pkgsrc/sysutils/xbattbar Update xbattbar to 1.4.2nb3 by addin...
details: https://anonhg.NetBSD.org/pkgsrc/rev/861fff52f1ec
branches: trunk
changeset: 462935:861fff52f1ec
user: agc <agc%pkgsrc.org@localhost>
date: Sun Oct 19 09:25:02 2003 +0000
description:
Update xbattbar to 1.4.2nb3 by adding support for ACPI - if APM
doesn't work, try to use ACPI to get the battery charge value, and AC
charging switch.
Known to work on my Sony VAIO (PCG-GRX315MP) with ACPI, and with thanks to:
Lubomir Sedlacik for testing on an IBM T22 with ACPI
Manuel Bouyer for testing on an IBM Thinkpad 600e with APM, and
Brian A. Seklecki for testing on a Sony PCG-R505
diffstat:
sysutils/xbattbar/Makefile | 4 +-
sysutils/xbattbar/distinfo | 4 +-
sysutils/xbattbar/patches/patch-ab | 203 +++++++++++++++++++++++++++++++++++-
3 files changed, 199 insertions(+), 12 deletions(-)
diffs (237 lines):
diff -r 4357e3d47ad0 -r 861fff52f1ec sysutils/xbattbar/Makefile
--- a/sysutils/xbattbar/Makefile Sun Oct 19 08:47:42 2003 +0000
+++ b/sysutils/xbattbar/Makefile Sun Oct 19 09:25:02 2003 +0000
@@ -1,8 +1,8 @@
-# $NetBSD: Makefile,v 1.18 2003/07/17 22:53:58 grant Exp $
+# $NetBSD: Makefile,v 1.19 2003/10/19 09:25:02 agc Exp $
DISTNAME= xbattbar_1.4.2
PKGNAME= ${DISTNAME:S/_/-/}
-PKGREVISION= 2
+PKGREVISION= 3
WRKSRC= ${WRKDIR}/${DISTNAME:S/_/-/}
CATEGORIES= sysutils x11
MASTER_SITES= http://iplab.aist-nara.ac.jp/member/suguru/
diff -r 4357e3d47ad0 -r 861fff52f1ec sysutils/xbattbar/distinfo
--- a/sysutils/xbattbar/distinfo Sun Oct 19 08:47:42 2003 +0000
+++ b/sysutils/xbattbar/distinfo Sun Oct 19 09:25:02 2003 +0000
@@ -1,6 +1,6 @@
-$NetBSD: distinfo,v 1.4 2001/11/26 20:07:34 wiz Exp $
+$NetBSD: distinfo,v 1.5 2003/10/19 09:25:02 agc Exp $
SHA1 (xbattbar_1.4.2.tar.gz) = 14e9aafd62919e4a625d3f84df3b074b9eef8279
Size (xbattbar_1.4.2.tar.gz) = 14079 bytes
SHA1 (patch-aa) = 3bd4b688ccaeebe766335245c1a8c5dde52768c2
-SHA1 (patch-ab) = 1552e04203d2ad229c603f05d6a69766de5353cf
+SHA1 (patch-ab) = bdbff422f5f673fabc1fb74625af5fd2c760e137
diff -r 4357e3d47ad0 -r 861fff52f1ec sysutils/xbattbar/patches/patch-ab
--- a/sysutils/xbattbar/patches/patch-ab Sun Oct 19 08:47:42 2003 +0000
+++ b/sysutils/xbattbar/patches/patch-ab Sun Oct 19 09:25:02 2003 +0000
@@ -1,12 +1,199 @@
-$NetBSD: patch-ab,v 1.1 2001/11/26 20:07:35 wiz Exp $
+$NetBSD: patch-ab,v 1.2 2003/10/19 09:25:02 agc Exp $
---- xbattbar.c.orig Fri Feb 2 06:25:29 2001
-+++ xbattbar.c
-@@ -594,6 +594,7 @@
+--- xbattbar.c.orig 2001-02-02 05:25:29.000000000 +0000
++++ xbattbar.c 2003-10-17 13:15:51.000000000 +0100
+@@ -27,6 +27,13 @@
+
+ #include <sys/types.h>
+ #include <sys/time.h>
++
++#ifdef __NetBSD__
++#define ENVSYSUNITNAMES
++#include <sys/envsys.h>
++#include <paths.h>
++#endif /* __NetBSD__ */
++
+ #include <signal.h>
+ #include <stdio.h>
+ #include <unistd.h>
+@@ -583,46 +590,158 @@
+ #define _PATH_APM_CTLDEV "/dev/apmctl"
+ #define _PATH_APM_NORMAL "/dev/apm"
+
++/*
++ * pre: fd contains a valid file descriptor of an envsys(4) supporting device
++ * && ns is the number of sensors
++ * && etds and ebis are arrays of sufficient size
++ * post: returns 0 and etds and ebis arrays are filled with sensor info
++ * or returns -1 on failure
++ */
++static int
++fillsensors(int fd, envsys_tre_data_t *etds, envsys_basic_info_t *ebis,
++ size_t ns)
++{
++ int i;
++
++ for (i = 0; i < ns; ++i) {
++ ebis[i].sensor = i;
++ if (ioctl(fd, ENVSYS_GTREINFO, &ebis[i]) == -1) {
++ warn("Can't get sensor info for sensor %d", i);
++ return 0;
++ }
++
++ etds[i].sensor = i;
++ if (ioctl(fd, ENVSYS_GTREDATA, &etds[i]) == -1) {
++ warn("Can't get sensor data for sensor %d", i);
++ return 0;
++ }
++ }
++ return 1;
++}
++
++/*
++ * pre: fd contains a valid file descriptor of an envsys(4) supporting device
++ * post: returns the number of valid sensors provided by the device
++ * or -1 on error
++ */
++static size_t
++numsensors(int fd)
++{
++ int count = 0, valid = 1;
++ envsys_tre_data_t etd;
++ etd.sensor = 0;
++
++ while (valid) {
++ if (ioctl(fd, ENVSYS_GTREDATA, &etd) == -1)
++ err(1, "Can't get sensor data");
++
++ valid = etd.validflags & ENVSYS_FVALID;
++ if (valid)
++ ++count;
++
++ ++etd.sensor;
++ }
++
++ return count;
++}
++
++static envsys_tre_data_t *etds;
++static envsys_basic_info_t *ebis;
++static int *cetds;
++
+ int first = 1;
+ void battery_check(void)
+ {
+ int fd, r, p;
+ struct apm_power_info info;
++ int acpi;
++ size_t ns;
++ size_t cc;
++ int i;
+
++ acpi = 0;
+ if ((fd = open(_PATH_APM_NORMAL, O_RDONLY)) == -1) {
+- fprintf(stderr, "xbattbar: cannot open apm device\n");
++ fd = open(_PATH_SYSMON, O_RDONLY);
++ acpi = 1;
++ }
++ if (fd < 0) {
++ fprintf(stderr, "xbattbar: cannot open %s device\n", (acpi) ? _PATH_SYSMON : _PATH_APM_NORMAL);
exit(1);
}
-+ memset(&info, 0, sizeof(info));
- if (ioctl(fd, APM_IOC_GETPOWER, &info) != 0) {
- fprintf(stderr, "xbattbar: ioctl APM_IOC_GETPOWER failed\n");
- exit(1);
+- if (ioctl(fd, APM_IOC_GETPOWER, &info) != 0) {
+- fprintf(stderr, "xbattbar: ioctl APM_IOC_GETPOWER failed\n");
+- exit(1);
++ if (acpi) {
++ if ((ns = numsensors(fd)) == 0) {
++ fprintf(stderr, "xbattbar: no sensors found\n");
++ exit(1);
++ }
++ if (first) {
++ cetds = (int *)malloc(ns * sizeof(int));
++ etds = (envsys_tre_data_t *)malloc(ns * sizeof(envsys_tre_data_t));
++ ebis = (envsys_basic_info_t *)malloc(ns * sizeof(envsys_basic_info_t));
++
++ if ((cetds == NULL) || (etds == NULL) || (ebis == NULL)) {
++ err(1, "Out of memory");
++ }
++ }
++
++ fillsensors(fd, etds, ebis, ns);
++
++ } else {
++
++ memset(&info, 0, sizeof(info));
++ if (ioctl(fd, APM_IOC_GETPOWER, &info) != 0) {
++ fprintf(stderr, "xbattbar: ioctl APM_IOC_GETPOWER failed\n");
++ exit(1);
++ }
+ }
+
+ close(fd);
+
+ ++elapsed_time;
+
+- /* get current remoain */
+- if (info.battery_life > 100) {
+- /* some APM BIOSes return values slightly > 100 */
+- r = 100;
+- } else {
+- r = info.battery_life;
+- }
++ if (acpi) {
++ r = 0;
++ p = APM_AC_ON;
++ for (i = 0 ; i < ns ; i++) {
++ cc = strlen(ebis[i].desc);
++ if (strcmp(&ebis[i].desc[cc - 6], "energy") == 0) {
++ r = (etds[i].cur.data_s * 100.0) / etds[i].max.data_s;
++ }
++ if (ebis[i].units == ENVSYS_INDICATOR &&
++ etds[i].cur.data_s &&
++ strcmp(&ebis[i].desc[cc - 11], "discharging") == 0) {
++ p = APM_AC_OFF;
++ }
++ }
++ if (first || ac_line != p || battery_level != r) {
++ first = 0;
++ ac_line = p;
++ battery_level = r;
++ redraw();
++ }
+
+- /* get AC-line status */
+- if (info.ac_state == APM_AC_ON) {
+- p = APM_AC_ON;
+ } else {
+- p = APM_AC_OFF;
+- }
+-
+- if (first || ac_line != p || battery_level != r) {
+- first = 0;
+- ac_line = p;
+- battery_level = r;
+- redraw();
++ /* get current remain */
++ if (info.battery_life > 100) {
++ /* some APM BIOSes return values slightly > 100 */
++ r = 100;
++ } else {
++ r = info.battery_life;
++ }
++
++ /* get AC-line status */
++ if (info.ac_state == APM_AC_ON) {
++ p = APM_AC_ON;
++ } else {
++ p = APM_AC_OFF;
++ }
++
++ if (first || ac_line != p || battery_level != r) {
++ first = 0;
++ ac_line = p;
++ battery_level = r;
++ redraw();
++ }
+ }
+ }
+
Home |
Main Index |
Thread Index |
Old Index