diff options
Diffstat (limited to 'x11/gnomeapplets2/files/patch-battstat-acpi')
-rw-r--r-- | x11/gnomeapplets2/files/patch-battstat-acpi | 576 |
1 files changed, 0 insertions, 576 deletions
diff --git a/x11/gnomeapplets2/files/patch-battstat-acpi b/x11/gnomeapplets2/files/patch-battstat-acpi deleted file mode 100644 index 903e8b951d11..000000000000 --- a/x11/gnomeapplets2/files/patch-battstat-acpi +++ /dev/null @@ -1,576 +0,0 @@ ---- battstat/Makefile.in.orig Mon Jan 24 20:20:49 2005 -+++ battstat/Makefile.in Mon Jan 24 20:22:02 2005 -@@ -55,9 +55,10 @@ - PROGRAMS = $(libexec_PROGRAMS) - am_battstat_applet_2_OBJECTS = properties.$(OBJEXT) \ - battstat_applet.$(OBJEXT) power-management.$(OBJEXT) \ -- acpi-linux.$(OBJEXT) -+ acpi-freebsd.$(OBJEXT) acpi-linux.$(OBJEXT) - battstat_applet_2_OBJECTS = $(am_battstat_applet_2_OBJECTS) - am__DEPENDENCIES_1 = -+ACPIINC = @ACPIINC@ - @HAVE_LIBAPM_FALSE@@NEED_LIBAPM_TRUE@am__DEPENDENCIES_2 = \ - @HAVE_LIBAPM_FALSE@@NEED_LIBAPM_TRUE@ apmlib/libapm.a - battstat_applet_2_DEPENDENCIES = $(am__DEPENDENCIES_1) \ -@@ -66,6 +67,7 @@ - depcomp = $(SHELL) $(top_srcdir)/depcomp - am__depfiles_maybe = depfiles - @AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/acpi-linux.Po \ -+@AMDEP_TRUE@ ./$(DEPDIR)/acpi-freebsd.Po \ - @AMDEP_TRUE@ ./$(DEPDIR)/battstat_applet.Po \ - @AMDEP_TRUE@ ./$(DEPDIR)/power-management.Po \ - @AMDEP_TRUE@ ./$(DEPDIR)/properties.Po -@@ -336,6 +338,7 @@ - $(GNOME_APPLETS_CFLAGS) \ - $(LIBGLADE_CFLAGS) \ - $(APMINC) \ -+ $(ACPIINC) \ - -DG_LOG_DOMAIN=\"battstat_applet\" - - battstat_applet_2_SOURCES = \ -@@ -345,7 +348,9 @@ - battstat_applet.c \ - power-management.c \ - acpi-linux.c \ -- acpi-linux.h -+ acpi-linux.h \ -+ acpi-freebsd.c \ -+ acpi-freebsd.h - - battstat_applet_2_LDADD = \ - $(GNOME_APPLETS_LIBS) \ -@@ -439,6 +444,7 @@ - -rm -f *.tab.c - - @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/acpi-linux.Po@am__quote@ -+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/acpi-freebsd.Po@am__quote@ - @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/battstat_applet.Po@am__quote@ - @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/power-management.Po@am__quote@ - @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/properties.Po@am__quote@ ---- battstat/battstat_applet.c.orig Mon Jan 24 12:51:51 2005 -+++ battstat/battstat_applet.c Mon Jan 24 20:20:50 2005 -@@ -953,6 +953,7 @@ - "Seth Nickell <snickell@stanford.edu> (GNOME2 port)", - "Davyd Madeley <davyd@madeley.id.au>", - "Ryan Lortie <desrt@desrt.ca>", -+ "Joe Marcus Clarke <marcus@FreeBSD.org> (FreeBSD ACPI support)", - NULL - }; - ---- battstat/properties.c.orig Fri Jan 14 23:38:18 2005 -+++ battstat/properties.c Mon Mar 14 19:49:26 2005 -@@ -27,7 +27,7 @@ - - #include <stdio.h> - --#ifdef __FreeBSD__ -+#if defined(__FreeBSD__) && defined(__i386__) - #include <machine/apm_bios.h> - #elif defined(__NetBSD__) || defined(__OpenBSD__) - #include <sys/param.h> -@@ -61,6 +61,9 @@ - #include <panel-applet-gconf.h> - /*#include <status-docklet.h>*/ - -+#if defined(__FreeBSD__) && !defined(__i386__) -+#include "acpi-freebsd.h" -+#endif - #include "battstat.h" - - #ifndef gettext_noop ---- battstat/acpi-freebsd.c.orig Sun Jul 3 16:00:01 2005 -+++ battstat/acpi-freebsd.c Sun Jul 3 16:23:26 2005 -@@ -0,0 +1,280 @@ -+/* battstat A GNOME battery meter for laptops. -+ * Copyright (C) 2000 by Jörgen Pehrson <jp@spektr.eu.org> -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 59 Temple Street #330, Boston, MA 02111-1307, USA. -+ * -+ $Id: patch-battstat-acpi,v 1.13 2005/02/28 08:02:03 marcus Exp $ -+ */ -+ -+/* -+ * ACPI battery functions for FreeBSD >= 5.2. -+ * September 2004 by Joe Marcus Clarke <marcus@FreeBSD.org> -+ */ -+ -+#ifdef HAVE_CONFIG_H -+#include <config.h> -+#endif -+ -+#ifdef __FreeBSD__ -+ -+#include <stdio.h> -+#include <sys/types.h> -+#include <sys/socket.h> -+#include <sys/sysctl.h> -+#include <sys/un.h> -+#include <sys/ioctl.h> -+#if defined(__i386__) -+#include <machine/apm_bios.h> -+#endif -+#include <stdlib.h> -+#include <errno.h> -+#include <unistd.h> -+#include <fcntl.h> -+#include <glib.h> -+ -+#include <dev/acpica/acpiio.h> -+ -+#include "acpi-freebsd.h" -+ -+static gboolean -+update_ac_info(struct acpi_info * acpiinfo) -+{ -+ int acline; -+ size_t len = sizeof(acline); -+ -+ acpiinfo->ac_online = FALSE; -+ -+ if (sysctlbyname(ACPI_ACLINE, &acline, &len, NULL, 0) == -1) { -+ return FALSE; -+ } -+ -+ acpiinfo->ac_online = acline ? TRUE : FALSE; -+ -+ return TRUE; -+} -+ -+static gboolean -+update_battery_info(struct acpi_info * acpiinfo) -+{ -+ union acpi_battery_ioctl_arg battio; -+ int i; -+ -+ /* We really don't have to do this here. All of the relevant battery -+ * info can be obtained through sysctl. However, one day, the rate -+ * may be useful to get time left to full charge. -+ */ -+ -+ for(i = BATT_MIN; i < BATT_MAX; i++) { -+ battio.unit = i; -+ if (ioctl(acpiinfo->acpifd, ACPIIO_CMBAT_GET_BIF, &battio) == -1) { -+ continue; -+ } -+ -+ acpiinfo->max_capacity += battio.bif.lfcap; -+ acpiinfo->low_capacity += battio.bif.wcap; -+ acpiinfo->critical_capacity += battio.bif.lcap; -+ } -+ -+ return TRUE; -+} -+ -+gboolean -+acpi_freebsd_init(struct acpi_info * acpiinfo) -+{ -+ int acpi_fd; -+ int event_fd; -+ -+ g_assert(acpiinfo); -+ -+ if (acpiinfo->acpifd == -1) { -+ acpi_fd = open(ACPIDEV, O_RDONLY); -+ if (acpi_fd >= 0) { -+ acpiinfo->acpifd = acpi_fd; -+ } -+ else { -+ acpiinfo->acpifd = -1; -+ return FALSE; -+ } -+ } -+ -+ event_fd = socket(PF_UNIX, SOCK_STREAM, 0); -+ if (event_fd >= 0) { -+ struct sockaddr_un addr; -+ addr.sun_family = AF_UNIX; -+ strcpy(addr.sun_path, "/var/run/devd.pipe"); -+ if (connect(event_fd, (struct sockaddr *) &addr, sizeof(addr)) == 0) { -+ acpiinfo->event_fd = event_fd; -+ acpiinfo->event_inited = TRUE; -+ acpiinfo->channel = g_io_channel_unix_new(event_fd); -+ } -+ else { -+ close(event_fd); -+ acpiinfo->event_fd = -1; -+ acpiinfo->event_inited = FALSE; -+ } -+ } -+ -+ update_battery_info(acpiinfo); -+ update_ac_info(acpiinfo); -+ -+ return TRUE; -+} -+ -+#define ACPI_EVENT_IGNORE 0 -+#define ACPI_EVENT_AC 1 -+#define ACPI_EVENT_BATTERY_INFO 2 -+ -+static int parse_acpi_event(GString *buffer) -+{ -+ if (strstr(buffer->str, "system=ACPI")) { -+ if (strstr(buffer->str, "subsystem=ACAD")) -+ return ACPI_EVENT_AC; -+ if (strstr(buffer->str, "subsystem=CMBAT")) -+ return ACPI_EVENT_BATTERY_INFO; -+ } -+ -+ return ACPI_EVENT_IGNORE; -+} -+ -+void acpi_freebsd_update(struct acpi_info *acpiinfo) -+{ -+ /* XXX This is needed for systems where devd does not have permissions -+ * to allow for event-driven updates. -+ */ -+ update_ac_info(acpiinfo); -+ update_battery_info(acpiinfo); -+} -+ -+gboolean acpi_process_event(struct acpi_info *acpiinfo, gboolean *read_error) -+{ -+ gsize i; -+ int evt; -+ gboolean result = FALSE; -+ GString *buffer; -+ GIOStatus stat; -+ buffer = g_string_new(NULL); -+ -+ *read_error = FALSE; -+ stat = g_io_channel_read_line_string(acpiinfo->channel, buffer, &i, NULL); -+ -+ if (stat == G_IO_STATUS_ERROR || stat == G_IO_STATUS_EOF) { -+ *read_error = TRUE; -+ g_string_free(buffer, TRUE); -+ return FALSE; -+ } -+ -+ evt = parse_acpi_event(buffer); -+ switch (evt) { -+ case ACPI_EVENT_AC: -+ update_ac_info(acpiinfo); -+ result = TRUE; -+ break; -+ case ACPI_EVENT_BATTERY_INFO: -+ update_battery_info(acpiinfo); -+ result = TRUE; -+ break; -+ } -+ -+ g_string_free(buffer, TRUE); -+ return result; -+} -+ -+void -+acpi_freebsd_cleanup(struct acpi_info * acpiinfo) -+{ -+ g_assert(acpiinfo); -+ -+ if (acpiinfo->acpifd >= 0) { -+ close(acpiinfo->acpifd); -+ acpiinfo->acpifd = -1; -+ } -+ -+ if (acpiinfo->event_fd >= 0) { -+ g_io_channel_unref(acpiinfo->channel); -+ close(acpiinfo->event_fd); -+ acpiinfo->event_fd = -1; -+ } -+} -+ -+gboolean -+acpi_freebsd_read(struct apm_info *apminfo, struct acpi_info * acpiinfo) -+{ -+ int time; -+ int life; -+ int acline; -+ int state; -+ size_t len; -+ int rate; -+ int remain; -+ union acpi_battery_ioctl_arg battio; -+ gboolean charging; -+ int i; -+ -+ g_assert(acpiinfo); -+ -+ charging = FALSE; -+ -+ for(i = BATT_MIN; i < BATT_MAX; i++) { -+ battio.unit = i; -+ if (ioctl(acpiinfo->acpifd, ACPIIO_CMBAT_GET_BST, &battio) == -1) { -+ continue; -+ } -+ -+ remain += battio.bst.cap; -+ rate += battio.bst.rate; -+ } -+ -+ len = sizeof(time); -+ if (sysctlbyname(ACPI_TIME, &time, &len, NULL, 0) == -1) { -+ return FALSE; -+ } -+ -+ len = sizeof(life); -+ if (sysctlbyname(ACPI_LIFE, &life, &len, NULL, 0) == -1) { -+ return FALSE; -+ } -+ -+ len = sizeof(state); -+ if (sysctlbyname(ACPI_STATE, &state, &len, NULL, 0) == -1) { -+ return FALSE; -+ } -+ -+ apminfo->ai_acline = acpiinfo->ac_online ? 1 : 0; -+ if (state & ACPI_BATT_STAT_CHARGING) { -+ apminfo->ai_batt_stat = 3; -+ charging = TRUE; -+ } -+ else if (state & ACPI_BATT_STAT_CRITICAL) { -+ /* Add a special check here since FreeBSD's ACPI interface will tell us -+ * when the battery is critical. -+ */ -+ apminfo->ai_batt_stat = 2; -+ } -+ else { -+ apminfo->ai_batt_stat = remain < acpiinfo->low_capacity ? 1 : remain < acpiinfo->critical_capacity ? 2 : 0; -+ } -+ apminfo->ai_batt_life = life; -+ if (!charging) { -+ apminfo->ai_batt_time = time; -+ } -+ else if (charging && rate > 0) { -+ apminfo->ai_batt_time = (int) ((acpiinfo->max_capacity-remain)/(float)rate); -+ } -+ else -+ apminfo->ai_batt_time = -1; -+ -+ return TRUE; -+} -+#endif ---- battstat/acpi-freebsd.h.orig Sun Jul 3 16:00:01 2005 -+++ battstat/acpi-freebsd.h Sun Jul 3 16:23:56 2005 -@@ -0,0 +1,60 @@ -+/* -+ * Copyright (C) 2004 by Joe Marcus Clarke <marcus@FreeBSD.org> -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 59 Temple Street #330, Boston, MA 02111-1307, USA. -+ */ -+ -+#ifndef __ACPI_FREEBSD_H__ -+#define __ACPI_FREEBSD_H__ -+ -+#define ACPIDEV "/dev/acpi" -+ -+#define BATT_MIN 0 -+#define BATT_MAX 64 -+ -+#define ACPI_ACLINE "hw.acpi.acline" -+#define ACPI_TIME "hw.acpi.battery.time" -+#define ACPI_LIFE "hw.acpi.battery.life" -+#define ACPI_STATE "hw.acpi.battery.state" -+ -+/* XXX: AMD64 does not have machine/apm_bios.h. */ -+#if !defined(__i386__) -+struct apm_info { -+ guint ai_acline; -+ guint ai_batt_stat; -+ guint ai_batt_life; -+ int ai_batt_time; -+ guint ai_status; -+}; -+#endif -+ -+struct acpi_info { -+ gboolean ac_online; -+ gboolean event_inited; -+ int acpifd; -+ int event_fd; -+ int max_capacity; -+ int low_capacity; -+ int critical_capacity; -+ GIOChannel * channel; -+}; -+ -+gboolean acpi_freebsd_read(struct apm_info *apminfo, struct acpi_info * acpiinfo); -+void acpi_freebsd_update(struct acpi_info * acpiinfo); -+gboolean acpi_process_event(struct acpi_info * acpiinfo, gboolean *read_error); -+gboolean acpi_freebsd_init(struct acpi_info * acpiinfo); -+void acpi_freebsd_cleanup(struct acpi_info * acpiinfo); -+ -+#endif /* __ACPI_FREEBSD_H__ */ ---- battstat/power-management.c.orig Sun Mar 20 05:20:55 2005 -+++ battstat/power-management.c Sun Jul 3 16:21:42 2005 -@@ -73,12 +73,42 @@ static int pm_initialised; - * the problem might be. This error message is not to be freed. - */ - --#ifdef __FreeBSD__ -- -+#if defined(__FreeBSD__) -+#if defined(__i386__) - #include <machine/apm_bios.h> -+#endif -+#include "acpi-freebsd.h" -+ -+static struct acpi_info acpiinfo; -+static gboolean using_acpi; -+static int acpi_count; -+static int acpiwatch; -+static struct apm_info apminfo; -+ -+gboolean acpi_freebsd_read(struct apm_info *apminfo, struct acpi_info *acpiinfo); - - #define APMDEVICE "/dev/apm" - -+static gboolean acpi_callback (GIOChannel * chan, GIOCondition cond, gpointer data) -+{ -+ gboolean read_error; -+ -+ if (cond & (G_IO_ERR | G_IO_HUP)) { -+ acpi_freebsd_cleanup(&acpiinfo); -+ return FALSE; -+ } -+ -+ if (acpi_process_event(&acpiinfo, &read_error)) { -+ acpi_freebsd_read(&apminfo, &acpiinfo); -+ } -+ else if (read_error) { -+ acpi_freebsd_cleanup(&acpiinfo); -+ return FALSE; -+ } -+ -+ return TRUE; -+} -+ - static const char * - apm_readinfo (BatteryStatus *status) - { -@@ -86,32 +116,56 @@ apm_readinfo (BatteryStatus *status) - FreeBSD. Each time this functions is called (once every second) - the APM device is opened, read from and then closed. - */ -- struct apm_info apminfo; - int fd; - - if (DEBUG) g_print("apm_readinfo() (FreeBSD)\n"); - -- fd = open(APMDEVICE, O_RDONLY); -- if (fd == -1) -- { -- pm_initialised = 0; -- return ERR_OPEN_APMDEV; -+ if (using_acpi && (!acpiinfo.event_inited || acpiinfo.event_fd >= 0)) { -+ if (acpi_count <= 0) { -+ acpi_count = 30; -+ if (!acpiinfo.event_inited) { -+ acpi_freebsd_update(&acpiinfo); -+ } -+ acpi_freebsd_read(&apminfo, &acpiinfo); -+ } -+ acpi_count--; -+ } -+ else if (using_acpi && acpiinfo.event_inited) { -+ if (acpi_freebsd_init(&acpiinfo)) { -+ acpiwatch = g_io_add_watch (acpiinfo.channel, -+ G_IO_IN | G_IO_ERR | G_IO_HUP, -+ acpi_callback, NULL); -+ acpi_freebsd_read(&apminfo, &acpiinfo); -+ } - } -+ else { -+#if defined(__i386__) -+ fd = open(APMDEVICE, O_RDONLY); -+ if (fd == -1) { -+ return ERR_OPEN_APMDEV; -+ } - -- if (ioctl(fd, APMIO_GETINFO, &apminfo) == -1) -- err(1, "ioctl(APMIO_GETINFO)"); -+ if (ioctl(fd, APMIO_GETINFO, &apminfo) == -1) -+ err(1, "ioctl(APMIO_GETINFO)"); - -- close(fd); -+ close(fd); - -- if(apminfo.ai_status == 0) -- return ERR_APM_E; -+ if(apminfo.ai_status == 0) -+ return ERR_APM_E; -+#else -+ return ERR_OPEN_APMDEV; -+#endif -+ } - - status->present = TRUE; - status->on_ac_power = apminfo.ai_acline ? 1 : 0; - status->state = apminfo.ai_batt_stat; - status->percent = apminfo.ai_batt_life; - status->charging = (status->state == 3) ? TRUE : FALSE; -- status->minutes = apminfo.ai_batt_time; -+ if (using_acpi) -+ status->minutes = apminfo.ai_batt_time; -+ else -+ status->minutes = (int) (apminfo.ai_batt_time/60.0); - - return NULL; - } -@@ -339,6 +393,19 @@ power_management_initialise( void ) - G_IO_IN | G_IO_ERR | G_IO_HUP, - acpi_callback, NULL); - } -+#elif defined(__FreeBSD__) -+ if (acpi_freebsd_init(&acpiinfo)) { -+ using_acpi = TRUE; -+ acpi_count = 0; -+ } -+ else -+ using_acpi = FALSE; -+ -+ if (using_acpi && acpiinfo.event_fd >= 0) { -+ acpiwatch = g_io_add_watch (acpiinfo.channel, -+ G_IO_IN | G_IO_ERR | G_IO_HUP, -+ acpi_callback, NULL); -+ } - #endif - pm_initialised = 1; - -@@ -360,6 +427,13 @@ power_management_cleanup( void ) - g_source_remove(acpiwatch); - acpiwatch = 0; - acpi_linux_cleanup(&acpiinfo); -+ } -+#elif defined(__FreeBSD__) -+ if (using_acpi) { -+ if (acpiwatch != 0) -+ g_source_remove(acpiwatch); -+ acpiwatch = 0; -+ acpi_freebsd_cleanup(&acpiinfo); - } - #endif - |