]> git.webhop.me Git - lcd4linux.git/commitdiff
[lcd4linux @ 2005-08-22 05:44:43 by reinelt]
authorreinelt <reinelt@3ae390bd-cb1e-0410-b409-cd5a39f66f1f>
Mon, 22 Aug 2005 05:44:43 +0000 (05:44 +0000)
committerreinelt <reinelt@3ae390bd-cb1e-0410-b409-cd5a39f66f1f>
Mon, 22 Aug 2005 05:44:43 +0000 (05:44 +0000)
new driver 'WincorNixdorf'
some fixes to the bar code

git-svn-id: https://ssl.bulix.org/svn/lcd4linux/trunk@584 3ae390bd-cb1e-0410-b409-cd5a39f66f1f

Makefile.am
Makefile.in
config.h.in
configure
drivers.m4
drv.c
drv_SimpleLCD.c
drv_WincorNixdorf.c [new file with mode: 0644]
drv_generic_text.c
lcd4linux.conf.sample

index 27e06a31a73a2878175e857b0f1e7b33d99a8ed0..d26780c27b3d2a73a55ace910a72d452b24da204 100644 (file)
@@ -71,6 +71,7 @@ drv_SimpleLCD.c             \
 drv_T6963.c                 \
 drv_Trefon.c                \
 drv_USBLCD.c                \
+drv_WincorNixdorf.c         \
 drv_X11.c                   \
                             \
 font_6x8.h                  \
index 25bbd9d4805681685e23d5b5682bbcd23cdab73d..a038cbddc9e2490e7bf320806a647fab6e0c7adc 100644 (file)
@@ -104,7 +104,7 @@ lcd4linux_DEPENDENCIES = @DRIVERS@ @PLUGINS@
 lcd4linux_SOURCES =  lcd4linux.c                 cfg.c         cfg.h         debug.c       debug.h       drv.c         drv.h         evaluator.c   evaluator.h   hash.c        hash.h        layout.c      layout.h      pid.c         pid.h         timer.c       timer.h       thread.c      thread.h      udelay.c      udelay.h      qprintf.c     qprintf.h                                 widget.c      widget.h      widget_text.c widget_text.h widget_bar.c  widget_bar.h  widget_icon.c widget_icon.h                             plugin.c      plugin.h      plugin_cfg.c                plugin_math.c               plugin_string.c             plugin_test.c               plugin_time.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       drv_generic_i2c.c           drv_generic_i2c.h           drv_BeckmannEgle.c          drv_BWCT.c                  drv_Crystalfontz.c          drv_Curses.c                drv_Cwlinux.c               drv_HD44780.c               drv_Image.c                 drv_LCDLinux.c              drv_LCDLinux.h              drv_LCDTerm.c               drv_M50530.c                drv_MatrixOrbital.c         drv_MilfordInstruments.c    drv_Noritake.c              drv_NULL.c                  drv_RouterBoard.c           drv_serdisplib.c            drv_SimpleLCD.c             drv_T6963.c                 drv_Trefon.c                drv_USBLCD.c                drv_X11.c                                               font_6x8.h                                              lcd4linux_i2c.h                                         plugin_apm.c                plugin_cpuinfo.c            plugin_diskstats.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_python.c             plugin_seti.c               plugin_statfs.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       drv_generic_i2c.c           drv_generic_i2c.h           drv_BeckmannEgle.c          drv_BWCT.c                  drv_Crystalfontz.c          drv_Curses.c                drv_Cwlinux.c               drv_HD44780.c               drv_Image.c                 drv_LCDLinux.c              drv_LCDLinux.h              drv_LCDTerm.c               drv_M50530.c                drv_MatrixOrbital.c         drv_MilfordInstruments.c    drv_Noritake.c              drv_NULL.c                  drv_RouterBoard.c           drv_serdisplib.c            drv_SimpleLCD.c             drv_T6963.c                 drv_Trefon.c                drv_USBLCD.c                drv_WincorNixdorf.c         drv_X11.c                                               font_6x8.h                                              lcd4linux_i2c.h                                         plugin_apm.c                plugin_cpuinfo.c            plugin_diskstats.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_python.c             plugin_seti.c               plugin_statfs.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.Drivers              README.Plugins              README.KDE                  plugin_sample.c
