]> git.webhop.me Git - lcd4linux.git/commitdiff
[lcd4linux @ 2005-05-10 13:20:10 by reinelt]
authorreinelt <reinelt@3ae390bd-cb1e-0410-b409-cd5a39f66f1f>
Tue, 10 May 2005 13:20:14 +0000 (13:20 +0000)
committerreinelt <reinelt@3ae390bd-cb1e-0410-b409-cd5a39f66f1f>
Tue, 10 May 2005 13:20:14 +0000 (13:20 +0000)
added serdisplib driver

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

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

index 8d5caffb787139a2842b14f25e55e9161a4fc210..f9cffe84501ccd122d36cdf73e66c13ea07d891b 100644 (file)
@@ -65,6 +65,7 @@ drv_MilfordInstruments.c    \
 drv_Noritake.c              \
 drv_NULL.c                  \
 drv_RouterBoard.c           \
+drv_serdisplib.c            \
 drv_SimpleLCD.c             \
 drv_T6963.c                 \
 drv_Trefon.c                \
index af5e29c7d18f3ae36760a3ca52fd6ed6d808952e..20d463f93558d05cc3c71cfcd36458b56bbbcc4b 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_LCDTerm.c               drv_M50530.c                drv_MatrixOrbital.c         drv_MilfordInstruments.c    drv_Noritake.c              drv_NULL.c                  drv_RouterBoard.c           drv_SimpleLCD.c             drv_T6963.c                 drv_Trefon.c                drv_USBLCD.c                drv_X11.c                                               font_6x8.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_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                                              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
@@ -151,20 +151,20 @@ DEP_FILES =  .deps/cfg.P .deps/debug.P .deps/drv.P .deps/drv_BWCT.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/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_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 0849a1b602b5a9b7190c05a958e8eb57fc6bab7e..4cad1b798d5bc0b64097c38e627075fc7e36164d 100644 (file)
 /* Define to 1 if you have the `regcomp' function. */
 #undef HAVE_REGCOMP
 
+/* Define to 1 if you have the <serdisplib/serdisp.h> header file. */
+#undef HAVE_SERDISPLIB_SERDISP_H
+
 /* Define to 1 if you have the `socket' function. */
 #undef HAVE_SOCKET
 
 /* RouterBoard driver */
 #undef WITH_ROUTERBOARD
 
+/* serdisplib driver */
+#undef WITH_SERDISPLIB
+
 /* SimpleLCD driver */
 #undef WITH_SIMPLELCD
 
index 04cb54105a8e698b57278e174cc6730664434cd5..a2b1f4ea34890e4129de7fcee788fe2e971f2c9b 100755 (executable)
--- a/configure
+++ b/configure
@@ -870,7 +870,8 @@ Optional Packages:
                           BeckmannEgle, BWCT, CrystalFontz, Curses, Cwlinux,
                           HD44780, LCDLinux, LCDTerm, M50530, MatrixOrbital,
                           MilfordInstruments, Noritake, NULL, PNG, PPM,
-                          RouterBoard, SimpleLCD, T6963, Trefon, USBLCD, X11
+                          RouterBoard, serdisplib, SimpleLCD, T6963, Trefon,
+                          USBLCD, X11
   --with-plugins=<list>   choose which plugins to compile.
                           type --with-plugins=list for a list
                           of avaible plugins
@@ -3478,7 +3479,7 @@ echo "${ECHO_T}Please note that some screen refreshs may fail" >&6
 echo $ECHO_N "checking for ncurses version... $ECHO_C" >&6
        ncurses_version=unknown
 cat > conftest.$ac_ext <<EOF
-#line 3481 "configure"
+#line 3482 "configure"
 #include "confdefs.h"
 #ifdef RENAMED_NCURSES
 #include <curses.h>
@@ -5523,6 +5524,159 @@ fi
 done
 
 
+# check for serdisplib
+
+for ac_header in serdisplib/serdisp.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+  # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+        { ac_try='test -z "$ac_c_werror_flag"                   || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+        { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    (
+      cat <<\_ASBOX
+## ---------------------------------------------------- ##
+## Report this to lcd4linux-users@lists.sourceforge.net ##
+## ---------------------------------------------------- ##
+_ASBOX
+    ) |
+      sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+ has_serdisplib="true"
+else
+  has_serdisplib="false"
+fi
+
+done
+
+
 # check for python
 ## ------------------------
 ## Python file handling
@@ -5818,11 +5972,12 @@ for driver in $drivers; do
          PNG="yes"
          PPM="yes"
         ROUTERBOARD="yes"
+        SERDISPLIB="yes"
+         SIMPLELCD="yes"
          T6963="yes"
          Trefon="yes"
          USBLCD="yes"
          X11="yes"
