overhauled CPU displays to use whole LCD

This commit is contained in:
marschap
2005-05-22 09:04:00 +00:00
parent 3771a8273e
commit 82f8f7b19d
2 changed files with 101 additions and 104 deletions
+1 -1
View File
@@ -64,7 +64,7 @@ battery_status(int status)
// Battery Screen shows apm battery status... // Battery Screen shows apm battery status...
// //
// +--------------------+ +--------------------+ // +--------------------+ +--------------------+
// |## Batt: 100%: an ##| |## Batt: 100%: an ##| // |## AC: 100%: myho #@| |## AC: 100%: myho #@|
// |AC: On | |AC, Batt: Absent | // |AC: On | |AC, Batt: Absent |
// |Batt: Absent | +--------------------+ // |Batt: Absent | +--------------------+
// |E------------------F| // |E------------------F|
+99 -102
View File
@@ -17,9 +17,31 @@
#include "cpu.h" #include "cpu.h"
/** print a percentage value to a given string */
static char *
sprintf_percent(char *str, double percent)
{
if (str == NULL)
return NULL;
if (percent > 99.9)
strcpy(str, "100%");
else
sprintf(str, "%.1f%%", (percent >= 0) ? percent : 0);
return str;
}
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
// CPU screen shows info about percentage of the CPU being used // CPU screen shows info about percentage of the CPU being used
// //
// +--------------------+ +--------------------+
// |## CPU 51.9%: myh #@| |CPU0[---- ]48.1%@|
// |Usr 46.0% Nice 0.0%| |U-- S- N I--- |
// |Sys 5.9% Idle 48.1%| +--------------------+
// |0%-------- 100%|
// +--------------------+
//
int int
cpu_screen(int rep, int display) cpu_screen(int rep, int display)
{ {
@@ -27,29 +49,35 @@ cpu_screen(int rep, int display)
#define CPU_BUF_SIZE 4 #define CPU_BUF_SIZE 4
static int first = TRUE; static int first = TRUE;
static float cpu[CPU_BUF_SIZE + 1][5]; // last buffer is scratch static float cpu[CPU_BUF_SIZE + 1][5]; // last buffer is scratch
static int gauge_wid = 0;
static int usni_wid = 0;
int i, j, n; int i, j, n;
float value; float value;
load_type load; load_type load;
if(first) if (first) {
{
first = FALSE; first = FALSE;
sock_send_string(sock, "screen_add C\n"); sock_send_string(sock, "screen_add C\n");
sprintf(buffer, "screen_set C -name {CPU Use: %s}\n", get_hostname()); sprintf(buffer, "screen_set C -name {CPU Use: %s}\n", get_hostname());
sock_send_string(sock, buffer); sock_send_string(sock, buffer);
if(lcd_hgt >= 4) if (lcd_hgt >= 4) {
{ gauge_wid = lcd_wid - 6; // room between 0%...100%
sock_send_string(sock, "widget_add C title title\n"); sock_send_string(sock, "widget_add C title title\n");
sock_send_string(sock, "widget_set C title {CPU LOAD}\n"); sock_send_string(sock, "widget_set C title {CPU LOAD}\n");
sock_send_string(sock, "widget_add C one string\n"); sock_send_string(sock, "widget_add C one string\n");
sock_send_string(sock, "widget_set C one 1 2 {0 1 Sys 0.0%}\n");
sock_send_string(sock, "widget_add C two string\n"); sock_send_string(sock, "widget_add C two string\n");
sock_send_string(sock, "widget_add C three string\n"); sock_send_string(sock, "widget_add C three string\n");
sock_send_string(sock, "widget_set C one 1 2 {Usr 0.0% Nice 0.0%}\n"); sprintf(buffer, "widget_set C one 1 2 {%-*s%-*s}\n",
sock_send_string(sock, "widget_set C two 1 3 {Sys 0.0% Idle 0.0%}\n"); lcd_wid / 2, "Usr", lcd_wid / 2, "Nice");
sock_send_string(sock, "widget_set C three 1 4 {0% 100%}\n"); sock_send_string(sock, buffer);
sprintf(buffer, "widget_set C two 1 3 {%-*s%-*s}\n",
lcd_wid / 2, "Sys", lcd_wid / 2, "Idle");
sock_send_string(sock, buffer);
sprintf(buffer, "widget_set C three 1 4 {0%%%*s100%%}\n", gauge_wid, "");
sock_send_string(sock, buffer);
sock_send_string(sock, "widget_add C usr string\n"); sock_send_string(sock, "widget_add C usr string\n");
sock_send_string(sock, "widget_add C nice string\n"); sock_send_string(sock, "widget_add C nice string\n");
sock_send_string(sock, "widget_add C idle string\n"); sock_send_string(sock, "widget_add C idle string\n");
@@ -57,18 +85,20 @@ cpu_screen(int rep, int display)
sock_send_string(sock, "widget_add C bar hbar\n"); sock_send_string(sock, "widget_add C bar hbar\n");
sock_send_string(sock, "widget_set C bar 3 4 0\n"); sock_send_string(sock, "widget_set C bar 3 4 0\n");
} }
else else {
{ usni_wid = (lcd_wid - 4)/ 4; // 4 gauges + 1 letter for each
gauge_wid = lcd_wid - 12; // room between [...]
sock_send_string(sock, "widget_add C cpu0 string\n"); sock_send_string(sock, "widget_add C cpu0 string\n");
if(lcd_wid >= 20) sprintf(buffer, "widget_set C cpu0 1 1 {CPU0[%*s]}\n", gauge_wid, "");
sock_send_string(sock, "widget_set C cpu0 1 1 {CPU0[ ]}\n"); sock_send_string(sock, buffer);
else
sock_send_string(sock, "widget_set C cpu0 1 1 {CPU0[ ]}\n");
sock_send_string(sock, "widget_add C cpu0% string\n"); sock_send_string(sock, "widget_add C cpu0% string\n");
sprintf(buffer, "widget_set C cpu0%% 1 %d { 0.0%%}\n", lcd_wid - 4); sprintf(buffer, "widget_set C cpu0%% 1 %d { 0.0%%}\n", lcd_wid - 5);
sock_send_string(sock, buffer); sock_send_string(sock, buffer);
sock_send_string(sock, "widget_add C usni string\n"); sock_send_string(sock, "widget_add C usni string\n");
sock_send_string(sock, "widget_set C usni 1 2 { U S N I}\n"); sprintf(buffer, "widget_set C usni 1 2 {U%*sS%*sN%*sI%*s}\n",
usni_wid, "", usni_wid, "", usni_wid, "", usni_wid, "");
sock_send_string(sock, buffer);
sock_send_string(sock, "widget_add C usr hbar\n"); sock_send_string(sock, "widget_add C usr hbar\n");
sock_send_string(sock, "widget_add C sys hbar\n"); sock_send_string(sock, "widget_add C sys hbar\n");
sock_send_string(sock, "widget_add C nice hbar\n"); sock_send_string(sock, "widget_add C nice hbar\n");
@@ -83,8 +113,8 @@ cpu_screen(int rep, int display)
machine_get_load(&load); machine_get_load(&load);
// Shift values over by one // Shift values over by one
for(i = 0; i < (CPU_BUF_SIZE - 1); i++) for (i = 0; i < (CPU_BUF_SIZE - 1); i++)
for(j = 0; j < 5; j++) for (j = 0; j < 5; j++)
cpu[i][j] = cpu[i + 1][j]; cpu[i][j] = cpu[i + 1][j];
// Read new data // Read new data
@@ -105,9 +135,8 @@ cpu_screen(int rep, int display)
*/ */
// Average values for final result // Average values for final result
for(i = 0; i < 5; i++) for(i = 0; i < 5; i++) {
{ value = 0.0;
value = 0;
for(j = 0; j < CPU_BUF_SIZE; j++) for(j = 0; j < CPU_BUF_SIZE; j++)
value += cpu[j][i]; value += cpu[j][i];
value /= CPU_BUF_SIZE; value /= CPU_BUF_SIZE;
@@ -117,94 +146,72 @@ cpu_screen(int rep, int display)
if(!display) if(!display)
return(0); return(0);
if(lcd_hgt >= 4) if(lcd_hgt >= 4) { // 4-line display
{ sprintf_percent(tmp, cpu[CPU_BUF_SIZE][4]);
value = cpu[CPU_BUF_SIZE][4]; sprintf(buffer, "widget_set C title {CPU %5s: %s}\n", tmp, get_hostname());
if(value >= 99.9)
sprintf(tmp, "100%%");
else
sprintf(tmp, "%4.1f%%", value);
sprintf(buffer, "widget_set C title {CPU %s: %s}\n", tmp, get_hostname());
sock_send_string(sock, buffer); sock_send_string(sock, buffer);
value = cpu[CPU_BUF_SIZE][0]; sprintf_percent(tmp, cpu[CPU_BUF_SIZE][0]);
if(value >= 99.9) sprintf(buffer, "widget_set C usr %i 2 {%5s}\n", (lcd_wid / 2) - 5, tmp);
sprintf(tmp, " 100%%");
else
sprintf(tmp, "%4.1f%%", value);
sprintf(buffer, "widget_set C usr 5 2 {%s}\n", tmp);
sock_send_string(sock, buffer); sock_send_string(sock, buffer);
value = cpu[CPU_BUF_SIZE][1]; sprintf_percent(tmp, cpu[CPU_BUF_SIZE][1]);
if(value >= 99.9) sprintf(buffer, "widget_set C sys %i 3 {%5s}\n", (lcd_wid / 2) - 5, tmp);
sprintf(tmp, " 100%%");
else
sprintf(tmp, "%4.1f%%", value);
sprintf(buffer, "widget_set C sys 5 3 {%s}\n", tmp);
sock_send_string(sock, buffer); sock_send_string(sock, buffer);
value = cpu[CPU_BUF_SIZE][2]; sprintf_percent(tmp, cpu[CPU_BUF_SIZE][2]);
if(value >= 99.9) sprintf(buffer, "widget_set C nice %i 2 {%5s}\n", lcd_wid - 4, tmp);
sprintf(tmp, " 100%%");
else
sprintf(tmp, "%4.1f%%", value);
sprintf(buffer, "widget_set C nice 16 2 {%s}\n", tmp);
sock_send_string(sock, buffer); sock_send_string(sock, buffer);
value = cpu[CPU_BUF_SIZE][3]; sprintf_percent(tmp, cpu[CPU_BUF_SIZE][3]);
if(value >= 99.9) sprintf(buffer, "widget_set C idle %i 3 {%5s}\n", lcd_wid - 4, tmp);
sprintf(tmp, " 100%%");
else
sprintf(tmp, "%4.1f%%", value);
sprintf(buffer, "widget_set C idle 16 3 {%s}\n", tmp);
sock_send_string(sock, buffer); sock_send_string(sock, buffer);
value = cpu[CPU_BUF_SIZE][4]; n = (int) ((cpu[CPU_BUF_SIZE][4] * lcd_cellwid * gauge_wid) / 100.0);
n = (int)(value * (lcd_cellwid * 14) / 100.0);
sprintf(buffer, "widget_set C bar 3 4 %d\n", n); sprintf(buffer, "widget_set C bar 3 4 %d\n", n);
sock_send_string(sock, buffer); sock_send_string(sock, buffer);
} }
else // 20x2 version else { // 2-line display
{ sprintf_percent(tmp, cpu[CPU_BUF_SIZE][4]);
value = cpu[CPU_BUF_SIZE][4]; sprintf(buffer, "widget_set C cpu0%% %d 1 {%5s}\n", lcd_wid - 5, tmp);
if(value >= 99.9)
sprintf(tmp, "100%%");
else
sprintf(tmp, "%4.1f%%", value);
sprintf(buffer, "widget_set C cpu0%% %d 1 {%s}\n", lcd_wid - 4, tmp);
sock_send_string(sock, buffer); sock_send_string(sock, buffer);
n = (float)(value * lcd_cellwid * (float) (lcd_wid - 11)) / 100.0; n = (int) ((cpu[CPU_BUF_SIZE][4] * lcd_cellwid * gauge_wid) / 100.0);
sprintf(buffer, "widget_set C total 6 1 %d\n", n); sprintf(buffer, "widget_set C total 6 1 %d\n", n);
sock_send_string(sock, buffer); sock_send_string(sock, buffer);
value = cpu[CPU_BUF_SIZE][0]; n = (int) ((cpu[CPU_BUF_SIZE][0] * lcd_cellwid * usni_wid) / 100.0);
n = (float)(value * lcd_cellwid * 4.0) / 100.0; sprintf(buffer, "widget_set C usr %d 2 %d\n", 0 * (usni_wid + 1) + 2, n);
sprintf(buffer, "widget_set C usr 1 2 %d\n", n);
sock_send_string(sock, buffer); sock_send_string(sock, buffer);
value = cpu[CPU_BUF_SIZE][1]; n = (int) ((cpu[CPU_BUF_SIZE][1] * lcd_cellwid * usni_wid) / 100.0);
n = (float)(value * lcd_cellwid * 3.0) / 100.0; sprintf(buffer, "widget_set C sys %d 2 %d\n", 1 * (usni_wid + 1) + 2, n);
sprintf(buffer, "widget_set C sys 7 2 %d\n", n);
sock_send_string(sock, buffer); sock_send_string(sock, buffer);
value = cpu[CPU_BUF_SIZE][2]; n = (int) ((cpu[CPU_BUF_SIZE][2] * lcd_cellwid * usni_wid) / 100.0);
n = (float)(value * lcd_cellwid * 3.0) / 100.0; sprintf(buffer, "widget_set C nice %d 2 %d\n", 2 * (usni_wid + 1) + 2, n);
sprintf(buffer, "widget_set C nice 12 2 %d\n", n);
sock_send_string(sock, buffer); sock_send_string(sock, buffer);
value = cpu[CPU_BUF_SIZE][3]; n = (int) ((cpu[CPU_BUF_SIZE][3] * lcd_cellwid * usni_wid) / 100.0);
n = (float)(value * lcd_cellwid * 3.0) / 100.0; sprintf(buffer, "widget_set C idle %d 2 %d\n", 3 * (usni_wid + 1) + 2, n);
sprintf(buffer, "widget_set C idle 17 2 %d\n", n);
sock_send_string(sock, buffer); sock_send_string(sock, buffer);
} }
return(0); return(0);
} // End cpu_screen() } // End cpu_screen()
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
// Cpu Graph Screen shows a quick-moving histogram of CPU use. // Cpu Graph Screen shows a quick-moving histogram of CPU use.
// //
// +--------------------+ +--------------------+
// |## CPU: myhost ####@| |CPU: myhos|| @|
// | || | | |||| |
// | ||| | +--------------------+
// | |||| |
// +--------------------+
//
int int
cpu_graph_screen(int rep, int display) cpu_graph_screen(int rep, int display)
{ {
@@ -214,31 +221,27 @@ cpu_graph_screen(int rep, int display)
static float cpu[CPU_BUF_SIZE]; static float cpu[CPU_BUF_SIZE];
static int cpu_past[LCD_MAX_WIDTH]; static int cpu_past[LCD_MAX_WIDTH];
int i, j, n = 0; int i, n = 0;
float value ; float value ;
load_type load; load_type load;
if(first) if (first) {
{
first = FALSE; first = FALSE;
sock_send_string(sock, "screen_add G\n"); sock_send_string(sock, "screen_add G\n");
sprintf(buffer, "screen_set G -name {CPU Graph: %s}\n", get_hostname()); sprintf(buffer, "screen_set G -name {CPU Graph: %s}\n", get_hostname());
sock_send_string(sock, buffer); sock_send_string(sock, buffer);
if(lcd_hgt >= 4) if(lcd_hgt >= 4) {
{
sock_send_string(sock, "widget_add G title title\n"); sock_send_string(sock, "widget_add G title title\n");
sprintf(buffer, "widget_set G title {CPU: %s}\n", get_hostname()); sprintf(buffer, "widget_set G title {CPU: %s}\n", get_hostname());
} }
else else {
{
sock_send_string(sock, "widget_add G title string\n"); sock_send_string(sock, "widget_add G title string\n");
sprintf(buffer, "widget_set G title 1 1 {CPU: %s}\n", get_hostname()); sprintf(buffer, "widget_set G title 1 1 {CPU: %s}\n", get_hostname());
} }
sock_send_string(sock, buffer); sock_send_string(sock, buffer);
for(i = 1; i <= lcd_wid; i++) for (i = 1; i <= lcd_wid; i++) {
{
sprintf(buffer, "widget_add G %d vbar\n", i); sprintf(buffer, "widget_add G %d vbar\n", i);
sock_send_string(sock, buffer); sock_send_string(sock, buffer);
sprintf(buffer, "widget_set G %d %d %d 0\n", i, i, lcd_hgt); sprintf(buffer, "widget_set G %d %d %d 0\n", i, i, lcd_hgt);
@@ -247,12 +250,12 @@ cpu_graph_screen(int rep, int display)
}; };
// Clear out CPU averaging array // Clear out CPU averaging array
for(i = 0; i < CPU_BUF_SIZE ; i++) for (i = 0; i < CPU_BUF_SIZE ; i++)
cpu[i] = 0.; cpu[i] = 0.;
} }
// Shift values over by one // Shift values over by one
for(i = 0; i < (CPU_BUF_SIZE-1); i++) for (i = 0; i < (CPU_BUF_SIZE-1); i++)
cpu[i] = cpu[i+1]; cpu[i] = cpu[i+1];
// Read and save new data // Read and save new data
@@ -260,24 +263,19 @@ cpu_graph_screen(int rep, int display)
cpu[CPU_BUF_SIZE-1] = ((float) load.user + (float) load.system + (float) load.nice) / (float) load.total; cpu[CPU_BUF_SIZE-1] = ((float) load.user + (float) load.system + (float) load.nice) / (float) load.total;
// Average values for final result // Average values for final result
value = 0; value = 0.0;
for(j = 0; j < CPU_BUF_SIZE; j++) for (i = 0; i < CPU_BUF_SIZE; i++)
value += cpu[j]; value += cpu[i];
value /= (float) CPU_BUF_SIZE; value /= CPU_BUF_SIZE;
// Scale result to available height // Scale result to available height (leave 1st line free when height > 2)
if(lcd_hgt > 2) n = (int) (value * lcd_cellhgt * ((lcd_hgt > 2) ? (lcd_hgt - 1) : lcd_hgt));
n = (int)(value * (float)(lcd_cellhgt) * (float)(lcd_hgt - 1));
else
n = (int)(value * (float)(lcd_cellhgt) * (float)(lcd_hgt));
// Shift and update display the graph // Shift and update display the graph
for(i = 0; i < lcd_wid - 1; i++) for (i = 0; i < lcd_wid - 1; i++) {
{
cpu_past[i] = cpu_past[i + 1]; cpu_past[i] = cpu_past[i + 1];
if(display) if (display) {
{
sprintf(buffer, "widget_set G %d %d %d %d\n", sprintf(buffer, "widget_set G %d %d %d %d\n",
i + 1, i + 1, lcd_hgt, cpu_past[i]); i + 1, i + 1, lcd_hgt, cpu_past[i]);
sock_send_string(sock, buffer); sock_send_string(sock, buffer);
@@ -286,8 +284,7 @@ cpu_graph_screen(int rep, int display)
// Save the newest entry and display it // Save the newest entry and display it
cpu_past[lcd_wid - 1] = n; cpu_past[lcd_wid - 1] = n;
if(display) if (display) {
{
sprintf(buffer, "widget_set G %d %d %d %d\n", lcd_wid, lcd_wid, lcd_hgt, n); sprintf(buffer, "widget_set G %d %d %d %d\n", lcd_wid, lcd_wid, lcd_hgt, n);
sock_send_string(sock, buffer); sock_send_string(sock, buffer);
} }