@@ -148,22 +148,23 @@ DEP_FILES =  .deps/cfg.P .deps/debug.P .deps/drv.P .deps/drv_BWCT.P \
 .deps/drv_MatrixOrbital.P .deps/drv_MilfordInstruments.P \
 .deps/drv_NULL.P .deps/drv_Noritake.P .deps/drv_RouterBoard.P \
 .deps/drv_SimpleLCD.P .deps/drv_T6963.P .deps/drv_Trefon.P \
-.deps/drv_USBLCD.P .deps/drv_X11.P .deps/drv_generic_graphic.P \
-.deps/drv_generic_i2c.P .deps/drv_generic_parport.P \
-.deps/drv_generic_serial.P .deps/drv_generic_text.P \
-.deps/drv_serdisplib.P .deps/evaluator.P .deps/hash.P .deps/layout.P \
-.deps/lcd4linux.P .deps/pid.P .deps/plugin.P .deps/plugin_apm.P \
-.deps/plugin_cfg.P .deps/plugin_cpuinfo.P .deps/plugin_diskstats.P \
-.deps/plugin_dvb.P .deps/plugin_exec.P .deps/plugin_i2c_sensors.P \
-.deps/plugin_imon.P .deps/plugin_isdn.P .deps/plugin_loadavg.P \
-.deps/plugin_math.P .deps/plugin_meminfo.P .deps/plugin_mysql.P \
-.deps/plugin_netdev.P .deps/plugin_pop3.P .deps/plugin_ppp.P \
-.deps/plugin_proc_stat.P .deps/plugin_python.P .deps/plugin_seti.P \
-.deps/plugin_statfs.P .deps/plugin_string.P .deps/plugin_test.P \
-.deps/plugin_time.P .deps/plugin_uname.P .deps/plugin_uptime.P \
-.deps/plugin_wireless.P .deps/plugin_xmms.P .deps/qprintf.P \
-.deps/thread.P .deps/timer.P .deps/udelay.P .deps/widget.P \
-.deps/widget_bar.P .deps/widget_icon.P .deps/widget_text.P
+.deps/drv_USBLCD.P .deps/drv_WincorNixdorf.P .deps/drv_X11.P \
+.deps/drv_generic_graphic.P .deps/drv_generic_i2c.P \
+.deps/drv_generic_parport.P .deps/drv_generic_serial.P \
+.deps/drv_generic_text.P .deps/drv_serdisplib.P .deps/evaluator.P \
+.deps/hash.P .deps/layout.P .deps/lcd4linux.P .deps/pid.P \
+.deps/plugin.P .deps/plugin_apm.P .deps/plugin_cfg.P \
+.deps/plugin_cpuinfo.P .deps/plugin_diskstats.P .deps/plugin_dvb.P \
+.deps/plugin_exec.P .deps/plugin_i2c_sensors.P .deps/plugin_imon.P \
+.deps/plugin_isdn.P .deps/plugin_loadavg.P .deps/plugin_math.P \
+.deps/plugin_meminfo.P .deps/plugin_mysql.P .deps/plugin_netdev.P \
+.deps/plugin_pop3.P .deps/plugin_ppp.P .deps/plugin_proc_stat.P \
+.deps/plugin_python.P .deps/plugin_seti.P .deps/plugin_statfs.P \
+.deps/plugin_string.P .deps/plugin_test.P .deps/plugin_time.P \
+.deps/plugin_uname.P .deps/plugin_uptime.P .deps/plugin_wireless.P \
+.deps/plugin_xmms.P .deps/qprintf.P .deps/thread.P .deps/timer.P \
+.deps/udelay.P .deps/widget.P .deps/widget_bar.P .deps/widget_icon.P \
+.deps/widget_text.P
 SOURCES = $(lcd4linux_SOURCES) $(EXTRA_lcd4linux_SOURCES)
 OBJECTS = $(lcd4linux_OBJECTS)
 
index b9b52ccc9c8f234bef15a362afe1beca402d77d5..63afa4523bbaecc58ab20026c2a157dff04557de 100644 (file)
 /* USBLCD driver */
 #undef WITH_USBLCD
 
