fixes for the serial hd44780 subdrivers (Matteo Pillon)
This commit is contained in:
@@ -28,6 +28,7 @@ v.0.5dev (ongoing development)
|
||||
* replace obsolete index() by strchr() (Guillaume LECERF)
|
||||
* fixes for CwLinux driver (Gideon Tsang)
|
||||
+ new ConnectionType vdr-wakeup in hd44780 driver
|
||||
* fixes for the hd44780-serial drivers (Matteo Pillon)
|
||||
|
||||
v.0.5.1
|
||||
+ config file support in lcdproc client (Andrew Foss)
|
||||
|
||||
@@ -150,6 +150,9 @@ typedef struct hwDependentFns {
|
||||
// Output "data" to output latch if there is one
|
||||
void (*output) (PrivateData *p, int data);
|
||||
|
||||
// Close the interface on shutdown
|
||||
void (*close) (PrivateData *p);
|
||||
|
||||
} HD44780_functions; /* for want of a better name :-) */
|
||||
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Driver for serial connected hd44780 LCDs
|
||||
* Copyright (C) 2006 Matteo Pillon <matteo.pillon@gmail.com>
|
||||
* Copyright (C) 2006-2007 Matteo Pillon <matteo.pillon@gmail.com>
|
||||
*
|
||||
* Some parts are based on the original pic-an-lcd driver code
|
||||
* Copyright (C) 1997, Matthias Prinke <m.prinke@trashcan.mcnet.de>
|
||||
@@ -121,6 +121,7 @@ static int lastdisplayID;
|
||||
void serial_HD44780_senddata (PrivateData *p, unsigned char displayID, unsigned char flags, unsigned char ch);
|
||||
void serial_HD44780_backlight (PrivateData *p, unsigned char state);
|
||||
unsigned char serial_HD44780_scankeypad (PrivateData *p);
|
||||
void serial_HD44780_close (PrivateData *p);
|
||||
|
||||
// initialize the driver
|
||||
int
|
||||
@@ -224,6 +225,7 @@ hd_init_serial (Driver *drvthis)
|
||||
p->hd44780_functions->backlight = serial_HD44780_backlight;
|
||||
if (p->have_keypad)
|
||||
p->hd44780_functions->scankeypad = serial_HD44780_scankeypad;
|
||||
p->hd44780_functions->close = serial_HD44780_close;
|
||||
|
||||
/* Do initialization */
|
||||
if (SERIAL_IF.if_bits == 8) {
|
||||
@@ -298,3 +300,11 @@ serial_HD44780_scankeypad (PrivateData *p)
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void
|
||||
serial_HD44780_close (PrivateData *p)
|
||||
{
|
||||
if (SERIAL_IF.end_code)
|
||||
write(p->fd, &SERIAL_IF.end_code, 1);
|
||||
close(p->fd);
|
||||
}
|
||||
|
||||
@@ -21,18 +21,19 @@ typedef struct SerialInterface {
|
||||
char backlight_escape; /* leave to 0 is the interface uses on/off codes */
|
||||
char backlight_off;
|
||||
char backlight_on; /* leave these two to 0 is backlight_escape is set */
|
||||
char multiple_displays;
|
||||
char multiple_displays;
|
||||
char end_code; /* code to send on shutdown */
|
||||
} SerialInterface;
|
||||
|
||||
/* List of connectiontypes managed by this driver, if you change
|
||||
something here, remember also to change hd44780-drivers.h */
|
||||
static const SerialInterface serial_interfaces[] = {
|
||||
/* name instr data v ^ bitrate bits K esc B Besc Boff Bon Multi */
|
||||
{ "picanlcd", 0x11, 0x12, 0x00, 0x20, 9600, 8, 0, 0x00, 0, 0, 0, 0, 0 },
|
||||
{ "lcdserializer", 0xFE, 0, 0x00, 0x00, 9600, 8, 0, 0x00, 0, 0, 0, 0, 0 },
|
||||
{ "los-panel", 0xFE, 0, 0x00, 0x00, 9600, 4, 1, 0xFE, 1, 0xFF, 0, 0, 0 },
|
||||
{ "vdr-lcd", 0xFE, 0, 0x00, 0x00, 9600, 4, 0, 0x00, 0, 0, 0, 0, 0 },
|
||||
{ "vdr-wakeup", 0xC0, 0xC4, 0xC0, 0xD0, 9600, 4, 0, 0x00, 1, 0, 0xC9, 0xC8, 1 }
|
||||
/* name instr data v ^ bitrate bits K esc B Besc Boff Bon Multi End */
|
||||
{ "picanlcd", 0x11, 0x12, 0x00, 0x20, 9600, 8, 0, 0x00, 0, 0, 0, 0, 0, 0 },
|
||||
{ "lcdserializer", 0xFE, 0, 0x00, 0x00, 9600, 8, 0, 0x00, 0, 0, 0, 0, 0, 0 },
|
||||
{ "los-panel", 0xFE, 0, 0x00, 0x00, 9600, 4, 1, 0xFE, 1, 0xFF, 0, 0, 0, 0 },
|
||||
{ "vdr-lcd", 0xFE, 0, 0x00, 0x00, 9600, 4, 0, 0x00, 0, 0, 0, 0, 0, 0 },
|
||||
{ "vdr-wakeup", 0xC0, 0xC4, 0xC0, 0xD0, 9600, 4, 0, 0x00, 1, 0, 0xC9, 0xC8, 1, 0xCF }
|
||||
};
|
||||
|
||||
/* initialize this particular driver */
|
||||
|
||||
@@ -328,6 +328,7 @@ HD44780_init (Driver * drvthis)
|
||||
p->hd44780_functions->uPause = uPause;
|
||||
p->hd44780_functions->scankeypad = HD44780_scankeypad;
|
||||
p->hd44780_functions->output = NULL;
|
||||
p->hd44780_functions->close = NULL;
|
||||
|
||||
// Do connection type specific display init
|
||||
if (connectionMapping[p->connectiontype_index].init_fn(drvthis) != 0)
|
||||
@@ -409,6 +410,9 @@ HD44780_close(Driver *drvthis)
|
||||
{
|
||||
PrivateData *p = (PrivateData *) drvthis->private_data;
|
||||
|
||||
if (p->hd44780_functions->close)
|
||||
p->hd44780_functions->close(p);
|
||||
|
||||
if (p != NULL) {
|
||||
if (p->framebuf)
|
||||
free(p->framebuf);
|
||||
|
||||
Reference in New Issue
Block a user