From f4dd3dfd7a634ab0cf3b371f3826c0a73d334299 Mon Sep 17 00:00:00 2001 From: reinelt <> Date: Fri, 19 Mar 2004 09:17:46 +0000 Subject: [lcd4linux @ 2004-03-19 09:17:46 by reinelt] removed the extra 'goto' function, row and col are additional parameters of the write() function now. --- drv_Crystalfontz.c | 80 ++++++++++++++++++++++------------------------------- drv_Cwlinux.c | 17 ++++++++---- drv_HD44780.c | 13 ++++++--- drv_M50530.c | 34 +++++++++++++---------- drv_MatrixOrbital.c | 15 +++++++--- drv_USBLCD.c | 36 ++++++++++++++---------- drv_generic_text.c | 26 +++++++++-------- drv_generic_text.h | 10 +++++-- 8 files changed, 128 insertions(+), 103 deletions(-) diff --git a/drv_Crystalfontz.c b/drv_Crystalfontz.c index 7b7889d..164141e 100644 --- a/drv_Crystalfontz.c +++ b/drv_Crystalfontz.c @@ -1,4 +1,4 @@ -/* $Id: drv_Crystalfontz.c,v 1.13 2004/03/03 03:41:02 reinelt Exp $ +/* $Id: drv_Crystalfontz.c,v 1.14 2004/03/19 09:17:46 reinelt Exp $ * * new style driver for Crystalfontz display modules * @@ -23,6 +23,11 @@ * * * $Log: drv_Crystalfontz.c,v $ + * Revision 1.14 2004/03/19 09:17:46 reinelt + * + * removed the extra 'goto' function, row and col are additional parameters + * of the write() function now. + * * Revision 1.13 2004/03/03 03:41:02 reinelt * Crystalfontz Contrast issue fixed * @@ -105,7 +110,6 @@ static char Name[]="Crystalfontz"; static int Model; static int Protocol; -static int Row, Col; // ring buffer for bytes received from the display static unsigned char RingBuffer[256]; @@ -328,56 +332,41 @@ static void drv_CF_send (int cmd, int len, char *data) } -static void drv_CF_write1 (unsigned char *string, int len) +static void drv_CF_write1 (int row, int col, unsigned char *data, int len) { - drv_generic_serial_write (string, len); + char cmd[3]="\021xy"; // set cursor position + + if (row==0 && col==0) { + drv_generic_serial_write ("\001", 1); // cursor home + } else { + cmd[1]=(char)col; + cmd[2]=(char)row; + drv_generic_serial_write (cmd, 3); + } + + drv_generic_serial_write (data, len); } -static void drv_CF_write2 (unsigned char *string, int len) +static void drv_CF_write2 (int row, int col, unsigned char *data, int len) { // limit length - if (Col+len>16) len=16-Col; + if (col+len>16) len=16-col; if (len<0) len=0; // sanity check - if (Row>=2 || Col+len>16) { + if (row>=2 || col+len>16) { error ("%s: internal error: write outside linebuffer bounds!", Name); return; } - memcpy (Line+16*Row+Col, string, len); - drv_CF_send (7+Row, 16, Line+16*Row); -} - - -static void drv_CF_write3 (unsigned char *string, int len) -{ - debug ("write3(<%.*s>,%d)", len, string, len); - - + memcpy (Line+16*row+col, data, len); + drv_CF_send (7+row, 16, Line+16*row); } -static void drv_CF_goto1 (int row, int col) -{ - char cmd[3]="\021xy"; // set cursor position - - if (row==0 && col==0) { - drv_CF_write1("\001", 1); // cursor home - } else { - cmd[1]=(char)col; - cmd[2]=(char)row; - drv_CF_write1(cmd, 3); - } -} - -static void drv_CF_goto23 (int row, int col) +static void drv_CF_write3 (int row, int col, unsigned char *data, int len) { - // as the 633 does not have random access to the display content, - // and the 631 needs coordinates with random access, - // we just store the needed cursor position - Row=row; - Col=col; + debug ("write3(<%.*s>,%d)", len, data, len); } @@ -387,8 +376,8 @@ static void drv_CF_defchar1 (int ascii, unsigned char *buffer) // user-defineable chars start at 128, but are defined at 0 cmd[1]=(char)(ascii-CHAR0); - drv_CF_write1 (cmd, 2); - drv_CF_write1 (buffer, 8); + drv_generic_serial_write (cmd, 2); + drv_generic_serial_write (buffer, 8); } @@ -422,7 +411,7 @@ static int drv_CF_contrast (int contrast) if (Contrast > 100) Contrast = 100; buffer[0] = 15; // Set LCD Contrast buffer[1] = Contrast; - drv_CF_write1 (buffer, 2); + drv_generic_serial_write (buffer, 2); break; case 2: @@ -457,7 +446,7 @@ static int drv_CF_backlight (int backlight) case 1: buffer[0] = 14; // Set LCD Backlight buffer[1] = Backlight; - drv_CF_write1 (buffer, 2); + drv_generic_serial_write (buffer, 2); break; case 2: @@ -611,10 +600,10 @@ static int drv_CF_scan_DOW (unsigned char index) // init sequences for 626, 632, 634, 636 static void drv_CF_start_1 (void) { - drv_CF_write1 ("\014", 1); // Form Feed (Clear Display) - drv_CF_write1 ("\004", 1); // hide cursor - drv_CF_write1 ("\024", 1); // scroll off - drv_CF_write1 ("\030", 1); // wrap off + drv_generic_serial_write ("\014", 1); // Form Feed (Clear Display) + drv_generic_serial_write ("\004", 1); // hide cursor + drv_generic_serial_write ("\024", 1); // scroll off + drv_generic_serial_write ("\030", 1); // wrap off } @@ -852,14 +841,12 @@ int drv_CF_init (char *section) case 1: CHAR0 = 128; // ASCII of first user-defineable char GOTO_COST = 3; // number of bytes a goto command requires - drv_generic_text_real_goto = drv_CF_goto1; drv_generic_text_real_write = drv_CF_write1; drv_generic_text_real_defchar = drv_CF_defchar1; break; case 2: CHAR0 = 0; // ASCII of first user-defineable char GOTO_COST = 20; // there is no goto on 633 - drv_generic_text_real_goto = drv_CF_goto23; drv_generic_text_real_write = drv_CF_write2; drv_generic_text_real_defchar = drv_CF_defchar23; break; @@ -867,7 +854,6 @@ int drv_CF_init (char *section) CHAR0 = 0; // ASCII of first user-defineable char // Fixme: GOTO_COST = 3; // number of bytes a goto command requires - drv_generic_text_real_goto = drv_CF_goto23; drv_generic_text_real_write = drv_CF_write2; drv_generic_text_real_defchar = drv_CF_defchar23; break; diff --git a/drv_Cwlinux.c b/drv_Cwlinux.c index 9757069..349aa54 100644 --- a/drv_Cwlinux.c +++ b/drv_Cwlinux.c @@ -1,4 +1,4 @@ -/* $Id: drv_Cwlinux.c,v 1.3 2004/02/14 11:56:17 reinelt Exp $ +/* $Id: drv_Cwlinux.c,v 1.4 2004/03/19 09:17:46 reinelt Exp $ * * new style driver for Cwlinux display modules * @@ -23,6 +23,11 @@ * * * $Log: drv_Cwlinux.c,v $ + * Revision 1.4 2004/03/19 09:17:46 reinelt + * + * removed the extra 'goto' function, row and col are additional parameters + * of the write() function now. + * * Revision 1.3 2004/02/14 11:56:17 reinelt * M50530 driver ported * changed lots of 'char' to 'unsigned char' @@ -95,12 +100,15 @@ static MODEL Models[] = { // *** hardware dependant functions *** // **************************************** -static void drv_CW_goto (int row, int col) +static void drv_CW_write (int row, int col, unsigned char *data, int len) { char cmd[6]="\376Gxy\375"; + cmd[2]=(char)col; cmd[3]=(char)row; - drv_generic_serial_write(cmd, 5); + drv_generic_serial_write (cmd, 5); + + drv_generic_serial_write (data, len); } @@ -279,8 +287,7 @@ int drv_CW_init (char *section) GOTO_COST = 3; // number of bytes a goto command requires // real worker functions - drv_generic_text_real_write = drv_generic_serial_write; - drv_generic_text_real_goto = drv_CW_goto; + drv_generic_text_real_write = drv_CW_write; switch (Protocol) { case 1: diff --git a/drv_HD44780.c b/drv_HD44780.c index 3b1abec..ba5c912 100644 --- a/drv_HD44780.c +++ b/drv_HD44780.c @@ -1,4 +1,4 @@ -/* $Id: drv_HD44780.c,v 1.16 2004/03/11 06:39:58 reinelt Exp $ +/* $Id: drv_HD44780.c,v 1.17 2004/03/19 09:17:46 reinelt Exp $ * * new style driver for HD44780-based displays * @@ -29,6 +29,11 @@ * * * $Log: drv_HD44780.c,v $ + * Revision 1.17 2004/03/19 09:17:46 reinelt + * + * removed the extra 'goto' function, row and col are additional parameters + * of the write() function now. + * * Revision 1.16 2004/03/11 06:39:58 reinelt * big patch from Martin: * - reuse filehandles @@ -480,9 +485,10 @@ static void drv_HD_goto (int row, int col) } -static void drv_HD_write (unsigned char *string, int len) +static void drv_HD_write (int row, int col, unsigned char *data, int len) { - drv_HD_data (currController, string, len, T_EXEC); + drv_HD_goto (row, col); + drv_HD_data (currController, data, len, T_EXEC); } @@ -730,7 +736,6 @@ int drv_HD_init (char *section) // real worker functions drv_generic_text_real_write = drv_HD_write; - drv_generic_text_real_goto = drv_HD_goto; drv_generic_text_real_defchar = drv_HD_defchar; diff --git a/drv_M50530.c b/drv_M50530.c index 7361855..929e527 100644 --- a/drv_M50530.c +++ b/drv_M50530.c @@ -1,4 +1,4 @@ -/* $Id: drv_M50530.c,v 1.2 2004/02/15 21:43:43 reinelt Exp $ +/* $Id: drv_M50530.c,v 1.3 2004/03/19 09:17:46 reinelt Exp $ * * new style driver for M50530-based displays * @@ -23,6 +23,11 @@ * * * $Log: drv_M50530.c,v $ + * Revision 1.3 2004/03/19 09:17:46 reinelt + * + * removed the extra 'goto' function, row and col are additional parameters + * of the write() function now. + * * Revision 1.2 2004/02/15 21:43:43 reinelt * T6963 driver nearly finished * framework for graphic displays done @@ -122,31 +127,33 @@ static void drv_M5_command (unsigned int cmd, int delay) } -static void drv_M5_write (unsigned char *string, int len) +static void drv_M5_write (int row, int col, unsigned char *data, int len) { unsigned int cmd; - + unsigned int pos; + + pos=row*48+col; + if (row>3) pos-=168; + drv_M5_command (0x300|pos, 20); + while (len--) { - cmd=*string++; + cmd=*data++; drv_M5_command (0x100|cmd, 20); } } -static void drv_M5_goto (int row, int col) -{ - int pos=row*48+col; - if (row>3) pos-=168; - drv_M5_command (0x300|pos, 20); -} - - static void drv_M5_defchar (int ascii, unsigned char *buffer) { + int i; + drv_M5_command (0x300+192+8*(ascii-CHAR0), 20); + // Fixme: looks like the M50530 cannot control the bottom line // therefore we have only 7 bytes here - drv_M5_write (buffer, 7); + for (i=0; i<7; i++) { + drv_M5_command (0x100|buffer[i], 20); + } } @@ -283,7 +290,6 @@ int drv_M5_init (char *section) // real worker functions drv_generic_text_real_write = drv_M5_write; - drv_generic_text_real_goto = drv_M5_goto; drv_generic_text_real_defchar = drv_M5_defchar; diff --git a/drv_MatrixOrbital.c b/drv_MatrixOrbital.c index 29e2fd2..899b124 100644 --- a/drv_MatrixOrbital.c +++ b/drv_MatrixOrbital.c @@ -1,4 +1,4 @@ -/* $Id: drv_MatrixOrbital.c,v 1.20 2004/02/14 11:56:17 reinelt Exp $ +/* $Id: drv_MatrixOrbital.c,v 1.21 2004/03/19 09:17:46 reinelt Exp $ * * new style driver for Matrix Orbital serial display modules * @@ -23,6 +23,11 @@ * * * $Log: drv_MatrixOrbital.c,v $ + * Revision 1.21 2004/03/19 09:17:46 reinelt + * + * removed the extra 'goto' function, row and col are additional parameters + * of the write() function now. + * * Revision 1.20 2004/02/14 11:56:17 reinelt * M50530 driver ported * changed lots of 'char' to 'unsigned char' @@ -187,12 +192,15 @@ static MODEL Models[] = { // *** hardware dependant functions *** // **************************************** -static void drv_MO_goto (int row, int col) +static void drv_MO_write (int row, int col, unsigned char *data, int len) { char cmd[5]="\376Gyx"; + cmd[2]=(char)col+1; cmd[3]=(char)row+1; drv_generic_serial_write(cmd,4); + + drv_generic_serial_write (data, len); } @@ -468,8 +476,7 @@ int drv_MO_init (char *section) GOTO_COST=4; // number of bytes a goto command requires // real worker functions - drv_generic_text_real_write = drv_generic_serial_write; - drv_generic_text_real_goto = drv_MO_goto; + drv_generic_text_real_write = drv_MO_write; drv_generic_text_real_defchar = drv_MO_defchar; diff --git a/drv_USBLCD.c b/drv_USBLCD.c index 2522388..69273af 100644 --- a/drv_USBLCD.c +++ b/drv_USBLCD.c @@ -1,4 +1,4 @@ -/* $Id: drv_USBLCD.c,v 1.1 2004/02/15 08:22:47 reinelt Exp $ +/* $Id: drv_USBLCD.c,v 1.2 2004/03/19 09:17:46 reinelt Exp $ * * new style driver for USBLCD displays * @@ -26,6 +26,11 @@ * * * $Log: drv_USBLCD.c,v $ + * Revision 1.2 2004/03/19 09:17:46 reinelt + * + * removed the extra 'goto' function, row and col are additional parameters + * of the write() function now. + * * Revision 1.1 2004/02/15 08:22:47 reinelt * ported USBLCD driver to NextGeneration * added drv_M50530.c (I forgot yesterday, sorry) @@ -109,28 +114,30 @@ static void drv_UL_command (unsigned char cmd) } -static void drv_UL_write (unsigned char *string, int len) +static void drv_UL_write (int row, int col, unsigned char *data, int len) { + int pos=(row%2)*64+(row/2)*20+col; + drv_UL_command (0x80|pos); + while (len--) { - if(*string==0) *BufPtr++=*string; - *BufPtr++=*string++; + if(*data==0) *BufPtr++=*data; + *BufPtr++=*data++; } - drv_UL_send(); -} - -static void drv_UL_goto (int row, int col) -{ - int pos=(row%2)*64+(row/2)*20+col; - drv_UL_command (0x80|pos); + drv_UL_send(); } - static void drv_UL_defchar (int ascii, unsigned char *buffer) { + int i; + drv_UL_command (0x40|8*ascii); - drv_UL_write (buffer, 8); - // drv_UL_write() will call drv_UL_send(), so don't call it here! + + for (i=0; i<8; i++) { + *BufPtr++ = *buffer++; + } + + drv_UL_send(); } @@ -283,7 +290,6 @@ int drv_UL_init (char *section) // real worker functions drv_generic_text_real_write = drv_UL_write; - drv_generic_text_real_goto = drv_UL_goto; drv_generic_text_real_defchar = drv_UL_defchar; diff --git a/drv_generic_text.c b/drv_generic_text.c index 3fd5666..bb28a89 100644 --- a/drv_generic_text.c +++ b/drv_generic_text.c @@ -1,4 +1,4 @@ -/* $Id: drv_generic_text.c,v 1.12 2004/03/03 03:47:04 reinelt Exp $ +/* $Id: drv_generic_text.c,v 1.13 2004/03/19 09:17:46 reinelt Exp $ * * generic driver helper for text-based displays * @@ -23,6 +23,11 @@ * * * $Log: drv_generic_text.c,v $ + * Revision 1.13 2004/03/19 09:17:46 reinelt + * + * removed the extra 'goto' function, row and col are additional parameters + * of the write() function now. + * * Revision 1.12 2004/03/03 03:47:04 reinelt * big patch from Martin Hejl: * - use qprintf() where appropriate @@ -211,7 +216,7 @@ int drv_generic_text_draw (WIDGET *W) { WIDGET_TEXT *Text=W->data; char *txt, *fb1, *fb2; - int row, col, len, end; + int row, col, col0, len, end; row=W->row; col=W->col; @@ -232,7 +237,7 @@ int drv_generic_text_draw (WIDGET *W) for (; col<=end && coldata; - int row, col, len, res, max, val1, val2; + int row, col, col0, len, res, max, val1, val2; int c, n, s; DIRECTION dir; @@ -639,7 +643,7 @@ int drv_generic_text_bar_draw (WIDGET *W) for (col=0; col