diff options
Diffstat (limited to '')
-rw-r--r-- | drv_SimpleLCD.c | 334 |
1 files changed, 172 insertions, 162 deletions
diff --git a/drv_SimpleLCD.c b/drv_SimpleLCD.c index 017b5da..872eff5 100644 --- a/drv_SimpleLCD.c +++ b/drv_SimpleLCD.c @@ -1,4 +1,4 @@ -/* $Id: drv_SimpleLCD.c,v 1.3 2005/04/20 05:49:21 reinelt Exp $ +/* $Id: drv_SimpleLCD.c,v 1.4 2005/05/08 04:32:44 reinelt Exp $ * * driver for a simple serial terminal. * @@ -22,6 +22,9 @@ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * * $Log: drv_SimpleLCD.c,v $ + * Revision 1.4 2005/05/08 04:32:44 reinelt + * CodingStyle added and applied + * * 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 @@ -110,39 +113,43 @@ #include "drv_generic_serial.h" -static char Name[]="SimpleLCD"; -static char *backbuffer=0; -static int backbuffer_size=0; -static int vt100_mode=0; -static unsigned char bar_char=0; +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 **/ -void drv_SL_simple_clear (void) +void drv_SL_simple_clear(void) { - char cmd[2]; - int i; - cmd[0] = '\r' ; cmd[1] = '\n'; - for (i=0;i<DROWS;++i) { - drv_generic_serial_write (cmd, 2); - } - memset(backbuffer,' ',backbuffer_size); + char cmd[2]; + int i; + cmd[0] = '\r'; + cmd[1] = '\n'; + for (i = 0; i < DROWS; ++i) { + drv_generic_serial_write(cmd, 2); + } + memset(backbuffer, ' ', backbuffer_size); } /** vt-100 mode : send the ESC-code **/ -void drv_SL_vt100_clear (void) +void drv_SL_vt100_clear(void) { - char cmd[4]; - cmd[0] = 0x1b; cmd[1] = '[' ; cmd[2] = '2' ; cmd[3] = 'J'; - drv_generic_serial_write (cmd, 4); + char cmd[4]; + cmd[0] = 0x1b; + cmd[1] = '['; + cmd[2] = '2'; + cmd[3] = 'J'; + drv_generic_serial_write(cmd, 4); } -void drv_SL_clear (void) +void drv_SL_clear(void) { - vt100_mode==1?drv_SL_vt100_clear():drv_SL_simple_clear(); + vt100_mode == 1 ? drv_SL_vt100_clear() : drv_SL_simple_clear(); } @@ -151,103 +158,105 @@ void drv_SL_clear (void) */ 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); + 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); } - } 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_simple_write (const int row, const int col, const char *data, int len) +static void drv_SL_simple_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); + memcpy(backbuffer + (row * DCOLS) + col, data, len); + if (row == DROWS - 1) + drv_SL_commit(0); + else + drv_SL_commit(1); } -static void drv_SL_vt100_write (const int row, const int col, const char *data, int len) +static void drv_SL_vt100_write(const int row, const int col, const char *data, int len) { - char cmd[8]; - cmd[0] = 0x1b; cmd[1] = '['; - cmd[2] = row + '1'; cmd[3] = ';'; - cmd[4] = (col/10) + '0' ; cmd[5] = (col%10) + '1' ; + char cmd[8]; + cmd[0] = 0x1b; + cmd[1] = '['; + cmd[2] = row + '1'; + cmd[3] = ';'; + cmd[4] = (col / 10) + '0'; + cmd[5] = (col % 10) + '1'; cmd[6] = 'H'; - drv_generic_serial_write (cmd, 7); - drv_generic_serial_write (data,len); + drv_generic_serial_write(cmd, 7); + drv_generic_serial_write(data, len); } -static int drv_SL_start (const char *section, const int quiet) +static int drv_SL_start(const char *section, const int quiet) { - int rows=-1, cols=-1; - unsigned int flags=0; - char *s; - char * model=0; - - vt100_mode = 0; - model = cfg_get(section,"Model","generic"); - if (model != NULL && *model != '\0') - { - if ( strcasecmp("vt100",model) == 0 ) - vt100_mode = 1; - } - - cfg_number(section,"BarCharValue",0,0,255,&flags); - bar_char = flags; - 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; - - if ( ! vt100_mode) { - backbuffer_size = DROWS * DCOLS; - backbuffer = malloc(backbuffer_size); - if ( ! backbuffer ){ - return -1; - } - } - - /* real worker functions */ - if ( vt100_mode ) { - drv_generic_text_real_write = drv_SL_vt100_write; - } - else { - drv_generic_text_real_write = drv_SL_simple_write; - } - - 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(); + int rows = -1, cols = -1; + unsigned int flags = 0; + char *s; + char *model = 0; + + vt100_mode = 0; + model = cfg_get(section, "Model", "generic"); + if (model != NULL && *model != '\0') { + if (strcasecmp("vt100", model) == 0) + vt100_mode = 1; + } + + cfg_number(section, "BarCharValue", 0, 0, 255, &flags); + bar_char = flags; + 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; + + if (!vt100_mode) { + backbuffer_size = DROWS * DCOLS; + backbuffer = malloc(backbuffer_size); + if (!backbuffer) { + return -1; + } } - } - - return 0; + + /* real worker functions */ + if (vt100_mode) { + drv_generic_text_real_write = drv_SL_vt100_write; + } else { + drv_generic_text_real_write = drv_SL_simple_write; + } + + 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; } @@ -272,78 +281,79 @@ static int drv_SL_start (const char *section, const int quiet) /* list models */ -int drv_SL_list (void) +int drv_SL_list(void) { - printf ("generic vt100"); - return 0; + printf("generic vt100"); + return 0; } /* initialize driver & display */ -int drv_SL_init (const char *section, const int quiet) +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 */ - - - - /* 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; + 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 */ + + + + /* 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) +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); + 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, + name:Name, + list:drv_SL_list, + init:drv_SL_init, + quit:drv_SL_quit, }; - |