-         SIMPLELCD="yes"
          ;;
       BeckmannEgle)
          BECKMANNEGLE=$val
@@ -5872,6 +6027,9 @@ for driver in $drivers; do
       RouterBoard)
          ROUTERBOARD=$val
          ;;
+      serdisplib)
+         SERDISPLIB=$val;
+         ;;
       SimpleLCD)
          SIMPLELCD=$val
          ;;
@@ -6099,6 +6257,22 @@ _ACEOF
 
 fi
 
+if test "$SERDISPLIB" = "yes"; then
+   if test "$has_serdisplib" = "true"; then
+      GRAPHIC="yes"
+      DRIVERS="$DRIVERS drv_serdisplib.o"
+      DRVLIBS="$DRVLIBS -L/usr/local/lib -lserdisp"
+
+cat >>confdefs.h <<\_ACEOF
+#define WITH_SERDISPLIB 1
+_ACEOF
+
+   else
+      { echo "$as_me:$LINENO: WARNING: serdisp.h not found: serdisplib driver disabled" >&5
+echo "$as_me: WARNING: serdisp.h not found: serdisplib driver disabled" >&2;}
+   fi
+fi
+
 if test "$SIMPLELCD" = "yes"; then
    TEXT="yes"
    SERIAL="yes"
index 185d97b64d2fe344181fb808e90b9df860b1c28c..342a2ea9e71375d88350c5bb18cdb406e9edc810 100644 (file)
@@ -64,6 +64,9 @@ AC_CHECK_HEADERS(linux/compiler.h linux/i2c.h linux/i2c-dev.h,[has_i2c="true"],[
 # endif
 ])
 
+# check for serdisplib
+AC_CHECK_HEADERS(serdisplib/serdisp.h, [has_serdisplib="true"], [has_serdisplib="false"])
+
 # check for python
 sinclude(python.m4)
 AC_PYTHON_DEVEL
index 2e60a0466a6419f4582efb36a1d5b0fbcdfa6322..ee5da934f0dcbe825cdb3c4f017d6d383519a54f 100644 (file)
@@ -31,7 +31,8 @@ AC_ARG_WITH(
   [                        BeckmannEgle, BWCT, CrystalFontz, Curses, Cwlinux,]
   [                        HD44780, LCDLinux, LCDTerm, M50530, MatrixOrbital,]
   [                        MilfordInstruments, Noritake, NULL, PNG, PPM,]
-  [                        RouterBoard, SimpleLCD, T6963, Trefon, USBLCD, X11],
+  [                        RouterBoard, serdisplib, SimpleLCD, T6963, Trefon,]
+  [                        USBLCD, X11],
   drivers=$withval, 
   drivers=all
 )
@@ -68,11 +69,12 @@ for driver in $drivers; do
          PNG="yes"
          PPM="yes"
         ROUTERBOARD="yes"
+        SERDISPLIB="yes"
+         SIMPLELCD="yes"
          T6963="yes"
          Trefon="yes"
          USBLCD="yes"
          X11="yes"
-         SIMPLELCD="yes"
          ;;
       BeckmannEgle)
          BECKMANNEGLE=$val
@@ -122,6 +124,9 @@ for driver in $drivers; do
       RouterBoard)
          ROUTERBOARD=$val
          ;;
+      serdisplib)
+         SERDISPLIB=$val;
+         ;;
       SimpleLCD)
          SIMPLELCD=$val
          ;;
@@ -279,6 +284,17 @@ if test "$ROUTERBOARD" = "yes"; then
    AC_DEFINE(WITH_ROUTERBOARD,1,[RouterBoard driver])
 fi
 
+if test "$SERDISPLIB" = "yes"; then
+   if test "$has_serdisplib" = "true"; then
+      GRAPHIC="yes"
+      DRIVERS="$DRIVERS drv_serdisplib.o"
+      DRVLIBS="$DRVLIBS -L/usr/local/lib -lserdisp"
+      AC_DEFINE(WITH_SERDISPLIB,1,[serdisplib driver])
+   else
+      AC_MSG_WARN(serdisp.h not found: serdisplib driver disabled)
+   fi
+fi
+
 if test "$SIMPLELCD" = "yes"; then
    TEXT="yes"
    SERIAL="yes"
