aboutsummaryrefslogtreecommitdiffstats
path: root/drv_Crystalfontz.c
diff options
context:
space:
mode:
Diffstat (limited to 'drv_Crystalfontz.c')
-rw-r--r--drv_Crystalfontz.c96
1 files changed, 90 insertions, 6 deletions
diff --git a/drv_Crystalfontz.c b/drv_Crystalfontz.c
index 0833629..9b11587 100644
--- a/drv_Crystalfontz.c
+++ b/drv_Crystalfontz.c
@@ -1,9 +1,9 @@
-/* $Id: drv_Crystalfontz.c 781 2007-03-13 12:39:11Z michael $
- * $URL: https://ssl.bulix.org/svn/lcd4linux/branches/0.10.1/drv_Crystalfontz.c $
+/* $Id: drv_Crystalfontz.c 906 2008-12-23 14:55:32Z michael $
+ * $URL: https://ssl.bulix.org/svn/lcd4linux/trunk/drv_Crystalfontz.c $
*
* new style driver for Crystalfontz display modules
*
- * Copyright (C) 1999, 2000 Michael Reinelt <reinelt@eunet.at>
+ * Copyright (C) 1999, 2000 Michael Reinelt <michael@reinelt.co.at>
* Copyright (C) 2004 The LCD4Linux Team <lcd4linux-devel@users.sourceforge.net>
*
* This file is part of LCD4Linux.
@@ -353,6 +353,86 @@ static void drv_CF_send(const unsigned char cmd, const unsigned char len, const
}
+/* check http://www.crystalfontz.com/products/634/cgrom.html */
+/* HINT: the input should using the ISO-8859-1 charset */
+void convertToCgrom2(char *str)
+{
+ unsigned int i;
+ for (i = 0; i < strlen(str); i++) {
+ switch ((unsigned char) str[i]) {
+ case 0x5d: /* ] */
+ str[i] = 252;
+ break;
+ case 0x5b: /* [ */
+ str[i] = 250;
+ break;
+ case 0x24: /* $ */
+ str[i] = 162;
+ break;
+ case 0x40: /* @ */
+ str[i] = 160;
+ break;
+ case 0x5c: /* \ */
+ str[i] = 251;
+ break;
+ case 0x7b: /* { */
+ str[i] = 253;
+ break;
+ case 0x7d: /* } */
+ str[i] = 255;
+ break;
+ case 0x7c:
+ str[i] = 254; /* pipe */
+ break;
+ case 0x27:
+ case 0x60:
+ case 0xB4:
+ str[i] = 39; /* ' */
+ break;
+ case 0xe8:
+ str[i] = 164; /* french e */
+ break;
+ case 0xe9:
+ str[i] = 165; /* french e */
+ break;
+ case 0xc8:
+ str[i] = 197; /* french E */
+ break;
+ case 0xc9:
+ str[i] = 207; /* french E */
+ break;
+
+ case 0xe4:
+ str[i] = 123; /* small german ae */
+ break;
+ case 0xc4:
+ str[i] = 91; /* big german ae */
+ break;
+ case 0xf6:
+ str[i] = 124; /* small german oe */
+ break;
+ case 0xd6:
+ str[i] = 92; /* big german oe */
+ break;
+ case 0xfc:
+ str[i] = 126; /* small german ue */
+ break;
+ case 0xdc:
+ str[i] = 94; /* big german ue */
+ break;
+ case 0x5e: /* ^ */
+ str[i] = 253;
+ break;
+ case 0x5f: /* _ */
+ str[i] = 254;
+ break;
+ default:
+ break;
+ }
+ }
+}
+
+
static void drv_CF_write1(const int row, const int col, const char *data, const int len)
{
char cmd[3] = "\021xy"; /* set cursor position */
@@ -365,6 +445,11 @@ static void drv_CF_write1(const int row, const int col, const char *data, const
drv_generic_serial_write(cmd, 3);
}
+ /* Model 634 and 632 use another ROM */
+ if (Model == 4 || Model == 2) {
+ convertToCgrom2((char *) data);
+ }
+
drv_generic_serial_write(data, len);
}
@@ -411,7 +496,6 @@ static void drv_CF_write3(const int row, const int col, const char *data, const
memcpy(cmd + 2, data, l);
drv_CF_send(31, l + 2, cmd);
-
}
@@ -531,7 +615,7 @@ static int drv_CF_keypad(const int num)
case 2:
break;
case 3:
- if ((num < 8) || ((num > 12) && (num < 17)))
+ if ((num < 7) || ((num > 12) && (num < 17)))
val = WIDGET_KEY_PRESSED;
else
val = WIDGET_KEY_RELEASED;
@@ -973,7 +1057,7 @@ int drv_CF_init(const char *section, const int quiet)
WIDGET_CLASS wc;
int ret;
- info("%s: %s", Name, "$Rev: 781 $");
+ info("%s: %s", Name, "$Rev: 906 $");
/* start display */
if ((ret = drv_CF_start(section)) != 0) {