+/* WincorNixdorf driver */
+#undef WITH_WINCORNIXDORF
+
 /* X11 driver */
 #undef WITH_X11
 
index 8e580132014e72a3520c026f52f28ccf62c111e2..f81a3616e22f47abe498e74b686bf410deea1260 100755 (executable)
--- a/configure
+++ b/configure
@@ -872,7 +872,7 @@ Optional Packages:
                           HD44780, LCDLinux, LCDTerm, M50530, MatrixOrbital,
                           MilfordInstruments, Noritake, NULL, PNG, PPM,
                           RouterBoard, serdisplib, SimpleLCD, T6963, Trefon,
-                          USBLCD, X11
+                          USBLCD, WincorNixdorf, X11
   --with-plugins=<list>   choose which plugins to compile.
                           type --with-plugins=list for a list
                           of avaible plugins
@@ -5899,6 +5899,7 @@ for driver in $drivers; do
          T6963="yes"
          Trefon="yes"
          USBLCD="yes"
+        WINCORNIXDORF="yes"
          X11="yes"
          ;;
       BeckmannEgle)
@@ -5964,6 +5965,9 @@ for driver in $drivers; do
       USBLCD)
          USBLCD=$val
          ;;
+      WincorNixdorf)
+         WINCORNIXDORF=$val
+         ;;
       X11)
          X11=$val
          ;;
@@ -6247,6 +6251,17 @@ _ACEOF
 
 fi
 
+if test "$WINCORNIXDORF" = "yes"; then
+   TEXT="yes"
+   SERIAL="yes"
+   DRIVERS="$DRIVERS drv_WincorNixdorf.o"
+
+cat >>confdefs.h <<\_ACEOF
+#define WITH_WINCORNIXDORF 1
+_ACEOF
+
+fi
+
 if test "$X11" = "yes"; then
    if test "$no_x" = "yes"; then
       { echo "$as_me:$LINENO: WARNING: X11 headers or libraries not available: X11 driver disabled" >&5
index 0a6100e048156ce593720f9e2a39a656daf6152f..1421787e3e42dc7308df743ff876c291a553f465 100644 (file)
@@ -32,7 +32,7 @@ AC_ARG_WITH(
   [                        HD44780, LCDLinux, LCDTerm, M50530, MatrixOrbital,]
   [                        MilfordInstruments, Noritake, NULL, PNG, PPM,]
   [                        RouterBoard, serdisplib, SimpleLCD, T6963, Trefon,]
-  [                        USBLCD, X11],
+  [                        USBLCD, WincorNixdorf, X11],
   drivers=$withval, 
   drivers=all
 )
@@ -74,6 +74,7 @@ for driver in $drivers; do
          T6963="yes"
          Trefon="yes"
          USBLCD="yes"
+        WINCORNIXDORF="yes"
          X11="yes"
          ;;
       BeckmannEgle)
@@ -139,6 +140,9 @@ for driver in $drivers; do
       USBLCD)
          USBLCD=$val
          ;;
+      WincorNixdorf)
+         WINCORNIXDORF=$val
+         ;;
       X11)
          X11=$val
          ;;
@@ -330,6 +334,13 @@ if test "$USBLCD" = "yes"; then
    AC_DEFINE(WITH_USBLCD,1,[USBLCD driver])
 fi
 
+if test "$WINCORNIXDORF" = "yes"; then
+   TEXT="yes"
+   SERIAL="yes"
+   DRIVERS="$DRIVERS drv_WincorNixdorf.o"
+   AC_DEFINE(WITH_WINCORNIXDORF,1,[WincorNixdorf driver])
+fi
+
 if test "$X11" = "yes"; then
    if test "$no_x" = "yes"; then
       AC_MSG_WARN(X11 headers or libraries not available: X11 driver disabled)
