aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--HD44780.c65
-rw-r--r--config.h.in7
-rwxr-xr-xconfigure220
3 files changed, 63 insertions, 229 deletions
diff --git a/HD44780.c b/HD44780.c
index a35d7b5..3aedffb 100644
--- a/HD44780.c
+++ b/HD44780.c
@@ -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
diff --git a/configure b/configure
index dd9a1c6..2135784 100755
--- a/configure
+++ b/configure
@@ -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