diff options
Diffstat (limited to 'drv_Crystalfontz.c')
-rw-r--r-- | drv_Crystalfontz.c | 96 |
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) { |