diff --git a/drv.c b/drv.c
index 9c1a1ba5d400e62400fac3f8828379bf4cbbc670..99430f2316fc5d8e5bf85171a12d9e5b6b2ab073 100644 (file)
--- a/drv.c
+++ b/drv.c
@@ -1,4 +1,4 @@
-/* $Id: drv.c,v 1.32 2005/05/10 13:20:14 reinelt Exp $
+/* $Id: drv.c,v 1.33 2005/08/22 05:44:43 reinelt Exp $
  *
  * new framework for display drivers
  *
  *
  *
  * $Log: drv.c,v $
+ * Revision 1.33  2005/08/22 05:44:43  reinelt
+ * new driver 'WincorNixdorf'
+ * some fixes to the bar code
+ *
  * Revision 1.32  2005/05/10 13:20:14  reinelt
  * added serdisplib driver
  *
@@ -217,6 +221,7 @@ extern DRIVER drv_SimpleLCD;
 extern DRIVER drv_T6963;
 extern DRIVER drv_Trefon;
 extern DRIVER drv_USBLCD;
+extern DRIVER drv_WincorNixdorf;
 extern DRIVER drv_X11;
 
 /* output file for Image driver
@@ -286,6 +291,9 @@ DRIVER *Driver[] = {
 #ifdef WITH_USBLCD
     &drv_USBLCD,
 #endif
+#ifdef WITH_WINCORNIXDORF
+    &drv_WincorNixdorf,
+#endif
 #ifdef WITH_X11
     &drv_X11,
 #endif
index d68947d00c0550c031d2a149bbfbbad75022a009..612fd28b48e37b4f2200298d2296ccdaa5434886 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: drv_SimpleLCD.c,v 1.5 2005/07/06 04:40:18 reinelt Exp $
+/* $Id: drv_SimpleLCD.c,v 1.6 2005/08/22 05:44:43 reinelt Exp $
  * 
  * driver for a simple serial terminal.
  * 
  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  *
  * $Log: drv_SimpleLCD.c,v $
+ * Revision 1.6  2005/08/22 05:44:43  reinelt
+ * new driver 'WincorNixdorf'
+ * some fixes to the bar code
+ *
  * Revision 1.5  2005/07/06 04:40:18  reinelt
  * GCC-4 fixes
  *
@@ -127,7 +131,7 @@ static unsigned char bar_char = 0;
 /****************************************/
 
 /** No clear function on SimpleLCD : Just send CR-LF * number of lines **/
-void drv_SL_simple_clear(void)
+static void drv_SL_simple_clear(void)
 {
     char cmd[2];
     int i;
@@ -140,7 +144,7 @@ void drv_SL_simple_clear(void)
 }
 
 /** vt-100 mode : send the ESC-code **/
-void drv_SL_vt100_clear(void)
+static void drv_SL_vt100_clear(void)
 {
     char cmd[4];
     cmd[0] = 0x1b;
@@ -148,9 +152,10 @@ void drv_SL_vt100_clear(void)
     cmd[2] = '2';
     cmd[3] = 'J';
     drv_generic_serial_write(cmd, 4);
+
 }
 
-void drv_SL_clear(void)
+static void drv_SL_clear(void)
 {
     vt100_mode == 1 ? drv_SL_vt100_clear() : drv_SL_simple_clear();
 }
@@ -159,6 +164,7 @@ void drv_SL_clear(void)
 /* If full_commit = true, then the whole buffer is to be sent to screen.
    if full_commit = false, then only the last line is to be sent (faster on slow screens)
 */
