From 00c0ca9b9bc43b4632980e8c6c65464baf176aee Mon Sep 17 00:00:00 2001 From: marschap Date: Sat, 21 May 2005 18:39:00 +0000 Subject: [PATCH] generate output fitting exactly on the LCD --- clients/lcdproc/batt.c | 175 +++++++++++++++++++---------------------- 1 file changed, 80 insertions(+), 95 deletions(-) diff --git a/clients/lcdproc/batt.c b/clients/lcdproc/batt.c index 386c31e..6c9237b 100644 --- a/clients/lcdproc/batt.c +++ b/clients/lcdproc/batt.c @@ -12,22 +12,70 @@ #include "batt.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: 100% ### -//AC: Unknown -//Batt: Low (Charging) -//E------------------F - +// +--------------------+ +--------------------+ +// |## Batt: 100%: an ##| |## Batt: 100%: an ##| +// |AC: On | |AC, Batt: Absent | +// |Batt: Absent | +--------------------+ +// |E------------------F| +// +--------------------+ +// int 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) { 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_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 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"); } } // 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); else 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) sock_send_string (sock, buffer); - if(lcd_hgt >= 4) // 4-line version of the screen - { - 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(lcd_hgt >= 4) { // 4-line version of the screen + sprintf(buffer, "widget_set B one 1 2 {AC: %s}\n", ac_status(acstat)); + if (display) sock_send_string (sock, buffer); - strcpy(buffer, "widget_set B two 1 3 {Batt: "); - 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) + sprintf(buffer, "widget_set B two 1 3 {Batt: %s}\n", battery_status(battstat)); + if (display) sock_send_string(sock, buffer); - if(percent > 0) - { - sprintf(buffer, "widget_set B gauge 2 4 %d\n", (percent * ((lcd_wid - 2) * lcd_cellwid) / 100)); + if (percent > 0) { + sprintf(buffer, "widget_set B gauge 2 4 %d\n", (percent * gauge_wid * lcd_cellwid) / 100); if(display) sock_send_string(sock, buffer); } - } // end if(lcd_hgt >= 4) - else // two-line version of the screen - { - strcpy(buffer, "widget_set B one 1 2 {"); - if(acstat == LCDP_AC_ON) - strcat(buffer, "AC, "); - strcat(buffer, "Batt: "); - - 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) + } + else { // two-line version of the screen + if (acstat == LCDP_AC_ON) + sprintf(buffer, "widget_set B one 1 2 {AC, Batt: %s}\n", battery_status(battstat)); + else + sprintf(buffer, "widget_set B one 1 2 {Batt: %s}\n", battery_status(battstat)); + if (display) sock_send_string(sock, buffer); } return 0; } +