diff options
author | reinelt <> | 2005-02-24 07:06:48 +0000 |
---|---|---|
committer | reinelt <> | 2005-02-24 07:06:48 +0000 |
commit | b3c3e822b6c56387cb3583a771767def47624463 (patch) | |
tree | 84dd4c1b0750ad3135abeef460bc10e0c9b77da5 | |
parent | 0f91618aa36e77c0c9e8433f28dd3e313003a3db (diff) | |
download | lcd4linux-b3c3e822b6c56387cb3583a771767def47624463.tar.gz |
[lcd4linux @ 2005-02-24 07:06:45 by reinelt]
SimpleLCD driver added
-rw-r--r-- | Makefile.am | 1 | ||||
-rw-r--r-- | Makefile.in | 34 | ||||
-rw-r--r-- | config.h.in | 3 | ||||
-rwxr-xr-x | configure | 17 | ||||
-rw-r--r-- | drivers.m4 | 13 | ||||
-rw-r--r-- | drv.c | 10 | ||||
-rw-r--r-- | drv_Crystalfontz.c | 7 | ||||
-rw-r--r-- | drv_LCDLinux.c | 11 | ||||
-rw-r--r-- | drv_SimpleLCD.c | 265 | ||||
-rw-r--r-- | drv_generic_text.c | 7 | ||||
-rw-r--r-- | lcd4linux.conf.sample | 7 |
11 files changed, 347 insertions, 28 deletions
diff --git a/Makefile.am b/Makefile.am index cf89cd2..7451fd0 100644 --- a/Makefile.am +++ b/Makefile.am @@ -71,6 +71,7 @@ drv_MatrixOrbital.c \ drv_MilfordInstruments.c \ drv_NULL.c \ drv_RouterBoard.c \ +drv_SimpleLCD.c \ drv_T6963.c \ drv_USBLCD.c \ drv_X11.c \ diff --git a/Makefile.in b/Makefile.in index b64f8c6..afa50c1 100644 --- a/Makefile.in +++ b/Makefile.in @@ -99,7 +99,7 @@ lcd4linux_SOURCES = lcd4linux.c cfg.c cfg.h deb #liblcd4linux_la_SOURCES = -EXTRA_lcd4linux_SOURCES = drv_generic_text.c drv_generic_text.h drv_generic_graphic.c drv_generic_graphic.h drv_generic_serial.c drv_generic_serial.h drv_generic_parport.c drv_generic_parport.h drv_BeckmannEgle.c drv_BWCT.c drv_Crystalfontz.c drv_Curses.c drv_Cwlinux.c drv_HD44780.c drv_Image.c drv_LCDLinux.c drv_LCDTerm.c drv_M50530.c drv_MatrixOrbital.c drv_MilfordInstruments.c drv_NULL.c drv_RouterBoard.c drv_T6963.c drv_USBLCD.c drv_X11.c font_6x8.h plugin_apm.c plugin_cpuinfo.c plugin_diskstats.c plugin_dvb.c plugin_exec.c plugin_i2c_sensors.c plugin_imon.c plugin_isdn.c plugin_loadavg.c plugin_meminfo.c plugin_mysql.c plugin_netdev.c plugin_pop3.c plugin_ppp.c plugin_proc_stat.c plugin_seti.c plugin_uname.c plugin_uptime.c plugin_wireless.c plugin_xmms.c +EXTRA_lcd4linux_SOURCES = drv_generic_text.c drv_generic_text.h drv_generic_graphic.c drv_generic_graphic.h drv_generic_serial.c drv_generic_serial.h drv_generic_parport.c drv_generic_parport.h drv_BeckmannEgle.c drv_BWCT.c drv_Crystalfontz.c drv_Curses.c drv_Cwlinux.c drv_HD44780.c drv_Image.c drv_LCDLinux.c drv_LCDTerm.c drv_M50530.c drv_MatrixOrbital.c drv_MilfordInstruments.c drv_NULL.c drv_RouterBoard.c drv_SimpleLCD.c drv_T6963.c drv_USBLCD.c drv_X11.c font_6x8.h plugin_apm.c plugin_cpuinfo.c plugin_diskstats.c plugin_dvb.c plugin_exec.c plugin_i2c_sensors.c plugin_imon.c plugin_isdn.c plugin_loadavg.c plugin_meminfo.c plugin_mysql.c plugin_netdev.c plugin_pop3.c plugin_ppp.c plugin_proc_stat.c plugin_seti.c plugin_uname.c plugin_uptime.c plugin_wireless.c plugin_xmms.c EXTRA_DIST = lcd4linux.conf.sample lcd4kde.conf lcd4linux.kdelnk lcd4linux.xpm lcd4linux.lsm curses.m4 AUTHORS CREDITS FAQ NEWS TODO README README.Drivers README.Plugins README.KDE plugin_sample.c @@ -142,22 +142,22 @@ DEP_FILES = .deps/cfg.P .deps/debug.P .deps/drv.P .deps/drv_BWCT.P \ .deps/drv_Cwlinux.P .deps/drv_HD44780.P .deps/drv_Image.P \ .deps/drv_LCDLinux.P .deps/drv_LCDTerm.P .deps/drv_M50530.P \ .deps/drv_MatrixOrbital.P .deps/drv_MilfordInstruments.P \ -.deps/drv_NULL.P .deps/drv_RouterBoard.P .deps/drv_T6963.P \ -.deps/drv_USBLCD.P .deps/drv_X11.P .deps/drv_generic_graphic.P \ -.deps/drv_generic_parport.P .deps/drv_generic_serial.P \ -.deps/drv_generic_text.P .deps/evaluator.P .deps/hash.P .deps/layout.P \ -.deps/lcd4linux.P .deps/pid.P .deps/plugin.P .deps/plugin_apm.P \ -.deps/plugin_cfg.P .deps/plugin_cpuinfo.P .deps/plugin_diskstats.P \ -.deps/plugin_dvb.P .deps/plugin_exec.P .deps/plugin_i2c_sensors.P \ -.deps/plugin_imon.P .deps/plugin_isdn.P .deps/plugin_loadavg.P \ -.deps/plugin_math.P .deps/plugin_meminfo.P .deps/plugin_mysql.P \ -.deps/plugin_netdev.P .deps/plugin_pop3.P .deps/plugin_ppp.P \ -.deps/plugin_proc_stat.P .deps/plugin_seti.P .deps/plugin_string.P \ -.deps/plugin_test.P .deps/plugin_time.P .deps/plugin_uname.P \ -.deps/plugin_uptime.P .deps/plugin_wireless.P .deps/plugin_xmms.P \ -.deps/qprintf.P .deps/thread.P .deps/timer.P .deps/udelay.P \ -.deps/widget.P .deps/widget_bar.P .deps/widget_icon.P \ -.deps/widget_text.P +.deps/drv_NULL.P .deps/drv_RouterBoard.P .deps/drv_SimpleLCD.P \ +.deps/drv_T6963.P .deps/drv_USBLCD.P .deps/drv_X11.P \ +.deps/drv_generic_graphic.P .deps/drv_generic_parport.P \ +.deps/drv_generic_serial.P .deps/drv_generic_text.P .deps/evaluator.P \ +.deps/hash.P .deps/layout.P .deps/lcd4linux.P .deps/pid.P \ +.deps/plugin.P .deps/plugin_apm.P .deps/plugin_cfg.P \ +.deps/plugin_cpuinfo.P .deps/plugin_diskstats.P .deps/plugin_dvb.P \ +.deps/plugin_exec.P .deps/plugin_i2c_sensors.P .deps/plugin_imon.P \ +.deps/plugin_isdn.P .deps/plugin_loadavg.P .deps/plugin_math.P \ +.deps/plugin_meminfo.P .deps/plugin_mysql.P .deps/plugin_netdev.P \ +.deps/plugin_pop3.P .deps/plugin_ppp.P .deps/plugin_proc_stat.P \ +.deps/plugin_seti.P .deps/plugin_string.P .deps/plugin_test.P \ +.deps/plugin_time.P .deps/plugin_uname.P .deps/plugin_uptime.P \ +.deps/plugin_wireless.P .deps/plugin_xmms.P .deps/qprintf.P \ +.deps/thread.P .deps/timer.P .deps/udelay.P .deps/widget.P \ +.deps/widget_bar.P .deps/widget_icon.P .deps/widget_text.P SOURCES = $(lcd4linux_SOURCES) $(EXTRA_lcd4linux_SOURCES) OBJECTS = $(lcd4linux_OBJECTS) diff --git a/config.h.in b/config.h.in index 2ed609e..b122ecb 100644 --- a/config.h.in +++ b/config.h.in @@ -359,6 +359,9 @@ /* RouterBoard driver */ #undef WITH_ROUTERBOARD +/* SimpleLCD driver */ +#undef WITH_SIMPLELCD + /* T6963 driver */ #undef WITH_T6963 @@ -870,7 +870,7 @@ Optional Packages: BeckmannEgle, BWCT, CrystalFontz, Curses, Cwlinux, HD44780, LCDLinux, LCDTerm, M50530, MatrixOrbital, MilfordInstruments, NULL, PNG, PPM, RouterBoard, - T6963, USBLCD, X11 + SimpleLCD, T6963, USBLCD, X11 --with-plugins=<list> choose which plugins to compile. type --with-plugins=list for a list of avaible plugins @@ -5419,6 +5419,7 @@ for driver in $drivers; do T6963="yes" USBLCD="yes" X11="yes" + SIMPLELCD="yes" ;; BeckmannEgle) BECKMANNEGLE=$val @@ -5465,6 +5466,9 @@ for driver in $drivers; do RouterBoard) ROUTERBOARD=$val ;; + SimpleLCD) + SIMPLELCD=$val + ;; T6963) T6963=$val ;; @@ -5667,6 +5671,17 @@ _ACEOF fi +if test "$SIMPLELCD" = "yes"; then + TEXT="yes" + SERIAL="yes" + DRIVERS="$DRIVERS drv_SimpleLCD.o" + +cat >>confdefs.h <<\_ACEOF +#define WITH_SIMPLELCD 1 +_ACEOF + +fi + if test "$T6963" = "yes"; then GRAPHIC="yes" PARPORT="yes" @@ -31,7 +31,7 @@ AC_ARG_WITH( [ BeckmannEgle, BWCT, CrystalFontz, Curses, Cwlinux,] [ HD44780, LCDLinux, LCDTerm, M50530, MatrixOrbital,] [ MilfordInstruments, NULL, PNG, PPM, RouterBoard,] - [ T6963, USBLCD, X11], + [ SimpleLCD, T6963, USBLCD, X11], drivers=$withval, drivers=all ) @@ -70,6 +70,7 @@ for driver in $drivers; do T6963="yes" USBLCD="yes" X11="yes" + SIMPLELCD="yes" ;; BeckmannEgle) BECKMANNEGLE=$val @@ -116,6 +117,9 @@ for driver in $drivers; do RouterBoard) ROUTERBOARD=$val ;; + SimpleLCD) + SIMPLELCD=$val + ;; T6963) T6963=$val ;; @@ -252,6 +256,13 @@ if test "$ROUTERBOARD" = "yes"; then AC_DEFINE(WITH_ROUTERBOARD,1,[RouterBoard driver]) fi +if test "$SIMPLELCD" = "yes"; then + TEXT="yes" + SERIAL="yes" + DRIVERS="$DRIVERS drv_SimpleLCD.o" + AC_DEFINE(WITH_SIMPLELCD,1,[SimpleLCD driver]) +fi + if test "$T6963" = "yes"; then GRAPHIC="yes" PARPORT="yes" @@ -1,4 +1,4 @@ -/* $Id: drv.c,v 1.27 2005/01/30 06:43:22 reinelt Exp $ +/* $Id: drv.c,v 1.28 2005/02/24 07:06:48 reinelt Exp $ * * new framework for display drivers * @@ -23,6 +23,9 @@ * * * $Log: drv.c,v $ + * Revision 1.28 2005/02/24 07:06:48 reinelt + * SimpleLCD driver added + * * Revision 1.27 2005/01/30 06:43:22 reinelt * driver for LCD-Linux finished * @@ -196,6 +199,7 @@ extern DRIVER drv_MatrixOrbital; extern DRIVER drv_MilfordInstruments; extern DRIVER drv_NULL; extern DRIVER drv_RouterBoard; +extern DRIVER drv_SimpleLCD; extern DRIVER drv_T6963; extern DRIVER drv_USBLCD; extern DRIVER drv_X11; @@ -249,6 +253,9 @@ DRIVER *Driver[] = { #ifdef WITH_ROUTERBOARD &drv_RouterBoard, #endif +#ifdef WITH_SIMPLELCD + &drv_SimpleLCD, +#endif #ifdef WITH_T6963 &drv_T6963, #endif @@ -258,6 +265,7 @@ DRIVER *Driver[] = { #ifdef WITH_X11 &drv_X11, #endif + NULL, }; diff --git a/drv_Crystalfontz.c b/drv_Crystalfontz.c index 6d5c31e..7bdd196 100644 --- a/drv_Crystalfontz.c +++ b/drv_Crystalfontz.c @@ -1,4 +1,4 @@ -/* $Id: drv_Crystalfontz.c,v 1.30 2005/01/18 06:30:22 reinelt Exp $ +/* $Id: drv_Crystalfontz.c,v 1.31 2005/02/24 07:06:48 reinelt Exp $ * * new style driver for Crystalfontz display modules * @@ -23,6 +23,9 @@ * * * $Log: drv_Crystalfontz.c,v $ + * Revision 1.31 2005/02/24 07:06:48 reinelt + * SimpleLCD driver added + * * Revision 1.30 2005/01/18 06:30:22 reinelt * added (C) to all copyright statements * @@ -986,7 +989,7 @@ int drv_CF_init (const char *section, const int quiet) break; case 2: CHAR0 = 0; /* ASCII of first user-defineable char */ - GOTO_COST = 999; /* there is no goto on 633 */ + GOTO_COST = -1; /* there is no goto on 633 */ drv_generic_text_real_write = drv_CF_write2; drv_generic_text_real_defchar = drv_CF_defchar23; break; diff --git a/drv_LCDLinux.c b/drv_LCDLinux.c index cf83f9c..fd78ac0 100644 --- a/drv_LCDLinux.c +++ b/drv_LCDLinux.c @@ -1,4 +1,4 @@ -/* $Id: drv_LCDLinux.c,v 1.3 2005/02/24 06:51:40 reinelt Exp $ +/* $Id: drv_LCDLinux.c,v 1.4 2005/02/24 07:06:48 reinelt Exp $ * * driver for the LCD-Linux HD44780 kernel driver * http://lcd-linux.sourceforge.net @@ -24,6 +24,9 @@ * * * $Log: drv_LCDLinux.c,v $ + * Revision 1.4 2005/02/24 07:06:48 reinelt + * SimpleLCD driver added + * * Revision 1.3 2005/02/24 06:51:40 reinelt * LCD-Linux driver GOTO_COST corrected * @@ -149,7 +152,7 @@ static void drv_LL_defchar (const int ascii, const unsigned char *matrix) } -static int drv_LL_start (const char *section, const int quiet) +static int drv_LL_start (const int quiet) { struct lcd_driver buf; @@ -230,7 +233,7 @@ int drv_LL_init (const char *section, const int quiet) YRES = 8; /* pixel height of one char */ CHARS = 8; /* number of user-defineable characters */ CHAR0 = 0; /* ASCII of first user-defineable char */ - GOTO_COST = 1; /* number of bytes a goto command requires */ + GOTO_COST = -1; /* number of bytes a goto command requires */ /* real worker functions */ drv_generic_text_real_write = drv_LL_write; @@ -238,7 +241,7 @@ int drv_LL_init (const char *section, const int quiet) /* start display */ - if ((ret=drv_LL_start (section, quiet))!=0) + if ((ret=drv_LL_start (quiet))!=0) return ret; /* initialize generic text driver */ diff --git a/drv_SimpleLCD.c b/drv_SimpleLCD.c new file mode 100644 index 0000000..85f91bf --- /dev/null +++ b/drv_SimpleLCD.c @@ -0,0 +1,265 @@ +/* $Id: drv_SimpleLCD.c,v 1.1 2005/02/24 07:06:48 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 <ob@obconseil.net> + * Copyright (C) 2005 The LCD4Linux Team <lcd4linux-devel@users.sourceforge.net> + * + * This file is part of LCD4Linux. + * + * LCD4Linux 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) + * any later version. + * + * LCD4Linux is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * + * $Log: drv_SimpleLCD.c,v $ + * Revision 1.1 2005/02/24 07:06:48 reinelt + * SimpleLCD driver added + * + */ + +/* + * + * exported fuctions: + * + * struct DRIVER drv_SimpleLCD + * + */ + +#include "config.h" + +#include <stdlib.h> +#include <unistd.h> +#include <string.h> + +#include "debug.h" +#include "cfg.h" +#include "qprintf.h" +#include "plugin.h" +#include "widget.h" +#include "widget_text.h" +#include "widget_icon.h" +#include "widget_bar.h" +#include "drv.h" +#include "drv_generic_text.h" +#include "drv_generic_serial.h" + + +static char Name[]="SimpleLCD"; +static char *backbuffer=0; +static int backbuffer_size=0; + +/****************************************/ +/*** hardware dependant functions ***/ +/****************************************/ + +/** No clear function on SimpleLCD : Just send CR-LF * number of lines **/ +static void drv_SL_clear (void) +{ + char cmd[2] = { '\r', '\n' }; + int i; + for (i=0;i<DROWS;++i) { + drv_generic_serial_write (cmd, 2); + } + memset(backbuffer,' ',backbuffer_size); +} + +/* If full_commit = true, then the whole buffer is to be sent to screen. + if full_commit = false, then only the last line is to be sent (faster on slow screens) +*/ +static void drv_SL_commit(int full_commit) +{ + int row; + char cmd[2] = { '\r', '\n' }; + if (full_commit) { + for (row=0;row < DROWS; row++) { + drv_generic_serial_write (cmd, 2); + drv_generic_serial_write(backbuffer+(DCOLS*row),DCOLS); + } + } else { + drv_generic_serial_write (cmd, 1); /* Go to the beginning of the line only */ + drv_generic_serial_write(backbuffer+(DCOLS*(DROWS-1)),DCOLS); + } +} + +static void drv_SL_write (const int row, const int col, const char *data, int len) +{ + memcpy(backbuffer+(row*DCOLS)+col,data,len); + if (row == DROWS-1) + drv_SL_commit(0); + else + drv_SL_commit(1); +} + + + +static int drv_SL_start (const char *section, const int quiet) +{ + int rows=-1, cols=-1; + unsigned int flags=0; + char *s; + + cfg_number(section,"Options",0,0,0xffff,&flags); + + if (drv_generic_serial_open(section, Name, flags) < 0) return -1; + + s=cfg_get(section, "Size", NULL); + if (s==NULL || *s=='\0') { + error ("%s: no '%s.Size' entry from %s", Name, section, cfg_source()); + return -1; + } + if (sscanf(s,"%dx%d",&cols,&rows)!=2 || rows<1 || cols<1) { + error ("%s: bad %s.Size '%s' from %s", Name, section, s, cfg_source()); + free (s); + return -1; + } + + DROWS = rows; + DCOLS = cols; + + backbuffer_size = DROWS * DCOLS; + backbuffer = malloc(backbuffer_size); + if ( ! backbuffer ){ + return -1; + } + drv_SL_clear(); /* clear */ + + + if (!quiet) { + char buffer[40]; + qprintf(buffer, sizeof(buffer), "%s %dx%d", Name, DCOLS, DROWS); + if (drv_generic_text_greet (buffer, NULL)) { + sleep (3); + drv_SL_clear(); + } + } + + return 0; +} + + +/****************************************/ +/*** plugins ***/ +/****************************************/ + +/* none */ + + +/****************************************/ +/*** widget callbacks ***/ +/****************************************/ + + +/* using drv_generic_text_draw(W) */ + + +/****************************************/ +/*** exported functions ***/ +/****************************************/ + + +/* list models */ +int drv_SL_list (void) +{ + printf ("generic"); + return 0; +} + + +/* initialize driver & display */ +int drv_SL_init (const char *section, const int quiet) +{ + WIDGET_CLASS wc; + int ret; + + /* display preferences */ + XRES = 5; /* pixel width of one char */ + YRES = 8; /* pixel height of one char */ + CHARS = 0; /* number of user-defineable characters */ + CHAR0 = 0; /* ASCII of first user-defineable char */ + + GOTO_COST = -1; /* number of bytes a goto command requires */ + + /* real worker functions */ + drv_generic_text_real_write = drv_SL_write; + + + /* start display */ + if ((ret=drv_SL_start (section, quiet))!=0) + return ret; + + /* initialize generic text driver */ + if ((ret=drv_generic_text_init(section, Name))!=0) + return ret; + + /* register text widget */ + wc=Widget_Text; + wc.draw=drv_generic_text_draw; + widget_register(&wc); + + /* register plugins */ + /* none */ + + return 0; +} + + +/* close driver & display */ +int drv_SL_quit (const int quiet) +{ + + info("%s: shutting down.", Name); + + drv_generic_text_quit(); + + /* clear display */ + drv_SL_clear(); + + /* say goodbye... */ + if (!quiet) { + drv_generic_text_greet ("goodbye!", NULL); + } + + drv_generic_serial_close(); + + if ( backbuffer ) { + free(backbuffer) ; backbuffer=0; backbuffer_size=0; + } + return (0); +} + + +DRIVER drv_SimpleLCD = { + name: Name, + list: drv_SL_list, + init: drv_SL_init, + quit: drv_SL_quit, +}; + diff --git a/drv_generic_text.c b/drv_generic_text.c index 793d1a2..b1f6675 100644 --- a/drv_generic_text.c +++ b/drv_generic_text.c @@ -1,4 +1,4 @@ -/* $Id: drv_generic_text.c,v 1.24 2005/01/18 06:30:23 reinelt Exp $ +/* $Id: drv_generic_text.c,v 1.25 2005/02/24 07:06:48 reinelt Exp $ * * generic driver helper for text-based displays * @@ -23,6 +23,9 @@ * * * $Log: drv_generic_text.c,v $ + * Revision 1.25 2005/02/24 07:06:48 reinelt + * SimpleLCD driver added + * * Revision 1.24 2005/01/18 06:30:23 reinelt * added (C) to all copyright statements * @@ -431,7 +434,7 @@ int drv_generic_text_draw (WIDGET *W) if (fb1[col] == fb2[col]) { /* If we find just one equal byte, we don't break, because this */ /* would require a goto, which takes several bytes, too. */ - if (++equal > GOTO_COST) break; + if (GOTO_COST >= 0 && ++equal > GOTO_COST) break; } else { pos2 = col; equal = 0; diff --git a/lcd4linux.conf.sample b/lcd4linux.conf.sample index 7c65fee..2a29036 100644 --- a/lcd4linux.conf.sample +++ b/lcd4linux.conf.sample @@ -165,6 +165,13 @@ Display LCDTerm { Icons 1 } +Display SimpleLCD { + Driver 'SimpleLCD' + Port '/dev/tts/0' + Speed 1200 + Options 0 + Size '20x2' +} Display M50530-24x8 { Driver 'M50530' |