[Xfce4-commits] [panel-plugins/xfce4-battery-plugin] 01/07: Remove historical APM support for Linux, support ACPI only.

noreply at xfce.org noreply at xfce.org
Sun Dec 2 22:36:28 CET 2018


This is an automated email from the git hooks/post-receive script.

a   n   d   r   e       p   u   s   h   e   d       a       c   o   m   m   i   t       t   o       b   r   a   n   c   h       m   a   s   t   e   r   
   in repository panel-plugins/xfce4-battery-plugin.

commit ae36fc8b03183ae05cfad634583cc05f091e400f
Author: John Lindgren <john at jlindgren.net>
Date:   Fri Nov 30 21:35:48 2018 -0500

    Remove historical APM support for Linux, support ACPI only.
---
 panel-plugin/Makefile.am |   4 +-
 panel-plugin/battery.c   |  43 +----
 panel-plugin/libapm.c    | 471 -----------------------------------------------
 panel-plugin/libapm.h    |  72 --------
 4 files changed, 6 insertions(+), 584 deletions(-)

diff --git a/panel-plugin/Makefile.am b/panel-plugin/Makefile.am
index 44a6263..d2d991e 100644
--- a/panel-plugin/Makefile.am
+++ b/panel-plugin/Makefile.am
@@ -14,9 +14,7 @@ plugin_LTLIBRARIES = libbattery.la
 libbattery_la_SOURCES =							\
 	battery.c							\
 	libacpi.h							\
-	libacpi.c							\
-	libapm.h							\
-	libapm.c
+	libacpi.c
 
 libbattery_la_CFLAGS =							\
 	$(LIBXFCE4PANEL_CFLAGS)						\
diff --git a/panel-plugin/battery.c b/panel-plugin/battery.c
index b081bbd..cf389c1 100644
--- a/panel-plugin/battery.c
+++ b/panel-plugin/battery.c
@@ -33,8 +33,6 @@
 #include <sys/ioctl.h>
 #include <machine/apmvar.h>
 #define APMDEVICE "/dev/apm"
-#elif __linux__
-#include <libapm.h>
 #endif
 
 #include <sys/stat.h>
@@ -226,36 +224,16 @@ detect_battery_info(t_battmon *battmon)
       battmon->method = BM_USE_APM;
 
       return TRUE;
-#elif __linux__
-    struct apm_info apm;
-
-    /* First check to see if ACPI is available */
+#else
+    /* Check to see if ACPI is available */
     if(check_acpi()==0) {
         /* ACPI detected */
-        int i;
         battmon->method = BM_USE_ACPI;
-        for (i=0;i<batt_count;i++) {
-            if (read_acpi_info(i)) break;
-        }
-        /*read_acpi_info(0);*/ /* only consider first battery... */
-        for (i=0;i<batt_count;i++) {
-            if (read_acpi_state(i)) break;
-        }
-        if (batt_count){
-           apm.battery_percentage=acpistate->percentage;
-           apm.battery_time=acpistate->rtime;
-        }
-    return TRUE;
-    }
-    if(apm_read(&apm) == 0) {
-        /* ACPI not detected, but APM works */
-        battmon->method = BM_USE_APM;
         return TRUE;
     }
 
-    /* Neither ACPI or APM detected/working */
+    /* ACPI not detected/working */
     battmon->method = BM_BROKEN;
-
     return FALSE;
 #endif
 }
@@ -306,9 +284,6 @@ update_apm_status(t_battmon *battmon)
       battmon->method = BM_USE_APM;
 
 #else
-#if defined(__linux__) || defined(APMDEVICE)
-    struct apm_info apm;
-#endif
     DBG ("Updating battery status...");
 
     if(battmon->method == BM_BROKEN) {
@@ -393,16 +368,7 @@ update_apm_status(t_battmon *battmon)
         last_acline = acline;
 
     }
