diff options
Diffstat (limited to '')
| -rw-r--r-- | HD44780.c | 65 | ||||
| -rw-r--r-- | config.h.in | 7 | ||||
| -rwxr-xr-x | configure | 220 | 
3 files changed, 63 insertions, 229 deletions
@@ -1,9 +1,13 @@ -/* $Id: HD44780.c,v 1.29 2003/07/24 04:48:09 reinelt Exp $ +/* $Id: HD44780.c,v 1.30 2003/08/12 05:10:31 reinelt Exp $   *   * driver for display modules based on the HD44780 chip   *   * Copyright 1999, 2000 by Michael Reinelt (reinelt@eunet.at)   * + * Modification for 4-Bit mode + * 2003 Martin Hejl (martin@hejl.de) + * + *   * This program 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) @@ -20,6 +24,9 @@   *   *   * $Log: HD44780.c,v $ + * Revision 1.30  2003/08/12 05:10:31  reinelt + * first version of HD44780 4Bit-Mode patch + *   * Revision 1.29  2003/07/24 04:48:09  reinelt   * 'soft clear' needed for virtual rows   * @@ -158,7 +165,6 @@  #include <stdlib.h>  #include <stdio.h> -#include <string.h>  #include "debug.h"  #include "cfg.h" @@ -171,6 +177,20 @@  #define YRES 8  #define CHARS 8 + + +/* low level communication timings [nanoseconds] + * as these values differ from spec to spec, + * we use the worst-case values. + */ + +#define T_CYCLE 600 // Enable cycle time +#define T_PW    400 // Enable pulse width +#define T_AS     20 // Address setup time +#define T_H      40 // Data hold time +// Fixme: hejl: genau verdreht?? + +  static LCD Lcd;  static char Txt[4][40]; @@ -182,6 +202,41 @@ static unsigned char SIGNAL_ENABLE;  static unsigned char SIGNAL_GPO; +static void HD_nibble(unsigned char nibble) +{ + +  // clear ENABLE +  // put data on DB1..DB4 +  // nibble already contains RS bit! +  parport_data(nibble); + +  // Address set-up time +  ndelay(T_AS); +   +  // rise ENABLE +  parport_data(nibble | SIGNAL_ENABLE); +   +  // Enable pulse width +  ndelay(T_PW); + +  // lower ENABLE +  parport_data(nibble); +} + + +static void HD_byte (unsigned char data, unsigned char RS) +{ +  // send high nibble of the data +  HD_nibble (((data>>4)&0x0f)|RS); + +  // Make sure we honour T_CYCLE +  ndelay(T_CYCLE-T_AS-T_PW); + +  // send low nibble of the data +  HD_nibble((data&0x0f)|RS); +} + +  static void HD_command (unsigned char cmd, int delay)  { @@ -192,11 +247,10 @@ static void HD_command (unsigned char cmd, int delay)    parport_control (SIGNAL_RW | SIGNAL_RS, 0);    // Address set-up time -  ndelay(40); +  ndelay(T_AS);    // send command -  // Enable cycle time = 230ns -  parport_toggle (SIGNAL_ENABLE, 1, 230); +  parport_toggle (SIGNAL_ENABLE, 1, T_PW);    // wait for command completion    udelay(delay); @@ -413,6 +467,7 @@ int HD_flush (void)  int HD_quit (void)  { +  info("HD44780: shutting down.");    return parport_close();  } diff --git a/config.h.in b/config.h.in index df489ba..98a6759 100644 --- a/config.h.in +++ b/config.h.in @@ -69,10 +69,6 @@  /* Define to 1 if you have the `putenv' function. */  #undef HAVE_PUTENV -/* Define to 1 if your system has a GNU libc compatible `realloc' function, -   and to 0 otherwise. */ -#undef HAVE_REALLOC -  /* Define to 1 if you have the `select' function. */  #undef HAVE_SELECT @@ -292,9 +288,6 @@  /* Define to `int' if <sys/types.h> does not define. */  #undef pid_t -/* Define to rpl_realloc if the replacement function should be used. */ -#undef realloc -  /* Define to `unsigned' if <sys/types.h> does not define. */  #undef size_t @@ -7144,8 +7144,11 @@ echo "${ECHO_T}$ac_cv_prog_gcc_traditional" >&6    fi  fi +  #removed for uClibc compatibility  #AC_FUNC_MALLOC +#AC_FUNC_REALLOC +  echo "$as_me:$LINENO: checking for working memcmp" >&5  echo $ECHO_N "checking for working memcmp... $ECHO_C" >&6  if test "${ac_cv_func_memcmp_working+set}" = set; then @@ -7222,223 +7225,6 @@ echo "${ECHO_T}$ac_cv_func_memcmp_working" >&6  test $ac_cv_func_memcmp_working = no && LIBOBJS="$LIBOBJS memcmp.$ac_objext" -for ac_header in stdlib.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 -#line $LINENO "configure" -/* 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>&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.$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 -#line $LINENO "configure" -/* 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 -  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 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 preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} -    ( -      cat <<\_ASBOX -## ------------------------------------ ## -## Report this to bug-autoconf@gnu.org. ## -## ------------------------------------ ## -_ASBOX -    ) | -      sed "s/^/$as_me: WARNING:     /" >&2 -    ;; -  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: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} -    ( -      cat <<\_ASBOX -## ------------------------------------ ## -## Report this to bug-autoconf@gnu.org. ## -## ------------------------------------ ## -_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 - -fi - -done - -echo "$as_me:$LINENO: checking for GNU libc compatible realloc" >&5 -echo $ECHO_N "checking for GNU libc compatible realloc... $ECHO_C" >&6 -if test "${ac_cv_func_realloc_0_nonnull+set}" = set; then -  echo $ECHO_N "(cached) $ECHO_C" >&6 -else -  if test "$cross_compiling" = yes; then -  ac_cv_func_realloc_0_nonnull=no -else -  cat >conftest.$ac_ext <<_ACEOF -#line $LINENO "configure" -/* confdefs.h.  */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h.  */ -#if STDC_HEADERS || HAVE_STDLIB_H -# include <stdlib.h> -#else -char *realloc (); -#endif - -int -main () -{ -exit (realloc (0, 0) ? 0 : 1); -  ; -  return 0; -} -_ACEOF -rm -f conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 -  (eval $ac_link) 2>&5 -  ac_status=$? -  echo "$as_me:$LINENO: \$? = $ac_status" >&5 -  (exit $ac_status); } && { ac_try='./conftest$ac_exeext' -  { (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_cv_func_realloc_0_nonnull=yes -else -  echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -ac_cv_func_realloc_0_nonnull=no -fi -rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi -fi -echo "$as_me:$LINENO: result: $ac_cv_func_realloc_0_nonnull" >&5 -echo "${ECHO_T}$ac_cv_func_realloc_0_nonnull" >&6 -if test $ac_cv_func_realloc_0_nonnull = yes; then - -cat >>confdefs.h <<\_ACEOF -#define HAVE_REALLOC 1 -_ACEOF - -else -  cat >>confdefs.h <<\_ACEOF -#define HAVE_REALLOC 0 -_ACEOF - -   LIBOBJS="$LIBOBJS realloc.$ac_objext" - -cat >>confdefs.h <<\_ACEOF -#define realloc rpl_realloc -_ACEOF - -fi - - - -  for ac_header in sys/select.h sys/socket.h  do  | 
