From 024363f46c5257d74e90b4bd737772b70049f4da Mon Sep 17 00:00:00 2001 From: reinelt Date: Wed, 20 Apr 2005 05:49:21 +0000 Subject: [lcd4linux @ 2005-04-20 05:49:21 by reinelt] Changed the code to add some VT100-compatible control sequences (see the comments above). A configfile boolean option 'VT100_Support' (default to 1) indicate if the display in used support these control-sequences or not. git-svn-id: https://ssl.bulix.org/svn/lcd4linux/trunk@530 3ae390bd-cb1e-0410-b409-cd5a39f66f1f --- drv_SimpleLCD.c | 169 +++++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 125 insertions(+), 44 deletions(-) diff --git a/drv_SimpleLCD.c b/drv_SimpleLCD.c index eb449a6..017b5da 100644 --- a/drv_SimpleLCD.c +++ b/drv_SimpleLCD.c @@ -1,24 +1,6 @@ -/* $Id: drv_SimpleLCD.c,v 1.2 2005/04/02 05:28:58 reinelt Exp $ +/* $Id: drv_SimpleLCD.c,v 1.3 2005/04/20 05:49:21 reinelt Exp $ * * driver for a simple serial terminal. - * This driver simply send out caracters on the serial port, without any - * formatting instructions for a particular LCD device. - * This is useful for custom boards of for very simple LCD. - * - * I use it for tests on a custom-made board based on a AVR microcontroler - * and also for driver a Point-of-Sale text-only display. - * I assume the following : - * - CR (0x0d) Return to the begining of the line without erasing, - * - LF (0x0a) Initiate a new line (but without sending the cursor to - * the begining of the line) - * - BS (0x08) Erase the previous caracter on the line. - * - It's not possible to return to the first line. Thus a back buffer is used - * in this driver. - * - * The code come mostly taken from the LCDTerm driver in LCD4Linux, from - * Michaels Reinelt, many thanks to him. - * - * This driver is released under the GPL. * * Copyright (C) 2005 Julien Aube * Copyright (C) 2005 The LCD4Linux Team @@ -40,6 +22,11 @@ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * * $Log: drv_SimpleLCD.c,v $ + * Revision 1.3 2005/04/20 05:49:21 reinelt + * Changed the code to add some VT100-compatible control sequences (see the comments above). + * A configfile boolean option 'VT100_Support' (default to 1) indicate if the display in + * used support these control-sequences or not. + * * Revision 1.2 2005/04/02 05:28:58 reinelt * fixed gcc4 warnings about signed/unsigned mismatches * @@ -48,6 +35,54 @@ * */ +/* + * This driver simply send out caracters on the serial port, without any + * formatting instructions for a particular LCD device. + * This is useful for custom boards of for very simple LCD. + * + * I use it for tests on a custom-made board based on a AVR microcontroler + * and also for driver a Point-of-Sale text-only display. + * I assume the following : + * - CR (0x0d) Return to the begining of the line without erasing, + * - LF (0x0a) Initiate a new line (but without sending the cursor to + * the begining of the line) + * - BS (0x08) Move the cursor to the previous caracter (but does no erase it). + * - It's not possible to return to the first line. Thus a back buffer is used + * in this driver. + * + * ******** UPDATE ********* + * I have added a "VT-100 Compatible mode" that allows the driver to support + * control-sequence code. This greatly reduce flickering and eliminate the need + * for the back-buffer. But it is optional since all displays cannot support them. + * Here are the codes: + * Delete the display (but does not move the cursor) : + * "ESC [ 2 J" (0x1b 0x5b 0x32 0x4a) + * Position the cursor : + * "ESC [ YY ; XX H" ( 0x1b 0x5b YY 0x3b XX 0x48 ) where YY is the ascii for the line + * number, and XX is the ascii for the column number ( first line/column is '1', not zero) + * Delete to the end of line from current cursor position : + * "ESC [ 0 K" ( 0x1b 0x5b 0x30 0x4b ) + * Set Country Code : + * "ESC R NN" (0x1b 0x52 NN) where NN is the country code *in byte, NOT ascii*. + * The default is 0 (USA), see below for specific countries. + * the list of accessible characters page are available on this page : + * http://www.wincor-nixdorf.com/internet/com/Services/Support/TechnicalSupport/POSSystems + * /Manuals/BAxx/index.html + * Get the display identification : (Doesn't work reliably, timing issues here) + * "ESC [ 0 c" ( 0x1b 0x5b 0x30 0x63). Return a string which look like this : + * ESC [ ? M ; NN ; OO ; PP ; QQ c) where M is type of display (2 for VFD), + * NN is the rom version, 00 is the current caracter set, PP is the number of lines and + * QQ the number of colomns. + * + * + * A "bar" capability is now provided if the config file has a "BarCharValue" parameter in it. + * + * The code come mostly taken from the LCDTerm driver in LCD4Linux, from + * Michaels Reinelt, many thanks to him. + * + * This driver is released under the GPL. + */ + /* * * exported fuctions: @@ -78,22 +113,39 @@ static char Name[]="SimpleLCD"; static char *backbuffer=0; static int backbuffer_size=0; +static int vt100_mode=0; +static unsigned char bar_char=0; /****************************************/ /*** hardware dependant functions ***/ /****************************************/ /** No clear function on SimpleLCD : Just send CR-LF * number of lines **/ -static void drv_SL_clear (void) +void drv_SL_simple_clear (void) { - char cmd[2] = { '\r', '\n' }; + char cmd[2]; int i; + cmd[0] = '\r' ; cmd[1] = '\n'; for (i=0;i