aboutsummaryrefslogtreecommitdiffstats
path: root/drv_LCDLinux.c
diff options
context:
space:
mode:
Diffstat (limited to 'drv_LCDLinux.c')
-rw-r--r--drv_LCDLinux.c437
1 files changed, 219 insertions, 218 deletions
diff --git a/drv_LCDLinux.c b/drv_LCDLinux.c
index 29731fb..50688b0 100644
--- a/drv_LCDLinux.c
+++ b/drv_LCDLinux.c
@@ -1,4 +1,4 @@
-/* $Id: drv_LCDLinux.c,v 1.7 2005/05/02 05:15:46 reinelt Exp $
+/* $Id: drv_LCDLinux.c,v 1.8 2005/05/08 04:32:44 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.8 2005/05/08 04:32:44 reinelt
+ * CodingStyle added and applied
+ *
* Revision 1.7 2005/05/02 05:15:46 reinelt
* make busy-flag checking configurable for LCD-Linux driver
*
@@ -81,8 +84,8 @@
#include "drv_LCDLinux.h"
-static char Name[] = "LCD-Linux";
-static char Device[] = "/dev/lcd";
+static char Name[] = "LCD-Linux";
+static char Device[] = "/dev/lcd";
static int lcdlinux_fd = -1;
@@ -90,159 +93,159 @@ static int lcdlinux_fd = -1;
/*** hardware dependant functions ***/
/****************************************/
-static void drv_LL_send (const char *string, const int len)
+static void drv_LL_send(const char *string, const int len)
{
- int run, ret;
-
- for (run = 0; run < 10; run++) {
- ret = write (lcdlinux_fd, string, len);
- if (ret >= 0 || errno != EAGAIN) break;
- if (run > 0) info ("%s: write(%s): EAGAIN #%d", Name, Device, run);
- usleep(1000);
- }
-
- if (ret < 0) {
- error ("%s: write(%s) failed: %s", Name, Device, strerror(errno));
- } else if (ret != len) {
- error ("%s: partial write(%s): len=%d ret=%d", Name, Device, len, ret);
- }
-
- return;
+ int run, ret;
+
+ for (run = 0; run < 10; run++) {
+ ret = write(lcdlinux_fd, string, len);
+ if (ret >= 0 || errno != EAGAIN)
+ break;
+ if (run > 0)
+ info("%s: write(%s): EAGAIN #%d", Name, Device, run);
+ usleep(1000);
+ }
+
+ if (ret < 0) {
+ error("%s: write(%s) failed: %s", Name, Device, strerror(errno));
+ } else if (ret != len) {
+ error("%s: partial write(%s): len=%d ret=%d", Name, Device, len, ret);
+ }
+
+ return;
}
-static void drv_LL_clear (void)
+static void drv_LL_clear(void)
{
- /* Fixme: is there no otherway to clear the display? */
- drv_LL_send ("\14", 1); /* Form Feed */
+ /* Fixme: is there no otherway to clear the display? */
+ drv_LL_send("\14", 1); /* Form Feed */
}
-static void drv_LL_write (const int row, const int col, const char *data, int len)
+static void drv_LL_write(const int row, const int col, const char *data, int len)
{
- int pos = row * DCOLS + col;
-
- if (lseek(lcdlinux_fd, pos, SEEK_SET) == (off_t)-1) {
- error ("%s: lseek(%s) failed: %s", Name, Device, strerror(errno));
- }
- drv_LL_send (data, len);
+ int pos = row * DCOLS + col;
+
+ if (lseek(lcdlinux_fd, pos, SEEK_SET) == (off_t) - 1) {
+ error("%s: lseek(%s) failed: %s", Name, Device, strerror(errno));
+ }
+ drv_LL_send(data, len);
}
-static void drv_LL_defchar (const int ascii, const unsigned char *matrix)
+static void drv_LL_defchar(const int ascii, const unsigned char *matrix)
{
- char buffer[8];
- int pos = 1024 + ascii;
- int i;
-
- for (i = 0; i < 8; i++) {
- buffer[i] = *matrix++ & 0x1f;
- }
+ char buffer[8];
+ int pos = 1024 + ascii;
+ int i;
- if (lseek(lcdlinux_fd, pos, SEEK_SET) == (off_t)-1) {
- error ("%s: lseek(%s) failed: %s", Name, Device, strerror(errno));
- }
+ for (i = 0; i < 8; i++) {
+ buffer[i] = *matrix++ & 0x1f;
+ }
+
+ if (lseek(lcdlinux_fd, pos, SEEK_SET) == (off_t) - 1) {
+ error("%s: lseek(%s) failed: %s", Name, Device, strerror(errno));
+ }
- drv_LL_send (buffer, 8);
+ drv_LL_send(buffer, 8);
}
-static int drv_LL_start (const char *section, const int quiet)
+static int drv_LL_start(const char *section, const int quiet)
{
- char *s;
- int rows = -1, cols = -1;
- int use_busy = 0;
- struct lcd_driver buf;
-
- /* emit version information */
- info ("%s: Version %s", Name, LCD_LINUX_VERSION);
-
- /* get size from config file */
- s=cfg_get(section, "Size", NULL);
- if (s != NULL || *s != '\0') {
- 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;
+ char *s;
+ int rows = -1, cols = -1;
+ int use_busy = 0;
+ struct lcd_driver buf;
+
+ /* emit version information */
+ info("%s: Version %s", Name, LCD_LINUX_VERSION);
+
+ /* get size from config file */
+ s = cfg_get(section, "Size", NULL);
+ if (s != NULL || *s != '\0') {
+ 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;
+ }
}
- }
- free (s);
-
- /* open device */
- lcdlinux_fd = open(Device, O_WRONLY);
- if (lcdlinux_fd == -1) {
- error ("%s: open(%s) failed: %s", Name, Device, strerror(errno));
- return -1;
- }
-
- /* get display size */
- memset(&buf, 0, sizeof(buf));
- if (ioctl(lcdlinux_fd, IOCTL_GET_PARAM, &buf) != 0) {
- error ("%s: ioctl(IOCTL_GET_PARAM) failed: %s", Name, strerror(errno));
- error ("%s: Could not query display information!", Name);
- return -1;
- }
- info("%s: %dx%d display at 0x%x, %d controllers, flags=0x%02x:",
- Name, buf.disp_cols, buf.cntr_rows, buf.io, buf.num_cntr, buf.flags);
-
- info("%s: /proc support %sabled", Name, buf.flags & LCD_PROC_ON ? "en" : "dis");
- info("%s: tty support %sabled", Name, buf.flags & LCD_ETTY_ON ? "en" : "dis");
- info("%s: console support %sabled", Name, buf.flags & LCD_CONSOLE ? "en" : "dis");
- info("%s: bus width %d bits", Name, buf.flags & LCD_4BITS_BUS ? 4 : 8);
- info("%s: font size %s", Name, buf.flags & LCD_5X10_FONT ? "5x10" : "5x8");
- info("%s: busy-flag checking %sabled", Name, buf.flags & LCD_CHECK_BF ? "en" : "dis");
-
-
- /* overwrite with size from lcd4linux.conf */
- if ((rows > 0 && rows != buf.cntr_rows) || (cols > 0 && cols != buf.disp_cols)) {
- info("%s: changing size to %dx%d", Name, cols, rows);
- buf.cntr_rows = rows;
- buf.disp_cols = cols;
- if (ioctl(lcdlinux_fd, IOCTL_SET_PARAM, &buf) != 0) {
- error ("%s: ioctl(IOCTL_SET_PARAM) failed: %s", Name, strerror(errno));
- error ("%s: Could not set display geometry!", Name);
- return -1;
+ free(s);
+
+ /* open device */
+ lcdlinux_fd = open(Device, O_WRONLY);
+ if (lcdlinux_fd == -1) {
+ error("%s: open(%s) failed: %s", Name, Device, strerror(errno));
+ return -1;
}
- }
-
- DROWS = buf.cntr_rows;
- DCOLS = buf.disp_cols;
-
- /* overwrite busy-flag checking from lcd4linux.conf */
- cfg_number(section, "UseBusy", 0, 0, 1, &use_busy);
- if (use_busy && !(buf.flags & LCD_CHECK_BF)) {
- info ("%s: activating busy-flag checking", Name);
- buf.flags |= LCD_CHECK_BF;
- if (ioctl(lcdlinux_fd, IOCTL_SET_PARAM, &buf) != 0) {
- error ("%s: ioctl(IOCTL_SET_PARAM) failed: %s", Name, strerror(errno));
- error ("%s: Could not activate busy-flag checking!", Name);
- return -1;
+
+ /* get display size */
+ memset(&buf, 0, sizeof(buf));
+ if (ioctl(lcdlinux_fd, IOCTL_GET_PARAM, &buf) != 0) {
+ error("%s: ioctl(IOCTL_GET_PARAM) failed: %s", Name, strerror(errno));
+ error("%s: Could not query display information!", Name);
+ return -1;
}
- }
- else if (!use_busy && (buf.flags & LCD_CHECK_BF)) {
- info ("%s: deactivating busy-flag checking", Name);
- buf.flags &= ~LCD_CHECK_BF;
- if (ioctl(lcdlinux_fd, IOCTL_SET_PARAM, &buf) != 0) {
- error ("%s: ioctl(IOCTL_SET_PARAM) failed: %s", Name, strerror(errno));
- error ("%s: Could not deactivate busy-flag checking!", Name);
- return -1;
+ info("%s: %dx%d display at 0x%x, %d controllers, flags=0x%02x:", Name, buf.disp_cols, buf.cntr_rows, buf.io, buf.num_cntr, buf.flags);
+
+ info("%s: /proc support %sabled", Name, buf.flags & LCD_PROC_ON ? "en" : "dis");
+ info("%s: tty support %sabled", Name, buf.flags & LCD_ETTY_ON ? "en" : "dis");
+ info("%s: console support %sabled", Name, buf.flags & LCD_CONSOLE ? "en" : "dis");
+ info("%s: bus width %d bits", Name, buf.flags & LCD_4BITS_BUS ? 4 : 8);
+ info("%s: font size %s", Name, buf.flags & LCD_5X10_FONT ? "5x10" : "5x8");
+ info("%s: busy-flag checking %sabled", Name, buf.flags & LCD_CHECK_BF ? "en" : "dis");
+
+
+ /* overwrite with size from lcd4linux.conf */
+ if ((rows > 0 && rows != buf.cntr_rows) || (cols > 0 && cols != buf.disp_cols)) {
+ info("%s: changing size to %dx%d", Name, cols, rows);
+ buf.cntr_rows = rows;
+ buf.disp_cols = cols;
+ if (ioctl(lcdlinux_fd, IOCTL_SET_PARAM, &buf) != 0) {
+ error("%s: ioctl(IOCTL_SET_PARAM) failed: %s", Name, strerror(errno));
+ error("%s: Could not set display geometry!", Name);
+ return -1;
+ }
}
- }
-
- /* initialize display */
- drv_LL_clear(); /* clear display */
-
- if (!quiet) {
- char buffer[40];
- qprintf(buffer, sizeof(buffer), "%s %dx%d", Name, DCOLS, DROWS);
- if (drv_generic_text_greet (buffer, "lcd-linux.sf.net")) {
- sleep (3);
- drv_LL_clear();
+
+ DROWS = buf.cntr_rows;
+ DCOLS = buf.disp_cols;
+
+ /* overwrite busy-flag checking from lcd4linux.conf */
+ cfg_number(section, "UseBusy", 0, 0, 1, &use_busy);
+ if (use_busy && !(buf.flags & LCD_CHECK_BF)) {
+ info("%s: activating busy-flag checking", Name);
+ buf.flags |= LCD_CHECK_BF;
+ if (ioctl(lcdlinux_fd, IOCTL_SET_PARAM, &buf) != 0) {
+ error("%s: ioctl(IOCTL_SET_PARAM) failed: %s", Name, strerror(errno));
+ error("%s: Could not activate busy-flag checking!", Name);
+ return -1;
+ }
+ } else if (!use_busy && (buf.flags & LCD_CHECK_BF)) {
+ info("%s: deactivating busy-flag checking", Name);
+ buf.flags &= ~LCD_CHECK_BF;
+ if (ioctl(lcdlinux_fd, IOCTL_SET_PARAM, &buf) != 0) {
+ error("%s: ioctl(IOCTL_SET_PARAM) failed: %s", Name, strerror(errno));
+ error("%s: Could not deactivate busy-flag checking!", Name);
+ return -1;
+ }
}
- }
-
- return 0;
+
+ /* initialize display */
+ drv_LL_clear(); /* clear display */
+
+ if (!quiet) {
+ char buffer[40];
+ qprintf(buffer, sizeof(buffer), "%s %dx%d", Name, DCOLS, DROWS);
+ if (drv_generic_text_greet(buffer, "lcd-linux.sf.net")) {
+ sleep(3);
+ drv_LL_clear();
+ }
+ }
+
+ return 0;
}
@@ -269,107 +272,105 @@ static int drv_LL_start (const char *section, const int quiet)
/* list models */
-int drv_LL_list (void)
+int drv_LL_list(void)
{
- printf ("generic");
- return 0;
+ printf("generic");
+ return 0;
}
/* initialize driver & display */
-int drv_LL_init (const char *section, const int quiet)
+int drv_LL_init(const char *section, const int quiet)
{
- WIDGET_CLASS wc;
- int asc255bug;
- int ret;
-
- /* display preferences */
- XRES = 5; /* pixel width of one char */
- 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 */
-
- /* real worker functions */
- drv_generic_text_real_write = drv_LL_write;
- drv_generic_text_real_defchar = drv_LL_defchar;
-
-
- /* start display */
- if ((ret=drv_LL_start (section, quiet))!=0)
- return ret;
-
- /* initialize generic text driver */
- if ((ret=drv_generic_text_init(section, Name))!=0)
- return ret;
-
- /* initialize generic icon driver */
- if ((ret=drv_generic_text_icon_init())!=0)
- return ret;
-
- /* initialize generic bar driver */
- if ((ret=drv_generic_text_bar_init(0))!=0)
- return ret;
-
- /* add fixed chars to the bar driver */
- /* most displays have a full block on ascii 255, but some have kind of */
- /* an 'inverted P'. If you specify 'asc255bug 1 in the config, this */
- /* char will not be used, but rendered by the bar driver */
- cfg_number(section, "asc255bug", 0, 0, 1, &asc255bug);
- drv_generic_text_bar_add_segment ( 0, 0,255, 32); /* ASCII 32 = blank */
- if (!asc255bug)
- drv_generic_text_bar_add_segment (255,255,255,255); /* ASCII 255 = block */
-
- /* register text widget */
- wc=Widget_Text;
- wc.draw=drv_generic_text_draw;
- widget_register(&wc);
-
- /* register icon widget */
- wc=Widget_Icon;
- wc.draw=drv_generic_text_icon_draw;
- widget_register(&wc);
-
- /* register bar widget */
- wc=Widget_Bar;
- wc.draw=drv_generic_text_bar_draw;
- widget_register(&wc);
-
- /* register plugins */
- /* none */
-
- return 0;
+ WIDGET_CLASS wc;
+ int asc255bug;
+ int ret;
+
+ /* display preferences */
+ XRES = 5; /* pixel width of one char */
+ 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 */
+
+ /* real worker functions */
+ drv_generic_text_real_write = drv_LL_write;
+ drv_generic_text_real_defchar = drv_LL_defchar;
+
+
+ /* start display */
+ if ((ret = drv_LL_start(section, quiet)) != 0)
+ return ret;
+
+ /* initialize generic text driver */
+ if ((ret = drv_generic_text_init(section, Name)) != 0)
+ return ret;
+
+ /* initialize generic icon driver */
+ if ((ret = drv_generic_text_icon_init()) != 0)
+ return ret;
+
+ /* initialize generic bar driver */
+ if ((ret = drv_generic_text_bar_init(0)) != 0)
+ return ret;
+
+ /* add fixed chars to the bar driver */
+ /* most displays have a full block on ascii 255, but some have kind of */
+ /* an 'inverted P'. If you specify 'asc255bug 1 in the config, this */
+ /* char will not be used, but rendered by the bar driver */
+ cfg_number(section, "asc255bug", 0, 0, 1, &asc255bug);
+ drv_generic_text_bar_add_segment(0, 0, 255, 32); /* ASCII 32 = blank */
+ if (!asc255bug)
+ drv_generic_text_bar_add_segment(255, 255, 255, 255); /* ASCII 255 = block */
+
+ /* register text widget */
+ wc = Widget_Text;
+ wc.draw = drv_generic_text_draw;
+ widget_register(&wc);
+
+ /* register icon widget */
+ wc = Widget_Icon;
+ wc.draw = drv_generic_text_icon_draw;
+ widget_register(&wc);
+
+ /* register bar widget */
+ wc = Widget_Bar;
+ wc.draw = drv_generic_text_bar_draw;
+ widget_register(&wc);
+
+ /* register plugins */
+ /* none */
+
+ return 0;
}
/* close driver & display */
-int drv_LL_quit (const int quiet)
+int drv_LL_quit(const int quiet)
{
- info("%s: shutting down.", Name);
-
- drv_generic_text_quit();
-
- /* clear display */
- drv_LL_clear();
-
- /* say goodbye... */
- if (!quiet) {
- drv_generic_text_greet ("goodbye!", NULL);
- }
-
- /* close device */
- close (lcdlinux_fd);
-
- return (0);
+ info("%s: shutting down.", Name);
+
+ drv_generic_text_quit();
+
+ /* clear display */
+ drv_LL_clear();
+
+ /* say goodbye... */
+ if (!quiet) {
+ drv_generic_text_greet("goodbye!", NULL);
+ }
+
+ /* close device */
+ close(lcdlinux_fd);
+
+ return (0);
}
DRIVER drv_LCDLinux = {
- name: Name,
- list: drv_LL_list,
- init: drv_LL_init,
- quit: drv_LL_quit,
+ name:Name,
+ list:drv_LL_list,
+ init:drv_LL_init,
+ quit:drv_LL_quit,
};
-
-