From a7f2de2a1d1fb7b5c8b3ba277ea66f01e692dd18 Mon Sep 17 00:00:00 2001 From: reinelt <> Date: Mon, 31 Jul 2000 10:43:44 +0000 Subject: [lcd4linux @ 2000-07-31 10:43:44 by reinelt] some changes to support kernel-2.4 (different layout of various files in /proc) --- HD44780.c | 14 ++++++- configure | 107 +++++++++++++++++++++++++++++++++++++++++++------- configure.in | 4 +- lcd4linux.conf.sample | 34 ++++++++-------- processor.c | 42 +++++++++++--------- system.c | 107 +++++++++++++++++++++++++++++++++----------------- system.h | 8 +++- udelay.c | 10 +++-- 8 files changed, 235 insertions(+), 91 deletions(-) diff --git a/HD44780.c b/HD44780.c index 8ed2f19..3278ad2 100644 --- a/HD44780.c +++ b/HD44780.c @@ -1,4 +1,4 @@ -/* $Id: HD44780.c,v 1.5 2000/07/31 06:46:35 reinelt Exp $ +/* $Id: HD44780.c,v 1.6 2000/07/31 10:43:44 reinelt Exp $ * * driver for display modules based on the HD44780 chip * @@ -20,6 +20,10 @@ * * * $Log: HD44780.c,v $ + * Revision 1.6 2000/07/31 10:43:44 reinelt + * + * some changes to support kernel-2.4 (different layout of various files in /proc) + * * Revision 1.5 2000/07/31 06:46:35 reinelt * * eliminated some compiler warnings with glibc @@ -68,7 +72,15 @@ #include #include #include +#ifdef HAVE_SYS_IO_H #include +#else +#ifdef HAVE_ASM_IO_H +#include +#else +#error "neither sys/io.h nor asm/io.h found!" +#endif +#endif #include "debug.h" #include "cfg.h" diff --git a/configure b/configure index 3baaac2..62fb2a8 100755 --- a/configure +++ b/configure @@ -2234,14 +2234,54 @@ else fi done +for ac_hdr in sys/io.h asm/io.h +do +ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` +echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 +echo "configure:2242: checking for $ac_hdr" >&5 +if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:2252: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +if test -z "$ac_err"; then + rm -rf conftest* + eval "ac_cv_header_$ac_safe=yes" +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_header_$ac_safe=no" +fi +rm -f conftest* +fi +if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` + cat >> confdefs.h <&6 +fi +done + echo $ac_n "checking for pid_t""... $ac_c" 1>&6 -echo "configure:2240: checking for pid_t" >&5 +echo "configure:2280: checking for pid_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_pid_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -2269,12 +2309,12 @@ EOF fi echo $ac_n "checking whether time.h and sys/time.h may both be included""... $ac_c" 1>&6 -echo "configure:2273: checking whether time.h and sys/time.h may both be included" >&5 +echo "configure:2313: checking whether time.h and sys/time.h may both be included" >&5 if eval "test \"`echo '$''{'ac_cv_header_time'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -2283,7 +2323,7 @@ int main() { struct tm *tp; ; return 0; } EOF -if { (eval echo configure:2287: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2327: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_header_time=yes else @@ -2306,13 +2346,13 @@ fi if test $ac_cv_prog_gcc = yes; then echo $ac_n "checking whether ${CC-cc} needs -traditional""... $ac_c" 1>&6 -echo "configure:2310: checking whether ${CC-cc} needs -traditional" >&5 +echo "configure:2350: checking whether ${CC-cc} needs -traditional" >&5 if eval "test \"`echo '$''{'ac_cv_prog_gcc_traditional'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_pattern="Autoconf.*'x'" cat > conftest.$ac_ext < Autoconf TIOCGETP @@ -2330,7 +2370,7 @@ rm -f conftest* if test $ac_cv_prog_gcc_traditional = no; then cat > conftest.$ac_ext < Autoconf TCGETA @@ -2351,13 +2391,49 @@ echo "$ac_t""$ac_cv_prog_gcc_traditional" 1>&6 fi fi +echo $ac_n "checking for 8-bit clean memcmp""... $ac_c" 1>&6 +echo "configure:2396: checking for 8-bit clean memcmp" >&5 +if eval "test \"`echo '$''{'ac_cv_func_memcmp_clean'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test "$cross_compiling" = yes; then + ac_cv_func_memcmp_clean=no +else + cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +then + ac_cv_func_memcmp_clean=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + ac_cv_func_memcmp_clean=no +fi +rm -fr conftest* +fi + +fi + +echo "$ac_t""$ac_cv_func_memcmp_clean" 1>&6 +test $ac_cv_func_memcmp_clean = no && LIBOBJS="$LIBOBJS memcmp.${ac_objext}" + echo $ac_n "checking return type of signal handlers""... $ac_c" 1>&6 -echo "configure:2356: checking return type of signal handlers" >&5 +echo "configure:2432: checking return type of signal handlers" >&5 if eval "test \"`echo '$''{'ac_cv_type_signal'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -2374,7 +2450,7 @@ int main() { int i; ; return 0; } EOF -if { (eval echo configure:2378: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2454: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_type_signal=void else @@ -2392,15 +2468,15 @@ cat >> confdefs.h <&6 -echo "configure:2399: checking for $ac_func" >&5 +echo "configure:2475: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:2503: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -2614,6 +2690,7 @@ s%@X_LIBS@%$X_LIBS%g s%@X_EXTRA_LIBS@%$X_EXTRA_LIBS%g s%@WITH_X_TRUE@%$WITH_X_TRUE%g s%@WITH_X_FALSE@%$WITH_X_FALSE%g +s%@LIBOBJS@%$LIBOBJS%g CEOF EOF diff --git a/configure.in b/configure.in index fbc3775..1cf0df5 100644 --- a/configure.in +++ b/configure.in @@ -18,6 +18,7 @@ AM_CONDITIONAL(WITH_X, test x$no_x = x) dnl Checks for header files. AC_HEADER_STDC AC_CHECK_HEADERS(fcntl.h sys/ioctl.h sys/time.h unistd.h) +AC_CHECK_HEADERS(sys/io.h asm/io.h) dnl Checks for typedefs, structures, and compiler characteristics. AC_TYPE_PID_T @@ -25,7 +26,8 @@ AC_HEADER_TIME dnl Checks for library functions. AC_PROG_GCC_TRADITIONAL +AC_FUNC_MEMCMP AC_TYPE_SIGNAL -AC_CHECK_FUNCS(gettimeofday strdup strerror strstr strtol uname) +AC_CHECK_FUNCS(gettimeofday socket strdup strerror strstr strtol uname) AC_OUTPUT(Makefile) diff --git a/lcd4linux.conf.sample b/lcd4linux.conf.sample index 87400b6..fc7f232 100644 --- a/lcd4linux.conf.sample +++ b/lcd4linux.conf.sample @@ -1,12 +1,15 @@ -Display LCD2041 -Port /dev/ttyS2 -Speed 19200 -Contrast 160 +#Display LCD2041 +#Port /dev/ttyS2 +#Speed 19200 +#Contrast 160 + +Display HD44780 +Port 0x378 +Size 16x2 +Delay 398 -#Display HD44780 -#Port 0x378 -#Size 16x2 -#Delay 300 +Row1 "Disk%dm $R10dr+dw" +Row2 "Net %nm $R10nr+nw" #Display BLC100x #Port /dev/ttyS2 @@ -44,15 +47,14 @@ Contrast 160 #Row1 "*** %o %v ***" #Row2 "%p CPU %r MB RAM" #Row3 "Busy %cb%% $r10cs+cb" -#Row4 "Load %l1%L$r10l1" - -Row1 "Load %l1%L$r10cs+cb" -Row2 "Disk %dm $R10dr+dw" -Row3 "Net %nm $R10nr+nw" -#Row4 "ISDN %im $r10ii+io" -Row5 "Temp %s2°$r10s1+s2" +#Row4 "Load%l1%L$r10l1" -Row4 "DSL %tm $r10ti+to" +#Row1 "Load%l1%L$r10cs+cb" +#Row2 "Disk%dm $R10dr+dw" +#Row3 "Net %nm $R10nr+nw" +#Row4 "ISDN%im $r10ii+io" +#Row4 "DSL %tm $r10ti+to" +#Row5 "Temp%s2°$r10s1+s2" #Row1 "$u3l1$u3cb$u3cs $u3mu$u3ma$u3ms $u3dr$u3dw $u3nr$u3nw $u3ii$u3io" #Row2 " " diff --git a/processor.c b/processor.c index f77aa3d..da1c3d2 100644 --- a/processor.c +++ b/processor.c @@ -1,4 +1,4 @@ -/* $Id: processor.c,v 1.6 2000/05/21 06:20:35 reinelt Exp $ +/* $Id: processor.c,v 1.7 2000/07/31 10:43:44 reinelt Exp $ * * main data processing * @@ -20,6 +20,10 @@ * * * $Log: processor.c,v $ + * Revision 1.7 2000/07/31 10:43:44 reinelt + * + * some changes to support kernel-2.4 (different layout of various files in /proc) + * * Revision 1.6 2000/05/21 06:20:35 reinelt * * added ppp throughput @@ -87,7 +91,7 @@ struct { int total, used, free, shared, buffer, cache, avail; } ram; struct { double load1, load2, load3, overload; } load; struct { double user, nice, system, idle; } busy; struct { int read, write, total, max, peak; } disk; -struct { int rx, tx, total, max, peak; } net; +struct { int rx, tx, total, max, peak, bytes; } net; struct { int usage, in, out, total, max, peak; } isdn; struct { int rx, tx, total, max, peak; } ppp; struct { double val, min, max; } sensor[SENSORS]; @@ -292,13 +296,12 @@ static void print_token (int token, char **p) case T_SENSOR_8: case T_SENSOR_9: val=query(token); - if (val<10.0) { - *p+=sprintf (*p, "%4.2f", val); - } else if (val<100.0) { - *p+=sprintf (*p, "%4.1f", val); - } else { - *p+=sprintf (*p, "%4.0f", val); - } + if (val<10.0) + *p+=sprintf (*p, "%5.2f", val); + else if (val<100.0) + *p+=sprintf (*p, "%5.1f", val); + else + *p+=sprintf (*p, "%5.0f", val); break; case T_CPU_USER: case T_CPU_NICE: @@ -307,23 +310,26 @@ static void print_token (int token, char **p) case T_CPU_IDLE: *p+=sprintf (*p, "%3.0f", 100.0*query(token)); break; + case T_ETH_RX: + case T_ETH_TX: + case T_ETH_MAX: + case T_ETH_TOTAL: + val=query(token); + if (net.bytes) + val/=1024.0; + *p+=sprintf (*p, "%5.0f", val); + break; case T_ISDN_IN: case T_ISDN_OUT: case T_ISDN_MAX: case T_ISDN_TOTAL: if (isdn.usage) - *p+=sprintf (*p, "%4.0f", query(token)); + *p+=sprintf (*p, "%5.0f", query(token)); else *p+=sprintf (*p, "----"); break; - case T_PPP_RX: - case T_PPP_TX: - case T_PPP_MAX: - case T_PPP_TOTAL: - *p+=sprintf (*p, "%5.0f", query(token)); - break; default: - *p+=sprintf (*p, "%4.0f", query(token)); + *p+=sprintf (*p, "%5.0f", query(token)); } } @@ -353,7 +359,7 @@ static void collect_data (void) } if (token_usage[C_ETH]) { - Net (&net.rx, &net.tx); + Net (&net.rx, &net.tx, &net.bytes); net.total=net.rx+net.tx; net.max=net.rx>net.tx?net.rx:net.tx; if (net.max>net.peak) net.peak=net.max; diff --git a/system.c b/system.c index 5d9f3d3..246b634 100644 --- a/system.c +++ b/system.c @@ -1,4 +1,4 @@ -/* $Id: system.c,v 1.12 2000/05/21 06:20:35 reinelt Exp $ +/* $Id: system.c,v 1.13 2000/07/31 10:43:44 reinelt Exp $ * * system status retreivement * @@ -20,6 +20,10 @@ * * * $Log: system.c,v $ + * Revision 1.13 2000/07/31 10:43:44 reinelt + * + * some changes to support kernel-2.4 (different layout of various files in /proc) + * * Revision 1.12 2000/05/21 06:20:35 reinelt * * added ppp throughput @@ -108,11 +112,13 @@ * returns 0 if ok, -1 on error * * int Disk (int *r, int *w); - * sets number of read and write accesses to all disks + * sets number of blocks read and written from/to all disks * returns 0 if ok, -1 on error * - * int Net (int *rx, int *tx); - * sets number of packets received and transmitted + * int Net (int *rx, int *tx, int *bytes); + * sets number of packets or bytes received and transmitted + * *bytes ist set to 0 if rx/tx are packets + * *bytes ist set to 1 if rx/tx are bytes * returns 0 if ok, -1 on error * * int PPP (int unit, int *rx, int *tx); @@ -455,8 +461,6 @@ int Disk (int *r, int *w) { char buffer[4096], *p; static int fd=-2; - unsigned long r1, r2, r3, r4; - unsigned long w1, w2, w3, w4; *r=0; *w=0; @@ -482,36 +486,59 @@ int Disk (int *r, int *w) fd=-1; return -1; } - p=strstr(buffer, "disk_rblk"); - if (p==NULL) { - fprintf (stderr, "parse(/proc/stat) failed: no 'disk_rblk' line\n"); - fd=-1; - 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 -1; - } - p=strstr(buffer, "disk_wblk"); - if (p==NULL) { - fprintf (stderr, "parse(/proc/stat) failed: no 'disk_wblk' line\n"); - fd=-1; - 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 -1; + + p=strstr(buffer, "disk_io:"); + if (p!=NULL) { + int n; + unsigned long rblk, wblk; + unsigned long rsum, wsum; + p+=8; + rsum=0; + wsum=0; + while (sscanf(p, " (%*u,%*u):(%*u,%lu,%*u,%lu)%n", &rblk, &wblk, &n)==2) { + rsum+=rblk; + wsum+=wblk; + p+=n; + } + // assume that we got the number of sectors and a sector size of 512 bytes + // to get te number in kilobytes/sec, we calculate as follows: + // kb=blocks*512/1024, which is blocks/2 + *r=smooth ("disk_r", 500, rsum/2); + *w=smooth ("disk_w", 500, wsum/2); + + } else { + unsigned long r1, r2, r3, r4; + unsigned long w1, w2, w3, w4; + p=strstr(buffer, "disk_rblk"); + if (p==NULL) { + fprintf (stderr, "parse(/proc/stat) failed: no 'disk_rblk' line\n"); + fd=-1; + 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 -1; + } + p=strstr(buffer, "disk_wblk"); + if (p==NULL) { + fprintf (stderr, "parse(/proc/stat) failed: no 'disk_wblk' line\n"); + fd=-1; + 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 -1; + } + *r=smooth ("disk_r", 500, r1+r2+r3+r4); + *w=smooth ("disk_w", 500, w1+w2+w3+w4); } - *r=smooth ("disk_r", 500, r1+r2+r3+r4); - *w=smooth ("disk_w", 500, w1+w2+w3+w4); - return 0; } -int Net (int *rx, int *tx) +int Net (int *rx, int *tx, int *bytes) { char buffer[4096], *p, *s; static int fd=-2; @@ -519,6 +546,7 @@ int Net (int *rx, int *tx) *rx=0; *tx=0; + *bytes=0; if (fd==-1) return -1; @@ -548,15 +576,24 @@ int Net (int *rx, int *tx) p=buffer; while ((s=strsep(&p, "\n"))) { unsigned long r, t; - if (sscanf (s, " eth%*d:%*d: %ld %*d %*d %*d %*d %ld", &r, &t)==2 || - sscanf (s, " eth%*d: %ld %*d %*d %*d %*d %ld", &r, &t)==2) { + + if (sscanf (s, " eth%*d:%ld %*d %*d %*d %*d %*d %*d %*d %ld %*d %*d %*d %*d %*d %*d %*d", &r, &t)==2) { pkg_rx+=r; pkg_tx+=t; - } + *bytes=1; + } else { + if (sscanf (s, " eth%*d:%*d: %ld %*d %*d %*d %*d %ld %*d %*d %*d %*d %*d", &r, &t)==2 || + sscanf (s, " eth%*d:%ld %*d %*d %*d %*d %ld %*d %*d %*d %*d %*d", &r, &t)==2) { + pkg_rx+=r; + pkg_tx+=t; + *bytes=0; + } + } } + *rx=smooth("net_rx", 500, pkg_rx); *tx=smooth("net_tx", 500, pkg_tx); - + return 0; } diff --git a/system.h b/system.h index d8870f9..90b48f3 100644 --- a/system.h +++ b/system.h @@ -1,4 +1,4 @@ -/* $Id: system.h,v 1.7 2000/05/21 06:20:35 reinelt Exp $ +/* $Id: system.h,v 1.8 2000/07/31 10:43:44 reinelt Exp $ * * system status retreivement * @@ -20,6 +20,10 @@ * * * $Log: system.h,v $ + * Revision 1.8 2000/07/31 10:43:44 reinelt + * + * some changes to support kernel-2.4 (different layout of various files in /proc) + * * Revision 1.7 2000/05/21 06:20:35 reinelt * * added ppp throughput @@ -65,7 +69,7 @@ int Ram (int *total, int *free, int *shared, int *buffered, int *cached); 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 Net (int *rx, int *tx, int *bytes); int PPP (int unit, int *rx, int *tx); int Sensor (int index, double *val, double *min, double *max); diff --git a/udelay.c b/udelay.c index 8bb25ab..7b0aa34 100644 --- a/udelay.c +++ b/udelay.c @@ -1,4 +1,4 @@ -/* $Id: udelay.c,v 1.1 2000/04/15 16:56:52 reinelt Exp $ +/* $Id: udelay.c,v 1.2 2000/07/31 10:43:44 reinelt Exp $ * * short delays * @@ -20,6 +20,10 @@ * * * $Log: udelay.c,v $ + * Revision 1.2 2000/07/31 10:43:44 reinelt + * + * some changes to support kernel-2.4 (different layout of various files in /proc) + * * Revision 1.1 2000/04/15 16:56:52 reinelt * * moved delay loops to udelay.c @@ -80,7 +84,7 @@ void udelay_calibrate (void) tick=clock(); while (clock()==tick); tick=clock(); - udelay(1000000/CLOCKS_PER_SEC); + udelay(1000000/CLK_TCK); if (clock()>tick) break; } @@ -92,7 +96,7 @@ void udelay_calibrate (void) tick=clock(); while (clock()==tick); tick=clock(); - udelay(1000000/CLOCKS_PER_SEC); + udelay(1000000/CLK_TCK); if (clock()>tick) loops_per_usec&=~bit; } -- cgit v1.2.3