+
 static void drv_SL_commit(int full_commit)
 {
     int row;
@@ -308,7 +314,6 @@ int drv_SL_init(const char *section, const int quiet)
     GOTO_COST = -1;            /* number of bytes a goto command requires */
 
 
-
     /* start display */
     if ((ret = drv_SL_start(section, quiet)) != 0)
        return ret;
diff --git a/drv_WincorNixdorf.c b/drv_WincorNixdorf.c
new file mode 100644 (file)
index 0000000..0a829db
--- /dev/null
@@ -0,0 +1,279 @@
+/* $Id: drv_WincorNixdorf.c,v 1.1 2005/08/22 05:44:43 reinelt Exp $
+ * 
+ * driver for WincorNixdorf serial cashier displays BA63 and BA66
+ * 
+ * Copyright (C) 2005 Michael Reinelt <reinelt@eunet.at>
+ * Copyright (C) 2005 The LCD4Linux Team <lcd4linux-devel@users.sourceforge.net>
+ *
+ * based on the SimpleLCD driver which is
+ * Copyright (C) 2005 Julien Aube <ob@obconseil.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_WincorNixdorf.c,v $
+ * Revision 1.1  2005/08/22 05:44:43  reinelt
+ * new driver 'WincorNixdorf'
+ * some fixes to the bar code
+ *
+ */
+
+/* 
+ *
+ * exported fuctions:
+ *
+ * struct DRIVER drv_WincorNixdorf
+ *
+ */
+
+#include "config.h"
+
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <termios.h>
+
+#include "debug.h"
+#include "cfg.h"
+#include "qprintf.h"
+#include "plugin.h"
+#include "widget.h"
+#include "widget_text.h"
+#include "widget_bar.h"
+#include "drv.h"
+#include "drv_generic_text.h"
+#include "drv_generic_serial.h"
+
+
+#define ESC "\033"
+
+
+static char Name[] = "WincorNixdorf";
+
+typedef struct {
+    int type;
+    char *name;
+    int rows;
+    int cols;
+} MODEL;
+
+static MODEL Models[] = {
+    {63, "BA63", 2, 20},
+    {66, "BA66", 4, 20},
+    {-1, "unknown", -1, -1},
+};
+
+static int Model;
+
+
+/****************************************/
+/***  hardware dependant functions    ***/
+/****************************************/
+
+static void drv_WN_clear(void)
+{
+    drv_generic_serial_write(ESC "[2J", 4);
+}
+
+
+static void drv_WN_write(const int row, const int col, const char *data, int len)
+{
+    char cmd[8] = ESC "[r;ccH";
+
+    cmd[2] = '1' + row;
+    cmd[4] = '0' + (col / 10);
+    cmd[5] = '1' + (col % 10);
+
+    drv_generic_serial_write(cmd, 7);
+    drv_generic_serial_write(data, len);
+}
+
+
+static int drv_WN_start(const char *section, const int quiet)
+{
+    int i, len;
+    int selftest;
+    char *model = NULL;
+    char buffer[32];
+
+    model = cfg_get(section, "Model", NULL);
+    if (model == NULL && *model == '\0') {
+       error("%s: no '%s.Model' entry from %s", Name, section, cfg_source());
+       return -1;
+    }
+
+    for (i = 0; Models[i].type != -1; i++) {
+       if (strcasecmp(Models[i].name, model) == 0)
+           break;
+    }
+    if (Models[i].type == -1) {
+       error("%s: %s.Model '%s' is unknown from %s", Name, section, model, cfg_source());
+       return -1;
+    }
+    Model = i;
+    info("%s: using model '%s'", Name, Models[Model].name);
+
+    /* initialize global variables */
+    DROWS = Models[Model].rows;
+    DCOLS = Models[Model].cols;
+
+    if (drv_generic_serial_open(section, Name, CS8 | PARENB | PARODD) < 0)
+       return -1;
+
+    /* real worker functions */
+    drv_generic_text_real_write = drv_WN_write;
+
+    cfg_number(section, "SelfTest", 0, 0, 1, &selftest);
+    if (selftest) {
+       info("%s: initiating display selftest sequence", Name);
+
+       /* read display identification */
+       drv_generic_serial_write(ESC "[0c", 4);
+       usleep(100 * 1000);
+
+       if ((len = drv_generic_serial_read(buffer, -sizeof(buffer))) > 0) {
+           info("%s: waiting 15 seconds for selftest", Name);
+           drv_generic_serial_write(buffer, len);
+           sleep(15);
+           info("%s: selftest finished", Name);
+       } else {
+           info("%s: selftest initiation failed", Name);
+       }
+    }
+
+    /* clear display */
+    drv_WN_clear();
+
+    if (!quiet) {
+       char buffer[40];
+       qprintf(buffer, sizeof(buffer), "%s %dx%d", Name, DCOLS, DROWS);
+       if (drv_generic_text_greet(buffer, NULL)) {
+           sleep(3);
+           drv_WN_clear();
+       }
+    }
+
+    return 0;
+}
+
+
+/****************************************/
+/***            plugins               ***/
+/****************************************/
+
+/* none */
+
+
+/****************************************/
+/***        widget callbacks          ***/
+/****************************************/
+
+
+/* using drv_generic_text_draw(W) */
+
+
+/****************************************/
+/***        exported functions        ***/
+/****************************************/
+
+
+/* list models */
+int drv_WN_list(void)
+{
+    printf("BA63 BA66");
+    return 0;
+}
+
+
+/* initialize driver & display */
+int drv_WN_init(const char *section, const int quiet)
+{
+    WIDGET_CLASS wc;
+    int ascii;
+    int ret;
+
+    /* display preferences */
+    XRES = 5;                  /* pixel width of one char  */
+    YRES = 7;                  /* pixel height of one char  */
+    CHARS = 0;                 /* number of user-defineable characters */
+    CHAR0 = 0;                 /* ASCII of first user-defineable char */
+    ICONS = 0;                  /* number of user-defineable characters reserved for icons */
+    GOTO_COST = 6;             /* number of bytes a goto command requires */
+
+
+    /* start display */
+    if ((ret = drv_WN_start(section, quiet)) != 0)
+       return ret;
+
+    /* initialize generic text driver */
+    if ((ret = drv_generic_text_init(section, Name)) != 0)
+       return ret;
+
+    /* initialize generic bar driver */
+    if ((ret = drv_generic_text_bar_init(1)) != 0)
+       return ret;
+
+    cfg_number(section, "BarChar", '*', 1, 255, &ascii);
+
+    /* add fixed chars to the bar driver */
+    drv_generic_text_bar_add_segment(0, 0, 255, 32);   /* ASCII  32 = blank */
+    drv_generic_text_bar_add_segment(255, 255, 255, ascii);
+
+    /* register text widget */
+    wc = Widget_Text;
+    wc.draw = drv_generic_text_draw;
+    widget_register(&wc);
+
+    /* register bar widget */
+    wc = Widget_Bar;
+    wc.draw = drv_generic_text_bar_draw;
+    widget_register(&wc);
+
+    /* register plugins */
+    /* none */
+
+    return 0;
+}
+
+
+/* close driver & display */
+int drv_WN_quit(const int quiet)
+{
+
+    info("%s: shutting down.", Name);
+
+    drv_generic_text_quit();
+
+    /* clear display */
+    drv_WN_clear();
+
+    /* say goodbye... */
+    if (!quiet) {
+       drv_generic_text_greet("goodbye!", NULL);
+    }
+
+    drv_generic_serial_close();
+
+    return (0);
+}
+
+
+DRIVER drv_WincorNixdorf = {
+  name:Name,
+  list:drv_WN_list,
+  init:drv_WN_init,
+  quit:drv_WN_quit,
+};
index f250ca20e28952eee353a127cd0821ff7cba5625..79a89ffa408f460fd326f0b105d39431df068700 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: drv_generic_text.c,v 1.27 2005/05/08 04:32:44 reinelt Exp $
+/* $Id: drv_generic_text.c,v 1.28 2005/08/22 05:44:43 reinelt Exp $
  *
  * generic driver helper for text-based displays
  *
  *
  *
  * $Log: drv_generic_text.c,v $
+ * Revision 1.28  2005/08/22 05:44:43  reinelt
+ * new driver 'WincorNixdorf'
+ * some fixes to the bar code
+ *
  * Revision 1.27  2005/05/08 04:32:44  reinelt
  * CodingStyle added and applied
  *
@@ -638,7 +642,7 @@ static void drv_generic_text_bar_create_bar(int row, int col, const DIRECTION di
            BarFB[row * LCOLS + col].dir = dir;
            BarFB[row * LCOLS + col].segment = -1;
            if (style && BarFB[row * LCOLS + col].style == 0)
-               BarFB[row * LCOLS + col].style = STYLE_HOLLOW;
+               BarFB[row * LCOLS + col].style = style;
            if (val1 >= XRES) {
                BarFB[row * LCOLS + col].val1 = rev ? 0 : XRES;
                val1 -= XRES;
@@ -739,7 +743,7 @@ static void drv_generic_text_bar_create_segments(void)
                    break;
                /* hollow style, val(1,2) == 1, like '[' */
 /*                        if (l1 == 1 && l2 == 1 && Segment[i].style == STYLE_FIRST && BarFB[n].style == STYLE_HOLLOW)
-                                                                                                                                             break;
+                                                                                                                                                                                                                                                                                                                                                                                             break;
 *//* hollow style, val(1,2) == 1, like ']' */
 /*                        if (l1 == 1 && l2 == 1 && Segment[i].style == STYLE_LAST && BarFB[n].style == STYLE_HOLLOW)
                               break;
@@ -786,18 +790,28 @@ static int drv_generic_text_bar_segment_error(const int i, const int j)
     if (j2 > res)
        j2 = res;
 
+    /* do not replace empty with non-empty */
     if (i1 == 0 && j1 != 0)
        return 65535;
     if (i2 == 0 && j2 != 0)
        return 65535;
+
+    /* do not replace full with non-full */
     if (i1 == res && j1 < res)
        return 65535;
     if (i2 == res && j2 < res)
        return 65535;
-    if (i1 == 1 && j1 != 1 && i2 > 0)
-       return 65535;
-    if (i2 == 1 && j2 != 1 && j1 > 0)
-       return 65535;
+
+    /* do not replace start line */
+    /* but only if there are at least some chars available */
+    if (CHARS - ICONS > 0) {
+       if (i1 == 1 && j1 != 1 && i2 > 0)
+           return 65535;
+       if (i2 == 1 && j2 != 1 && j1 > 0)
+           return 65535;
+    }
+
+    /* do not replace equal length with non-equal length */
     if (i1 == i2 && j1 != j2)
        return 65535;
 
@@ -819,6 +833,7 @@ static void drv_generic_text_bar_pack_segments(void)
     for (i = 0; i < nSegment; i++) {
        for (j = 0; j < nSegment; j++) {
            error[i][j] = drv_generic_text_bar_segment_error(i, j);
+           // debug ("[%d][%d] = %d", i, j, error[i][j]);
        }
     }
 
@@ -854,7 +869,8 @@ static void drv_generic_text_bar_pack_segments(void)
        }
 #if 0
        debug("pack_segment: n=%d i=%d j=%d min=%d", nSegment, pack_i, pack_j, min);
