diff options
| -rw-r--r-- | Makefile.am | 3 | ||||
| -rw-r--r-- | Makefile.in | 16 | ||||
| -rwxr-xr-x | configure | 2 | ||||
| -rw-r--r-- | configure.in | 2 | ||||
| -rw-r--r-- | display.c | 57 | ||||
| -rw-r--r-- | display.h | 13 | ||||
| -rw-r--r-- | drv.c | 184 | ||||
| -rw-r--r-- | drv.h | 65 | ||||
| -rw-r--r-- | drv_MatrixOrbital.c | 82 | ||||
| -rw-r--r-- | lcd4linux.c | 47 | 
10 files changed, 420 insertions, 51 deletions
| diff --git a/Makefile.am b/Makefile.am index d6885c9..b93c710 100644 --- a/Makefile.am +++ b/Makefile.am @@ -43,6 +43,7 @@ liblcd4linux_la_LIBADD = @DRIVERS@  liblcd4linux_la_SOURCES = \  display.c display.h \ +drv.c drv.h \  debug.c debug.h \  cfg.c cfg.h \  lock.c lock.h \ @@ -61,7 +62,7 @@ HD44780.c \  M50530.c \  T6963.c \  USBLCD.c \ -MatrixOrbital.c \ +drv_MatrixOrbital.c MatrixOrbital.c \  MilfordInstruments.c \  PalmPilot.c \  Raster.c \ diff --git a/Makefile.in b/Makefile.in index d63b636..d899b1c 100644 --- a/Makefile.in +++ b/Makefile.in @@ -108,10 +108,10 @@ liblcd4linux_la_DEPENDENCIES = @DRIVERS@  liblcd4linux_la_LDFLAGS = -version-info 9:12:9  liblcd4linux_la_LIBADD = @DRIVERS@ -liblcd4linux_la_SOURCES =  display.c display.h debug.c debug.h cfg.c cfg.h lock.c lock.h pixmap.c pixmap.h bar.c bar.h icon.c icon.h fontmap.c fontmap.h udelay.c udelay.h +liblcd4linux_la_SOURCES =  display.c display.h drv.c drv.h debug.c debug.h cfg.c cfg.h lock.c lock.h pixmap.c pixmap.h bar.c bar.h icon.c icon.h fontmap.c fontmap.h udelay.c udelay.h -EXTRA_lcd4linux_SOURCES =  parport.c parport.h BeckmannEgle.c Crystalfontz.c Cwlinux.c HD44780.c M50530.c T6963.c USBLCD.c MatrixOrbital.c MilfordInstruments.c PalmPilot.c Raster.c SIN.c XWindow.c Text.c +EXTRA_lcd4linux_SOURCES =  parport.c parport.h BeckmannEgle.c Crystalfontz.c Cwlinux.c HD44780.c M50530.c T6963.c USBLCD.c drv_MatrixOrbital.c MatrixOrbital.c MilfordInstruments.c PalmPilot.c Raster.c SIN.c XWindow.c Text.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 Skeleton.c plugin_sample.c @@ -131,8 +131,8 @@ X_CFLAGS = @X_CFLAGS@  X_LIBS = @X_LIBS@  X_EXTRA_LIBS = @X_EXTRA_LIBS@  X_PRE_LIBS = @X_PRE_LIBS@ -liblcd4linux_la_OBJECTS =  display.lo debug.lo cfg.lo lock.lo pixmap.lo \ -bar.lo icon.lo fontmap.lo udelay.lo +liblcd4linux_la_OBJECTS =  display.lo drv.lo debug.lo cfg.lo lock.lo \ +pixmap.lo bar.lo icon.lo fontmap.lo udelay.lo  bin_PROGRAMS =  lcd4linux$(EXEEXT)  PROGRAMS =  $(bin_PROGRAMS) @@ -163,10 +163,10 @@ DEP_FILES =  .deps/BeckmannEgle.P .deps/Crystalfontz.P .deps/Cwlinux.P \  .deps/HD44780.P .deps/M50530.P .deps/MatrixOrbital.P \  .deps/MilfordInstruments.P .deps/PalmPilot.P .deps/Raster.P .deps/SIN.P \  .deps/T6963.P .deps/Text.P .deps/USBLCD.P .deps/XWindow.P .deps/bar.P \ -.deps/battery.P .deps/cfg.P .deps/debug.P .deps/display.P .deps/dvb.P \ -.deps/evaluator.P .deps/exec.P .deps/expr.P .deps/filter.P \ -.deps/fontmap.P .deps/icon.P .deps/imon.P .deps/isdn.P \ -.deps/lcd4linux.P .deps/lock.P .deps/mail.P .deps/mail2.P \ +.deps/battery.P .deps/cfg.P .deps/debug.P .deps/display.P .deps/drv.P \ +.deps/drv_MatrixOrbital.P .deps/dvb.P .deps/evaluator.P .deps/exec.P \ +.deps/expr.P .deps/filter.P .deps/fontmap.P .deps/icon.P .deps/imon.P \ +.deps/isdn.P .deps/lcd4linux.P .deps/lock.P .deps/mail.P .deps/mail2.P \  .deps/parport.P .deps/parser.P .deps/pid.P .deps/pixmap.P \  .deps/plugin.P .deps/plugin_math.P .deps/plugin_string.P \  .deps/plugin_xmms.P .deps/processor.P .deps/seti.P .deps/socket.P \ @@ -21013,7 +21013,7 @@ _ACEOF  fi  if test "$MATRIXORBITAL" = "yes"; then -   DRIVERS="$DRIVERS MatrixOrbital.lo" +   DRIVERS="$DRIVERS MatrixOrbital.lo drv_MatrixOrbital.lo"  cat >>confdefs.h <<\_ACEOF  #define WITH_MATRIXORBITAL 1 diff --git a/configure.in b/configure.in index 9930a4a..bb7302b 100644 --- a/configure.in +++ b/configure.in @@ -178,7 +178,7 @@ if test "$USBLCD" = "yes"; then  fi  if test "$MATRIXORBITAL" = "yes"; then -   DRIVERS="$DRIVERS MatrixOrbital.lo" +   DRIVERS="$DRIVERS MatrixOrbital.lo drv_MatrixOrbital.lo"     AC_DEFINE(WITH_MATRIXORBITAL,1,[junk])  fi @@ -1,4 +1,4 @@ -/* $Id: display.c,v 1.44 2003/10/05 17:58:50 reinelt Exp $ +/* $Id: display.c,v 1.45 2004/01/09 17:03:07 reinelt Exp $   *   * framework for device drivers   * @@ -22,6 +22,13 @@   *   *   * $Log: display.c,v $ + * Revision 1.45  2004/01/09 17:03:07  reinelt + * initiated transfer to new driver architecture + * new file 'drv.c' will someday replace 'display.c' + * new file 'drv_MatrixOrbital.c' will replace 'MatrixOrbital.c' + * due to this 'soft' transfer lcd4linux should stay usable during the switch + * (at least I hope so) + *   * Revision 1.44  2003/10/05 17:58:50  reinelt   * libtool junk; copyright messages cleaned up   * @@ -250,18 +257,18 @@ extern LCD MilfordInstruments[];  extern LCD PalmPilot[];  extern LCD Raster[];  extern LCD SIN[]; -extern LCD Skeleton[];  extern LCD XWindow[];  extern LCD Text[];  // output file for Raster driver  // has to be defined here because it's referenced  // even if the raster driver is not included! -char *output=NULL; +// Fixme: has gone to new drv.c +// char *output=NULL; -FAMILY Driver[] = { +FAMILY oldDriver[] = {  #ifdef WITH_BECKMANNEGLE -  { "Beckmann+Egle", BeckmannEgle }, +  { "BeckmannEgle", BeckmannEgle },  #endif  #ifdef WITH_CRYSTALFONTZ    { "Crystalfontz", Crystalfontz }, @@ -270,40 +277,34 @@ FAMILY Driver[] = {    { "Cwlinux", Cwlinux },  #endif  #ifdef WITH_HD44780 -  { "HD 44780 based", HD44780 }, +  { "HD44780", HD44780 },  #endif  #ifdef WITH_M50530 -  { "M50530 based", M50530 }, +  { "M50530", M50530 },  #endif  #ifdef WITH_T6963 -  { "T6963 based", T6963 }, +  { "T6963", T6963 },  #endif  #ifdef WITH_USBLCD    { "USBLCD", USBLCD },  #endif  #ifdef WITH_MATRIXORBITAL -  { "Matrix Orbital", MatrixOrbital }, +  { "MatrixOrbital", MatrixOrbital },  #endif  #ifdef WITH_MILINST -  { "Milford Instruments", MilfordInstruments }, +  { "MilfordInstruments", MilfordInstruments },  #endif  #ifdef WITH_PALMPILOT -  { "3Com Palm Pilot", PalmPilot }, +  { "PalmPilot", PalmPilot },  #endif  #if defined (WITH_PNG) || defined(WITH_PPM)    { "Raster", Raster },  #endif -#ifdef WITH_SIN -  { "SIN Router", SIN }, -#endif -#ifdef WITH_SKELETON -  { "Skeleton", Skeleton }, -#endif  #ifdef WITH_X11 -  { "X Window System", XWindow }, +  { "X11", XWindow },  #endif  #ifdef WITH_TEXT -  { "ncurses Text", Text }, +  { "Text", Text },  #endif    { NULL }  }; @@ -316,12 +317,12 @@ int lcd_list (void)  {    int i, j; -  printf ("available display drivers:"); +  printf ("available *old* display drivers and models:"); -  for (i=0; Driver[i].name; i++) { -    printf ("\n   %-20s:", Driver[i].name); -    for (j=0; Driver[i].Model[j].name; j++) { -      printf (" %s", Driver[i].Model[j].name); +  for (i=0; oldDriver[i].driver; i++) { +    printf ("\n   %-20s:", oldDriver[i].driver); +    for (j=0; oldDriver[i].Model[j].name; j++) { +      printf (" %s", oldDriver[i].Model[j].name);      }    }    printf ("\n"); @@ -332,10 +333,10 @@ int lcd_list (void)  int lcd_init (char *driver)  {    int i, j; -  for (i=0; Driver[i].name; i++) { -    for (j=0; Driver[i].Model[j].name; j++) { -      if (strcmp (Driver[i].Model[j].name, driver)==0) { -	Lcd=&Driver[i].Model[j]; +  for (i=0; oldDriver[i].driver; i++) { +    for (j=0; oldDriver[i].Model[j].name; j++) { +      if (strcmp (oldDriver[i].Model[j].name, driver)==0) { +	Lcd=&oldDriver[i].Model[j];  	if (Lcd->init==NULL) return 0;  	return Lcd->init(Lcd);        } @@ -1,4 +1,4 @@ -/* $Id: display.h,v 1.22 2003/10/05 17:58:50 reinelt Exp $ +/* $Id: display.h,v 1.23 2004/01/09 17:03:07 reinelt Exp $   *   * framework for device drivers   * @@ -22,6 +22,13 @@   *   *   * $Log: display.h,v $ + * Revision 1.23  2004/01/09 17:03:07  reinelt + * initiated transfer to new driver architecture + * new file 'drv.c' will someday replace 'display.c' + * new file 'drv_MatrixOrbital.c' will replace 'MatrixOrbital.c' + * due to this 'soft' transfer lcd4linux should stay usable during the switch + * (at least I hope so) + *   * Revision 1.22  2003/10/05 17:58:50  reinelt   * libtool junk; copyright messages cleaned up   * @@ -130,8 +137,8 @@ typedef struct LCD {  } LCD;  typedef struct { -  char *name; -  LCD *Model; +  char *driver; +  LCD  *Model;  } FAMILY; @@ -0,0 +1,184 @@ +/* $Id: drv.c,v 1.1 2004/01/09 17:03:07 reinelt Exp $ + * + * new framework for display drivers + * + * Copyright 1999-2003 Michael Reinelt <reinelt@eunet.at> + * Copyright 2004 The LCD4Linux Team <lcd4linux-devel@users.sourceforge.net> + * + * 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: drv.c,v $ + * Revision 1.1  2004/01/09 17:03:07  reinelt + * initiated transfer to new driver architecture + * new file 'drv.c' will someday replace 'display.c' + * new file 'drv_MatrixOrbital.c' will replace 'MatrixOrbital.c' + * due to this 'soft' transfer lcd4linux should stay usable during the switch + * (at least I hope so) + * + */ + +/*  + * exported functions: + * + * drv_list (void) + *   lists all available drivers to stdout + * + * drv_init (char *driver) + *    initializes the named driver + * + * drv_query (int *rows, int *cols, int *xres, int *yres, int *bars, int *gpos) + *    queries the attributes of the selected driver + * + * drv_clear () + *    clears the display + * + * int drv_put (int row, int col, char *text) + *    writes text at row, col + * + * int drv_bar (int type, int row, int col, int max, int len1, int len2) + *    draws a specified bar at row, col with len + * + * int drv_icon (int num, int seq, int row, int col) + *    draws icon #num sequence #seq at row, col + * + * int drv_gpo (int num, int val) + *    sets GPO #num to val + * + * int drv_flush (void) + *    flushes the framebuffer to the display + * + * int drv_quit (void) + *    de-initializes the driver + */ + +#include "config.h" + +#include <stdlib.h> +#include <stdio.h> +#include <string.h> + +#include "debug.h" +#include "cfg.h" +#include "drv.h" + +extern DRIVER drv_BeckmannEgle; +extern DRIVER drv_Crystalfontz; +extern DRIVER drv_Cwlinux; +extern DRIVER drv_HD44780; +extern DRIVER drv_M50530; +extern DRIVER drv_T6963; +extern DRIVER drv_USBDRIVER; +extern DRIVER drv_MatrixOrbital; +extern DRIVER drv_MilfordInstruments; +extern DRIVER drv_PalmPilot; +extern DRIVER drv_Raster; +extern DRIVER drv_XWindow; +extern DRIVER drv_Text; + +// output file for Raster driver +// has to be defined here because it's referenced +// even if the raster driver is not included! +char *output=NULL; + +DRIVER *Driver[] = { +#ifdef WITH_MATRIXORBITAL +  &drv_MatrixOrbital, +#endif +  /* Fixme +     #ifdef WITH_BECKMANNEGLE +     &BeckmannEgle, +     #endif +     #ifdef WITH_CRYSTALFONTZ +     &Crystalfontz, +     #endif +     #ifdef WITH_CWLINUX +     &Cwlinux, +     #endif +     #ifdef WITH_HD44780 +     &HD44780, +     #endif +     #ifdef WITH_M50530 +     &M50530, +     #endif +     #ifdef WITH_T6963 +     &T6963, +     #endif +     #ifdef WITH_USBLCD +     &USBLCD, +     #endif +     #ifdef WITH_MATRIXORBITAL +     &MatrixOrbital, +     #endif +     #ifdef WITH_MILINST +     &MilfordInstruments, +     #endif +     #ifdef WITH_PALMPILOT +     &PalmPilot, +     #endif +     #if defined (WITH_PNG) || defined(WITH_PPM) +     &Raster, +     #endif +     #ifdef WITH_X11 +     &XWindow, +     #endif +     #ifdef WITH_TEXT +     &Text, +     #endif +  */ +  NULL, +}; + + +static DRIVER *Lcd = NULL; + + +int drv_list (void) +{ +  int i; + +  printf ("available display drivers:"); +   +  for (i=0; Driver[i]; i++) { +    printf ("\n   %-20s: ", Driver[i]->name); +    if (Driver[i]->list) Driver[i]->list(); +  } +  printf ("\n"); +  return 0; +} + + +int drv_init (char *section, char *driver) +{ +  int i; +  for (i=0; Driver[i]; i++) { +    if (strcmp (Driver[i]->name, driver)==0) { +      Lcd=Driver[i]; +      if (Lcd->init==NULL) return 0; +      return Lcd->init(Lcd); +    } +  } +  error ("drv_init(%s) failed: no such driver", driver); +  return -1; +} + + +int drv_quit (void) +{ +  if (Lcd->quit==NULL) return 0; +  return Lcd->quit(); +} @@ -0,0 +1,65 @@ +/* $Id: drv.h,v 1.1 2004/01/09 17:03:07 reinelt Exp $ + * + * new framework for display drivers + * + * Copyright 1999-2003 Michael Reinelt <reinelt@eunet.at> + * Copyright 2004 The LCD4Linux Team <lcd4linux-devel@users.sourceforge.net> + * + * 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: drv.h,v $ + * Revision 1.1  2004/01/09 17:03:07  reinelt + * initiated transfer to new driver architecture + * new file 'drv.c' will someday replace 'display.c' + * new file 'drv_MatrixOrbital.c' will replace 'MatrixOrbital.c' + * due to this 'soft' transfer lcd4linux should stay usable during the switch + * (at least I hope so) + * + */ + +#ifndef _DRV_H_ +#define _DRV_H_ + +typedef struct DRIVER { +  char *name; +  int (*list)  (void); +  int (*init)  (struct DRIVER *Self); +  int (*quit)  (void); +} DRIVER; + + +// output file for Raster driver +// has to be defined here because it's referenced +// even if the raster driver is not included! +extern char *output; + +int drv_list  (void); +int drv_init  (char *section, char *driver); +int drv_quit  (void); + +/* +  int drv_query (int *rows, int *cols, int *xres, int *yres, int *bars, int *icons, int *gpos); +  int drv_clear (int full); +  int drv_put   (int row, int col, char *text); +  int drv_bar   (int type, int row, int col, int max, int len1, int le2); +  int drv_icon  (int num, int seq, int row, int col); +  int drv_gpo   (int num, int val); +  int drv_flush (void); +*/ + +#endif diff --git a/drv_MatrixOrbital.c b/drv_MatrixOrbital.c new file mode 100644 index 0000000..1bb55e7 --- /dev/null +++ b/drv_MatrixOrbital.c @@ -0,0 +1,82 @@ +/* $Id: drv_MatrixOrbital.c,v 1.1 2004/01/09 17:03:07 reinelt Exp $ + * + * new style driver for Matrix Orbital serial display modules + * + * Copyright 1999, 2000 Michael Reinelt <reinelt@eunet.at> + * Copyright 2004 The LCD4Linux Team <lcd4linux-devel@users.sourceforge.net> + * + * 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: drv_MatrixOrbital.c,v $ + * Revision 1.1  2004/01/09 17:03:07  reinelt + * initiated transfer to new driver architecture + * new file 'drv.c' will someday replace 'display.c' + * new file 'drv_MatrixOrbital.c' will replace 'MatrixOrbital.c' + * due to this 'soft' transfer lcd4linux should stay usable during the switch + * (at least I hope so) + * + */ + +/*  + * + * exported fuctions: + * + * struct DRIVER drv_MatrixOrbital + * + */ + +#include <stdlib.h> +#include <stdio.h> +#include <string.h> +#include <errno.h> +#include <unistd.h> +#include <termios.h> +#include <fcntl.h> + +#include "debug.h" +#include "cfg.h" +#include "plugin.h" +#include "lock.h" +#include "drv.h" +#include "bar.h" +#include "icon.h" + +int drv_MO_list (void) +{ +  printf ("this and that"); +  return 0; +} + +int drv_MO_init (struct DRIVER *Self) +{ +  debug ("consider me initialized"); +  return 0; +} + +int drv_MO_quit (void) { +  debug ("consider me gone"); +  return 0; +} + + +DRIVER drv_MatrixOrbital = { +  name: "MatrixOrbital", +  list:  drv_MO_list, +  init:  drv_MO_init, +  quit:  drv_MO_quit  +}; diff --git a/lcd4linux.c b/lcd4linux.c index 4e51b50..28e39ff 100644 --- a/lcd4linux.c +++ b/lcd4linux.c @@ -1,4 +1,4 @@ -/* $Id: lcd4linux.c,v 1.55 2004/01/09 04:16:06 reinelt Exp $ +/* $Id: lcd4linux.c,v 1.56 2004/01/09 17:03:07 reinelt Exp $   *   * LCD4Linux   * @@ -22,6 +22,13 @@   *   *   * $Log: lcd4linux.c,v $ + * Revision 1.56  2004/01/09 17:03:07  reinelt + * initiated transfer to new driver architecture + * new file 'drv.c' will someday replace 'display.c' + * new file 'drv_MatrixOrbital.c' will replace 'MatrixOrbital.c' + * due to this 'soft' transfer lcd4linux should stay usable during the switch + * (at least I hope so) + *   * Revision 1.55  2004/01/09 04:16:06  reinelt   * added 'section' argument to cfg_get(), but NULLed it on all calls by now.   * @@ -275,7 +282,8 @@  #include "debug.h"  #include "pid.h"  #include "udelay.h" -#include "display.h" +#include "display.h"  // Fixme: remove me... +#include "drv.h"  #include "processor.h"  #include "plugin.h" @@ -368,7 +376,8 @@ void handler (int signal)  int main (int argc, char *argv[])  {    char *cfg="/etc/lcd4linux.conf"; -  char *driver; +  char *display, *driver; +  char  section[32];    int c;    int quiet=0;    int interactive=0; @@ -414,6 +423,8 @@ int main (int argc, char *argv[])        break;      case 'l':        printf ("%s\n", release); +      drv_list(); +      printf ("\n");        lcd_list();        exit(0);      case 'o': @@ -451,10 +462,19 @@ int main (int argc, char *argv[])    if (cfg_init(cfg)==-1)      exit (1); -  driver=cfg_get(NULL, "display", NULL); +  display=cfg_get(NULL, "Display", NULL); +  if (display==NULL || *display=='\0') { +    error ("missing 'Display' entry in %s!", cfg_source()); +    exit (1); +  } +   +  snprintf (section, sizeof(section), "Display:%s", display); +  driver=cfg_get(section, "Driver", NULL);    if (driver==NULL || *driver=='\0') { -    error ("missing 'display' entry in %s!", cfg_source()); +#if 0 +    error ("missing '%s.Driver' entry in %s!", section, cfg_source());      exit (1); +#endif    }    if (!running_foreground) { @@ -509,10 +529,19 @@ int main (int argc, char *argv[])      running_background=1;    } -  debug ("initializing driver %s", driver); -  if (lcd_init(driver)==-1) { -    pid_exit(PIDFILE); -    exit (1); +  // Fixme: Compatibility only... +  if (driver!=NULL) { +    debug ("initializing driver %s", driver); +    if (drv_init(section, driver)==-1) { +      pid_exit(PIDFILE); +      exit (1); +    } +  } else { +    debug ("initializing old-style driver %s", display); +    if (lcd_init(display)==-1) { +      pid_exit(PIDFILE); +      exit (1); +    }    }    // process_init sets global vars tick, tack | 
