generate output fitting exactly on the LCD

This commit is contained in:
marschap
2005-05-21 18:39:00 +00:00
parent cff06d9b92
commit 00c0ca9b9b
+75 -90
View File
@@ -12,22 +12,70 @@
#include "batt.h" #include "batt.h"
#include "machine.h" #include "machine.h"
static int first = TRUE;
typedef struct {
int status;
const char *name;
} NameTable;
static const char *
ac_status(int status)
{
const NameTable ac_table[] = {
{ LCDP_AC_OFF, "Off" },
{ LCDP_AC_ON, "On" },
{ LCDP_AC_BACKUP, "Backup" },
{ LCDP_AC_UNKNOWN, "Unknown" },
{ 0, NULL }
};
int i;
for (i = 0; ac_table[i].name != NULL; i++)
if (status == ac_table[i].status)
return ac_table[i].name;
return ac_table[LCDP_AC_UNKNOWN].name;
}
static const char *
battery_status(int status)
{
const NameTable batt_table[] = {
{ LCDP_BATT_HIGH, "High" },
{ LCDP_BATT_LOW, "Low" },
{ LCDP_BATT_CRITICAL, "Critical" },
{ LCDP_BATT_CHARGING, "Charging" },
{ LCDP_BATT_ABSENT, "Absent" },
{ LCDP_BATT_UNKNOWN, "Unknown" },
{ 0, NULL }
};
int i;
for (i = 0; batt_table[i].name != NULL; i++)
if (status == batt_table[i].status)
return batt_table[i].name;
return batt_table[LCDP_AC_UNKNOWN].name;
}
//////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////
// Battery Screen shows apm battery status... // Battery Screen shows apm battery status...
// //
// +--------------------+ +--------------------+
//#################### // |## Batt: 100%: an ##| |## Batt: 100%: an ##|
//## Battery: 100% ### // |AC: On | |AC, Batt: Absent |
//AC: Unknown // |Batt: Absent | +--------------------+
//Batt: Low (Charging) // |E------------------F|
//E------------------F // +--------------------+
//
int int
battery_screen (int rep, int display) battery_screen (int rep, int display)
{ {
int acstat = 0, battflag = 0, percent = 0; static int first = TRUE;
int acstat = 0, battstat = 0, percent = 0;
int gauge_wid = lcd_wid - 2;
if (first == TRUE) { if (first == TRUE) {
first = FALSE; first = FALSE;
@@ -45,113 +93,50 @@ battery_screen (int rep, int display)
sock_send_string (sock, "widget_add B gauge hbar\n"); sock_send_string (sock, "widget_add B gauge hbar\n");
sock_send_string (sock, "widget_set B one 1 2 {AC: Unknown}\n"); sock_send_string (sock, "widget_set B one 1 2 {AC: Unknown}\n");
sock_send_string (sock, "widget_set B two 1 3 {Batt: Unknown}\n"); sock_send_string (sock, "widget_set B two 1 3 {Batt: Unknown}\n");
sock_send_string (sock, "widget_set B three 1 4 {E F}\n"); sprintf(buffer, "widget_set B three 1 4 {E%*sF}\n", gauge_wid, "");
sock_send_string (sock, buffer);
sock_send_string (sock, "widget_set B gauge 2 4 0\n"); sock_send_string (sock, "widget_set B gauge 2 4 0\n");
} }
} }
// Only run once every 16 frames... // Only run once every 16 frames...
//if(rep&0x0f) return 0; //if (rep & 0x0F) return 0;
machine_get_battstat(&acstat, &battflag, &percent); machine_get_battstat(&acstat, &battstat, &percent);
if (percent >= 0) if (percent >= 0)
sprintf(tmp, "%d%%", percent); sprintf(tmp, "%d%%", percent);
else else
sprintf(tmp, "??%%"); sprintf(tmp, "??%%");
sprintf(buffer, "widget_set B title {Batt: %s: %s}\n", tmp, get_hostname()); sprintf(buffer, "widget_set B title {%s: %s}\n",
(acstat == LCDP_AC_ON && battstat == LCDP_BATT_ABSENT) ? "AC" : "Batt:",
tmp, get_hostname());
if(display) if(display)
sock_send_string (sock, buffer); sock_send_string (sock, buffer);
if(lcd_hgt >= 4) // 4-line version of the screen if(lcd_hgt >= 4) { // 4-line version of the screen
{ sprintf(buffer, "widget_set B one 1 2 {AC: %s}\n", ac_status(acstat));
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) if (display)
sock_send_string (sock, buffer); sock_send_string (sock, buffer);
strcpy(buffer, "widget_set B two 1 3 {Batt: "); sprintf(buffer, "widget_set B two 1 3 {Batt: %s}\n", battery_status(battstat));
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;
}
strcat(buffer, "}\n");
if (display) if (display)
sock_send_string(sock, buffer); sock_send_string(sock, buffer);
if(percent > 0) if (percent > 0) {
{ sprintf(buffer, "widget_set B gauge 2 4 %d\n", (percent * gauge_wid * lcd_cellwid) / 100);
sprintf(buffer, "widget_set B gauge 2 4 %d\n", (percent * ((lcd_wid - 2) * lcd_cellwid) / 100));
if(display) if(display)
sock_send_string(sock, buffer); sock_send_string(sock, buffer);
} }
} // end if(lcd_hgt >= 4) }
else // two-line version of the screen else { // two-line version of the screen
{
strcpy(buffer, "widget_set B one 1 2 {");
if (acstat == LCDP_AC_ON) if (acstat == LCDP_AC_ON)
strcat(buffer, "AC, "); sprintf(buffer, "widget_set B one 1 2 {AC, Batt: %s}\n", battery_status(battstat));
strcat(buffer, "Batt: "); else
sprintf(buffer, "widget_set B one 1 2 {Batt: %s}\n", battery_status(battstat));
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;
}
strcat(buffer, "}\n");
if (display) if (display)
sock_send_string(sock, buffer); sock_send_string(sock, buffer);
} }
return 0; return 0;
} }