-#ifdef __linux__
-    else {
-        DBG ("Trying apm_read()...");
-        apm_read(&apm);    /* not broken and not using ACPI, assume APM */
-        charge = apm.battery_percentage;
-        time_remaining = apm.battery_time;
-        acline = apm.ac_line_status ? TRUE : FALSE;
-
-    }
-#elif __FreeBSD__
+#ifdef __FreeBSD__
     else {
  /* This is how I read the information from the APM subsystem under
      FreeBSD.  Each time this functions is called (once every second)
@@ -418,6 +384,7 @@ battmon.c:241: for each function it appears in.)
   */
 #ifdef APMDEVICE
        int fd;
+       struct apm_info apm;
 
        battmon->method = BM_BROKEN;
        fd = open(APMDEVICE, O_RDONLY);
diff --git a/panel-plugin/libapm.c b/panel-plugin/libapm.c
deleted file mode 100644
index 95fa170..0000000
--- a/panel-plugin/libapm.c
+++ /dev/null
@@ -1,471 +0,0 @@
-/* Copyright (c) 1996, 1997 Rickard E. Faith <faith at acm.org>
- *
- * This library is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Library General Public License as published
- * by the Free Software Foundation; either version 2 of the License, or (at
- * your option) any later version.
- *
- * This library 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
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <string.h>
-#include <fcntl.h>
-#include <ctype.h>
-#include <sys/stat.h>
-#include <sys/time.h>
-#include <sys/ioctl.h>
-#include <sys/types.h>
-
-#ifndef __linux__
-/* FIXME: enable BSD apm calls here */
-int apm_exists(void)
-{
-     return 0;
-}
-#else
-#include <sys/sysmacros.h>
-#include "libapm.h"
-
-#define BACKWARD_COMPAT 1
-
-/* If APM support of the right version exists in kernel, return zero.
- * Otherwise, return 1 if no support exists, or 2 if it is the wrong
- * version.  *NOTE* The sense of the return value is not intuitive.
- */
-int apm_exists(void)
-{
-    apm_info i;
-
-    if (access(APM_PROC, R_OK))
-	return 1;
-    return apm_read(&i);
-}
-
-
-/* Read information from /proc/apm.  Return 0 on success, 1 if APM not
- * installed, 2 if APM installed, but old version.
- */
-int apm_read(apm_info * i)
-{
-    FILE *str;
-    char units[10];
-    char buffer[100];
-    int retcode = 0;
-
-    if (!(str = fopen(APM_PROC, "r")))
-	return 1;
-    fgets(buffer, sizeof(buffer) - 1, str);
-    buffer[sizeof(buffer) - 1] = '\0';
-
-    /* Should check for other driver versions; driver 1.9 (and some
-     * others) uses this format, which doesn't expose # batteries.
-     */
-    sscanf(buffer, "%s %d.%d %x %x %x %x %d%% %d %s\n",
-	   (char *) i->driver_version,
-	   &i->apm_version_major,
-	   &i->apm_version_minor,
-	   &i->apm_flags,
-	   &i->ac_line_status,
-	   &i->battery_status,
-	   &i->battery_flags,
-	   &i->battery_percentage,
-	   &i->battery_time,
-	   units);
-    i->using_minutes = !strncmp(units, "min", 3) ? 1 : 0;
-    if (i->driver_version[0] == 'B')
-    {				/* old style.  argh. */
-#if !BACKWARD_COMPAT
-	retcode = 2;
-#else
-	strcpy((char *) i->driver_version, "pre-0.7");
-	i->apm_version_major = 0;
-	i->apm_version_minor = 0;
-	i->apm_flags = 0;
-	i->ac_line_status = 0xff;
-	i->battery_status = 0xff;
-	i->battery_flags = 0xff;
-	i->battery_percentage = -1;
-	i->battery_time = -1;
-	i->using_minutes = 1;
-
-	sscanf(buffer, "BIOS version: %d.%d",
-	       &i->apm_version_major, &i->apm_version_minor);
-	fgets(buffer, sizeof(buffer) - 1, str);
-	sscanf(buffer, "Flags: 0x%02x", &i->apm_flags);
-	if (i->apm_flags & APM_32_BIT_SUPPORT)
-	{
-	    fgets(buffer, sizeof(buffer) - 1, str);
-	    fgets(buffer, sizeof(buffer) - 1, str);
-	    if (buffer[0] != 'P')
-	    {
-		if (!strncmp(buffer + 4, "off line", 8))
-		    i->ac_line_status = 0;
-		else if (!strncmp(buffer + 4, "on line", 7))
-		    i->ac_line_status = 1;
-		else if (!strncmp(buffer + 4, "on back", 7))
-		    i->ac_line_status = 2;
-
-		fgets(buffer, sizeof(buffer) - 1, str);
-		if (!strncmp(buffer + 16, "high", 4))
-		    i->battery_status = 0;
-		else if (!strncmp(buffer + 16, "low", 3))
-		    i->battery_status = 1;
-		else if (!strncmp(buffer + 16, "crit", 4))
-		    i->battery_status = 2;
-		else if (!strncmp(buffer + 16, "charg", 5))
-		    i->battery_status = 3;
-
-		fgets(buffer, sizeof(buffer) - 1, str);
-		if (strncmp(buffer + 14, "unknown", 7))
-		    i->battery_percentage = atoi(buffer + 14);
-		if (i->apm_version_major >= 1 && i->apm_version_minor >= 1)
-		{
-		    fgets(buffer, sizeof(buffer) - 1, str);
-		    sscanf(buffer, "Battery flag: 0x%02x", &i->battery_flags);
-
-		    fgets(buffer, sizeof(buffer) - 1, str);
-		    if (strncmp(buffer + 14, "unknown", 7))
-			i->battery_time = atoi(buffer + 14);
-		}
-	    }
-	}
-#endif
-    }
-
-    /* Fix possible kernel bug -- percentage
-     * set to 0xff (==255) instead of -1.
-     */
-    if (i->battery_percentage > 100)
-	i->battery_percentage = -1;
-
-    fclose(str);
-    return retcode;
-}
-
-
-/* Lookup the device number for the apm_bios device. */
-dev_t apm_dev(void)
-{
-    FILE *str;
-    static int cached = -1;
-    char buf[80];
-    char *pt;
-    apm_info i;
-
-    if (cached >= 0)
-	return cached;
-
-    if (access(APM_PROC, R_OK) || apm_read(&i) == 1)
-	return cached = -1;
-    if (i.driver_version[0] == '1')
-	return cached = makedev(10, 134);
-
-    if (!(str = fopen(APM_DEV, "r")))
-	return -1;
-    while (fgets(buf, sizeof(buf) - 1, str))
-    {
-	buf[sizeof(buf) - 1] = '\0';
-	for (pt = buf; *pt && isspace(*pt); ++pt);	/* skip leading spaces */
-	for (; *pt && !isspace(*pt); ++pt);	/* find next space */
-	if (isspace(*pt))
-	{
-	    *pt++ = '\0';
-	    pt[strlen(pt) - 1] = '\0';	/* get rid of newline */
-	    if (!strcmp(pt, APM_NAME))
-	    {
-		fclose(str);
-		return cached = makedev(atoi(buf), 0);
-	    }
-	}
-    }
-    fclose(str);
-    return cached = -1;
-}
-
-
-/* Return a file descriptor for the apm_bios device, or -1 if there is an
- * error.  Is this method secure?  Should we make the device in /dev
- * instead of /tmp?
- *
- * apenwarr 2001/05/11: just throw out the weird temporary device file stuff.
- *	It was only for ancient kernel versions anyway.
- */
-int apm_open(void)
-{
-    int fd;
-    apm_info i;
-
-    if (access(APM_PROC, R_OK) || apm_read(&i) == 1)
-	return -1;
-    if (i.driver_version[0] >= '1')
-    {
-	if ((fd = open(APM_DEVICE, O_RDWR)) < 0)
-	{
-	    /* Try to create it.  This is reasonable
-	     * for backward compatibility.
-	     */
-	    if (mknod(APM_DEVICE, S_IFCHR | S_IRUSR | S_IWUSR, apm_dev()))
-	    {
-		unlink(APM_DEVICE);
-		return -1;
-	    }
-	    fd = open(APM_DEVICE, O_RDWR);
-	}
-
-	return fd;
-    }
-
-    return -1;
-}
-
-
-/* Given a file descriptor for the apm_bios device, close it. */
-int apm_close(int fd)
-{
-    return close(fd);
-}
-
-/* Given a file descriptor for the apm_bios device, this routine will wait
- * timeout seconds for APM events.  Up to n events will be placed in the
- * events queue.  The return code will indicate the number of events
- * stored.  Since this routine uses select(2), it will return if an
- * unblocked signal is caught.  A timeout < 0 means to block indefinately.
- *
- * Note that if you read a request to standby or to suspend, the kernel
- * will be waiting for you to respond to it with a call to apm_suspend()
- * or to apm_standby() !
- */
-int apm_get_events(int fd, int timeout, apm_event_t * events, int n)
-{
-    int retcode;
-    fd_set fds;
-    struct timeval t;
-
-    t.tv_sec = timeout;
-    t.tv_usec = 0;
-
-    FD_ZERO(&fds);
-    FD_SET(fd, &fds);
-    retcode = select(fd + 1, &fds, NULL, NULL, timeout < 0 ? NULL : &t);
-    if (retcode <= 0)
-	return 0;
-    return read(fd, events, n * sizeof(apm_event_t)) / sizeof(apm_event_t);
-}
-
-
-/* Try to set the Power State to Suspend. */
-int apm_suspend(int fd)
-{
-    sync();
-    return ioctl(fd, APM_IOC_SUSPEND, NULL);
-}
-
-
-/* Try to set the Power State to Standby. */
-int apm_standby(int fd)
-{
-    sync();
-    return ioctl(fd, APM_IOC_STANDBY, NULL);
-}
-
-/* Return the last error code generated by the kernel APM driver */
-unsigned int apm_last_error( int fd )
-{
-    int err = 0;
-
-#ifdef APM_IOC_LAST_ERROR
-    int ierr = 0;
-    if ( (ierr = ioctl( fd, APM_IOC_LAST_ERROR, &err)) )
-	return ierr;
-#endif
-    return err;
-}
-
-/* Define lookup table for error messages */
-typedef struct lookup_t {
-	int	key;
-	char *	msg;
-} lookup_t;
-
-/* APM error messages, arranged by error code */
-static const lookup_t error_table[] = {
-/* N/A	{ APM_SUCCESS,		"Operation succeeded" }, */
-	{ APM_DISABLED,		"Power management disabled" },
-	{ APM_CONNECTED,	"Real mode interface already connected" },
-	{ APM_NOT_CONNECTED,	"Interface not connected" },
-	{ APM_16_CONNECTED,	"16 bit interface already connected" },
-/* N/A	{ APM_16_UNSUPPORTED,	"16 bit interface not supported" }, */
-	{ APM_32_CONNECTED,	"32 bit interface already connected" },
-	{ APM_32_UNSUPPORTED,	"32 bit interface not supported" },
-	{ APM_BAD_DEVICE,	"Unrecognized device ID" },
-	{ APM_BAD_PARAM,	"Parameter out of range" },
-	{ APM_NOT_ENGAGED,	"Interface not engaged" },
-#ifdef APM_BAD_FUNCTION
-	{ APM_BAD_FUNCTION,     "Function not supported" },
-#endif
-#ifdef APM_RESUME_DISABLED
-	{ APM_RESUME_DISABLED,	"Resume timer disabled" },
-#endif
-	{ APM_BAD_STATE,	"Unable to enter requested state" },
-/* N/A	{ APM_NO_EVENTS,	"No events pending" }, */
-	{ APM_NOT_PRESENT,	"No APM present" }
-};
-#define ERROR_COUNT	(sizeof(error_table)/sizeof(lookup_t))
-
-/* Return character string describing error messages from APM kernel */
-const char *apm_error_name( unsigned int err )
-{
-  int i;
-
-  for(i=0; i<ERROR_COUNT; i++)
-    if(err == error_table[i].key) return(error_table[i].msg);
-
-  return "Unknown error";
-}
-
-int apm_reject( int fd )
-{
-#ifdef APM_IOC_REJECT
-    if ( ioctl( fd, APM_IOC_REJECT, NULL ) )
-	return apm_last_error( fd );
-    else
-#endif
-	return 0;
-}
-
-#ifdef APM_IOC_IGNORE		/* detect kernel support of IGNORE/NOIGNORE functions */
-int apm_set_ignore(int fd, int mode)
-/* Ignore Standby. */
-{
-    if (mode == IGNORE)
-    {
-	printf("Telling kernel to ignore system standby/suspend mode\n");
-	return ioctl(fd, APM_IOC_IGNORE, NULL);
-    }
-    else
-    {
-	printf("Telling kernel not to ignore system standby/suspend mode\n");
-	return ioctl(fd, APM_IOC_NOIGNORE, NULL);
-    }
-    printf("NOTE: User-generated suspend/standby requests are not ignored\n");
-}
-#endif
-
-/* Return a string describing the event. From p. 16 of the Intel/Microsoft
- * Advanded Power Management (APM) BIOS Interface Specification, Revision
- * 1.1 (September 1993). Intel Order Number: 241704-001.  Microsoft Part
- * Number: 781-110-X01.
- *
- * Updated to APM BIOS 1.2 spec (February 1996).  Available on-line.
- */
-const char *apm_event_name(apm_event_t event)
-{
-    switch (event)
-    {
-    case APM_SYS_STANDBY:
-	return "System Standby Request";
-    case APM_SYS_SUSPEND:
-	return "System Suspend Request";
-    case APM_NORMAL_RESUME:
-	return "Normal Resume System";
-    case APM_CRITICAL_RESUME:
-	return "Critical Resume System";
-    case APM_LOW_BATTERY:
-	return "Battery Low";
-    case APM_POWER_STATUS_CHANGE:
-	return "Power Status Change";
-    case APM_UPDATE_TIME:
-	return "Update Time";
-    case APM_CRITICAL_SUSPEND:
-	return "Critical Suspend";
-    case APM_USER_STANDBY:
-	return "User System Standby Request";
-    case APM_USER_SUSPEND:
-	return "User System Suspend Request";
-    case APM_STANDBY_RESUME:
-	return "System Standby Resume";
-#ifdef APM_CAPABILITY_CHANGE
-    case APM_CAPABILITY_CHANGE:
-	return "Capability Change";
-#endif
-    }
-    return "Unknown";
-}
-
-
-/* This is a convenience function that has nothing to do with APM.  It just
- * formats a time nicely.  If you don't like this format, then write your
- * own.
- */
-#define SEC_PER_DAY  (60*60*24)
-#define SEC_PER_HOUR (60*60)
-#define SEC_PER_MIN  (60)
-
-const char *apm_delta_time(time_t then, time_t now)
-{
-    return apm_time(now - then);
-}
-
-const char *apm_time(time_t t)
-{
-    static char buffer[128];
-    unsigned long s, m, h, d;
-
-    d = t / SEC_PER_DAY;
-    t -= d * SEC_PER_DAY;
-    h = t / SEC_PER_HOUR;
-    t -= h * SEC_PER_HOUR;
-    m = t / SEC_PER_MIN;
-    t -= m * SEC_PER_MIN;
-    s = t;
-
-    if (d)
-	sprintf(buffer, "%lu day%s, %02lu:%02lu:%02lu",
-		d, d > 1 ? "s" : "", h, m, s);
-    else
-	sprintf(buffer, "%02lu:%02lu:%02lu", h, m, s);
-
-    if (t == -1)
-	sprintf(buffer, "unknown");
-
-    return buffer;
-}
-
-const char *apm_time_nosec(time_t t)
-{
-    static char buffer[128];
-    unsigned long s, m, h, d;
-
-    d = t / SEC_PER_DAY;
-    t -= d * SEC_PER_DAY;
-    h = t / SEC_PER_HOUR;
-    t -= h * SEC_PER_HOUR;
-    m = t / SEC_PER_MIN;
-    t -= m * SEC_PER_MIN;
-    s = t;
-
-    if (s > 30)
-	++m;
-
-    if (d)
-	sprintf(buffer, "%lu day%s, %lu:%02lu",
-		d, d > 1 ? "s" : "", h, m);
-    else
-	sprintf(buffer, "%lu:%02lu", h, m);
-
-    if (t == -1)
-	sprintf(buffer, "unknown");
-
-    return buffer;
-}
-#endif
diff --git a/panel-plugin/libapm.h b/panel-plugin/libapm.h
deleted file mode 100644
index b9b7054..0000000
--- a/panel-plugin/libapm.h
+++ /dev/null
@@ -1,72 +0,0 @@
-/* Copyright (c) 1996, 1997 Rickard E. Faith <faith at acm.org>
- *
- * This library is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Library General Public License as published
- * by the Free Software Foundation; either version 2 of the License, or (at
- * your option) any later version.
- *
- * This library 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
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-#include <sys/types.h>
-#include <linux/apm_bios.h>
-
-#define APM_PROC   "/proc/apm"
-#define APM_DEVICE "/dev/apm_bios"
-
-#define APM_DEV  "/proc/devices"
-#define APM_NAME "apm_bios"
-
-#ifndef APM_32_BIT_SUPPORT
-#define APM_32_BIT_SUPPORT      0x0002
-#endif
-
-typedef struct apm_info
-{
-    const char driver_version[10];
-    int apm_version_major;
-    int apm_version_minor;
-    int apm_flags;
-    int ac_line_status;
-    int battery_status;
-    int battery_flags;
-    int battery_percentage;
-    int battery_time;
-    int using_minutes;
-}
-apm_info;
-
-extern int apm_exists(void);
-extern int apm_read(apm_info * i);
-extern dev_t apm_dev(void);
-extern int apm_open(void);
-extern int apm_close(int fd);
-extern int apm_get_events(int fd, int timeout, apm_event_t * events, int n);
-extern int apm_suspend(int fd);
-extern int apm_standby(int fd);
-extern int apm_set_ignore(int fd, int mode);
-extern unsigned int apm_last_error(int fd);
-extern const char *apm_error_name( unsigned int err );
-extern int apm_reject(int fd);
-extern const char *apm_event_name(apm_event_t event);
-extern const char *apm_time(time_t t);
-extern const char *apm_delta_time(time_t then, time_t now);
-extern const char *apm_time_nosec(time_t t);
-
-#define SUSPEND 0
-#define STANDBY 1
-#define IGNORE 2
-#define NOIGNORE 3
-
-/* Linux Kernel APM drivers version 1.10 and higher permit suspend
-   rejections. */
-#ifdef APM_IOC_REJECT
-#define APM_REJECT_ENABLED
-#endif

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the Xfce4-commits mailing list