diff options
-rw-r--r-- | Makefile | 3 | ||||
-rw-r--r-- | config.c | 8 | ||||
-rw-r--r-- | isdn.c | 24 | ||||
-rw-r--r-- | isdn.h | 8 | ||||
-rw-r--r-- | lcd4linux.conf.sample | 17 | ||||
-rw-r--r-- | lcd4linux.h | 1 | ||||
-rw-r--r-- | system.c | 264 | ||||
-rw-r--r-- | system.h | 18 |
8 files changed, 246 insertions, 97 deletions
@@ -2,6 +2,9 @@ CC=gcc -m486 -g -Wall -I. -DVERSION=\"V0.5\" all: lcd4linux +system: system.c system.h config.c config.h filter.c filter.h + ${CC} -DSTANDALONE -lm -o system system.c config.c filter.c + #lcd4linux: lcd4linux.c config.c lcd2041.c system.c isdn.c filter.c Makefile # ${CC} -lm -o lcd4linux lcd4linux.c config.c lcd2041.c system.c isdn.c filter.c @@ -1,4 +1,4 @@ -/* $Id: config.c,v 1.2 2000/03/06 06:04:06 reinelt Exp $ +/* $Id: config.c,v 1.3 2000/03/07 11:01:34 reinelt Exp $ * * config file stuff * @@ -20,6 +20,10 @@ * * * $Log: config.c,v $ + * Revision 1.3 2000/03/07 11:01:34 reinelt + * + * system.c cleanup + * * Revision 1.2 2000/03/06 06:04:06 reinelt * * minor cleanups @@ -149,7 +153,7 @@ int cfg_read (char *file) *s='\0'; p++; } - set_cfg (line, p); + cfg_set (line, p); } fclose (stream); return 0; @@ -1,4 +1,4 @@ -/* $Id: isdn.c,v 1.2 2000/03/06 06:04:06 reinelt Exp $ +/* $Id: isdn.c,v 1.3 2000/03/07 11:01:34 reinelt Exp $ * * ISDN specific functions * @@ -20,6 +20,10 @@ * * * $Log: isdn.c,v $ + * Revision 1.3 2000/03/07 11:01:34 reinelt + * + * system.c cleanup + * * Revision 1.2 2000/03/06 06:04:06 reinelt * * minor cleanups @@ -30,8 +34,9 @@ /* * exported functions: * - * Isdn (int *rx, int *tx) - * returns all channel's USAGE or'ed together + * Isdn (int *usage, int *rx, int *tx) + * returns 0 if ok, -1 if error + * sets *usage to all channels USAGE or'ed together * sets received/transmitted bytes in *rx, *tx * */ @@ -93,33 +98,33 @@ static int Usage (void) for (i=0; i<ISDN_MAX_CHANNELS; i++) { usage|=strtol(p, &p, 10); } - return usage; } -int Isdn (int *rx, int *tx) +int Isdn (int *usage, int *rx, int *tx) { static int fd=-2; CPS cps[ISDN_MAX_CHANNELS]; double cps_i, cps_o; int i; + *usage=0; *rx=0; *tx=0; - if (fd==-1) return 0; + if (fd==-1) return -1; if (fd==-2) { fd = open("/dev/isdninfo", O_RDONLY | O_NDELAY); if (fd==-1) { perror ("open(/dev/isdninfo) failed"); - return 0; + return -1; } } if (ioctl(fd, IIOCGETCPS, &cps)) { perror("ioctl(IIOCGETCPS) failed"); fd=-1; - return 0; + return -1; } cps_i=0; cps_o=0; @@ -130,7 +135,8 @@ int Isdn (int *rx, int *tx) *rx=(int)smooth("isdn_rx", 1000, cps_i); *tx=(int)smooth("isdn_tx", 1000, cps_o); + *usage=Usage(); - return Usage(); + return 0; } @@ -1,4 +1,4 @@ -/* $Id: isdn.h,v 1.2 2000/03/06 06:04:06 reinelt Exp $ +/* $Id: isdn.h,v 1.3 2000/03/07 11:01:34 reinelt Exp $ * * ISDN specific functions * @@ -20,6 +20,10 @@ * * * $Log: isdn.h,v $ + * Revision 1.3 2000/03/07 11:01:34 reinelt + * + * system.c cleanup + * * Revision 1.2 2000/03/06 06:04:06 reinelt * * minor cleanups @@ -30,6 +34,6 @@ #ifndef _ISDN_H_ #define _ISDN_H_ -int Isdn (int *rx, int *tx); +int Isdn (int *usage, int *rx, int *tx); #endif diff --git a/lcd4linux.conf.sample b/lcd4linux.conf.sample new file mode 100644 index 0000000..956119e --- /dev/null +++ b/lcd4linux.conf.sample @@ -0,0 +1,17 @@ +#Row1 "%p%t\337$h10rt" +Row1 "Busy %b%% $h5rb$h5rl" +Row2 "Disk%D%dm $H5rdr$H5rdw" +Row3 "Netz%N%nm $H5rnr$H5rnw" +Row4 "ISDN%I%im $h5rio$h5rii" + +Port /dev/ttyS2 +Fifo /var/run/lcd4linux +Tick 100 +Tack 400 +Tau 500 +Contrast 160 +Overload 2.0 + +Sensor1 /proc/sys/dev/sensors/w83781d-isa-0290/temp2 +Sensor1_min 30 +Sensor1_max 50 diff --git a/lcd4linux.h b/lcd4linux.h index ec9da8c..e69de29 100644 --- a/lcd4linux.h +++ b/lcd4linux.h @@ -1 +0,0 @@ -extern char *sensor; @@ -1,4 +1,4 @@ -/* $Id: system.c,v 1.2 2000/03/06 06:04:06 reinelt Exp $ +/* $Id: system.c,v 1.3 2000/03/07 11:01:34 reinelt Exp $ * * system status retreivement * @@ -20,6 +20,10 @@ * * * $Log: system.c,v $ + * Revision 1.3 2000/03/07 11:01:34 reinelt + * + * system.c cleanup + * * Revision 1.2 2000/03/06 06:04:06 reinelt * * minor cleanups @@ -42,22 +46,27 @@ * int Memory (void); * returns main memory (Megabytes) * - * double Load (void); - * returns load average + * int Load (double *load1, double *load2, double *load3) + * sets load average during thwe last 1, 5 and 15 minutes + * retuns 0 if ok, -1 on error * - * double Busy (void); - * returns CPU utilization + * int Busy (double *user, double *nice, double *system, double *idle) + * sets percentage of CPU time spent in user processes, nice'd processes + * system calls and idle state + * returns 0 if ok, -1 on error * * int Disk (int *r, int *w); - * returns disk utilization + * sets number of read and write accesses to all disks + * returns 0 if ok, -1 on error * - * int Net (int *r, int *w); - * returns network utilization + * int Net (int *rx, int *tx); + * sets number of packets received and transmitted + * returns 0 if ok, -1 on error * - * double Temperature (void); - * returns temperature - * a sensor must be specified with a 'temperature'-line - * in the config file + * int Sensor (int index, double *val, double *min, double *max) + * sets the current value of the index'th sensor and + * the minimum and maximum values from the config file + * returns 0 if ok, -1 on error * */ @@ -74,8 +83,8 @@ #include <asm/param.h> #include "system.h" +#include "config.h" #include "filter.h" -#include "lcd4linux.h" char *System(void) { @@ -144,83 +153,105 @@ int Memory(void) } -double Load (void) +int Load (double *load1, double *load2, double *load3) { static int fd=-2; char buffer[16]; - static double value=0; + static double val1=0; + static double val2=0; + static double val3=0; static time_t now=0; - if (fd==-1) return 0; + *load1=val1; + *load2=val2; + *load3=val3; + + if (fd==-1) return -1; - if (time(NULL)==now) return value; + if (time(NULL)==now) return 0; time(&now); if (fd==-2) { fd=open("/proc/loadavg", O_RDONLY); if (fd==-1) { perror ("open(/proc/loadavg) failed"); - return 0; + return -1; } } if (lseek(fd, 0L, SEEK_SET)!=0) { perror("lseek(/proc/loadavg) failed"); fd=-1; - return 0; + return -1; } if (read (fd, &buffer, sizeof(buffer)-1)==-1) { perror("read(/proc/loadavg) failed"); fd=-1; - return 0; + return -1; } - if (sscanf(buffer, "%lf", &value)<1) { + if (sscanf(buffer, "%lf %lf %lf", &val1, &val2, &val3)<3) { fprintf(stderr, "scanf(/proc/loadavg) failed\n"); fd=-1; - return 0; + return -1; } - return (value); + + *load1=val1; + *load2=val2; + *load3=val3; + + return 0; } -double Busy (void) +int Busy (double *user, double *nice, double *system, double *idle) { static int fd=-2; char buffer[64]; unsigned long v1, v2, v3, v4; - double busy, idle; + double d1, d2, d3, d4, d5; + + *user=0.0; + *nice=0.0; + *system=0.0; + *idle=0.0; - if (fd==-1) return 0; + if (fd==-1) return -1; if (fd==-2) { fd=open("/proc/stat", O_RDONLY); if (fd==-1) { perror ("open(proc/stat) failed"); - return 0; + return -1; } } if (lseek(fd, 0L, SEEK_SET)!=0) { perror ("lseek(/proc/stat) failed"); fd=-1; - return 0; + return -1; } if (read (fd, &buffer, sizeof(buffer)-1)==-1) { perror ("read(/proc/stat) failed"); fd=-1; - return 0; + return -1; } if (sscanf(buffer, "%*s %lu %lu %lu %lu\n", &v1, &v2, &v3, &v4)<4) { fprintf (stderr, "scanf(/proc/stat) failed\n"); fd=-1; - return 0; + return -1; } - busy=smooth("cpu_busy", 500, v1+v2+v3); - idle=smooth("cpu_idle", 500, v4); - - if (busy+idle==0.0) - return 0.0; - else - return busy/(busy+idle); + d1=smooth("cpu_user", 500, v1); + d2=smooth("cpu_nice", 500, v2); + d3=smooth("cpu_sys", 500, v3); + d4=smooth("cpu_idle", 500, v4); + d5=d1+d2+d3+d4; + + if (d5!=0.0) { + *user=(d1+d2)/d5; + *nice=d2/d5; + *system=d3/d5; + *idle=d4/d5; + } + return 0; } @@ -234,53 +265,53 @@ int Disk (int *r, int *w) *r=0; *w=0; - if (fd==-1) return 0; + if (fd==-1) return -1; if (fd==-2) { fd = open("/proc/stat", O_RDONLY | O_NDELAY); if (fd==-1) { perror ("open(/proc/stat) failed"); - return 0; + return -1; } } if (lseek(fd, 0L, SEEK_SET)!=0) { perror ("lseek(/proc/stat) failed"); fd=-1; - return 0; + return -1; } if (read (fd, &buffer, sizeof(buffer)-1)==-1) { perror ("read(/proc/stat) failed"); fd=-1; - return 0; + return -1; } p=strstr(buffer, "disk_rblk"); if (p==NULL) { fprintf (stderr, "parse(/proc/stat) failed: no disk_rblk line\n"); fd=-1; - return 0; + return -1; } if (sscanf(p+9, "%lu %lu %lu %lu\n", &r1, &r2, &r3, &r4)<4) { fprintf (stderr, "scanf(/proc/stat) failed\n"); fd=-1; - return 0; + return -1; } p=strstr(buffer, "disk_wblk"); if (p==NULL) { fprintf (stderr, "parse(/proc/stat) failed: no disk_wblk line\n"); fd=-1; - return 0; + return -1; } if (sscanf(p+9, "%lu %lu %lu %lu\n", &w1, &w2, &w3, &w4)<4) { fprintf (stderr, "scanf(/proc/stat) failed\n"); fd=-1; - return 0; + return -1; } *r=smooth ("disk_r", 500, r1+r2+r3+r4); *w=smooth ("disk_w", 500, w1+w2+w3+w4); - return *r+*w; + return 0; } @@ -293,25 +324,25 @@ int Net (int *rx, int *tx) *rx=0; *tx=0; - if (fd==-1) return 0; + if (fd==-1) return -1; if (fd==-2) { fd = open("/proc/net/dev", O_RDONLY | O_NDELAY); if (fd==-1) { perror ("open(/proc/net/dev) failed"); - return 0; + return -1; } } if (lseek(fd, 0L, SEEK_SET)!=0) { perror ("lseek(/proc/net/dev) failed"); fd=-1; - return 0; + return -1; } if (read (fd, &buffer, sizeof(buffer)-1)==-1) { perror ("read(/proc/net/dev) failed"); fd=-1; - return 0; + return -1; } pkg_rx=0; pkg_tx=0; @@ -327,43 +358,122 @@ int Net (int *rx, int *tx) *rx=smooth("net_rx", 500, pkg_rx); *tx=smooth("net_tx", 500, pkg_tx); - return *rx+*tx; + return 0; } -double Temperature (void) +int Sensor (int index, double *val, double *min, double *max) { - static int fd=-2; char buffer[32]; - static double value=0.0; - static time_t now=0; - - if (fd==-1) return 0; - - if (time(NULL)==now) return value; - time(&now); + double value; + static int fd[SENSORS]={[0 ... SENSORS]=-2,}; + static char *sensor[SENSORS]={NULL,}; + static double val_buf[SENSORS]={0.0,}; + static double min_buf[SENSORS]={0.0,}; + static double max_buf[SENSORS]={0.0,}; + static time_t now[SENSORS]={0,}; + + if (index<0 || index>=SENSORS) return -1; + + *val=val_buf[index]; + *min=min_buf[index]; + *max=max_buf[index]; + + if (fd[index]==-1) return -1; + + if (time(NULL)==now[index]) return 0; + time(&now[index]); + + if (fd[index]==-2) { + snprintf(buffer, 32, "Sensor%d", index); + sensor[index]=cfg_get(buffer); + if (sensor[index]==NULL || *sensor[index]=='\0') { + fprintf (stderr, "%s: no entry for '%s'\n", cfg_file(), buffer); + fd[index]=-1; + return -1; + } - if (fd==-2) { - fd=open(sensor, O_RDONLY); - if (fd==-1) { - fprintf (stderr, "open (%s) failed: %s\n", sensor, strerror(errno)); - return 0; + snprintf(buffer, 32, "Sensor%d_min", index); + min_buf[index]=atof(cfg_get(buffer)); + snprintf(buffer, 32, "Sensor%d_max", index); + max_buf[index]=atof(cfg_get(buffer)); + if (max_buf[index]==0.0) max_buf[index]=100.0; + + fd[index]=open(sensor[index], O_RDONLY); + if (fd[index]==-1) { + fprintf (stderr, "open (%s) failed: %s\n", sensor[index], strerror(errno)); + return -1; } } - if (lseek(fd, 0L, SEEK_SET)!=0) { - fprintf (stderr, "lseek(%s) failed: %s\n", sensor, strerror(errno)); - fd=-1; - return 0; + if (lseek(fd[index], 0L, SEEK_SET)!=0) { + fprintf (stderr, "lseek(%s) failed: %s\n", sensor[index], strerror(errno)); + fd[index]=-1; + return -1; } - if (read (fd, &buffer, sizeof(buffer)-1)==-1) { - fprintf (stderr, "read(%s) failed: %s\n", sensor, strerror(errno)); - fd=-1; - return 0; + if (read (fd[index], &buffer, sizeof(buffer)-1)==-1) { + fprintf (stderr, "read(%s) failed: %s\n", sensor[index], strerror(errno)); + fd[index]=-1; + return -1; } if (sscanf(buffer, "%*f %*f %lf", &value)<1) { - fprintf (stderr, "scanf(%s) failed\n", sensor); - fd=-1; - return 0; + fprintf (stderr, "scanf(%s) failed\n", sensor[index]); + fd[index]=-1; + return -1; } - return (value); + val_buf[index]=value; + *val=value; + return 0; } + + +#ifdef STANDALONE + +int tick, tack, tau; + +void main (void) +{ + char *cfg_file="./lcd4linux.conf.sample"; + double load1, load2, load3; + double user, nice, system, idle; + int r, w; + int rx, tx; + double val, min, max; + + if (cfg_read (cfg_file)==-1) + exit (1); + + tick=atoi(cfg_get("tick")); + tack=atoi(cfg_get("tack")); + tau=atoi(cfg_get("tau")); + + printf ("System : %s\n", System()); + printf ("Release : %s\n", Release ()); + printf ("Processor : %s\n", Processor ()); + printf ("Memory : %d MB\n", Memory ()); + + while (1) { + + Load (&load1, &load2, &load3); + printf ("Load : %f %f %f\n", load1, load2, load3); + + Busy (&user, &nice, &system, &idle); + printf ("Busy : %f %f %f %f\n", user, nice, system, idle); + + Disk (&r, &w); + printf ("Disk : %d %d\n", r, w); + + Net (&rx, &tx); + printf ("Net : %d %d\n", rx, tx); + + Sensor (1, &val, &min, &max); + printf ("Sensor 1 : %f %f %f\n", val, min, max); + + Sensor (2, &val, &min, &max); + printf ("Sensor 2 : %f %f %f\n", val, min, max); + + usleep(tack*1000); + } + +} + +#endif @@ -1,4 +1,4 @@ -/* $Id: system.h,v 1.2 2000/03/06 06:04:06 reinelt Exp $ +/* $Id: system.h,v 1.3 2000/03/07 11:01:34 reinelt Exp $ * * system status retreivement * @@ -20,6 +20,10 @@ * * * $Log: system.h,v $ + * Revision 1.3 2000/03/07 11:01:34 reinelt + * + * system.c cleanup + * * Revision 1.2 2000/03/06 06:04:06 reinelt * * minor cleanups @@ -30,14 +34,16 @@ #ifndef _SYSTEM_H_ #define _SYSTEM_H_ +#define SENSORS 16 + char *System (void); char *Release (void); char *Processor (void); int Memory (void); -double Load (void); -double Busy (void); -int Disk (int *r, int *w); -int Net (int *r, int *w); -double Temperature (void); +int Load (double *load1, double *load2, double *load3); +int Busy (double *user, double *nice, double *system, double *idle); +int Disk (int *r, int *w); +int Net (int *rx, int *tx); +int Sensor (int index, double *val, double *min, double *max); #endif |