-       debug("Pack_segment: i1=%d i2=%d j1=%d j2=%d\n", Segment[pack_i].val1, Segment[pack_i].val2, Segment[pack_j].val1, Segment[pack_j].val2);
+       debug("Pack_segment: i1=%d i2=%d j1=%d j2=%d\n", 
+             Segment[pack_i].val1, Segment[pack_i].val2, Segment[pack_j].val1, Segment[pack_j].val2);
 #endif
 
        nSegment--;
index 618313542d63f180be81a052666697f467c4b959..d303f63dda6ccb663913ca765618a267a6f75a03 100644 (file)
@@ -211,15 +211,12 @@ Display SimpleLCD {
 }
 
 Display BA63 {
-    Driver   'SimpleLCD'
-    Model    'vt100'
+    Driver   'WincorNixdorf'
+    Model    'BA63'
     Port     '/dev/tts/0'
     Speed     9600
-    Size     '20x2'
-    # Activate parity and set it to odd
-    Options 5120
-    # From the BA63 doc, decimal 219 look like a big full block.
-#    BarCharValue 219
+    BarChar   219
+    SelfTest  0
 }
 
 Display M50530-24x8 {
@@ -358,7 +355,7 @@ Widget Busy {
     expression proc_stat::cpu('busy', 500)
     prefix 'Busy'      
     postfix '%'        
-    width 8    
+    width 9    
     precision 1
     align 'R'  
     update tick        
@@ -815,14 +812,14 @@ Layout testMySQL {
 #Display 'WDC2704M'
 #Display 'SC1602D'
 #Display 'LCM-162'
-Display 'CF631'
+#Display 'CF631'
 #Display 'CF632'
 #Display 'CF633'
 #Display 'Curses'
 #Display 'M50530-24x8'
 #Display 'LCDTerm'
 #Display 'SimpleLCD'
-#Display 'BA63'
+Display 'BA63'
 #Display 'CT20x4'
 #Display 'T6963-240x64'
 #Display 'XWindow'
@@ -834,9 +831,9 @@ Display 'CF631'
 #Layout  'Default'
 #Layout 'L8x2'
 #Layout 'L16x2'
-#Layout 'L20x2'
+Layout 'L20x2'
 #Layout 'Test'
-Layout 'Test2'
+#Layout 'Test2'
 
 
 Variables {