diff --git a/drv.c b/drv.c
index 0347cdcd953dc94b57746e1f29796dbc4686fac5..9c1a1ba5d400e62400fac3f8828379bf4cbbc670 100644 (file)
--- a/drv.c
+++ b/drv.c
@@ -1,4 +1,4 @@
-/* $Id: drv.c,v 1.31 2005/05/08 04:32:43 reinelt Exp $
+/* $Id: drv.c,v 1.32 2005/05/10 13:20:14 reinelt Exp $
  *
  * new framework for display drivers
  *
@@ -23,6 +23,9 @@
  *
  *
  * $Log: drv.c,v $
+ * Revision 1.32  2005/05/10 13:20:14  reinelt
+ * added serdisplib driver
+ *
  * Revision 1.31  2005/05/08 04:32:43  reinelt
  * CodingStyle added and applied
  *
@@ -209,6 +212,7 @@ extern DRIVER drv_MilfordInstruments;
 extern DRIVER drv_Noritake;
 extern DRIVER drv_NULL;
 extern DRIVER drv_RouterBoard;
+extern DRIVER drv_serdisplib;
 extern DRIVER drv_SimpleLCD;
 extern DRIVER drv_T6963;
 extern DRIVER drv_Trefon;
@@ -267,6 +271,9 @@ DRIVER *Driver[] = {
 #ifdef WITH_ROUTERBOARD
     &drv_RouterBoard,
 #endif
+#ifdef WITH_SERDISPLIB
+    &drv_serdisplib,
+#endif
 #ifdef WITH_SIMPLELCD
     &drv_SimpleLCD,
 #endif
diff --git a/drv_serdisplib.c b/drv_serdisplib.c
new file mode 100644 (file)
index 0000000..6b44139
--- /dev/null
@@ -0,0 +1,272 @@
+/* $Id: drv_serdisplib.c,v 1.1 2005/05/10 13:20:14 reinelt Exp $
+ *
+ * driver for serdisplib displays
+ *
+ * Copyright (C) 2005 Michael Reinelt <reinelt@eunet.at>
+ * Copyright (C) 2005 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_serdisplib.c,v $
+ * Revision 1.1  2005/05/10 13:20:14  reinelt
+ * added serdisplib driver
+ *
+ */
+
+/* 
+ *
+ * exported fuctions:
+ *
+ * struct DRIVER drv_serdisplib
+ *
+ */
+
+#include "config.h"
+
+#include <stdlib.h>
+//#include <stdio.h>
+#include <string.h>
+//#include <errno.h>
+#include <unistd.h>
+//#include <termios.h>
+//#include <fcntl.h>
+//#include <sys/time.h>
+
+#include <serdisplib/serdisp.h>
+
+#include "debug.h"
+#include "cfg.h"
+#include "qprintf.h"
+#include "plugin.h"
+#include "widget.h"
+#include "widget_text.h"
+#include "widget_icon.h"
+#include "widget_bar.h"
+#include "drv.h"
+#include "drv_generic_graphic.h"
+
+#ifdef WITH_DMALLOC
+#include <dmalloc.h>
+#endif
+
+static char Name[] = "serdisplib";
+
+static serdisp_CONN_t *sdcd;
+static serdisp_t      *dd;
+
+
+/****************************************/
+/***  hardware dependant functions    ***/
+/****************************************/
+
+static void drv_SD_blit(const int row, const int col, const int height, const int width)
+{
+    int r, c;
+    long color;
+    
+    for (r = row; r < row + height; r++) {
+       for (c = col; c < col + width; c++) {
+           color = drv_generic_graphic_FB[r * LCOLS + c] ? SD_COL_BLACK : SD_COL_WHITE;
+           serdisp_setcolour(dd, r, c, color);
+       }
+    }
+
+    serdisp_update(dd);
+}
+
+
+static int drv_SD_start(const char *section)
+{
+    long version;
+    char *port, *model, *options, *s;
+    int TROWS, TCOLS;
+
+    version = serdisp_getversioncode();
+    info ("%s: header  version %d.%d", Name, SERDISP_VERSION_MAJOR, SERDISP_VERSION_MINOR);
+    info ("%s: library version %d.%d", Name, version>>8, version & 0xff);
+    
+    port = cfg_get(section, "Port", NULL);
+    if (port == NULL || *port == '\0') {
+       error("%s: no '%s.Port' entry from %s", Name, section, cfg_source());
+       return -1;
+    }
+    
+    /* opening the output device */             
+    sdcd = SDCONN_open(port);
+    if (sdcd == NULL) {        
+       error ("%s: open(%s) failed: %s", Name, port, sd_geterrormsg());
+       return -1;
+    }
+    
+
+    model = cfg_get(section, "Model", "");
+    if (model == NULL || *model == '\0') {
+       error("%s: no '%s.Model' entry from %s", Name, section, cfg_source());
+       return -1;
+    }
+    info("%s: using model '%s'", Name, model);
+
+    options = cfg_get(section, "Options", "");
+    info("%s: using options '%s'", Name, options);
+
+    /* opening and initialising the display */
+    dd = serdisp_init(sdcd, model, options);
+    if (dd == NULL) {
+       error ("%s: init(%s, %s, %s) failed: %s", Name, port, model, options, sd_geterrormsg());
+       SDCONN_close(sdcd);
+       return -1;
+    }
+
+    DROWS = serdisp_getheight(dd);
+    DCOLS = serdisp_getwidth(dd);
+    info ("%s: display size %dx%d", Name, DCOLS, DROWS);
+
+    XRES = -1;
+    YRES = -1;
+    s = cfg_get(section, "Font", "6x8");
+    if (s == NULL || *s == '\0') {
+       error("%s: no '%s.Font' entry from %s", Name, section, cfg_source());
+       return -1;
+    }
+    if (sscanf(s, "%dx%d", &XRES, &YRES) != 2 || XRES < 1 || YRES < 1) {
+       error("%s: bad Font '%s' from %s", Name, s, cfg_source());
+       return -1;
+    }
+    
+    /* Fixme: provider other fonts someday... */
+    if (XRES != 6 && YRES != 8) {
+       error("%s: bad Font '%s' from %s (only 6x8 at the moment)", Name, s, cfg_source());
+       return -1;
+    }
+    
+    TROWS = DROWS / YRES;      /* text rows */
+    TCOLS = DCOLS / XRES;      /* text cols */
+    
+    /* clear display */
+    serdisp_clear(dd);
+    
+    return 0;
+}
+
+
+/****************************************/
+/***            plugins               ***/
+/****************************************/
+
+/* none at the moment... */
+/* Fixme: SD_FEATURE's */
+
+
+/****************************************/
+/***        widget callbacks          ***/
+/****************************************/
+
+
+/* using drv_generic_graphic_draw(W) */
+/* using drv_generic_graphic_icon_draw(W) */
+/* using drv_generic_graphic_bar_draw(W) */
+
+
+/****************************************/
+/***        exported functions        ***/
+/****************************************/
+
+
+/* list models */
+int drv_SD_list(void)
+{
+    printf("%s", "any");
+    return 0;
+}
+
+
+/* initialize driver & display */
+int drv_SD_init(const char *section, const int quiet)
+{
+    WIDGET_CLASS wc;
+    int ret;
+
+    /* real worker functions */
+    drv_generic_graphic_real_blit = drv_SD_blit;
+
+    /* start display */
+    if ((ret = drv_SD_start(section)) != 0)
+       return ret;
+
+    /* initialize generic graphic driver */
+    if ((ret = drv_generic_graphic_init(section, Name)) != 0)
+       return ret;
+
+    if (!quiet) {
+       char buffer[40];
+       qprintf(buffer, sizeof(buffer), "%s %dx%d", Name, DCOLS, DROWS);
+       if (drv_generic_graphic_greet(buffer, NULL)) {
+           sleep(3);
+           drv_generic_graphic_clear();
+       }
+    }
+
+    /* register text widget */
+    wc = Widget_Text;
+    wc.draw = drv_generic_graphic_draw;
+    widget_register(&wc);
+
+    /* register icon widget */
+    wc = Widget_Icon;
+    wc.draw = drv_generic_graphic_icon_draw;
+    widget_register(&wc);
+
+    /* register bar widget */
+    wc = Widget_Bar;
+    wc.draw = drv_generic_graphic_bar_draw;
+    widget_register(&wc);
+
+    /* register plugins */
+    /* none at the moment... */
+    /* Fixme: SD_FEATURE's */
+
+    return 0;
+}
+
+
+/* close driver & display */
+int drv_SD_quit(const int quiet)
+{
+
+    info("%s: shutting down.", Name);
+
+    drv_generic_graphic_clear();
+
+    if (!quiet) {
+       drv_generic_graphic_greet("goodbye!", NULL);
+    }
+
+    drv_generic_graphic_quit();
+
+    serdisp_quit(dd);
+
+    return (0);
+}
+
+
+DRIVER drv_serdisplib = {
+  name:Name,
+  list:drv_SD_list,
+  init:drv_SD_init,
+  quit:drv_SD_quit,
+};
index c089d522554a74b2d01fb7fba2ebcec050940cf5..d2a152f4ec573730c6e31ce04619947793e0cd13 100644 (file)
@@ -1,3 +1,12 @@
+Display SerDispLib {
+    Driver 'serdisplib'
+    Port 'PAR:/dev/parports/0'
+    #Port '/dev/tts/0' 
+    Model 'OPTREX323'
+    Options ''
+}
+
+
 Display Trefon {
     Driver 'TREFON'
     Size '16x2'
@@ -740,7 +749,8 @@ Layout testMySQL {
 }
 
 
-Display 'LCD-Linux'
+Display 'SerDispLib'
+#Display 'LCD-Linux'
 #Display 'LK204'
 #Display 'MI240'
 #Display 'CW12232'