generate output fitting exactly on the LCD
This commit is contained in:
+75
-90
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user