From 2dcde3e4f2c36c0e0c8cbf41e6625607b119dc40 Mon Sep 17 00:00:00 2001 From: marschap Date: Sat, 8 Apr 2006 21:19:14 +0000 Subject: [PATCH] harmonize coding style and messages; add a few checks --- server/drivers/lb216.c | 282 +++++++++++++++++++-------------------- server/drivers/lcdm001.c | 230 ++++++++++++++++--------------- 2 files changed, 248 insertions(+), 264 deletions(-) diff --git a/server/drivers/lb216.c b/server/drivers/lb216.c index f0aeb2b..abc9425 100644 --- a/server/drivers/lb216.c +++ b/server/drivers/lb216.c @@ -50,7 +50,7 @@ typedef enum { beat = 8 } custom_type; -static int fd; +static int fd = -1; static char *framebuf = NULL; static int width = LCD_DEFAULT_WIDTH; static int height = LCD_DEFAULT_HEIGHT; @@ -76,7 +76,7 @@ MODULE_EXPORT int LB216_init(Driver * drvthis) { struct termios portset; - int reboot=0; + int reboot = 0; char device[256] = LB216_DEFAULT_DEVICE; int speed = LB216_DEFAULT_SPEED; int backlight_brightness = LB216_DEFAULT_BRIGHTNESS; @@ -88,6 +88,7 @@ LB216_init(Driver * drvthis) strncpy(device, drvthis->config_get_string(drvthis->name, "Device", 0, LB216_DEFAULT_DEVICE), sizeof(device)); device[sizeof(device)-1] = '\0'; + report(RPT_INFO, "%s: using Device %s", drvthis->name, device); /* What speed to use */ speed = drvthis->config_get_int(drvthis->name, "Speed", 0, LB216_DEFAULT_SPEED); @@ -95,76 +96,77 @@ LB216_init(Driver * drvthis) if (speed == 2400) speed = B2400; else if (speed == 9600) speed = B9600; else { - report(RPT_WARNING, "lb216_init: Illegal speed: %d. Must be 2400 or 9600. Using default.\n", speed); + report(RPT_WARNING, "%s: illegal Speed: %d; must be 2400 or 9600; using default %d", + drvthis->name, speed, LB216_DEFAULT_SPEED); speed = B9600; } /* Which backlight brightness */ - backlight_brightness = drvthis->config_get_int ( drvthis->name , "Brightness" , 0 , LB216_DEFAULT_BRIGHTNESS); + backlight_brightness = drvthis->config_get_int(drvthis->name, "Brightness", 0, LB216_DEFAULT_BRIGHTNESS); if ((backlight_brightness < 0) || (backlight_brightness > 255)) { - report (RPT_WARNING, "lb216_init: Brightness must be between 0 and 255. Using default value.\n"); + report(RPT_WARNING, "%s: Brightness must be between 0 and 255; using default %d", + drvthis->name, backlight_brightness); backlight_brightness = LB216_DEFAULT_BRIGHTNESS; } /* Reboot display? */ - reboot = drvthis->config_get_bool( drvthis->name , "Reboot", 0, 0); - if (reboot) - report (RPT_INFO, "LCDd: rebooting LB216 LCD...\n"); + reboot = drvthis->config_get_bool(drvthis->name , "Reboot", 0, 0); /* End of config file parsing */ - // Set up io port correctly, and open it... - fd = open(device, O_RDWR | O_NOCTTY | O_NDELAY); - if (fd == -1) - { - report(RPT_ERR, "lb216_init: open(%s) failed (%s)\n", device, strerror(errno)); - return -1; - } - report(RPT_DEBUG, "lb216_init: opened device %s\n", device); + // Set up io port correctly, and open it... + fd = open(device, O_RDWR | O_NOCTTY | O_NDELAY); + if (fd == -1) { + report(RPT_ERR, "%s: open(%s) failed (%s)", drvthis->name, device, strerror(errno)); + return -1; + } + report(RPT_DEBUG, "%s: opened device %s", drvthis->name, device); - tcgetattr(fd, &portset); + tcgetattr(fd, &portset); - // We use RAW mode + // We use RAW mode #ifdef HAVE_CFMAKERAW - // The easy way - cfmakeraw( &portset ); + // The easy way + cfmakeraw(&portset); #else - // The hard way - portset.c_iflag &= ~( IGNBRK | BRKINT | PARMRK | ISTRIP - | INLCR | IGNCR | ICRNL | IXON ); - portset.c_oflag &= ~OPOST; - portset.c_lflag &= ~( ECHO | ECHONL | ICANON | ISIG | IEXTEN ); - portset.c_cflag &= ~( CSIZE | PARENB | CRTSCTS ); - portset.c_cflag |= CS8 | CREAD | CLOCAL ; + // The hard way + portset.c_iflag &= ~( IGNBRK | BRKINT | PARMRK | ISTRIP + | INLCR | IGNCR | ICRNL | IXON ); + portset.c_oflag &= ~OPOST; + portset.c_lflag &= ~( ECHO | ECHONL | ICANON | ISIG | IEXTEN ); + portset.c_cflag &= ~( CSIZE | PARENB | CRTSCTS ); + portset.c_cflag |= CS8 | CREAD | CLOCAL ; #endif - // Set port speed - cfsetospeed (&portset, speed); - cfsetispeed (&portset, B0); + // Set port speed + cfsetospeed(&portset, speed); + cfsetispeed(&portset, B0); - // Do it... - tcsetattr(fd, TCSANOW, &portset); + // Do it... + tcsetattr(fd, TCSANOW, &portset); - // Make sure the frame buffer is there... - framebuf = malloc (width * height); - if (framebuf == NULL) { - report(RPT_ERR, "lb216_init: unable to create framebuffer.\n"); - return -1; - } - memset (framebuf, ' ', width * height); + // Make sure the frame buffer is there... + framebuf = malloc(width * height); + if (framebuf == NULL) { + report(RPT_ERR, "%s: unable to create framebuffer", drvthis->name); + return -1; + } + memset (framebuf, ' ', width * height); - // Set display-specific stuff.. - if (reboot) - { - LB216_reboot(); - sleep(4); - reboot=0; - } - sleep(1); - LB216_hidecursor(); - LB216_backlight(drvthis, backlight_brightness); + // Set display-specific stuff.. + if (reboot) { + report(RPT_INFO, "%s: rebooting LCD...", drvthis->name); + LB216_reboot(); + sleep(4); + reboot = 0; + } + sleep(1); + LB216_hidecursor(); + LB216_backlight(drvthis, backlight_brightness); - return 0; + report(RPT_DEBUG, "%s: init() done", drvthis->name); + + return 1; } @@ -175,7 +177,8 @@ LB216_init(Driver * drvthis) MODULE_EXPORT void LB216_close(Driver * drvthis) { - close (fd); + if (fd >= 0) + close(fd); if (framebuf) free(framebuf); @@ -188,7 +191,7 @@ LB216_close(Driver * drvthis) MODULE_EXPORT int LB216_width (Driver *drvthis) { - return width; + return width; } ///////////////////////////////////////////////////////////////// @@ -197,7 +200,7 @@ LB216_width (Driver *drvthis) MODULE_EXPORT int LB216_height (Driver *drvthis) { - return height; + return height; } ///////////////////////////////////////////////////////////////// @@ -206,7 +209,7 @@ LB216_height (Driver *drvthis) MODULE_EXPORT void LB216_clear (Driver * drvthis) { - memset (framebuf, ' ', width * height); + memset(framebuf, ' ', width * height); } @@ -217,21 +220,20 @@ MODULE_EXPORT void LB216_flush(Driver * drvthis) { char out[LCD_MAX_WIDTH * LCD_MAX_HEIGHT]; - int i,j; + int i, j; - snprintf (out, sizeof(out), "%c%c", 254,80); + snprintf(out, sizeof(out), "%c%c", 254, 80); write(fd, out, 2); - for(j=0; j=2) { - snprintf (out, sizeof(out),"%c%c",254,148+(64*(j-2))); - } else { - snprintf (out, sizeof(out),"%c%c",254,128+(64*(j))); - } + for (j = 0; j < height; j++) { + if (j >= 2) + snprintf(out, sizeof(out), "%c%c", 254, 148 + (64 * (j - 2))); + else + snprintf(out, sizeof(out), "%c%c", 254, 128 + (64 * j)); write(fd, out, 2); - for(i=0; i= 0) c += 128; +//if (c < 32 && c >= 0) c += 128; // framebuf[(y*width) + x] = c; // char chr[1]; -// snprintf (chr, sizeof(chr), "%c", c); +// snprintf(chr, sizeof(chr), "%c", c); // Above two lines are incorrect (Joris) char chr[2]; chr[0] = c; chr[1] = 0; - LB216_string (drvthis, x, y, chr); + LB216_string(drvthis, x, y, chr); } @@ -269,15 +271,9 @@ MODULE_EXPORT void LB216_backlight(Driver * drvthis, int on) { char out[4]; - if(on) - { - snprintf (out, sizeof(out), "%c%c", 254, 253); - } - else - { - snprintf (out, sizeof(out), "%c%c", 254, 252); - } - write(fd, out, 2); + + snprintf(out, sizeof(out), "%c%c", 254, (on) ? 253 : 252); + write(fd, out, 2); } @@ -287,7 +283,8 @@ LB216_backlight(Driver * drvthis, int on) static void LB216_hidecursor() { char out[4]; - snprintf (out, sizeof(out), "%c%c", 254,12); + + snprintf(out, sizeof(out), "%c%c", 254, 12); write(fd, out, 2); } @@ -297,7 +294,8 @@ static void LB216_hidecursor() static void LB216_reboot() { char out[4]; - snprintf (out, sizeof(out), "%c%c", 254,1); + + snprintf(out, sizeof(out), "%c%c", 254, 1); write(fd, out, 2); } @@ -305,21 +303,17 @@ static void LB216_reboot() MODULE_EXPORT void LB216_string (Driver * drvthis, int x, int y, char string[]) { - int i; - char c; + int i; //printf("%d,%d:%s\n",x,y,string); - y--;x--; - for(i=0; string[i]; i++) - { - c = string[i]; - switch(c) - { - case '\254': c = '#'; break; - } - framebuf[(y*width) + x+i] = c; - } + y--;x--; + for (i = 0; string[i] != '\0'; i++) { + char c = string[i]; + if (c == '\254') /* is this correct ? */ + c= '#'; + framebuf[(y * width) + x + i] = c; + } } ///////////////////////////////////////////////////////////////// @@ -399,15 +393,15 @@ LB216_init_vbar(Driver * drvthis) 1,1,1,1,1, }; - if(custom!=vbar) { - LB216_set_char(drvthis, 1,a); - LB216_set_char(drvthis, 2,b); - LB216_set_char(drvthis, 3,c); - LB216_set_char(drvthis, 4,d); - LB216_set_char(drvthis, 5,e); - LB216_set_char(drvthis, 6,f); - LB216_set_char(drvthis, 7,g); - custom=vbar; + if (custom != vbar) { + LB216_set_char(drvthis, 1, a); + LB216_set_char(drvthis, 2, b); + LB216_set_char(drvthis, 3, c); + LB216_set_char(drvthis, 4, d); + LB216_set_char(drvthis, 5, e); + LB216_set_char(drvthis, 6, f); + LB216_set_char(drvthis, 7, g); + custom = vbar; } } @@ -469,13 +463,13 @@ LB216_init_hbar(Driver * drvthis) 1,1,1,1,1, }; - if(custom!=hbar) { - LB216_set_char(drvthis, 1,a); - LB216_set_char(drvthis, 2,b); - LB216_set_char(drvthis, 3,c); - LB216_set_char(drvthis, 4,d); - LB216_set_char(drvthis, 5,e); - custom=hbar; + if (custom != hbar) { + LB216_set_char(drvthis, 1, a); + LB216_set_char(drvthis, 2, b); + LB216_set_char(drvthis, 3, c); + LB216_set_char(drvthis, 4, d); + LB216_set_char(drvthis, 5, e); + custom = hbar; } } @@ -485,18 +479,17 @@ LB216_init_hbar(Driver * drvthis) MODULE_EXPORT void LB216_vbar(Driver * drvthis, int x, int len) { - char map[9] = {32, 1, 2, 3, 4, 5, 6, 7, 255 }; - - + char map[9] = { 32, 1, 2, 3, 4, 5, 6, 7, 255 }; int y; - for(y=height; y > 0 && len>0; y--) - { - if(len >= cellheight) LB216_chr(drvthis, x, y, 255); - else LB216_chr(drvthis, x, y, map[len]); - - len -= cellheight; - } + + for (y = height; y > 0 && len > 0; y--) { + if (len >= cellheight) + LB216_chr(drvthis, x, y, map[8]); + else + LB216_chr(drvthis, x, y, map[len]); + len -= cellheight; + } } ///////////////////////////////////////////////////////////////// @@ -507,17 +500,14 @@ LB216_hbar(Driver * drvthis, int x, int y, int len) { char map[7] = { 32, 1, 2, 3, 4, 5 }; - for(; x<=width && len>0; x++) - { - if(len >= cellwidth) LB216_chr(drvthis, x,y,map[5]); - else LB216_chr(drvthis, x, y, map[len]); - - //printf ("%d,",len); - len -= cellwidth; - - } -// printf ("\n"); + for ( ; x <= width && len > 0; x++) { + if (len >= cellwidth) + LB216_chr(drvthis, x, y, map[5]); + else + LB216_chr(drvthis, x, y, map[len]); + len -= cellwidth; + } } @@ -533,28 +523,28 @@ LB216_set_char(Driver * drvthis, int n, char *dat) { char out[4]; int row, col; - int letter; - if(n < 0 || n > 7) return; - n=64+(8*n); - if(!dat) return; + if ((n < 0) || (n > 7)) + return; + if (!dat) + return; - snprintf (out, sizeof(out), "%c%c", 254, n); + snprintf(out, sizeof(out), "%c%c", 254, 64 + (8 * n)); write(fd, out, 2); - for(row=0; row 0); + letter |= (dat[(row * cellwidth) + col] > 0); } - snprintf (out, sizeof(out),"%c",letter); + snprintf(out, sizeof(out), "%c", letter); write(fd, out, 1); } } + MODULE_EXPORT int LB216_icon(Driver * drvthis, int x, int y, int icon) { @@ -578,21 +568,21 @@ LB216_icon(Driver * drvthis, int x, int y, int icon) 1, 1, 0, 1, 1, 1, 1, 1, 1, 1 }; - switch( icon ) - { + switch (icon) { case ICON_BLOCK_FILLED: - LB216_chr( drvthis, x, y, 255 ); + LB216_chr(drvthis, x, y, 255); break; case ICON_HEART_FILLED: - LB216_set_char( drvthis, 0, heart_filled ); - LB216_chr( drvthis, x, y, 0 ); + LB216_set_char(drvthis, 0, heart_filled); + LB216_chr(drvthis, x, y, 0); break; case ICON_HEART_OPEN: - LB216_set_char( drvthis, 0, heart_open ); - LB216_chr( drvthis, x, y, 0 ); + LB216_set_char(drvthis, 0, heart_open); + LB216_chr(drvthis, x, y, 0); break; default: return -1; } return 0; } + diff --git a/server/drivers/lcdm001.c b/server/drivers/lcdm001.c index 5b4c6f5..903e6ff 100644 --- a/server/drivers/lcdm001.c +++ b/server/drivers/lcdm001.c @@ -64,7 +64,7 @@ //#include "configfile.h" -int fd; +int fd = -1; static int clear = 1; static char icon_char = '@'; static char pause_key = DOWN_KEY, back_key = LEFT_KEY, forward_key = RIGHT_KEY, main_menu_key = UP_KEY; @@ -78,35 +78,36 @@ MODULE_EXPORT int stay_in_foreground = 0; MODULE_EXPORT int supports_multiple = 0; MODULE_EXPORT char *symbol_prefix = "lcdm001_"; -static void lcdm001_cursorblink (Driver *drvthis, int on); -static char lcdm001_parse_keypad_setting ( Driver *drvthis, char * keyname, char * default_value ); +static void lcdm001_cursorblink(Driver *drvthis, int on); +static char lcdm001_parse_keypad_setting(Driver *drvthis, char * keyname, char * default_value); #define ValidX(x) if ((x) > width) { (x) = width; } else (x) = (x) < 1 ? 1 : (x); #define ValidY(y) if ((y) > height) { (y) = height; } else (y) = (y) < 1 ? 1 : (y); // Parse one key from the configfile -static char lcdm001_parse_keypad_setting (Driver *drvthis, char * keyname, char * default_value) +static char lcdm001_parse_keypad_setting(Driver *drvthis, char * keyname, char * default_value) { char return_val = 0; - if (strcmp( drvthis->config_get_string ( drvthis->name, keyname, 0, default_value), "LeftKey")==0) { - return_val=LEFT_KEY; - } else if (strcmp( drvthis->config_get_string ( drvthis->name, keyname, 0, default_value), "RightKey")==0) { - return_val=RIGHT_KEY; - } else if (strcmp( drvthis->config_get_string ( drvthis->name, keyname, 0, default_value), "UpKey")==0) { - return_val=UP_KEY; - } else if (strcmp( drvthis->config_get_string ( drvthis->name, keyname, 0, default_value), "DownKey")==0) { - return_val=DOWN_KEY; + if (strcmp(drvthis->config_get_string(drvthis->name, keyname, 0, default_value), "LeftKey") == 0) { + return_val = LEFT_KEY; + } else if (strcmp(drvthis->config_get_string(drvthis->name, keyname, 0, default_value), "RightKey") == 0) { + return_val = RIGHT_KEY; + } else if (strcmp(drvthis->config_get_string(drvthis->name, keyname, 0, default_value), "UpKey") == 0) { + return_val = UP_KEY; + } else if (strcmp(drvthis->config_get_string(drvthis->name, keyname, 0, default_value), "DownKey") == 0) { + return_val = DOWN_KEY; } else { - report (RPT_WARNING, "LCDM001: Invalid config file setting for %s. Using default value %s.\n", keyname, default_value); - if (strcmp (default_value, "LeftKey")==0) { - return_val=LEFT_KEY; - } else if (strcmp (default_value, "RightKey")==0) { - return_val=RIGHT_KEY; - } else if (strcmp (default_value, "UpKey")==0) { - return_val=UP_KEY; - } else if (strcmp (default_value, "DownKey")==0) { - return_val=DOWN_KEY; + report(RPT_WARNING, "%s: invalid config setting for %s; using default %s", + drvthis->name, keyname, default_value); + if (strcmp(default_value, "LeftKey") == 0) { + return_val = LEFT_KEY; + } else if (strcmp(default_value, "RightKey") == 0) { + return_val = RIGHT_KEY; + } else if (strcmp(default_value, "UpKey") == 0) { + return_val = UP_KEY; + } else if (strcmp(default_value, "DownKey") == 0) { + return_val = DOWN_KEY; } } return return_val; @@ -114,14 +115,14 @@ static char lcdm001_parse_keypad_setting (Driver *drvthis, char * keyname, char /* Set cursorblink on/off */ static void -lcdm001_cursorblink (Driver *drvthis, int on) +lcdm001_cursorblink(Driver *drvthis, int on) { if (on) { - write (fd, "~K1", 3); - debug(RPT_INFO, "LCDM001: cursorblink turned on"); + write(fd, "~K1", 3); + debug(RPT_INFO, "%s: cursorblink turned on", drvthis->name); } else { - write (fd, "~K0", 3); - debug(RPT_INFO, "LCDM001: cursorblink turned off"); + write(fd, "~K0", 3); + debug(RPT_INFO, "%s: cursorblink turned off", drvthis->name); } } @@ -136,56 +137,50 @@ MODULE_EXPORT int lcdm001_init (Driver *drvthis) { char device[200]; - int speed=B38400; + int speed = B38400; struct termios portset; - char out[5]=""; + char out[5] = ""; - debug( RPT_INFO, "LCDM001: init(%p)", drvthis ); + debug(RPT_INFO, "LCDM001: init(%p)", drvthis); - framebuf = malloc (width * height); - - if (!framebuf) { - report(RPT_ERR, "\nError: unable to create LCDM001 framebuffer.\n"); + framebuf = malloc(width * height); + if (framebuf == NULL) { + report(RPT_ERR, "%s: unable to create framebuffer", drvthis->name); return -1; } - memset (framebuf, ' ', width * height); + memset(framebuf, ' ', width * height); // READ CONFIG FILE: // which serial device should be used - strncpy(device, drvthis->config_get_string ( drvthis->name , "Device" , 0 , "/dev/lcd"),sizeof(device)); - device[sizeof(device)-1]=0; - report (RPT_INFO,"LCDM001: Using device: %s", device); + strncpy(device, drvthis->config_get_string(drvthis->name, "Device", 0, "/dev/lcd"), sizeof(device)); + device[sizeof(device)-1] = '\0'; + report(RPT_INFO, "%s: using Device %s", drvthis->name, device); // keypad settings - pause_key = lcdm001_parse_keypad_setting (drvthis, "PauseKey", "DownKey"); - back_key = lcdm001_parse_keypad_setting (drvthis, "BackKey", "LeftKey"); - forward_key = lcdm001_parse_keypad_setting (drvthis, "ForwardKey", "RightKey"); - main_menu_key = lcdm001_parse_keypad_setting (drvthis, "MainMenuKey", "UpKey"); + pause_key = lcdm001_parse_keypad_setting(drvthis, "PauseKey", "DownKey"); + back_key = lcdm001_parse_keypad_setting(drvthis, "BackKey", "LeftKey"); + forward_key = lcdm001_parse_keypad_setting(drvthis, "ForwardKey", "RightKey"); + main_menu_key = lcdm001_parse_keypad_setting(drvthis, "MainMenuKey", "UpKey"); // Set up io port correctly, and open it... - debug( RPT_DEBUG, "LCDM001: Opening serial device: %s", device); + debug(RPT_DEBUG, "%s: Opening serial device: %s", __FUNCTION__, device); fd = open(device, O_RDWR | O_NOCTTY | O_NDELAY); - if (fd == -1) - { - switch (errno) { - case ENOENT: report( RPT_ERR, "LCDM001: lcdm001_init() failed: Device file missing: %s\n", device); - break; - case EACCES: report( RPT_ERR, "LCDM001: lcdm001_init() failed: Could not open device: %s\n", device); - report( RPT_ERR, "LCDM001: lcdm001_init() failed: Make sure you have rw access to %s!\n", device); - break; - default: report( RPT_ERR, "LCDM001: lcdm001_init() failed (%s)\n", strerror (errno)); - break; - } + if (fd == -1) { + report(RPT_ERR, "%s: open(%d) failed (%s)", + drvthis->name, device, strerror(errno)); + if (errno == EACCES) + report(RPT_ERR, "%s: make sure you have rw access to %s!", + drvthis->name, device); return -1; - } else { - report (RPT_INFO, "opened LCDM001 display on %s", device); } + report(RPT_INFO, "%s: opened display on %s", drvthis->name, device); + tcgetattr(fd, &portset); #ifdef HAVE_CFMAKERAW /* The easy way: */ - cfmakeraw( &portset ); + cfmakeraw(&portset); #else /* The hard way: */ portset.c_iflag &= ~( IGNBRK | BRKINT | PARMRK | ISTRIP @@ -193,7 +188,7 @@ lcdm001_init (Driver *drvthis) portset.c_oflag &= ~OPOST; portset.c_lflag &= ~( ECHO | ECHONL | ICANON | ISIG | IEXTEN ); portset.c_cflag &= ~( CSIZE | PARENB | CRTSCTS ); - portset.c_cflag |= CS8 | CREAD | CLOCAL ; + portset.c_cflag |= CS8 | CREAD | CLOCAL; #endif cfsetospeed(&portset, speed); cfsetispeed(&portset, speed); @@ -201,14 +196,16 @@ lcdm001_init (Driver *drvthis) tcflush(fd, TCIOFLUSH); // Reset and clear the LCDM001 - write (fd, "~C", 2); + write(fd, "~C", 2); //Set cursorblink default - lcdm001_cursorblink (drvthis, DEFAULT_CURSORBLINK); + lcdm001_cursorblink(drvthis, DEFAULT_CURSORBLINK); // Turn all LEDs off - snprintf (out, sizeof(out), "\%cL%c%c", 126, 0, 0); - write (fd, out, 4); + snprintf(out, sizeof(out), "\%cL%c%c", 126, 0, 0); + write(fd, out, 4); - return 0; + report(RPT_DEBUG, "%s: init() done", drvthis->name); + + return 1; } /* Below here, you may use either lcd.framebuf or driver->framebuf.. @@ -219,16 +216,21 @@ lcdm001_init (Driver *drvthis) MODULE_EXPORT void lcdm001_close (Driver *drvthis) { - char out[5]; - if(framebuf) free (framebuf); + if (framebuf != NULL) + free(framebuf); framebuf = NULL; - //switch off all LEDs - snprintf (out, sizeof(out), "\%cL%c%c", 126, 0, 0); - write (fd, out, 4); - close (fd); + if (fd >= 0) { + char out[5]; - report (RPT_INFO, "LCDM001: closed"); + //switch off all LEDs + snprintf(out, sizeof(out), "\%cL%c%c", 126, 0, 0); + write(fd, out, 4); + close(fd); + } + fd = -1; + + report(RPT_INFO, "%s: closed", drvthis->name); } ///////////////////////////////////////////////////////////////// @@ -256,14 +258,14 @@ MODULE_EXPORT void lcdm001_clear (Driver *drvthis) { if (framebuf != NULL) - memset (framebuf, ' ', (width * height)); + memset(framebuf, ' ', (width * height)); /* An instant clear is NOT neccessary, it only makes the display * flicker */ - /*write (fd, "~C", 2);*/ /* instant clear...*/ + /*write(fd, "~C", 2);*/ /* instant clear...*/ clear = 1; - debug (RPT_DEBUG, "LCDM001: cleared screen"); + debug(RPT_DEBUG, "LCDM001: cleared screen"); } ////////////////////////////////////////////////////////////////// @@ -276,9 +278,9 @@ lcdm001_flush (Driver *drvthis) //TODO: Check whether this is still correct - write(fd,framebuf,80); + write(fd, framebuf, 80); - debug (RPT_DEBUG, "LCDM001: frame buffer flushed"); + debug(RPT_DEBUG, "LCDM001: frame buffer flushed"); } ///////////////////////////////////////////////////////////////// @@ -293,9 +295,8 @@ lcdm001_chr (Driver *drvthis, int x, int y, char c) ValidX(x); ValidY(y); - if (c==0) { + if (c == '\0') c = icon_char; //heartbeat workaround - } // write to frame buffer y--; x--; // translate to 0-coords @@ -303,7 +304,7 @@ lcdm001_chr (Driver *drvthis, int x, int y, char c) offset = (y * width) + x; framebuf[offset] = c; - debug (RPT_DEBUG, "LCDM001: writing character %02X to position (%d,%d)", c, x, y); + debug(RPT_DEBUG, "LCDM001: writing character %02X to position (%d,%d)", c, x, y); } ///////////////////////////////////////////////////////////////// @@ -321,11 +322,11 @@ lcdm001_string (Driver *drvthis, int x, int y, char *string) x--; y--; // Convert 1-based coords to 0-based... offset = (y * width) + x; siz = (width * height) - offset - 1; - siz = siz > strlen(string) ? strlen(string) : siz; + siz = (siz > strlen(string)) ? strlen(string) : siz; memcpy(framebuf + offset, string, siz); - debug (RPT_DEBUG, "LCDM001: printed string at (%d,%d)", x, y); + debug(RPT_DEBUG, "LCDM001: printed string at (%d,%d)", x, y); } ///////////////////////////////////////////////////////////////// @@ -336,20 +337,18 @@ lcdm001_output (Driver *drvthis, int state) char out[5]; int one = 0, two = 0; - if (state<=255) - { - one=state; - two=0; + if (state <= 255) { + one = state; + two = 0; } - else - { + else { one = state & 0xff; two = (state >> 8) & 0xff; } - snprintf (out, sizeof(out), "~L%c%c",one,two); - write(fd,out,4); + snprintf(out, sizeof(out), "~L%c%c", one, two); + write(fd, out, 4); - debug (RPT_DEBUG, "LCDM001: current LED state: %d", state); + debug(RPT_DEBUG, "LCDM001: current LED state %d", state); } ///////////////////////////////////////////////////////////////// @@ -358,22 +357,20 @@ lcdm001_output (Driver *drvthis, int state) MODULE_EXPORT void lcdm001_old_vbar(Driver *drvthis, int x, int len) { - int y = 4; + int y = 4; - debug (RPT_DEBUG , "LCDM001: vertical bar at %d set to %d", x, len); + debug(RPT_DEBUG , "LCDM001: vertical bar at %d set to %d", x, len); - while (len >= LCD_DEFAULT_CELLHEIGHT) - { - lcdm001_chr(drvthis, x, y, 0xFF); - len -= LCD_DEFAULT_CELLHEIGHT; - y--; - } + while (len >= LCD_DEFAULT_CELLHEIGHT) { + lcdm001_chr(drvthis, x, y, 0xFF); + len -= LCD_DEFAULT_CELLHEIGHT; + y--; + } - if(!len) - return; - - //TODO: Distinguish between len>=4 and len<4 + if (!len) + return; + //TODO: Distinguish between len>=4 and len<4 } ///////////////////////////////////////////////////////////////// @@ -382,28 +379,25 @@ lcdm001_old_vbar(Driver *drvthis, int x, int len) MODULE_EXPORT void lcdm001_old_hbar(Driver *drvthis, int x, int y, int len) { + ValidX(x); + ValidY(y); - ValidX(x); - ValidY(y); + debug(RPT_DEBUG, "LCDM001: horizontal bar at %d set to %d", x, len); - debug (RPT_DEBUG, "LCDM001: horizontal bar at %d set to %d", x, len); + //TODO: Improve this function - //TODO: Improve this function + while ((x <= width) && (len > 0)) { + if (len < LCD_DEFAULT_CELLWIDTH) { + //lcdm001_chr(x, y, 0x98 + len); + break; + } - while((x <= width) && (len > 0)) - { - if(len < LCD_DEFAULT_CELLWIDTH) - { - //lcdm001_chr(x, y, 0x98 + len); - break; - } + lcdm001_chr(drvthis, x, y, 0xFF); + len -= LCD_DEFAULT_CELLWIDTH; + x++; + } - lcdm001_chr(drvthis, x, y, 0xFF); - len -= LCD_DEFAULT_CELLWIDTH; - x++; - } - - return; + return; } ///////////////////////////////////////////////////////////////// @@ -444,7 +438,7 @@ lcdm001_get_key (Driver *drvthis) char in = '\0'; const char *key = NULL; - read (fd, &in, 1); + read(fd, &in, 1); if (in == pause_key) { key = "Enter"; } else if (in == back_key) {