dockapps/wmacpi-1.34/libapm.c

92 lines
1.8 KiB
C
Raw Normal View History

#include <stdio.h>
#include "wmacpi.h"
#ifdef APM
#ifdef PRO
extern char *state[];
#endif
extern APMInfo *apminfo;
extern int crit_level;
int power_init(void)
{
FILE *apm;
if (!(apm = fopen("/proc/apm", "r"))) {
fprintf(stderr, "This system does not support APM\n");
return 1;
}
fclose(apm);
return 0;
}
void acquire_info(void)
{
FILE *apm;
char buf[256];
char min[10];
int ac_line, batt, percent, rtime;
#ifdef PRO
/* testing */
if (!(apm = fopen("apm", "r")))
return;
#else
if (!(apm = fopen("/proc/apm", "r")))
return;
#endif
fgets(buf, 255, apm);
sscanf(buf, "%*s %*s %*s %x %x %*s %d%% %d %s",
&ac_line, &batt, &percent, &rtime, min);
eprint(0, "%02x %02x, %03d%%, %d", ac_line, batt, percent, rtime);
apminfo->percentage = percent;
apminfo->rtime = rtime;
switch (ac_line) {
case 0: /* on battery. calculate status. handle charging under AC */
switch (batt) {
case 0:
apminfo->power = HIGH;
break;
case 1:
apminfo->power = LOW;
break;
case 2:
apminfo->power = CRIT;
break;
}
/* check user-defined critical alarm */
if (apminfo->percentage <= apminfo->crit_level)
apminfo->power = CRIT;
break;
case 1: /* on AC power. Check if battery is being charged */
#ifdef RETARDED_APM
/* this is incase your battery is "charging" all the fucking time,
* even when it's actually done charging */
if ((batt == 3) && (percent != 100))
#else
if (batt == 3)
#endif
apminfo->power = CHARGING;
else
apminfo->power = POWER;
break;
#ifdef STUPID_APM
/* treatment for GAY apm bioses that show wrong time
* remaining when AC is plugged in */
apminfo->rtime = 0;
#endif
}
fclose(apm);
process_plugin_timer();
eprint(1, "current state: %s (%d)", state[apminfo->power], apminfo->power);
}
#endif /* APM */