strncpy instead of strcpy; no more dummy functions; general cleanup
This commit is contained in:
+33
-84
@@ -5,7 +5,9 @@
|
|||||||
//////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
/*LCDM001 does NOT support custom chars
|
/*LCDM001 does NOT support custom chars
|
||||||
So the output may look a bit strange*/
|
So the output may look a bit strange
|
||||||
|
Most of the "strange output" has been fixed by
|
||||||
|
using ASCII workarounds*/
|
||||||
|
|
||||||
/*All the functions neccessary for running "normal" clients
|
/*All the functions neccessary for running "normal" clients
|
||||||
have been implemented.
|
have been implemented.
|
||||||
@@ -37,7 +39,6 @@
|
|||||||
|
|
||||||
#include "lcd.h"
|
#include "lcd.h"
|
||||||
#include "lcdm001.h"
|
#include "lcdm001.h"
|
||||||
/*#include "shared/debug.h"*/
|
|
||||||
#include "shared/str.h"
|
#include "shared/str.h"
|
||||||
#include "shared/report.h"
|
#include "shared/report.h"
|
||||||
#include "configfile.h"
|
#include "configfile.h"
|
||||||
@@ -49,16 +50,10 @@ static void lcdm001_clear ();
|
|||||||
static void lcdm001_flush ();
|
static void lcdm001_flush ();
|
||||||
static void lcdm001_string (int x, int y, char string[]);
|
static void lcdm001_string (int x, int y, char string[]);
|
||||||
static void lcdm001_chr (int x, int y, char c);
|
static void lcdm001_chr (int x, int y, char c);
|
||||||
static int lcdm001_contrast (int contrast);
|
|
||||||
static void lcdm001_backlight (int on);
|
|
||||||
static void lcdm001_output (int on);
|
static void lcdm001_output (int on);
|
||||||
static void lcdm001_vbar (int x, int len);
|
static void lcdm001_vbar (int x, int len);
|
||||||
static void lcdm001_init_vbar ();
|
|
||||||
static void lcdm001_hbar (int x, int y, int len);
|
static void lcdm001_hbar (int x, int y, int len);
|
||||||
static void lcdm001_init_hbar ();
|
|
||||||
static void lcdm001_num (int x, int num);
|
static void lcdm001_num (int x, int num);
|
||||||
static void lcdm001_init_num ();
|
|
||||||
static void lcdm001_set_char (int n, char *dat);
|
|
||||||
static void lcdm001_icon (int which, char dest);
|
static void lcdm001_icon (int which, char dest);
|
||||||
static void lcdm001_flush_box (int lft, int top, int rgt, int bot);
|
static void lcdm001_flush_box (int lft, int top, int rgt, int bot);
|
||||||
static void lcdm001_draw_frame (char *dat);
|
static void lcdm001_draw_frame (char *dat);
|
||||||
@@ -68,8 +63,6 @@ static void lcdm001_heartbeat (int type);
|
|||||||
|
|
||||||
#define NotEnoughArgs (i + 1 > argc)
|
#define NotEnoughArgs (i + 1 > argc)
|
||||||
|
|
||||||
extern int debug_level;
|
|
||||||
|
|
||||||
lcd_logical_driver *lcdm001;
|
lcd_logical_driver *lcdm001;
|
||||||
int fd;
|
int fd;
|
||||||
static int clear = 1;
|
static int clear = 1;
|
||||||
@@ -148,7 +141,7 @@ lcdm001_cursorblink (int on)
|
|||||||
int
|
int
|
||||||
lcdm001_init (struct lcd_logical_driver *driver, char *args)
|
lcdm001_init (struct lcd_logical_driver *driver, char *args)
|
||||||
{
|
{
|
||||||
char device[20];
|
char device[256];
|
||||||
int speed=B38400;
|
int speed=B38400;
|
||||||
struct termios portset;
|
struct termios portset;
|
||||||
|
|
||||||
@@ -186,7 +179,8 @@ lcdm001_init (struct lcd_logical_driver *driver, char *args)
|
|||||||
//READ CONFIG FILE:
|
//READ CONFIG FILE:
|
||||||
|
|
||||||
//which serial device should be used
|
//which serial device should be used
|
||||||
strcpy(device, config_get_string ( DriverName , "Device" , 0 , "/dev/lcd"));
|
strncpy(device, config_get_string ( DriverName , "Device" , 0 , "/dev/lcd"),255);
|
||||||
|
if (strlen(device)>254) strncat(device, "\0", 1);
|
||||||
report (RPT_INFO,"LCDM001: Using device: %s", device);
|
report (RPT_INFO,"LCDM001: Using device: %s", device);
|
||||||
|
|
||||||
// Set up io port correctly, and open it...
|
// Set up io port correctly, and open it...
|
||||||
@@ -241,20 +235,24 @@ lcdm001_init (struct lcd_logical_driver *driver, char *args)
|
|||||||
driver->string = lcdm001_string;
|
driver->string = lcdm001_string;
|
||||||
driver->chr = lcdm001_chr;
|
driver->chr = lcdm001_chr;
|
||||||
driver->vbar =lcdm001_vbar;
|
driver->vbar =lcdm001_vbar;
|
||||||
driver->init_vbar = lcdm001_init_vbar;
|
//init_vbar is not needed
|
||||||
driver->hbar = lcdm001_hbar;
|
driver->hbar = lcdm001_hbar;
|
||||||
driver->init_hbar = lcdm001_init_hbar;
|
//init_hbar is not needed
|
||||||
driver->num = lcdm001_num;
|
driver->num = lcdm001_num;
|
||||||
driver->init_num = lcdm001_init_num;
|
//init_num is not needed
|
||||||
|
|
||||||
driver->init = lcdm001_init;
|
driver->init = lcdm001_init;
|
||||||
driver->close = lcdm001_close;
|
driver->close = lcdm001_close;
|
||||||
driver->flush = lcdm001_flush;
|
driver->flush = lcdm001_flush;
|
||||||
driver->flush_box = lcdm001_flush_box;
|
driver->flush_box = lcdm001_flush_box;
|
||||||
driver->contrast = lcdm001_contrast;
|
//contrast and backlight are not implemented as
|
||||||
driver->backlight = lcdm001_backlight;
|
//changing the contrast or the state of the backlight
|
||||||
|
//is not supported by the device
|
||||||
|
//Well ... you could make use of your screw driver and
|
||||||
|
//soldering iron ;)
|
||||||
driver->output = lcdm001_output;
|
driver->output = lcdm001_output;
|
||||||
driver->set_char = lcdm001_set_char;
|
//set_char is not implemented as custom chars are not
|
||||||
|
//supported by the device
|
||||||
driver->icon = lcdm001_icon;
|
driver->icon = lcdm001_icon;
|
||||||
driver->draw_frame = lcdm001_draw_frame;
|
driver->draw_frame = lcdm001_draw_frame;
|
||||||
|
|
||||||
@@ -264,50 +262,6 @@ lcdm001_init (struct lcd_logical_driver *driver, char *args)
|
|||||||
return fd;
|
return fd;
|
||||||
}
|
}
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////
|
|
||||||
// Writes a big number.
|
|
||||||
//
|
|
||||||
static void lcdm001_num (int x, int num)
|
|
||||||
{
|
|
||||||
int y, dx;
|
|
||||||
|
|
||||||
debug (RPT_DEBUG, "LCDM001: Writing big number \"%d\" at x = %d", num, x);
|
|
||||||
|
|
||||||
for (y = 1; y < 5; y++)
|
|
||||||
for (dx = 0; dx < 3; dx++)
|
|
||||||
lcdm001_chr (x + dx, y, num_icon[num][y-1][dx]);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void lcdm001_init_num ()
|
|
||||||
{
|
|
||||||
/*prepare for the use of _num in stupid driver. */
|
|
||||||
/*nothing to be done*/
|
|
||||||
}
|
|
||||||
|
|
||||||
/* DUMMY functions: */
|
|
||||||
static void
|
|
||||||
lcdm001_backlight (int on)
|
|
||||||
{
|
|
||||||
/*Go and get your soldering iron ...*/
|
|
||||||
}
|
|
||||||
|
|
||||||
static int
|
|
||||||
lcdm001_contrast (int contrast)
|
|
||||||
{
|
|
||||||
/*Go and get your screwdriver ...*/
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////
|
|
||||||
// Sets a custom character from 0-7...
|
|
||||||
static void
|
|
||||||
lcdm001_set_char (int n, char *dat)
|
|
||||||
{
|
|
||||||
/* custom chars are NOT supported */
|
|
||||||
}
|
|
||||||
|
|
||||||
/*End of DUMMY functions*/
|
|
||||||
|
|
||||||
// Below here, you may use either lcd.framebuf or driver->framebuf..
|
// Below here, you may use either lcd.framebuf or driver->framebuf..
|
||||||
// lcd.framebuf will be set to the appropriate buffer before calling
|
// lcd.framebuf will be set to the appropriate buffer before calling
|
||||||
// your driver.
|
// your driver.
|
||||||
@@ -445,32 +399,11 @@ lcdm001_output (int on)
|
|||||||
debug (RPT_DEBUG, "LCDM001: current LED state: %d", on);
|
debug (RPT_DEBUG, "LCDM001: current LED state: %d", on);
|
||||||
}
|
}
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////
|
|
||||||
// Tells the driver to get ready for vertical bargraphs.
|
|
||||||
//
|
|
||||||
static void lcdm001_init_vbar()
|
|
||||||
{
|
|
||||||
//printf("Init Vertical bars.\n");
|
|
||||||
|
|
||||||
//Nothing to be done
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////
|
|
||||||
// Tells the driver to get ready for horizontal bargraphs.
|
|
||||||
//
|
|
||||||
static void lcdm001_init_hbar()
|
|
||||||
{
|
|
||||||
//printf("Init Horizontal bars.\n");
|
|
||||||
//nothing to be done!
|
|
||||||
}
|
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////
|
||||||
// Draws a vertical bar, from the bottom of the screen up.
|
// Draws a vertical bar, from the bottom of the screen up.
|
||||||
//
|
//
|
||||||
static void
|
static void
|
||||||
lcdm001_vbar(int x, int len)
|
lcdm001_vbar(int x, int len)
|
||||||
{
|
{
|
||||||
int y = 4;
|
int y = 4;
|
||||||
|
|
||||||
@@ -520,6 +453,22 @@ lcdm001_hbar(int x, int y, int len)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////
|
||||||
|
// Writes a big number.
|
||||||
|
//
|
||||||
|
static void lcdm001_num (int x, int num)
|
||||||
|
{
|
||||||
|
int y, dx;
|
||||||
|
|
||||||
|
debug (RPT_DEBUG, "LCDM001: Writing big number \"%d\" at x = %d", num, x);
|
||||||
|
|
||||||
|
/*This function uses an ASCII emulation of big numbers*/
|
||||||
|
|
||||||
|
for (y = 1; y < 5; y++)
|
||||||
|
for (dx = 0; dx < 3; dx++)
|
||||||
|
lcdm001_chr (x + dx, y, num_icon[num][y-1][dx]);
|
||||||
|
}
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////
|
||||||
// Sets character 0 to an icon...
|
// Sets character 0 to an icon...
|
||||||
//
|
//
|
||||||
|
|||||||
Reference in New Issue
Block a user