New lcdproc client by Thomas Runge. Works on Solaris, Linux, NetBSD, OpenBSD and FreeBSD.
This commit is contained in:
1 parent
56db57f518
commit
1372677298
30 files changed
+2921
-2275
No files matched your search
+86
-187
@@ -7,106 +7,12 @@
|
||||
|
||||
#include "shared/sockets.h"
|
||||
|
||||
#ifdef __NetBSD__
|
||||
#include <errno.h>
|
||||
#include <sys/fcntl.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <sys/stat.h>
|
||||
#include <machine/apmvar.h>
|
||||
#endif
|
||||
|
||||
#include "main.h"
|
||||
#include "mode.h"
|
||||
#include "batt.h"
|
||||
#include "machine.h"
|
||||
|
||||
int batt_fd = 0;
|
||||
|
||||
static int get_batt_stat (int *acstat, int *battstat, int *battflag, int *percent);
|
||||
|
||||
static int
|
||||
get_batt_stat (int *acstat, int *battstat, int *battflag, int *percent)
|
||||
{
|
||||
#ifdef __NetBSD__
|
||||
struct apm_power_info apmi;
|
||||
int apmd;
|
||||
|
||||
if((apmd = open("/dev/apm", O_RDONLY)) == -1)
|
||||
return -1;
|
||||
|
||||
memset(&apmi, 0, sizeof(apmi));
|
||||
if(ioctl(apmd, APM_IOC_GETPOWER, &apmi) == -1)
|
||||
{
|
||||
fprintf(stderr, "APM_IOC_GETPOWER failed in get_batt_stat(): %s\n",
|
||||
strerror(errno));
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* don't know, what the Linux counterparts exactly mean */
|
||||
switch(apmi.ac_state)
|
||||
{
|
||||
case APM_AC_OFF:
|
||||
*acstat = 0;
|
||||
break;
|
||||
case APM_AC_ON:
|
||||
*acstat = 1;
|
||||
break;
|
||||
case APM_AC_BACKUP:
|
||||
*acstat = 2;
|
||||
break;
|
||||
default:
|
||||
*acstat = apmi.ac_state;
|
||||
break;
|
||||
}
|
||||
|
||||
*battstat = 0;
|
||||
*battflag = apmi.battery_state;
|
||||
*percent = apmi.battery_life;
|
||||
|
||||
close(apmd);
|
||||
#else
|
||||
char str[64];
|
||||
|
||||
if (!batt_fd)
|
||||
batt_fd = open ("/proc/apm", O_RDONLY);
|
||||
if (batt_fd <= 0)
|
||||
return -1;
|
||||
|
||||
if (lseek (batt_fd, 0, 0) != 0)
|
||||
return -1;
|
||||
|
||||
if (read (batt_fd, str, sizeof (str) - 1) < 0)
|
||||
return -1;
|
||||
|
||||
if (3 > sscanf (str + 13, "0x%x 0x%x 0x%x %d", acstat, battstat, battflag, percent))
|
||||
return -1;
|
||||
|
||||
#endif
|
||||
return 0;
|
||||
|
||||
}
|
||||
|
||||
int
|
||||
batt_init ()
|
||||
{
|
||||
static int first = 1;
|
||||
|
||||
if (first) {
|
||||
first = 0;
|
||||
sock_send_string (sock, "screen_add B\n");
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
batt_close ()
|
||||
{
|
||||
if (batt_fd)
|
||||
close (batt_fd);
|
||||
batt_fd = 0;
|
||||
|
||||
return 0;
|
||||
}
|
||||
static int first = TRUE;
|
||||
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
// Battery Screen shows apm battery status...
|
||||
@@ -121,18 +27,17 @@ batt_close ()
|
||||
int
|
||||
battery_screen (int rep, int display)
|
||||
{
|
||||
static int first = 1;
|
||||
int acstat = 0, battflag = 0, percent = 0;
|
||||
|
||||
int acstat = 0, battstat = 0, battflag = 0, percent = 0;
|
||||
if (first == TRUE) {
|
||||
first = FALSE;
|
||||
|
||||
if (first) {
|
||||
first = 0;
|
||||
|
||||
sprintf (buffer, "screen_set B -name {APM stats: %s}\n", host);
|
||||
sock_send_string (sock, "screen_add B\n");
|
||||
sprintf (buffer, "screen_set B -name {APM stats: %s}\n", get_hostname());
|
||||
sock_send_string (sock, buffer);
|
||||
sock_send_string (sock, "widget_add B title title\n");
|
||||
sprintf (tmp, "widget_set B title {LCDPROC %s}\n", version);
|
||||
sock_send_string (sock, tmp);
|
||||
sprintf (buffer, "widget_set B title {LCDPROC %s}\n", version);
|
||||
sock_send_string (sock, buffer);
|
||||
sock_send_string (sock, "widget_add B one string\n");
|
||||
if (lcd_hgt >= 4) {
|
||||
sock_send_string (sock, "widget_add B two string\n");
|
||||
@@ -147,111 +52,105 @@ battery_screen (int rep, int display)
|
||||
// Only run once every 16 frames...
|
||||
//if(rep&0x0f) return 0;
|
||||
|
||||
get_batt_stat (&acstat, &battstat, &battflag, &percent);
|
||||
machine_get_battstat(&acstat, &battflag, &percent);
|
||||
|
||||
if (percent >= 0)
|
||||
sprintf (buffer, "%i%%", percent);
|
||||
if(percent >= 0)
|
||||
sprintf(tmp, "%d%%", percent);
|
||||
else
|
||||
sprintf (buffer, "??%%");
|
||||
sprintf (tmp, "widget_set B title {Batt: %s: %s}\n", buffer, host);
|
||||
sprintf(tmp, "??%%");
|
||||
sprintf(buffer, "widget_set B title {Batt: %s: %s}\n", tmp, get_hostname());
|
||||
if(display)
|
||||
sock_send_string (sock, buffer);
|
||||
|
||||
if (display)
|
||||
sock_send_string (sock, tmp);
|
||||
|
||||
if (lcd_hgt >= 4) // 4-line version of the screen
|
||||
if(lcd_hgt >= 4) // 4-line version of the screen
|
||||
{
|
||||
sprintf (tmp, "widget_set B one 1 2 {");
|
||||
switch (acstat) {
|
||||
case 0:
|
||||
sprintf (tmp + strlen (tmp), "AC: Off}\n");
|
||||
break;
|
||||
case 1:
|
||||
sprintf (tmp + strlen (tmp), "AC: On}\n");
|
||||
break;
|
||||
case 2:
|
||||
sprintf (tmp + strlen (tmp), "AC: Backup}\n");
|
||||
break;
|
||||
default:
|
||||
sprintf (tmp + strlen (tmp), "AC: Unknown}\n");
|
||||
break;
|
||||
strcpy(buffer, "widget_set B one 1 2 {AC: ");
|
||||
switch(acstat)
|
||||
{
|
||||
case LCDP_AC_OFF:
|
||||
strcat(buffer, "Off");
|
||||
break;
|
||||
case LCDP_AC_ON:
|
||||
strcat(buffer, "On");
|
||||
break;
|
||||
case LCDP_AC_BACKUP:
|
||||
strcat(buffer, "Backup");
|
||||
break;
|
||||
case LCDP_AC_UNKNOWN:
|
||||
default:
|
||||
strcat(buffer, "Unknown");
|
||||
break;
|
||||
}
|
||||
strcat(buffer, "}\n");
|
||||
if(display)
|
||||
sock_send_string (sock, buffer);
|
||||
|
||||
if (display)
|
||||
sock_send_string (sock, tmp);
|
||||
|
||||
sprintf (tmp, "widget_set B two 1 3 {");
|
||||
#ifdef __NetBSD__
|
||||
strcpy(buffer, "widget_set B two 1 3 {Batt: ");
|
||||
switch(battflag)
|
||||
{
|
||||
case APM_BATT_HIGH:
|
||||
sprintf (tmp + strlen (tmp), "Batt: High");
|
||||
case LCDP_BATT_HIGH:
|
||||
strcat(buffer, "High");
|
||||
break;
|
||||
case APM_BATT_LOW:
|
||||
sprintf (tmp + strlen (tmp), "Batt: Low");
|
||||
case LCDP_BATT_LOW:
|
||||
strcat(buffer, "Low");
|
||||
break;
|
||||
case APM_BATT_CRITICAL:
|
||||
sprintf (tmp + strlen (tmp), "Batt: Critical");
|
||||
case LCDP_BATT_CRITICAL:
|
||||
strcat(buffer, "Critical");
|
||||
break;
|
||||
case APM_BATT_CHARGING:
|
||||
sprintf (tmp + strlen (tmp), "Batt: Charging");
|
||||
case LCDP_BATT_CHARGING:
|
||||
strcat(buffer, "Charging");
|
||||
break;
|
||||
case APM_BATT_UNKNOWN:
|
||||
case LCDP_BATT_ABSENT:
|
||||
strcat(buffer, "Absent");
|
||||
break;
|
||||
case LCDP_BATT_UNKNOWN:
|
||||
default:
|
||||
sprintf (tmp + strlen (tmp), "Batt: Unknown");
|
||||
strcat(buffer, "Unknown");
|
||||
break;
|
||||
}
|
||||
#else
|
||||
if (battflag == 0xff) {
|
||||
sprintf (tmp + strlen (tmp), "Battery Stat Unknown");
|
||||
} else {
|
||||
sprintf (tmp + strlen (tmp), "Batt:");
|
||||
if (battflag & 1)
|
||||
sprintf (tmp + strlen (tmp), " High");
|
||||
if (battflag & 2)
|
||||
sprintf (tmp + strlen (tmp), " Low");
|
||||
if (battflag & 4)
|
||||
sprintf (tmp + strlen (tmp), " Critical");
|
||||
if (battflag & 8 || battstat == 3)
|
||||
sprintf (tmp + strlen (tmp), " Charging");
|
||||
if (battflag & 128)
|
||||
sprintf (tmp + strlen (tmp), " (NONE)");
|
||||
}
|
||||
#endif
|
||||
sprintf (tmp + strlen (tmp), "}\n");
|
||||
if (display)
|
||||
sock_send_string (sock, tmp);
|
||||
strcat(buffer, "}\n");
|
||||
if(display)
|
||||
sock_send_string(sock, buffer);
|
||||
|
||||
if (percent > 0) {
|
||||
sprintf (tmp, "widget_set B gauge 2 4 %i\n", (percent * ((lcd_wid - 2) * lcd_cellwid) / 100));
|
||||
if (display)
|
||||
sock_send_string (sock, tmp);
|
||||
if(percent > 0)
|
||||
{
|
||||
sprintf(buffer, "widget_set B gauge 2 4 %d\n", (percent * ((lcd_wid - 2) * lcd_cellwid) / 100));
|
||||
if(display)
|
||||
sock_send_string(sock, buffer);
|
||||
}
|
||||
} // end if(lcd_hgt >= 4)
|
||||
else // two-line version of the screen
|
||||
{
|
||||
sprintf (tmp, "widget_set B one 1 2 {");
|
||||
if (acstat == 1)
|
||||
sprintf (tmp + strlen (tmp), "AC, ");
|
||||
strcpy(buffer, "widget_set B one 1 2 {");
|
||||
if(acstat == LCDP_AC_ON)
|
||||
strcat(buffer, "AC, ");
|
||||
strcat(buffer, "Batt: ");
|
||||
|
||||
if (battflag == 0xff) {
|
||||
sprintf (tmp + strlen (tmp), "No battery???");
|
||||
} else {
|
||||
sprintf (tmp + strlen (tmp), "Batt:");
|
||||
if (battflag & 1)
|
||||
sprintf (tmp + strlen (tmp), " High");
|
||||
if (battflag & 2)
|
||||
sprintf (tmp + strlen (tmp), " Low");
|
||||
if (battflag & 4)
|
||||
sprintf (tmp + strlen (tmp), " Critical");
|
||||
if (battflag & 8 || battstat == 3)
|
||||
sprintf (tmp + strlen (tmp), " Charging");
|
||||
if (battflag & 128)
|
||||
sprintf (tmp + strlen (tmp), " (NONE)");
|
||||
switch(battflag)
|
||||
{
|
||||
case LCDP_BATT_HIGH:
|
||||
strcat(buffer, "High");
|
||||
break;
|
||||
case LCDP_BATT_LOW:
|
||||
strcat(buffer, "Low");
|
||||
break;
|
||||
case LCDP_BATT_CRITICAL:
|
||||
strcat(buffer, "Critical");
|
||||
break;
|
||||
case LCDP_BATT_CHARGING:
|
||||
strcat(buffer, "Charging");
|
||||
break;
|
||||
case LCDP_BATT_ABSENT:
|
||||
strcat(buffer, "Absent");
|
||||
break;
|
||||
case LCDP_BATT_UNKNOWN:
|
||||
default:
|
||||
strcat(buffer, "Unknown");
|
||||
break;
|
||||
}
|
||||
sprintf (tmp + strlen (tmp), "}\n");
|
||||
if (display)
|
||||
sock_send_string (sock, tmp);
|
||||
|
||||
sprintf(buffer, "}\n");
|
||||
if(display)
|
||||
sock_send_string(sock, buffer);
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
Reference in new issue
Block a user