diff options
Diffstat (limited to '')
| -rw-r--r-- | Makefile.am | 2 | ||||
| -rw-r--r-- | Makefile.in | 8 | ||||
| -rw-r--r-- | Raster.c | 509 | ||||
| -rwxr-xr-x | configure | 17 | ||||
| -rw-r--r-- | drivers.m4 | 18 | ||||
| -rw-r--r-- | drv.c | 17 | ||||
| -rw-r--r-- | drv_Crystalfontz.c | 9 | ||||
| -rw-r--r-- | drv_X11.c | 201 | ||||
| -rw-r--r-- | lcd4linux.conf.sample | 16 | 
9 files changed, 81 insertions, 716 deletions
| diff --git a/Makefile.am b/Makefile.am index badf184..6c10ccd 100644 --- a/Makefile.am +++ b/Makefile.am @@ -61,13 +61,13 @@ BeckmannEgle.c              \  drv_Crystalfontz.c          \  drv_Cwlinux.c               \  drv_HD44780.c               \ +drv_Image.c                 \  drv_M50530.c                \  drv_T6963.c                 \  drv_USBLCD.c                \  drv_MatrixOrbital.c         \  MilfordInstruments.c        \  PalmPilot.c                 \ -Raster.c                    \  drv_X11.c                   \  Text.c                      \  font_6x8.h                  \ diff --git a/Makefile.in b/Makefile.in index 2a7bbfb..7f23768 100644 --- a/Makefile.in +++ b/Makefile.in @@ -101,7 +101,7 @@ lcd4linux_SOURCES =  lcd4linux.c                 cfg.c         cfg.h         deb  #liblcd4linux_la_SOURCES = -EXTRA_lcd4linux_SOURCES =  drv_generic_text.c          drv_generic_text.h          drv_generic_graphic.c       drv_generic_graphic.h       drv_generic_serial.c        drv_generic_serial.h        drv_generic_parport.c       drv_generic_parport.h       BeckmannEgle.c              drv_Crystalfontz.c          drv_Cwlinux.c               drv_HD44780.c               drv_M50530.c                drv_T6963.c                 drv_USBLCD.c                drv_MatrixOrbital.c         MilfordInstruments.c        PalmPilot.c                 Raster.c                    drv_X11.c                   Text.c                      font_6x8.h                                              plugin_apm.c                plugin_cpuinfo.c            plugin_dvb.c                plugin_exec.c               plugin_i2c_sensors.c        plugin_imon.c               plugin_isdn.c               plugin_loadavg.c            plugin_meminfo.c            plugin_mysql.c              plugin_netdev.c             plugin_pop3.c               plugin_ppp.c                plugin_proc_stat.c          plugin_seti.c               plugin_uname.c              plugin_uptime.c             plugin_wireless.c           plugin_xmms.c +EXTRA_lcd4linux_SOURCES =  drv_generic_text.c          drv_generic_text.h          drv_generic_graphic.c       drv_generic_graphic.h       drv_generic_serial.c        drv_generic_serial.h        drv_generic_parport.c       drv_generic_parport.h       BeckmannEgle.c              drv_Crystalfontz.c          drv_Cwlinux.c               drv_HD44780.c               drv_Image.c                 drv_M50530.c                drv_T6963.c                 drv_USBLCD.c                drv_MatrixOrbital.c         MilfordInstruments.c        PalmPilot.c                 drv_X11.c                   Text.c                      font_6x8.h                                              plugin_apm.c                plugin_cpuinfo.c            plugin_dvb.c                plugin_exec.c               plugin_i2c_sensors.c        plugin_imon.c               plugin_isdn.c               plugin_loadavg.c            plugin_meminfo.c            plugin_mysql.c              plugin_netdev.c             plugin_pop3.c               plugin_ppp.c                plugin_proc_stat.c          plugin_seti.c               plugin_uname.c              plugin_uptime.c             plugin_wireless.c           plugin_xmms.c  EXTRA_DIST =  lcd4linux.conf.sample       lcd4kde.conf                lcd4linux.kdelnk            lcd4linux.xpm               lcd4linux.lsm               curses.m4                   AUTHORS                     CREDITS                     FAQ                         NEWS                        TODO                        README                      README.Rows                 README.Tokens               README.Drivers              README.Plugins              README.KDE                  plugin_sample.c @@ -140,9 +140,9 @@ DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)  TAR = tar  GZIP_ENV = --best  DEP_FILES =  .deps/BeckmannEgle.P .deps/MilfordInstruments.P \ -.deps/PalmPilot.P .deps/Raster.P .deps/Text.P .deps/cfg.P .deps/debug.P \ -.deps/drv.P .deps/drv_Crystalfontz.P .deps/drv_Cwlinux.P \ -.deps/drv_HD44780.P .deps/drv_M50530.P .deps/drv_MatrixOrbital.P \ +.deps/PalmPilot.P .deps/Text.P .deps/cfg.P .deps/debug.P .deps/drv.P \ +.deps/drv_Crystalfontz.P .deps/drv_Cwlinux.P .deps/drv_HD44780.P \ +.deps/drv_Image.P .deps/drv_M50530.P .deps/drv_MatrixOrbital.P \  .deps/drv_T6963.P .deps/drv_USBLCD.P .deps/drv_X11.P \  .deps/drv_generic_graphic.P .deps/drv_generic_parport.P \  .deps/drv_generic_serial.P .deps/drv_generic_text.P .deps/evaluator.P \ diff --git a/Raster.c b/Raster.c deleted file mode 100644 index 0bf1b91..0000000 --- a/Raster.c +++ /dev/null @@ -1,509 +0,0 @@ -/* $Id: Raster.c,v 1.31 2004/03/03 03:47:04 reinelt Exp $ - * - * driver for raster formats - * - * Copyright 1999, 2000 Michael Reinelt <reinelt@eunet.at> - * - * This file is part of LCD4Linux. - * - * LCD4Linux is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * LCD4Linux is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * - * $Log: Raster.c,v $ - * Revision 1.31  2004/03/03 03:47:04  reinelt - * big patch from Martin Hejl: - * - use qprintf() where appropriate - * - save CPU cycles on gettimeofday() - * - add quit() functions to free allocated memory - * - fixed lots of memory leaks - * - * Revision 1.30  2004/01/30 20:57:55  reinelt - * HD44780 patch from Martin Hejl - * dmalloc integrated - * - * Revision 1.29  2004/01/09 04:16:06  reinelt - * added 'section' argument to cfg_get(), but NULLed it on all calls by now. - * - * Revision 1.28  2003/10/05 17:58:50  reinelt - * libtool junk; copyright messages cleaned up - * - * Revision 1.27  2003/09/10 14:01:52  reinelt - * icons nearly finished\! - * - * Revision 1.26  2003/09/09 06:54:43  reinelt - * new function 'cfg_number()' - * - * Revision 1.25  2003/08/24 05:17:58  reinelt - * liblcd4linux patch from Patrick Schemitz - * - * Revision 1.24  2003/08/17 12:11:58  reinelt - * framework for icons prepared - * - * Revision 1.23  2003/07/29 04:56:13  reinelt - * disable Raster driver automagically if gd.h not found - * - * Revision 1.22  2003/07/24 04:48:09  reinelt - * 'soft clear' needed for virtual rows - * - * Revision 1.21  2003/02/22 07:53:10  reinelt - * cfg_get(key,defval) - * - * Revision 1.20  2002/08/19 04:41:20  reinelt - * introduced bar.c, moved bar stuff from display.h to bar.h - * - * Revision 1.19  2001/09/10 13:55:53  reinelt - * M50530 driver - * - * Revision 1.18  2001/03/16 16:40:17  ltoetsch - * implemented time bar - * - * Revision 1.17  2001/03/12 12:39:36  reinelt - * - * reworked autoconf a lot: drivers may be excluded, #define's went to config.h - * - * Revision 1.16  2001/03/02 17:18:52  reinelt - * - * let configure find gd.h - * - * Revision 1.15  2001/03/02 10:18:03  ltoetsch - * added /proc/apm battery stat - * - * Revision 1.14  2001/03/01 22:33:50  reinelt - * - * renamed Raster_flush() to PPM_flush() - * - * Revision 1.13  2001/03/01 15:11:30  ltoetsch - * added PNG,Webinterface - * - * Revision 1.12  2001/03/01 11:08:16  reinelt - * - * reworked configure to allow selection of drivers - * - * Revision 1.11  2001/02/13 09:00:13  reinelt - * - * prepared framework for GPO's (general purpose outputs) - * - * Revision 1.10  2000/08/10 09:44:09  reinelt - * - * new debugging scheme: error(), info(), debug() - * uses syslog if in daemon mode - * - * Revision 1.9  2000/04/03 04:01:31  reinelt - * - * if 'gap' is specified as -1, a gap of (pixelsize+pixelgap) is selected automatically - * - * Revision 1.8  2000/03/28 07:22:15  reinelt - * - * version 0.95 released - * X11 driver up and running - * minor bugs fixed - * - * Revision 1.7  2000/03/26 20:00:44  reinelt - * - * README.Raster added - * - * Revision 1.6  2000/03/26 19:03:52  reinelt - * - * more Pixmap renaming - * quoting of '#' in config file - * - * Revision 1.5  2000/03/26 18:46:28  reinelt - * - * bug in pixmap.c that leaded to empty bars fixed - * name conflicts with X11 resolved - * - * Revision 1.4  2000/03/26 12:55:03  reinelt - * - * enhancements to the PPM driver - * - * Revision 1.3  2000/03/25 05:50:43  reinelt - * - * memory leak in Raster_flush closed - * driver family logic changed - * - * Revision 1.2  2000/03/24 11:36:56  reinelt - * - * new syntax for raster configuration - * changed XRES and YRES to be configurable - * PPM driver works nice - * - * Revision 1.1  2000/03/23 07:24:48  reinelt - * - * PPM driver up and running (but slow!) - * - */ - -/*  - * - * exported fuctions: - * - * struct LCD Raster[] - * - */ - -#include "config.h" - -#include <stdlib.h> -#include <stdio.h> -#include <string.h> -#include <unistd.h> -#include <errno.h> -#include <fcntl.h> -#include <sys/types.h> -#include <sys/stat.h> -#ifdef WITH_PNG -#ifdef HAVE_GD_GD_H -#include <gd/gd.h> -#else -#ifdef HAVE_GD_H -#include <gd.h> -#else -#error "gd.h not found!" -#error "cannot compile PNG driver" -#endif -#endif -#endif - -#include "debug.h" -#include "cfg.h" -#include "display.h" -#include "bar.h" -#include "icon.h" -#include "pixmap.h" - -#ifdef WITH_DMALLOC -#include <dmalloc.h> -#endif - -static LCD Lcd; - -static int pixel=-1; -static int pgap=0; -static int rgap=0; -static int cgap=0; -static int border=0; -static int icons; - -static unsigned int foreground=0; -static unsigned int halfground=0; -static unsigned int background=0; - - -#ifdef WITH_PPM -int PPM_flush (void) -{ -  static int seq=0; -  static unsigned char *bitbuf=NULL; -  static unsigned char *rowbuf=NULL; -  int xsize, ysize, row, col; -  unsigned char R[3], G[3], B[3]; -  char path[256], tmp[256], buffer[256]; -  int fd; - -  xsize=2*border+(Lcd.cols-1)*cgap+Lcd.cols*Lcd.xres*pixel+(Lcd.cols*Lcd.xres-1)*pgap; -  ysize=2*border+(Lcd.rows-1)*rgap+Lcd.rows*Lcd.yres*pixel+(Lcd.rows*Lcd.yres-1)*pgap; -   -  if (bitbuf==NULL) { -    if ((bitbuf=malloc(xsize*ysize*sizeof(*bitbuf)))==NULL) { -      error ("Raster: malloc(%d) failed: %s", xsize*ysize*sizeof(*bitbuf), strerror(errno)); -      return -1; -    } -  } -   -  if (rowbuf==NULL) { -    if ((rowbuf=malloc(3*xsize*sizeof(*rowbuf)))==NULL) { -      error ("Raster: malloc(%d) failed: %s", 3*xsize*sizeof(*rowbuf), strerror(errno)); -      return -1; -    } -  } -   -  memset (bitbuf, 0, xsize*ysize*sizeof(*bitbuf)); -   -  for (row=0; row<Lcd.rows*Lcd.yres; row++) { -    int y=border+(row/Lcd.yres)*rgap+row*(pixel+pgap); -    for (col=0; col<Lcd.cols*Lcd.xres; col++) { -      int x=border+(col/Lcd.xres)*cgap+col*(pixel+pgap); -      int a, b; -      for (a=0; a<pixel; a++) -	for (b=0; b<pixel; b++) -	  bitbuf[y*xsize+x+a*xsize+b]=LCDpixmap[row*Lcd.cols*Lcd.xres+col]+1; -    } -  } -   -  snprintf (path, sizeof(path), output, seq++); -  qprintf(tmp, sizeof(tmp), "%s.tmp", path); -   -  if ((fd=open(tmp, O_WRONLY | O_CREAT | O_TRUNC, 0644))<0) { -    error ("Raster: open(%s) failed: %s", tmp, strerror(errno)); -    return -1; -  } -   -  qprintf(buffer, sizeof(buffer), "P6\n%d %d\n255\n", xsize, ysize); -  if (write (fd, buffer, strlen(buffer))<0) { -    error ("Raster: write(%s) failed: %s", tmp, strerror(errno)); -    return -1; -  } -   -  R[0]=0xff&background>>16; -  G[0]=0xff&background>>8; -  B[0]=0xff&background; -   -  R[1]=0xff&halfground>>16; -  G[1]=0xff&halfground>>8; -  B[1]=0xff&halfground; -   -  R[2]=0xff&foreground>>16; -  G[2]=0xff&foreground>>8; -  B[2]=0xff&foreground; - -  for (row=0; row<ysize; row++) { -    int c=0; -    for (col=0; col<xsize; col++) { -      int i=bitbuf[row*xsize+col]; -      rowbuf[c++]=R[i]; -      rowbuf[c++]=G[i]; -      rowbuf[c++]=B[i]; -    } -    if (write (fd, rowbuf, c)<0) { -      error ("Raster: write(%s) failed: %s", tmp, strerror(errno)); -      return -1; -    } -  } -   -  if (close (fd)<0) { -    error ("Raster: close(%s) failed: %s", tmp, strerror(errno)); -    return -1; -  } -  if (rename (tmp, path)<0) { -    error ("Raster: rename(%s) failed: %s", tmp, strerror(errno)); -    return -1; -  } -   -  return 0; -} -#endif - -#ifdef WITH_PNG -int PNG_flush (void) -{ -  static int seq=0; -  int xsize, ysize, row, col; -  char path[256], tmp[256]; -  FILE *fp; -  gdImagePtr im; -  int bg, hg, fg; -   -  xsize=2*border+(Lcd.cols-1)*cgap+Lcd.cols*Lcd.xres*pixel+(Lcd.cols*Lcd.xres-1)*pgap; -  ysize=2*border+(Lcd.rows-1)*rgap+Lcd.rows*Lcd.yres*pixel+(Lcd.rows*Lcd.yres-1)*pgap; - -  im = gdImageCreate(xsize, ysize); -  /* first color = background */ -  bg = gdImageColorAllocate(im,  -			    0xff&background>>16, -			    0xff&background>>8, -                            0xff&background); -  hg = gdImageColorAllocate(im,  -			    0xff&halfground>>16, -			    0xff&halfground>>8, -                            0xff&halfground); -   -  fg = gdImageColorAllocate(im,  -			    0xff&foreground>>16, -			    0xff&foreground>>8, -                            0xff&foreground); -   -   -  for (row=0; row<Lcd.rows*Lcd.yres; row++) { -    int y=border+(row/Lcd.yres)*rgap+row*(pixel+pgap); -    for (col=0; col<Lcd.cols*Lcd.xres; col++) { -      int x=border+(col/Lcd.xres)*cgap+col*(pixel+pgap); -      gdImageFilledRectangle(im, x, y, x + pixel - 1 , y + pixel - 1, -			     LCDpixmap[row*Lcd.cols*Lcd.xres+col]? fg : hg); -    } -  } -   -  snprintf (path, sizeof(path), output, seq++); -  qprintf(tmp, sizeof(tmp), "%s.tmp", path); -   -  if ((fp=fopen(tmp, "w")) == NULL) { -    error("Png: fopen(%s) failed: %s\n", tmp, strerror(errno)); -    return -1; -  } -  gdImagePng(im, fp); -  gdImageDestroy(im); -   -   -  if (fclose (fp) != 0) { -    error("Png: fclose(%s) failed: %s\n", tmp, strerror(errno)); -    return -1; -  } -  if (rename (tmp, path)<0) { -    error("Png: rename(%s) failed: %s\n", tmp, strerror(errno)); -    return -1; -  } -   -  return 0; -} -#endif - - -int Raster_clear (int full) -{ -  if (pix_clear()!=0)  -    return -1; - -  return 0; -} - -int Raster_init (LCD *Self) -{ -  char *s; -  int rows=-1, cols=-1; -  int xres=1, yres=-1; -   -  if (output==NULL || *output=='\0') { -    error ("Raster: no output file specified (use -o switch)"); -    return -1; -  } -     -  if (sscanf(s=cfg_get(NULL, "size", "20x4"), "%dx%d", &cols, &rows)!=2 || rows<1 || cols<1) { -    error ("Raster: bad size '%s'", s); -    return -1; -    free(s); -  } -  free(s); - -  if (sscanf(s=cfg_get(NULL, "font", "5x8"), "%dx%d", &xres, &yres)!=2 || xres<5 || yres<7) { -    error ("Raster: bad font '%s'", s); -    return -1; -    free(s); -  } -  free(s); - -  if (sscanf(s=cfg_get(NULL, "pixel", "4+1"), "%d+%d", &pixel, &pgap)!=2 || pixel<1 || pgap<0) { -    error ("Raster: bad pixel '%s'", s); -    return -1; -    free(s); -  } -  free(s); - -  if (sscanf(s=cfg_get(NULL, "gap", "3x3"), "%dx%d", &cgap, &rgap)!=2 || cgap<-1 || rgap<-1) { -    error ("Raster: bad gap '%s'", s); -    return -1; -    free(s); -  } -  free(s); -   -  if (rgap<0) rgap=pixel+pgap; -  if (cgap<0) cgap=pixel+pgap; - -  if (cfg_number(NULL, "border", 0, 0, 1000000, &border)<0) return -1; - -  if (sscanf(s=cfg_get(NULL, "foreground", "#102000"), "#%x", &foreground)!=1) { -    error ("Raster: bad foreground color '%s'", s); -    return -1; -    free(s); -  } -  free(s); -   -  if (sscanf(s=cfg_get(NULL, "halfground", "#70c000"), "#%x", &halfground)!=1) { -    error ("Raster: bad halfground color '%s'", s); -    return -1; -    free(s); -  } -  free(s); -   -  if (sscanf(s=cfg_get(NULL, "background", "#80d000"), "#%x", &background)!=1) { -    error ("Raster: bad background color '%s'", s); -    return -1; -    free(s); -  } -  free(s); - -  if (pix_init (rows, cols, xres, yres)!=0) { -    error ("Raster: pix_init(%d, %d, %d, %d) failed", rows, cols, xres, yres); -    return -1; -  } - -  if (cfg_number(NULL, "Icons", 0, 0, 8, &icons) < 0) return -1; -  if (icons>0) { -    info ("allocating %d icons", icons); -    icon_init(rows, cols, xres, yres, 8, icons, pix_icon); -  } - -  Self->rows=rows; -  Self->cols=cols; -  Self->xres=xres; -  Self->yres=yres; -  Self->icons=icons; -  Lcd=*Self; - -  pix_clear(); -  return 0; -} - -int Raster_put (int row, int col, char *text) -{ -  return pix_put (row, col, text); -} - -int Raster_bar (int type, int row, int col, int max, int len1, int len2) -{ -  return pix_bar (type, row, col, max, len1, len2); -} - -int Raster_icon (int num, int seq, int row, int col) -{ -  return icon_draw (num, seq, row, col); -} - - -LCD Raster[] = { -#ifdef WITH_PPM   -  { name: "PPM", -    rows:  0, -    cols:  0, -    xres:  0, -    yres:  0, -    bars:  BAR_L | BAR_R | BAR_U | BAR_D | BAR_H2 | BAR_V2 | BAR_T, -    icons: 0, -    gpos:  0, -    init:  Raster_init, -    clear: Raster_clear, -    put:   Raster_put, -    bar:   Raster_bar, -    icon:  Raster_icon, -    gpo:   NULL, -    flush: PPM_flush }, -#endif -#ifdef WITH_PNG -  { name: "PNG", -    rows:  0, -    cols:  0, -    xres:  0, -    yres:  0, -    bars:  BAR_L | BAR_R | BAR_U | BAR_D | BAR_H2 | BAR_V2 | BAR_T, -    icons: 0, -    gpos:  0, -    init:  Raster_init, -    clear: Raster_clear, -    put:   Raster_put, -    bar:   Raster_bar, -    icon:  Raster_icon, -    gpo:   NULL, -    flush: PNG_flush }, -#endif -  { NULL } -}; @@ -5482,6 +5482,7 @@ PARPORT="no"  SERIAL="no"  TEXT="no"  GRAPHIC="no" +IMAGE="no"  if test "$BECKMANNEGLE" = "yes"; then  #  DRIVERS="$DRIVERS BeckmannEgle.lo" @@ -5616,6 +5617,7 @@ fi  if test "$PNG" = "yes"; then     if test "$has_gd" = "true"; then        GRAPHIC="yes" +      IMAGE="yes"  cat >>confdefs.h <<\_ACEOF  #define WITH_PNG 1 @@ -5629,17 +5631,18 @@ echo "$as_me: WARNING: gd.h not found: PNG driver disabled" >&2;}  fi  if test "$PPM" = "yes"; then -   if test "$has_gd" = "true"; then -      GRAPHIC="yes" +   GRAPHIC="yes" +   IMAGE="yes"  cat >>confdefs.h <<\_ACEOF  #define WITH_PPM 1  _ACEOF -   else -      { echo "$as_me:$LINENO: WARNING: gd.h not found: PNG driver disabled" >&5 -echo "$as_me: WARNING: gd.h not found: PNG driver disabled" >&2;} -   fi +fi + +if test "$IMAGE" = "yes"; then +#  DRIVERS="$DRIVERS drv_Image.lo" +   DRIVERS="$DRIVERS drv_Image.o"  fi  if test "$X11" = "yes"; then @@ -5674,7 +5677,7 @@ fi  # generic graphic driver  if test "$GRAPHIC" = "yes"; then  : -#  DRIVERS="$DRIVERS +#  DRIVERS="$DRIVERS drv_generic_graphic.lo"     DRIVERS="$DRIVERS drv_generic_graphic.o"  fi @@ -101,6 +101,7 @@ PARPORT="no"  SERIAL="no"  TEXT="no"  GRAPHIC="no" +IMAGE="no"  if test "$BECKMANNEGLE" = "yes"; then  #  DRIVERS="$DRIVERS BeckmannEgle.lo" @@ -190,6 +191,7 @@ fi  if test "$PNG" = "yes"; then     if test "$has_gd" = "true"; then        GRAPHIC="yes" +      IMAGE="yes"        AC_DEFINE(WITH_PNG,1,[ driver])        DRVLIBS="$DRVLIBS -lgd"     else @@ -198,12 +200,14 @@ if test "$PNG" = "yes"; then  fi  if test "$PPM" = "yes"; then -   if test "$has_gd" = "true"; then -      GRAPHIC="yes" -      AC_DEFINE(WITH_PPM,1,[ driver]) -   else -      AC_MSG_WARN(gd.h not found: PNG driver disabled) -   fi +   GRAPHIC="yes" +   IMAGE="yes" +   AC_DEFINE(WITH_PPM,1,[ driver]) +fi + +if test "$IMAGE" = "yes"; then +#  DRIVERS="$DRIVERS drv_Image.lo" +   DRIVERS="$DRIVERS drv_Image.o"  fi  if test "$X11" = "yes"; then @@ -231,7 +235,7 @@ fi  # generic graphic driver  if test "$GRAPHIC" = "yes"; then  : -#  DRIVERS="$DRIVERS  +#  DRIVERS="$DRIVERS drv_generic_graphic.lo"     DRIVERS="$DRIVERS drv_generic_graphic.o"  fi @@ -1,4 +1,4 @@ -/* $Id: drv.c,v 1.9 2004/02/24 05:55:04 reinelt Exp $ +/* $Id: drv.c,v 1.10 2004/05/25 14:26:29 reinelt Exp $   *   * new framework for display drivers   * @@ -23,6 +23,11 @@   *   *   * $Log: drv.c,v $ + * Revision 1.10  2004/05/25 14:26:29  reinelt + * + * added "Image" driver (was: Raster.c) for PPM and PNG creation + * fixed some glitches in the X11 driver + *   * Revision 1.9  2004/02/24 05:55:04  reinelt   *   * X11 driver ported @@ -112,17 +117,17 @@ extern DRIVER drv_BeckmannEgle;  extern DRIVER drv_Crystalfontz;  extern DRIVER drv_Cwlinux;  extern DRIVER drv_HD44780; +extern DRIVER drv_Image;  extern DRIVER drv_M50530;  extern DRIVER drv_T6963;  extern DRIVER drv_USBLCD;  extern DRIVER drv_MatrixOrbital;  extern DRIVER drv_MilfordInstruments;  extern DRIVER drv_PalmPilot; -extern DRIVER drv_Raster;  extern DRIVER drv_X11;  extern DRIVER drv_Text; -// output file for Raster driver +// output file for Image driver  // has to be defined here because it's referenced  // even if the raster driver is not included!  char *output=NULL; @@ -145,6 +150,9 @@ DRIVER *Driver[] = {  #ifdef WITH_HD44780    &drv_HD44780,  #endif +#if defined (WITH_PNG) || defined(WITH_PPM) +  &drv_Image, +#endif  #ifdef WITH_M50530    &drv_M50530,  #endif @@ -164,9 +172,6 @@ DRIVER *Driver[] = {       #ifdef WITH_PALMPILOT       &PalmPilot,       #endif -     #if defined (WITH_PNG) || defined(WITH_PPM) -     &Raster, -     #endif    */  #ifdef WITH_X11    &drv_X11, diff --git a/drv_Crystalfontz.c b/drv_Crystalfontz.c index 164141e..26b897c 100644 --- a/drv_Crystalfontz.c +++ b/drv_Crystalfontz.c @@ -1,4 +1,4 @@ -/* $Id: drv_Crystalfontz.c,v 1.14 2004/03/19 09:17:46 reinelt Exp $ +/* $Id: drv_Crystalfontz.c,v 1.15 2004/05/25 14:26:29 reinelt Exp $   *   * new style driver for Crystalfontz display modules   * @@ -23,6 +23,11 @@   *   *   * $Log: drv_Crystalfontz.c,v $ + * Revision 1.15  2004/05/25 14:26:29  reinelt + * + * added "Image" driver (was: Raster.c) for PPM and PNG creation + * fixed some glitches in the X11 driver + *   * Revision 1.14  2004/03/19 09:17:46  reinelt   *   * removed the extra 'goto' function, row and col are additional parameters @@ -695,7 +700,7 @@ static int drv_CF_start (char *section)    Protocol = Models[Model].protocol;    // regularly process display answers -  // Fixme: make 20msec configurable +  // Fixme: make 100msec configurable    timer_add (drv_CF_timer, NULL, 100, 0);    switch (Protocol) { @@ -1,4 +1,4 @@ -/* $Id: drv_X11.c,v 1.1 2004/02/24 05:55:04 reinelt Exp $ +/* $Id: drv_X11.c,v 1.2 2004/05/25 14:26:29 reinelt Exp $   *   * new style X11 Driver for LCD4Linux    * @@ -26,6 +26,11 @@   *   *   * $Log: drv_X11.c,v $ + * Revision 1.2  2004/05/25 14:26:29  reinelt + * + * added "Image" driver (was: Raster.c) for PPM and PNG creation + * fixed some glitches in the X11 driver + *   * Revision 1.1  2004/02/24 05:55:04  reinelt   *   * X11 driver ported @@ -57,7 +62,6 @@  #include "debug.h"  #include "cfg.h"  #include "timer.h" -#include "udelay.h"  #include "plugin.h"  #include "widget.h"  #include "widget_text.h" @@ -94,21 +98,6 @@ static XColor fg_xc, bg_xc, hg_xc;  static Pixmap pm; -#if 0 -static LCD Lcd; - -static unsigned char *LCDpixmap2; -static int DROWS=-1,DCOLS=-1;		/*DROWS+DCOLS without background*/ -static int XRES=-1,YRES=-1;		/*XRES+YRES (same as self->...)*/ -static int icons;                       /* number of user-defined icons */ -static int async_update();		/*PROTO*/ -static pid_t async_updater_pid=1; -static int semid=-1; -static int shmid=-1; -static int ppid;			/*parent pid*/ - -#endif -  // ****************************************  // ***  hardware dependant functions    ***  // **************************************** @@ -190,32 +179,41 @@ static int drv_X11_start (char *section)    // read display size from config    if (sscanf(s=cfg_get(section, "Size", "120x32"), "%dx%d", &DCOLS, &DROWS)!=2 || DCOLS<1 || DROWS<1) { -    error ("%s: bad Size '%s' from %s", Name, s, cfg_source()); +    error ("%s: bad %s.Size '%s' from %s", Name, section, s, cfg_source()); +    free(s);      return -1;    } +  free(s);    if (sscanf(s=cfg_get(section, "font", "5x8"), "%dx%d", &XRES, &YRES)!=2 || XRES<1|| YRES<1) { -    error ("%s: bad font '%s' from %s", Name, s, cfg_source()); +    error ("%s: bad %s.font '%s' from %s", Name, section, s, cfg_source()); +    free(s);      return -1;    } +  free(s);    if (sscanf(s=cfg_get(section, "pixel", "4+1"), "%d+%d", &pixel, &pgap)!=2 || pixel<1 || pgap<0) { -    error ("%s: bad pixel '%s' from %s", Name, s, cfg_source()); +    error ("%s: bad %s.pixel '%s' from %s", Name, section, s, cfg_source()); +    free(s);      return -1;    } +  free(s);    if (sscanf(s=cfg_get(section, "gap", "-1x-1"), "%dx%d", &cgap, &rgap)!=2 || cgap<-1 || rgap<-1) { -    error ("%s: bad gap '%s' from %s", Name, s, cfg_source()); +    error ("%s: bad %s.gap '%s' from %s", Name, section, s, cfg_source()); +    free(s);      return -1;    } +  free(s); +    if (rgap<0) rgap=pixel+pgap;    if (cgap<0) cgap=pixel+pgap;    if (cfg_number(section, "border", 0, 0, 1000000, &border)<0) return -1; -  fg_col=cfg_get(section, "foreground", "#000000"); -  bg_col=cfg_get(section, "background", "#80d000"); -  hg_col=cfg_get(section, "halfground", "#70c000"); +  fg_col = cfg_get(section, "foreground", "#000000"); +  bg_col = cfg_get(section, "background", "#80d000"); +  hg_col = cfg_get(section, "halfground", "#70c000");    if (*fg_col=='\\') fg_col++;    if (*bg_col=='\\') bg_col++;    if (*hg_col=='\\') hg_col++; @@ -307,161 +305,6 @@ static int drv_X11_start (char *section)  } -#if 0 -static int init_x(int rows,int cols,int XRES,int YRES)  -{ -  return 0; -} - - -int xlcdinit(LCD *Self)  -{ -  char *s; - -  if (sscanf(s=cfg_get(NULL, "size", "20x4"),"%dx%d",&DCOLS,&DROWS)!=2 -      || DROWS<1 || DCOLS<1) { -    error ("X11: bad size '%s'",s); -    return -1; -  } -  if (sscanf(s=cfg_get(NULL, "font", "5x8"),"%dx%d",&XRES,&YRES)!=2 -      || XRES<5 || YRES>10) { -    error ("X11: bad font '%s'",s); -    return -1; -  } -  if (sscanf(s=cfg_get(NULL, "pixel", "4+1"),"%d+%d",&pixel,&pgap)!=2 -      || pixel<1 || pgap<0) { -    error ("X11: bad pixel '%s'",s); -    return -1; -  } -  if (sscanf(s=cfg_get(NULL, "gap", "-1x-1"),"%dx%d",&cgap,&rgap)!=2 -      || cgap<-1 || rgap<-1) { -    error ("X11: bad gap '%s'",s); -    return -1; -  } -  if (rgap<0) rgap=pixel+pgap; -  if (cgap<0) cgap=pixel+pgap; - -  if (cfg_number(NULL, "border", 0, 0, 1000000, &border)<0) return -1; - -  fg_col=cfg_get(NULL, "foreground", "#000000"); -  bg_col=cfg_get(NULL, "background", "#80d000"); -  hg_col=cfg_get(NULL, "halfground", "#70c000"); -  if (*fg_col=='\\') fg_col++; -  if (*bg_col=='\\') bg_col++; -  if (*hg_col=='\\') hg_col++; - -  if (pix_init(DROWS,DCOLS,XRES,YRES)==-1) return -1; - -  if (cfg_number(NULL, "Icons", 0, 0, 8, &icons) < 0) return -1; -  if (icons>0) { -    info ("allocating %d icons", icons); -    icon_init(DROWS, DCOLS, XRES, YRES, 8, icons, pix_icon); -  } -   -  if (init_x(DROWS,DCOLS,XRES,YRES)==-1) return -1; -  init_signals(); -  if (init_shm(DROWS*DCOLS*XRES*YRES,&LCDpixmap2)==-1) return -1; -  memset(LCDpixmap2,0xff,DROWS*YRES*DCOLS*XRES); -  if (init_thread(DROWS*DCOLS*XRES*YRES)==-1) return -1; -  Self->DROWS=DROWS; -  Self->DCOLS=DCOLS; -  Self->XRES=XRES; -  Self->YRES=YRES; -  Self->icons=icons; -  Lcd=*Self; - -  pix_clear(); -  return 0; -} - - -int xlcdflush() { -  int dirty; -  int row,col; -   -  acquire_lock(); -  dirty=0; -  for(row=0;row<DROWS*YRES;row++) { -    int y=border+(row/YRES)*rgap+row*(pixel+pgap); -    for(col=0;col<DCOLS*XRES;col++) { -      int x=border+(col/XRES)*cgap+col*(pixel+pgap); -      int p=row*DCOLS*XRES+col; -      if (LCDpixmap[p]^LCDpixmap2[p]) { -	XFillRectangle(dp,w,LCDpixmap[p]?fg_gc:hg_gc,x,y,pixel,pixel); -	LCDpixmap2[p]=LCDpixmap[p]; -	dirty=1; -      } -    } -  } -  if (dirty) XSync(dp,False); -  release_lock(); -  return 0; -} - - -/* - * this one should only be called from the updater-thread - * no user serviceable parts inside - */ - -static void update(int x,int y,int width,int height) -{ -  /* -   * theory of operation: -   * instead of the old, fully-featured but complicated update -   * region calculation, we do an update of the whole display, -   * but check before every pixel if the pixel region is inside -   * the update region. -   */ - -  int x0, y0; -  int x1, y1; -  int row, col; -  int dirty; -   -  x0=x-pixel; -  y0=y-pixel; -  x1=x+pixel+width; -  y1=y+pixel+height; -   -  dirty=0; -  for(row=0; row<DROWS; row++) { -    int y = border + (row/YRES)*rgap + row*(pixel+pgap); -    if (y<y0 || y>y1) continue; -    for(col=0; col<DCOLS; col++) { -      int x = border + (col/XRES)*cgap + col*(pixel+pgap); -      int p; -      if (x<x0 || x>x1) continue; -      p=row*DCOLS*XRES+col; -      XFillRectangle(dp,w,LCDpixmap2[p]?fg_gc:hg_gc,x,y,pixel,pixel); -      dirty=1; -    } -  } -  if (dirty) XSync(dp,False); -} - - -static int async_update()  -{ -  XSetWindowAttributes wa; -  XEvent ev; - -  if ((dp=XOpenDisplay(NULL))==NULL) -    return -1; -  wa.event_mask=ExposureMask; -  XChangeWindowAttributes(dp,w,CWEventMask,&wa); -  for(;;) { -    XWindowEvent(dp,w,ExposureMask,&ev); -    if (ev.type==Expose) { -      acquire_lock(); -      update(ev.xexpose.x,ev.xexpose.y, -	     ev.xexpose.width,ev.xexpose.height); -      release_lock(); -    } -  } -} -#endif -  // ****************************************  // ***            plugins               *** diff --git a/lcd4linux.conf.sample b/lcd4linux.conf.sample index eb1c4a0..3b67884 100644 --- a/lcd4linux.conf.sample +++ b/lcd4linux.conf.sample @@ -97,6 +97,19 @@ Display XWindow {      Halfground '#70c000'  } +Display Image { +    Driver 'Image' +#   Format 'PPM' +    Format 'PNG' +    Size   '120x32' +    Font   '6x8' +    Pixel  '4+1' +    Gap    '-1x-1' +    Border 20 +    Foreground '#000000' +    Background '#80d000' +    Halfground '#70c000' +}  Plugin Seti {      Directory '/root/setiathome-3.08.i686-pc-linux-gnu' @@ -474,9 +487,10 @@ Layout testMySQL {  #Display 'CF631'  #Display 'CF632'  #Display 'CF633' -Display 'USBLCD' +#Display 'USBLCD'  #Display 'T6963-240x64'  #Display 'XWindow' +Display 'Image'  Layout  'Default'  #ayout  'L16x2' | 
